register_layout_controls(); $this->register_steps_controls(); $this->register_behavior_controls(); $this->register_progress_controls(); $this->register_style_container_controls(); $this->register_style_step_controls(); $this->register_style_marker_controls(); $this->register_style_typography_controls(); $this->register_style_cta_controls(); $this->register_pro_notice_controls(); } protected function register_layout_controls(): void { $this->start_controls_section( 'kng_isp_layout_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Layout', 'king-addons'), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'kng_steps_orientation', [ 'label' => esc_html__('Orientation', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'vertical', 'options' => [ 'vertical' => esc_html__('Vertical', 'king-addons'), 'horizontal' => esc_html__('Horizontal (Pro)', 'king-addons'), ], ] ); Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'interactive-steps-progress', 'kng_steps_orientation', ['horizontal']); $this->add_control( 'kng_steps_alignment', [ 'label' => esc_html__('Content Alignment', 'king-addons'), 'type' => Controls_Manager::CHOOSE, 'default' => 'left', 'options' => [ 'left' => [ 'title' => esc_html__('Left', 'king-addons'), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__('Center', 'king-addons'), 'icon' => 'eicon-text-align-center', ], ], ] ); $this->add_responsive_control( 'kng_steps_gap', [ 'label' => esc_html__('Step Gap', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px', 'em', 'rem'], 'range' => [ 'px' => ['min' => 0, 'max' => 80], 'em' => ['min' => 0, 'max' => 6], 'rem' => ['min' => 0, 'max' => 6], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-gap: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_steps_content_padding', [ 'label' => esc_html__('Content Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', 'rem'], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-content-padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'kng_steps_connector', [ 'label' => esc_html__('Connector Line', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'show', 'options' => [ 'show' => esc_html__('Show', 'king-addons'), 'hide' => esc_html__('Hide', 'king-addons'), ], ] ); $this->add_control( 'kng_steps_line_thickness', [ 'label' => esc_html__('Line Thickness', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 1, 'max' => 10], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-line-thickness: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'kng_steps_line_offset', [ 'label' => esc_html__('Line Offset', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 0, 'max' => 40], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-line-offset: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } protected function register_steps_controls(): void { $this->start_controls_section( 'kng_isp_steps_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Steps', 'king-addons'), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'kng_steps_numbering_mode', [ 'label' => esc_html__('Step Numbering', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'auto', 'options' => [ 'auto' => esc_html__('Auto', 'king-addons'), 'manual' => esc_html__('Manual', 'king-addons'), ], ] ); $repeater = new Repeater(); $repeater->add_control( 'step_title', [ 'label' => esc_html__('Title', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Step Title', 'king-addons'), 'label_block' => true, ] ); $repeater->add_control( 'step_description', [ 'label' => esc_html__('Short Description', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'rows' => 3, 'default' => esc_html__('Explain the step in a single, clear sentence.', 'king-addons'), ] ); $repeater->add_control( 'step_details', [ 'label' => esc_html__('Details', 'king-addons'), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__('Add the expanded details for this step here.', 'king-addons'), ] ); $repeater->add_control( 'step_points', [ 'label' => esc_html__('Details List (Optional)', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'rows' => 4, 'default' => '', 'description' => esc_html__('Add one list item per line.', 'king-addons'), ] ); $repeater->add_control( 'step_icon', [ 'label' => esc_html__('Icon', 'king-addons'), 'type' => Controls_Manager::ICONS, 'skin' => 'inline', 'label_block' => true, ] ); $repeater->add_control( 'step_icon_position', [ 'label' => esc_html__('Icon Position', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'left', 'options' => [ 'left' => esc_html__('Left', 'king-addons'), 'top' => esc_html__('Top', 'king-addons'), ], ] ); $repeater->add_control( 'step_number', [ 'label' => esc_html__('Custom Number', 'king-addons'), 'type' => Controls_Manager::TEXT, 'condition' => [ 'kng_steps_numbering_mode' => 'manual', ], ] ); $repeater->add_control( 'step_cta_text', [ 'label' => esc_html__('CTA Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => '', 'separator' => 'before', ] ); $repeater->add_control( 'step_cta_link', [ 'label' => esc_html__('CTA Link', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://your-link.com', 'king-addons'), ] ); $repeater->add_control( 'step_anchor_id', [ 'label' => esc_html__('Anchor ID (Pro)', 'king-addons'), 'type' => Controls_Manager::TEXT, 'classes' => $this->get_pro_control_class(), 'description' => esc_html__('Use lowercase letters, numbers, dashes, or underscores only.', 'king-addons'), ] ); $this->add_control( 'kng_steps_list', [ 'label' => esc_html__('Steps', 'king-addons'), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => $this->get_default_steps(), 'title_field' => '{{ step_title }}', ] ); $this->end_controls_section(); } protected function register_behavior_controls(): void { $this->start_controls_section( 'kng_isp_behavior_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Behavior', 'king-addons'), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'kng_steps_expand_behavior', [ 'label' => esc_html__('Expand Behavior', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'click', 'options' => [ 'none' => esc_html__('Always Open', 'king-addons'), 'click' => esc_html__('Click to Expand', 'king-addons'), ], ] ); $this->add_control( 'kng_steps_default_open', [ 'label' => esc_html__('Default Open', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'first', 'options' => [ 'first' => esc_html__('First Step', 'king-addons'), 'closed' => esc_html__('All Closed', 'king-addons'), ], 'condition' => [ 'kng_steps_expand_behavior' => 'click', ], ] ); $this->add_control( 'kng_steps_single_open', [ 'label' => esc_html__('Single Open', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'kng_steps_expand_behavior' => 'click', ], ] ); $this->add_control( 'kng_steps_scroll_to_step', [ 'label' => esc_html__('Scroll to Step on Click', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => '', ] ); $this->end_controls_section(); } protected function register_progress_controls(): void { $this->start_controls_section( 'kng_isp_progress_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Progress', 'king-addons'), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'kng_steps_progress_style', [ 'label' => esc_html__('Progress Style', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'dots', 'options' => [ 'dots' => esc_html__('Dots + Line', 'king-addons'), 'numbers' => esc_html__('Numbered Badges', 'king-addons'), ], ] ); $this->add_control( 'kng_steps_show_completed', [ 'label' => esc_html__('Show Completed State', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'yes', 'options' => [ 'yes' => esc_html__('Yes', 'king-addons'), 'no' => esc_html__('No', 'king-addons'), ], ] ); $this->end_controls_section(); } protected function register_style_container_controls(): void { $this->start_controls_section( 'kng_isp_style_container', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Container', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'kng_isp_container_bg', 'selector' => '{{WRAPPER}} .king-addons-interactive-steps', ] ); $this->add_responsive_control( 'kng_isp_container_padding', [ 'label' => esc_html__('Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', 'rem'], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_isp_container_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'kng_isp_container_shadow', 'selector' => '{{WRAPPER}} .king-addons-interactive-steps', ] ); $this->end_controls_section(); } protected function register_style_step_controls(): void { $this->start_controls_section( 'kng_isp_style_steps', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Step Item', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'kng_steps_card', [ 'label' => esc_html__('Card Mode', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'kng_steps_item_bg', [ 'label' => esc_html__('Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__body' => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'kng_steps_item_border', 'selector' => '{{WRAPPER}} .king-addons-isp-step__body', ] ); $this->add_responsive_control( 'kng_steps_item_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__body' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'kng_steps_item_shadow', 'selector' => '{{WRAPPER}} .king-addons-isp-step__body', ] ); $this->add_control( 'kng_steps_item_bg_hover', [ 'label' => esc_html__('Hover Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step:hover .king-addons-isp-step__body' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_item_border_hover', [ 'label' => esc_html__('Hover Border Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step:hover .king-addons-isp-step__body' => 'border-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'kng_steps_item_shadow_hover', 'selector' => '{{WRAPPER}} .king-addons-isp-step:hover .king-addons-isp-step__body', ] ); $this->add_control( 'kng_steps_item_bg_active', [ 'label' => esc_html__('Active Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step.is-active .king-addons-isp-step__body' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_item_border_active', [ 'label' => esc_html__('Active Border Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step.is-active .king-addons-isp-step__body' => 'border-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'kng_steps_item_shadow_active', 'selector' => '{{WRAPPER}} .king-addons-isp-step.is-active .king-addons-isp-step__body', ] ); $this->end_controls_section(); } protected function register_style_marker_controls(): void { $this->start_controls_section( 'kng_isp_style_marker', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Marker & Progress', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'kng_steps_marker_size', [ 'label' => esc_html__('Marker Size', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 16, 'max' => 80], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_steps_dot_size', [ 'label' => esc_html__('Dot Size', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 6, 'max' => 30], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-dot-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_steps_icon_size', [ 'label' => esc_html__('Icon Size', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 10, 'max' => 48], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-icon-size: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_steps_icon_spacing', [ 'label' => esc_html__('Icon Spacing', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => ['min' => 0, 'max' => 40], ], 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-icon-gap: {{SIZE}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_number_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__number', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_label_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__label', ] ); $this->add_control( 'kng_steps_label_color', [ 'label' => esc_html__('Label Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-label-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_color', [ 'label' => esc_html__('Marker Text Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_bg', [ 'label' => esc_html__('Marker Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-bg: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_border', [ 'label' => esc_html__('Marker Border Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-border-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_color_active', [ 'label' => esc_html__('Active Marker Text', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-color-active: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_bg_active', [ 'label' => esc_html__('Active Marker Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-bg-active: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_border_active', [ 'label' => esc_html__('Active Marker Border', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-border-active: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_color_completed', [ 'label' => esc_html__('Completed Marker Text', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-color-completed: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_bg_completed', [ 'label' => esc_html__('Completed Marker Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-bg-completed: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_marker_border_completed', [ 'label' => esc_html__('Completed Marker Border', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-marker-border-completed: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_icon_color', [ 'label' => esc_html__('Icon Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-icon-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_icon_color_active', [ 'label' => esc_html__('Active Icon Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-icon-color-active: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_icon_color_completed', [ 'label' => esc_html__('Completed Icon Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-icon-color-completed: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_line_color', [ 'label' => esc_html__('Line Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-line-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_line_color_active', [ 'label' => esc_html__('Active Line Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-interactive-steps' => '--kng-isp-line-active-color: {{VALUE}};', ], ] ); $this->end_controls_section(); } protected function register_style_typography_controls(): void { $this->start_controls_section( 'kng_isp_style_typography', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Typography', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_title_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__title', ] ); $this->add_control( 'kng_steps_title_color', [ 'label' => esc_html__('Title Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__title' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_description_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__description', ] ); $this->add_control( 'kng_steps_description_color', [ 'label' => esc_html__('Description Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__description' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_details_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__details', ] ); $this->add_control( 'kng_steps_details_color', [ 'label' => esc_html__('Details Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__details' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_title_color_active', [ 'label' => esc_html__('Active Title Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step.is-active .king-addons-isp-step__title' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_description_color_active', [ 'label' => esc_html__('Active Description Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step.is-active .king-addons-isp-step__description' => 'color: {{VALUE}};', ], ] ); $this->end_controls_section(); } protected function register_style_cta_controls(): void { $this->start_controls_section( 'kng_isp_style_cta', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('CTA', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_steps_cta_typography', 'selector' => '{{WRAPPER}} .king-addons-isp-step__cta', ] ); $this->add_control( 'kng_steps_cta_color', [ 'label' => esc_html__('CTA Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_cta_hover_color', [ 'label' => esc_html__('CTA Hover Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_cta_bg', [ 'label' => esc_html__('CTA Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta' => 'background-color: {{VALUE}};', ], ] ); $this->add_control( 'kng_steps_cta_hover_bg', [ 'label' => esc_html__('CTA Hover Background', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta:hover' => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'kng_steps_cta_border', 'selector' => '{{WRAPPER}} .king-addons-isp-step__cta', ] ); $this->add_control( 'kng_steps_cta_hover_border_color', [ 'label' => esc_html__('CTA Hover Border Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta:hover' => 'border-color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'kng_steps_cta_radius', [ 'label' => esc_html__('CTA Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'kng_steps_cta_padding', [ 'label' => esc_html__('CTA Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em'], 'selectors' => [ '{{WRAPPER}} .king-addons-isp-step__cta' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } protected function register_pro_notice_controls(): void { if (!king_addons_freemius()->can_use_premium_code__premium_only()) { Core::renderProFeaturesSection($this, '', Controls_Manager::RAW_HTML, 'interactive-steps-progress', [ 'Horizontal layout with wrap and sticky progress', 'Deep links with hash sync and anchor navigation', 'Scroll reveal and active-on-scroll interactions', 'Advanced animations with reduced motion options', ]); } } protected function should_render_progress_header(array $settings): bool { if (!$this->is_pro_enabled()) { return false; } $show_count = ('yes' === ($settings['kng_steps_show_step_count'] ?? '')); $show_percent = ('yes' === ($settings['kng_steps_show_percent'] ?? '')); $sticky = ('yes' === ($settings['kng_steps_sticky_progress'] ?? '')); return $show_count || $show_percent || $sticky; } protected function render_progress_header(array $settings, int $total_steps): void { $show_count = ('yes' === ($settings['kng_steps_show_step_count'] ?? '')); $show_percent = ('yes' === ($settings['kng_steps_show_percent'] ?? '')); $sticky_enabled = ('yes' === ($settings['kng_steps_sticky_progress'] ?? '')); $sticky_type = $this->sanitize_sticky_type((string) ($settings['kng_steps_sticky_type'] ?? 'bar')); $markers_clickable = ('yes' === ($settings['kng_steps_progress_clickable'] ?? '')); $sticky_steps_interactive = $sticky_enabled && ('header' === $sticky_type) && $markers_clickable; $count_text = sprintf( esc_html__('Step %1$s of %2$s', 'king-addons'), 1, max($total_steps, 1) ); echo '