PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.86
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.86
51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 All 40 releases
← All changes | includes/widgets/Form_Builder/Form_Builder.php +4283 -0 51.1.2 → 51.1.86 View file →
@@ -1,0 +1,4283 @@
1 +<?php
2 +
3 +namespace King_Addons;
4 +
5 +use Elementor\Controls_Manager;
6 +use Elementor\Group_Control_Border;
7 +use Elementor\Group_Control_Typography;
8 +use Elementor\Icons_Manager;
9 +use Elementor\Repeater;
10 +use Elementor\Utils;
11 +use Elementor\Widget_Base;
12 +use Elementor\Plugin;
13 +
14 +if (!defined('ABSPATH')) {
15 + exit;
16 +}
17 +
18 +class Form_Builder extends Widget_Base
19 +{
20 +
21 +
22 +
23 + public function get_name()
24 + {
25 + return 'king-addons-form-builder';
26 + }
27 +
28 + public function get_title()
29 + {
30 + return esc_html__('Form Builder', 'king-addons');
31 + }
32 +
33 + public function get_icon()
34 + {
35 + return 'king-addons-icon king-addons-form-builder';
36 + }
37 +
38 + public function get_categories()
39 + {
40 + return ['king-addons'];
41 + }
42 +
43 + public function get_keywords()
44 + {
45 + return ['king addons', 'king', 'addons', 'kingaddons', 'king-addons', 'cf7', 'contact form 7', 'builder', 'ninja', 'caldera', 'contact form',
46 + 'caldera forms', 'ninja forms', 'wpforms', 'wp forms', 'email', 'mail', 'email', 'form', 'forms', 'email', 'contact'];
47 + }
48 +
49 + public function get_script_depends()
50 + {
51 + return [
52 + KING_ADDONS_ASSETS_UNIQUE_KEY . '-animation-loading',
53 + KING_ADDONS_ASSETS_UNIQUE_KEY . '-form-builder-script'
54 + ];
55 + }
56 +
57 + public function get_style_depends(): array
58 + {
59 + return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-form-builder-style'];
60 + }
61 +
62 + public function get_custom_help_url()
63 + {
64 + return 'mailto:[email protected]?subject=Bug Report - King Addons&body=Please describe the issue';
65 + }
66 +
67 + protected function get_control_id($control_id)
68 + {
69 + return $control_id;
70 + }
71 +
72 + public function get_label()
73 + {
74 + return esc_html__('Email', 'king-addons');
75 + }
76 +
77 + public static function get_site_domain()
78 + {
79 + return str_ireplace('www.', '', parse_url(home_url(), PHP_URL_HOST));
80 + }
81 +
82 + public function submit_action_args()
83 + {
84 + return [
85 + 'email' => 'Email',
86 + 'redirect' => 'Redirect',
87 + 'pro-sb' => 'Submission (Pro)',
88 + 'pro-mch' => 'Mailchimp (Pro)',
89 + 'pro-wh' => 'Webhook (Pro)',
90 + 'integrations' => 'Integrations (Pro)',
91 + 'payment' => 'Payment (Pro)'
92 + ];
93 + }
94 +
95 + public function register_settings_section_submissions($widget)
96 + {
97 + $widget->start_controls_section(
98 + $this->get_control_id('section_submissions'),
99 + [
100 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Submissions', 'king-addons'),
101 + 'tab' => Controls_Manager::TAB_CONTENT,
102 + 'condition' => [
103 + 'submit_actions' => 'submissions',
104 + ],
105 + ]
106 + );
107 +
108 + $widget->add_control(
109 + $this->get_control_id('submissions_action_message'),
110 + [
111 + 'type' => Controls_Manager::RAW_HTML,
112 + 'raw' => sprintf(
113 + __(
114 + 'View Submissions in King Addons > <a href="%s" target="_blank">Form Submissions</a>',
115 + 'king-addons'
116 + ),
117 + self_admin_url('edit.php?post_type=king-addons-fb-sub')
118 + ),
119 + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
120 + ]
121 + );
122 +
123 + $widget->end_controls_section();
124 + }
125 +
126 + public function register_settings_section_webhook($widget)
127 + {
128 + $widget->start_controls_section(
129 + $this->get_control_id('section_webhook'),
130 + [
131 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Webhook', 'king-addons'),
132 + 'tab' => Controls_Manager::TAB_CONTENT,
133 + 'condition' => [
134 + 'submit_actions' => 'webhook',
135 + ],
136 + ]
137 + );
138 +
139 + $widget->add_control(
140 + 'webhook_url',
141 + [
142 + 'label' => esc_html__('Webhook URL', 'king-addons'),
143 + 'type' => Controls_Manager::TEXT,
144 + 'placeholder' => esc_html__('your-webhook-url.com', 'king-addons'),
145 + 'ai' => [
146 + 'active' => false,
147 + ],
148 + 'dynamic' => [
149 + 'active' => true,
150 + ],
151 + 'label_block' => true,
152 + 'separator' => 'before',
153 + 'description' => esc_html__('Enter the webhook URL (e.g. Zapier) that will receive the submitted data.', 'king-addons'),
154 + 'render_type' => 'none',
155 + ]
156 + );
157 +
158 + $widget->end_controls_section();
159 + }
160 +
161 + /**
162 + * Settings for the Integrations action.
163 + *
164 + * Everything here is stored per form and read back on the server when a
165 + * submission arrives; nothing travels through the browser.
166 + *
167 + * @param \Elementor\Widget_Base $widget Widget the controls belong to.
168 + *
169 + * @return void
170 + */
171 + public function register_settings_section_integrations($widget)
172 + {
173 + if (!class_exists('King_Addons\\Form_Integrations')) {
174 + return;
175 + }
176 +
177 + $widget->start_controls_section(
178 + $this->get_control_id('section_integrations'),
179 + [
180 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Integrations', 'king-addons'),
181 + 'tab' => Controls_Manager::TAB_CONTENT,
182 + 'condition' => [
183 + 'submit_actions' => 'integrations',
184 + ],
185 + ]
186 + );
187 +
188 + $widget->add_control(
189 + 'integration_services',
190 + [
191 + 'label' => esc_html__('Send to', 'king-addons'),
192 + 'type' => Controls_Manager::SELECT2,
193 + 'multiple' => true,
194 + 'label_block' => true,
195 + 'options' => Form_Integrations::services(),
196 + 'render_type' => 'none',
197 + ]
198 + );
199 +
200 + $widget->add_control(
201 + 'integration_email_field',
202 + [
203 + 'label' => esc_html__('Email field ID', 'king-addons'),
204 + 'type' => Controls_Manager::TEXT,
205 + 'description' => esc_html__('Which field holds the address. Left empty, the first value that looks like an email is used.', 'king-addons'),
206 + 'render_type' => 'none',
207 + ]
208 + );
209 +
210 + $widget->add_control(
211 + 'integration_name_field',
212 + [
213 + 'label' => esc_html__('Name field ID', 'king-addons'),
214 + 'type' => Controls_Manager::TEXT,
215 + 'render_type' => 'none',
216 + ]
217 + );
218 +
219 + $text_controls = [
220 + ['slack_webhook_url', esc_html__('Slack webhook URL', 'king-addons'), 'slack', 'https://hooks.slack.com/services/…'],
221 + ['slack_title', esc_html__('Slack message title', 'king-addons'), 'slack', ''],
222 + ['telegram_bot_token', esc_html__('Telegram bot token', 'king-addons'), 'telegram', ''],
223 + ['telegram_chat_id', esc_html__('Telegram chat ID', 'king-addons'), 'telegram', ''],
224 + ['brevo_api_key', esc_html__('Brevo API key', 'king-addons'), 'brevo', ''],
225 + ['brevo_list_id', esc_html__('Brevo list ID', 'king-addons'), 'brevo', ''],
226 + ['convertkit_api_key', esc_html__('ConvertKit API key', 'king-addons'), 'convertkit', ''],
227 + ['convertkit_form_id', esc_html__('ConvertKit form ID', 'king-addons'), 'convertkit', ''],
228 + ['activecampaign_url', esc_html__('ActiveCampaign API URL', 'king-addons'), 'activecampaign', 'https://your-account.api-us1.com'],
229 + ['activecampaign_api_key', esc_html__('ActiveCampaign API key', 'king-addons'), 'activecampaign', ''],
230 + ['activecampaign_list_id', esc_html__('ActiveCampaign list ID', 'king-addons'), 'activecampaign', ''],
231 + ['hubspot_token', esc_html__('HubSpot private app token', 'king-addons'), 'hubspot', ''],
232 + ['klaviyo_api_key', esc_html__('Klaviyo private API key', 'king-addons'), 'klaviyo', ''],
233 + ['klaviyo_list_id', esc_html__('Klaviyo list ID', 'king-addons'), 'klaviyo', ''],
234 + ['google_sheets_url', esc_html__('Apps Script web app URL', 'king-addons'), 'google_sheets', 'https://script.google.com/macros/s/…/exec'],
235 + ['google_sheets_secret', esc_html__('Shared secret', 'king-addons'), 'google_sheets', ''],
236 + ];
237 +
238 + foreach ($text_controls as $control) {
239 + list($name, $label, $service, $placeholder) = $control;
240 +
241 + $widget->add_control(
242 + $name,
243 + [
244 + 'label' => $label,
245 + 'type' => Controls_Manager::TEXT,
246 + 'label_block' => true,
247 + 'placeholder' => $placeholder,
248 + 'render_type' => 'none',
249 + 'ai' => ['active' => false],
250 + 'condition' => ['integration_services' => $service],
251 + ]
252 + );
253 + }
254 +
255 + $widget->add_control(
256 + 'google_sheets_notice',
257 + [
258 + 'type' => Controls_Manager::RAW_HTML,
259 + 'raw' => esc_html__('Google Sheets is reached through a Google Apps Script web app bound to your sheet: Google\'s own API needs an OAuth flow a form widget cannot run.', 'king-addons'),
260 + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
261 + 'condition' => ['integration_services' => 'google_sheets'],
262 + ]
263 + );
264 +
265 + $widget->end_controls_section();
266 + }
267 +
268 + /**
269 + * Settings for the Payment action.
270 + *
271 + * @param \Elementor\Widget_Base $widget Widget the controls belong to.
272 + *
273 + * @return void
274 + */
275 + public function register_settings_section_payment($widget)
276 + {
277 + if (!class_exists('King_Addons\\Form_Payments')) {
278 + return;
279 + }
280 +
281 + $widget->start_controls_section(
282 + $this->get_control_id('section_payment'),
283 + [
284 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Payment', 'king-addons'),
285 + 'tab' => Controls_Manager::TAB_CONTENT,
286 + 'condition' => [
287 + 'submit_actions' => 'payment',
288 + ],
289 + ]
290 + );
291 +
292 + $widget->add_control(
293 + 'payment_provider',
294 + [
295 + 'label' => esc_html__('Provider', 'king-addons'),
296 + 'type' => Controls_Manager::SELECT,
297 + 'options' => Form_Payments::providers(),
298 + 'default' => 'none',
299 + 'render_type' => 'none',
300 + 'description' => esc_html__('Keys live in King Addons settings. The visitor pays on the provider\'s own page, so no card details reach this site.', 'king-addons'),
301 + ]
302 + );
303 +
304 + $widget->add_control(
305 + 'payment_currency',
306 + [
307 + 'label' => esc_html__('Currency', 'king-addons'),
308 + 'type' => Controls_Manager::TEXT,
309 + 'default' => 'USD',
310 + 'render_type' => 'none',
311 + 'condition' => ['payment_provider!' => 'none'],
312 + ]
313 + );
314 +
315 + $widget->add_control(
316 + 'payment_fixed_amount',
317 + [
318 + 'label' => esc_html__('Fixed amount', 'king-addons'),
319 + 'type' => Controls_Manager::NUMBER,
320 + 'min' => 0,
321 + 'step' => 0.01,
322 + 'render_type' => 'none',
323 + 'condition' => ['payment_provider!' => 'none'],
324 + ]
325 + );
326 +
327 + $widget->add_control(
328 + 'payment_amount_field',
329 + [
330 + 'label' => esc_html__('Or a calculation field ID', 'king-addons'),
331 + 'type' => Controls_Manager::TEXT,
332 + 'render_type' => 'none',
333 + 'description' => esc_html__('The server works the total out again from that field\'s formula; the number the browser shows is never trusted.', 'king-addons'),
334 + 'condition' => ['payment_provider!' => 'none'],
335 + ]
336 + );
337 +
338 + $widget->add_control(
339 + 'payment_max_amount',
340 + [
341 + 'label' => esc_html__('Refuse above', 'king-addons'),
342 + 'type' => Controls_Manager::NUMBER,
343 + 'min' => 0,
344 + 'step' => 0.01,
345 + 'render_type' => 'none',
346 + 'description' => esc_html__('A ceiling for calculated totals. 0 means no ceiling.', 'king-addons'),
347 + 'condition' => ['payment_provider!' => 'none'],
348 + ]
349 + );
350 +
351 + $widget->add_control(
352 + 'payment_description',
353 + [
354 + 'label' => esc_html__('What is being paid for', 'king-addons'),
355 + 'type' => Controls_Manager::TEXT,
356 + 'label_block' => true,
357 + 'render_type' => 'none',
358 + 'condition' => ['payment_provider!' => 'none'],
359 + ]
360 + );
361 +
362 + $widget->add_control(
363 + 'payment_success_url',
364 + [
365 + 'label' => esc_html__('After paying', 'king-addons'),
366 + 'type' => Controls_Manager::TEXT,
367 + 'label_block' => true,
368 + 'render_type' => 'none',
369 + 'description' => esc_html__('A page on this site. Anything else is ignored.', 'king-addons'),
370 + 'condition' => ['payment_provider!' => 'none'],
371 + ]
372 + );
373 +
374 + $widget->add_control(
375 + 'payment_cancel_url',
376 + [
377 + 'label' => esc_html__('If they cancel', 'king-addons'),
378 + 'type' => Controls_Manager::TEXT,
379 + 'label_block' => true,
380 + 'render_type' => 'none',
381 + 'condition' => ['payment_provider!' => 'none'],
382 + ]
383 + );
384 +
385 + $widget->end_controls_section();
386 + }
387 +
388 + public function register_settings_section_email($widget)
389 + {
390 + $widget->start_controls_section(
391 + $this->get_control_id('section_email'),
392 + [
393 + 'label' => KING_ADDONS_ELEMENTOR_ICON . $this->get_label(),
394 + 'tab' => Controls_Manager::TAB_CONTENT,
395 + 'condition' => [
396 + 'submit_actions' => 'email',
397 + ],
398 + ]
399 + );
400 +
401 + $widget->add_control(
402 + $this->get_control_id('email_to'),
403 + [
404 + 'label' => esc_html__('To', 'king-addons'),
405 + 'type' => Controls_Manager::TEXT,
406 + 'default' => get_option('admin_email'),
407 + 'label_block' => true,
408 + 'title' => esc_html__('Separate emails with commas', 'king-addons'),
409 + 'render_type' => 'none',
410 + 'dynamic' => [
411 + 'active' => true,
412 + ],
413 + ]
414 + );
415 +
416 +
417 + $default_message = sprintf(esc_html__('New message from %s', 'king-addons'), get_option('blogname'));
418 +
419 + $widget->add_control(
420 + $this->get_control_id('email_subject'),
421 + [
422 + 'label' => esc_html__('Subject', 'king-addons'),
423 + 'type' => Controls_Manager::TEXT,
424 + 'default' => $default_message,
425 + 'placeholder' => $default_message,
426 + 'label_block' => true,
427 + 'render_type' => 'none',
428 + 'dynamic' => [
429 + 'active' => true,
430 + ],
431 + ]
432 + );
433 +
434 + $widget->add_control(
435 + $this->get_control_id('email_content'),
436 + [
437 + 'label' => esc_html__('Message', 'king-addons'),
438 + 'type' => Controls_Manager::TEXTAREA,
439 + 'default' => '[all-fields]',
440 + 'placeholder' => '[all-fields]',
441 + 'description' => sprintf(
442 + esc_html__('By default, the form submits all fields. To modify this behavior, copy the shortcode of the fields you wish to include and paste it in place of %s.', 'king-addons'),
443 + '<code>[all-fields]</code>'
444 + ),
445 + 'render_type' => 'none',
446 + 'dynamic' => [
447 + 'active' => true,
448 + ],
449 + ]
450 + );
451 +
452 + $site_domain = $this->get_site_domain();
453 +
454 + $widget->add_control(
455 + $this->get_control_id('email_from'),
456 + [
457 + 'label' => esc_html__('From Email', 'king-addons'),
458 + 'type' => Controls_Manager::TEXT,
459 + 'description' => esc_html__('Shortcodes such as [id="email"] can be inserted based on the ID of the associated mail field.', 'king-addons'),
460 + 'default' => 'email@' . $site_domain,
461 + 'render_type' => 'none',
462 + 'dynamic' => [
463 + 'active' => true,
464 + ],
465 + ]
466 + );
467 +
468 + $widget->add_control(
469 + $this->get_control_id('email_from_name'),
470 + [
471 + 'label' => esc_html__('From Name', 'king-addons'),
472 + 'type' => Controls_Manager::TEXT,
473 + 'default' => get_bloginfo('name'),
474 + 'render_type' => 'none',
475 + 'dynamic' => [
476 + 'active' => true,
477 + ],
478 + ]
479 + );
480 +
481 + $widget->add_control(
482 + $this->get_control_id('email_reply_to'),
483 + [
484 + 'label' => esc_html__('Reply To', 'king-addons'),
485 + 'type' => Controls_Manager::TEXT,
486 + 'default' => 'email@' . $site_domain,
487 + 'render_type' => 'none'
488 + ]
489 + );
490 +
491 + $widget->add_control(
492 + $this->get_control_id('email_to_cc'),
493 + [
494 + 'label' => esc_html__('Cc', 'king-addons'),
495 + 'type' => Controls_Manager::TEXT,
496 + 'default' => '',
497 + 'title' => esc_html__('Separate emails with commas', 'king-addons'),
498 + 'render_type' => 'none',
499 + 'dynamic' => [
500 + 'active' => true,
501 + ],
502 + ]
503 + );
504 +
505 + $widget->add_control(
506 + $this->get_control_id('email_to_bcc'),
507 + [
508 + 'label' => esc_html__('Bcc', 'king-addons'),
509 + 'type' => Controls_Manager::TEXT,
510 + 'default' => '',
511 + 'title' => esc_html__('Separate emails with commas', 'king-addons'),
512 + 'render_type' => 'none',
513 + 'dynamic' => [
514 + 'active' => true,
515 + ],
516 + ]
517 + );
518 +
519 + $widget->add_control(
520 + $this->get_control_id('form_metadata'),
521 + [
522 + 'label' => esc_html__('Meta Data', 'king-addons'),
523 + 'type' => Controls_Manager::SELECT2,
524 + 'multiple' => true,
525 + 'label_block' => true,
526 + 'separator' => 'before',
527 + 'default' => [
528 + 'date',
529 + 'time',
530 + 'credit'
531 + ],
532 + 'options' => [
533 + 'date' => esc_html__('Date', 'king-addons'),
534 + 'time' => esc_html__('Time', 'king-addons'),
535 + 'page_url' => esc_html__('Page URL', 'king-addons'),
536 + 'page_title' => esc_html__('Page Title', 'king-addons'),
537 + 'user_agent' => esc_html__('User Agent', 'king-addons'),
538 + 'remote_ip' => esc_html__('Remote IP', 'king-addons'),
539 + 'credit' => esc_html__('Credit', 'king-addons'),
540 + ],
541 + 'render_type' => 'none',
542 + ]
543 + );
544 +
545 + $widget->add_control(
546 + $this->get_control_id('email_content_type'),
547 + [
548 + 'label' => esc_html__('Send As', 'king-addons'),
549 + 'type' => Controls_Manager::SELECT,
550 + 'default' => 'html',
551 + 'render_type' => 'none',
552 + 'options' => [
553 + 'html' => esc_html__('HTML', 'king-addons'),
554 + 'plain' => esc_html__('Plain', 'king-addons'),
555 + ],
556 + ]
557 + );
558 +
559 + $widget->end_controls_section();
560 + }
561 +
562 + public function register_settings_section_redirect($widget)
563 + {
564 + $widget->start_controls_section(
565 + 'section_redirect',
566 + [
567 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Redirect', 'king-addons'),
568 + 'condition' => [
569 + 'submit_actions' => 'redirect',
570 + ],
571 + ]
572 + );
573 +
574 + $widget->add_control(
575 + 'redirect_to',
576 + [
577 + 'label' => esc_html__('Redirect To', 'king-addons'),
578 + 'type' => Controls_Manager::TEXT,
579 + 'dynamic' => [
580 + 'active' => true
581 + ],
582 + 'placeholder' => esc_html__('https://example.com', 'king-addons'),
583 + 'label_block' => true
584 + ]
585 + );
586 +
587 + $widget->end_controls_section();
588 + }
589 +
590 + public function register_settings_section_mailchimp()
591 + {
592 + $this->start_controls_section(
593 + 'section_mailchimp',
594 + [
595 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Mailchimp', 'king-addons'),
596 + 'tab' => Controls_Manager::TAB_CONTENT,
597 + 'condition' => [
598 + 'submit_actions' => 'mailchimp'
599 + ]
600 + ]
601 + );
602 +
603 + $this->add_control(
604 + 'mailchimp_audience',
605 + [
606 + 'label' => esc_html__('Select Audience', 'king-addons'),
607 + 'type' => Controls_Manager::SELECT,
608 + 'default' => 'def',
609 +
610 + 'options' => Core::getMailchimpLists(),
611 + ]
612 + );
613 +
614 +
615 + $this->add_control(
616 + 'mailchimp_groups',
617 + [
618 + 'label' => esc_html__('Groups', 'king-addons'),
619 + 'type' => Controls_Manager::SELECT2,
620 + 'multiple' => true,
621 + 'options' => Core::getMailchimpGroups(),
622 +
623 + 'label_block' => true,
624 + ]
625 + );
626 +
627 + if ('' == get_option('king_addons_mailchimp_api_key')) {
628 + $this->add_control(
629 + 'mailchimp_key_notice',
630 + [
631 + 'type' => Controls_Manager::RAW_HTML,
632 + 'raw' => sprintf(__('Navigate to <strong><a href="%s" target="_blank">Dashboard > %s > Integrations</a></strong> to set up <strong>MailChimp API Key</strong>.', 'king-addons'), admin_url('admin.php?page=king-addons-settings'), Core::getPluginName()),
633 + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
634 + ]
635 + );
636 + }
637 +
638 + $this->add_control(
639 + 'mailchimp_fields',
640 + [
641 + 'label' => esc_html__('Fields', 'king-addons'),
642 + 'type' => Controls_Manager::HEADING,
643 + 'separator' => 'before',
644 + ]
645 + );
646 +
647 + $this->add_control(
648 + 'email_field',
649 + [
650 + 'label' => esc_html__('Email', 'king-addons'),
651 + 'type' => Controls_Manager::SELECT,
652 + 'options' => []
653 + ]
654 + );
655 +
656 + $this->add_control(
657 + 'first_name_field',
658 + [
659 + 'label' => esc_html__('First Name', 'king-addons'),
660 + 'type' => Controls_Manager::SELECT,
661 + 'options' => []
662 + ]
663 + );
664 +
665 + $this->add_control(
666 + 'last_name_field',
667 + [
668 + 'label' => esc_html__('Last Name', 'king-addons'),
669 + 'type' => Controls_Manager::SELECT,
670 + 'options' => []
671 + ]
672 + );
673 +
674 + $this->add_control(
675 + 'phone_field',
676 + [
677 + 'label' => esc_html__('Phone', 'king-addons'),
678 + 'type' => Controls_Manager::SELECT,
679 + 'options' => []
680 + ]
681 + );
682 +
683 + $this->add_control(
684 + 'birthday_field',
685 + [
686 + 'label' => esc_html__('Birthday', 'king-addons'),
687 + 'type' => Controls_Manager::SELECT,
688 + 'options' => []
689 + ]
690 + );
691 +
692 + $this->add_control(
693 + 'address_field',
694 + [
695 + 'label' => esc_html__('Address', 'king-addons'),
696 + 'type' => Controls_Manager::SELECT,
697 + 'options' => []
698 + ]
699 + );
700 +
701 + $this->add_control(
702 + 'country_field',
703 + [
704 + 'label' => esc_html__('Country', 'king-addons'),
705 + 'type' => Controls_Manager::SELECT,
706 + 'options' => []
707 + ]
708 + );
709 +
710 + $this->add_control(
711 + 'city_field',
712 + [
713 + 'label' => esc_html__('City', 'king-addons'),
714 + 'type' => Controls_Manager::SELECT,
715 + 'options' => []
716 + ]
717 + );
718 +
719 + $this->add_control(
720 + 'state_field',
721 + [
722 + 'label' => esc_html__('State', 'king-addons'),
723 + 'type' => Controls_Manager::SELECT,
724 + 'options' => []
725 + ]
726 + );
727 +
728 + $this->add_control(
729 + 'zip_field',
730 + [
731 + 'label' => esc_html__('Zip', 'king-addons'),
732 + 'type' => Controls_Manager::SELECT,
733 + 'options' => []
734 + ]
735 + );
736 +
737 +
738 +
739 +
740 +$this->end_controls_section();
741 +
742 +
743 +
744 + }
745 +
746 + public $last_prev_btn_text;
747 +
748 + public $last_next_btn_text;
749 +
750 + protected function register_controls()
751 + {
752 +
753 + $this->start_controls_section(
754 + 'section_form_fields',
755 + [
756 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Fields', 'king-addons'),
757 + ]
758 + );
759 +
760 +
761 + $repeater = new Repeater();
762 +
763 + $field_types = [
764 + 'text' => esc_html__('Text', 'king-addons'),
765 + 'textarea' => esc_html__('Textarea', 'king-addons'),
766 + 'email' => esc_html__('Email', 'king-addons'),
767 + 'url' => esc_html__('URL (Link)', 'king-addons'),
768 + 'number' => esc_html__('Number', 'king-addons'),
769 + 'tel' => esc_html__('Tel (Phone Number)', 'king-addons'),
770 + 'radio' => esc_html__('Radio', 'king-addons'),
771 + 'select' => esc_html__('Select', 'king-addons'),
772 + 'checkbox' => esc_html__('Checkbox', 'king-addons'),
773 + 'date' => esc_html__('Date', 'king-addons'),
774 + 'time' => esc_html__('Time', 'king-addons'),
775 + 'upload' => esc_html__('File Upload', 'king-addons'),
776 + 'password' => esc_html__('Password', 'king-addons'),
777 + 'html' => esc_html__('HTML', 'king-addons'),
778 + 'recaptcha-v3' => esc_html__('reCAPTCHA V3', 'king-addons'),
779 + 'hidden' => esc_html__('Hidden Field', 'king-addons'),
780 + 'king-addons-fb-step' => esc_html__('Step', 'king-addons'),
781 + ];
782 +
783 + // Range, rating, signature and acceptance: controls and markup live in
784 + // helpers/Extra_Fields.php.
785 + if (class_exists('King_Addons\\Form_Extra_Fields')) {
786 + $field_types = array_merge($field_types, Form_Extra_Fields::field_types());
787 + }
788 +
789 + $repeater->add_control(
790 + 'field_type',
791 + [
792 + 'label' => esc_html__('Type', 'king-addons'),
793 + 'type' => Controls_Manager::SELECT,
794 + 'options' => $field_types,
795 + 'default' => 'text',
796 + ]
797 + );
798 +
799 + $repeater->add_control(
800 + 'field_step_notice',
801 + [
802 + 'type' => Controls_Manager::RAW_HTML,
803 + 'raw' => esc_html__('Step should be a First element of fields group. Ex: Step 1 followed by Field 1, Field 2. Step 2 followed by Field 3, Field 4.', 'king-addons'),
804 + 'content_classes' => 'elementor-panel-alert',
805 + 'condition' => [
806 + 'field_type' => 'king-addons-fb-step'
807 + ]
808 + ]
809 + );
810 +
811 + if (class_exists('King_Addons\\Form_Extra_Fields')) {
812 + Form_Extra_Fields::register_controls($repeater);
813 + }
814 +
815 + if (class_exists('King_Addons\\Form_Conditional_Logic')) {
816 + Form_Conditional_Logic::register_controls($repeater);
817 + }
818 +
819 + if ('' == get_option('king_addons_recaptcha_v3_site_key')) {
820 + $repeater->add_control(
821 + 'recaptcha_key_notice',
822 + [
823 + 'type' => Controls_Manager::RAW_HTML,
824 + 'raw' => sprintf(__('Navigate to <strong><a href="%s" target="_blank">Dashboard > %s > Integrations</a></strong> to set up <strong>reCaptcha Site Key</strong>.', 'king-addons'), admin_url('admin.php?page=king-addons-settings'), Core::getPluginName()),
825 + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
826 + 'condition' => [
827 + 'field_type' => 'recaptcha-v3'
828 + ]
829 + ]
830 + );
831 + }
832 +
833 + $repeater->add_control(
834 + 'field_label',
835 + [
836 + 'label' => esc_html__('Label', 'king-addons'),
837 + 'type' => Controls_Manager::TEXT,
838 + 'default' => '',
839 + 'dynamic' => [
840 + 'active' => true,
841 + ],
842 + ]
843 + );
844 +
845 + $repeater->add_control(
846 + 'field_sub_label',
847 + [
848 + 'label' => esc_html__('Sub Label', 'king-addons'),
849 + 'type' => Controls_Manager::TEXT,
850 + 'default' => '',
851 + 'dynamic' => [
852 + 'active' => true,
853 + ],
854 + 'condition' => [
855 + 'field_type' => 'king-addons-fb-step'
856 + ]
857 + ]
858 + );
859 +
860 + $repeater->add_control(
861 + 'previous_button_text',
862 + [
863 + 'label' => esc_html__('Previous Button', 'king-addons'),
864 + 'type' => Controls_Manager::TEXT,
865 + 'default' => 'Previous',
866 + 'dynamic' => [
867 + 'active' => true,
868 + ],
869 + 'condition' => [
870 + 'field_type' => 'king-addons-fb-step'
871 + ]
872 + ]
873 + );
874 +
875 + $repeater->add_control(
876 + 'next_button_text',
877 + [
878 + 'label' => esc_html__('Next Button', 'king-addons'),
879 + 'type' => Controls_Manager::TEXT,
880 + 'default' => 'Next',
881 + 'dynamic' => [
882 + 'active' => true,
883 + ],
884 + 'condition' => [
885 + 'field_type' => 'king-addons-fb-step'
886 + ]
887 + ]
888 + );
889 +
890 + $repeater->add_control(
891 + 'step_icon',
892 + [
893 + 'label' => esc_html__('Icon', 'king-addons'),
894 + 'type' => Controls_Manager::ICONS,
895 + 'skin' => 'inline',
896 + 'label_block' => false,
897 + 'separator' => 'before',
898 + 'default' => [
899 + 'value' => 'far fa-edit',
900 + 'library' => 'regular'
901 + ],
902 + 'condition' => [
903 + 'field_type' => 'king-addons-fb-step'
904 + ]
905 + ]
906 + );
907 +
908 + $repeater->add_control(
909 + 'placeholder',
910 + [
911 + 'label' => esc_html__('Placeholder', 'king-addons'),
912 + 'type' => Controls_Manager::TEXT,
913 + 'default' => '',
914 + 'conditions' => [
915 + 'terms' => [
916 + [
917 + 'name' => 'field_type',
918 + 'operator' => 'in',
919 + 'value' => [
920 + 'tel',
921 + 'text',
922 + 'email',
923 + 'textarea',
924 + 'number',
925 + 'url',
926 + 'password',
927 + ],
928 + ],
929 + ],
930 + ],
931 + 'dynamic' => [
932 + 'active' => true,
933 + ],
934 + ]
935 + );
936 +
937 + $repeater->add_control(
938 + 'field_value',
939 + [
940 + 'label' => esc_html__('Default Value', 'king-addons'),
941 + 'type' => Controls_Manager::TEXT,
942 + 'default' => '',
943 + 'dynamic' => [
944 + 'active' => true,
945 + ],
946 + 'conditions' => [
947 + 'terms' => [
948 + [
949 + 'name' => 'field_type',
950 + 'operator' => 'in',
951 + 'value' => [
952 + 'text',
953 + 'email',
954 + 'textarea',
955 + 'url',
956 + 'tel',
957 + 'radio',
958 + 'select',
959 + 'number',
960 + 'date',
961 + 'time',
962 + 'hidden',
963 + ],
964 + ],
965 + ],
966 + ],
967 + ]
968 + );
969 +
970 + $repeater->add_control(
971 + 'field_id',
972 + [
973 + 'label' => esc_html__('ID', 'king-addons'),
974 + 'type' => Controls_Manager::TEXT,
975 + 'description' => esc_html__('Element ID should be unique and not used elsewhere in this widget.', 'king-addons'),
976 + 'default' => '',
977 + 'render_type' => 'none',
978 + 'required' => true,
979 + 'dynamic' => [
980 + 'active' => true,
981 + ]
982 + ]
983 + );
984 +
985 + $shortcode_value = '{{ view.container.settings.get( \'field_id\' ) }}';
986 +
987 + $repeater->add_control(
988 + 'shortcode',
989 + [
990 + 'label' => esc_html__('Shortcode', 'king-addons'),
991 + 'type' => Controls_Manager::RAW_HTML,
992 + 'classes' => 'forms-field-shortcode',
993 + 'raw' => '<input class="king-addons-form-field-shortcode" value=\'[id="' . $shortcode_value . '"]\' readonly />'
994 + ]
995 + );
996 +
997 + $repeater->add_control(
998 + 'required',
999 + [
1000 + 'label' => esc_html__('Required', 'king-addons'),
1001 + 'type' => Controls_Manager::SWITCHER,
1002 + 'return_value' => 'true',
1003 + 'default' => '',
1004 + 'conditions' => [
1005 + 'terms' => [
1006 + [
1007 + 'name' => 'field_type',
1008 + 'operator' => '!in',
1009 + 'value' => [
1010 + 'recaptcha',
1011 + 'recaptcha-v3',
1012 + 'hidden',
1013 + 'html',
1014 + 'king-addons-fb-step',
1015 + ],
1016 + ],
1017 + ],
1018 + ],
1019 + ]
1020 + );
1021 +
1022 + $repeater->add_control(
1023 + 'allow_multiple_upload',
1024 + [
1025 + 'label' => esc_html__('Multiple', 'king-addons'),
1026 + 'type' => Controls_Manager::SWITCHER,
1027 + 'condition' => [
1028 + 'field_type' => 'upload'
1029 + ],
1030 + ]
1031 + );
1032 +
1033 + $max_file_size = wp_max_upload_size() / pow(1024, 2);
1034 +
1035 + $repeater->add_control(
1036 + 'file_size',
1037 + [
1038 + 'label' => esc_html__('File Size (MB)', 'king-addons'),
1039 + 'type' => Controls_Manager::NUMBER,
1040 + 'min' => 1,
1041 + 'max' => $max_file_size,
1042 + 'king-addons-fb-step' => 1,
1043 + 'description' => esc_html__('Max upload size allowed is ' . $max_file_size . 'MB. Please contact your hosting to increase it.', 'king-addons'),
1044 + 'condition' => [
1045 + 'field_type' => 'upload'
1046 + ]
1047 + ]
1048 + );
1049 +
1050 + $repeater->add_control(
1051 + 'file_types',
1052 + [
1053 + 'label' => esc_html__('File Types', 'king-addons'),
1054 + 'type' => Controls_Manager::TEXT,
1055 + 'description' => esc_html__('Enter the comma separated file types to allow.', 'king-addons'),
1056 + 'condition' => [
1057 + 'field_type' => 'upload',
1058 + ]
1059 + ]
1060 + );
1061 +
1062 + $repeater->add_control(
1063 + 'field_options',
1064 + [
1065 + 'label' => esc_html__('Options', 'king-addons'),
1066 + 'type' => Controls_Manager::TEXTAREA,
1067 + 'default' => '',
1068 + 'description' => esc_html__('Insert each option on a separate line. To set a different label and value for an option, separate them with a pipe ("|"). Example: First Option|f_option', 'king-addons'),
1069 + 'conditions' => [
1070 + 'terms' => [
1071 + [
1072 + 'name' => 'field_type',
1073 + 'operator' => 'in',
1074 + 'value' => [
1075 + 'select',
1076 + 'checkbox',
1077 + 'radio',
1078 + ],
1079 + ],
1080 + ],
1081 + ],
1082 + ]
1083 + );
1084 +
1085 + $repeater->add_control(
1086 + 'allow_multiple',
1087 + [
1088 + 'label' => esc_html__('Multiple Selection', 'king-addons'),
1089 + 'type' => Controls_Manager::SWITCHER,
1090 + 'return_value' => 'true',
1091 + 'conditions' => [
1092 + 'terms' => [
1093 + [
1094 + 'name' => 'field_type',
1095 + 'value' => 'select',
1096 + ],
1097 + ],
1098 + ],
1099 + ]
1100 + );
1101 +
1102 + $repeater->add_control(
1103 + 'select_size',
1104 + [
1105 + 'label' => esc_html__('Rows', 'king-addons'),
1106 + 'type' => Controls_Manager::NUMBER,
1107 + 'min' => 2,
1108 + 'king-addons-fb-step' => 1,
1109 + 'conditions' => [
1110 + 'terms' => [
1111 + [
1112 + 'name' => 'field_type',
1113 + 'value' => 'select',
1114 + ],
1115 + [
1116 + 'name' => 'allow_multiple',
1117 + 'value' => 'true',
1118 + ],
1119 + ],
1120 + ],
1121 + ]
1122 + );
1123 +
1124 + $repeater->add_control(
1125 + 'inline_list',
1126 + [
1127 + 'label' => esc_html__('Inline List', 'king-addons'),
1128 + 'type' => Controls_Manager::SWITCHER,
1129 + 'return_value' => 'king-addons-inline-sub-group',
1130 + 'default' => '',
1131 + 'conditions' => [
1132 + 'terms' => [
1133 + [
1134 + 'name' => 'field_type',
1135 + 'operator' => 'in',
1136 + 'value' => [
1137 + 'checkbox',
1138 + 'radio',
1139 + ],
1140 + ],
1141 + ],
1142 + ],
1143 + ]
1144 + );
1145 +
1146 + $repeater->add_control(
1147 + 'field_html',
1148 + [
1149 + 'label' => esc_html__('HTML', 'king-addons'),
1150 + 'type' => Controls_Manager::TEXTAREA,
1151 + 'dynamic' => [
1152 + 'active' => true,
1153 + ],
1154 + 'conditions' => [
1155 + 'terms' => [
1156 + [
1157 + 'name' => 'field_type',
1158 + 'value' => 'html',
1159 + ],
1160 + ],
1161 + ],
1162 + ]
1163 + );
1164 +
1165 + $repeater->add_responsive_control(
1166 + 'width',
1167 + [
1168 + 'label' => esc_html__('Column Width', 'king-addons'),
1169 + 'type' => Controls_Manager::SLIDER,
1170 + 'size_units' => ['%'],
1171 + 'range' => [
1172 + '%' => [
1173 + 'min' => 10,
1174 + 'max' => 100,
1175 + ],
1176 + ],
1177 + 'default' => [
1178 + 'unit' => '%',
1179 + 'size' => 100,
1180 + ],
1181 + 'selectors' => [
1182 + '{{WRAPPER}} {{CURRENT_ITEM}}' => 'width: {{SIZE}}%;',
1183 + ],
1184 + 'conditions' => [
1185 + 'terms' => [
1186 + [
1187 + 'name' => 'field_type',
1188 + 'operator' => '!in',
1189 + 'value' => [
1190 + 'hidden',
1191 + 'recaptcha',
1192 + 'recaptcha-v3',
1193 + 'king-addons-fb-step',
1194 + ],
1195 + ],
1196 + ],
1197 + ],
1198 + ]
1199 + );
1200 +
1201 + $repeater->add_control(
1202 + 'rows',
1203 + [
1204 + 'label' => esc_html__('Rows', 'king-addons'),
1205 + 'type' => Controls_Manager::NUMBER,
1206 + 'default' => 7,
1207 + 'conditions' => [
1208 + 'terms' => [
1209 + [
1210 + 'name' => 'field_type',
1211 + 'value' => 'textarea',
1212 + ],
1213 + ],
1214 + ],
1215 + ]
1216 + );
1217 +
1218 + $repeater->add_control(
1219 + 'recaptcha_size', [
1220 + 'label' => esc_html__('Size', 'king-addons'),
1221 + 'type' => Controls_Manager::SELECT,
1222 + 'default' => 'normal',
1223 + 'options' => [
1224 + 'normal' => esc_html__('Normal', 'king-addons'),
1225 + 'compact' => esc_html__('Compact', 'king-addons'),
1226 + ],
1227 + 'conditions' => [
1228 + 'terms' => [
1229 + [
1230 + 'name' => 'field_type',
1231 + 'value' => 'recaptcha',
1232 + ],
1233 + ],
1234 + ],
1235 + ]
1236 + );
1237 +
1238 + $repeater->add_control(
1239 + 'recaptcha_style',
1240 + [
1241 + 'label' => esc_html__('Style', 'king-addons'),
1242 + 'type' => Controls_Manager::SELECT,
1243 + 'default' => 'light',
1244 + 'options' => [
1245 + 'light' => esc_html__('Light', 'king-addons'),
1246 + 'dark' => esc_html__('Dark', 'king-addons'),
1247 + ],
1248 + 'conditions' => [
1249 + 'terms' => [
1250 + [
1251 + 'name' => 'field_type',
1252 + 'value' => 'recaptcha',
1253 + ],
1254 + ],
1255 + ],
1256 + ]
1257 + );
1258 +
1259 +
1260 + $repeater->add_control(
1261 + 'css_classes',
1262 + [
1263 + 'label' => esc_html__('CSS Classes', 'king-addons'),
1264 + 'type' => Controls_Manager::HIDDEN,
1265 + 'default' => '',
1266 + 'title' => esc_html__('Add your custom class without the dot, e.g: "your-class"', 'king-addons'),
1267 + ]
1268 + );
1269 +
1270 + $this->add_control(
1271 + 'form_fields',
1272 + [
1273 +
1274 + 'type' => Controls_Manager::REPEATER,
1275 + 'fields' => $repeater->get_controls(),
1276 + 'default' => [
1277 + [
1278 + 'field_id' => 'name',
1279 + 'field_type' => 'text',
1280 + 'field_label' => esc_html__('Name', 'king-addons'),
1281 + 'placeholder' => esc_html__('Name', 'king-addons'),
1282 + 'width' => '100',
1283 + 'dynamic' => [
1284 + 'active' => true,
1285 + ],
1286 + ],
1287 + [
1288 + 'field_id' => 'email',
1289 + 'field_type' => 'email',
1290 + 'required' => 'true',
1291 + 'field_label' => esc_html__('Email', 'king-addons'),
1292 + 'placeholder' => esc_html__('Email', 'king-addons'),
1293 + 'width' => '100',
1294 + ],
1295 + [
1296 + 'field_id' => 'message',
1297 + 'field_type' => 'textarea',
1298 + 'field_label' => esc_html__('Message', 'king-addons'),
1299 + 'placeholder' => esc_html__('Message', 'king-addons'),
1300 + 'width' => '100',
1301 + ],
1302 + ],
1303 + 'title_field' => '{{ field_label }}',
1304 + ]
1305 + );
1306 +
1307 + if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
1308 + $this->add_control(
1309 + 'fields_to_show_pro_notice',
1310 + [
1311 + 'type' => Controls_Manager::RAW_HTML,
1312 + 'raw' => __('More than 3 Fields (Excluding Steps) are available in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-form-builder-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>'),
1313 + 'content_classes' => 'king-addons-pro-notice'
1314 + ]
1315 + );
1316 + }
1317 +
1318 + $this->end_controls_section();
1319 +
1320 + $this->start_controls_section(
1321 + 'section_buttons',
1322 + [
1323 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Buttons', 'king-addons'),
1324 + ]
1325 + );
1326 +
1327 + $this->add_responsive_control(
1328 + 'button_width',
1329 + [
1330 + 'label' => esc_html__('Column Width', 'king-addons'),
1331 + 'type' => Controls_Manager::SLIDER,
1332 + 'size_units' => ['%'],
1333 + 'range' => [
1334 + '%' => [
1335 + 'min' => 10,
1336 + 'max' => 100,
1337 + ],
1338 + ],
1339 + 'default' => [
1340 + 'unit' => '%',
1341 + 'size' => 100,
1342 + ],
1343 + 'selectors' => [
1344 + '{{WRAPPER}} .king-addons-field-group.king-addons-form-field-type-submit' => 'width: {{SIZE}}%;',
1345 + '{{WRAPPER}} .king-addons-step-buttons-wrap' => 'width: {{SIZE}}%;'
1346 + ],
1347 + 'frontend_available' => true,
1348 + ]
1349 + );
1350 +
1351 + $this->add_responsive_control(
1352 + 'buttons_width',
1353 + [
1354 + 'label' => esc_html__('Step Buttons Width', 'king-addons'),
1355 + 'type' => Controls_Manager::SLIDER,
1356 + 'size_units' => ['px', '%'],
1357 + 'range' => [
1358 + 'px' => [
1359 + 'min' => 0,
1360 + 'max' => 500,
1361 + ],
1362 + '%' => [
1363 + 'min' => 0,
1364 + 'max' => 100,
1365 + ]
1366 + ],
1367 + 'default' => [
1368 + 'unit' => 'px',
1369 + 'size' => 150,
1370 + ],
1371 + 'selectors' => [
1372 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'width: {{SIZE}}{{UNIT}};',
1373 + '{{WRAPPER}} .king-addons-fb-step-next' => 'width: {{SIZE}}{{UNIT}};',
1374 + '{{WRAPPER}} .king-addons-fb-step-tab .king-addons-button' => 'width: {{SIZE}}{{UNIT}};'
1375 + ],
1376 + ]
1377 + );
1378 +
1379 + $this->add_responsive_control(
1380 + 'button_align',
1381 + [
1382 + 'label' => esc_html__('Alignment', 'king-addons'),
1383 + 'type' => Controls_Manager::CHOOSE,
1384 + 'options' => [
1385 + 'left' => [
1386 + 'title' => esc_html__('Left', 'king-addons'),
1387 + 'icon' => 'eicon-text-align-left',
1388 + ],
1389 + 'center' => [
1390 + 'title' => esc_html__('Center', 'king-addons'),
1391 + 'icon' => 'eicon-text-align-center',
1392 + ],
1393 + 'right' => [
1394 + 'title' => esc_html__('Right', 'king-addons'),
1395 + 'icon' => 'eicon-text-align-right',
1396 + ],
1397 + ],
1398 + 'default' => 'center',
1399 + 'selectors_dictionary' => [
1400 + 'left' => 'margin-left: 0; margin-right: auto;',
1401 + 'center' => 'margin-left: auto; margin-right: auto;',
1402 + 'right' => 'margin-left: auto; margin-right: 0;'
1403 + ],
1404 + 'selectors' => [
1405 + '{{WRAPPER}} .king-addons-step-buttons-wrap' => '{{VALUE}}',
1406 + '{{WRAPPER}} .king-addons-fb-step-tab:first-of-type .king-addons-fb-step-next' => '{{VALUE}}',
1407 + ],
1408 + ]
1409 + );
1410 +
1411 +
1412 + $this->add_control(
1413 + 'heading_submit_button',
1414 + [
1415 + 'label' => esc_html__('Submit Button', 'king-addons'),
1416 + 'type' => Controls_Manager::HEADING,
1417 + ]
1418 + );
1419 +
1420 + $this->add_control(
1421 + 'button_text',
1422 + [
1423 + 'label' => esc_html__('Submit', 'king-addons'),
1424 + 'type' => Controls_Manager::TEXT,
1425 + 'default' => esc_html__('Send', 'king-addons'),
1426 + 'placeholder' => esc_html__('Send', 'king-addons'),
1427 + 'dynamic' => [
1428 + 'active' => true,
1429 + ],
1430 + ]
1431 + );
1432 +
1433 + $this->add_control(
1434 + 'selected_button_icon',
1435 + [
1436 + 'label' => esc_html__('Icon', 'king-addons'),
1437 + 'type' => Controls_Manager::ICONS,
1438 + 'skin' => 'inline',
1439 + 'label_block' => false,
1440 + ]
1441 + );
1442 +
1443 + $this->add_control(
1444 + 'button_icon_align',
1445 + [
1446 + 'label' => esc_html__('Icon Position', 'king-addons'),
1447 + 'type' => Controls_Manager::SELECT,
1448 + 'default' => 'left',
1449 + 'options' => [
1450 + 'left' => esc_html__('Before', 'king-addons'),
1451 + 'right' => esc_html__('After', 'king-addons'),
1452 + ],
1453 + 'condition' => [
1454 + 'selected_button_icon[value]!' => '',
1455 + ],
1456 + ]
1457 + );
1458 +
1459 + $this->add_control(
1460 + 'button_icon_indent',
1461 + [
1462 + 'label' => esc_html__('Icon Spacing', 'king-addons'),
1463 + 'type' => Controls_Manager::SLIDER,
1464 + 'range' => [
1465 + 'px' => [
1466 + 'max' => 50,
1467 + ],
1468 + ],
1469 + 'condition' => [
1470 + 'selected_button_icon[value]!' => '',
1471 + ],
1472 + 'selectors' => [
1473 + '{{WRAPPER}} .king-addons-button .king-addons-align-icon-right' => 'margin-left: {{SIZE}}{{UNIT}};',
1474 + '{{WRAPPER}} .king-addons-button .king-addons-align-icon-left' => 'margin-right: {{SIZE}}{{UNIT}};',
1475 + ],
1476 + ]
1477 + );
1478 +
1479 + $this->add_control(
1480 + 'button_css_id',
1481 + [
1482 + 'label' => esc_html__('Button ID', 'king-addons'),
1483 + 'type' => Controls_Manager::TEXT,
1484 + 'default' => '',
1485 + 'title' => esc_html__('Add your custom id WITHOUT the Pound key. e.g: my-id', 'king-addons'),
1486 + 'description' => esc_html__('Element ID should be unique and not used elsewhere in this widget', 'king-addons'),
1487 + 'separator' => 'before',
1488 + 'dynamic' => [
1489 + 'active' => true,
1490 + ],
1491 + ]
1492 + );
1493 +
1494 + $this->end_controls_section();
1495 +
1496 +
1497 + $this->start_controls_section(
1498 + 'section_form_settings',
1499 + [
1500 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Settings', 'king-addons'),
1501 + 'tab' => Controls_Manager::TAB_CONTENT
1502 + ]
1503 + );
1504 +
1505 + $this->add_control(
1506 + 'form_name',
1507 + [
1508 + 'label' => esc_html__('Form Name', 'king-addons'),
1509 + 'type' => Controls_Manager::TEXT,
1510 + 'default' => esc_html__('New Form', 'king-addons'),
1511 + 'placeholder' => esc_html__('Form Name', 'king-addons'),
1512 + ]
1513 + );
1514 +
1515 + $this->add_control(
1516 + 'form_id',
1517 + [
1518 + 'label' => esc_html__('Form ID', 'king-addons'),
1519 + 'type' => Controls_Manager::TEXT,
1520 + 'placeholder' => 'form_id',
1521 + 'description' => esc_html__('Form ID should be unique and shouldn\'t contain spaces', 'king-addons'),
1522 + 'separator' => 'after',
1523 + 'dynamic' => [
1524 + 'active' => true,
1525 + ],
1526 + ]
1527 + );
1528 +
1529 + $this->add_control(
1530 + 'success_message',
1531 + [
1532 + 'label' => esc_html__('Success Message', 'king-addons'),
1533 + 'type' => Controls_Manager::TEXT,
1534 + 'default' => esc_html__('Submission successful', 'king-addons'),
1535 + 'placeholder' => esc_html__('Submission successful', 'king-addons'),
1536 + 'label_block' => true,
1537 + 'frontend_available' => true,
1538 +
1539 +
1540 + 'render_type' => 'none',
1541 + 'dynamic' => [
1542 + 'active' => true,
1543 + ],
1544 + ]
1545 + );
1546 +
1547 + $this->add_control(
1548 + 'error_message',
1549 + [
1550 + 'label' => esc_html__('Error Message', 'king-addons'),
1551 + 'type' => Controls_Manager::TEXT,
1552 + 'default' => esc_html__('Submission failed', 'king-addons'),
1553 + 'placeholder' => esc_html__('Submission failed', 'king-addons'),
1554 + 'label_block' => true,
1555 + 'frontend_available' => true,
1556 +
1557 +
1558 + 'render_type' => 'none',
1559 + 'dynamic' => [
1560 + 'active' => true,
1561 + ],
1562 + ]
1563 + );
1564 +
1565 + $this->add_control(
1566 + 'show_labels',
1567 + [
1568 + 'label' => esc_html__('Show Field Labels', 'king-addons'),
1569 + 'type' => Controls_Manager::SWITCHER,
1570 + 'label_on' => esc_html__('Show', 'king-addons'),
1571 + 'label_off' => esc_html__('Hide', 'king-addons'),
1572 + 'return_value' => 'true',
1573 + 'default' => 'true',
1574 + 'separator' => 'before',
1575 + ]
1576 + );
1577 +
1578 + $this->add_control(
1579 + 'show_placeholders',
1580 + [
1581 + 'label' => esc_html__('Show Placeholders', 'king-addons'),
1582 + 'type' => Controls_Manager::SWITCHER,
1583 + 'label_on' => esc_html__('Show', 'king-addons'),
1584 + 'label_off' => esc_html__('Hide', 'king-addons'),
1585 + 'return_value' => 'true',
1586 + 'default' => 'true'
1587 + ]
1588 + );
1589 +
1590 + $this->add_control(
1591 + 'label_position',
1592 + [
1593 + 'label' => esc_html__('Label Position', 'king-addons'),
1594 + 'type' => Controls_Manager::HIDDEN,
1595 + 'options' => [
1596 + 'above' => esc_html__('Above', 'king-addons'),
1597 + 'inline' => esc_html__('Inline', 'king-addons'),
1598 + ],
1599 + 'default' => 'above',
1600 + 'condition' => [
1601 + 'show_labels!' => '',
1602 + ],
1603 + ]
1604 + );
1605 +
1606 + $this->add_control(
1607 + 'mark_required',
1608 + [
1609 + 'label' => esc_html__('Show Required Mark', 'king-addons'),
1610 + 'type' => Controls_Manager::SWITCHER,
1611 + 'label_on' => esc_html__('Show', 'king-addons'),
1612 + 'label_off' => esc_html__('Hide', 'king-addons'),
1613 + 'default' => '',
1614 + 'condition' => [
1615 + 'show_labels!' => '',
1616 + ],
1617 + ]
1618 + );
1619 +
1620 + $this->end_controls_section();
1621 +
1622 + $this->start_controls_section(
1623 + 'section_integration',
1624 + [
1625 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Actions', 'king-addons'),
1626 + ]
1627 + );
1628 +
1629 +
1630 + $default_submit_actions = ['email'];
1631 +
1632 + $this->add_control(
1633 + 'submit_actions',
1634 + [
1635 + 'label' => esc_html__('Add Action', 'king-addons'),
1636 + 'type' => Controls_Manager::SELECT2,
1637 + 'multiple' => true,
1638 + 'options' => $this->submit_action_args(),
1639 + 'render_type' => 'none',
1640 + 'label_block' => true,
1641 + 'default' => $default_submit_actions,
1642 + 'description' => esc_html__('Select the actions to perform after a user submits the form (e.g., sending an email notification). Once an action is selected, its corresponding settings will be displayed below.', 'king-addons'),
1643 + ]
1644 + );
1645 +
1646 + if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
1647 + $this->add_control(
1648 + 'submit_actions_notice',
1649 + [
1650 + 'type' => Controls_Manager::RAW_HTML,
1651 + 'raw' => __('<strong>Submission</strong> and <strong>Mailchimp</strong> actions are only available <br> in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-form-builder-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>'),
1652 + 'content_classes' => 'king-addons-pro-notice'
1653 + ]
1654 + );
1655 + }
1656 +
1657 + if (class_exists('King_Addons\\Form_Partial_Entries')) {
1658 + $this->add_control(
1659 + 'partial_entries',
1660 + [
1661 + 'label' => esc_html__('Save partial entries', 'king-addons'),
1662 + 'type' => Controls_Manager::SWITCHER,
1663 + 'return_value' => 'yes',
1664 + 'separator' => 'before',
1665 + 'description' => esc_html__('Keeps what a visitor typed even if they never press submit. Drafts appear alongside submissions and are removed after 30 days.', 'king-addons'),
1666 + ]
1667 + );
1668 + }
1669 +
1670 + if (class_exists('King_Addons\\Form_Spam_Protection')) {
1671 + $this->add_control(
1672 + 'spam_protection',
1673 + [
1674 + 'label' => esc_html__('Spam protection', 'king-addons'),
1675 + 'type' => Controls_Manager::SELECT,
1676 + 'options' => Form_Spam_Protection::modes(),
1677 + 'default' => 'none',
1678 + 'separator' => 'before',
1679 + 'description' => esc_html__('Honeypot needs no account. Turnstile and hCaptcha need their keys in King Addons settings.', 'king-addons'),
1680 + ]
1681 + );
1682 + }
1683 +
1684 + $this->end_controls_section();
1685 +
1686 + $this->register_settings_section_submissions($this);
1687 +
1688 + $this->register_settings_section_email($this);
1689 +
1690 + $this->register_settings_section_webhook($this);
1691 +
1692 + $this->register_settings_section_integrations($this);
1693 +
1694 + $this->register_settings_section_payment($this);
1695 +
1696 + $this->register_settings_section_redirect($this);
1697 +
1698 + $this->register_settings_section_mailchimp();
1699 +
1700 + $this->start_controls_section(
1701 + 'section_form_step_settings',
1702 + [
1703 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Steps', 'king-addons'),
1704 + 'tab' => Controls_Manager::TAB_CONTENT
1705 + ]
1706 + );
1707 +
1708 + $this->add_control(
1709 + 'step_type',
1710 + [
1711 + 'label' => esc_html__('Type', 'king-addons'),
1712 + 'type' => Controls_Manager::SELECT,
1713 + 'frontend_available' => true,
1714 + 'render_type' => 'template',
1715 + 'options' => [
1716 + 'none' => 'None',
1717 + 'text' => 'Label',
1718 + 'icon' => 'Icon',
1719 + 'number' => 'Number',
1720 + 'progress_bar' => 'Progress Bar',
1721 + 'number_text' => 'Number & Label',
1722 + 'icon_text' => 'Icon & Label',
1723 + ],
1724 + 'prefix_class' => 'king-addons-fb-step-type-',
1725 + 'default' => 'number_text'
1726 + ]
1727 + );
1728 +
1729 + $this->add_control(
1730 + 'step_content_layout',
1731 + [
1732 + 'label' => esc_html__('Content Layout', 'king-addons'),
1733 + 'type' => Controls_Manager::SELECT,
1734 + 'frontend_available' => true,
1735 + 'options' => [
1736 + 'horizontal' => 'Horizontal',
1737 + 'vertical' => 'Vertical',
1738 + ],
1739 + 'default' => 'vertical',
1740 + 'prefix_class' => 'king-addons-fb-step-content-layout-',
1741 + 'condition' => [
1742 + 'step_type!' => ['progress_bar', 'none']
1743 + ]
1744 + ]
1745 + );
1746 +
1747 + $this->add_control(
1748 + 'show_separator',
1749 + [
1750 + 'label' => esc_html__('Separator', 'king-addons'),
1751 + 'type' => Controls_Manager::SWITCHER,
1752 + 'default' => 'yes',
1753 + 'condition' => [
1754 + 'step_type!' => 'progress_bar'
1755 + ]
1756 + ]
1757 + );
1758 +
1759 + $this->add_responsive_control(
1760 + 'step_box_align',
1761 + [
1762 + 'label' => esc_html__('Box Alignment', 'king-addons'),
1763 + 'type' => Controls_Manager::CHOOSE,
1764 + 'options' => [
1765 + 'flex-start' => [
1766 + 'title' => esc_html__('Left', 'king-addons'),
1767 + 'icon' => 'eicon-text-align-left',
1768 + ],
1769 + 'center' => [
1770 + 'title' => esc_html__('Center', 'king-addons'),
1771 + 'icon' => 'eicon-text-align-center',
1772 + ],
1773 + 'flex-end' => [
1774 + 'title' => esc_html__('Right', 'king-addons'),
1775 + 'icon' => 'eicon-text-align-right',
1776 + ],
1777 + ],
1778 + 'default' => 'center',
1779 + 'selectors' => [
1780 + '{{WRAPPER}}.king-addons-fb-step-content-layout-vertical .king-addons-fb-step' => 'align-items: {{VALUE}}',
1781 + '{{WRAPPER}}.king-addons-fb-step-content-layout-horizontal .king-addons-fb-step' => 'justify-content: {{VALUE}}'
1782 + ],
1783 + 'condition' => [
1784 + 'step_type!' => ['progress_bar', 'none']
1785 + ]
1786 + ]
1787 + );
1788 +
1789 + $this->add_responsive_control(
1790 + 'step_align',
1791 + [
1792 + 'label' => esc_html__('Alignment', 'king-addons'),
1793 + 'type' => Controls_Manager::CHOOSE,
1794 + 'options' => [
1795 + 'left' => [
1796 + 'title' => esc_html__('Left', 'king-addons'),
1797 + 'icon' => 'eicon-text-align-left',
1798 + ],
1799 + 'center' => [
1800 + 'title' => esc_html__('Center', 'king-addons'),
1801 + 'icon' => 'eicon-text-align-center',
1802 + ],
1803 + 'right' => [
1804 + 'title' => esc_html__('Right', 'king-addons'),
1805 + 'icon' => 'eicon-text-align-right',
1806 + ],
1807 + ],
1808 + 'default' => 'center',
1809 + 'selectors' => [
1810 + '{{WRAPPER}} .king-addons-fb-step' => 'text-align: {{VALUE}}'
1811 + ],
1812 + 'condition' => [
1813 + 'step_type!' => ['progress_bar', 'none']
1814 + ]
1815 + ]
1816 + );
1817 +
1818 + $this->end_controls_section();
1819 +
1820 + $this->start_controls_section(
1821 + 'section_form_style',
1822 + [
1823 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Form', 'king-addons'),
1824 + 'tab' => Controls_Manager::TAB_STYLE,
1825 + ]
1826 + );
1827 +
1828 + $this->add_control(
1829 + 'label_color',
1830 + [
1831 + 'label' => esc_html__('Label Color', 'king-addons'),
1832 + 'type' => Controls_Manager::COLOR,
1833 + 'default' => '#7a7a7a',
1834 + 'selectors' => [
1835 + '{{WRAPPER}} .king-addons-field-group > label, {{WRAPPER}} .king-addons-field-sub-group label' => 'color: {{VALUE}};',
1836 + ]
1837 + ]
1838 + );
1839 +
1840 + $this->add_control(
1841 + 'mark_required_color',
1842 + [
1843 + 'label' => esc_html__('Mark Color', 'king-addons'),
1844 + 'type' => Controls_Manager::COLOR,
1845 + 'default' => '#CB3030',
1846 + 'selectors' => [
1847 + '{{WRAPPER}} .king-addons-required-mark .king-addons-form-field-label:after' => 'color: {{COLOR}};',
1848 + ],
1849 + 'condition' => [
1850 + 'mark_required' => 'yes',
1851 + ],
1852 + ]
1853 + );
1854 +
1855 + $this->add_group_control(
1856 + Group_Control_Typography::get_type(),
1857 + [
1858 + 'name' => 'label_typography',
1859 + 'selector' => '{{WRAPPER}} .king-addons-field-group > label'
1860 + ]
1861 + );
1862 +
1863 + $this->add_control(
1864 + 'label_spacing',
1865 + [
1866 + 'label' => esc_html__('Distance', 'king-addons'),
1867 + 'type' => Controls_Manager::SLIDER,
1868 + 'default' => [
1869 + 'size' => 0,
1870 + ],
1871 + 'range' => [
1872 + 'px' => [
1873 + 'min' => 0,
1874 + 'max' => 60,
1875 + ],
1876 + ],
1877 + 'selectors' => [
1878 + 'body.rtl {{WRAPPER}} .king-addons-labels-inline .king-addons-field-group > label' => 'padding-left: {{SIZE}}{{UNIT}};',
1879 +
1880 + 'body:not(.rtl) {{WRAPPER}} .king-addons-labels-inline .king-addons-field-group > label' => 'padding-right: {{SIZE}}{{UNIT}};',
1881 +
1882 + 'body {{WRAPPER}} .king-addons-labels-above .king-addons-field-group > label' => 'padding-bottom: {{SIZE}}{{UNIT}};',
1883 +
1884 + ],
1885 + ]
1886 + );
1887 +
1888 + $this->add_control(
1889 + 'heading_label',
1890 + [
1891 + 'label' => esc_html__('Inputs', 'king-addons'),
1892 + 'type' => Controls_Manager::HEADING,
1893 + 'separator' => 'before',
1894 + ]
1895 + );
1896 +
1897 + $this->add_control(
1898 + 'column_gap',
1899 + [
1900 + 'label' => esc_html__('Horizontal Distance', 'king-addons'),
1901 + 'type' => Controls_Manager::SLIDER,
1902 + 'default' => [
1903 + 'size' => 10,
1904 + ],
1905 + 'range' => [
1906 + 'px' => [
1907 + 'min' => 0,
1908 + 'max' => 60,
1909 + ],
1910 + ],
1911 + 'selectors' => [
1912 + '{{WRAPPER}} .king-addons-field-group' => 'padding-right: calc( {{SIZE}}{{UNIT}}/2 ); padding-left: calc( {{SIZE}}{{UNIT}}/2 );',
1913 + '{{WRAPPER}} .king-addons-fb-step-wrap' => 'padding-left: calc( -{{SIZE}}{{UNIT}}/2 ); padding-right: calc( -{{SIZE}}{{UNIT}}/2 );',
1914 + '{{WRAPPER}} .king-addons-step-buttons-wrap' => 'padding-right: calc( {{SIZE}}{{UNIT}}/2 ); padding-left: calc( {{SIZE}}{{UNIT}}/2 );',
1915 + '{{WRAPPER}} .king-addons-form-fields-wrap' => 'margin-left: calc( -{{SIZE}}{{UNIT}}/2 ); margin-right: calc( -{{SIZE}}{{UNIT}}/2 );',
1916 + ],
1917 + ]
1918 + );
1919 +
1920 + $this->add_control(
1921 + 'row_gap',
1922 + [
1923 + 'label' => esc_html__('Vertical Distance', 'king-addons'),
1924 + 'type' => Controls_Manager::SLIDER,
1925 + 'default' => [
1926 + 'size' => 10,
1927 + ],
1928 + 'range' => [
1929 + 'px' => [
1930 + 'min' => 0,
1931 + 'max' => 60,
1932 + ],
1933 + ],
1934 + 'selectors' => [
1935 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-step-buttons-wrap)' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1936 + '{{WRAPPER}} .king-addons-field-group.recaptcha-v3-bottomleft, {{WRAPPER}} .king-addons-field-group.recaptcha-v3-bottomright' => 'margin-bottom: 0;',
1937 + ],
1938 + ]
1939 + );
1940 +
1941 + $this->add_responsive_control(
1942 + 'labels_align',
1943 + [
1944 + 'label' => esc_html__('Align Labels', 'king-addons'),
1945 + 'type' => Controls_Manager::CHOOSE,
1946 + 'options' => [
1947 + 'flex-start' => [
1948 + 'title' => esc_html__('Left', 'king-addons'),
1949 + 'icon' => 'eicon-text-align-left',
1950 + ],
1951 + 'center' => [
1952 + 'title' => esc_html__('Center', 'king-addons'),
1953 + 'icon' => 'eicon-text-align-center',
1954 + ],
1955 + 'flex-end' => [
1956 + 'title' => esc_html__('Right', 'king-addons'),
1957 + 'icon' => 'eicon-text-align-right',
1958 + ],
1959 + ],
1960 + 'default' => 'flex-start',
1961 + 'selectors' => [
1962 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-step-buttons-wrap)' => 'justify-content: {{VALUE}}'
1963 + ],
1964 + 'separator' => 'before'
1965 + ]
1966 + );
1967 +
1968 + $this->end_controls_section();
1969 +
1970 + $this->start_controls_section(
1971 + 'section_field_style',
1972 + [
1973 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Field', 'king-addons'),
1974 + 'tab' => Controls_Manager::TAB_STYLE,
1975 + ]
1976 + );
1977 +
1978 + $this->start_controls_tabs('tabs_fields_style');
1979 +
1980 + $this->start_controls_tab(
1981 + 'tab_fields_normal',
1982 + [
1983 + 'label' => esc_html__('Normal', 'king-addons'),
1984 + ]
1985 + );
1986 +
1987 + $this->add_control(
1988 + 'field_text_color',
1989 + [
1990 + 'label' => esc_html__('Color', 'king-addons'),
1991 + 'type' => Controls_Manager::COLOR,
1992 + 'default' => '#7a7a7a',
1993 + 'selectors' => [
1994 + '{{WRAPPER}} .king-addons-field-group .king-addons-form-field' => 'color: {{VALUE}};',
1995 + '{{WRAPPER}} .king-addons-field-group .king-addons-form-field svg' => 'fill: {{VALUE}};',
1996 + '{{WRAPPER}} .king-addons-field-group input[type="radio"] + label' => 'color: {{VALUE}};',
1997 + '{{WRAPPER}} .king-addons-field-group input[type="checkbox"] + label' => 'color: {{VALUE}};'
1998 + ]
1999 + ]
2000 + );
2001 +
2002 + $this->add_control(
2003 + 'field_background_color',
2004 + [
2005 + 'label' => esc_html__('Background Color', 'king-addons'),
2006 + 'type' => Controls_Manager::COLOR,
2007 + 'default' => '#ffffff',
2008 + 'selectors' => [
2009 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap)' => 'background-color: {{VALUE}};',
2010 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select' => 'background-color: {{VALUE}};',
2011 + ]
2012 + ]
2013 + );
2014 +
2015 + $this->add_control(
2016 + 'field_border_color',
2017 + [
2018 + 'label' => esc_html__('Border Color', 'king-addons'),
2019 + 'type' => Controls_Manager::COLOR,
2020 + 'selectors' => [
2021 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap)' => 'border-color: {{VALUE}};',
2022 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select' => 'border-color: {{VALUE}};',
2023 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap::before' => 'color: {{VALUE}};',
2024 + ]
2025 + ]
2026 + );
2027 +
2028 + $this->add_group_control(
2029 + Group_Control_Typography::get_type(),
2030 + [
2031 + 'name' => 'field_typography',
2032 + 'selector' => '{{WRAPPER}} .king-addons-field-group .king-addons-form-field, {{WRAPPER}} .king-addons-field-sub-group label'
2033 + ]
2034 + );
2035 +
2036 + $this->end_controls_tab();
2037 +
2038 + $this->start_controls_tab(
2039 + 'tab_fields_focus',
2040 + [
2041 + 'label' => esc_html__('Focus', 'king-addons'),
2042 + ]
2043 + );
2044 +
2045 + $this->add_control(
2046 + 'field_text_color_focus',
2047 + [
2048 + 'label' => esc_html__('Color', 'king-addons'),
2049 + 'type' => Controls_Manager::COLOR,
2050 + 'default' => '#7a7a7a',
2051 + 'selectors' => [
2052 + '{{WRAPPER}} .king-addons-field-group .king-addons-form-field:focus' => 'color: {{VALUE}};',
2053 + '{{WRAPPER}} .king-addons-field-group input[type="radio"]:focus' => 'color: {{VALUE}};',
2054 + '{{WRAPPER}} .king-addons-field-group input[type="checkbox"]:focus' => 'color: {{VALUE}};'
2055 + ]
2056 + ]
2057 + );
2058 +
2059 + $this->add_control(
2060 + 'field_background_color_focus',
2061 + [
2062 + 'label' => esc_html__('Background Color', 'king-addons'),
2063 + 'type' => Controls_Manager::COLOR,
2064 + 'default' => '#ffffff',
2065 + 'selectors' => [
2066 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap):focus' => 'background-color: {{VALUE}};',
2067 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select:focus' => 'background-color: {{VALUE}};',
2068 + ]
2069 + ]
2070 + );
2071 +
2072 + $this->add_control(
2073 + 'field_border_color_focus',
2074 + [
2075 + 'label' => esc_html__('Border Color', 'king-addons'),
2076 + 'type' => Controls_Manager::COLOR,
2077 + 'selectors' => [
2078 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap):focus' => 'border-color: {{VALUE}};',
2079 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select:focus' => 'border-color: {{VALUE}};',
2080 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap:focus-within::before' => 'color: {{VALUE}};',
2081 + ]
2082 + ]
2083 + );
2084 +
2085 + $this->end_controls_tab();
2086 +
2087 + $this->start_controls_tab(
2088 + 'tab_fields_error',
2089 + [
2090 + 'label' => esc_html__('Error', 'king-addons'),
2091 + ]
2092 + );
2093 +
2094 + $this->add_control(
2095 + 'field_text_color_error',
2096 + [
2097 + 'label' => esc_html__('Color', 'king-addons'),
2098 + 'type' => Controls_Manager::COLOR,
2099 + 'default' => '#CB3030',
2100 + 'selectors' => [
2101 + '{{WRAPPER}} .king-addons-field-group .king-addons-form-field.king-addons-form-error' => 'color: {{VALUE}};',
2102 + '{{WRAPPER}} .king-addons-field-group input[type="radio"].king-addons-form-error' => 'color: {{VALUE}};',
2103 + '{{WRAPPER}} .king-addons-field-group input[type="checkbox"].king-addons-form-error' => 'color: {{VALUE}};',
2104 +
2105 + ]
2106 + ]
2107 + );
2108 +
2109 + $this->add_control(
2110 + 'field_background_color_error',
2111 + [
2112 + 'label' => esc_html__('Background Color', 'king-addons'),
2113 + 'type' => Controls_Manager::COLOR,
2114 + 'default' => '#ffffff',
2115 + 'selectors' => [
2116 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap).king-addons-form-error' => 'background-color: {{VALUE}};',
2117 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select.king-addons-form-error' => 'background-color: {{VALUE}};',
2118 + ]
2119 + ]
2120 + );
2121 +
2122 + $this->add_control(
2123 + 'field_border_color_error',
2124 + [
2125 + 'label' => esc_html__('Border Color', 'king-addons'),
2126 + 'type' => Controls_Manager::COLOR,
2127 + 'default' => '#CB3030',
2128 + 'selectors' => [
2129 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap).king-addons-form-error' => 'border-color: {{VALUE}};',
2130 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select.king-addons-form-error' => 'border-color: {{VALUE}};',
2131 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap.king-addons-form-error-wrap::before' => 'color: {{VALUE}};',
2132 + ]
2133 + ]
2134 + );
2135 +
2136 + $this->end_controls_tab();
2137 +
2138 + $this->end_controls_tabs();
2139 +
2140 + $this->add_control(
2141 + 'field_border_width',
2142 + [
2143 + 'label' => esc_html__('Border Width', 'king-addons'),
2144 + 'type' => Controls_Manager::DIMENSIONS,
2145 + 'placeholder' => '1',
2146 + 'size_units' => ['px', '%', 'em'],
2147 + 'selectors' => [
2148 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap)' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2149 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2150 + ],
2151 + 'separator' => 'before'
2152 + ]
2153 + );
2154 +
2155 + $this->add_control(
2156 + 'field_border_radius',
2157 + [
2158 + 'label' => esc_html__('Border Radius', 'king-addons'),
2159 + 'type' => Controls_Manager::DIMENSIONS,
2160 + 'size_units' => ['px', '%', 'em'],
2161 + 'default' => [
2162 + 'top' => 3,
2163 + 'right' => 3,
2164 + 'bottom' => 3,
2165 + 'left' => 3,
2166 + 'unit' => 'px'
2167 + ],
2168 + 'selectors' => [
2169 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2170 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2171 + ],
2172 + ]
2173 + );
2174 +
2175 + $this->add_control(
2176 + 'field_padding',
2177 + [
2178 + 'label' => esc_html__('Padding', 'king-addons'),
2179 + 'type' => Controls_Manager::DIMENSIONS,
2180 + 'size_units' => ['px', '%', 'em'],
2181 + 'default' => [
2182 + 'top' => 6,
2183 + 'right' => 5,
2184 + 'bottom' => 7,
2185 + 'left' => 10,
2186 + 'unit' => 'px'
2187 + ],
2188 + 'selectors' => [
2189 + '{{WRAPPER}} .king-addons-field-group:not(.king-addons-form-field-type-upload) .king-addons-form-field:not(.king-addons-select-wrap)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2190 + '{{WRAPPER}} .king-addons-field-group .king-addons-select-wrap select' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2191 + '{{WRAPPER}} .king-addons-field-group input[type="date"]::before' => 'right: {{RIGHT}}{{UNIT}};',
2192 + '{{WRAPPER}} .king-addons-field-group input[type="time"]::before' => 'right: {{RIGHT}}{{UNIT}};',
2193 + ],
2194 + ]
2195 + );
2196 +
2197 + $this->add_control(
2198 + 'radio_and_checkbox_distance',
2199 + [
2200 + 'label' => esc_html__('Radio & Checkbox', 'king-addons'),
2201 + 'type' => Controls_Manager::HEADING,
2202 + ]
2203 + );
2204 +
2205 + $this->add_control(
2206 + 'radion_&_checkbox_padding',
2207 + [
2208 + 'label' => esc_html__('Margin', 'king-addons'),
2209 + 'type' => Controls_Manager::DIMENSIONS,
2210 + 'size_units' => ['px', '%', 'em'],
2211 + 'default' => [
2212 + 'top' => 0,
2213 + 'right' => 0,
2214 + 'bottom' => 0,
2215 + 'left' => 0,
2216 + 'unit' => 'px'
2217 + ],
2218 + 'selectors' => [
2219 + '{{WRAPPER}} .king-addons-form-field-option' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2220 + ],
2221 + ]
2222 + );
2223 +
2224 + $this->add_responsive_control(
2225 + 'radion_&_checkbox_gutter',
2226 + [
2227 + 'label' => esc_html__('Inner Gutter', 'king-addons'),
2228 + 'type' => Controls_Manager::SLIDER,
2229 + 'size_units' => ['px'],
2230 + 'range' => [
2231 + 'px' => [
2232 + 'min' => 0,
2233 + 'max' => 50,
2234 + ],
2235 + ],
2236 + 'default' => [
2237 + 'unit' => 'px',
2238 + 'size' => 5,
2239 + ],
2240 + 'selectors' => [
2241 + '{{WRAPPER}} .king-addons-form-field-option label' => 'margin-left: {{SIZE}}{{UNIT}};',
2242 + '{{WRAPPER}}.king-addons-custom-styles-yes .king-addons-form-field-option label:before' => 'margin-right: {{SIZE}}{{UNIT}};',
2243 + ],
2244 + 'separator' => 'before'
2245 + ]
2246 + );
2247 +
2248 + $this->end_controls_section();
2249 +
2250 +
2251 + $this->start_controls_section(
2252 + 'section_style_checkbox_radio',
2253 + [
2254 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Checkbox & Radio', 'king-addons'),
2255 + 'tab' => Controls_Manager::TAB_STYLE,
2256 + 'show_label' => false,
2257 + ]
2258 + );
2259 +
2260 + $this->add_control(
2261 + 'checkbox_radio_custom',
2262 + [
2263 + 'label' => esc_html__('Use Custom Styles', 'king-addons'),
2264 + 'type' => Controls_Manager::SWITCHER,
2265 + 'default' => 'yes',
2266 + 'prefix_class' => 'king-addons-custom-styles-'
2267 + ]
2268 + );
2269 +
2270 + $this->add_control(
2271 + 'checkbox_radio_static_color',
2272 + [
2273 + 'label' => esc_html__('Static Color', 'king-addons'),
2274 + 'type' => Controls_Manager::COLOR,
2275 + 'default' => '#FFFFFF',
2276 + 'selectors' => [
2277 + '{{WRAPPER}} .king-addons-form-field-type-checkbox .king-addons-form-field-option label:before' => 'background-color: {{VALUE}}',
2278 + '{{WRAPPER}} .king-addons-form-field-type-radio .king-addons-form-field-option label:before' => 'background-color: {{VALUE}}',
2279 + ],
2280 + 'condition' => [
2281 + 'checkbox_radio_custom' => 'yes'
2282 + ]
2283 + ]
2284 + );
2285 +
2286 + $this->add_control(
2287 + 'checkbox_radio_active_color',
2288 + [
2289 + 'label' => esc_html__('Active Color', 'king-addons'),
2290 + 'type' => Controls_Manager::COLOR,
2291 + 'default' => '#5B03FF',
2292 + 'selectors' => [
2293 + '{{WRAPPER}} .king-addons-form-field-type-checkbox .king-addons-form-field-option label:before' => 'color: {{VALUE}}',
2294 + '{{WRAPPER}} .king-addons-form-field-type-radio .king-addons-form-field-option label:before' => 'color: {{VALUE}}',
2295 + ],
2296 + 'condition' => [
2297 + 'checkbox_radio_custom' => 'yes'
2298 + ]
2299 + ]
2300 + );
2301 +
2302 + $this->add_control(
2303 + 'checkbox_radio_border_color',
2304 + [
2305 + 'label' => esc_html__('Border Color', 'king-addons'),
2306 + 'type' => Controls_Manager::COLOR,
2307 + 'default' => '#E8E8E8',
2308 + 'selectors' => [
2309 + '{{WRAPPER}} .king-addons-form-field-type-checkbox .king-addons-form-field-option label:before' => 'border-color: {{VALUE}}',
2310 + '{{WRAPPER}} .king-addons-form-field-type-radio .king-addons-form-field-option label:before' => 'border-color: {{VALUE}}',
2311 + ],
2312 + 'condition' => [
2313 + 'checkbox_radio_custom' => 'yes'
2314 + ]
2315 + ]
2316 + );
2317 +
2318 + $this->add_control(
2319 + 'checkbox_radio_size',
2320 + [
2321 + 'label' => esc_html__('Size', 'king-addons'),
2322 + 'type' => Controls_Manager::SLIDER,
2323 + 'size_units' => ['px'],
2324 + 'range' => [
2325 + 'px' => [
2326 + 'min' => 10,
2327 + 'max' => 50,
2328 + ],
2329 + ],
2330 + 'default' => [
2331 + 'unit' => 'px',
2332 + 'size' => 16,
2333 + ],
2334 + 'selectors' => [
2335 + '{{WRAPPER}} .king-addons-form-field-type-checkbox .king-addons-form-field-option label:before' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}}; font-size: calc({{SIZE}}{{UNIT}} / 1.3);',
2336 + '{{WRAPPER}} .king-addons-form-field-type-radio .king-addons-form-field-option label:before' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}}; font-size: calc({{SIZE}}{{UNIT}} / 1.3);',
2337 + '{{WRAPPER}} .king-addons-form-field-type-checkbox input' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
2338 + '{{WRAPPER}} .king-addons-form-field-type-radio input' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};'
2339 + ],
2340 + 'separator' => 'before',
2341 + 'condition' => [
2342 + 'checkbox_radio_custom' => 'yes'
2343 + ]
2344 + ]
2345 + );
2346 +
2347 + $this->end_controls_section();
2348 +
2349 + $this->start_controls_section(
2350 + 'section_button_style',
2351 + [
2352 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Buttons', 'king-addons'),
2353 + 'tab' => Controls_Manager::TAB_STYLE,
2354 + ]
2355 + );
2356 +
2357 + $this->start_controls_tabs('tabs_button_style');
2358 +
2359 + $this->start_controls_tab(
2360 + 'tab_button_normal',
2361 + [
2362 + 'label' => esc_html__('Normal', 'king-addons'),
2363 + ]
2364 + );
2365 +
2366 + $this->add_control(
2367 + 'heading_next_submit_button',
2368 + [
2369 + 'label' => esc_html__('Submit Button, Next Button', 'king-addons'),
2370 + 'type' => Controls_Manager::HEADING,
2371 + ]
2372 + );
2373 +
2374 + $this->add_control(
2375 + 'button_background_color',
2376 + [
2377 + 'label' => esc_html__('Background Color', 'king-addons'),
2378 + 'type' => Controls_Manager::COLOR,
2379 + 'default' => '#5B03FF',
2380 + 'selectors' => [
2381 + '{{WRAPPER}} .king-addons-fb-step-next' => 'background-color: {{VALUE}};',
2382 + '{{WRAPPER}} .king-addons-button[type="submit"]' => 'background-color: {{VALUE}};',
2383 + ],
2384 + ]
2385 + );
2386 +
2387 + $this->add_control(
2388 + 'button_text_color',
2389 + [
2390 + 'label' => esc_html__('Text Color', 'king-addons'),
2391 + 'type' => Controls_Manager::COLOR,
2392 + 'default' => '#ffffff',
2393 + 'selectors' => [
2394 + '{{WRAPPER}} .king-addons-fb-step-next' => 'color: {{VALUE}};',
2395 + '{{WRAPPER}} .king-addons-button[type="submit"]' => 'color: {{VALUE}};',
2396 + '{{WRAPPER}} .king-addons-double-bounce .king-addons-child' => 'background-color: {{VALUE}} !important;',
2397 + '{{WRAPPER}} .king-addons-button[type="submit"] svg *' => 'fill: {{VALUE}};'
2398 + ],
2399 + ]
2400 + );
2401 +
2402 + $this->add_control(
2403 + 'button_border_color',
2404 + [
2405 + 'label' => esc_html__('Border Color', 'king-addons'),
2406 + 'type' => Controls_Manager::COLOR,
2407 + 'default' => '',
2408 + 'selectors' => [
2409 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'border-color: {{VALUE}};',
2410 + '{{WRAPPER}} .king-addons-fb-step-next' => 'border-color: {{VALUE}};',
2411 + '{{WRAPPER}} .king-addons-button[type="submit"]' => 'border-color: {{VALUE}};',
2412 + ],
2413 + 'condition' => [
2414 + 'button_border_border!' => '',
2415 + ],
2416 + ]
2417 + );
2418 +
2419 + $this->add_control(
2420 + 'heading_previous_button',
2421 + [
2422 + 'label' => esc_html__('Previous Button', 'king-addons'),
2423 + 'type' => Controls_Manager::HEADING,
2424 + ]
2425 + );
2426 +
2427 + $this->add_control(
2428 + 'previous_button_background_color',
2429 + [
2430 + 'label' => esc_html__('Background Color', 'king-addons'),
2431 + 'type' => Controls_Manager::COLOR,
2432 + 'default' => '#5B03FF',
2433 + 'selectors' => [
2434 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'background-color: {{VALUE}};',
2435 + ],
2436 + ]
2437 + );
2438 +
2439 + $this->add_control(
2440 + 'previous_button_text_color',
2441 + [
2442 + 'label' => esc_html__('Text Color', 'king-addons'),
2443 + 'type' => Controls_Manager::COLOR,
2444 + 'default' => '#ffffff',
2445 + 'selectors' => [
2446 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'color: {{VALUE}};',
2447 + ],
2448 + ]
2449 + );
2450 +
2451 + $this->add_control(
2452 + 'previous_button_border_color',
2453 + [
2454 + 'label' => esc_html__('Border Color', 'king-addons'),
2455 + 'type' => Controls_Manager::COLOR,
2456 + 'default' => '',
2457 + 'selectors' => [
2458 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'border-color: {{VALUE}};',
2459 + ],
2460 + 'condition' => [
2461 + 'button_border_border!' => '',
2462 + ],
2463 + ]
2464 + );
2465 +
2466 + $this->add_group_control(
2467 + Group_Control_Typography::get_type(),
2468 + [
2469 + 'name' => 'button_typography',
2470 + 'selector' => '{{WRAPPER}} .king-addons-button, {{WRAPPER}} .king-addons-fb-step-prev, {{WRAPPER}} .king-addons-fb-step-next',
2471 + ]
2472 + );
2473 +
2474 + $this->end_controls_tab();
2475 +
2476 + $this->start_controls_tab(
2477 + 'tab_button_hover',
2478 + [
2479 + 'label' => esc_html__('Hover', 'king-addons'),
2480 + ]
2481 + );
2482 +
2483 + $this->add_control(
2484 + 'heading_next_submit_button_hover',
2485 + [
2486 + 'label' => esc_html__('Next & Submit Button', 'king-addons'),
2487 + 'type' => Controls_Manager::HEADING,
2488 + ]
2489 + );
2490 +
2491 + $this->add_control(
2492 + 'button_background_hover_color',
2493 + [
2494 + 'label' => esc_html__('Background Color', 'king-addons'),
2495 + 'type' => Controls_Manager::COLOR,
2496 + 'default' => '',
2497 + 'selectors' => [
2498 + '{{WRAPPER}} .king-addons-fb-step-next:hover' => 'background-color: {{VALUE}};',
2499 + '{{WRAPPER}} .king-addons-button[type="submit"]:hover' => 'background-color: {{VALUE}};',
2500 + ],
2501 + ]
2502 + );
2503 +
2504 + $this->add_control(
2505 + 'button_hover_color',
2506 + [
2507 + 'label' => esc_html__('Text Color', 'king-addons'),
2508 + 'type' => Controls_Manager::COLOR,
2509 + 'default' => '#ffffff',
2510 + 'selectors' => [
2511 + '{{WRAPPER}} .king-addons-fb-step-next:hover' => 'color: {{VALUE}};',
2512 + '{{WRAPPER}} .king-addons-button[type="submit"]:hover' => 'color: {{VALUE}};',
2513 + '{{WRAPPER}} .king-addons-button[type="submit"]:hover svg *' => 'fill: {{VALUE}};',
2514 + ],
2515 + ]
2516 + );
2517 +
2518 + $this->add_control(
2519 + 'button_hover_border_color',
2520 + [
2521 + 'label' => esc_html__('Border Color', 'king-addons'),
2522 + 'type' => Controls_Manager::COLOR,
2523 + 'default' => '',
2524 + 'selectors' => [
2525 + '{{WRAPPER}} .king-addons-fb-step-next:hover' => 'border-color: {{VALUE}};',
2526 + '{{WRAPPER}} .king-addons-button[type="submit"]:hover' => 'border-color: {{VALUE}};',
2527 + ],
2528 + 'condition' => [
2529 + 'button_border_border!' => '',
2530 + ],
2531 + ]
2532 + );
2533 +
2534 + $this->add_control(
2535 + 'heading_previous_button_hover',
2536 + [
2537 + 'label' => esc_html__('Previous Button', 'king-addons'),
2538 + 'type' => Controls_Manager::HEADING,
2539 + ]
2540 + );
2541 +
2542 + $this->add_control(
2543 + 'previous_button_background_color_hover',
2544 + [
2545 + 'label' => esc_html__('Background Color', 'king-addons'),
2546 + 'type' => Controls_Manager::COLOR,
2547 + 'default' => '',
2548 + 'selectors' => [
2549 + '{{WRAPPER}} .king-addons-fb-step-prev:hover' => 'background-color: {{VALUE}};',
2550 + ],
2551 + ]
2552 + );
2553 +
2554 + $this->add_control(
2555 + 'previous_button_text_color_hover',
2556 + [
2557 + 'label' => esc_html__('Text Color', 'king-addons'),
2558 + 'type' => Controls_Manager::COLOR,
2559 + 'default' => '#ffffff',
2560 + 'selectors' => [
2561 + '{{WRAPPER}} .king-addons-fb-step-prev:hover' => 'color: {{VALUE}};',
2562 + ],
2563 + ]
2564 + );
2565 +
2566 + $this->add_control(
2567 + 'previous_button_border_color_hover',
2568 + [
2569 + 'label' => esc_html__('Border Color', 'king-addons'),
2570 + 'type' => Controls_Manager::COLOR,
2571 + 'default' => '',
2572 + 'selectors' => [
2573 + '{{WRAPPER}} .king-addons-fb-step-prev:hover' => 'border-color: {{VALUE}};',
2574 + ],
2575 + 'condition' => [
2576 + 'button_border_border!' => '',
2577 + ],
2578 + ]
2579 + );
2580 +
2581 +
2582 + $this->end_controls_tab();
2583 +
2584 + $this->end_controls_tabs();
2585 +
2586 + $this->add_group_control(
2587 + Group_Control_Border::get_type(), [
2588 + 'name' => 'button_border',
2589 + 'selector' => '{{WRAPPER}} .king-addons-button, {{WRAPPER}} .king-addons-fb-step-prev, {{WRAPPER}} .king-addons-fb-step-next',
2590 + 'exclude' => [
2591 + 'color',
2592 + ],
2593 + 'separator' => 'before',
2594 + ]
2595 + );
2596 +
2597 + $this->add_control(
2598 + 'button_border_radius',
2599 + [
2600 + 'label' => esc_html__('Border Radius', 'king-addons'),
2601 + 'type' => Controls_Manager::DIMENSIONS,
2602 + 'size_units' => ['px', '%', 'em'],
2603 + 'selectors' => [
2604 + '{{WRAPPER}} .king-addons-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2605 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2606 + '{{WRAPPER}} .king-addons-fb-step-next' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
2607 + ],
2608 + ]
2609 + );
2610 +
2611 + $this->add_control(
2612 + 'button_text_padding',
2613 + [
2614 + 'label' => esc_html__('Text Padding', 'king-addons'),
2615 + 'type' => Controls_Manager::DIMENSIONS,
2616 + 'size_units' => ['px', 'em', '%'],
2617 + 'selectors' => [
2618 + '{{WRAPPER}} .king-addons-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2619 + '{{WRAPPER}} .king-addons-fb-step-prev' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2620 + '{{WRAPPER}} .king-addons-fb-step-next' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
2621 + ],
2622 + ]
2623 + );
2624 +
2625 + $this->end_controls_section();
2626 +
2627 + $this->start_controls_section(
2628 + 'section_step_style',
2629 + [
2630 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Step', 'king-addons'),
2631 + 'tab' => Controls_Manager::TAB_STYLE,
2632 + ]
2633 + );
2634 +
2635 + $this->start_controls_tabs('tabs_step_style');
2636 +
2637 + $this->start_controls_tab(
2638 + 'tab_step_normal',
2639 + [
2640 + 'label' => esc_html__('Normal', 'king-addons'),
2641 + ]
2642 + );
2643 +
2644 + $this->add_control(
2645 + 'main_label_color',
2646 + [
2647 + 'label' => esc_html__('Label Color', 'king-addons'),
2648 + 'type' => Controls_Manager::COLOR,
2649 + 'default' => '#7a7a7a',
2650 + 'selectors' => [
2651 + '{{WRAPPER}} .king-addons-fb-step-main-label' => 'color: {{VALUE}};',
2652 + ]
2653 + ]
2654 + );
2655 +
2656 + $this->add_control(
2657 + 'sub_label_color',
2658 + [
2659 + 'label' => esc_html__('Sub Label Color', 'king-addons'),
2660 + 'type' => Controls_Manager::COLOR,
2661 + 'default' => '#7a7a7a',
2662 + 'selectors' => [
2663 + '{{WRAPPER}} .king-addons-fb-step-sub-label' => 'color: {{VALUE}};',
2664 + ]
2665 + ]
2666 + );
2667 +
2668 + $this->add_control(
2669 + 'step_bg_color',
2670 + [
2671 + 'label' => esc_html__('Background Color', 'king-addons'),
2672 + 'type' => Controls_Manager::COLOR,
2673 + 'selectors' => [
2674 + '{{WRAPPER}} .king-addons-fb-step' => 'background-color: {{VALUE}};'
2675 + ],
2676 + ]
2677 + );
2678 +
2679 + $this->add_control(
2680 + 'step_border_color',
2681 + [
2682 + 'label' => esc_html__('Border Color', 'king-addons'),
2683 + 'type' => Controls_Manager::COLOR,
2684 + 'default' => '#5B03FF',
2685 + 'selectors' => [
2686 + '{{WRAPPER}} .king-addons-fb-step' => 'border-color: {{VALUE}};'
2687 + ]
2688 + ]
2689 + );
2690 +
2691 + $this->end_controls_tab();
2692 +
2693 + $this->start_controls_tab(
2694 + 'tab_step_active',
2695 + [
2696 + 'label' => esc_html__('Active', 'king-addons'),
2697 + ]
2698 + );
2699 +
2700 + $this->add_control(
2701 + 'main_label_color_active',
2702 + [
2703 + 'label' => esc_html__('Label Color', 'king-addons'),
2704 + 'type' => Controls_Manager::COLOR,
2705 + 'default' => '#7a7a7a',
2706 + 'selectors' => [
2707 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active .king-addons-fb-step-main-label' => 'color: {{VALUE}};',
2708 + ]
2709 + ]
2710 + );
2711 +
2712 + $this->add_control(
2713 + 'sub_label_color_active',
2714 + [
2715 + 'label' => esc_html__('Sub Label Color', 'king-addons'),
2716 + 'type' => Controls_Manager::COLOR,
2717 + 'default' => '#7a7a7a',
2718 + 'selectors' => [
2719 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active .king-addons-fb-step-sub-label' => 'color: {{VALUE}};',
2720 + ]
2721 + ]
2722 + );
2723 +
2724 + $this->add_control(
2725 + 'step_bg_color_active',
2726 + [
2727 + 'label' => esc_html__('Background Color', 'king-addons'),
2728 + 'type' => Controls_Manager::COLOR,
2729 + 'selectors' => [
2730 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active' => 'background-color: {{VALUE}};',
2731 + ]
2732 + ]
2733 + );
2734 +
2735 + $this->add_control(
2736 + 'step_border_color_active',
2737 + [
2738 + 'label' => esc_html__('Border Color', 'king-addons'),
2739 + 'type' => Controls_Manager::COLOR,
2740 + 'selectors' => [
2741 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active' => 'border-color: {{VALUE}};'
2742 + ]
2743 + ]
2744 + );
2745 +
2746 + $this->end_controls_tab();
2747 +
2748 + $this->start_controls_tab(
2749 + 'tab_step_finished',
2750 + [
2751 + 'label' => esc_html__('Finished', 'king-addons'),
2752 + ]
2753 + );
2754 +
2755 + $this->add_control(
2756 + 'main_label_color_finish',
2757 + [
2758 + 'label' => esc_html__('Label Color', 'king-addons'),
2759 + 'type' => Controls_Manager::COLOR,
2760 + 'default' => '#7a7a7a',
2761 + 'selectors' => [
2762 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish .king-addons-fb-step-main-label' => 'color: {{VALUE}};',
2763 + ]
2764 + ]
2765 + );
2766 +
2767 + $this->add_control(
2768 + 'sub_label_color_finish',
2769 + [
2770 + 'label' => esc_html__('Sub Label Color', 'king-addons'),
2771 + 'type' => Controls_Manager::COLOR,
2772 + 'default' => '#7a7a7a',
2773 + 'selectors' => [
2774 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish .king-addons-fb-step-sub-label' => 'color: {{VALUE}};',
2775 + ]
2776 + ]
2777 + );
2778 +
2779 + $this->add_control(
2780 + 'step_bg_color_finish',
2781 + [
2782 + 'label' => esc_html__('Background Color', 'king-addons'),
2783 + 'type' => Controls_Manager::COLOR,
2784 + 'selectors' => [
2785 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish' => 'background-color: {{VALUE}};',
2786 + ]
2787 + ]
2788 + );
2789 +
2790 + $this->add_control(
2791 + 'step_border_color_finish',
2792 + [
2793 + 'label' => esc_html__('Border Color', 'king-addons'),
2794 + 'type' => Controls_Manager::COLOR,
2795 + 'selectors' => [
2796 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish' => 'border-color: {{VALUE}};'
2797 + ]
2798 + ]
2799 + );
2800 +
2801 + $this->end_controls_tab();
2802 +
2803 + $this->end_controls_tabs();
2804 +
2805 + $this->add_responsive_control(
2806 + 'step_wrap_distance',
2807 + [
2808 + 'label' => esc_html__('Distance', 'king-addons'),
2809 + 'type' => Controls_Manager::SLIDER,
2810 + 'size_units' => ['px'],
2811 + 'range' => [
2812 + 'px' => [
2813 + 'min' => 0,
2814 + 'max' => 50,
2815 + ],
2816 + ],
2817 + 'default' => [
2818 + 'unit' => 'px',
2819 + 'size' => 15,
2820 + ],
2821 + 'selectors' => [
2822 + '{{WRAPPER}} .king-addons-fb-step-wrap' => 'margin-bottom: {{SIZE}}{{UNIT}};',
2823 + ],
2824 + 'separator' => 'before'
2825 + ]
2826 + );
2827 +
2828 + $this->add_responsive_control(
2829 + 'step_wrap_gutter',
2830 + [
2831 + 'label' => esc_html__('Gutter', 'king-addons'),
2832 + 'type' => Controls_Manager::SLIDER,
2833 + 'size_units' => ['px'],
2834 + 'range' => [
2835 + 'px' => [
2836 + 'min' => 0,
2837 + 'max' => 25
2838 + ]
2839 + ],
2840 + 'default' => [
2841 + 'unit' => 'px',
2842 + 'size' => 5
2843 + ],
2844 + 'selectors' => [
2845 + '{{WRAPPER}} .king-addons-fb-step-sep' => 'margin-left: {{SIZE}}{{UNIT}}; margin-right: {{SIZE}}{{UNIT}}',
2846 + '{{WRAPPER}} .king-addons-separator-off .king-addons-fb-step:not(:last-of-type)' => 'margin-right: {{SIZE}}{{UNIT}}'
2847 + ],
2848 + 'separator' => 'before'
2849 + ]
2850 + );
2851 +
2852 + $this->add_control(
2853 + 'step_border_type',
2854 + [
2855 + 'label' => esc_html__('Border Type', 'king-addons'),
2856 + 'type' => Controls_Manager::SELECT,
2857 + 'options' => [
2858 + 'none' => esc_html__('None', 'king-addons'),
2859 + 'solid' => esc_html__('Solid', 'king-addons'),
2860 + 'double' => esc_html__('Double', 'king-addons'),
2861 + 'dotted' => esc_html__('Dotted', 'king-addons'),
2862 + 'dashed' => esc_html__('Dashed', 'king-addons'),
2863 + 'groove' => esc_html__('Groove', 'king-addons'),
2864 + ],
2865 + 'default' => 'solid',
2866 + 'selectors' => [
2867 + '{{WRAPPER}} .king-addons-fb-step' => 'border-style: {{VALUE}};',
2868 + ],
2869 + 'separator' => 'before',
2870 + ]
2871 + );
2872 +
2873 + $this->add_responsive_control(
2874 + 'step_border_width',
2875 + [
2876 + 'label' => esc_html__('Border Width', 'king-addons'),
2877 + 'type' => Controls_Manager::DIMENSIONS,
2878 + 'size_units' => ['px'],
2879 + 'default' => [
2880 + 'top' => 1,
2881 + 'right' => 1,
2882 + 'bottom' => 1,
2883 + 'left' => 1,
2884 + ],
2885 + 'selectors' => [
2886 + '{{WRAPPER}} .king-addons-fb-step' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2887 + ],
2888 + 'condition' => [
2889 + 'step_border_type!' => 'none',
2890 + ],
2891 + ]
2892 + );
2893 +
2894 + $this->add_control(
2895 + 'step_border_radius',
2896 + [
2897 + 'label' => esc_html__('Border Radius', 'king-addons'),
2898 + 'type' => Controls_Manager::DIMENSIONS,
2899 + 'size_units' => ['px', '%', 'em'],
2900 + 'selectors' => [
2901 + '{{WRAPPER}} .king-addons-fb-step' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2902 + ],
2903 + 'separator' => 'before',
2904 + ]
2905 + );
2906 +
2907 + $this->add_responsive_control(
2908 + 'step_padding',
2909 + [
2910 + 'label' => esc_html__('Padding', 'king-addons'),
2911 + 'type' => Controls_Manager::DIMENSIONS,
2912 + 'size_units' => ['px', 'em', '%'],
2913 + 'default' => [
2914 + 'unit' => 'px',
2915 + 'top' => 10,
2916 + 'right' => 10,
2917 + 'bottom' => 10,
2918 + 'left' => 10,
2919 + ],
2920 + 'selectors' => [
2921 +
2922 + '{{WRAPPER}} .king-addons-fb-step' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2923 + '{{WRAPPER}}' => '--king-addons-fb-steps-padding: {{TOP}}{{UNIT}};'
2924 + ],
2925 + ]
2926 + );
2927 +
2928 + $this->add_control(
2929 + 'step_inner_styles',
2930 + [
2931 + 'label' => esc_html__('Step Indicator', 'king-addons'),
2932 + 'type' => Controls_Manager::HEADING,
2933 + 'separator' => 'before',
2934 + ]
2935 + );
2936 +
2937 + $this->start_controls_tabs('tabs_step_inner_style');
2938 +
2939 + $this->start_controls_tab(
2940 + 'tab_step_inner_normal',
2941 + [
2942 + 'label' => esc_html__('Normal', 'king-addons'),
2943 + ]
2944 + );
2945 +
2946 + $this->add_control(
2947 + 'step_inner_color',
2948 + [
2949 + 'label' => esc_html__('Color', 'king-addons'),
2950 + 'type' => Controls_Manager::COLOR,
2951 + 'default' => '#FFFFFF',
2952 + 'selectors' => [
2953 + '{{WRAPPER}} .king-addons-fb-step-content i' => 'color: {{VALUE}};',
2954 + '{{WRAPPER}} .king-addons-fb-step-content svg' => 'fill: {{VALUE}};',
2955 + '{{WRAPPER}} .king-addons-fb-step-content' => 'color: {{VALUE}};'
2956 + ]
2957 + ]
2958 + );
2959 +
2960 + $this->add_control(
2961 + 'step_inner_bg_color',
2962 + [
2963 + 'label' => esc_html__('Background Color', 'king-addons'),
2964 + 'type' => Controls_Manager::COLOR,
2965 + 'default' => '#5B03FF',
2966 + 'selectors' => [
2967 + '{{WRAPPER}} .king-addons-fb-step-content' => 'background-color: {{VALUE}};'
2968 + ],
2969 + ]
2970 + );
2971 +
2972 + $this->add_control(
2973 + 'step_inner_border_color',
2974 + [
2975 + 'label' => esc_html__('Border Color', 'king-addons'),
2976 + 'type' => Controls_Manager::COLOR,
2977 + 'default' => '#5B03FF',
2978 + 'selectors' => [
2979 + '{{WRAPPER}} .king-addons-fb-step-content' => 'border-color: {{VALUE}};'
2980 + ]
2981 + ]
2982 + );
2983 +
2984 + $this->end_controls_tab();
2985 +
2986 + $this->start_controls_tab(
2987 + 'tab_step_inner_active',
2988 + [
2989 + 'label' => esc_html__('Active', 'king-addons'),
2990 + ]
2991 + );
2992 +
2993 + $this->add_control(
2994 + 'step_inner_color_active',
2995 + [
2996 + 'label' => esc_html__('Color', 'king-addons'),
2997 + 'type' => Controls_Manager::COLOR,
2998 + 'default' => '#FFFFFF',
2999 + 'selectors' => [
3000 + '{{WRAPPER}} .king-addons-fb-step-active .king-addons-fb-step-content i' => 'color: {{VALUE}};',
3001 + '{{WRAPPER}} .king-addons-fb-step-active .king-addons-fb-step-content svg' => 'fill: {{VALUE}};',
3002 + '{{WRAPPER}} .king-addons-fb-step-active .king-addons-fb-step-content' => 'color: {{VALUE}};'
3003 + ]
3004 + ]
3005 + );
3006 +
3007 + $this->add_control(
3008 + 'step_inner_bg_color_active',
3009 + [
3010 + 'label' => esc_html__('Background Color', 'king-addons'),
3011 + 'type' => Controls_Manager::COLOR,
3012 + 'default' => '#5B03FF',
3013 + 'selectors' => [
3014 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active .king-addons-fb-step-content' => 'background-color: {{VALUE}};',
3015 + ]
3016 + ]
3017 + );
3018 +
3019 + $this->add_control(
3020 + 'step_inner_border_color_active',
3021 + [
3022 + 'label' => esc_html__('Border Color', 'king-addons'),
3023 + 'type' => Controls_Manager::COLOR,
3024 + 'default' => '#5B03FF',
3025 + 'selectors' => [
3026 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-active .king-addons-fb-step-content' => 'border-color: {{VALUE}};'
3027 + ]
3028 + ]
3029 + );
3030 +
3031 + $this->end_controls_tab();
3032 +
3033 + $this->start_controls_tab(
3034 + 'tab_step_inner_finish',
3035 + [
3036 + 'label' => esc_html__('Finish', 'king-addons'),
3037 + ]
3038 + );
3039 +
3040 + $this->add_control(
3041 + 'step_inner_color_finish',
3042 + [
3043 + 'label' => esc_html__('Color (Labels, Icon, Number)', 'king-addons'),
3044 + 'type' => Controls_Manager::COLOR,
3045 + 'default' => '#FFFFFF',
3046 + 'selectors' => [
3047 + '{{WRAPPER}} .king-addons-fb-step-finish .king-addons-fb-step-content i' => 'color: {{VALUE}};',
3048 + '{{WRAPPER}} .king-addons-fb-step-finish .king-addons-fb-step-content svg' => 'fill: {{VALUE}};',
3049 + '{{WRAPPER}} .king-addons-fb-step-finish .king-addons-fb-step-content' => 'color: {{VALUE}};'
3050 + ]
3051 + ]
3052 + );
3053 +
3054 + $this->add_control(
3055 + 'step_inner_bg_color_finish',
3056 + [
3057 + 'label' => esc_html__('Background Color', 'king-addons'),
3058 + 'type' => Controls_Manager::COLOR,
3059 + 'default' => '#5B03FF',
3060 + 'selectors' => [
3061 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish .king-addons-fb-step-content' => 'background-color: {{VALUE}};',
3062 + ]
3063 + ]
3064 + );
3065 +
3066 + $this->add_control(
3067 + 'step_inner_border_color_finish',
3068 + [
3069 + 'label' => esc_html__('Border Color', 'king-addons'),
3070 + 'type' => Controls_Manager::COLOR,
3071 + 'default' => '#5B03FF',
3072 + 'selectors' => [
3073 + '{{WRAPPER}} .king-addons-fb-step.king-addons-fb-step-finish .king-addons-fb-step-content' => 'border-color: {{VALUE}};'
3074 + ]
3075 + ]
3076 + );
3077 +
3078 + $this->end_controls_tab();
3079 +
3080 + $this->end_controls_tabs();
3081 +
3082 + $this->add_control(
3083 + 'step_inner_border_type',
3084 + [
3085 + 'label' => esc_html__('Border Type', 'king-addons'),
3086 + 'type' => Controls_Manager::SELECT,
3087 + 'options' => [
3088 + 'none' => esc_html__('None', 'king-addons'),
3089 + 'solid' => esc_html__('Solid', 'king-addons'),
3090 + 'double' => esc_html__('Double', 'king-addons'),
3091 + 'dotted' => esc_html__('Dotted', 'king-addons'),
3092 + 'dashed' => esc_html__('Dashed', 'king-addons'),
3093 + 'groove' => esc_html__('Groove', 'king-addons'),
3094 + ],
3095 + 'default' => 'solid',
3096 + 'selectors' => [
3097 + '{{WRAPPER}} .king-addons-fb-step-content' => 'border-style: {{VALUE}};',
3098 + ],
3099 + 'separator' => 'before',
3100 + ]
3101 + );
3102 +
3103 + $this->add_responsive_control(
3104 + 'step_inner_border_width',
3105 + [
3106 + 'label' => esc_html__('Border Width', 'king-addons'),
3107 + 'type' => Controls_Manager::DIMENSIONS,
3108 + 'size_units' => ['px'],
3109 + 'default' => [
3110 + 'top' => 1,
3111 + 'right' => 1,
3112 + 'bottom' => 1,
3113 + 'left' => 1,
3114 + ],
3115 + 'selectors' => [
3116 + '{{WRAPPER}} .king-addons-fb-step-content' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
3117 + ],
3118 + 'condition' => [
3119 + 'step_inner_border_type!' => 'none',
3120 + ],
3121 + ]
3122 + );
3123 +
3124 + $this->add_control(
3125 + 'step_inner_border_radius',
3126 + [
3127 + 'label' => esc_html__('Border Radius', 'king-addons'),
3128 + 'type' => Controls_Manager::DIMENSIONS,
3129 + 'size_units' => ['px', '%', 'em'],
3130 + 'selectors' => [
3131 + '{{WRAPPER}} .king-addons-fb-step-content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
3132 + ],
3133 + 'separator' => 'before',
3134 + ]
3135 + );
3136 +
3137 +
3138 + $this->add_responsive_control(
3139 + 'step_inner_padding',
3140 + [
3141 + 'label' => esc_html__('Box Size', 'king-addons'),
3142 + 'type' => Controls_Manager::SLIDER,
3143 + 'size_units' => ['px'],
3144 + 'range' => [
3145 + 'px' => [
3146 + 'min' => 0,
3147 + 'max' => 200,
3148 + ],
3149 + ],
3150 + 'default' => [
3151 + 'unit' => 'px',
3152 + 'size' => 20,
3153 + ],
3154 + 'selectors' => [
3155 + '{{WRAPPER}}' => '--king-addons-fb-steps-indicator-padding: {{SIZE}}{{UNIT}};',
3156 + ],
3157 + 'separator' => 'before'
3158 + ]
3159 + );
3160 +
3161 + $this->add_responsive_control(
3162 + 'step_icon_size',
3163 + [
3164 + 'label' => esc_html__('Icon Size', 'king-addons'),
3165 + 'type' => Controls_Manager::SLIDER,
3166 + 'size_units' => ['px'],
3167 + 'range' => [
3168 + 'px' => [
3169 + 'min' => 0,
3170 + 'max' => 25,
3171 + ],
3172 + ],
3173 + 'default' => [
3174 + 'unit' => 'px',
3175 + 'size' => 12,
3176 + ],
3177 + 'selectors' => [
3178 + '{{WRAPPER}} .king-addons-fb-step' => 'font-size: {{SIZE}}{{UNIT}};',
3179 + '{{WRAPPER}} .king-addons-fb-step svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
3180 + ],
3181 + 'condition' => [
3182 + 'step_type' => ['icon', 'icon_text']
3183 + ]
3184 + ]
3185 + );
3186 +
3187 + $this->add_responsive_control(
3188 + 'step_label_distance',
3189 + [
3190 + 'label' => esc_html__('Distance', 'king-addons'),
3191 + 'type' => Controls_Manager::SLIDER,
3192 + 'size_units' => ['px'],
3193 + 'range' => [
3194 + 'px' => [
3195 + 'min' => 0,
3196 + 'max' => 50,
3197 + ],
3198 + ],
3199 + 'default' => [
3200 + 'unit' => 'px',
3201 + 'size' => 5,
3202 + ],
3203 + 'selectors' => [
3204 + '{{WRAPPER}}.king-addons-fb-step-content-layout-horizontal .king-addons-fb-step-label' => 'margin-left: {{SIZE}}{{UNIT}};',
3205 + '{{WRAPPER}}.king-addons-fb-step-content-layout-vertical .king-addons-fb-step-label' => 'margin-top: {{SIZE}}{{UNIT}};'
3206 + ],
3207 + 'separator' => 'before',
3208 + 'condition' => [
3209 + 'step_type' => ['number_text', 'icon_text']
3210 + ]
3211 + ]
3212 + );
3213 +
3214 + $this->add_control(
3215 + 'step_divider',
3216 + [
3217 + 'label' => esc_html__('Divider', 'king-addons'),
3218 + 'type' => Controls_Manager::HEADING,
3219 + 'separator' => 'before',
3220 + 'condition' => [
3221 + 'step_type!' => 'progress_bar'
3222 + ]
3223 + ]
3224 + );
3225 +
3226 + $this->add_control(
3227 + 'step_progressbar',
3228 + [
3229 + 'label' => esc_html__('Progressbar', 'king-addons'),
3230 + 'type' => Controls_Manager::HEADING,
3231 + 'separator' => 'before',
3232 + 'condition' => [
3233 + 'step_type' => 'progress_bar'
3234 + ]
3235 + ]
3236 + );
3237 +
3238 + $this->add_control(
3239 + 'step_divider_color',
3240 + [
3241 + 'label' => esc_html__('Color', 'king-addons'),
3242 + 'type' => Controls_Manager::COLOR,
3243 + 'default' => '#000000',
3244 + 'selectors' => [
3245 + '{{WRAPPER}} .king-addons-fb-step-sep' => 'background-color: {{VALUE}};',
3246 + '{{WRAPPER}} .king-addons-fb-step-progress' => 'background-color: {{VALUE}};',
3247 + ]
3248 + ]
3249 + );
3250 +
3251 + $this->add_control(
3252 + 'step_progress_text_color',
3253 + [
3254 + 'label' => esc_html__('Text Color', 'king-addons'),
3255 + 'type' => Controls_Manager::COLOR,
3256 + 'default' => '#FFF',
3257 + 'selectors' => [
3258 + '{{WRAPPER}} .king-addons-fb-step-progress-fill' => 'color: {{VALUE}};',
3259 + ],
3260 + 'condition' => [
3261 + 'step_type' => 'progress_bar'
3262 + ]
3263 + ]
3264 + );
3265 +
3266 + $this->add_control(
3267 + 'step_progress_fill_color',
3268 + [
3269 + 'label' => esc_html__('Fill Color', 'king-addons'),
3270 + 'type' => Controls_Manager::COLOR,
3271 + 'default' => '#5B03FF',
3272 + 'selectors' => [
3273 + '{{WRAPPER}} .king-addons-fb-step-progress-fill' => 'background-color: {{VALUE}};',
3274 + ],
3275 + 'condition' => [
3276 + 'step_type' => 'progress_bar'
3277 + ]
3278 + ]
3279 + );
3280 +
3281 + $this->add_group_control(
3282 + Group_Control_Typography::get_type(),
3283 + [
3284 + 'name' => 'step_percent_typo',
3285 + 'selector' => '{{WRAPPER}} .king-addons-fb-step-progress-fill',
3286 + 'condition' => [
3287 + 'step_type' => 'progress_bar'
3288 + ]
3289 + ]
3290 + );
3291 +
3292 + $this->add_responsive_control(
3293 + 'step_divider_height',
3294 + [
3295 + 'label' => esc_html__('Divider Height', 'king-addons'),
3296 + 'type' => Controls_Manager::SLIDER,
3297 + 'size_units' => ['px'],
3298 + 'range' => [
3299 + 'px' => [
3300 + 'min' => 0,
3301 + 'max' => 10,
3302 + ],
3303 + ],
3304 + 'default' => [
3305 + 'unit' => 'px',
3306 + 'size' => 2,
3307 + ],
3308 + 'selectors' => [
3309 + '{{WRAPPER}}' => '--king-addons-fb-steps-divider-width: {{SIZE}}{{UNIT}};'
3310 + ],
3311 + 'condition' => [
3312 + 'step_type!' => 'progress_bar'
3313 + ]
3314 + ]
3315 + );
3316 +
3317 + $this->add_responsive_control(
3318 + 'step_progress_text_distance',
3319 + [
3320 + 'label' => esc_html__('Text Distance', 'king-addons'),
3321 + 'type' => Controls_Manager::SLIDER,
3322 + 'size_units' => ['px'],
3323 + 'range' => [
3324 + 'px' => [
3325 + 'min' => 0,
3326 + 'max' => 50,
3327 + ],
3328 + ],
3329 + 'default' => [
3330 + 'unit' => 'px',
3331 + 'size' => 10,
3332 + ],
3333 + 'selectors' => [
3334 + '{{WRAPPER}} .king-addons-fb-step-progress-fill' => 'padding-right: {{SIZE}}{{UNIT}};'
3335 + ],
3336 + 'condition' => [
3337 + 'step_type' => 'progress_bar'
3338 + ]
3339 + ]
3340 + );
3341 +
3342 + $this->add_responsive_control(
3343 + 'step_progress_border_radius',
3344 + [
3345 + 'label' => esc_html__('Border Radius', 'king-addons'),
3346 + 'type' => Controls_Manager::SLIDER,
3347 + 'size_units' => ['px'],
3348 + 'range' => [
3349 + 'px' => [
3350 + 'min' => 0,
3351 + 'max' => 100,
3352 + ],
3353 + ],
3354 + 'default' => [
3355 + 'unit' => 'px',
3356 + 'size' => 0,
3357 + ],
3358 + 'selectors' => [
3359 + '{{WRAPPER}} .king-addons-fb-step-progress' => 'border-radius: {{SIZE}}{{UNIT}};',
3360 + '{{WRAPPER}} .king-addons-fb-step-progress-fill' => 'border-radius: {{SIZE}}{{UNIT}};'
3361 + ],
3362 + 'condition' => [
3363 + 'step_type' => 'progress_bar'
3364 + ]
3365 + ]
3366 + );
3367 +
3368 + $this->add_control(
3369 + 'step_main_label',
3370 + [
3371 + 'label' => esc_html__('Main Label', 'king-addons'),
3372 + 'type' => Controls_Manager::HEADING,
3373 + 'separator' => 'before',
3374 + ]
3375 + );
3376 +
3377 + $this->add_group_control(
3378 + Group_Control_Typography::get_type(),
3379 + [
3380 + 'name' => 'main_label_typography',
3381 + 'selector' => '{{WRAPPER}} .king-addons-fb-step-main-label',
3382 + 'fields_options' => [
3383 + 'typography' => [
3384 + 'default' => 'custom',
3385 + ],
3386 + 'font_size' => [
3387 + 'default' => [
3388 + 'size' => '12',
3389 + 'unit' => 'px',
3390 + ],
3391 + ]
3392 + ]
3393 + ]
3394 + );
3395 +
3396 + $this->add_control(
3397 + 'step_sub_label',
3398 + [
3399 + 'label' => esc_html__('Sub Label', 'king-addons'),
3400 + 'type' => Controls_Manager::HEADING,
3401 + 'separator' => 'before',
3402 + ]
3403 + );
3404 +
3405 + $this->add_group_control(
3406 + Group_Control_Typography::get_type(),
3407 + [
3408 + 'name' => 'sub_label_typography',
3409 + 'selector' => '{{WRAPPER}} .king-addons-fb-step-sub-label',
3410 + 'fields_options' => [
3411 + 'typography' => [
3412 + 'default' => 'custom',
3413 + ],
3414 + 'font_size' => [
3415 + 'default' => [
3416 + 'size' => '12',
3417 + 'unit' => 'px',
3418 + ],
3419 + ]
3420 + ]
3421 + ]
3422 + );
3423 +
3424 + $this->add_control(
3425 + 'step_number_heading',
3426 + [
3427 + 'label' => esc_html__('Number', 'king-addons'),
3428 + 'type' => Controls_Manager::HEADING,
3429 + 'separator' => 'before',
3430 + 'condition' => [
3431 + 'step_type' => ['number', 'number_text']
3432 + ]
3433 + ]
3434 + );
3435 +
3436 + $this->add_group_control(
3437 + Group_Control_Typography::get_type(),
3438 + [
3439 + 'name' => 'step_number',
3440 + 'selector' => '{{WRAPPER}} .king-addons-fb-step-number',
3441 + 'fields_options' => [
3442 + 'typography' => [
3443 + 'default' => 'custom',
3444 + ],
3445 + 'font_size' => [
3446 + 'default' => [
3447 + 'size' => '12',
3448 + 'unit' => 'px',
3449 + ],
3450 + ]
3451 + ],
3452 + 'condition' => [
3453 + 'step_type' => ['number', 'number_text']
3454 + ]
3455 + ]
3456 + );
3457 +
3458 + $this->end_controls_section();
3459 +
3460 + $this->start_controls_section(
3461 + 'section_results_style',
3462 + [
3463 + 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Results', 'king-addons'),
3464 + 'tab' => Controls_Manager::TAB_STYLE,
3465 + ]
3466 + );
3467 +
3468 + $this->add_group_control(
3469 + Group_Control_Typography::get_type(),
3470 + [
3471 + 'name' => 'results_typography',
3472 + 'selector' => '{{WRAPPER}} .king-addons-submit-success, {{WRAPPER}} .king-addons-submit-error',
3473 + 'fields_options' => [
3474 + 'typography' => [
3475 + 'default' => 'custom',
3476 + ],
3477 + 'font_size' => [
3478 + 'default' => [
3479 + 'size' => '12',
3480 + 'unit' => 'px',
3481 + ],
3482 + ]
3483 + ]
3484 + ]
3485 + );
3486 +
3487 + $this->add_control(
3488 + 'success_result_color',
3489 + [
3490 + 'label' => esc_html__('Success Color', 'king-addons'),
3491 + 'type' => Controls_Manager::COLOR,
3492 + 'default' => '#30CBCB',
3493 + 'selectors' => [
3494 + '{{WRAPPER}} .king-addons-submit-success' => 'color: {{VALUE}};',
3495 + ],
3496 + ]
3497 + );
3498 +
3499 + $this->add_control(
3500 + 'error_message_color',
3501 + [
3502 + 'label' => esc_html__('Error Color', 'king-addons'),
3503 + 'type' => Controls_Manager::COLOR,
3504 + 'default' => '#CB3030',
3505 + 'selectors' => [
3506 + '{{WRAPPER}} .king-addons-submit-error' => 'color: {{VALUE}};',
3507 + ],
3508 + ]
3509 + );
3510 +
3511 + $this->add_responsive_control(
3512 + 'finish_message_align',
3513 + [
3514 + 'label' => esc_html__('Alignment', 'king-addons'),
3515 + 'type' => Controls_Manager::CHOOSE,
3516 + 'options' => [
3517 + 'left' => [
3518 + 'title' => esc_html__('Left', 'king-addons'),
3519 + 'icon' => 'eicon-text-align-left',
3520 + ],
3521 + 'center' => [
3522 + 'title' => esc_html__('Center', 'king-addons'),
3523 + 'icon' => 'eicon-text-align-center',
3524 + ],
3525 + 'right' => [
3526 + 'title' => esc_html__('Right', 'king-addons'),
3527 + 'icon' => 'eicon-text-align-right',
3528 + ],
3529 + ],
3530 + 'default' => 'center',
3531 + 'selectors' => [
3532 + '{{WRAPPER}} .king-addons-submit-success' => 'text-align: {{VALUE}}',
3533 + '{{WRAPPER}} .king-addons-submit-error' => 'text-align: {{VALUE}}'
3534 + ],
3535 + ]
3536 + );
3537 +
3538 + $this->end_controls_section();
3539 +
3540 +
3541 + Core::renderProFeaturesSection($this, '', Controls_Manager::RAW_HTML, 'king-addons-form-builder', [
3542 + 'Unlimited number of fields',
3543 + 'Submission action',
3544 + 'Mailchimp action',
3545 + 'Webhook action'
3546 + ]);
3547 + }
3548 +
3549 + private function add_required_attribute($element)
3550 + {
3551 + $this->add_render_attribute($element, 'required', 'required');
3552 + $this->add_render_attribute($element, 'aria-required', 'true');
3553 + }
3554 +
3555 + public function get_attribute_name($item)
3556 + {
3557 + return 'form_fields[' . self::resolve_field_key($item) . ']';
3558 + }
3559 +
3560 + public function get_attribute_id($item)
3561 + {
3562 + return 'form-field-' . self::resolve_field_key($item);
3563 + }
3564 +
3565 + /**
3566 + * Field ID used as the submitted name/key.
3567 + *
3568 + * An empty Field ID used to produce name="form_fields[]", which PHP cannot
3569 + * map back onto the field. Fall back to Elementor's repeater _id so imported
3570 + * and programmatic forms still keep their values.
3571 + *
3572 + * @param array<string,mixed> $item Repeater row.
3573 + *
3574 + * @return string
3575 + */
3576 + public static function resolve_field_key($item): string
3577 + {
3578 + if (!is_array($item)) {
3579 + return '';
3580 + }
3581 +
3582 + $id = isset($item['field_id']) ? trim((string) $item['field_id']) : '';
3583 + if ('' !== $id) {
3584 + return $id;
3585 + }
3586 +
3587 + return isset($item['_id']) ? trim((string) $item['_id']) : '';
3588 + }
3589 +
3590 + protected function make_textarea_field($item, $item_index)
3591 + {
3592 + $this->add_render_attribute('textarea' . $item_index, [
3593 + 'class' => [
3594 + 'king-addons-form-field-textual',
3595 + 'king-addons-form-field',
3596 + esc_attr($item['css_classes'])
3597 + ],
3598 + 'name' => $this->get_attribute_name($item),
3599 + 'id' => $this->get_attribute_id($item),
3600 + 'rows' => $item['rows'],
3601 + ]);
3602 +
3603 + if ('true' == $this->get_settings_for_display()['show_placeholders'] && $item['placeholder']) {
3604 + $this->add_render_attribute('textarea' . $item_index, 'placeholder', $item['placeholder']);
3605 + }
3606 +
3607 + if ($item['required']) {
3608 + $this->add_required_attribute('textarea' . $item_index);
3609 + }
3610 +
3611 + $value = empty($item['field_value']) ? '' : $item['field_value'];
3612 +
3613 + return '<textarea ' . $this->get_render_attribute_string('textarea' . $item_index) . '>' . esc_textarea($value) . '</textarea>';
3614 + }
3615 +
3616 + protected function make_select_field($item, $i)
3617 + {
3618 + $this->add_render_attribute(
3619 + [
3620 + 'select-wrapper' . $i => [
3621 + 'class' => [
3622 + 'king-addons-form-field',
3623 + 'king-addons-select-wrap',
3624 + 'king-addons-fi-svg-' . (Plugin::$instance->experiments->is_feature_active('e_font_icon_svg') ? 'yes' : 'no'),
3625 + 'remove-before',
3626 + esc_attr($item['css_classes']),
3627 + ],
3628 + ],
3629 + 'select' . $i => [
3630 + 'name' => $this->get_attribute_name($item) . (!empty($item['allow_multiple']) ? '[]' : ''),
3631 + 'id' => $this->get_attribute_id($item),
3632 + 'class' => [
3633 + 'king-addons-form-field-textual'
3634 + ],
3635 + ],
3636 + ]
3637 + );
3638 +
3639 + if ($item['required']) {
3640 + $this->add_required_attribute('select' . $i);
3641 + }
3642 +
3643 + if ($item['allow_multiple']) {
3644 + $this->add_render_attribute('select' . $i, 'multiple');
3645 + if (!empty($item['select_size'])) {
3646 + $this->add_render_attribute('select' . $i, 'size', $item['select_size']);
3647 + }
3648 + }
3649 +
3650 + $options = preg_split("/\\r\\n|\\r|\\n/", $item['field_options']);
3651 +
3652 + if (!$options) {
3653 + return '';
3654 + }
3655 +
3656 + ob_start();
3657 + ?>
3658 + <div <?php $this->print_render_attribute_string('select-wrapper' . $i); ?>>
3659 +
3660 + <?php if (Plugin::$instance->experiments->is_feature_active('e_font_icon_svg')) { ?>
3661 + <svg class="e-font-icon-svg e-eicon-caret-up" viewBox="0 0 1000 500">
3662 + <path d="M763 279c8-8 8-12 8-25 0-8-4-16-8-25-9-8-13-8-25-8h-459c-8 0-16 4-25 8 0 9-4 17-4 25 0 9 4 17 8 25l230 229c8 5 16 9 25 9 8 0 16-4 25-9l225-229z"/>
3663 + </svg>
3664 + <?php } ?>
3665 + <!--suppress HtmlFormInputWithoutLabel -->
3666 + <select <?php $this->print_render_attribute_string('select' . $i); ?>>
3667 + <?php
3668 + foreach ($options as $key => $option) :
3669 + $field_key = self::resolve_field_key($item);
3670 + $option_id = $field_key . $key;
3671 + $option_value = esc_attr($option);
3672 + $option_label = esc_html($option);
3673 +
3674 + if (false !== strpos($option, '|')) {
3675 + list($label, $value) = explode('|', $option);
3676 + $option_value = esc_attr($value);
3677 + $option_label = esc_html($label);
3678 + }
3679 +
3680 + $this->add_render_attribute($option_id, 'value', $option_value);
3681 +
3682 +
3683 + if (!empty($item['field_value']) && in_array($option_value, explode(',', $item['field_value']))) {
3684 + $this->add_render_attribute($option_id, 'selected', 'selected');
3685 + } ?>
3686 + <option <?php $this->print_render_attribute_string($option_id); ?>>
3687 + <?php
3688 +
3689 + echo $option_label;
3690 + ?>
3691 + </option>
3692 + <?php endforeach; ?>
3693 + </select>
3694 + </div>
3695 + <?php
3696 +
3697 + $select = ob_get_clean();
3698 + return $select;
3699 + }
3700 +
3701 + protected function make_radio_checkbox_field($item, $item_index, $type)
3702 + {
3703 + $options = preg_split("/\\r\\n|\\r|\\n/", $item['field_options']);
3704 + $html = '';
3705 + if ($options) {
3706 + $html .= '<div class="king-addons-field-sub-group ' . esc_attr($item['css_classes']) . ' ' . esc_attr($item['inline_list']) . '">';
3707 + foreach ($options as $key => $option) {
3708 + $field_key = self::resolve_field_key($item);
3709 + $element_id = ($field_key ? esc_attr($field_key) : $item['field_type']) . $key;
3710 + $html_id = $this->get_attribute_id($item) . '-' . $key;
3711 + $option_label = $option;
3712 + $option_value = $option;
3713 +
3714 + if (false !== strpos($option, '|')) {
3715 + list($option_label, $option_value) = explode('|', $option);
3716 + }
3717 +
3718 + $this->add_render_attribute(
3719 + $element_id,
3720 + [
3721 + 'type' => $type,
3722 + 'value' => $option_value,
3723 + 'id' => $html_id,
3724 + 'name' => $this->get_attribute_name($item) . (('checkbox' === $type && count($options) > 1) ? '[]' : ''),
3725 + ]
3726 + );
3727 +
3728 + if (!empty($item['field_value']) && $option_value === $item['field_value']) {
3729 + $this->add_render_attribute($element_id, 'checked', 'checked');
3730 + }
3731 +
3732 + if ($item['required'] && ('radio' === $type || 'checkbox' === $type)) {
3733 + $this->add_required_attribute($element_id);
3734 + }
3735 +
3736 + $html .= '<span class="king-addons-form-field-option" data-key="form-field-' . esc_attr(self::resolve_field_key($item)) . '"><input ' . $this->get_render_attribute_string($element_id) . '> <label for="' . esc_attr($html_id) . '">' . esc_html($option_label) . '</label></span>';
3737 + }
3738 + $html .= '</div>';
3739 + }
3740 +
3741 + return $html;
3742 + }
3743 +
3744 + protected function form_fields_render_attributes($i, $instance, $item)
3745 + {
3746 + $this->add_render_attribute(
3747 + [
3748 + 'field-group' . $i => [
3749 + 'class' => [
3750 + 'king-addons-form-field-type-' . $item['field_type'],
3751 + 'king-addons-field-group',
3752 + 'king-addons-column',
3753 + 'king-addons-field-group-' . esc_attr(self::resolve_field_key($item)),
3754 + ],
3755 + ],
3756 + 'input' . $i => [
3757 + 'type' => ('acceptance' === $item['field_type']) ? 'checkbox' : (('upload' === $item['field_type']) ? 'file' : $item['field_type']),
3758 + 'name' => $this->get_attribute_name($item),
3759 + 'id' => $this->get_attribute_id($item),
3760 + 'class' => [
3761 + 'king-addons-form-field',
3762 + empty($item['css_classes']) ? '' : esc_attr($item['css_classes']),
3763 + ],
3764 + ],
3765 + 'label' . $i => [
3766 + 'for' => $this->get_attribute_id($item),
3767 + 'class' => 'king-addons-form-field-label',
3768 + ],
3769 + ]
3770 + );
3771 +
3772 + if (empty($item['width'])) {
3773 + $item['width'] = '100';
3774 + }
3775 +
3776 +
3777 + if ($item['allow_multiple']) {
3778 + $this->add_render_attribute('field-group' . $i, 'class', 'king-addons-form-field-type-' . $item['field_type'] . '-multiple');
3779 + }
3780 +
3781 +
3782 + $this->add_render_attribute('field-group' . $i, 'class', 'elementor-repeater-item-' . esc_attr($item['_id']));
3783 +
3784 + // Conditional logic travels to the browser as one data attribute; the
3785 + // script evaluates it on every change in the form.
3786 + if (class_exists('King_Addons\\Form_Conditional_Logic')) {
3787 + $condition = Form_Conditional_Logic::build($item);
3788 + if (null !== $condition) {
3789 + $this->add_render_attribute('field-group' . $i, 'data-ka-cond', wp_json_encode($condition));
3790 + }
3791 + }
3792 +
3793 +
3794 + if ('true' == $instance['show_placeholders'] && !Utils::is_empty($item['placeholder'])) {
3795 + $this->add_render_attribute('input' . $i, 'placeholder', $item['placeholder']);
3796 + }
3797 +
3798 + if (!empty($item['field_value'])) {
3799 + $this->add_render_attribute('input' . $i, 'value', $item['field_value']);
3800 + }
3801 +
3802 + if (!$instance['show_labels']) {
3803 + $this->add_render_attribute('label' . $i, 'class', 'king-addons-hidden-element');
3804 + }
3805 +
3806 + if (!empty($item['required'])) {
3807 + $class = 'king-addons-form-field-required';
3808 + if (!empty($instance['mark_required'])) {
3809 + $class .= ' king-addons-required-mark';
3810 + }
3811 + $this->add_render_attribute('field-group' . $i, 'class', $class);
3812 + $this->add_required_attribute('input' . $i);
3813 + }
3814 + }
3815 +
3816 + private function render_form_icon($settings)
3817 + { ?>
3818 + <span <?php echo $this->get_render_attribute_string('icon-align'); ?>>
3819 + <?php Icons_Manager::render_icon($settings['selected_button_icon'], ['aria-hidden' => 'true']); ?>
3820 + <?php if (empty($settings['button_text'])) : ?>
3821 + <span class="king-addons-hidden-element"><?php echo esc_html__('Submit', 'king-addons'); ?></span>
3822 + <?php endif; ?>
3823 + </span>
3824 + <?php }
3825 +
3826 + public function render_submit_button($instance)
3827 + {
3828 + ?>
3829 + <button type="submit" <?php echo $this->get_render_attribute_string('button'); ?>>
3830 + <span <?php echo $this->get_render_attribute_string('content-wrapper'); ?>>
3831 + <?php if (!empty($instance['selected_button_icon']) && 'left' === $instance['button_icon_align']) : ?>
3832 + <?php $this->render_form_icon($instance); ?>
3833 + <?php endif; ?>
3834 + <?php if (!empty($instance['button_text'])) : ?>
3835 + <span><?php $this->print_unescaped_setting('button_text'); ?></span>
3836 + <?php endif; ?>
3837 + <?php if (!empty($instance['selected_button_icon']) && 'right' === $instance['button_icon_align']) : ?>
3838 + <?php $this->render_form_icon($instance); ?>
3839 + <?php endif; ?>
3840 + </span>
3841 + <div class="king-addons-double-bounce king-addons-loader-hidden">
3842 + <div class="king-addons-child king-addons-double-bounce1"></div>
3843 + <div class="king-addons-child king-addons-double-bounce2"></div>
3844 + </div>
3845 + </button>
3846 + <?php
3847 + }
3848 +
3849 + protected function render()
3850 + {
3851 + global $post;
3852 + $instance = $this->get_settings_for_display();
3853 +
3854 + $form_fields_length = sizeof($instance['form_fields']);
3855 + $thisId = $this->get_id();
3856 +
3857 + update_option('king_addons_email_content_type_' . $this->get_id(), $instance['email_content_type']);
3858 + update_option('king_addons_email_to_' . $this->get_id(), $instance['email_to']);
3859 + update_option('king_addons_email_subject_' . $this->get_id(), $instance['email_subject']);
3860 + update_option('king_addons_email_fields_' . $this->get_id(), $instance['email_content']);
3861 + update_option('king_addons_cc_header_' . $this->get_id(), $instance['email_to_cc']);
3862 + update_option('king_addons_bcc_header_' . $this->get_id(), $instance['email_to_bcc']);
3863 + update_option('king_addons_email_from_' . $this->get_id(), $instance['email_from']);
3864 + update_option('king_addons_email_from_name_' . $this->get_id(), $instance['email_from_name']);
3865 + update_option('king_addons_reply_to_' . $this->get_id(), $instance['email_reply_to']);
3866 + update_option('king_addons_meta_keys_' . $this->get_id(), $instance['form_metadata']);
3867 + update_option('king_addons_referrer_' . $this->get_id(), home_url($_SERVER['REQUEST_URI']));
3868 + update_option('king_addons_referrer_title_' . $this->get_id(), get_the_title($post->ID));
3869 + update_option('king_addons_webhook_url_' . $this->get_id(), $instance['webhook_url']);
3870 +
3871 + if (class_exists('King_Addons\\Form_Integrations')) {
3872 + Form_Integrations::save_settings($this->get_id(), $instance);
3873 + }
3874 +
3875 + if (class_exists('King_Addons\\Form_Payments')) {
3876 + Form_Payments::save_settings(
3877 + $this->get_id(),
3878 + $instance,
3879 + isset($post->ID) ? (int) $post->ID : (int) get_the_ID()
3880 + );
3881 + }
3882 +
3883 + $partial_entries = false;
3884 + if (class_exists('King_Addons\\Form_Partial_Entries')) {
3885 + $partial_entries = 'yes' === ($instance['partial_entries'] ?? '')
3886 + && king_addons_freemius()->can_use_premium_code__premium_only();
3887 + Form_Partial_Entries::save_setting($this->get_id(), $partial_entries);
3888 + }
3889 +
3890 + // The submit actions are separate AJAX endpoints, so the challenge has
3891 + // to be checked there; they read it back by form id.
3892 + $spam_mode = 'none';
3893 + if (class_exists('King_Addons\\Form_Spam_Protection')) {
3894 + $spam_mode = (string) ($instance['spam_protection'] ?? 'none');
3895 + Form_Spam_Protection::save_mode($this->get_id(), $spam_mode);
3896 + $spam_mode = Form_Spam_Protection::get_mode($this->get_id());
3897 +
3898 + $spam_script = Form_Spam_Protection::script($spam_mode);
3899 + if (null !== $spam_script) {
3900 + wp_enqueue_script($spam_script['handle'], $spam_script['src'], [], null, true);
3901 + }
3902 + }
3903 +
3904 + $emailField = isset($instance['email_field']) ? $instance['email_field'] : '';
3905 + $firstNameField = isset($instance['first_name_field']) ? $instance['first_name_field'] : '';
3906 + $lastNameField = isset($instance['last_name_field']) ? $instance['last_name_field'] : '';
3907 + $addressField = isset($instance['address_field']) ? $instance['address_field'] : '';
3908 + $phoneField = isset($instance['phone_field']) ? $instance['phone_field'] : '';
3909 + $birthdayField = isset($instance['birthday_field']) ? $instance['birthday_field'] : '';
3910 + $groupId = isset($instance['mailchimp_groups']) ? $instance['mailchimp_groups'] : '';
3911 +
3912 + $fieldsArray = [
3913 + 'email_field' => $emailField,
3914 + 'first_name_field' => $firstNameField,
3915 + 'last_name_field' => $lastNameField,
3916 + 'address_field' => $addressField,
3917 + 'phone_field' => $phoneField,
3918 + 'birthday_field' => $birthdayField,
3919 + 'group_id' => $groupId
3920 + ];
3921 +
3922 + // The three original Pro actions are placeholders in the free build;
3923 + // Integrations is a real action, so it is only dropped when Pro is off.
3924 + $stripped_actions = ['pro-sb', 'pro-mch', 'pro-wh'];
3925 + if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
3926 + $stripped_actions[] = 'integrations';
3927 + $stripped_actions[] = 'payment';
3928 + }
3929 +
3930 + $submit_actions = array_filter($instance['submit_actions'], function ($value) use ($stripped_actions) {
3931 + return !in_array($value, $stripped_actions, true);
3932 + });
3933 + $submit_actions = array_values($submit_actions);
3934 +
3935 + $this->add_render_attribute(
3936 + [
3937 + 'wrapper' => [
3938 + 'class' => [
3939 + 'king-addons-form-fields-wrap',
3940 + 'king-addons-labels-' . $instance['label_position'],
3941 + ],
3942 + ],
3943 + 'submit-group' => [
3944 + 'class' => [
3945 + 'king-addons-field-group',
3946 + 'king-addons-step-buttons-wrap',
3947 + 'king-addons-column',
3948 + 'king-addons-form-field-type-submit',
3949 + ],
3950 + 'data-actions' => [
3951 + json_encode($submit_actions)
3952 + ],
3953 + 'data-redirect-url' => [
3954 + in_array('redirect', $submit_actions) ? esc_url($instance['redirect_to']) : ''
3955 + ],
3956 + 'data-partial-entries' => [
3957 + $partial_entries ? '1' : ''
3958 + ],
3959 + 'data-mailchimp-fields' => [
3960 + json_encode($fieldsArray)
3961 + ],
3962 + 'data-list-id' => [
3963 + isset($instance['mailchimp_audience']) ? esc_attr($instance['mailchimp_audience']) : ''
3964 + ]
3965 + ],
3966 + 'button' => [
3967 + 'class' => 'king-addons-button',
3968 + ],
3969 + 'icon-align' => [
3970 + 'class' => [
3971 + empty($instance['button_icon_align']) ? '' :
3972 + 'king-addons-align-icon-' . $instance['button_icon_align'],
3973 + 'elementor-button-icon',
3974 + ],
3975 + ],
3976 + ]
3977 + );
3978 +
3979 + if (!empty($instance['form_id'])) {
3980 + $this->add_render_attribute('form', 'id', $instance['form_id']);
3981 + }
3982 +
3983 + if (!empty($instance['form_name'])) {
3984 + $this->add_render_attribute('form', 'name', $instance['form_name']);
3985 + }
3986 +
3987 + $this->add_render_attribute('form', 'page', get_post()->post_title);
3988 + $this->add_render_attribute('form', 'page_id', get_post()->ID);
3989 +
3990 + if (!empty($instance['button_css_id'])) {
3991 + $this->add_render_attribute('button', 'id', $instance['button_css_id']);
3992 + }
3993 +
3994 + $referer_title = trim(wp_title('', false));
3995 +
3996 + if (!$referer_title && is_home()) {
3997 + $referer_title = get_option('blogname');
3998 + }
3999 +
4000 + ?>
4001 + <form class="king-addons-form" method="post" <?php echo $this->get_render_attribute_string('form'); ?>
4002 + novalidate>
4003 + <input type="hidden" name="post_id" value="<?php
4004 + echo get_the_ID();
4005 + ?>"/>
4006 + <input type="hidden" name="form_id" value="<?php echo esc_attr($this->get_id()); ?>"/>
4007 + <input type="hidden" name="referer_title" value="<?php echo esc_attr($referer_title); ?>"/>
4008 +
4009 + <?php if (is_singular()) {
4010 +
4011 + ?>
4012 + <input type="hidden" name="queried_id" value="<?php echo esc_attr(get_the_ID()); ?>"/>
4013 + <?php }
4014 +
4015 + $step_count1 = 0;
4016 + $step_exists = '';
4017 + $step_icon = [];
4018 + $step_label = [];
4019 + $step_sub_label = [];
4020 + $whitelist = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'odt', 'avi', 'ogg', 'm4a', 'mov', 'mp3', 'mp4', 'mpg', 'wav', 'wmv', 'txt'];
4021 +
4022 + foreach ($instance['form_fields'] as $key => $value) {
4023 + if ('king-addons-fb-step' === $value['field_type']) {
4024 + $step_exists = 'exists';
4025 + $step_count1++;
4026 +
4027 + ob_start();
4028 + Icons_Manager::render_icon($value['step_icon'], ['aria-hidden' => 'true']);
4029 + $step_icon[] = ob_get_clean();
4030 +
4031 + $step_label[] = '<span class="king-addons-fb-step-main-label">' . esc_html($value['field_label']) . '</span>';
4032 +
4033 + $step_sub_label[] = '<span class="king-addons-fb-step-sub-label">' . esc_html($value['field_sub_label']) . '</span>';
4034 + }
4035 + }
4036 +
4037 +
4038 + $step_wrap_class = 'yes' !== $instance['show_separator'] ? 'king-addons-fb-step-wrap king-addons-separator-off' : 'king-addons-fb-step-wrap';
4039 +
4040 + echo '<div class="' . esc_attr($step_wrap_class) . '">';
4041 + if ('progress_bar' == $instance['step_type']) {
4042 + echo '<div class="king-addons-fb-step-progress">';
4043 + echo '<div class="king-addons-fb-step-progress-fill"></div>';
4044 + echo '</div>';
4045 + } else {
4046 + $i = 0;
4047 +
4048 + while ($i < $step_count1) :
4049 +
4050 + if ('none' == $instance['step_type']) {
4051 + $step_html = '<span class="king-addons-fb-step"></span>';
4052 + } else if ('text' == $instance['step_type']) {
4053 + $step_html = '<span class="king-addons-fb-step">' . $step_label[$i] . $step_sub_label[$i] . '</span>';
4054 + } else if ('icon' == $instance['step_type']) {
4055 + $step_html = '<span class="king-addons-fb-step"><span class="king-addons-fb-step-content">' . $step_icon[$i] . '</span></span>';
4056 + } else if ('number' == $instance['step_type']) {
4057 + $step_html = '<span class="king-addons-fb-step"><span class="king-addons-fb-step-content"><span class="king-addons-fb-step-number">' . ($i + 1) . '</span></span></span>';
4058 + } else if ('number_text' == $instance['step_type']) {
4059 + $step_html = '<span class="king-addons-fb-step"><span class="king-addons-fb-step-content"><span class="king-addons-fb-step-number">' . ($i + 1) . '</span></span><span class="king-addons-fb-step-label">' . $step_label[$i] . $step_sub_label[$i] . '</span></span>';
4060 + } else if ('icon_text' == $instance['step_type']) {
4061 + $step_html = '<span class="king-addons-fb-step"><span class="king-addons-fb-step-content">' . $step_icon[$i] . '</span><span class="king-addons-fb-step-label">' . $step_label[$i] . $step_sub_label[$i] . '</span></span>';
4062 + }
4063 +
4064 + echo $step_html;
4065 +
4066 +
4067 + if ('yes' == $instance['show_separator']) {
4068 + echo '<span class="king-addons-fb-step-sep"></span>';
4069 + }
4070 +
4071 + $i++;
4072 + endwhile;
4073 + }
4074 + echo '</div>';
4075 + ?>
4076 +
4077 + <div <?php echo $this->get_render_attribute_string('wrapper'); ?>>
4078 + <?php
4079 +
4080 + $step_count = 0;
4081 + $field_count = 0;
4082 +
4083 + foreach ($instance['form_fields'] as $item_index => $item) :
4084 + if ('king-addons-fb-step' !== $item['field_type']) {
4085 + $field_count++;
4086 + if (!king_addons_freemius()->can_use_premium_code__premium_only() && 3 < $field_count) {
4087 + continue;
4088 + }
4089 + }
4090 +
4091 + $this->form_fields_render_attributes($item_index, $instance, $item);
4092 +
4093 + $print_label = !in_array($item['field_type'], ['hidden', 'html', 'king-addons-fb-step'], true);
4094 +
4095 + if ('king-addons-fb-step' === $item['field_type']) {
4096 + if (0 === $step_count) {
4097 + echo '<div class="king-addons-fb-step-tab king-addons-fb-step-tab-hidden">';
4098 + } else {
4099 + echo '<div class="king-addons-step-buttons-wrap">';
4100 + echo '<button type="button" class="king-addons-fb-step-prev">' . esc_html((string) $this->last_prev_btn_text) . '</button>';
4101 + echo '<button type="button" class="king-addons-fb-step-next">' . esc_html((string) $this->last_next_btn_text) . '</button>';
4102 + echo '</div>';
4103 + echo '</div>';
4104 + echo '<div class="king-addons-fb-step-tab king-addons-fb-step-tab-hidden">';
4105 + }
4106 + $this->last_next_btn_text = (isset($item['next_button_text']) && '' !== $item['next_button_text'])
4107 + ? $item['next_button_text']
4108 + : esc_html__('Next', 'king-addons');
4109 + $this->last_prev_btn_text = (isset($item['previous_button_text']) && '' !== $item['previous_button_text'])
4110 + ? $item['previous_button_text']
4111 + : esc_html__('Previous', 'king-addons');
4112 + $step_count++;
4113 + }
4114 +
4115 + ?>
4116 + <div <?php $this->print_render_attribute_string('field-group' . $item_index); ?>>
4117 + <?php
4118 + if ($print_label && $item['field_label']) {
4119 + ?>
4120 + <label <?php echo $this->get_render_attribute_string('label' . $item_index); ?>>
4121 + <?php
4122 + echo esc_html($item['field_label']); ?>
4123 + </label>
4124 + <?php
4125 + }
4126 +
4127 + switch ($item['field_type']) :
4128 + case 'html':
4129 + echo wp_kses_post(do_shortcode($item['field_html']));
4130 + break;
4131 + case 'textarea':
4132 +
4133 + echo $this->make_textarea_field($item, $item_index);
4134 + break;
4135 +
4136 + case 'select':
4137 +
4138 + echo $this->make_select_field($item, $item_index);
4139 + break;
4140 +
4141 + case 'radio':
4142 + case 'checkbox':
4143 +
4144 + echo $this->make_radio_checkbox_field($item, $item_index, $item['field_type']);
4145 + break;
4146 + case 'recaptcha-v3':
4147 + $recaptcha_v3_site_key = (string) get_option('king_addons_recaptcha_v3_site_key', '');
4148 + if ('' === $recaptcha_v3_site_key) {
4149 + if (current_user_can('manage_options')) {
4150 + echo '<p class="king-addons-form-captcha-notice">' . sprintf(
4151 + /* translators: 1: provider name, 2: settings URL. */
4152 + esc_html__('%1$s is selected but its keys are missing. Add them under %2$s.', 'king-addons'),
4153 + esc_html__('reCAPTCHA v3', 'king-addons'),
4154 + '<a href="' . esc_url(admin_url('admin.php?page=king-addons-settings')) . '">'
4155 + . esc_html__('King Addons settings', 'king-addons') . '</a>'
4156 + ) . '</p>';
4157 + }
4158 + } else {
4159 + echo '<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" data-site-key="' . esc_attr($recaptcha_v3_site_key) . '" />';
4160 + }
4161 + break;
4162 + case 'text':
4163 + case 'email':
4164 + case 'url':
4165 + case 'tel':
4166 + case 'password':
4167 + case 'hidden':
4168 + case 'search':
4169 + case 'number':
4170 + case 'date':
4171 + case 'time':
4172 + $this->add_render_attribute('input' . $item_index, 'class', 'king-addons-form-field-textual');
4173 + echo '<input size="1 "' . $this->get_render_attribute_string('input' . $item_index) . '>';
4174 + break;
4175 + case 'upload':
4176 + if ('yes' === $item['allow_multiple_upload']) {
4177 + $this->add_render_attribute('input' . $item_index, 'multiple', 'multiple');
4178 + }
4179 +
4180 + if (!empty($item['file_size'])) {
4181 + $this->add_render_attribute(
4182 + 'input' . $item_index,
4183 + [
4184 + 'data-maxfs' => $item['file_size'],
4185 + 'data-maxfs-notice' => esc_html__('File size is more than allowed.', 'king-addons'),
4186 + ]
4187 + );
4188 + }
4189 +
4190 + if (!empty($item['file_types'])) {
4191 +
4192 +
4193 + $file_types = explode(',', $item['file_types']);
4194 +
4195 +
4196 + $non_whitelisted = array_diff($file_types, $whitelist);
4197 +
4198 + if (!empty($non_whitelisted)) {
4199 + $item['file_types'] = 'jpg,jpeg,png,gif,pdf,doc,docx,ppt,pptx,odt,avi,ogg,m4a,mov,mp3,mp4,mpg,wav,wmv,txt';
4200 + if (is_admin()) {
4201 + echo '<p class="king-addons-file-type-error">' . esc_html__('Please remove unsupported file type(s):', 'king-addons') . '</p>';
4202 + echo '<ul class="king-addons-file-type-error-list">';
4203 + foreach ($non_whitelisted as $type) {
4204 + if (!empty($type)) {
4205 + echo '<li>' . esc_html($type) . '</li>';
4206 + }
4207 + }
4208 + echo '</ul>';
4209 + }
4210 + }
4211 +
4212 + $this->add_render_attribute(
4213 + 'input' . $item_index,
4214 + [
4215 + 'data-allft' => $item['file_types']
4216 + ]
4217 + );
4218 + }
4219 +
4220 + echo '<input size="1 "' . $this->get_render_attribute_string('input' . $item_index) . '>';
4221 + break;
4222 + case 'range':
4223 + $this->add_render_attribute('input' . $item_index, [
4224 + 'class' => 'king-addons-form-field-range',
4225 + 'min' => isset($item['range_min']) && '' !== $item['range_min'] ? (string) (float) $item['range_min'] : '0',
4226 + 'max' => isset($item['range_max']) && '' !== $item['range_max'] ? (string) (float) $item['range_max'] : '100',
4227 + 'step' => isset($item['range_step']) && '' !== $item['range_step'] && (float) $item['range_step'] > 0 ? (string) (float) $item['range_step'] : '1',
4228 + ]);
4229 + echo '<div class="king-addons-form-range">';
4230 + echo '<input ' . $this->get_render_attribute_string('input' . $item_index) . '>';
4231 + if ('yes' === ($item['range_show_value'] ?? 'yes')) {
4232 + echo '<output class="king-addons-form-range__value"></output>';
4233 + }
4234 + echo '</div>';
4235 + break;
4236 + case 'rating':
4237 + case 'signature':
4238 + case 'acceptance':
4239 + case 'calculation':
4240 + if (class_exists('King_Addons\\Form_Extra_Fields')) {
4241 + echo Form_Extra_Fields::render(
4242 + $item,
4243 + $this->get_attribute_name($item),
4244 + $this->get_attribute_id($item)
4245 + );
4246 + }
4247 + break;
4248 + case 'king-addons-fb-step':
4249 + echo '<input type="hidden" class="king-addons-fb-step-input" id="form-field-' . esc_attr(self::resolve_field_key($item)) . '" value="' . esc_attr($item['field_label']) . '">';
4250 + break;
4251 + default:
4252 + $field_type = $item['field_type'];
4253 + endswitch;
4254 + ?>
4255 + </div>
4256 + <?php
4257 + endforeach;
4258 +
4259 + if ('none' !== $spam_mode && class_exists('King_Addons\\Form_Spam_Protection')) {
4260 + echo Form_Spam_Protection::render($spam_mode); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
4261 + }
4262 +
4263 + echo '<div ' . $this->get_render_attribute_string('submit-group') . '>';
4264 + if ('exists' === $step_exists) {
4265 + if (2 <= $step_count) {
4266 + echo '<button type="button" class="king-addons-fb-step-prev">' . esc_html((string) $this->last_prev_btn_text) . '</button>';
4267 + }
4268 +
4269 + $this->render_submit_button($instance);
4270 +
4271 + echo '</div>';
4272 + } else {
4273 +
4274 + $this->render_submit_button($instance);
4275 +
4276 + }
4277 + echo '</div>'; ?>
4278 +
4279 + </div>
4280 + </form>
4281 + <?php
4282 + }
4283 +}