start_controls_section( 'kng_agm_background_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Animated Gradient / Mesh', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $element->add_control( 'kng_agm_enable', [ 'label' => esc_html__('Enable Background', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'prefix_class' => 'kng-agm-bg-', ] ); $element->add_control( 'kng_agm_type', [ 'label' => esc_html__('Type', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'gradient' => esc_html__('Animated Gradient', 'king-addons'), 'mesh' => esc_html__('Mesh', 'king-addons'), ], 'default' => 'gradient', 'prefix_class' => 'kng-agm-type-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_preset', [ 'label' => esc_html__('Preset', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_preset_options(), 'default' => 'aurora', 'prefix_class' => 'kng-agm-preset-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_enable_animation', [ 'label' => esc_html__('Enable Animation', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'prefix_class' => 'kng-agm-animate-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_speed', [ 'label' => esc_html__('Speed', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 1, 'max' => 100, 'step' => 1, ], ], 'default' => [ 'size' => 40, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-speed: {{SIZE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_enable_animation' => 'yes', ], ] ); $element->add_control( 'kng_agm_direction', [ 'label' => esc_html__('Direction', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'left-right' => esc_html__('Left to Right', 'king-addons'), 'right-left' => esc_html__('Right to Left', 'king-addons'), 'top-bottom' => esc_html__('Top to Bottom', 'king-addons'), 'bottom-top' => esc_html__('Bottom to Top', 'king-addons'), 'diag-lr' => esc_html__('Diagonal (Left)', 'king-addons'), 'diag-rl' => esc_html__('Diagonal (Right)', 'king-addons'), ], 'default' => 'left-right', 'prefix_class' => 'kng-agm-direction-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_opacity', [ 'label' => esc_html__('Opacity', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0.1, 'max' => 1, 'step' => 0.01, ], ], 'default' => [ 'size' => 1, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-opacity: {{SIZE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_blur', [ 'label' => esc_html__('Blur', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 20, 'step' => 1, ], ], 'default' => [ 'size' => 0, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-blur: {{SIZE}}px;', ], 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_easing', [ 'label' => esc_html__('Animation Easing', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'linear' => esc_html__('Linear', 'king-addons'), 'ease' => esc_html__('Ease', 'king-addons'), 'ease-in-out' => esc_html__('Ease In Out', 'king-addons'), 'ease-in' => esc_html__('Ease In', 'king-addons'), 'ease-out' => esc_html__('Ease Out', 'king-addons'), ], 'default' => 'ease-in-out', 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-easing: {{VALUE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_enable_animation' => 'yes', ], ] ); $element->add_control( 'kng_agm_angle', [ 'label' => esc_html__('Gradient Angle', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['deg'], 'range' => [ 'deg' => [ 'min' => 0, 'max' => 360, 'step' => 5, ], ], 'default' => [ 'size' => 135, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-angle: {{SIZE}}deg;', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_type' => 'gradient', ], ] ); $element->add_control( 'kng_agm_bg_size', [ 'label' => esc_html__('Background Size', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['%'], 'range' => [ '%' => [ 'min' => 100, 'max' => 400, 'step' => 10, ], ], 'default' => [ 'size' => 200, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-bg-size: {{SIZE}}%;', ], 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_z_index', [ 'label' => esc_html__('Z-Index', 'king-addons'), 'type' => Controls_Manager::NUMBER, 'min' => -1, 'max' => 10, 'step' => 1, 'default' => 0, 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes::before, {{WRAPPER}}.kng-agm-bg-yes::after' => 'z-index: {{VALUE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_noise', [ 'label' => esc_html__('Noise Overlay', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'prefix_class' => 'kng-agm-noise-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_noise_amount', [ 'label' => esc_html__('Noise Amount', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0, 'max' => 0.6, 'step' => 0.01, ], ], 'default' => [ 'size' => 0.18, ], 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-noise-opacity: {{SIZE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_noise' => 'yes', ], ] ); $element->add_control( 'kng_agm_noise_type', [ 'label' => esc_html__('Noise Pattern', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'grain' => esc_html__('Grain', 'king-addons'), 'lines' => esc_html__('Lines', 'king-addons'), 'dots' => esc_html__('Dots', 'king-addons'), 'crosshatch' => esc_html__('Crosshatch', 'king-addons'), ], 'default' => 'grain', 'prefix_class' => 'kng-agm-noise-type-', 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_noise' => 'yes', ], ] ); $element->add_control( 'kng_agm_custom_colors_heading', [ 'label' => esc_html__('Custom Colors', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_use_custom_colors', [ 'label' => esc_html__('Use Custom Colors', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'prefix_class' => 'kng-agm-custom-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_color_1', [ 'label' => esc_html__('Color 1', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#0b1020', 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-color-1: {{VALUE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_use_custom_colors' => 'yes', ], ] ); $element->add_control( 'kng_agm_color_2', [ 'label' => esc_html__('Color 2', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#3dd6d0', 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-color-2: {{VALUE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_use_custom_colors' => 'yes', ], ] ); $element->add_control( 'kng_agm_color_3', [ 'label' => esc_html__('Color 3', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#5878ff', 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-color-3: {{VALUE}};', ], 'condition' => [ 'kng_agm_enable' => 'yes', 'kng_agm_use_custom_colors' => 'yes', ], ] ); $element->add_control( 'kng_agm_adaptive', [ 'label' => esc_html__('Adaptive Performance', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'prefix_class' => 'kng-agm-adaptive-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_disable_tablet', [ 'label' => esc_html__('Disable on Tablet', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'prefix_class' => 'kng-agm-disable-tablet-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_disable_mobile', [ 'label' => esc_html__('Disable on Mobile', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'prefix_class' => 'kng-agm-disable-mobile-', 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->end_controls_section(); if ($this->can_use_pro()) { $this->add_pro_controls($element); } else { Core::renderProFeaturesSection( $element, Controls_Manager::TAB_STYLE, Controls_Manager::RAW_HTML, 'animated-gradient-mesh-background', [ esc_html__('Scroll driven animation', 'king-addons'), esc_html__('Blend modes', 'king-addons'), esc_html__('Multi-layer presets', 'king-addons'), esc_html__('Export CSS + fallback', 'king-addons'), ] ); } } private function add_pro_controls(Element_Base $element): void { $element->start_controls_section( 'kng_agm_background_pro_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON_PRO . esc_html__('Animated Gradient / Mesh (Pro)', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'kng_agm_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_blend_mode', [ 'label' => esc_html__('Blend Mode', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'normal' => esc_html__('Normal', 'king-addons'), 'multiply' => esc_html__('Multiply', 'king-addons'), 'screen' => esc_html__('Screen', 'king-addons'), 'overlay' => esc_html__('Overlay', 'king-addons'), 'soft-light' => esc_html__('Soft Light', 'king-addons'), ], 'default' => 'normal', 'selectors' => [ '{{WRAPPER}}.kng-agm-bg-yes' => '--kng-agm-blend-mode: {{VALUE}};', ], ] ); $element->add_control( 'kng_agm_scroll_heading', [ 'label' => esc_html__('Scroll Driven Animation', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $element->add_control( 'kng_agm_scroll_mode', [ 'label' => esc_html__('Scroll Sync', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'off' => esc_html__('Off', 'king-addons'), 'section' => esc_html__('Section Scroll', 'king-addons'), 'page' => esc_html__('Page Scroll', 'king-addons'), 'hybrid' => esc_html__('Hybrid', 'king-addons'), ], 'default' => 'off', ] ); $element->add_control( 'kng_agm_scroll_easing', [ 'label' => esc_html__('Scroll Easing', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'linear' => esc_html__('Linear', 'king-addons'), 'ease' => esc_html__('Ease', 'king-addons'), 'parallax' => esc_html__('Parallax', 'king-addons'), ], 'default' => 'linear', 'condition' => [ 'kng_agm_scroll_mode!' => 'off', ], ] ); $element->add_control( 'kng_agm_scroll_start', [ 'label' => esc_html__('Scroll Start', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['%'], 'range' => [ '%' => [ 'min' => 0, 'max' => 100, 'step' => 1, ], ], 'default' => [ 'size' => 0, ], 'condition' => [ 'kng_agm_scroll_mode!' => 'off', ], ] ); $element->add_control( 'kng_agm_scroll_end', [ 'label' => esc_html__('Scroll End', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['%'], 'range' => [ '%' => [ 'min' => 0, 'max' => 100, 'step' => 1, ], ], 'default' => [ 'size' => 100, ], 'condition' => [ 'kng_agm_scroll_mode!' => 'off', ], ] ); $element->add_control( 'kng_agm_scroll_reduce_mobile', [ 'label' => esc_html__('Reduce on Mobile', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'kng_agm_scroll_mode!' => 'off', ], ] ); $element->add_control( 'kng_agm_layers_heading', [ 'label' => esc_html__('Layers', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $repeater = new Repeater(); $repeater->add_control( 'enabled', [ 'label' => esc_html__('Enable Layer', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $repeater->add_control( 'type', [ 'label' => esc_html__('Type', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'gradient' => esc_html__('Gradient', 'king-addons'), 'mesh' => esc_html__('Mesh', 'king-addons'), ], 'default' => 'mesh', ] ); $repeater->add_control( 'preset', [ 'label' => esc_html__('Preset', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_preset_options(), 'default' => 'aurora', ] ); $repeater->add_control( 'use_custom_colors', [ 'label' => esc_html__('Custom Colors', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', ] ); $repeater->add_control( 'color_1', [ 'label' => esc_html__('Color 1', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#3dd6d0', 'condition' => [ 'use_custom_colors' => 'yes', ], ] ); $repeater->add_control( 'color_2', [ 'label' => esc_html__('Color 2', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#5878ff', 'condition' => [ 'use_custom_colors' => 'yes', ], ] ); $repeater->add_control( 'color_3', [ 'label' => esc_html__('Color 3', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#0b1020', 'condition' => [ 'use_custom_colors' => 'yes', ], ] ); $repeater->add_control( 'opacity', [ 'label' => esc_html__('Opacity', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 0.05, 'max' => 1, 'step' => 0.01, ], ], 'default' => [ 'size' => 0.7, ], ] ); $repeater->add_control( 'blur', [ 'label' => esc_html__('Blur', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 40, 'step' => 1, ], ], 'default' => [ 'size' => 0, ], ] ); $repeater->add_control( 'speed', [ 'label' => esc_html__('Speed', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 1, 'max' => 100, 'step' => 1, ], ], 'default' => [ 'size' => 35, ], ] ); $repeater->add_control( 'direction', [ 'label' => esc_html__('Direction', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'left-right' => esc_html__('Left to Right', 'king-addons'), 'right-left' => esc_html__('Right to Left', 'king-addons'), 'top-bottom' => esc_html__('Top to Bottom', 'king-addons'), 'bottom-top' => esc_html__('Bottom to Top', 'king-addons'), 'diag-lr' => esc_html__('Diagonal (Left)', 'king-addons'), 'diag-rl' => esc_html__('Diagonal (Right)', 'king-addons'), ], 'default' => 'left-right', ] ); $repeater->add_control( 'blend_mode', [ 'label' => esc_html__('Blend Mode', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'normal' => esc_html__('Normal', 'king-addons'), 'multiply' => esc_html__('Multiply', 'king-addons'), 'screen' => esc_html__('Screen', 'king-addons'), 'overlay' => esc_html__('Overlay', 'king-addons'), 'soft-light' => esc_html__('Soft Light', 'king-addons'), ], 'default' => 'normal', ] ); $repeater->add_control( 'size', [ 'label' => esc_html__('Scale', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['%'], 'range' => [ '%' => [ 'min' => 120, 'max' => 260, 'step' => 5, ], ], 'default' => [ 'size' => 200, ], ] ); $element->add_control( 'kng_agm_layers', [ 'label' => esc_html__('Layer Presets', 'king-addons'), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => '{{ preset }}', ] ); $element->add_control( 'kng_agm_export_heading', [ 'label' => esc_html__('Export', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $element->add_control( 'kng_agm_export_enable', [ 'label' => esc_html__('Enable Export Panel', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $element->add_control( 'kng_agm_export_fallback', [ 'label' => esc_html__('Include Fallback', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'kng_agm_export_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_export_reduced_motion', [ 'label' => esc_html__('Include Reduced Motion', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'kng_agm_export_enable' => 'yes', ], ] ); $element->add_control( 'kng_agm_export_note', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => '