PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.18
UiCore Elements – Free widgets and templates for Elementor v1.3.18
1.3.18 1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.2.0 1.2.1 1.2.2 1.2.3 All 42 releases
← All changes | includes/utils/form-component.php +1522 -1221 1.0.11 → 1.3.18 View file →
@@ -1,1221 +1,1522 @@
1 -<?php
2 -namespace UiCoreElements\Utils;
3 -
4 -use UiCoreElements\Helper;
5 -use Elementor\Controls_Manager;
6 -use Elementor\Group_Control_Typography;
7 -use Elementor\Group_Control_Border;
8 -use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
9 -use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
10 -
11 -defined('ABSPATH') || exit();
12 -
13 -/**
14 - * Register some Form Widgets controls and methods.
15 - */
16 -
17 -trait Form_Component {
18 -
19 - // Submission Controls
20 - function TRAIT_register_submit_email_controls($instance, $slug = '')
21 - {
22 - $instance->add_control(
23 - 'email_to' . $slug,
24 - [
25 - 'label' => esc_html__( 'To', 'uicore-elements' ),
26 - 'type' => Controls_Manager::TEXT,
27 - 'default' => get_option( 'admin_email' ),
28 - 'ai' => [
29 - 'active' => false,
30 - ],
31 - 'placeholder' => get_option( 'admin_email' ),
32 - 'label_block' => true,
33 - 'title' => esc_html__( 'Separate emails with commas', 'uicore-elements' ),
34 - 'render_type' => 'none',
35 - 'dynamic' => [
36 - 'active' => true,
37 - ],
38 - ]
39 - );
40 -
41 - /* translators: %s: Site title. */
42 - $default_message = sprintf( html_entity_decode( esc_html__( 'New message from "%s"', 'uicore-elements' ) ), get_option( 'blogname' ) );
43 -
44 - $instance->add_control(
45 - 'email_subject' . $slug,
46 - [
47 - 'label' => esc_html__( 'Subject', 'uicore-elements' ),
48 - 'type' => Controls_Manager::TEXT,
49 - 'default' => $default_message,
50 - 'ai' => [
51 - 'active' => false,
52 - ],
53 - 'placeholder' => $default_message,
54 - 'label_block' => true,
55 - 'render_type' => 'none',
56 - 'dynamic' => [
57 - 'active' => true,
58 - ],
59 - ]
60 - );
61 -
62 - $instance->add_control(
63 - 'email_content' . $slug,
64 - [
65 - 'label' => esc_html__( 'Message', 'uicore-elements' ),
66 - 'type' => Controls_Manager::TEXTAREA,
67 - 'default' => '[all-fields]',
68 - 'ai' => [
69 - 'active' => false,
70 - ],
71 - 'placeholder' => '[all-fields]',
72 - 'description' => sprintf(
73 - /* translators: %s: The [all-fields] shortcode. */
74 - esc_html__( 'By default, all form fields are sent via %s shortcode. To customize sent fields, copy the shortcode that appears inside each field and paste it above.', 'uicore-elements' ),
75 - '<code>[all-fields]</code>'
76 - ),
77 - 'render_type' => 'none',
78 - 'dynamic' => [
79 - 'active' => true,
80 - ],
81 - ]
82 - );
83 -
84 - $site_domain = Helper::get_site_domain();
85 -
86 - $instance->add_control(
87 - 'email_from' . $slug,
88 - [
89 - 'label' => esc_html__( 'From Email', 'uicore-elements' ),
90 - 'type' => Controls_Manager::TEXT,
91 - 'default' => 'email@' . $site_domain,
92 - 'ai' => [
93 - 'active' => false,
94 - ],
95 - 'render_type' => 'none',
96 - 'dynamic' => [
97 - 'active' => true,
98 - ],
99 - ]
100 - );
101 -
102 - $instance->add_control(
103 - 'email_from_name' . $slug,
104 - [
105 - 'label' => esc_html__( 'From Name', 'uicore-elements' ),
106 - 'type' => Controls_Manager::TEXT,
107 - 'default' => get_bloginfo( 'name' ),
108 - 'ai' => [
109 - 'active' => false,
110 - ],
111 - 'render_type' => 'none',
112 - 'dynamic' => [
113 - 'active' => true,
114 - ],
115 - ]
116 - );
117 -
118 - $instance->add_control(
119 - 'email_reply_to' . $slug,
120 - [
121 - 'label' => esc_html__( 'Reply-To', 'uicore-elements' ),
122 - 'type' => Controls_Manager::TEXT,
123 - 'options' => [
124 - '' => '',
125 - ],
126 - 'default' => 'noreply@' . Helper::get_site_domain(),
127 - 'render_type' => 'none',
128 - ]
129 - );
130 -
131 - $instance->add_control(
132 - 'email_to_cc' . $slug,
133 - [
134 - 'label' => esc_html__( 'Cc', 'uicore-elements' ),
135 - 'type' => Controls_Manager::TEXT,
136 - 'default' => '',
137 - 'ai' => [
138 - 'active' => false,
139 - ],
140 - 'title' => esc_html__( 'Separate emails with commas', 'uicore-elements' ),
141 - 'render_type' => 'none',
142 - 'dynamic' => [
143 - 'active' => true,
144 - ],
145 - ]
146 - );
147 -
148 - $instance->add_control(
149 - 'email_to_bcc' . $slug,
150 - [
151 - 'label' => esc_html__( 'Bcc', 'uicore-elements' ),
152 - 'type' => Controls_Manager::TEXT,
153 - 'default' => '',
154 - 'ai' => [
155 - 'active' => false,
156 - ],
157 - 'title' => esc_html__( 'Separate emails with commas', 'uicore-elements' ),
158 - 'render_type' => 'none',
159 - 'dynamic' => [
160 - 'active' => true,
161 - ],
162 - ]
163 - );
164 -
165 - $instance->add_control(
166 - 'form_metadata' . $slug,
167 - [
168 - 'label' => esc_html__( 'Meta Data', 'uicore-elements' ),
169 - 'type' => Controls_Manager::SELECT2,
170 - 'multiple' => true,
171 - 'label_block' => true,
172 - 'separator' => 'before',
173 - 'default' => [
174 - 'date',
175 - 'time',
176 - 'page_url',
177 - 'user_agent',
178 - 'remote_ip',
179 - ],
180 - 'options' => [
181 - 'date' => esc_html__( 'Date', 'uicore-elements' ),
182 - 'time' => esc_html__( 'Time', 'uicore-elements' ),
183 - 'page_url' => esc_html__( 'Page URL', 'uicore-elements' ),
184 - 'user_agent' => esc_html__( 'User Agent', 'uicore-elements' ),
185 - 'remote_ip' => esc_html__( 'Remote IP', 'uicore-elements' ),
186 - ],
187 - 'render_type' => 'none',
188 - ]
189 - );
190 -
191 - $instance->add_control(
192 - 'email_content_type' . $slug,
193 - [
194 - 'label' => esc_html__( 'Send As', 'uicore-elements' ),
195 - 'type' => Controls_Manager::SELECT,
196 - 'default' => 'html',
197 - 'render_type' => 'none',
198 - 'options' => [
199 - 'html' => esc_html__( 'HTML', 'uicore-elements' ),
200 - 'plain' => esc_html__( 'Plain', 'uicore-elements' ),
201 - ],
202 - ]
203 - );
204 - }
205 - function TRAIT_register_submit_redirect_controls()
206 - {
207 - $this->add_control(
208 - 'redirect_to',
209 - [
210 - 'label' => esc_html__( 'Redirect To', 'uicore-elements' ),
211 - 'type' => Controls_Manager::TEXT,
212 - 'placeholder' => esc_html__( 'https://your-link.com', 'uicore-elements' ),
213 - 'ai' => [
214 - 'active' => false,
215 - ],
216 - 'dynamic' => [
217 - 'active' => true,
218 - 'categories' => [
219 - 'url',
220 - ],
221 - ],
222 - 'label_block' => true,
223 - 'render_type' => 'none',
224 - ]
225 - );
226 - }
227 - /**
228 - * Register MailChimp controls for the submit action.
229 - *
230 - * @param $instance - The widget instance. Required if $has_repeaters is true.
231 - * @param bool $has_repeaters - Enable Field Mapping control if the widget has dynamic fields widh repeaters.
232 - *
233 - * @return void
234 - */
235 - function TRAIT_register_submit_mailchimp_controls($instance = null, bool $has_repeaters = false)
236 - {
237 -
238 - if( !get_option('uicore_elements_mailchimp_secret_key') ) {
239 - $this->add_control(
240 - 'mailchimp_warning',
241 - [
242 - 'type' => Controls_Manager::ALERT,
243 - 'alert_type' => 'warning',
244 - 'dismissible' => false,
245 - 'heading' => esc_html__("You haven't set your Mailchimp API key yet.", 'uicore-elements'),
246 - 'content' => Helper::get_admin_settings_url(esc_html__("Click here to configure your API keys.", 'uicore-elements' )),
247 - ]
248 - );
249 - }
250 -
251 - $this->add_control(
252 - 'mailchimp_audience_id',
253 - [
254 - 'label' => esc_html__( 'Audience ID', 'uicore-elements' ),
255 - 'type' => Controls_Manager::TEXT,
256 - 'description' => esc_html__( 'Enter the Audience ID to subscribe the user to.', 'uicore-elements' ),
257 - 'ai' => [
258 - 'active' => false,
259 - ],
260 - 'dynamic' => [
261 - 'active' => true,
262 - ],
263 - 'label_block' => true,
264 - 'render_type' => 'none',
265 - ]
266 - );
267 -
268 - // If repeaters, than we need the field mapping controls
269 - if($has_repeaters) {
270 - $this->add_control(
271 - 'mailchimp_map_description',
272 - [
273 - 'label' => esc_html__( 'Field Mapping', 'uicore-elements' ),
274 - 'type' => Controls_Manager::RAW_HTML,
275 - 'raw' => esc_html__( 'You need to set the "ID" of the field you want to map.', 'uicore-elements' ),
276 - 'content_classes' => 'elementor-control-field-description',
277 - 'separator' => 'before',
278 - ]
279 - );
280 - $this->add_control(
281 - 'mailchimp_email_id',
282 - [
283 - 'label' => esc_html__( 'Email*', 'uicore-elements' ),
284 - 'type' => Controls_Manager::TEXT,
285 - 'ai' => [
286 - 'active' => false,
287 - ],
288 - 'render_type' => 'none',
289 - ]
290 - );
291 - $this->add_control(
292 - 'mailchimp_birthday_id',
293 - [
294 - 'label' => esc_html__( 'Birthday', 'uicore-elements' ),
295 - 'type' => Controls_Manager::TEXT,
296 - 'description' => esc_html__( 'Expects the format MM/DD.', 'uicore-elements' ),
297 - 'ai' => [
298 - 'active' => false,
299 - ],
300 - 'render_type' => 'none',
301 - ]
302 - );
303 - $this->add_control(
304 - 'mailchimp_fname_id',
305 - [
306 - 'label' => esc_html__( 'First Name', 'uicore-elements' ),
307 - 'type' => Controls_Manager::TEXT,
308 - 'ai' => [
309 - 'active' => false,
310 - ],
311 - 'render_type' => 'none',
312 - ]
313 - );
314 - $this->add_control(
315 - 'mailchimp_lname_id',
316 - [
317 - 'label' => esc_html__( 'Last Name', 'uicore-elements' ),
318 - 'type' => Controls_Manager::TEXT,
319 - 'ai' => [
320 - 'active' => false,
321 - ],
322 - 'render_type' => 'none',
323 - ]
324 - );
325 - $this->add_control(
326 - 'mailchimp_phone_id',
327 - [
328 - 'label' => esc_html__( 'Phone', 'uicore-elements' ),
329 - 'type' => Controls_Manager::TEXT,
330 - 'ai' => [
331 - 'active' => false,
332 - ],
333 - 'render_type' => 'none',
334 - ]
335 - );
336 -
337 - }
338 - }
339 -
340 - // Settings and Content Controls
341 - function TRAIT_register_additional_controls($messages)
342 - {
343 - $this->add_control(
344 - 'form_id',
345 - [
346 - 'label' => esc_html__( 'Form ID', 'uicore-elements' ),
347 - 'type' => Controls_Manager::TEXT,
348 - 'ai' => [
349 - 'active' => false,
350 - ],
351 - 'placeholder' => 'new_form_id',
352 - 'description' => esc_html__( 'Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows `A-z 0-9` & underscore chars without spaces.', 'uicore-elements' ),
353 - 'separator' => 'after',
354 - 'dynamic' => [
355 - 'active' => true,
356 - ],
357 - ]
358 - );
359 - $this->add_control(
360 - 'form_validation',
361 - [
362 - 'label' => esc_html__( 'Form Validation', 'uicore-elements' ),
363 - 'type' => Controls_Manager::SELECT,
364 - 'options' => [
365 - '' => esc_html__( 'Browser Default', 'uicore-elements' ),
366 - 'no' => esc_html__( 'No validation', 'uicore-elements' ),
367 - ],
368 - 'default' => '',
369 - ]
370 - );
371 - $this->add_control(
372 - 'custom_messages',
373 - [
374 - 'label' => esc_html__( 'Custom Messages', 'uicore-elements' ),
375 - 'type' => Controls_Manager::SWITCHER,
376 - 'default' => '',
377 - 'separator' => 'before',
378 - 'render_type' => 'none',
379 - ]
380 - );
381 - $this->add_control(
382 - 'success_message',
383 - [
384 - 'label' => esc_html__( 'Success Message', 'uicore-elements' ),
385 - 'type' => Controls_Manager::TEXT,
386 - 'default' => $messages['success'],
387 - 'placeholder' => $messages['success'],
388 - 'label_block' => true,
389 - 'condition' => [
390 - 'custom_messages!' => '',
391 - ],
392 - 'render_type' => 'none',
393 - 'dynamic' => [
394 - 'active' => true,
395 - ],
396 - ]
397 - );
398 - $this->add_control(
399 - 'error_message',
400 - [
401 - 'label' => esc_html__( 'Form Error', 'uicore-elements' ),
402 - 'type' => Controls_Manager::TEXT,
403 - 'default' => $messages['error'],
404 - 'placeholder' => $messages['error'],
405 - 'label_block' => true,
406 - 'condition' => [
407 - 'custom_messages!' => '',
408 - ],
409 - 'render_type' => 'none',
410 - 'dynamic' => [
411 - 'active' => true,
412 - ],
413 - ]
414 - );
415 - $this->add_control(
416 - 'mail_error_message',
417 - [
418 - 'label' => esc_html__( 'Email Sending Error', 'uicore-elements' ),
419 - 'type' => Controls_Manager::TEXT,
420 - 'default' => $messages['mail_error'],
421 - 'placeholder' => $messages['mail_error'],
422 - 'label_block' => true,
423 - 'condition' => [
424 - 'custom_messages!' => '',
425 - ],
426 - 'render_type' => 'none',
427 - 'dynamic' => [
428 - 'active' => true,
429 - ],
430 - ]
431 - );
432 - $this->add_control(
433 - 'redirect_message',
434 - [
435 - 'label' => esc_html__( 'Sucessfull Redirect', 'uicore-elements' ),
436 - 'type' => Controls_Manager::TEXT,
437 - 'default' => $messages['redirect'],
438 - 'placeholder' => $messages['redirect'],
439 - 'label_block' => true,
440 - 'conditions' => [
441 - 'terms' => [
442 - [
443 - 'name' => 'custom_messages',
444 - 'operator' => '!=',
445 - 'value' => '',
446 - ],
447 - [
448 - 'name' => 'submit_actions',
449 - 'operator' => 'contains',
450 - 'value' => 'redirect',
451 - ]
452 - ],
453 - ],
454 - 'render_type' => 'none',
455 - 'dynamic' => [
456 - 'active' => true,
457 - ],
458 - ]
459 - );
460 - }
461 - function TRAIT_register_button_controls(string $submit_text = 'send')
462 - {
463 - $this->add_responsive_control(
464 - 'button_width',
465 - [
466 - 'label' => esc_html__( 'Column Width', 'uicore-elements' ),
467 - 'type' => Controls_Manager::SELECT,
468 - 'options' => $this->TRAIT_get_width_values(),
469 - 'default' => '20',
470 - ]
471 - );
472 - $this->add_responsive_control(
473 - 'button_align',
474 - [
475 - 'label' => esc_html__( 'Alignment', 'uicore-elements' ),
476 - 'type' => Controls_Manager::CHOOSE,
477 - 'options' => [
478 - 'left' => [
479 - 'title' => esc_html__( 'Left', 'uicore-elements' ),
480 - 'icon' => 'eicon-text-align-left',
481 - ],
482 - 'center' => [
483 - 'title' => esc_html__( 'Center', 'uicore-elements' ),
484 - 'icon' => 'eicon-text-align-center',
485 - ],
486 - 'right' => [
487 - 'title' => esc_html__( 'Right', 'uicore-elements' ),
488 - 'icon' => 'eicon-text-align-right',
489 - ],
490 - 'stretch' => [
491 - 'title' => esc_html__( 'Justified', 'uicore-elements' ),
492 - 'icon' => 'eicon-text-align-justify',
493 - ],
494 - ],
495 - 'default' => 'stretch',
496 - 'prefix_class' => 'ui-e-submit-align-',
497 - ]
498 - );
499 - $this->add_control(
500 - 'button_text',
501 - [
502 - 'label' => esc_html__( 'Submit', 'uicore-elements' ),
503 - 'type' => Controls_Manager::TEXT,
504 - 'default' => esc_html__( $submit_text, 'uicore-elements' ),
505 - 'placeholder' => esc_html__( $submit_text, 'uicore-elements' ),
506 - 'dynamic' => [
507 - 'active' => true,
508 - ],
509 - 'ai' => [
510 - 'active' => false,
511 - ],
512 - ]
513 - );
514 - $this->add_control(
515 - 'selected_button_icon',
516 - [
517 - 'label' => esc_html__( 'Icon', 'uicore-elements' ),
518 - 'type' => Controls_Manager::ICONS,
519 - 'skin' => 'inline',
520 - 'label_block' => false,
521 - ]
522 - );
523 - $this->add_control(
524 - 'button_icon_align',
525 - [
526 - 'label' => esc_html__( 'Icon Position', 'uicore-elements' ),
527 - 'type' => Controls_Manager::SELECT,
528 - 'default' => 'left',
529 - 'options' => [
530 - 'left' => esc_html__( 'Before', 'uicore-elements' ),
531 - 'right' => esc_html__( 'After', 'uicore-elements' ),
532 - ],
533 - 'condition' => [
534 - 'selected_button_icon[value]!' => '',
535 - ],
536 - ]
537 - );
538 - $this->add_control(
539 - 'button_icon_indent',
540 - [
541 - 'label' => esc_html__( 'Icon Spacing', 'uicore-elements' ),
542 - 'type' => Controls_Manager::SLIDER,
543 - 'size_units' => [ 'px', 'em', 'rem', 'custom' ],
544 - 'range' => [
545 - 'px' => [
546 - 'max' => 100,
547 - ],
548 - 'em' => [
549 - 'max' => 10,
550 - ],
551 - 'rem' => [
552 - 'max' => 10,
553 - ],
554 - ],
555 - 'condition' => [
556 - 'selected_button_icon[value]!' => '',
557 - ],
558 - 'selectors' => [
559 - '{{WRAPPER}} .elementor-button .ui-e-align-right' => 'margin-left: {{SIZE}}{{UNIT}};',
560 - '{{WRAPPER}} .elementor-button .ui-e-align-left' => 'margin-right: {{SIZE}}{{UNIT}};',
561 - ],
562 - ]
563 - );
564 - $this->add_control(
565 - 'button_css_id',
566 - [
567 - 'label' => esc_html__( 'Button ID', 'uicore-elements' ),
568 - 'type' => Controls_Manager::TEXT,
569 - 'default' => '',
570 - 'ai' => [
571 - 'active' => false,
572 - ],
573 - 'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'uicore-elements' ),
574 - 'description' => esc_html__( 'Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows `A-z 0-9` & underscore chars without spaces.', 'uicore-elements' ),
575 - 'separator' => 'before',
576 - 'dynamic' => [
577 - 'active' => true,
578 - ],
579 - ]
580 - );
581 - }
582 -
583 - // Style Controls
584 - function TRAIT_register_form_style_controls($section = true)
585 - {
586 - if($section){
587 - $this->start_controls_section(
588 - 'section_form_style',
589 - [
590 - 'label' => esc_html__( 'Form', 'uicore-elements' ),
591 - 'tab' => Controls_Manager::TAB_STYLE,
592 - ]
593 - );
594 - }
595 - $this->add_control(
596 - 'column_gap',
597 - [
598 - 'label' => esc_html__( 'Columns Gap', 'uicore-elements' ),
599 - 'type' => Controls_Manager::SLIDER,
600 - 'size_units' => [ 'px', 'em', 'rem', 'custom' ],
601 - 'default' => [
602 - 'size' => 10,
603 - ],
604 - 'range' => [
605 - 'px' => [
606 - 'max' => 60,
607 - ],
608 - 'em' => [
609 - 'max' => 6,
610 - ],
611 - 'rem' => [
612 - 'max' => 6,
613 - ],
614 - ],
615 - 'selectors' => [
616 - '{{WRAPPER}} .ui-e-field-group' => 'padding-right: calc( {{SIZE}}{{UNIT}}/2 ); padding-left: calc( {{SIZE}}{{UNIT}}/2 );',
617 - '{{WRAPPER}} .ui-e-fields-wrp' => 'margin-left: calc( -{{SIZE}}{{UNIT}}/2 ); margin-right: calc( -{{SIZE}}{{UNIT}}/2 );',
618 - ],
619 - ]
620 - );
621 - $this->add_control(
622 - 'row_gap',
623 - [
624 - 'label' => esc_html__( 'Rows Gap', 'uicore-elements' ),
625 - 'type' => Controls_Manager::SLIDER,
626 - 'size_units' => [ 'px', 'em', 'rem', 'custom' ],
627 - 'default' => [
628 - 'size' => 10,
629 - ],
630 - 'range' => [
631 - 'px' => [
632 - 'max' => 60,
633 - ],
634 - 'em' => [
635 - 'max' => 6,
636 - ],
637 - 'rem' => [
638 - 'max' => 6,
639 - ],
640 - ],
641 - 'selectors' => [
642 - '{{WRAPPER}} .ui-e-field-group' => 'margin-bottom: {{SIZE}}{{UNIT}};',
643 - '{{WRAPPER}} .ui-e-fields-wrp' => 'margin-bottom: -{{SIZE}}{{UNIT}};',
644 - ],
645 - ]
646 - );
647 - $this->add_control(
648 - 'heading_label',
649 - [
650 - 'label' => esc_html__( 'Label', 'uicore-elements' ),
651 - 'type' => Controls_Manager::HEADING,
652 - 'separator' => 'before',
653 - ]
654 - );
655 - $this->add_control(
656 - 'label_spacing',
657 - [
658 - 'label' => esc_html__( 'Spacing', 'uicore-elements' ),
659 - 'type' => Controls_Manager::SLIDER,
660 - 'size_units' => [ 'px', 'em', 'rem', 'custom' ],
661 - 'default' => [
662 - 'size' => 0,
663 - ],
664 - 'range' => [
665 - 'px' => [
666 - 'max' => 60,
667 - ],
668 - 'em' => [
669 - 'max' => 6,
670 - ],
671 - 'rem' => [
672 - 'max' => 6,
673 - ],
674 - ],
675 - 'selectors' => [
676 - 'body {{WRAPPER}} .ui-e-field-group > label' => 'padding-bottom: {{SIZE}}{{UNIT}};',
677 - ],
678 - ]
679 - );
680 - $this->add_control(
681 - 'label_color',
682 - [
683 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
684 - 'type' => Controls_Manager::COLOR,
685 - 'selectors' => [
686 - '{{WRAPPER}} .ui-e-field-group > label, {{WRAPPER}} .ui-e-field-subgroup label' => 'color: {{VALUE}};',
687 - ],
688 - 'global' => [
689 - 'default' => Global_Colors::COLOR_TEXT,
690 - ],
691 - ]
692 - );
693 - $this->add_control(
694 - 'mark_required_color',
695 - [
696 - 'label' => esc_html__( 'Mark Color', 'uicore-elements' ),
697 - 'type' => Controls_Manager::COLOR,
698 - 'default' => '',
699 - 'selectors' => [
700 - '{{WRAPPER}} .ui-e-required .ui-e-label:after' => 'color: {{COLOR}};',
701 - ],
702 - 'condition' => [
703 - 'mark_required' => 'yes',
704 - ],
705 - ]
706 - );
707 - $this->add_group_control(
708 - Group_Control_Typography::get_type(),
709 - [
710 - 'name' => 'label_typography',
711 - 'selector' => '{{WRAPPER}} .ui-e-field-group > label',
712 - 'global' => [
713 - 'default' => Global_Typography::TYPOGRAPHY_TEXT,
714 - ],
715 - ]
716 - );
717 - if($section){
718 - $this->end_controls_section();
719 - }
720 - }
721 - function TRAIT_register_fields_style_controls($section = true)
722 - {
723 - if($section){
724 - $this->start_controls_section(
725 - 'section_field_style',
726 - [
727 - 'label' => esc_html__( 'Fields', 'uicore-elements' ),
728 - 'tab' => Controls_Manager::TAB_STYLE,
729 - ]
730 - );
731 - }
732 -
733 - $this->start_controls_tabs(
734 - 'field_style_tabs'
735 - );
736 -
737 - $this->start_controls_tab(
738 - 'field_normal_tab',
739 - [
740 - 'label' => esc_html__( 'Normal', 'uicore-elements' ),
741 - ]
742 - );
743 -
744 - $this->add_group_control(
745 - Group_Control_Typography::get_type(),
746 - [
747 - 'name' => 'field_typography',
748 - 'selector' => '{{WRAPPER}} .ui-e-field-group .ui-e-field, {{WRAPPER}} .ui-e-field-subgroup label',
749 - 'global' => [
750 - 'default' => Global_Typography::TYPOGRAPHY_TEXT,
751 - ],
752 - ]
753 - );
754 - $this->add_control(
755 - 'field_text_color',
756 - [
757 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
758 - 'type' => Controls_Manager::COLOR,
759 - 'selectors' => [
760 - '{{WRAPPER}} .ui-e-field-group .ui-e-field' => 'color: {{VALUE}};',
761 - ],
762 - 'global' => [
763 - 'default' => Global_Colors::COLOR_TEXT,
764 - ],
765 - ]
766 - );
767 - $this->add_control(
768 - 'field_placeholder_color',
769 - [
770 - 'label' => esc_html__( 'Placeholder Color', 'uicore-elements' ),
771 - 'type' => Controls_Manager::COLOR,
772 - 'selectors' => [
773 - '{{WRAPPER}} .ui-e-field-group .ui-e-field::placeholder' => 'color: {{VALUE}};',
774 - ],
775 - 'global' => [
776 - 'default' => Global_Colors::COLOR_TEXT,
777 - ],
778 - ]
779 - );
780 - $this->add_control(
781 - 'field_background_color',
782 - [
783 - 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
784 - 'type' => Controls_Manager::COLOR,
785 - 'default' => '#ffffff',
786 - 'selectors' => [
787 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
788 - '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'background-color: {{VALUE}};',
789 - ],
790 - ]
791 - );
792 - $this->add_group_control(
793 - Group_Control_Border::get_type(),
794 - [
795 - 'name' => 'field_border',
796 - 'selector' =>
797 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select),
798 - {{WRAPPER}} .ui-e-field-group .ui-e-field-select select',
799 - ]
800 - );
801 -
802 - $this->end_controls_tab();
803 -
804 - $this->start_controls_tab(
805 - 'field_hover_tab',
806 - [
807 - 'label' => esc_html__( 'Hover', 'uicore-elements' ),
808 - ]
809 - );
810 -
811 - $this->add_control(
812 - 'field_text_hover_color',
813 - [
814 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
815 - 'type' => Controls_Manager::COLOR,
816 - 'selectors' => [
817 - '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field' => 'color: {{VALUE}};',
818 - ],
819 - 'global' => [
820 - 'default' => Global_Colors::COLOR_TEXT,
821 - ],
822 - ]
823 - );
824 - $this->add_control(
825 - 'field_placeholder_hover_color',
826 - [
827 - 'label' => esc_html__( 'Placeholder Color', 'uicore-elements' ),
828 - 'type' => Controls_Manager::COLOR,
829 - 'selectors' => [
830 - '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field::placeholder' => 'color: {{VALUE}};',
831 - ],
832 - 'global' => [
833 - 'default' => Global_Colors::COLOR_TEXT,
834 - ],
835 - ]
836 - );
837 - $this->add_control(
838 - 'field_background_hover_color',
839 - [
840 - 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
841 - 'type' => Controls_Manager::COLOR,
842 - 'default' => '#ffffff',
843 - 'selectors' => [
844 - '{{WRAPPER}} .ui-e-field-group:hover:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
845 - '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select' => 'background-color: {{VALUE}};',
846 - ],
847 - ]
848 - );
849 - $this->add_group_control(
850 - Group_Control_Border::get_type(),
851 - [
852 - 'name' => 'field_hover_border',
853 - 'selector' =>
854 - '{{WRAPPER}} .ui-e-field-group:hover:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select),
855 - {{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select',
856 - ]
857 - );
858 -
859 - $this->end_controls_tab();
860 -
861 - $this->start_controls_tab(
862 - 'field_active_tab',
863 - [
864 - 'label' => esc_html__( 'Active', 'uicore-elements' ),
865 - ]
866 - );
867 -
868 - $this->add_control(
869 - 'field_text_active_color',
870 - [
871 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
872 - 'type' => Controls_Manager::COLOR,
873 - 'selectors' => [
874 - '{{WRAPPER}} .ui-e-field-group .ui-e-field:focus' => 'color: {{VALUE}};',
875 - ],
876 - 'global' => [
877 - 'default' => Global_Colors::COLOR_TEXT,
878 - ],
879 - ]
880 - );
881 - $this->add_control(
882 - 'field_background_active_color',
883 - [
884 - 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
885 - 'type' => Controls_Manager::COLOR,
886 - 'default' => '#ffffff',
887 - 'selectors' => [
888 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:focus:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
889 - '{{WRAPPER}} .ui-e-field-group .ui-e-field-select:focus select' => 'background-color: {{VALUE}};',
890 - ],
891 - ]
892 - );
893 - $this->add_group_control(
894 - Group_Control_Border::get_type(),
895 - [
896 - 'name' => 'field_active_border',
897 - 'selector' =>
898 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:focus:not(.ui-e-field-select),
899 - {{WRAPPER}} .ui-e-field-group .ui-e-field-select:focus select',
900 - ]
901 - );
902 -
903 - $this->end_controls_tab();
904 -
905 - $this->end_controls_tabs();
906 -
907 - $this->add_control(
908 - 'field_border_radius',
909 - [
910 - 'label' => esc_html__( 'Border Radius', 'uicore-elements' ),
911 - 'type' => Controls_Manager::DIMENSIONS,
912 - 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
913 - 'selectors' => [
914 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
915 - '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
916 - ],
917 - 'separator' => 'before'
918 - ]
919 - );
920 - $this->add_responsive_control(
921 - 'field_padding',
922 - [
923 - 'label' => esc_html__( 'Padding', 'uicore-elements' ),
924 - 'type' => Controls_Manager::DIMENSIONS,
925 - 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
926 - 'selectors' => [
927 - '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file) .ui-e-field:not(.ui-e-field-select)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
928 - '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
929 - ],
930 - ]
931 - );
932 - if($section){
933 - $this->end_controls_section();
934 - }
935 - }
936 - function TRAIT_register_button_style_controls($section = true)
937 - {
938 - if($section){
939 - $this->start_controls_section(
940 - 'section_button_style',
941 - [
942 - 'label' => esc_html__( 'Button', 'uicore-elements' ),
943 - 'tab' => Controls_Manager::TAB_STYLE,
944 - ]
945 - );
946 - }
947 -
948 - $this->add_group_control(
949 - Group_Control_Typography::get_type(),
950 - [
951 - 'name' => 'button_typography',
952 - 'global' => [
953 - 'default' => Global_Typography::TYPOGRAPHY_ACCENT,
954 - ],
955 - 'selector' => '{{WRAPPER}} .elementor-button',
956 - ]
957 - );
958 - $this->add_group_control(
959 - Group_Control_Border::get_type(), [
960 - 'name' => 'button_border',
961 - 'selector' => '{{WRAPPER}} .elementor-button',
962 - 'exclude' => [
963 - 'color',
964 - ],
965 - ]
966 - );
967 -
968 - $this->start_controls_tabs( 'tabs_button_style' );
969 -
970 - $this->start_controls_tab(
971 - 'tab_button_normal',
972 - [
973 - 'label' => esc_html__( 'Normal', 'uicore-elements' ),
974 - ]
975 - );
976 -
977 - $this->add_control(
978 - 'button_background_color',
979 - [
980 - 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
981 - 'type' => Controls_Manager::COLOR,
982 - 'global' => [
983 - 'default' => Global_Colors::COLOR_ACCENT,
984 - ],
985 - 'selectors' => [
986 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'background-color: {{VALUE}};',
987 - '{{WRAPPER}} .elementor-button[type="submit"]' => 'background-color: {{VALUE}};',
988 - ],
989 - ]
990 - );
991 - $this->add_control(
992 - 'button_text_color',
993 - [
994 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
995 - 'type' => Controls_Manager::COLOR,
996 - 'default' => '#ffffff',
997 - 'selectors' => [
998 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'color: {{VALUE}};',
999 - '{{WRAPPER}} .elementor-button[type="submit"]' => 'color: {{VALUE}};',
1000 - '{{WRAPPER}} .elementor-button[type="submit"] svg *' => 'fill: {{VALUE}};',
1001 - ],
1002 - ]
1003 - );
1004 - $this->add_control(
1005 - 'button_border_color',
1006 - [
1007 - 'label' => esc_html__( 'Border Color', 'uicore-elements' ),
1008 - 'type' => Controls_Manager::COLOR,
1009 - 'default' => '',
1010 - 'selectors' => [
1011 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'border-color: {{VALUE}};',
1012 - '{{WRAPPER}} .elementor-button[type="submit"]' => 'border-color: {{VALUE}};',
1013 - ],
1014 - 'condition' => [
1015 - 'button_border_border!' => '',
1016 - ],
1017 - ]
1018 - );
1019 -
1020 - $this->end_controls_tab();
1021 -
1022 - $this->start_controls_tab(
1023 - 'tab_button_hover',
1024 - [
1025 - 'label' => esc_html__( 'Hover', 'uicore-elements' ),
1026 - ]
1027 - );
1028 -
1029 - $this->add_control(
1030 - 'button_background_hover_color',
1031 - [
1032 - 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
1033 - 'type' => Controls_Manager::COLOR,
1034 - 'default' => '',
1035 - 'selectors' => [
1036 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'background-color: {{VALUE}};',
1037 - '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'background-color: {{VALUE}};',
1038 - ],
1039 - ]
1040 - );
1041 - $this->add_control(
1042 - 'button_hover_color',
1043 - [
1044 - 'label' => esc_html__( 'Text Color', 'uicore-elements' ),
1045 - 'type' => Controls_Manager::COLOR,
1046 - 'default' => '#ffffff',
1047 - 'selectors' => [
1048 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'color: {{VALUE}};',
1049 - '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'color: {{VALUE}};',
1050 - '{{WRAPPER}} .elementor-button[type="submit"]:hover svg *' => 'fill: {{VALUE}};',
1051 - ],
1052 - ]
1053 - );
1054 - $this->add_control(
1055 - 'button_hover_border_color',
1056 - [
1057 - 'label' => esc_html__( 'Border Color', 'uicore-elements' ),
1058 - 'type' => Controls_Manager::COLOR,
1059 - 'default' => '',
1060 - 'selectors' => [
1061 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'border-color: {{VALUE}};',
1062 - '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'border-color: {{VALUE}};',
1063 - ],
1064 - 'condition' => [
1065 - 'button_border_border!' => '',
1066 - ],
1067 - ]
1068 - );
1069 - $this->add_control(
1070 - 'hover_transition_duration',
1071 - [
1072 - 'label' => esc_html__( 'Transition Duration', 'uicore-elements' ),
1073 - 'type' => Controls_Manager::SLIDER,
1074 - 'size_units' => [ 's', 'ms', 'custom' ],
1075 - 'default' => [
1076 - 'unit' => 'ms',
1077 - ],
1078 - 'selectors' => [
1079 - '{{WRAPPER}} .e-form__buttons__wrapper__button-previous' => 'transition-duration: {{SIZE}}{{UNIT}};',
1080 - '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'transition-duration: {{SIZE}}{{UNIT}};',
1081 - '{{WRAPPER}} .elementor-button[type="submit"] svg *' => 'transition-duration: {{SIZE}}{{UNIT}};',
1082 - '{{WRAPPER}} .elementor-button[type="submit"]' => 'transition-duration: {{SIZE}}{{UNIT}};',
1083 - ],
1084 - ]
1085 - );
1086 - $this->add_control(
1087 - 'button_hover_animation',
1088 - [
1089 - 'label' => esc_html__( 'Animation', 'uicore-elements' ),
1090 - 'type' => Controls_Manager::HOVER_ANIMATION,
1091 - ]
1092 - );
1093 -
1094 - $this->end_controls_tab();
1095 -
1096 - $this->end_controls_tabs();
1097 -
1098 - $this->add_control(
1099 - 'button_border_radius',
1100 - [
1101 - 'label' => esc_html__( 'Border Radius', 'uicore-elements' ),
1102 - 'type' => Controls_Manager::DIMENSIONS,
1103 - 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
1104 - 'selectors' => [
1105 - '{{WRAPPER}} .elementor-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1106 - ],
1107 - 'separator' => 'before',
1108 - ]
1109 - );
1110 -
1111 - $this->add_control(
1112 - 'button_text_padding',
1113 - [
1114 - 'label' => esc_html__( 'Text Padding', 'uicore-elements' ),
1115 - 'type' => Controls_Manager::DIMENSIONS,
1116 - 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
1117 - 'selectors' => [
1118 - '{{WRAPPER}} .elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1119 - ],
1120 - ]
1121 - );
1122 -
1123 - if($section){
1124 - $this->end_controls_section();
1125 - }
1126 - }
1127 - function TRAIT_register_messages_style_controls($section = true)
1128 - {
1129 - if($section){
1130 - $this->start_controls_section(
1131 - 'section_messages_style',
1132 - [
1133 - 'label' => esc_html__( 'Messages', 'uicore-elements' ),
1134 - 'tab' => Controls_Manager::TAB_STYLE,
1135 - ]
1136 - );
1137 - }
1138 -
1139 - $this->add_control(
1140 - 'show_messages',
1141 - [
1142 - 'label' => esc_html__( 'Show/Hide messages', 'uicore-elements' ),
1143 - 'type' => Controls_Manager::BUTTON,
1144 - 'separator' => 'before',
1145 - 'text' => esc_html__( 'Toggle', 'uicore-elements' ),
1146 - 'event' => 'ui-e-form-show-messages',
1147 - ]
1148 - );
1149 - $this->add_group_control(
1150 - Group_Control_Typography::get_type(),
1151 - [
1152 - 'name' => 'message_typography',
1153 - 'global' => [
1154 - 'default' => Global_Typography::TYPOGRAPHY_TEXT,
1155 - ],
1156 - 'selector' => '{{WRAPPER}} .ui-e-message',
1157 - ]
1158 - );
1159 - $this->add_control(
1160 - 'success_message_color',
1161 - [
1162 - 'label' => esc_html__( 'Success Message Color', 'uicore-elements' ),
1163 - 'type' => Controls_Manager::COLOR,
1164 - 'default' => '#4CAF50',
1165 - 'selectors' => [
1166 - '{{WRAPPER}} .ui-e-message span.success' => 'color: {{COLOR}};',
1167 - ],
1168 - ]
1169 - );
1170 - $this->add_control(
1171 - 'error_message_color',
1172 - [
1173 - 'label' => esc_html__( 'Error Message Color', 'uicore-elements' ),
1174 - 'type' => Controls_Manager::COLOR,
1175 - 'default' => '#F44336',
1176 - 'selectors' => [
1177 - '{{WRAPPER}} .ui-e-message span.error' => 'color: {{COLOR}};',
1178 - ],
1179 - ]
1180 - );
1181 -
1182 - if($section){
1183 - $this->end_controls_section();
1184 - }
1185 - }
1186 - function TRAIT_register_all_form_style_controls()
1187 - {
1188 - $this->TRAIT_register_form_style_controls();
1189 - $this->TRAIT_register_fields_style_controls();
1190 - $this->TRAIT_register_button_style_controls();
1191 - $this->TRAIT_register_messages_style_controls();
1192 - }
1193 -
1194 - // Helper and Utility Functions
1195 - function TRAIT_get_width_values()
1196 - {
1197 - return [
1198 - '' => esc_html__( 'Default', 'uicore-elements' ),
1199 - '100' => '100%',
1200 - '80' => '80%',
1201 - '75' => '75%',
1202 - '70' => '70%',
1203 - '66' => '66%',
1204 - '60' => '60%',
1205 - '50' => '50%',
1206 - '40' => '40%',
1207 - '33' => '33%',
1208 - '30' => '30%',
1209 - '25' => '25%',
1210 - '20' => '20%',
1211 - ];
1212 - }
1213 - function TRAIT_recaptcha_key_js()
1214 - {
1215 - ?>
1216 - <script>
1217 - window.uicore_elements_recaptcha = '<?php echo get_option('uicore_elements_recaptcha_site_key'); ?>';
1218 - </script>
1219 - <?php
1220 - }
1221 -}
1 +<?php
2 +
3 +namespace UiCoreElements\Utils;
4 +
5 +use UiCoreElements\Helper;
6 +
7 +use Elementor\Controls_Manager;
8 +use Elementor\Group_Control_Typography;
9 +use Elementor\Group_Control_Border;
10 +use Elementor\Group_Control_Box_Shadow;
11 +use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
12 +use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
13 +
14 +defined('ABSPATH') || exit();
15 +
16 +/**
17 + * Register some Form Widgets controls and methods.
18 + */
19 +
20 +trait Form_Component
21 +{
22 +
23 + // Submission Controls
24 + function TRAIT_register_submit_email_controls($instance, $slug = '')
25 + {
26 + $instance->add_control(
27 + 'email_to' . $slug,
28 + [
29 + 'label' => esc_html__('To', 'uicore-elements'),
30 + 'type' => Controls_Manager::TEXT,
31 + 'default' => get_option('admin_email'),
32 + 'ai' => [
33 + 'active' => false,
34 + ],
35 + 'placeholder' => get_option('admin_email'),
36 + 'label_block' => true,
37 + 'title' => esc_html__('Separate emails with commas', 'uicore-elements'),
38 + 'render_type' => 'none',
39 + 'dynamic' => [
40 + 'active' => true,
41 + ],
42 + ]
43 + );
44 +
45 + /* translators: %s: Site title. */
46 + $default_message = sprintf(html_entity_decode(esc_html__('New message from "%s"', 'uicore-elements')), get_option('blogname'));
47 +
48 + $instance->add_control(
49 + 'email_subject' . $slug,
50 + [
51 + 'label' => esc_html__('Subject', 'uicore-elements'),
52 + 'type' => Controls_Manager::TEXT,
53 + 'default' => $default_message,
54 + 'ai' => [
55 + 'active' => false,
56 + ],
57 + 'placeholder' => $default_message,
58 + 'label_block' => true,
59 + 'render_type' => 'none',
60 + 'dynamic' => [
61 + 'active' => true,
62 + ],
63 + ]
64 + );
65 +
66 + $instance->add_control(
67 + 'email_content' . $slug,
68 + [
69 + 'label' => esc_html__('Message', 'uicore-elements'),
70 + 'type' => Controls_Manager::TEXTAREA,
71 + 'default' => '[all-fields]',
72 + 'ai' => [
73 + 'active' => false,
74 + ],
75 + 'placeholder' => '[all-fields]',
76 + 'description' => sprintf(
77 + /* translators: %s: The [all-fields] shortcode. */
78 + esc_html__('By default, all form fields are sent via %s shortcode. To customize sent fields, copy the shortcode that appears inside each field and paste it above.', 'uicore-elements'),
79 + '<code>[all-fields]</code>'
80 + ),
81 + 'render_type' => 'none',
82 + 'dynamic' => [
83 + 'active' => true,
84 + ],
85 + ]
86 + );
87 +
88 + $site_domain = Helper::get_site_domain();
89 +
90 + $instance->add_control(
91 + 'email_from' . $slug,
92 + [
93 + 'label' => esc_html__('From Email', 'uicore-elements'),
94 + 'type' => Controls_Manager::TEXT,
95 + 'default' => 'email@' . $site_domain,
96 + 'ai' => [
97 + 'active' => false,
98 + ],
99 + 'render_type' => 'none',
100 + 'dynamic' => [
101 + 'active' => true,
102 + ],
103 + ]
104 + );
105 +
106 + $instance->add_control(
107 + 'email_from_name' . $slug,
108 + [
109 + 'label' => esc_html__('From Name', 'uicore-elements'),
110 + 'type' => Controls_Manager::TEXT,
111 + 'default' => get_bloginfo('name'),
112 + 'ai' => [
113 + 'active' => false,
114 + ],
115 + 'render_type' => 'none',
116 + 'dynamic' => [
117 + 'active' => true,
118 + ],
119 + ]
120 + );
121 +
122 + $instance->add_control(
123 + 'email_reply_to' . $slug,
124 + [
125 + 'label' => esc_html__('Reply-To', 'uicore-elements'),
126 + 'type' => Controls_Manager::TEXT,
127 + 'options' => [
128 + '' => '',
129 + ],
130 + 'default' => 'noreply@' . Helper::get_site_domain(),
131 + 'render_type' => 'none',
132 + ]
133 + );
134 +
135 + $instance->add_control(
136 + 'email_to_cc' . $slug,
137 + [
138 + 'label' => esc_html__('Cc', 'uicore-elements'),
139 + 'type' => Controls_Manager::TEXT,
140 + 'default' => '',
141 + 'ai' => [
142 + 'active' => false,
143 + ],
144 + 'title' => esc_html__('Separate emails with commas', 'uicore-elements'),
145 + 'render_type' => 'none',
146 + 'dynamic' => [
147 + 'active' => true,
148 + ],
149 + ]
150 + );
151 +
152 + $instance->add_control(
153 + 'email_to_bcc' . $slug,
154 + [
155 + 'label' => esc_html__('Bcc', 'uicore-elements'),
156 + 'type' => Controls_Manager::TEXT,
157 + 'default' => '',
158 + 'ai' => [
159 + 'active' => false,
160 + ],
161 + 'title' => esc_html__('Separate emails with commas', 'uicore-elements'),
162 + 'render_type' => 'none',
163 + 'dynamic' => [
164 + 'active' => true,
165 + ],
166 + ]
167 + );
168 +
169 + $instance->add_control(
170 + 'form_metadata' . $slug,
171 + [
172 + 'label' => esc_html__('Meta Data', 'uicore-elements'),
173 + 'type' => Controls_Manager::SELECT2,
174 + 'multiple' => true,
175 + 'label_block' => true,
176 + 'separator' => 'before',
177 + 'default' => [
178 + 'date',
179 + 'time',
180 + 'page_url',
181 + 'user_agent',
182 + 'remote_ip',
183 + ],
184 + 'options' => [
185 + 'date' => esc_html__('Date', 'uicore-elements'),
186 + 'time' => esc_html__('Time', 'uicore-elements'),
187 + 'page_url' => esc_html__('Page URL', 'uicore-elements'),
188 + 'user_agent' => esc_html__('User Agent', 'uicore-elements'),
189 + 'remote_ip' => esc_html__('Remote IP', 'uicore-elements'),
190 + ],
191 + 'render_type' => 'none',
192 + ]
193 + );
194 +
195 + $instance->add_control(
196 + 'email_content_type' . $slug,
197 + [
198 + 'label' => esc_html__('Send As', 'uicore-elements'),
199 + 'type' => Controls_Manager::SELECT,
200 + 'default' => 'html',
201 + 'render_type' => 'none',
202 + 'options' => [
203 + 'html' => esc_html__('HTML', 'uicore-elements'),
204 + 'plain' => esc_html__('Plain', 'uicore-elements'),
205 + ],
206 + ]
207 + );
208 + }
209 + function TRAIT_register_submit_redirect_controls()
210 + {
211 + $this->start_controls_section(
212 + 'section_redirect',
213 + [
214 + 'label' => esc_html__('Redirect', 'uicore-elements'),
215 + 'condition' => [
216 + 'submit_actions' => 'redirect',
217 + ],
218 + ]
219 + );
220 +
221 + $this->add_control(
222 + 'redirect_to',
223 + [
224 + 'label' => esc_html__('Redirect To', 'uicore-elements'),
225 + 'type' => Controls_Manager::TEXT,
226 + 'placeholder' => esc_html__('https://your-link.com', 'uicore-elements'),
227 + 'ai' => [
228 + 'active' => false,
229 + ],
230 + 'dynamic' => [
231 + 'active' => true,
232 + 'categories' => [
233 + 'url',
234 + ],
235 + ],
236 + 'label_block' => true,
237 + 'render_type' => 'none',
238 + ]
239 + );
240 +
241 + $this->end_controls_section();
242 + }
243 + function TRAIT_register_submit_popup_controls()
244 + {
245 + if (defined('UICORE_ASSETS')) {
246 + $this->start_controls_section(
247 + 'section_popup',
248 + [
249 + 'label' => esc_html__('Popup', 'uicore-elements'),
250 + 'condition' => [
251 + 'submit_actions' => 'popup',
252 + ],
253 + ]
254 + );
255 + $this->add_control(
256 + 'popup_action',
257 + [
258 + 'label' => esc_html__('Action', 'uicore-elements'),
259 + 'type' => Controls_Manager::SELECT,
260 + 'default' => '',
261 + 'options' => [
262 + '' => esc_html__('Choose', 'uicore-elements'),
263 + 'close' => esc_html__('Close Popup', 'uicore-elements'),
264 + 'open' => esc_html__('Open Popup', 'uicore-elements'),
265 + ],
266 + 'label_block' => true,
267 + 'render_type' => 'none',
268 + ]
269 + );
270 + $this->add_control(
271 + 'open_popup',
272 + [
273 + 'label' => esc_html__('Popup', 'uicore-elements'),
274 + 'type' => Controls_Manager::SELECT2,
275 + 'multiple' => false,
276 + 'options' => Helper::get_uicore_popups(),
277 + 'label_block' => true,
278 + 'render_type' => 'none',
279 + 'condition' => [
280 + 'popup_action' => 'open',
281 + ],
282 + ]
283 + );
284 + $this->add_control(
285 + 'popup_warning',
286 + [
287 + 'type' => Controls_Manager::ALERT,
288 + 'alert_type' => 'warning',
289 + 'dismissible' => false,
290 + 'heading' => esc_html__('Popup Visibility', 'uicore-elements'),
291 + 'content' => esc_html__("Make sure the chosen popup is enabled on the pages where your widget will be shown. Otherwise, this action won't work.", 'uicore-elements'),
292 + 'condition' => [
293 + 'popup_action' => 'open',
294 + ],
295 + ]
296 + );
297 +
298 + $this->end_controls_section();
299 + }
300 + }
301 +
302 + function TRAIT_register_submit_webhook_controls()
303 + {
304 + $this->start_controls_section(
305 + 'section_webhook',
306 + [
307 + 'label' => esc_html__('Webhook', 'uicore-elements'),
308 + 'condition' => [
309 + 'submit_actions' => 'webhook',
310 + ],
311 + ]
312 + );
313 +
314 + $this->add_control(
315 + 'webhook_url',
316 + [
317 + 'label' => esc_html__('Webhook URL', 'uicore-elements'),
318 + 'type' => Controls_Manager::TEXT,
319 + 'placeholder' => esc_html__('https://your-endpoint.com/webhook', 'uicore-elements'),
320 + 'label_block' => true,
321 + 'ai' => [
322 + 'active' => false,
323 + ],
324 + 'dynamic' => [
325 + 'active' => true,
326 + 'categories' => [
327 + 'url',
328 + ],
329 + ],
330 + 'render_type' => 'none',
331 + ]
332 + );
333 +
334 + $this->add_control(
335 + 'webhook_advanced_data',
336 + [
337 + 'label' => esc_html__('Advanced Data', 'uicore-elements'),
338 + 'type' => Controls_Manager::SWITCHER,
339 + 'label_on' => esc_html__('On', 'uicore-elements'),
340 + 'label_off' => esc_html__('Off', 'uicore-elements'),
341 + 'return_value' => 'true',
342 + 'default' => '',
343 + 'render_type' => 'none',
344 + ]
345 + );
346 +
347 + $this->end_controls_section();
348 + }
349 +
350 + /**
351 + * Register Newsletter Services controls for the submit action.
352 + *
353 + * @param array $services - The list of services available.
354 + * @param bool $field_mapping - Enable Field Mapping control if the widget accepts form fields management.
355 + *
356 + * @return void
357 + */
358 + function TRAIT_register_submit_newsletter_services_controls(array $services, bool $field_mapping = false)
359 + {
360 +
361 + // Get and build the newsletter services section conditional display
362 + $terms = [];
363 + foreach ($services as $service) {
364 + $terms[] = [
365 + 'name' => 'submit_actions',
366 + 'operator' => 'contains',
367 + 'value' => $service,
368 + ];
369 + }
370 +
371 + $this->start_controls_section(
372 + 'newsletter_services_section',
373 + [
374 + 'label' => esc_html__('Newsletter Service', 'uicore-elements'),
375 + 'conditions' => [
376 + 'relation' => 'or',
377 + 'terms' => $terms,
378 + ],
379 + ]
380 + );
381 +
382 + if (!get_option('uicore_elements_newsletter_service_key')) {
383 + $this->add_control(
384 + 'services_warning',
385 + [
386 + 'type' => Controls_Manager::ALERT,
387 + 'alert_type' => 'warning',
388 + 'dismissible' => false,
389 + 'heading' => esc_html__("You haven't set your Newsletter Service API key yet.", 'uicore-elements'),
390 + 'content' => Helper::get_admin_settings_url(esc_html__("Click here to configure your API keys.", 'uicore-elements')),
391 + ]
392 + );
393 + }
394 +
395 + $this->add_control(
396 + 'mailchimp_audience_id',
397 + [
398 + 'label' => esc_html__('ID', 'uicore-elements'),
399 + 'type' => Controls_Manager::TEXT,
400 + 'description' => esc_html__('The ID of the service list, group, audience, or form where contacts will be saved.', 'uicore-elements'),
401 + 'ai' => [
402 + 'active' => false,
403 + ],
404 + 'dynamic' => [
405 + 'active' => true,
406 + ],
407 + 'label_block' => true,
408 + 'render_type' => 'none',
409 + ]
410 + );
411 +
412 + if ($field_mapping) {
413 +
414 + $this->add_control(
415 + 'services_map_description',
416 + [
417 + 'label' => esc_html__('Field Mapping', 'uicore-elements'),
418 + 'type' => Controls_Manager::RAW_HTML,
419 + 'raw' => esc_html__('You need to set the "ID" of the field you want to map.', 'uicore-elements'),
420 + 'content_classes' => 'elementor-control-field-description',
421 + 'separator' => 'before',
422 + ]
423 + );
424 + $this->add_control(
425 + 'mailchimp_fname_id',
426 + [
427 + 'label' => esc_html__('First Name', 'uicore-elements'),
428 + 'type' => Controls_Manager::TEXT,
429 + 'ai' => [
430 + 'active' => false,
431 + ],
432 + 'render_type' => 'none',
433 + ]
434 + );
435 + $this->add_control(
436 + 'mailchimp_lname_id',
437 + [
438 + 'label' => esc_html__('Last Name', 'uicore-elements'),
439 + 'type' => Controls_Manager::TEXT,
440 + 'ai' => [
441 + 'active' => false,
442 + ],
443 + 'render_type' => 'none',
444 + 'conditions' => [
445 + 'terms' => [
446 + [
447 + 'name' => 'submit_actions',
448 + 'operator' => '!contains',
449 + 'value' => 'moosend',
450 + ],
451 + [
452 + 'name' => 'submit_actions',
453 + 'operator' => '!contains',
454 + 'value' => 'getresponse',
455 + ],
456 + ]
457 + ]
458 + ]
459 + );
460 + $this->add_control(
461 + 'mailchimp_email_id',
462 + [
463 + 'label' => esc_html__('Email*', 'uicore-elements'),
464 + 'type' => Controls_Manager::TEXT,
465 + 'ai' => [
466 + 'active' => false,
467 + ],
468 + 'render_type' => 'none',
469 + ]
470 + );
471 + $this->add_control(
472 + 'mailchimp_birthday_id',
473 + [
474 + 'label' => esc_html__('Birthday', 'uicore-elements'),
475 + 'type' => Controls_Manager::TEXT,
476 + 'ai' => [
477 + 'active' => false,
478 + ],
479 + 'render_type' => 'none',
480 + 'conditions' => [
481 + 'terms' => [
482 + [
483 + 'name' => 'submit_actions',
484 + 'operator' => '!contains',
485 + 'value' => 'moosend',
486 + ],
487 + [
488 + 'name' => 'submit_actions',
489 + 'operator' => '!contains',
490 + 'value' => 'getresponse',
491 + ],
492 + [
493 + 'name' => 'submit_actions',
494 + 'operator' => '!contains',
495 + 'value' => 'mailerlite',
496 + ],
497 + ]
498 + ]
499 + ]
500 + );
501 + $this->add_control(
502 + 'mailchimp_phone_id',
503 + [
504 + 'label' => esc_html__('Phone', 'uicore-elements'),
505 + 'type' => Controls_Manager::TEXT,
506 + 'ai' => [
507 + 'active' => false,
508 + ],
509 + 'render_type' => 'none',
510 + 'conditions' => [
511 + 'terms' => [
512 + [
513 + 'name' => 'submit_actions',
514 + 'operator' => '!contains',
515 + 'value' => 'moosend',
516 + ],
517 + [
518 + 'name' => 'submit_actions',
519 + 'operator' => '!contains',
520 + 'value' => 'getresponse',
521 + ],
522 + ]
523 + ]
524 + ]
525 + );
526 +
527 + $this->add_control(
528 + 'services_custom_fields_description',
529 + [
530 + 'label' => esc_html__('Custom Fields', 'uicore-elements'),
531 + 'type' => Controls_Manager::RAW_HTML,
532 + 'raw' => esc_html__('Set the "ID" of the custom field you want to pass.', 'uicore-elements'),
533 + 'content_classes' => 'elementor-control-field-description',
534 + 'separator' => 'before',
535 + ]
536 + );
537 + $this->add_control(
538 + 'newsletter_service_custom_fields',
539 + [
540 + 'label' => esc_html__('Custom Fields', 'uicore-elements'),
541 + 'type' => Controls_Manager::REPEATER,
542 + 'prevent_empty' => false,
543 + 'fields' => [
544 + [
545 + 'name' => 'field_name',
546 + 'label' => esc_html__('API Field Key', 'uicore-elements'),
547 + 'description' => esc_html__('How the field is called in the newsletter service provider.', 'uicore-elements'),
548 + 'type' => Controls_Manager::TEXT,
549 + ],
550 + [
551 + 'name' => 'field_id',
552 + 'label' => esc_html__('Form Field ID', 'uicore-elements'),
553 + 'description' => esc_html__('The correspondent form field ID in the widget data.', 'uicore-elements'),
554 + 'type' => Controls_Manager::TEXT,
555 + ],
556 + [
557 + 'name' => 'field_type',
558 + 'label' => esc_html__('Sanitization Type', 'uicore-elements'),
559 + 'description' => esc_html__('Defines which sanitization type this field should receive. E.g.: phone number validation.', 'uicore-elements'),
560 + 'default' => 'text',
561 + 'options' => [
562 + 'text' => esc_html__('Text', 'uicore-elements'),
563 + 'email' => esc_html__('Email', 'uicore-elements'),
564 + 'phone' => esc_html__('Phone', 'uicore-elements'),
565 + 'birthday' => esc_html__('Birthday', 'uicore-elements'),
566 + 'date' => esc_html__('Date', 'uicore-elements'),
567 + ],
568 + 'type' => Controls_Manager::SELECT,
569 + ]
570 + ],
571 + ]
572 + );
573 + }
574 +
575 + $this->end_controls_section();
576 + }
577 +
578 + // Settings and Content Controls
579 + function TRAIT_register_additional_controls($messages)
580 + {
581 + $this->start_controls_section(
582 + 'section_form_options',
583 + [
584 + 'label' => esc_html__('Additional Options', 'uicore-elements'),
585 + 'tab' => Controls_Manager::TAB_CONTENT,
586 + ]
587 + );
588 +
589 + $this->add_control(
590 + 'form_id',
591 + [
592 + 'label' => esc_html__('Form ID', 'uicore-elements'),
593 + 'type' => Controls_Manager::TEXT,
594 + 'ai' => [
595 + 'active' => false,
596 + ],
597 + 'placeholder' => 'new_form_id',
598 + 'description' => esc_html__('Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows `A-z 0-9` & underscore chars without spaces.', 'uicore-elements'),
599 + 'separator' => 'after',
600 + 'dynamic' => [
601 + 'active' => true,
602 + ],
603 + ]
604 + );
605 + $this->add_control(
606 + 'form_validation',
607 + [
608 + 'label' => esc_html__('Form Validation', 'uicore-elements'),
609 + 'type' => Controls_Manager::SELECT,
610 + 'options' => [
611 + '' => esc_html__('Browser Default', 'uicore-elements'),
612 + 'no' => esc_html__('No validation', 'uicore-elements'),
613 + ],
614 + 'default' => '',
615 + ]
616 + );
617 + $this->add_control(
618 + 'custom_messages',
619 + [
620 + 'label' => esc_html__('Custom Messages', 'uicore-elements'),
621 + 'type' => Controls_Manager::SWITCHER,
622 + 'default' => '',
623 + 'separator' => 'before',
624 + 'render_type' => 'none',
625 + ]
626 + );
627 + $this->add_control(
628 + 'success_message',
629 + [
630 + 'label' => esc_html__('Success Message', 'uicore-elements'),
631 + 'type' => Controls_Manager::TEXT,
632 + 'default' => $messages['success'],
633 + 'placeholder' => $messages['success'],
634 + 'label_block' => true,
635 + 'condition' => [
636 + 'custom_messages!' => '',
637 + ],
638 + 'render_type' => 'none',
639 + 'dynamic' => [
640 + 'active' => true,
641 + ],
642 + ]
643 + );
644 + $this->add_control(
645 + 'error_message',
646 + [
647 + 'label' => esc_html__('Form Error', 'uicore-elements'),
648 + 'type' => Controls_Manager::TEXT,
649 + 'default' => $messages['error'],
650 + 'placeholder' => $messages['error'],
651 + 'label_block' => true,
652 + 'condition' => [
653 + 'custom_messages!' => '',
654 + ],
655 + 'render_type' => 'none',
656 + 'dynamic' => [
657 + 'active' => true,
658 + ],
659 + ]
660 + );
661 + $this->add_control(
662 + 'mail_error_message',
663 + [
664 + 'label' => esc_html__('Email Sending Error', 'uicore-elements'),
665 + 'type' => Controls_Manager::TEXT,
666 + 'default' => $messages['mail_error'],
667 + 'placeholder' => $messages['mail_error'],
668 + 'label_block' => true,
669 + 'condition' => [
670 + 'custom_messages!' => '',
671 + ],
672 + 'render_type' => 'none',
673 + 'dynamic' => [
674 + 'active' => true,
675 + ],
676 + ]
677 + );
678 + $this->add_control(
679 + 'redirect_message',
680 + [
681 + 'label' => esc_html__('Sucessfull Redirect', 'uicore-elements'),
682 + 'type' => Controls_Manager::TEXT,
683 + 'default' => $messages['redirect'],
684 + 'placeholder' => $messages['redirect'],
685 + 'label_block' => true,
686 + 'conditions' => [
687 + 'terms' => [
688 + [
689 + 'name' => 'custom_messages',
690 + 'operator' => '!=',
691 + 'value' => '',
692 + ],
693 + [
694 + 'name' => 'submit_actions',
695 + 'operator' => 'contains',
696 + 'value' => 'redirect',
697 + ]
698 + ],
699 + ],
700 + 'render_type' => 'none',
701 + 'dynamic' => [
702 + 'active' => true,
703 + ],
704 + ]
705 + );
706 + $this->end_controls_section();
707 + }
708 + function TRAIT_register_button_controls(string $submit_text = 'send')
709 + {
710 + $this->add_responsive_control(
711 + 'button_width',
712 + [
713 + 'label' => esc_html__('Column Width', 'uicore-elements'),
714 + 'type' => Controls_Manager::SELECT,
715 + 'options' => $this->TRAIT_get_width_values(),
716 + 'default' => '20',
717 + ]
718 + );
719 + $this->add_responsive_control(
720 + 'button_align',
721 + [
722 + 'label' => esc_html__('Alignment', 'uicore-elements'),
723 + 'type' => Controls_Manager::CHOOSE,
724 + 'options' => [
725 + 'left' => [
726 + 'title' => esc_html__('Left', 'uicore-elements'),
727 + 'icon' => 'eicon-text-align-left',
728 + ],
729 + 'center' => [
730 + 'title' => esc_html__('Center', 'uicore-elements'),
731 + 'icon' => 'eicon-text-align-center',
732 + ],
733 + 'right' => [
734 + 'title' => esc_html__('Right', 'uicore-elements'),
735 + 'icon' => 'eicon-text-align-right',
736 + ],
737 + 'stretch' => [
738 + 'title' => esc_html__('Justified', 'uicore-elements'),
739 + 'icon' => 'eicon-text-align-justify',
740 + ],
741 + ],
742 + 'default' => 'stretch',
743 + 'prefix_class' => 'ui-e-submit-align-',
744 + ]
745 + );
746 + $this->add_control(
747 + 'button_text',
748 + [
749 + 'label' => esc_html__('Submit', 'uicore-elements'),
750 + 'type' => Controls_Manager::TEXT,
751 + /* translators: %s: Submit text */
752 + 'default' => esc_html(sprintf('%s', $submit_text), 'uicore-elements'),
753 + /* translators: %s: Submit text */
754 + 'placeholder' => esc_html(sprintf('%s', $submit_text), 'uicore-elements'),
755 + 'dynamic' => [
756 + 'active' => true,
757 + ],
758 + 'ai' => [
759 + 'active' => false,
760 + ],
761 + ]
762 + );
763 + $this->add_control(
764 + 'selected_button_icon',
765 + [
766 + 'label' => esc_html__('Icon', 'uicore-elements'),
767 + 'type' => Controls_Manager::ICONS,
768 + 'skin' => 'inline',
769 + 'label_block' => false,
770 + ]
771 + );
772 + $this->add_control(
773 + 'button_icon_align',
774 + [
775 + 'label' => esc_html__('Icon Position', 'uicore-elements'),
776 + 'type' => Controls_Manager::SELECT,
777 + 'default' => 'left',
778 + 'options' => [
779 + 'left' => esc_html__('Before', 'uicore-elements'),
780 + 'right' => esc_html__('After', 'uicore-elements'),
781 + ],
782 + 'condition' => [
783 + 'selected_button_icon[value]!' => '',
784 + ],
785 + ]
786 + );
787 + $this->add_control(
788 + 'button_icon_indent',
789 + [
790 + 'label' => esc_html__('Icon Spacing', 'uicore-elements'),
791 + 'type' => Controls_Manager::SLIDER,
792 + 'size_units' => ['px', 'em', 'rem', 'custom'],
793 + 'range' => [
794 + 'px' => [
795 + 'max' => 100,
796 + ],
797 + 'em' => [
798 + 'max' => 10,
799 + ],
800 + 'rem' => [
801 + 'max' => 10,
802 + ],
803 + ],
804 + 'condition' => [
805 + 'selected_button_icon[value]!' => '',
806 + ],
807 + 'selectors' => [
808 + '{{WRAPPER}} .elementor-button .ui-e-align-right' => 'margin-left: {{SIZE}}{{UNIT}};',
809 + '{{WRAPPER}} .elementor-button .ui-e-align-left' => 'margin-right: {{SIZE}}{{UNIT}};',
810 + ],
811 + ]
812 + );
813 + $this->add_control(
814 + 'button_css_id',
815 + [
816 + 'label' => esc_html__('Button ID', 'uicore-elements'),
817 + 'type' => Controls_Manager::TEXT,
818 + 'default' => '',
819 + 'ai' => [
820 + 'active' => false,
821 + ],
822 + 'title' => esc_html__('Add your custom id WITHOUT the Pound key. e.g: my-id', 'uicore-elements'),
823 + 'description' => esc_html__('Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows `A-z 0-9` & underscore chars without spaces.', 'uicore-elements'),
824 + 'separator' => 'before',
825 + 'dynamic' => [
826 + 'active' => true,
827 + ],
828 + ]
829 + );
830 + }
831 +
832 + /**
833 + * Register the submit action options;
834 + *
835 + * @param array $options - The options list for the elementor SELECT2 control.
836 + *
837 + * @return void
838 + */
839 + function TRAIT_register_submit_actions_controls($options)
840 + {
841 + $this->start_controls_section(
842 + 'section_actions',
843 + [
844 + 'label' => esc_html__('Actions After Submit', 'uicore-elements'),
845 + ]
846 + );
847 +
848 + $this->add_control(
849 + 'submit_actions',
850 + [
851 + 'label' => esc_html__('Submit Actions', 'uicore-elements'),
852 + 'type' => Controls_Manager::SELECT2,
853 + 'label_block' => true,
854 + 'multiple' => true,
855 + 'options' => $options,
856 + 'default' => ['email'],
857 + ]
858 + );
859 +
860 + $this->end_controls_section();
861 + }
862 +
863 + // Style Controls
864 + function TRAIT_register_form_style_controls($section = true)
865 + {
866 + if ($section) {
867 + $this->start_controls_section(
868 + 'section_form_style',
869 + [
870 + 'label' => esc_html__('Form', 'uicore-elements'),
871 + 'tab' => Controls_Manager::TAB_STYLE,
872 + ]
873 + );
874 + }
875 + $this->add_control(
876 + 'column_gap',
877 + [
878 + 'label' => esc_html__('Columns Gap', 'uicore-elements'),
879 + 'type' => Controls_Manager::SLIDER,
880 + 'size_units' => ['px', 'em', 'rem', 'custom'],
881 + 'default' => [
882 + 'size' => 10,
883 + ],
884 + 'range' => [
885 + 'px' => [
886 + 'max' => 60,
887 + ],
888 + 'em' => [
889 + 'max' => 6,
890 + ],
891 + 'rem' => [
892 + 'max' => 6,
893 + ],
894 + ],
895 + 'selectors' => [
896 + '{{WRAPPER}} .ui-e-field-group' => 'padding-right: calc( {{SIZE}}{{UNIT}}/2 ); padding-left: calc( {{SIZE}}{{UNIT}}/2 );',
897 + '{{WRAPPER}} .ui-e-fields-wrp' => 'margin-left: calc( -{{SIZE}}{{UNIT}}/2 ); margin-right: calc( -{{SIZE}}{{UNIT}}/2 );',
898 + ],
899 + ]
900 + );
901 + $this->add_control(
902 + 'row_gap',
903 + [
904 + 'label' => esc_html__('Rows Gap', 'uicore-elements'),
905 + 'type' => Controls_Manager::SLIDER,
906 + 'size_units' => ['px', 'em', 'rem', 'custom'],
907 + 'default' => [
908 + 'size' => 10,
909 + ],
910 + 'range' => [
911 + 'px' => [
912 + 'max' => 60,
913 + ],
914 + 'em' => [
915 + 'max' => 6,
916 + ],
917 + 'rem' => [
918 + 'max' => 6,
919 + ],
920 + ],
921 + 'selectors' => [
922 + '{{WRAPPER}} .ui-e-field-group' => 'margin-bottom: {{SIZE}}{{UNIT}};',
923 + '{{WRAPPER}} .ui-e-fields-wrp' => 'margin-bottom: -{{SIZE}}{{UNIT}};',
924 + ],
925 + ]
926 + );
927 + $this->add_control(
928 + 'heading_label',
929 + [
930 + 'label' => esc_html__('Label', 'uicore-elements'),
931 + 'type' => Controls_Manager::HEADING,
932 + 'separator' => 'before',
933 + ]
934 + );
935 + $this->add_control(
936 + 'label_spacing',
937 + [
938 + 'label' => esc_html__('Spacing', 'uicore-elements'),
939 + 'type' => Controls_Manager::SLIDER,
940 + 'size_units' => ['px', 'em', 'rem', 'custom'],
941 + 'default' => [
942 + 'size' => 0,
943 + ],
944 + 'range' => [
945 + 'px' => [
946 + 'max' => 60,
947 + ],
948 + 'em' => [
949 + 'max' => 6,
950 + ],
951 + 'rem' => [
952 + 'max' => 6,
953 + ],
954 + ],
955 + 'selectors' => [
956 + 'body {{WRAPPER}} .ui-e-field-group > label' => 'padding-bottom: {{SIZE}}{{UNIT}};',
957 + ],
958 + ]
959 + );
960 + $this->add_control(
961 + 'label_color',
962 + [
963 + 'label' => esc_html__('Text Color', 'uicore-elements'),
964 + 'type' => Controls_Manager::COLOR,
965 + 'selectors' => [
966 + '{{WRAPPER}} .ui-e-field-group > label, {{WRAPPER}} .ui-e-field-subgroup label' => 'color: {{VALUE}};',
967 + ],
968 + 'default' => 'var(--e-global-color-uicore_body)',
969 + ]
970 + );
971 + $this->add_control(
972 + 'mark_required_color',
973 + [
974 + 'label' => esc_html__('Mark Color', 'uicore-elements'),
975 + 'type' => Controls_Manager::COLOR,
976 + 'default' => '',
977 + 'selectors' => [
978 + '{{WRAPPER}} .ui-e-required .ui-e-label:after' => 'color: {{COLOR}};',
979 + ],
980 + 'condition' => [
981 + 'mark_required' => 'yes',
982 + ],
983 + ]
984 + );
985 + $this->add_group_control(
986 + Group_Control_Typography::get_type(),
987 + [
988 + 'name' => 'label_typography',
989 + 'selector' => '{{WRAPPER}} .ui-e-field-group > label',
990 + 'global' => [
991 + 'default' => Global_Typography::TYPOGRAPHY_TEXT,
992 + ],
993 + ]
994 + );
995 + $this->add_control(
996 + 'form_styles_component_divider',
997 + [
998 + 'type' => Controls_Manager::DIVIDER,
999 + ]
1000 + );
1001 + if ($section) {
1002 + $this->end_controls_section();
1003 + }
1004 + }
1005 + function TRAIT_register_fields_style_controls($section = true)
1006 + {
1007 + if ($section) {
1008 + $this->start_controls_section(
1009 + 'section_field_style',
1010 + [
1011 + 'label' => esc_html__('Fields', 'uicore-elements'),
1012 + 'tab' => Controls_Manager::TAB_STYLE,
1013 + ]
1014 + );
1015 + }
1016 +
1017 + $this->start_controls_tabs(
1018 + 'field_style_tabs'
1019 + );
1020 +
1021 + $this->start_controls_tab(
1022 + 'field_normal_tab',
1023 + [
1024 + 'label' => esc_html__('Normal', 'uicore-elements'),
1025 + ]
1026 + );
1027 +
1028 + $this->add_group_control(
1029 + Group_Control_Typography::get_type(),
1030 + [
1031 + 'name' => 'field_typography',
1032 + 'selector' => '{{WRAPPER}} .ui-e-field-group .ui-e-field, {{WRAPPER}} .ui-e-field-subgroup label, {{WRAPPER}} .ui-e-field-group .ui-e-field-select select',
1033 + 'global' => [
1034 + 'default' => Global_Typography::TYPOGRAPHY_TEXT,
1035 + ],
1036 + ]
1037 + );
1038 + $this->add_control(
1039 + 'field_text_color',
1040 + [
1041 + 'label' => esc_html__('Text Color', 'uicore-elements'),
1042 + 'type' => Controls_Manager::COLOR,
1043 + 'selectors' => [
1044 + '{{WRAPPER}} .ui-e-field-group .ui-e-field, {{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'color: {{VALUE}};',
1045 + ],
1046 + 'default' => 'var(--e-global-color-uicore_body)',
1047 +
1048 + ]
1049 + );
1050 + $this->add_control(
1051 + 'field_placeholder_color',
1052 + [
1053 + 'label' => esc_html__('Placeholder Color', 'uicore-elements'),
1054 + 'type' => Controls_Manager::COLOR,
1055 + 'selectors' => [
1056 + '{{WRAPPER}} .ui-e-field-group .ui-e-field::placeholder' => 'color: {{VALUE}};',
1057 + ],
1058 + 'default' => 'var(--e-global-color-uicore_body)',
1059 +
1060 + ]
1061 + );
1062 + $this->add_control(
1063 + 'field_background_color',
1064 + [
1065 + 'label' => esc_html__('Background Color', 'uicore-elements'),
1066 + 'type' => Controls_Manager::COLOR,
1067 + 'default' => '#ffffff',
1068 + 'selectors' => [
1069 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
1070 + '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'background-color: {{VALUE}};',
1071 + ],
1072 + ]
1073 + );
1074 + $this->add_group_control(
1075 + Group_Control_Border::get_type(),
1076 + [
1077 + 'name' => 'field_border',
1078 + 'selector' =>
1079 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select),
1080 + {{WRAPPER}} .ui-e-field-group .ui-e-field-select select',
1081 + ]
1082 + );
1083 + $this->add_group_control(
1084 + Group_Control_Box_Shadow::get_type(),
1085 + [
1086 + 'name' => 'field_box_shadow',
1087 + 'selector' => '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select),
1088 + {{WRAPPER}} .ui-e-field-group .ui-e-field-select select',
1089 + ]
1090 + );
1091 +
1092 + $this->end_controls_tab();
1093 +
1094 + $this->start_controls_tab(
1095 + 'field_hover_tab',
1096 + [
1097 + 'label' => esc_html__('Hover', 'uicore-elements'),
1098 + ]
1099 + );
1100 +
1101 + $this->add_control(
1102 + 'field_text_hover_color',
1103 + [
1104 + 'label' => esc_html__('Text Color', 'uicore-elements'),
1105 + 'type' => Controls_Manager::COLOR,
1106 + 'selectors' => [
1107 + '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field, {{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select' => 'color: {{VALUE}};',
1108 + ],
1109 + 'default' => 'var(--e-global-color-uicore_body)',
1110 +
1111 + ]
1112 + );
1113 + $this->add_control(
1114 + 'field_placeholder_hover_color',
1115 + [
1116 + 'label' => esc_html__('Placeholder Color', 'uicore-elements'),
1117 + 'type' => Controls_Manager::COLOR,
1118 + 'selectors' => [
1119 + '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field::placeholder' => 'color: {{VALUE}};',
1120 + ],
1121 + 'default' => 'var(--e-global-color-uicore_body)',
1122 +
1123 + ]
1124 + );
1125 + $this->add_control(
1126 + 'field_background_hover_color',
1127 + [
1128 + 'label' => esc_html__('Background Color', 'uicore-elements'),
1129 + 'type' => Controls_Manager::COLOR,
1130 + 'default' => '#ffffff',
1131 + 'selectors' => [
1132 + '{{WRAPPER}} .ui-e-field-group:hover:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
1133 + '{{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select' => 'background-color: {{VALUE}};',
1134 + ],
1135 + ]
1136 + );
1137 + $this->add_group_control(
1138 + Group_Control_Border::get_type(),
1139 + [
1140 + 'name' => 'field_hover_border',
1141 + 'selector' =>
1142 + '{{WRAPPER}} .ui-e-field-group:hover:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select),
1143 + {{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select',
1144 + ]
1145 + );
1146 + $this->add_group_control(
1147 + Group_Control_Box_Shadow::get_type(),
1148 + [
1149 + 'name' => 'field_box_shadow_hover',
1150 + 'selector' => '{{WRAPPER}} .ui-e-field-group:hover:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select),
1151 + {{WRAPPER}} .ui-e-field-group:hover .ui-e-field-select select',
1152 + ]
1153 + );
1154 +
1155 + $this->end_controls_tab();
1156 +
1157 + $this->start_controls_tab(
1158 + 'field_active_tab',
1159 + [
1160 + 'label' => esc_html__('Active', 'uicore-elements'),
1161 + ]
1162 + );
1163 +
1164 + $this->add_control(
1165 + 'field_text_active_color',
1166 + [
1167 + 'label' => esc_html__('Text Color', 'uicore-elements'),
1168 + 'type' => Controls_Manager::COLOR,
1169 + 'selectors' => [
1170 + '{{WRAPPER}} .ui-e-field-group .ui-e-field:focus, {{WRAPPER}} .ui-e-field-group .ui-e-field-select select:focus' => 'color: {{VALUE}};',
1171 + ],
1172 + 'default' => 'var(--e-global-color-uicore_body)',
1173 +
1174 + ]
1175 + );
1176 + $this->add_control(
1177 + 'field_background_active_color',
1178 + [
1179 + 'label' => esc_html__('Background Color', 'uicore-elements'),
1180 + 'type' => Controls_Manager::COLOR,
1181 + 'default' => '#ffffff',
1182 + 'selectors' => [
1183 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:focus:not(.ui-e-field-select)' => 'background-color: {{VALUE}};',
1184 + '{{WRAPPER}} .ui-e-field-group .ui-e-field-select:focus select' => 'background-color: {{VALUE}};',
1185 + ],
1186 + ]
1187 + );
1188 + $this->add_group_control(
1189 + Group_Control_Border::get_type(),
1190 + [
1191 + 'name' => 'field_active_border',
1192 + 'selector' =>
1193 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:focus:not(.ui-e-field-select),
1194 + {{WRAPPER}} .ui-e-field-group .ui-e-field-select:focus select',
1195 + ]
1196 + );
1197 + $this->add_group_control(
1198 + Group_Control_Box_Shadow::get_type(),
1199 + [
1200 + 'name' => 'field_box_shadow_active',
1201 + 'selector' => '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:focus:not(.ui-e-field-select),
1202 + {{WRAPPER}} .ui-e-field-group .ui-e-field-select:focus select',
1203 + ]
1204 + );
1205 +
1206 + $this->end_controls_tab();
1207 +
1208 + $this->end_controls_tabs();
1209 +
1210 + $this->add_responsive_control(
1211 + 'field_border_radius',
1212 + [
1213 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
1214 + 'type' => Controls_Manager::DIMENSIONS,
1215 + 'size_units' => ['px', '%', 'em', 'rem', 'custom'],
1216 + 'selectors' => [
1217 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1218 + '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1219 + ],
1220 + 'separator' => 'before'
1221 + ]
1222 + );
1223 + $this->add_responsive_control(
1224 + 'field_padding',
1225 + [
1226 + 'label' => esc_html__('Padding', 'uicore-elements'),
1227 + 'type' => Controls_Manager::DIMENSIONS,
1228 + 'size_units' => ['px', '%', 'em', 'rem', 'custom'],
1229 + 'selectors' => [
1230 + '{{WRAPPER}} .ui-e-field-group:not(.ui-e-field-type-file, .ui-e-field-type-acceptance) .ui-e-field:not(.ui-e-field-select)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1231 + '{{WRAPPER}} .ui-e-field-group .ui-e-field-select select' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1232 + ],
1233 + ]
1234 + );
1235 + if ($section) {
1236 + $this->end_controls_section();
1237 + }
1238 + }
1239 + function TRAIT_register_button_style_controls($section = true)
1240 + {
1241 + if ($section) {
1242 + $this->start_controls_section(
1243 + 'section_button_style',
1244 + [
1245 + 'label' => esc_html__('Button', 'uicore-elements'),
1246 + 'tab' => Controls_Manager::TAB_STYLE,
1247 + ]
1248 + );
1249 + }
1250 +
1251 + $this->add_group_control(
1252 + Group_Control_Typography::get_type(),
1253 + [
1254 + 'name' => 'button_typography',
1255 + 'global' => [
1256 + 'default' => Global_Typography::TYPOGRAPHY_ACCENT,
1257 + ],
1258 + 'selector' => '{{WRAPPER}} .elementor-button',
1259 + ]
1260 + );
1261 + $this->add_group_control(
1262 + Group_Control_Border::get_type(),
1263 + [
1264 + 'name' => 'button_border',
1265 + 'selector' => '{{WRAPPER}} .elementor-button',
1266 + 'exclude' => [
1267 + 'color',
1268 + ],
1269 + ]
1270 + );
1271 +
1272 + $this->start_controls_tabs('tabs_button_style');
1273 +
1274 + $this->start_controls_tab(
1275 + 'tab_button_normal',
1276 + [
1277 + 'label' => esc_html__('Normal', 'uicore-elements'),
1278 + ]
1279 + );
1280 +
1281 + $this->add_control(
1282 + 'button_background_color',
1283 + [
1284 + 'label' => esc_html__('Background Color', 'uicore-elements'),
1285 + 'type' => Controls_Manager::COLOR,
1286 + 'selectors' => [
1287 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'background-color: {{VALUE}};',
1288 + '{{WRAPPER}} .elementor-button[type="submit"]' => 'background-color: {{VALUE}};',
1289 + ],
1290 + ]
1291 + );
1292 + $this->add_control(
1293 + 'button_text_color',
1294 + [
1295 + 'label' => esc_html__('Text Color', 'uicore-elements'),
1296 + 'type' => Controls_Manager::COLOR,
1297 + 'default' => '#ffffff',
1298 + 'selectors' => [
1299 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'color: {{VALUE}};',
1300 + '{{WRAPPER}} .elementor-button[type="submit"]' => 'color: {{VALUE}};',
1301 + '{{WRAPPER}} .elementor-button[type="submit"] svg *' => 'fill: {{VALUE}};',
1302 + ],
1303 + ]
1304 + );
1305 + $this->add_control(
1306 + 'button_border_color',
1307 + [
1308 + 'label' => esc_html__('Border Color', 'uicore-elements'),
1309 + 'type' => Controls_Manager::COLOR,
1310 + 'default' => '',
1311 + 'selectors' => [
1312 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'border-color: {{VALUE}};',
1313 + '{{WRAPPER}} .elementor-button[type="submit"]' => 'border-color: {{VALUE}};',
1314 + ],
1315 + 'condition' => [
1316 + 'button_border_border!' => '',
1317 + ],
1318 + ]
1319 + );
1320 +
1321 + $this->end_controls_tab();
1322 +
1323 + $this->start_controls_tab(
1324 + 'tab_button_hover',
1325 + [
1326 + 'label' => esc_html__('Hover', 'uicore-elements'),
1327 + ]
1328 + );
1329 +
1330 + $this->add_control(
1331 + 'button_background_hover_color',
1332 + [
1333 + 'label' => esc_html__('Background Color', 'uicore-elements'),
1334 + 'type' => Controls_Manager::COLOR,
1335 + 'default' => '',
1336 + 'selectors' => [
1337 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'background-color: {{VALUE}};',
1338 + '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'background-color: {{VALUE}};',
1339 + ],
1340 + ]
1341 + );
1342 + $this->add_control(
1343 + 'button_hover_color',
1344 + [
1345 + 'label' => esc_html__('Text Color', 'uicore-elements'),
1346 + 'type' => Controls_Manager::COLOR,
1347 + 'default' => '#ffffff',
1348 + 'selectors' => [
1349 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'color: {{VALUE}};',
1350 + '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'color: {{VALUE}};',
1351 + '{{WRAPPER}} .elementor-button[type="submit"]:hover svg *' => 'fill: {{VALUE}};',
1352 + ],
1353 + ]
1354 + );
1355 + $this->add_control(
1356 + 'button_hover_border_color',
1357 + [
1358 + 'label' => esc_html__('Border Color', 'uicore-elements'),
1359 + 'type' => Controls_Manager::COLOR,
1360 + 'default' => '',
1361 + 'selectors' => [
1362 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next:hover' => 'border-color: {{VALUE}};',
1363 + '{{WRAPPER}} .elementor-button[type="submit"]:hover' => 'border-color: {{VALUE}};',
1364 + ],
1365 + 'condition' => [
1366 + 'button_border_border!' => '',
1367 + ],
1368 + ]
1369 + );
1370 + $this->add_control(
1371 + 'hover_transition_duration',
1372 + [
1373 + 'label' => esc_html__('Transition Duration', 'uicore-elements'),
1374 + 'type' => Controls_Manager::SLIDER,
1375 + 'size_units' => ['s', 'ms', 'custom'],
1376 + 'default' => [
1377 + 'unit' => 'ms',
1378 + ],
1379 + 'selectors' => [
1380 + '{{WRAPPER}} .e-form__buttons__wrapper__button-previous' => 'transition-duration: {{SIZE}}{{UNIT}};',
1381 + '{{WRAPPER}} .e-form__buttons__wrapper__button-next' => 'transition-duration: {{SIZE}}{{UNIT}};',
1382 + '{{WRAPPER}} .elementor-button[type="submit"] svg *' => 'transition-duration: {{SIZE}}{{UNIT}};',
1383 + '{{WRAPPER}} .elementor-button[type="submit"]' => 'transition-duration: {{SIZE}}{{UNIT}};',
1384 + ],
1385 + ]
1386 + );
1387 + $this->add_control(
1388 + 'button_hover_animation',
1389 + [
1390 + 'label' => esc_html__('Animation', 'uicore-elements'),
1391 + 'type' => Controls_Manager::HOVER_ANIMATION,
1392 + ]
1393 + );
1394 +
1395 + $this->end_controls_tab();
1396 +
1397 + $this->end_controls_tabs();
1398 +
1399 + $this->add_responsive_control(
1400 + 'button_border_radius',
1401 + [
1402 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
1403 + 'type' => Controls_Manager::DIMENSIONS,
1404 + 'size_units' => ['px', '%', 'em', 'rem', 'custom'],
1405 + 'selectors' => [
1406 + '{{WRAPPER}} .elementor-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1407 + ],
1408 + 'separator' => 'before',
1409 + ]
1410 + );
1411 +
1412 + $this->add_responsive_control(
1413 + 'button_text_padding',
1414 + [
1415 + 'label' => esc_html__('Text Padding', 'uicore-elements'),
1416 + 'type' => Controls_Manager::DIMENSIONS,
1417 + 'size_units' => ['px', '%', 'em', 'rem', 'custom'],
1418 + 'selectors' => [
1419 + '{{WRAPPER}} .elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1420 + ],
1421 + ]
1422 + );
1423 +
1424 + if ($section) {
1425 + $this->end_controls_section();
1426 + }
1427 + }
1428 + function TRAIT_register_messages_style_controls($section = true)
1429 + {
1430 + if ($section) {
1431 + $this->start_controls_section(
1432 + 'section_messages_style',
1433 + [
1434 + 'label' => esc_html__('Messages', 'uicore-elements'),
1435 + 'tab' => Controls_Manager::TAB_STYLE,
1436 + ]
1437 + );
1438 + }
1439 +
1440 + $this->add_control(
1441 + 'show_messages',
1442 + [
1443 + 'label' => esc_html__('Show/Hide messages', 'uicore-elements'),
1444 + 'type' => Controls_Manager::BUTTON,
1445 + 'separator' => 'before',
1446 + 'text' => esc_html__('Toggle', 'uicore-elements'),
1447 + 'event' => 'ui-e-form-show-messages',
1448 + ]
1449 + );
1450 + $this->add_group_control(
1451 + Group_Control_Typography::get_type(),
1452 + [
1453 + 'name' => 'message_typography',
1454 + 'global' => [
1455 + 'default' => Global_Typography::TYPOGRAPHY_TEXT,
1456 + ],
1457 + 'selector' => '{{WRAPPER}} .ui-e-message',
1458 + ]
1459 + );
1460 + $this->add_control(
1461 + 'success_message_color',
1462 + [
1463 + 'label' => esc_html__('Success Message Color', 'uicore-elements'),
1464 + 'type' => Controls_Manager::COLOR,
1465 + 'default' => '#4CAF50',
1466 + 'selectors' => [
1467 + '{{WRAPPER}} .ui-e-message span.success' => 'color: {{COLOR}};',
1468 + ],
1469 + ]
1470 + );
1471 + $this->add_control(
1472 + 'error_message_color',
1473 + [
1474 + 'label' => esc_html__('Error Message Color', 'uicore-elements'),
1475 + 'type' => Controls_Manager::COLOR,
1476 + 'default' => '#F44336',
1477 + 'selectors' => [
1478 + '{{WRAPPER}} .ui-e-message span.error' => 'color: {{COLOR}};',
1479 + ],
1480 + ]
1481 + );
1482 +
1483 + if ($section) {
1484 + $this->end_controls_section();
1485 + }
1486 + }
1487 + function TRAIT_register_all_form_style_controls()
1488 + {
1489 + $this->TRAIT_register_form_style_controls();
1490 + $this->TRAIT_register_fields_style_controls();
1491 + $this->TRAIT_register_button_style_controls();
1492 + $this->TRAIT_register_messages_style_controls();
1493 + }
1494 +
1495 + // Helper and Utility Functions
1496 + function TRAIT_get_width_values()
1497 + {
1498 + return [
1499 + '' => esc_html__('Default', 'uicore-elements'),
1500 + '100' => '100%',
1501 + '80' => '80%',
1502 + '75' => '75%',
1503 + '70' => '70%',
1504 + '66' => '66%',
1505 + '60' => '60%',
1506 + '50' => '50%',
1507 + '40' => '40%',
1508 + '33' => '33%',
1509 + '30' => '30%',
1510 + '25' => '25%',
1511 + '20' => '20%',
1512 + ];
1513 + }
1514 + function TRAIT_recaptcha_key_js()
1515 + {
1516 +?>
1517 + <script>
1518 + window.uicore_elements_recaptcha = '<?php echo esc_html(get_option('uicore_elements_recaptcha_site_key')); ?>';
1519 + </script>
1520 +<?php
1521 + }
1522 +}