PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.39
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.39
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
king-addons / includes / widgets / Pricing_Slider / Pricing_Slider.php

Pricing_Slider.php in King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder 51.1.39, at includes/widgets/Pricing_Slider/Pricing_Slider.php

2,408 lines 88.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace King_Addons;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Widget_Base;
7 use Elementor\Group_Control_Typography;
8 use Elementor\Group_Control_Background;
9 use Elementor\Group_Control_Box_Shadow;
10 use Elementor\Repeater;
11
12 if (!defined('ABSPATH')) {
13 exit; // Exit if accessed directly.
14 }
15
16
17
18 class Pricing_Slider extends Widget_Base
19 {
20
21
22 public function get_name(): string
23 {
24 return 'king-addons-pricing-slider';
25 }
26
27 public function get_title(): string
28 {
29 return esc_html__('Pricing Slider', 'king-addons');
30 }
31
32 public function get_icon(): string
33 {
34 return 'king-addons-icon king-addons-pricing-slider';
35 }
36
37 public function get_style_depends(): array
38 {
39 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-pricing-slider-style'];
40 }
41
42 public function get_script_depends(): array
43 {
44 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-pricing-slider-script'];
45 }
46
47 public function get_categories(): array
48 {
49 return ['king-addons'];
50 }
51
52 public function get_keywords(): array
53 {
54 return [
55 'price',
56 'pricing',
57 'slider',
58 'pricing slider',
59 'features',
60 'range slider',
61 'slider pricing',
62 'king addons',
63 'king',
64 'addons',
65 'kingaddons',
66 'king-addons'
67 ];
68 }
69
70 public function get_custom_help_url()
71 {
72 return 'mailto:[email protected]?subject=Bug Report - King Addons&body=Please describe the issue';
73 }
74
75 protected function register_controls()
76 {
77 $this->start_controls_section(
78 'section_pricing_slider',
79 [
80 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Pricing Slider', 'king-addons'),
81 ]
82 );
83
84 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
85 $this->add_control(
86 'pricing_slider_pro_notice',
87 [
88 'type' => Controls_Manager::RAW_HTML,
89 'raw' => 'Advanced Formulas, Multiple Sliders, and WooCommerce Integration options are available in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-pricing-slider-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
90 'content_classes' => 'king-addons-pro-notice',
91 ]
92 );
93 }
94
95 $this->add_control(
96 'title',
97 [
98 'label' => esc_html__('Title', 'king-addons'),
99 'type' => Controls_Manager::TEXT,
100 'default' => esc_html__('Pricing Plans', 'king-addons'),
101 'placeholder' => esc_html__('Enter title', 'king-addons'),
102 'label_block' => true,
103 ]
104 );
105
106 $this->add_control(
107 'description',
108 [
109 'label' => esc_html__('Description', 'king-addons'),
110 'type' => Controls_Manager::TEXTAREA,
111 'default' => esc_html__('Choose the perfect plan for your needs', 'king-addons'),
112 'placeholder' => esc_html__('Enter description', 'king-addons'),
113 'rows' => 5,
114 ]
115 );
116
117 $this->end_controls_section();
118
119 $this->start_controls_section(
120 'section_pricing_slider_settings',
121 [
122 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Slider Settings', 'king-addons'),
123 ]
124 );
125
126 $this->add_control(
127 'min_value',
128 [
129 'label' => esc_html__('Minimum Value', 'king-addons'),
130 'type' => Controls_Manager::NUMBER,
131 'default' => 1,
132 'min' => 0,
133 'step' => 1,
134 ]
135 );
136
137 $this->add_control(
138 'max_value',
139 [
140 'label' => esc_html__('Maximum Value', 'king-addons'),
141 'type' => Controls_Manager::NUMBER,
142 'default' => 100,
143 'min' => 1,
144 'step' => 1,
145 ]
146 );
147
148 $this->add_control(
149 'default_value',
150 [
151 'label' => esc_html__('Default Value', 'king-addons'),
152 'type' => Controls_Manager::NUMBER,
153 'default' => 50,
154 'min' => 1,
155 'step' => 1,
156 ]
157 );
158
159 $this->add_control(
160 'step',
161 [
162 'label' => esc_html__('Step', 'king-addons'),
163 'type' => Controls_Manager::NUMBER,
164 'default' => 1,
165 'min' => 1,
166 'step' => 1,
167 ]
168 );
169
170 $this->add_control(
171 'min_label',
172 [
173 'label' => esc_html__('Minimum Label', 'king-addons'),
174 'type' => Controls_Manager::TEXT,
175 'default' => esc_html__('Basic', 'king-addons'),
176 'placeholder' => esc_html__('Enter label', 'king-addons'),
177 ]
178 );
179
180 $this->add_control(
181 'max_label',
182 [
183 'label' => esc_html__('Maximum Label', 'king-addons'),
184 'type' => Controls_Manager::TEXT,
185 'default' => esc_html__('Premium', 'king-addons'),
186 'placeholder' => esc_html__('Enter label', 'king-addons'),
187 ]
188 );
189
190 $this->add_control(
191 'price_prefix',
192 [
193 'label' => esc_html__('Price Prefix', 'king-addons'),
194 'type' => Controls_Manager::TEXT,
195 'default' => '',
196 'placeholder' => esc_html__('Before price', 'king-addons'),
197 ]
198 );
199
200 $this->add_control(
201 'price_suffix',
202 [
203 'label' => esc_html__('Price Suffix', 'king-addons'),
204 'type' => Controls_Manager::TEXT,
205 'default' => '',
206 'placeholder' => esc_html__('After price', 'king-addons'),
207 ]
208 );
209
210 $this->add_control(
211 'currency_symbol',
212 [
213 'label' => esc_html__('Currency Symbol', 'king-addons'),
214 'type' => Controls_Manager::SELECT,
215 'options' => [
216 '' => esc_html__('None', 'king-addons'),
217 'dollar' => '&#36; ' . esc_html__('Dollar', 'king-addons'),
218 'euro' => '&#128; ' . esc_html__('Euro', 'king-addons'),
219 'pound' => '&#163; ' . esc_html__('Pound Sterling', 'king-addons'),
220 'ruble' => '&#8381; ' . esc_html__('Ruble', 'king-addons'),
221 'shekel' => '&#8362; ' . esc_html__('Shekel', 'king-addons'),
222 'baht' => '&#3647; ' . esc_html__('Baht', 'king-addons'),
223 'yen' => '&#165; ' . esc_html__('Yen/Yuan', 'king-addons'),
224 'won' => '&#8361; ' . esc_html__('Won', 'king-addons'),
225 'rupee' => '&#8360; ' . esc_html__('Rupee', 'king-addons'),
226 'lira' => '&#8356; ' . esc_html__('Lira', 'king-addons'),
227 'peseta' => '&#8359; ' . esc_html__('Peseta', 'king-addons'),
228 'custom' => esc_html__('Custom', 'king-addons'),
229 ],
230 'default' => 'dollar',
231 ]
232 );
233
234 $this->add_control(
235 'currency_symbol_custom',
236 [
237 'label' => esc_html__('Custom Symbol', 'king-addons'),
238 'type' => Controls_Manager::TEXT,
239 'condition' => [
240 'currency_symbol' => 'custom',
241 ],
242 ]
243 );
244
245 $this->add_control(
246 'currency_position',
247 [
248 'label' => esc_html__('Currency Position', 'king-addons'),
249 'type' => Controls_Manager::SELECT,
250 'default' => 'before',
251 'options' => [
252 'before' => esc_html__('Before', 'king-addons'),
253 'after' => esc_html__('After', 'king-addons'),
254 ],
255 ]
256 );
257
258 $this->add_control(
259 'period',
260 [
261 'label' => esc_html__('Period', 'king-addons'),
262 'type' => Controls_Manager::TEXT,
263 'default' => esc_html__('/month', 'king-addons'),
264 'placeholder' => esc_html__('e.g. /month', 'king-addons'),
265 ]
266 );
267
268 $this->add_control(
269 'price_formula',
270 [
271 'label' => esc_html__('Price Formula', 'king-addons'),
272 'type' => Controls_Manager::SELECT,
273 'default' => 'linear',
274 'options' => [
275 'linear' => esc_html__('Linear (ax + b)', 'king-addons'),
276 'custom' => esc_html__('Custom Prices', 'king-addons'),
277 ],
278 'condition' => [
279 'advanced_formula_types' => 'linear',
280 ],
281 ]
282 );
283
284 $this->add_control(
285 'formula_a',
286 [
287 'label' => esc_html__('Coefficient (a)', 'king-addons'),
288 'type' => Controls_Manager::NUMBER,
289 'default' => 1,
290 'step' => 0.1,
291 'condition' => [
292 'price_formula' => 'linear',
293 ],
294 ]
295 );
296
297 $this->add_control(
298 'formula_b',
299 [
300 'label' => esc_html__('Constant (b)', 'king-addons'),
301 'type' => Controls_Manager::NUMBER,
302 'default' => 0,
303 'step' => 1,
304 'condition' => [
305 'price_formula' => 'linear',
306 ],
307 ]
308 );
309
310 $repeater = new Repeater();
311
312 $repeater->add_control(
313 'value',
314 [
315 'label' => esc_html__('Value', 'king-addons'),
316 'type' => Controls_Manager::NUMBER,
317 'default' => 1,
318 'min' => 0,
319 'step' => 1,
320 ]
321 );
322
323 $repeater->add_control(
324 'price',
325 [
326 'label' => esc_html__('Price', 'king-addons'),
327 'type' => Controls_Manager::NUMBER,
328 'default' => 10,
329 'min' => 0,
330 'step' => 0.01,
331 ]
332 );
333
334 $this->add_control(
335 'custom_prices',
336 [
337 'label' => esc_html__('Custom Prices', 'king-addons'),
338 'type' => Controls_Manager::REPEATER,
339 'fields' => $repeater->get_controls(),
340 'default' => [
341 [
342 'value' => 1,
343 'price' => 9.99,
344 ],
345 [
346 'value' => 50,
347 'price' => 49.99,
348 ],
349 [
350 'value' => 100,
351 'price' => 99.99,
352 ],
353 ],
354 'title_field' => '{{{ value }}} - {{{ price }}}',
355 'condition' => [
356 'price_formula' => 'custom',
357 ],
358 ]
359 );
360
361 $this->end_controls_section();
362
363 // Features Section
364 $this->start_controls_section(
365 'section_features',
366 [
367 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Features', 'king-addons'),
368 ]
369 );
370
371 $this->add_control(
372 'show_features',
373 [
374 'label' => esc_html__('Show Features', 'king-addons'),
375 'type' => Controls_Manager::SWITCHER,
376 'default' => 'yes',
377 'label_on' => esc_html__('Show', 'king-addons'),
378 'label_off' => esc_html__('Hide', 'king-addons'),
379 ]
380 );
381
382 $feature_repeater = new Repeater();
383
384 $feature_repeater->add_control(
385 'feature_text',
386 [
387 'label' => esc_html__('Feature Text', 'king-addons'),
388 'type' => Controls_Manager::TEXT,
389 'default' => esc_html__('Feature Item', 'king-addons'),
390 'label_block' => true,
391 ]
392 );
393
394 $feature_repeater->add_control(
395 'min_value_feature',
396 [
397 'label' => esc_html__('Minimum Value', 'king-addons'),
398 'type' => Controls_Manager::NUMBER,
399 'default' => 1,
400 'min' => 0,
401 'step' => 1,
402 'description' => esc_html__('Feature will be included starting from this value', 'king-addons'),
403 ]
404 );
405
406 $feature_repeater->add_control(
407 'feature_icon_included',
408 [
409 'label' => esc_html__('Included Icon', 'king-addons'),
410 'type' => Controls_Manager::ICONS,
411 'default' => [
412 'value' => 'fas fa-check',
413 'library' => 'fa-solid',
414 ],
415 ]
416 );
417
418 $feature_repeater->add_control(
419 'feature_icon_excluded',
420 [
421 'label' => esc_html__('Excluded Icon', 'king-addons'),
422 'type' => Controls_Manager::ICONS,
423 'default' => [
424 'value' => 'fas fa-times',
425 'library' => 'fa-solid',
426 ],
427 ]
428 );
429
430 $this->add_control(
431 'feature_list',
432 [
433 'label' => esc_html__('Features', 'king-addons'),
434 'type' => Controls_Manager::REPEATER,
435 'fields' => $feature_repeater->get_controls(),
436 'default' => [
437 [
438 'feature_text' => esc_html__('Basic Feature', 'king-addons'),
439 'min_value_feature' => 1,
440 ],
441 [
442 'feature_text' => esc_html__('Advanced Feature', 'king-addons'),
443 'min_value_feature' => 30,
444 ],
445 [
446 'feature_text' => esc_html__('Premium Feature', 'king-addons'),
447 'min_value_feature' => 60,
448 ],
449 ],
450 'title_field' => '{{{ feature_text }}}',
451 'condition' => [
452 'show_features' => 'yes',
453 ],
454 ]
455 );
456
457 $this->end_controls_section();
458
459 // Button Section
460 $this->start_controls_section(
461 'section_button',
462 [
463 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Button', 'king-addons'),
464 ]
465 );
466
467 $this->add_control(
468 'show_button',
469 [
470 'label' => esc_html__('Show Button', 'king-addons'),
471 'type' => Controls_Manager::SWITCHER,
472 'default' => 'yes',
473 'label_on' => esc_html__('Show', 'king-addons'),
474 'label_off' => esc_html__('Hide', 'king-addons'),
475 ]
476 );
477
478 $this->add_control(
479 'button_text',
480 [
481 'label' => esc_html__('Button Text', 'king-addons'),
482 'type' => Controls_Manager::TEXT,
483 'default' => esc_html__('Choose Plan', 'king-addons'),
484 'placeholder' => esc_html__('Enter button text', 'king-addons'),
485 'condition' => [
486 'show_button' => 'yes',
487 ],
488 ]
489 );
490
491 $this->add_control(
492 'button_url',
493 [
494 'label' => esc_html__('Button URL', 'king-addons'),
495 'type' => Controls_Manager::URL,
496 'placeholder' => esc_html__('https://your-link.com', 'king-addons'),
497 'default' => [
498 'url' => '#',
499 ],
500 'condition' => [
501 'show_button' => 'yes',
502 ],
503 ]
504 );
505
506 $this->end_controls_section();
507
508 // Style Tab
509 $this->start_controls_section(
510 'section_header_style',
511 [
512 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Header', 'king-addons'),
513 'tab' => Controls_Manager::TAB_STYLE,
514 ]
515 );
516
517 $this->add_control(
518 'title_color',
519 [
520 'label' => esc_html__('Title Color', 'king-addons'),
521 'type' => Controls_Manager::COLOR,
522 'default' => '#333333', // Updated default
523 'selectors' => [
524 '{{WRAPPER}} .king-addons-pricing-slider__title' => 'color: {{VALUE}};',
525 ],
526 ]
527 );
528
529 $this->add_group_control(
530 Group_Control_Typography::get_type(),
531 [
532 'name' => 'title_typography',
533 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__title',
534 // Example: Set a default size if desired
535 // 'fields_options' => [
536 // 'font_size' => ['default' => ['unit' => 'px', 'size' => 28]],
537 // ],
538 ]
539 );
540
541 $this->add_control(
542 'description_color',
543 [
544 'label' => esc_html__('Description Color', 'king-addons'),
545 'type' => Controls_Manager::COLOR,
546 'default' => '#777777', // Updated default
547 'selectors' => [
548 '{{WRAPPER}} .king-addons-pricing-slider__description' => 'color: {{VALUE}};',
549 ],
550 'separator' => 'before',
551 ]
552 );
553
554 $this->add_group_control(
555 Group_Control_Typography::get_type(),
556 [
557 'name' => 'description_typography',
558 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__description',
559 // Example: Set a default size if desired
560 // 'fields_options' => [
561 // 'font_size' => ['default' => ['unit' => 'px', 'size' => 16]],
562 // ],
563 ]
564 );
565
566 $this->add_responsive_control(
567 'header_spacing',
568 [
569 'label' => esc_html__('Spacing', 'king-addons'),
570 'type' => Controls_Manager::SLIDER,
571 'size_units' => ['px', 'em', 'rem'],
572 'range' => [
573 'px' => [
574 'min' => 0,
575 'max' => 100,
576 ],
577 ],
578 'default' => [ // Added default
579 'unit' => 'px',
580 'size' => 30,
581 ],
582 'selectors' => [
583 '{{WRAPPER}} .king-addons-pricing-slider__header' => 'margin-bottom: {{SIZE}}{{UNIT}};',
584 ],
585 ]
586 );
587
588 $this->add_control(
589 'header_alignment',
590 [
591 'label' => esc_html__('Alignment', 'king-addons'),
592 'type' => Controls_Manager::CHOOSE,
593 'options' => [
594 'left' => [
595 'title' => esc_html__('Left', 'king-addons'),
596 'icon' => 'eicon-text-align-left',
597 ],
598 'center' => [
599 'title' => esc_html__('Center', 'king-addons'),
600 'icon' => 'eicon-text-align-center',
601 ],
602 'right' => [
603 'title' => esc_html__('Right', 'king-addons'),
604 'icon' => 'eicon-text-align-right',
605 ],
606 ],
607 'default' => 'center',
608 'selectors' => [
609 '{{WRAPPER}} .king-addons-pricing-slider__header' => 'text-align: {{VALUE}};',
610 ],
611 ]
612 );
613
614 $this->end_controls_section();
615
616 // Slider Style Section
617 $this->start_controls_section(
618 'section_slider_style',
619 [
620 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Slider', 'king-addons'),
621 'tab' => Controls_Manager::TAB_STYLE,
622 ]
623 );
624
625 // Track Styles
626 $this->add_control(
627 'slider_track_heading',
628 [
629 'label' => esc_html__('Track (Line)', 'king-addons'),
630 'type' => Controls_Manager::HEADING,
631 ]
632 );
633
634 $this->add_control(
635 'slider_track_color',
636 [
637 'label' => esc_html__('Track Background Color', 'king-addons'),
638 'type' => Controls_Manager::COLOR,
639 'default' => '#e0e0e0', // Updated default
640 'selectors' => [
641 '{{WRAPPER}} .king-addons-pricing-slider__track' => 'background-color: {{VALUE}};',
642 ],
643 ]
644 );
645
646 $this->add_responsive_control(
647 'slider_track_height',
648 [
649 'label' => esc_html__('Track Height', 'king-addons'),
650 'type' => Controls_Manager::SLIDER,
651 'size_units' => ['px'],
652 'range' => [
653 'px' => [
654 'min' => 1,
655 'max' => 50,
656 ],
657 ],
658 'default' => [
659 'unit' => 'px',
660 'size' => 6,
661 ],
662 'selectors' => [
663 '{{WRAPPER}}' => '--slider-track-height: {{SIZE}}{{UNIT}};',
664 ],
665 'render_type' => 'template',
666 ]
667 );
668
669 // Progress Styles
670 $this->add_control(
671 'slider_progress_heading',
672 [
673 'label' => esc_html__('Progress (Active Track)', 'king-addons'),
674 'type' => Controls_Manager::HEADING,
675 'separator' => 'before',
676 ]
677 );
678
679 $this->add_control(
680 'slider_progress_color',
681 [
682 'label' => esc_html__('Progress Color', 'king-addons'),
683 'type' => Controls_Manager::COLOR,
684 'default' => '#0073e6', // Updated default
685 'selectors' => [
686 '{{WRAPPER}} .king-addons-pricing-slider__progress' => 'background-color: {{VALUE}};',
687 ],
688 ]
689 );
690
691 // Thumb Styles
692 $this->add_control(
693 'slider_thumb_heading',
694 [
695 'label' => esc_html__('Thumb (Handle)', 'king-addons'),
696 'type' => Controls_Manager::HEADING,
697 'separator' => 'before',
698 ]
699 );
700
701 $this->add_control(
702 'slider_thumb_color',
703 [
704 'label' => esc_html__('Thumb Color', 'king-addons'),
705 'type' => Controls_Manager::COLOR,
706 'default' => '#0073e6', // Updated default
707 'selectors' => [
708 '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb' => 'background-color: {{VALUE}};',
709 ],
710 ]
711 );
712
713 $this->add_responsive_control(
714 'slider_thumb_size',
715 [
716 'label' => esc_html__('Thumb Size', 'king-addons'),
717 'type' => Controls_Manager::SLIDER,
718 'size_units' => ['px'],
719 'range' => [
720 'px' => [
721 'min' => 10,
722 'max' => 100,
723 ],
724 ],
725 'default' => [
726 'unit' => 'px',
727 'size' => 24,
728 ],
729 'selectors' => [
730 '{{WRAPPER}}' => '--slider-thumb-size: {{SIZE}}{{UNIT}};',
731 ],
732 'render_type' => 'template',
733 ]
734 );
735
736 $this->add_control(
737 'slider_thumb_border_heading',
738 [
739 'label' => esc_html__('Thumb Border', 'king-addons'),
740 'type' => Controls_Manager::HEADING,
741 'separator' => 'before',
742 ]
743 );
744
745 $this->add_control(
746 'slider_thumb_border_color',
747 [
748 'label' => esc_html__('Border Color', 'king-addons'),
749 'type' => Controls_Manager::COLOR,
750 'default' => '#ffffff',
751 'selectors' => [
752 '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb' => 'border-color: {{VALUE}};',
753 ],
754 ]
755 );
756
757 $this->add_control(
758 'slider_thumb_border_width',
759 [
760 'label' => esc_html__('Border Width', 'king-addons'),
761 'type' => Controls_Manager::SLIDER,
762 'size_units' => ['px'],
763 'range' => [
764 'px' => [
765 'min' => 0,
766 'max' => 20,
767 ],
768 ],
769 'default' => [
770 'unit' => 'px',
771 'size' => 2,
772 ],
773 'selectors' => [
774 '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb' => 'border-width: {{SIZE}}{{UNIT}};',
775 ],
776 ]
777 );
778
779 $this->add_control(
780 'slider_thumb_border_style',
781 [
782 'label' => esc_html__('Border Style', 'king-addons'),
783 'type' => Controls_Manager::SELECT,
784 'options' => [
785 '' => esc_html__('Default', 'king-addons'),
786 'none' => esc_html__('None', 'king-addons'),
787 'solid' => esc_html__('Solid', 'king-addons'),
788 'dashed' => esc_html__('Dashed', 'king-addons'),
789 'dotted' => esc_html__('Dotted', 'king-addons'),
790 'double' => esc_html__('Double', 'king-addons'),
791 ],
792 'default' => 'solid',
793 'selectors' => [
794 '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb' => 'border-style: {{VALUE}};',
795 ],
796 ]
797 );
798
799 $this->add_responsive_control(
800 'slider_thumb_border_radius',
801 [
802 'label' => esc_html__('Border Radius', 'king-addons'),
803 'type' => Controls_Manager::DIMENSIONS,
804 'size_units' => ['px', '%'],
805 'default' => [
806 'top' => '50',
807 'right' => '50',
808 'bottom' => '50',
809 'left' => '50',
810 'unit' => '%',
811 'isLinked' => true,
812 ],
813 'selectors' => [
814 '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
815 ],
816 ]
817 );
818
819 // Shadow
820 $this->add_control(
821 'slider_thumb_shadow_heading',
822 [
823 'label' => esc_html__('Thumb Shadow', 'king-addons'),
824 'type' => Controls_Manager::HEADING,
825 'separator' => 'before',
826 ]
827 );
828
829 $this->add_control(
830 'slider_thumb_shadow',
831 [
832 'label' => esc_html__('Enable Shadow', 'king-addons'),
833 'type' => Controls_Manager::SWITCHER,
834 'label_on' => esc_html__('Yes', 'king-addons'),
835 'label_off' => esc_html__('No', 'king-addons'),
836 'return_value' => 'yes',
837 'default' => 'yes',
838 'prefix_class' => 'king-addons-slider-thumb-shadow-',
839 ]
840 );
841
842 $this->add_group_control(
843 Group_Control_Box_Shadow::get_type(),
844 [
845 'name' => 'slider_thumb_box_shadow',
846 'label' => esc_html__('Thumb Shadow Settings', 'king-addons'),
847 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__custom-thumb',
848 'condition' => [
849 'slider_thumb_shadow' => 'yes',
850 ],
851 ]
852 );
853
854 // Current Value Indicator Styles
855 $this->add_control(
856 'current_value_indicator_heading',
857 [
858 'label' => esc_html__('Current Value Indicator', 'king-addons'),
859 'type' => Controls_Manager::HEADING,
860 'separator' => 'before',
861 'description' => esc_html__('Style the numeric value displayed below the thumb.', 'king-addons'),
862 ]
863 );
864
865 $this->add_control(
866 'show_current_value_indicator',
867 [
868 'label' => esc_html__('Show Current Value', 'king-addons'),
869 'type' => Controls_Manager::SWITCHER,
870 'label_on' => esc_html__('Show', 'king-addons'),
871 'label_off' => esc_html__('Hide', 'king-addons'),
872 'return_value' => 'yes',
873 'default' => 'yes',
874 // We can use prefix_class later if needed, for now control via render()
875 ]
876 );
877
878 $this->add_control(
879 'current_value_bg_color',
880 [
881 'label' => esc_html__('Background Color', 'king-addons'),
882 'type' => Controls_Manager::COLOR,
883 'default' => 'transparent', // Updated default
884 'condition' => ['show_current_value_indicator' => 'yes'],
885 'selectors' => [
886 '{{WRAPPER}} .king-addons-pricing-slider__current-value' => 'background-color: {{VALUE}};',
887 ],
888 ]
889 );
890
891 $this->add_control(
892 'current_value_text_color',
893 [
894 'label' => esc_html__('Text Color', 'king-addons'),
895 'type' => Controls_Manager::COLOR,
896 'default' => '#333333', // Updated default
897 'condition' => ['show_current_value_indicator' => 'yes'],
898 'selectors' => [
899 '{{WRAPPER}} .king-addons-pricing-slider__current-value' => 'color: {{VALUE}};',
900 ],
901 ]
902 );
903
904 $this->add_responsive_control(
905 'current_value_padding',
906 [
907 'label' => esc_html__('Padding', 'king-addons'),
908 'type' => Controls_Manager::DIMENSIONS,
909 'size_units' => ['px', 'em'],
910 'default' => [ // Added default
911 'top' => '2',
912 'right' => '5',
913 'bottom' => '2',
914 'left' => '5',
915 'unit' => 'px',
916 'isLinked' => false,
917 ],
918 'condition' => ['show_current_value_indicator' => 'yes'],
919 'selectors' => [
920 '{{WRAPPER}} .king-addons-pricing-slider__current-value' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
921 ],
922 ]
923 );
924
925 $this->add_responsive_control(
926 'current_value_border_radius',
927 [
928 'label' => esc_html__('Border Radius', 'king-addons'),
929 'type' => Controls_Manager::SLIDER,
930 'size_units' => ['px', '%'],
931 'default' => [ // Added default
932 'unit' => 'px',
933 'size' => 3,
934 ],
935 'condition' => ['show_current_value_indicator' => 'yes'],
936 'range' => [
937 'px' => ['min' => 0, 'max' => 50],
938 '%' => ['min' => 0, 'max' => 50],
939 ],
940 'selectors' => [
941 '{{WRAPPER}} .king-addons-pricing-slider__current-value' => 'border-radius: {{SIZE}}{{UNIT}};',
942 ],
943 ]
944 );
945
946 $this->add_group_control(
947 Group_Control_Typography::get_type(),
948 [
949 'name' => 'current_value_typography',
950 'label' => esc_html__('Typography', 'king-addons'),
951 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__current-value',
952 'condition' => ['show_current_value_indicator' => 'yes'],
953 'fields_options' => [ // Added default
954 'font_weight' => ['default' => '600'],
955 ],
956 ]
957 );
958
959 // Range Values Styles
960 $this->add_control(
961 'range_values_indicator_heading',
962 [
963 'label' => esc_html__('Range Min/Max Values', 'king-addons'),
964 'type' => Controls_Manager::HEADING,
965 'separator' => 'before',
966 ]
967 );
968
969 $this->add_control(
970 'range_values_text_color',
971 [
972 'label' => esc_html__('Text Color', 'king-addons'),
973 'type' => Controls_Manager::COLOR,
974 'default' => '#555555', // Updated default
975 'selectors' => [
976 '{{WRAPPER}} .king-addons-pricing-slider__range-min-value, {{WRAPPER}} .king-addons-pricing-slider__range-max-value' => 'color: {{VALUE}};',
977 ],
978 ]
979 );
980
981 $this->add_group_control(
982 Group_Control_Typography::get_type(),
983 [
984 'name' => 'range_values_typography',
985 'label' => esc_html__('Typography', 'king-addons'),
986 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__range-min-value, {{WRAPPER}} .king-addons-pricing-slider__range-max-value',
987 ]
988 );
989
990 $this->add_control(
991 'range_values_bg_color',
992 [
993 'label' => esc_html__('Background Color', 'king-addons'),
994 'type' => Controls_Manager::COLOR,
995 'selectors' => [
996 '{{WRAPPER}} .king-addons-pricing-slider__range-min-value, {{WRAPPER}} .king-addons-pricing-slider__range-max-value' => 'background-color: {{VALUE}};',
997 ],
998 ]
999 );
1000
1001 $this->add_responsive_control(
1002 'range_values_padding',
1003 [
1004 'label' => esc_html__('Padding', 'king-addons'),
1005 'type' => Controls_Manager::DIMENSIONS,
1006 'size_units' => ['px', 'em'],
1007 'selectors' => [
1008 '{{WRAPPER}} .king-addons-pricing-slider__range-min-value, {{WRAPPER}} .king-addons-pricing-slider__range-max-value' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1009 ],
1010 ]
1011 );
1012
1013 $this->add_responsive_control(
1014 'range_values_border_radius',
1015 [
1016 'label' => esc_html__('Border Radius', 'king-addons'),
1017 'type' => Controls_Manager::SLIDER,
1018 'size_units' => ['px', '%'],
1019 'range' => [
1020 'px' => ['min' => 0, 'max' => 50],
1021 '%' => ['min' => 0, 'max' => 50],
1022 ],
1023 'selectors' => [
1024 '{{WRAPPER}} .king-addons-pricing-slider__range-min-value, {{WRAPPER}} .king-addons-pricing-slider__range-max-value' => 'border-radius: {{SIZE}}{{UNIT}};',
1025 ],
1026 ]
1027 );
1028
1029 $this->add_responsive_control(
1030 'range_values_margin',
1031 [
1032 'label' => esc_html__('Margin (Around Container)', 'king-addons'),
1033 'type' => Controls_Manager::DIMENSIONS,
1034 'size_units' => ['px', 'em', '%'],
1035 'default' => [
1036 'top' => 5, // Keep top margin
1037 'right' => 0,
1038 'bottom' => 0,
1039 'left' => 0,
1040 'unit' => 'px',
1041 ],
1042 'selectors' => [
1043 '{{WRAPPER}} .king-addons-pricing-slider__range-values' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1044 ],
1045 'separator' => 'before',
1046 ]
1047 );
1048
1049 $this->end_controls_section();
1050
1051 // Style Tab
1052 $this->start_controls_section(
1053 'section_control_group_style',
1054 [
1055 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Control Groups', 'king-addons'),
1056 'tab' => Controls_Manager::TAB_STYLE,
1057 ]
1058 );
1059
1060 $this->add_control(
1061 'control_group_background_color',
1062 [
1063 'label' => esc_html__('Background Color', 'king-addons'),
1064 'type' => Controls_Manager::COLOR,
1065 'default' => '#0000000A', // Updated default
1066 'selectors' => [
1067 '{{WRAPPER}} .king-addons-pricing-slider__control-group' => 'background-color: {{VALUE}};',
1068 ],
1069 ]
1070 );
1071
1072 $this->add_control(
1073 'control_group_border_radius',
1074 [
1075 'label' => esc_html__('Border Radius', 'king-addons'),
1076 'type' => Controls_Manager::SLIDER,
1077 'size_units' => ['px', '%'],
1078 'range' => [
1079 'px' => [
1080 'min' => 0,
1081 'max' => 50,
1082 ],
1083 '%' => [
1084 'min' => 0,
1085 'max' => 100,
1086 ],
1087 ],
1088 'default' => [
1089 'unit' => 'px',
1090 'size' => 6,
1091 ],
1092 'selectors' => [
1093 '{{WRAPPER}} .king-addons-pricing-slider__control-group' => 'border-radius: {{SIZE}}{{UNIT}};',
1094 ],
1095 ]
1096 );
1097
1098 $this->add_responsive_control(
1099 'control_group_padding',
1100 [
1101 'label' => esc_html__('Padding', 'king-addons'),
1102 'type' => Controls_Manager::DIMENSIONS,
1103 'size_units' => ['px', 'em', '%'],
1104 'default' => [
1105 'top' => 10,
1106 'right' => 10,
1107 'bottom' => 10,
1108 'left' => 10,
1109 'unit' => 'px',
1110 ],
1111 'selectors' => [
1112 '{{WRAPPER}} .king-addons-pricing-slider__control-group' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1113 ],
1114 ]
1115 );
1116
1117 $this->add_responsive_control(
1118 'control_group_margin',
1119 [
1120 'label' => esc_html__('Margin', 'king-addons'),
1121 'type' => Controls_Manager::DIMENSIONS,
1122 'size_units' => ['px', 'em', '%'],
1123 'default' => [
1124 'top' => 0,
1125 'right' => 0,
1126 'bottom' => 25, // Updated default
1127 'left' => 0,
1128 'unit' => 'px',
1129 ],
1130 'selectors' => [
1131 '{{WRAPPER}} .king-addons-pricing-slider__control-group' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1132 ],
1133 ]
1134 );
1135
1136 $this->end_controls_section();
1137
1138 // Price Style
1139 $this->start_controls_section(
1140 'section_price_style',
1141 [
1142 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Price', 'king-addons'),
1143 'tab' => Controls_Manager::TAB_STYLE,
1144 ]
1145 );
1146
1147 $this->add_control(
1148 'price_color',
1149 [
1150 'label' => esc_html__('Price Color', 'king-addons'),
1151 'type' => Controls_Manager::COLOR,
1152 'default' => '#0073e6', // Updated default
1153 'selectors' => [
1154 '{{WRAPPER}} .king-addons-pricing-slider__price' => 'color: {{VALUE}};',
1155 ],
1156 ]
1157 );
1158
1159 $this->add_group_control(
1160 Group_Control_Typography::get_type(),
1161 [
1162 'name' => 'price_typography',
1163 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__price',
1164 'fields_options' => [ // Added default
1165 'font_size' => ['default' => ['unit' => 'px', 'size' => 48]],
1166 'font_weight' => ['default' => '700'],
1167 ],
1168 ]
1169 );
1170
1171 $this->add_control(
1172 'currency_color',
1173 [
1174 'label' => esc_html__('Currency Color', 'king-addons'),
1175 'type' => Controls_Manager::COLOR,
1176 'default' => '#0073e6', // Updated default
1177 'selectors' => [
1178 '{{WRAPPER}} .king-addons-pricing-slider__currency' => 'color: {{VALUE}};',
1179 ],
1180 'separator' => 'before',
1181 ]
1182 );
1183
1184 $this->add_group_control(
1185 Group_Control_Typography::get_type(),
1186 [
1187 'name' => 'currency_typography',
1188 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__currency',
1189 ]
1190 );
1191
1192 $this->add_control(
1193 'period_color',
1194 [
1195 'label' => esc_html__('Period Color', 'king-addons'),
1196 'type' => Controls_Manager::COLOR,
1197 'default' => '#777777', // Updated default
1198 'selectors' => [
1199 '{{WRAPPER}} .king-addons-pricing-slider__period' => 'color: {{VALUE}};',
1200 ],
1201 'separator' => 'before',
1202 ]
1203 );
1204
1205 $this->add_group_control(
1206 Group_Control_Typography::get_type(),
1207 [
1208 'name' => 'period_typography',
1209 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__period',
1210 'fields_options' => [ // Added default
1211 'font_size' => ['default' => ['unit' => 'px', 'size' => 16]],
1212 'font_weight' => ['default' => '400'],
1213 ],
1214 ]
1215 );
1216
1217 $this->add_responsive_control(
1218 'price_spacing',
1219 [
1220 'label' => esc_html__('Spacing', 'king-addons'),
1221 'type' => Controls_Manager::SLIDER,
1222 'size_units' => ['px', 'em', 'rem'],
1223 'range' => [
1224 'px' => [
1225 'min' => 0,
1226 'max' => 100,
1227 ],
1228 ],
1229 'default' => [ // Added default
1230 'unit' => 'px',
1231 'size' => 30,
1232 ],
1233 'selectors' => [
1234 '{{WRAPPER}} .king-addons-pricing-slider__display' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1235 ],
1236 ]
1237 );
1238
1239 $this->add_control(
1240 'price_alignment',
1241 [
1242 'label' => esc_html__('Alignment', 'king-addons'),
1243 'type' => Controls_Manager::CHOOSE,
1244 'options' => [
1245 'left' => [
1246 'title' => esc_html__('Left', 'king-addons'),
1247 'icon' => 'eicon-text-align-left',
1248 ],
1249 'center' => [
1250 'title' => esc_html__('Center', 'king-addons'),
1251 'icon' => 'eicon-text-align-center',
1252 ],
1253 'right' => [
1254 'title' => esc_html__('Right', 'king-addons'),
1255 'icon' => 'eicon-text-align-right',
1256 ],
1257 ],
1258 'default' => 'center',
1259 'selectors' => [
1260 '{{WRAPPER}} .king-addons-pricing-slider__display' => 'text-align: {{VALUE}};',
1261 ],
1262 ]
1263 );
1264
1265 $this->end_controls_section();
1266
1267 // Features Style
1268 $this->start_controls_section(
1269 'section_features_style',
1270 [
1271 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Features', 'king-addons'),
1272 'tab' => Controls_Manager::TAB_STYLE,
1273 'condition' => [
1274 'show_features' => 'yes',
1275 ],
1276 ]
1277 );
1278
1279 $this->add_control(
1280 'feature_item_color',
1281 [
1282 'label' => esc_html__('Text Color', 'king-addons'),
1283 'type' => Controls_Manager::COLOR,
1284 'default' => '#333333', // Updated default
1285 'selectors' => [
1286 '{{WRAPPER}} .king-addons-pricing-slider__feature-item' => 'color: {{VALUE}};',
1287 ],
1288 ]
1289 );
1290
1291 $this->add_group_control(
1292 Group_Control_Typography::get_type(),
1293 [
1294 'name' => 'feature_typography',
1295 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__feature-item',
1296 ]
1297 );
1298
1299 $this->add_control(
1300 'feature_included_color',
1301 [
1302 'label' => esc_html__('Included Icon Color', 'king-addons'),
1303 'type' => Controls_Manager::COLOR,
1304 'default' => '#28a745', // Updated default (Green)
1305 'selectors' => [
1306 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-included .king-addons-pricing-slider__feature-included i' => 'color: {{VALUE}};',
1307 ],
1308 'separator' => 'before',
1309 ]
1310 );
1311
1312 $this->add_control(
1313 'feature_excluded_color',
1314 [
1315 'label' => esc_html__('Excluded Icon Color', 'king-addons'),
1316 'type' => Controls_Manager::COLOR,
1317 'default' => '#aaaaaa', // Updated default (Grey)
1318 'selectors' => [
1319 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-excluded .king-addons-pricing-slider__feature-excluded i' => 'color: {{VALUE}};',
1320 ],
1321 ]
1322 );
1323
1324 $this->add_control(
1325 'feature_item_bg_color',
1326 [
1327 'label' => esc_html__('Default Background Color', 'king-addons'),
1328 'type' => Controls_Manager::COLOR,
1329 'default' => 'transparent', // Updated default
1330 'selectors' => [
1331 '{{WRAPPER}} .king-addons-pricing-slider__feature-item' => 'background-color: {{VALUE}};',
1332 ],
1333 'separator' => 'before',
1334 'description' => esc_html__('Default background for all feature items. Specific backgrounds can be set below.', 'king-addons'),
1335 ]
1336 );
1337
1338 // Included Feature Styles Heading
1339 $this->add_control(
1340 'feature_included_style_heading',
1341 [
1342 'label' => esc_html__('Included Feature Styles', 'king-addons'),
1343 'type' => Controls_Manager::HEADING,
1344 'separator' => 'before',
1345 ]
1346 );
1347
1348 $this->add_control(
1349 'feature_item_bg_color_included',
1350 [
1351 'label' => esc_html__('Background Color (Included)', 'king-addons'),
1352 'type' => Controls_Manager::COLOR,
1353 'default' => 'transparent', // Updated default
1354 'selectors' => [
1355 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-included' => 'background-color: {{VALUE}};',
1356 ],
1357 ]
1358 );
1359
1360 $this->add_control(
1361 'feature_text_color_included',
1362 [
1363 'label' => esc_html__('Text Color (Included)', 'king-addons'),
1364 'type' => Controls_Manager::COLOR,
1365 'default' => '#333333', // Updated default
1366 'selectors' => [
1367 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-included .king-addons-pricing-slider__feature-text' => 'color: {{VALUE}};',
1368 ],
1369 ]
1370 );
1371
1372 $this->add_group_control(
1373 Group_Control_Typography::get_type(),
1374 [
1375 'name' => 'feature_typography_included',
1376 'label' => esc_html__('Typography (Included)', 'king-addons'),
1377 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-included .king-addons-pricing-slider__feature-text',
1378 ]
1379 );
1380
1381 // Excluded Feature Styles Heading
1382 $this->add_control(
1383 'feature_excluded_style_heading',
1384 [
1385 'label' => esc_html__('Excluded Feature Styles', 'king-addons'),
1386 'type' => Controls_Manager::HEADING,
1387 'separator' => 'before',
1388 ]
1389 );
1390
1391 $this->add_control(
1392 'feature_item_bg_color_excluded',
1393 [
1394 'label' => esc_html__('Background Color (Excluded)', 'king-addons'),
1395 'type' => Controls_Manager::COLOR,
1396 'default' => 'transparent', // Updated default
1397 'selectors' => [
1398 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-excluded' => 'background-color: {{VALUE}};',
1399 ],
1400 ]
1401 );
1402
1403 $this->add_control(
1404 'feature_text_color_excluded',
1405 [
1406 'label' => esc_html__('Text Color (Excluded)', 'king-addons'),
1407 'type' => Controls_Manager::COLOR,
1408 'default' => '#999999', // Updated default
1409 'selectors' => [
1410 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-excluded .king-addons-pricing-slider__feature-text' => 'color: {{VALUE}};',
1411 ],
1412 ]
1413 );
1414
1415 $this->add_group_control(
1416 Group_Control_Typography::get_type(),
1417 [
1418 'name' => 'feature_typography_excluded',
1419 'label' => esc_html__('Typography (Excluded)', 'king-addons'),
1420 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-excluded .king-addons-pricing-slider__feature-text',
1421 ]
1422 );
1423
1424 // Feature Item Border & Shadow Heading
1425 $this->add_control(
1426 'feature_border_shadow_heading',
1427 [
1428 'label' => esc_html__('Feature Item Border & Shadow', 'king-addons'),
1429 'type' => Controls_Manager::HEADING,
1430 'separator' => 'before',
1431 ]
1432 );
1433
1434 $this->add_group_control(
1435 \Elementor\Group_Control_Border::get_type(),
1436 [
1437 'name' => 'feature_border',
1438 'label' => esc_html__('Border (Default)', 'king-addons'),
1439 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__feature-item',
1440 ]
1441 );
1442
1443 $this->add_control(
1444 'feature_border_color_included',
1445 [
1446 'label' => esc_html__('Border Color (Included)', 'king-addons'),
1447 'type' => Controls_Manager::COLOR,
1448 'selectors' => [
1449 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-included' => 'border-color: {{VALUE}};',
1450 ],
1451 'condition' => [
1452 'feature_border_border!' => '', // Only show if a border type is selected
1453 ],
1454 ]
1455 );
1456
1457 $this->add_control(
1458 'feature_border_color_excluded',
1459 [
1460 'label' => esc_html__('Border Color (Excluded)', 'king-addons'),
1461 'type' => Controls_Manager::COLOR,
1462 'selectors' => [
1463 '{{WRAPPER}} .king-addons-pricing-slider__feature-item.king-addons-feature-excluded' => 'border-color: {{VALUE}};',
1464 ],
1465 'condition' => [
1466 'feature_border_border!' => '', // Only show if a border type is selected
1467 ],
1468 ]
1469 );
1470
1471 $this->add_responsive_control(
1472 'feature_border_radius',
1473 [
1474 'label' => esc_html__('Border Radius', 'king-addons'),
1475 'type' => Controls_Manager::DIMENSIONS,
1476 'size_units' => ['px', '%', 'em'],
1477 'selectors' => [
1478 '{{WRAPPER}} .king-addons-pricing-slider__feature-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1479 ],
1480 'separator' => 'after', // Add separator after border controls
1481 ]
1482 );
1483
1484 $this->add_responsive_control(
1485 'feature_spacing',
1486 [
1487 'label' => esc_html__('Spacing Between', 'king-addons'),
1488 'type' => Controls_Manager::SLIDER,
1489 'size_units' => ['px', 'em', 'rem'],
1490 'range' => [
1491 'px' => [
1492 'min' => 0,
1493 'max' => 50,
1494 ],
1495 ],
1496 'default' => [ // Added default
1497 'unit' => 'px',
1498 'size' => 10,
1499 ],
1500 'selectors' => [
1501 '{{WRAPPER}} .king-addons-pricing-slider__feature-item:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1502 ],
1503 ]
1504 );
1505
1506 $this->add_responsive_control(
1507 'feature_padding',
1508 [
1509 'label' => esc_html__('Padding', 'king-addons'),
1510 'type' => Controls_Manager::DIMENSIONS,
1511 'size_units' => ['px', 'em', '%'],
1512 'default' => [ // Added default
1513 'top' => '5',
1514 'right' => '0',
1515 'bottom' => '5',
1516 'left' => '0',
1517 'unit' => 'px',
1518 'isLinked' => false,
1519 ],
1520 'selectors' => [
1521 '{{WRAPPER}} .king-addons-pricing-slider__feature-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1522 ],
1523 ]
1524 );
1525
1526 $this->add_group_control(
1527 Group_Control_Box_Shadow::get_type(),
1528 [
1529 'name' => 'feature_box_shadow',
1530 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__feature-item',
1531 ]
1532 );
1533
1534 $this->end_controls_section();
1535
1536 // Button Style
1537 $this->start_controls_section(
1538 'section_button_style',
1539 [
1540 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Button', 'king-addons'),
1541 'tab' => Controls_Manager::TAB_STYLE,
1542 'condition' => [
1543 'show_button' => 'yes',
1544 ],
1545 ]
1546 );
1547
1548 $this->start_controls_tabs('button_style_tabs');
1549
1550 $this->start_controls_tab(
1551 'button_normal_tab',
1552 [
1553 'label' => esc_html__('Normal', 'king-addons'),
1554 ]
1555 );
1556
1557 $this->add_control(
1558 'button_text_color',
1559 [
1560 'label' => esc_html__('Text Color', 'king-addons'),
1561 'type' => Controls_Manager::COLOR,
1562 'default' => '#ffffff', // Updated default
1563 'selectors' => [
1564 '{{WRAPPER}} .king-addons-pricing-slider__button, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart' => 'color: {{VALUE}};',
1565 ],
1566 ]
1567 );
1568
1569 $this->add_control(
1570 'button_background_color',
1571 [
1572 'label' => esc_html__('Background Color', 'king-addons'),
1573 'type' => Controls_Manager::COLOR,
1574 'default' => '#0073e6', // Updated default
1575 'selectors' => [
1576 '{{WRAPPER}} .king-addons-pricing-slider__button, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart' => 'background-color: {{VALUE}};',
1577 ],
1578 ]
1579 );
1580
1581 $this->end_controls_tab();
1582
1583 $this->start_controls_tab(
1584 'button_hover_tab',
1585 [
1586 'label' => esc_html__('Hover', 'king-addons'),
1587 ]
1588 );
1589
1590 $this->add_control(
1591 'button_hover_text_color',
1592 [
1593 'label' => esc_html__('Text Color', 'king-addons'),
1594 'type' => Controls_Manager::COLOR,
1595 'default' => '#ffffff', // Updated default
1596 'selectors' => [
1597 '{{WRAPPER}} .king-addons-pricing-slider__button:hover, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart:hover' => 'color: {{VALUE}};',
1598 ],
1599 ]
1600 );
1601
1602 $this->add_control(
1603 'button_hover_background_color',
1604 [
1605 'label' => esc_html__('Background Color', 'king-addons'),
1606 'type' => Controls_Manager::COLOR,
1607 'default' => '#005bb5', // Updated default (darker blue)
1608 'selectors' => [
1609 '{{WRAPPER}} .king-addons-pricing-slider__button:hover, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart:hover' => 'background-color: {{VALUE}};',
1610 ],
1611 ]
1612 );
1613
1614 $this->add_control(
1615 'button_hover_border_color',
1616 [
1617 'label' => esc_html__('Border Color', 'king-addons'),
1618 'type' => Controls_Manager::COLOR,
1619 'selectors' => [
1620 '{{WRAPPER}} .king-addons-pricing-slider__button:hover, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart:hover' => 'border-color: {{VALUE}};',
1621 ],
1622 'condition' => [
1623 'button_border_border!' => '',
1624 ],
1625 ]
1626 );
1627
1628 $this->add_control(
1629 'button_hover_animation',
1630 [
1631 'label' => esc_html__('Hover Animation', 'king-addons'),
1632 'type' => Controls_Manager::HOVER_ANIMATION,
1633 // Apply animation class to both buttons? Might need JS intervention if using Add to Cart
1634 ]
1635 );
1636
1637 $this->end_controls_tab();
1638
1639 $this->end_controls_tabs();
1640
1641 $this->add_group_control(
1642 Group_Control_Typography::get_type(),
1643 [
1644 'name' => 'button_typography',
1645 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__button, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart',
1646 'separator' => 'before',
1647 'fields_options' => [ // Added default
1648 'font_weight' => ['default' => '600'],
1649 ],
1650 ]
1651 );
1652
1653 $this->add_responsive_control(
1654 'button_padding',
1655 [
1656 'label' => esc_html__('Padding', 'king-addons'),
1657 'type' => Controls_Manager::DIMENSIONS,
1658 'size_units' => ['px', 'em', '%'],
1659 'default' => [ // Added default
1660 'top' => '12',
1661 'right' => '24',
1662 'bottom' => '12',
1663 'left' => '24',
1664 'unit' => 'px',
1665 'isLinked' => false,
1666 ],
1667 'selectors' => [
1668 '{{WRAPPER}} .king-addons-pricing-slider__button, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1669 ],
1670 ]
1671 );
1672
1673 $this->add_group_control(
1674 Group_Control_Box_Shadow::get_type(),
1675 [
1676 'name' => 'button_box_shadow',
1677 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__button, {{WRAPPER}} .king-addons-pricing-slider__add-to-cart',
1678 ]
1679 );
1680
1681 $this->add_control(
1682 'button_alignment',
1683 [
1684 'label' => esc_html__('Alignment', 'king-addons'),
1685 'type' => Controls_Manager::CHOOSE,
1686 'options' => [
1687 'left' => [
1688 'title' => esc_html__('Left', 'king-addons'),
1689 'icon' => 'eicon-text-align-left',
1690 ],
1691 'center' => [
1692 'title' => esc_html__('Center', 'king-addons'),
1693 'icon' => 'eicon-text-align-center',
1694 ],
1695 'right' => [
1696 'title' => esc_html__('Right', 'king-addons'),
1697 'icon' => 'eicon-text-align-right',
1698 ],
1699 ],
1700 'default' => 'center',
1701 'selectors' => [
1702 '{{WRAPPER}} .king-addons-pricing-slider__actions' => 'text-align: {{VALUE}};',
1703 ],
1704 ]
1705 );
1706
1707 $this->end_controls_section();
1708
1709 // Range Labels Style Section
1710 $this->start_controls_section(
1711 'section_range_labels_style',
1712 [
1713 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Range Labels (Min/Max)', 'king-addons'),
1714 'tab' => Controls_Manager::TAB_STYLE,
1715 ]
1716 );
1717
1718 // Minimum Label Styles
1719 $this->add_control(
1720 'min_label_style_heading',
1721 [
1722 'label' => esc_html__('Minimum Label Style', 'king-addons'),
1723 'type' => Controls_Manager::HEADING,
1724 ]
1725 );
1726
1727 $this->add_control(
1728 'min_label_text_color',
1729 [
1730 'label' => esc_html__('Text Color', 'king-addons'),
1731 'type' => Controls_Manager::COLOR,
1732 'default' => '#555555', // Updated default
1733 'selectors' => [
1734 '{{WRAPPER}} .king-addons-pricing-slider__range-min' => 'color: {{VALUE}};',
1735 ],
1736 ]
1737 );
1738
1739 $this->add_group_control(
1740 Group_Control_Typography::get_type(),
1741 [
1742 'name' => 'min_label_typography',
1743 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__range-min',
1744 ]
1745 );
1746
1747 $this->add_control(
1748 'min_label_bg_color',
1749 [
1750 'label' => esc_html__('Background Color', 'king-addons'),
1751 'type' => Controls_Manager::COLOR,
1752 'selectors' => [
1753 '{{WRAPPER}} .king-addons-pricing-slider__range-min' => 'background-color: {{VALUE}};',
1754 ],
1755 ]
1756 );
1757
1758 $this->add_responsive_control(
1759 'min_label_padding',
1760 [
1761 'label' => esc_html__('Padding', 'king-addons'),
1762 'type' => Controls_Manager::DIMENSIONS,
1763 'size_units' => ['px', 'em', '%'],
1764 'selectors' => [
1765 '{{WRAPPER}} .king-addons-pricing-slider__range-min' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1766 ],
1767 ]
1768 );
1769
1770 $this->add_group_control(
1771 \Elementor\Group_Control_Border::get_type(),
1772 [
1773 'name' => 'min_label_border',
1774 'label' => esc_html__('Border', 'king-addons'),
1775 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__range-min',
1776 ]
1777 );
1778
1779 $this->add_responsive_control(
1780 'min_label_border_radius',
1781 [
1782 'label' => esc_html__('Border Radius', 'king-addons'),
1783 'type' => Controls_Manager::DIMENSIONS,
1784 'size_units' => ['px', '%', 'em'],
1785 'selectors' => [
1786 '{{WRAPPER}} .king-addons-pricing-slider__range-min' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1787 ],
1788 ]
1789 );
1790
1791 // Maximum Label Styles
1792 $this->add_control(
1793 'max_label_style_heading',
1794 [
1795 'label' => esc_html__('Maximum Label Style', 'king-addons'),
1796 'type' => Controls_Manager::HEADING,
1797 'separator' => 'before',
1798 ]
1799 );
1800
1801 $this->add_control(
1802 'max_label_text_color',
1803 [
1804 'label' => esc_html__('Text Color', 'king-addons'),
1805 'type' => Controls_Manager::COLOR,
1806 'default' => '#555555', // Updated default
1807 'selectors' => [
1808 '{{WRAPPER}} .king-addons-pricing-slider__range-max' => 'color: {{VALUE}};',
1809 ],
1810 ]
1811 );
1812
1813 $this->add_group_control(
1814 Group_Control_Typography::get_type(),
1815 [
1816 'name' => 'max_label_typography',
1817 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__range-max',
1818 ]
1819 );
1820
1821 $this->add_control(
1822 'max_label_bg_color',
1823 [
1824 'label' => esc_html__('Background Color', 'king-addons'),
1825 'type' => Controls_Manager::COLOR,
1826 'selectors' => [
1827 '{{WRAPPER}} .king-addons-pricing-slider__range-max' => 'background-color: {{VALUE}};',
1828 ],
1829 ]
1830 );
1831
1832 $this->add_responsive_control(
1833 'max_label_padding',
1834 [
1835 'label' => esc_html__('Padding', 'king-addons'),
1836 'type' => Controls_Manager::DIMENSIONS,
1837 'size_units' => ['px', 'em', '%'],
1838 'selectors' => [
1839 '{{WRAPPER}} .king-addons-pricing-slider__range-max' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1840 ],
1841 ]
1842 );
1843
1844 $this->add_group_control(
1845 \Elementor\Group_Control_Border::get_type(),
1846 [
1847 'name' => 'max_label_border',
1848 'label' => esc_html__('Border', 'king-addons'),
1849 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__range-max',
1850 ]
1851 );
1852
1853 $this->add_responsive_control(
1854 'max_label_border_radius',
1855 [
1856 'label' => esc_html__('Border Radius', 'king-addons'),
1857 'type' => Controls_Manager::DIMENSIONS,
1858 'size_units' => ['px', '%', 'em'],
1859 'selectors' => [
1860 '{{WRAPPER}} .king-addons-pricing-slider__range-max' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1861 ],
1862 ]
1863 );
1864
1865 $this->end_controls_section(); // End Section Range Labels Style
1866
1867 // Call placeholder methods for Pro features
1868 $this->add_control_slider_labels_styling();
1869 $this->add_control_advanced_formula_types();
1870 $this->add_control_multiple_sliders();
1871 $this->add_control_woocommerce_integration();
1872 $this->add_control_notifications_styling();
1873
1874 // Add Pro Features section
1875 Core::renderProFeaturesSection(
1876 $this,
1877 '',
1878 Controls_Manager::RAW_HTML,
1879 'pricing-slider',
1880 [
1881 esc_html__('Advanced Formula Types (Exponential, Logarithmic, etc.)', 'king-addons'),
1882 esc_html__('Multiple Interactive Sliders', 'king-addons'),
1883 esc_html__('WooCommerce Integration', 'king-addons'),
1884 esc_html__('Multi-Currency Support', 'king-addons'),
1885 esc_html__('Advanced Animation Effects', 'king-addons'),
1886 esc_html__('Premium Templates Library', 'king-addons'),
1887 ]
1888 );
1889 }
1890
1891 public function get_currency_symbol($symbol_name)
1892 {
1893 $symbols = [
1894 'dollar' => '&#36;',
1895 'euro' => '&#128;',
1896 'pound' => '&#163;',
1897 'ruble' => '&#8381;',
1898 'shekel' => '&#8362;',
1899 'baht' => '&#3647;',
1900 'yen' => '&#165;',
1901 'won' => '&#8361;',
1902 'rupee' => '&#8360;',
1903 'lira' => '&#8356;',
1904 'peseta' => '&#8359;',
1905 ];
1906
1907 if (isset($symbols[$symbol_name])) {
1908 return $symbols[$symbol_name];
1909 }
1910
1911 return '';
1912 }
1913
1914 public function calculate_price($value, $settings)
1915 {
1916 if ($settings['price_formula'] === 'linear') {
1917 // Linear formula: price = a * value + b
1918 return $settings['formula_a'] * $value + $settings['formula_b'];
1919 } else {
1920 // Custom prices - find closest value or interpolate
1921 $custom_prices = isset($settings['custom_prices']) && is_array($settings['custom_prices']) ? $settings['custom_prices'] : [];
1922
1923 // Prevent usort() on null or non-array
1924 if (empty($custom_prices)) {
1925 return 0;
1926 }
1927
1928 // Sort by value
1929 usort($custom_prices, function ($a, $b) {
1930 return $a['value'] <=> $b['value'];
1931 });
1932
1933 // Find exact match or closest values for interpolation
1934 foreach ($custom_prices as $index => $price_point) {
1935 if ($price_point['value'] == $value) {
1936 // Exact match
1937 return $price_point['price'];
1938 }
1939
1940 if ($index < count($custom_prices) - 1) {
1941 $next_price_point = $custom_prices[$index + 1];
1942
1943 // If value is between this point and next point, interpolate
1944 if ($value > $price_point['value'] && $value < $next_price_point['value']) {
1945 // Linear interpolation
1946 $ratio = ($value - $price_point['value']) / ($next_price_point['value'] - $price_point['value']);
1947 return $price_point['price'] + $ratio * ($next_price_point['price'] - $price_point['price']);
1948 }
1949 }
1950 }
1951
1952 // If no match or interpolation, use first or last point
1953 if ($value <= $custom_prices[0]['value']) {
1954 return $custom_prices[0]['price'];
1955 } else {
1956 return end($custom_prices)['price'];
1957 }
1958 }
1959 }
1960
1961 public function is_feature_included($feature_min_value, $current_value)
1962 {
1963 return $current_value >= $feature_min_value;
1964 }
1965
1966 public function render()
1967 {
1968 $settings = $this->get_settings_for_display();
1969 $default_value = isset($settings['default_value']) ? $settings['default_value'] : 50;
1970
1971 // Ensure default value is within range
1972 $default_value = max($settings['min_value'], min($settings['max_value'], $default_value));
1973
1974 // Calculate initial price
1975 $initial_price = $this->calculate_price($default_value, $settings);
1976
1977 // Get currency symbol
1978 $currency_symbol = '';
1979 if (!empty($settings['currency_symbol'])) {
1980 if ($settings['currency_symbol'] === 'custom') {
1981 $currency_symbol = $settings['currency_symbol_custom'];
1982 } else {
1983 $currency_symbol = $this->get_currency_symbol($settings['currency_symbol']);
1984 }
1985 }
1986
1987 // Format price (2 decimal places for cents)
1988 $formatted_price = number_format($initial_price, 2);
1989
1990 // Build price HTML
1991 $price_html = '';
1992 if ($settings['currency_position'] === 'before') {
1993 $price_html .= '<span class="king-addons-pricing-slider__currency">' . $currency_symbol . '</span>';
1994 }
1995
1996 if (!empty($settings['price_prefix'])) {
1997 $price_html .= '<span class="king-addons-pricing-slider__prefix">' . esc_html($settings['price_prefix']) . '</span>';
1998 }
1999
2000 $price_html .= '<span class="king-addons-pricing-slider__price-value">' . $formatted_price . '</span>';
2001
2002 if (!empty($settings['price_suffix'])) {
2003 $price_html .= '<span class="king-addons-pricing-slider__suffix">' . esc_html($settings['price_suffix']) . '</span>';
2004 }
2005
2006 if ($settings['currency_position'] === 'after') {
2007 $price_html .= '<span class="king-addons-pricing-slider__currency">' . $currency_symbol . '</span>';
2008 }
2009
2010 if (!empty($settings['period'])) {
2011 $price_html .= '<span class="king-addons-pricing-slider__period">' . esc_html($settings['period']) . '</span>';
2012 }
2013
2014 // Generate unique ID for the slider
2015 $slider_id = 'king-addons-pricing-slider-' . $this->get_id();
2016
2017 // Prepare JSON data for features
2018 $features_data = [];
2019 if ($settings['show_features'] === 'yes' && !empty($settings['feature_list'])) {
2020 foreach ($settings['feature_list'] as $feature) {
2021 $features_data[] = [
2022 'text' => $feature['feature_text'],
2023 'min_value' => $feature['min_value_feature'],
2024 'icon_included' => !empty($feature['feature_icon_included']['value']) ? $feature['feature_icon_included']['value'] : 'fas fa-check',
2025 'icon_excluded' => !empty($feature['feature_icon_excluded']['value']) ? $feature['feature_icon_excluded']['value'] : 'fas fa-times',
2026 ];
2027 }
2028 }
2029
2030 // Prepare price data for JS
2031 $price_data = [
2032 'formula' => $settings['price_formula'],
2033 'a' => isset($settings['formula_a']) ? (float)$settings['formula_a'] : 1,
2034 'b' => isset($settings['formula_b']) ? (float)$settings['formula_b'] : 0,
2035 'custom_prices' => isset($settings['custom_prices']) ? $settings['custom_prices'] : [],
2036 'currency_position' => $settings['currency_position'],
2037 'currency_symbol' => $currency_symbol,
2038 'price_prefix' => esc_html($settings['price_prefix']),
2039 'price_suffix' => esc_html($settings['price_suffix']),
2040 'period' => esc_html($settings['period']),
2041 ];
2042
2043 // Add Pro-version formula parameters if they exist
2044 if (isset($settings['advanced_formula_types'])) {
2045 $price_data['advanced_formula_types'] = $settings['advanced_formula_types'];
2046
2047 // Add parameters for exponential formula
2048 if (isset($settings['formula_exp_base'])) {
2049 $price_data['formula_exp_base'] = (float)$settings['formula_exp_base'];
2050 }
2051 if (isset($settings['formula_exp_multiplier'])) {
2052 $price_data['formula_exp_multiplier'] = (float)$settings['formula_exp_multiplier'];
2053 }
2054
2055 // Add parameters for logarithmic formula
2056 if (isset($settings['formula_log_base'])) {
2057 $price_data['formula_log_base'] = (float)$settings['formula_log_base'];
2058 }
2059 if (isset($settings['formula_log_multiplier'])) {
2060 $price_data['formula_log_multiplier'] = (float)$settings['formula_log_multiplier'];
2061 }
2062
2063 // Add parameters for power formula
2064 if (isset($settings['formula_power_exponent'])) {
2065 $price_data['formula_power_exponent'] = (float)$settings['formula_power_exponent'];
2066 }
2067 if (isset($settings['formula_power_multiplier'])) {
2068 $price_data['formula_power_multiplier'] = (float)$settings['formula_power_multiplier'];
2069 }
2070 }
2071
2072 // Pass ONLY size settings as CSS variables
2073 $this->add_render_attribute('_wrapper', 'class', 'king-addons-pricing-slider');
2074 $this->add_render_attribute(
2075 '_wrapper',
2076 'style',
2077 sprintf(
2078 '--slider-track-height: %1$spx; --slider-thumb-size: %2$spx;',
2079 esc_attr($settings['slider_track_height']['size'] ?? '6'),
2080 esc_attr($settings['slider_thumb_size']['size'] ?? '24')
2081 )
2082 );
2083
2084 // Add class for shadow based on setting
2085 if ($settings['slider_thumb_shadow'] === 'yes') {
2086 $this->add_render_attribute('_wrapper', 'class', 'king-addons-slider-thumb-shadow-yes');
2087 }
2088
2089 $this->add_render_attribute('_wrapper', 'data-features', json_encode($features_data));
2090 $this->add_render_attribute('_wrapper', 'data-price-data', json_encode($price_data));
2091 ?>
2092 <div <?php echo $this->get_render_attribute_string('_wrapper'); ?>>
2093 <?php if (!empty($settings['title']) || !empty($settings['description'])) : ?>
2094 <div class="king-addons-pricing-slider__header">
2095 <?php if (!empty($settings['title'])) : ?>
2096 <h3 class="king-addons-pricing-slider__title"><?php echo esc_html($settings['title']); ?></h3>
2097 <?php endif; ?>
2098 <?php if (!empty($settings['description'])) : ?>
2099 <div class="king-addons-pricing-slider__description"><?php echo wp_kses_post($settings['description']); ?></div>
2100 <?php endif; ?>
2101 </div>
2102 <?php endif; ?>
2103
2104 <div class="king-addons-pricing-slider__controls">
2105 <div class="king-addons-pricing-slider__control-group">
2106 <?php if ($settings['min_label'] || $settings['max_label']) : ?>
2107 <div class="king-addons-pricing-slider__range-labels">
2108 <span class="king-addons-pricing-slider__range-min"><?php echo esc_html($settings['min_label']); ?></span>
2109 <span class="king-addons-pricing-slider__range-max"><?php echo esc_html($settings['max_label']); ?></span>
2110 </div>
2111 <?php endif; ?>
2112
2113 <div class="king-addons-pricing-slider__range-container">
2114 <div class="king-addons-pricing-slider__track"></div>
2115 <div class="king-addons-pricing-slider__progress"></div>
2116 <div class="king-addons-pricing-slider__custom-thumb"></div>
2117 <?php if ('yes' === $settings['show_current_value_indicator']) : ?>
2118 <span class="king-addons-pricing-slider__current-value"><?php echo esc_html($default_value); ?></span>
2119 <?php endif; ?>
2120 <input type="range" class="king-addons-pricing-slider__range"
2121 min="<?php echo esc_attr($settings['min_value']); ?>"
2122 max="<?php echo esc_attr($settings['max_value']); ?>"
2123 step="<?php echo esc_attr($settings['step']); ?>"
2124 value="<?php echo esc_attr($default_value); ?>"
2125 aria-labelledby="king-addons-pricing-slider-label">
2126 </div>
2127
2128 <div class="king-addons-pricing-slider__range-values">
2129 <span class="king-addons-pricing-slider__range-min-value"><?php echo esc_html($settings['min_value']); ?></span>
2130 <span class="king-addons-pricing-slider__range-max-value"><?php echo esc_html($settings['max_value']); ?></span>
2131 </div>
2132 </div>
2133 </div>
2134
2135 <div class="king-addons-pricing-slider__display">
2136 <div class="king-addons-pricing-slider__price"><?php echo $price_html; ?></div>
2137 </div>
2138
2139 <?php if ($settings['show_features'] === 'yes' && !empty($settings['feature_list'])) : ?>
2140 <div class="king-addons-pricing-slider__features">
2141 <ul class="king-addons-pricing-slider__feature-list">
2142 <?php foreach ($settings['feature_list'] as $feature) :
2143 $is_included = $this->is_feature_included($feature['min_value_feature'], $default_value);
2144 $icon_class = $is_included ? 'king-addons-pricing-slider__feature-included' : 'king-addons-pricing-slider__feature-excluded';
2145 $icon = $is_included ? $feature['feature_icon_included'] : $feature['feature_icon_excluded'];
2146 $li_class = $is_included ? 'king-addons-feature-included' : 'king-addons-feature-excluded';
2147 ?>
2148 <li class="king-addons-pricing-slider__feature-item <?php echo esc_attr($li_class); ?>" data-min-value="<?php echo esc_attr($feature['min_value_feature']); ?>">
2149 <span class="<?php echo esc_attr($icon_class); ?>">
2150 <?php \Elementor\Icons_Manager::render_icon($icon, ['aria-hidden' => 'true']); ?>
2151 </span>
2152 <span class="king-addons-pricing-slider__feature-text"><?php echo esc_html($feature['feature_text']); ?></span>
2153 </li>
2154 <?php endforeach; ?>
2155 </ul>
2156 </div>
2157 <?php endif; ?>
2158
2159 <?php if ($settings['show_button'] === 'yes') : ?>
2160 <div class="king-addons-pricing-slider__actions">
2161 <a href="<?php echo esc_url($settings['button_url']['url']); ?>" class="king-addons-pricing-slider__button elementor-animation-<?php echo esc_attr($settings['button_hover_animation']); ?>"
2162 <?php echo !empty($settings['button_url']['is_external']) ? ' target="_blank"' : ''; ?>
2163 <?php echo !empty($settings['button_url']['nofollow']) ? ' rel="nofollow"' : ''; ?>>
2164 <?php echo esc_html($settings['button_text']); ?>
2165 </a>
2166 </div>
2167 <?php endif; ?>
2168 </div>
2169 <?php
2170 }
2171
2172 public function add_control_advanced_formula_types()
2173 {
2174 // Empty placeholder for Pro feature
2175 $this->start_controls_section(
2176 'advanced_formula_types_placeholder',
2177 [
2178 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Advanced Formula Types', 'king-addons'),
2179 ]
2180 );
2181
2182 $this->add_control(
2183 'advanced_formula_types_notice',
2184 [
2185 'type' => Controls_Manager::RAW_HTML,
2186 'raw' => 'Advanced Formula Types are available in the ' .
2187 '<strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-pricing-slider-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
2188 'content_classes' => 'king-addons-pro-notice',
2189 ]
2190 );
2191
2192 $this->end_controls_section();
2193 }
2194
2195 /**
2196 * Pro feature - Multiple sliders
2197 */
2198 public function add_control_multiple_sliders()
2199 {
2200
2201 $this->start_controls_section(
2202 'section_multiple_sliders_placeholder',
2203 [
2204 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Multiple Sliders', 'king-addons'),
2205 ]
2206 );
2207
2208 $this->add_control(
2209 'multiple_sliders_notice',
2210 [
2211 'type' => Controls_Manager::RAW_HTML,
2212 'raw' => 'Multiple interactive sliders with combined price calculation are available in the ' .
2213 '<strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-pricing-slider-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
2214 'content_classes' => 'king-addons-pro-notice',
2215 ]
2216 );
2217
2218
2219
2220
2221 $this->end_controls_section();
2222
2223
2224 }
2225
2226 public function add_control_woocommerce_integration()
2227 {
2228 // Section for WooCommerce Placeholder in Free version
2229 $this->start_controls_section(
2230 'section_woocommerce_placeholder',
2231 [
2232 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('WooCommerce', 'king-addons'),
2233 ]
2234 );
2235
2236 $this->add_control(
2237 'woocommerce_integration_notice',
2238 [
2239 'type' => Controls_Manager::RAW_HTML,
2240 'raw' => 'WooCommerce integration with dynamic pricing and automatic cart functionality is available in the ' .
2241 '<strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-pricing-slider-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
2242 'content_classes' => 'king-addons-pro-notice',
2243 ]
2244 );
2245
2246 $this->end_controls_section(); // End of section_woocommerce_placeholder
2247 }
2248
2249 /**
2250 * Adds controls for slider label styling
2251 */
2252 public function add_control_slider_labels_styling()
2253 {
2254 $this->start_controls_section(
2255 'section_slider_labels_style',
2256 [
2257 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Slider Labels', 'king-addons'),
2258 'tab' => Controls_Manager::TAB_STYLE,
2259 ]
2260 );
2261
2262 $this->add_control(
2263 'slider_label_style_heading',
2264 [
2265 'label' => esc_html__('Slider Label Style', 'king-addons'),
2266 'type' => Controls_Manager::HEADING,
2267 ]
2268 );
2269
2270 $this->add_control(
2271 'slider_label_text_color',
2272 [
2273 'label' => esc_html__('Text Color', 'king-addons'),
2274 'type' => Controls_Manager::COLOR,
2275 'default' => '#333333',
2276 'selectors' => [
2277 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'color: {{VALUE}};',
2278 ],
2279 ]
2280 );
2281
2282 $this->add_group_control(
2283 Group_Control_Typography::get_type(),
2284 [
2285 'name' => 'slider_label_typography',
2286 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__control-label',
2287 'fields_options' => [
2288 'font_weight' => ['default' => '600'],
2289 'font_size' => ['default' => ['unit' => 'px', 'size' => 16]],
2290 ],
2291 ]
2292 );
2293
2294 $this->add_control(
2295 'slider_label_bg_color',
2296 [
2297 'label' => esc_html__('Background Color', 'king-addons'),
2298 'type' => Controls_Manager::COLOR,
2299 'selectors' => [
2300 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'background-color: {{VALUE}};',
2301 ],
2302 ]
2303 );
2304
2305 $this->add_responsive_control(
2306 'slider_label_padding',
2307 [
2308 'label' => esc_html__('Padding', 'king-addons'),
2309 'type' => Controls_Manager::DIMENSIONS,
2310 'size_units' => ['px', 'em', '%'],
2311 'default' => [
2312 'top' => '0',
2313 'right' => '0',
2314 'bottom' => '5',
2315 'left' => '0',
2316 'unit' => 'px',
2317 'isLinked' => false,
2318 ],
2319 'selectors' => [
2320 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2321 ],
2322 ]
2323 );
2324
2325 $this->add_responsive_control(
2326 'slider_label_margin',
2327 [
2328 'label' => esc_html__('Margin', 'king-addons'),
2329 'type' => Controls_Manager::DIMENSIONS,
2330 'size_units' => ['px', 'em', '%'],
2331 'default' => [
2332 'top' => '0',
2333 'right' => '0',
2334 'bottom' => '5',
2335 'left' => '0',
2336 'unit' => 'px',
2337 'isLinked' => false,
2338 ],
2339 'selectors' => [
2340 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2341 ],
2342 ]
2343 );
2344
2345 $this->add_group_control(
2346 \Elementor\Group_Control_Border::get_type(),
2347 [
2348 'name' => 'slider_label_border',
2349 'label' => esc_html__('Border', 'king-addons'),
2350 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__control-label',
2351 ]
2352 );
2353
2354 $this->add_responsive_control(
2355 'slider_label_border_radius',
2356 [
2357 'label' => esc_html__('Border Radius', 'king-addons'),
2358 'type' => Controls_Manager::DIMENSIONS,
2359 'size_units' => ['px', '%', 'em'],
2360 'selectors' => [
2361 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2362 ],
2363 ]
2364 );
2365
2366 $this->add_control(
2367 'slider_label_text_align',
2368 [
2369 'label' => esc_html__('Text Alignment', 'king-addons'),
2370 'type' => Controls_Manager::CHOOSE,
2371 'options' => [
2372 'left' => [
2373 'title' => esc_html__('Left', 'king-addons'),
2374 'icon' => 'eicon-text-align-left',
2375 ],
2376 'center' => [
2377 'title' => esc_html__('Center', 'king-addons'),
2378 'icon' => 'eicon-text-align-center',
2379 ],
2380 'right' => [
2381 'title' => esc_html__('Right', 'king-addons'),
2382 'icon' => 'eicon-text-align-right',
2383 ],
2384 ],
2385 'default' => 'left',
2386 'selectors' => [
2387 '{{WRAPPER}} .king-addons-pricing-slider__control-label' => 'text-align: {{VALUE}};',
2388 ],
2389 ]
2390 );
2391
2392 $this->add_group_control(
2393 \Elementor\Group_Control_Text_Shadow::get_type(),
2394 [
2395 'name' => 'slider_label_text_shadow',
2396 'selector' => '{{WRAPPER}} .king-addons-pricing-slider__control-label',
2397 ]
2398 );
2399
2400 $this->end_controls_section();
2401 }
2402
2403 public function add_control_notifications_styling()
2404 {
2405 // Empty placeholder for Pro feature
2406 }
2407 }
2408