HEX
Server: LiteSpeed
System: Linux premium221.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User: madepabj (2566)
PHP: 8.3.26
Disabled: NONE
Upload Files
File: //home/madepabj/www/wp-content/themes/rehub-theme/functions/el_functions.php
<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>
<?php
// Enqueue Scripts
add_action( 'elementor/preview/enqueue_scripts', function () {
    //wp_enqueue_script('modulobox');
    wp_enqueue_script('gsap');
    wp_enqueue_script('scrolltrigger');
    wp_enqueue_script('gsapsplittext');
    wp_enqueue_script('gsapsvgdraw');
    wp_enqueue_script('gsapsvgpath');
    wp_enqueue_script('gsapsvgpathhelper');
    wp_enqueue_script('zeroclipboard');
    wp_enqueue_script('rehub-elementor', get_template_directory_uri() . '/rehub-elementor/js/custom-elementor.js', array('jquery'), '2.2', true);
});   

add_action( 'elementor/elements/categories_registered', function( $elements_manager ) {
     $elements_manager->add_category( 'rehub-category', [ 'title' => esc_html__( 'Rehub Woocommerce Modules', 'rehub-theme' ), 'icon' => 'eicon-woocommerce' ] );
     $elements_manager->add_category( 'content-modules', [ 'title' => esc_html__( 'Rehub Post Modules', 'rehub-theme' ) ] );
     $elements_manager->add_category( 'deal-helper', [ 'title' => esc_html__( 'Rehub Deal/Coupon Modules', 'rehub-theme' ) ] );
     $elements_manager->add_category( 'helpler-modules', [ 'title' => esc_html__( 'Rehub Helper Modules', 'rehub-theme' ) ] );  
    $elements_manager->add_category( 'rhwow-modules', [ 'title' => esc_html__( 'Rehub WOW Animations', 'rehub-theme' ) ] );     
});

// Ajax general callback methods  and control
require_once (locate_template('rehub-elementor/controls/ajax-callbacks.php'));
function register_rehub_selectajax_control( $controls_manager ) {
    require_once (locate_template('rehub-elementor/controls/select2ajax-control.php'));
    $controls_manager->register( new Select2Ajax_Control );
}
add_action( 'elementor/controls/register', 'register_rehub_selectajax_control' );

add_action( 'init', function () {

    // Abstracts
    require_once (rh_locate_template('rehub-elementor/abstracts/content-base-widget.php'));

    // Widgets
    if(class_exists('Woocommerce')){
        // Abstracts
        require_once (rh_locate_template('rehub-elementor/abstracts/woo-base-widget.php')); 

        require_once (rh_locate_template('rehub-elementor/wpsm-woogrid.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-woocolumns.php'));       
        require_once (rh_locate_template('rehub-elementor/wpsm-woorows.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-woolist.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-woofeatured.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-woocarousel.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-woocomparebars.php'));
        require_once (rh_locate_template('rehub-elementor/wpsm-wooday.php'));
    }

    require_once (rh_locate_template('rehub-elementor/wpsm_columngrid.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-newslist.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-regularblog.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-masonrygrid.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-simplelist.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-postfeatured.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-news-with-thumbs.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-news-ticker.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm_coloredgrid.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-3col-grid.php'));        
    
    require_once (rh_locate_template('rehub-elementor/wpsm-deallist.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-dealgrid.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-dealcarousel.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-reviewlist.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-offerbox.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-CEbox.php'));

    require_once (rh_locate_template('rehub-elementor/wpsm-hover-banner.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-theme.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-taxarchive.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-videolist.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-catbox.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-searchbox.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-cardbox.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-getter.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-buttonpopup.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-versustable.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-countdown.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-itinerary.php'));    
    require_once (rh_locate_template('rehub-elementor/wpsm-reviewbox.php')); 
    require_once (rh_locate_template('rehub-elementor/wpsm-tabevery.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-allcarousel.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-svgshape.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-canvas.php'));  
    require_once (rh_locate_template('rehub-elementor/wpsm-particle.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-3dmodel.php'));
    require_once (rh_locate_template('rehub-elementor/wpsm-lottie.php'));
},11); 

// Header and footer locations
function reh_prefix_register_elementor_locations( $elementor_theme_manager ) {
    $elementor_theme_manager->register_location( 'header' );
    $elementor_theme_manager->register_location( 'footer' );
}
add_action( 'elementor/theme/register_locations', 'reh_prefix_register_elementor_locations' );


/*add_action('elementor/widgets/widgets_registered', function($widgets_manager){
    $elementor_widget_blacklist = array('star-rating');
    foreach($elementor_widget_blacklist as $widget_name){
        $widgets_manager->unregister_widget_type($widget_name);
    }
}, 15);*/

// Register icons and styles for Elementor
add_action( 'elementor/editor/before_enqueue_scripts', function() {
    if ( ! defined( 'ELEMENTOR_PRO_VERSION' ) ) {
        wp_enqueue_style('elprostyle', get_template_directory_uri() . '/css/elpro.css', array(), '1.1');
    }
    wp_enqueue_style( 'rehubicons', get_template_directory_uri() . '/iconstyle.css', array(), RH_MAIN_THEME_VERSION);
    wp_register_script('elflexslider', get_template_directory_uri() . '/js/jquery.flexslider-min.js', array('jquery'), '2.7.4', true);
    wp_register_script('elflexinit', get_template_directory_uri() . '/js/flexinit.js', array('jquery', 'flexslider'), '2.2.2', true);
    wp_register_style('elflexslider', get_template_directory_uri() . '/css/flexslider.css', array('rhstyle'), '2.2');
    wp_register_script('elrhvideocanvas', get_template_directory_uri() . '/js/videocanvas.js', array('jquery', 'rhinview'), '1.0.0', true );
    wp_register_script('elrhblobcanvas', get_template_directory_uri() . '/js/blobcanvas.js', array('jquery', 'gsap'), '1.0.0', true );

} );   

add_filter('elementor/icons_manager/native', 'rh_change_native_fa', 99);
function rh_change_native_fa($tabs){
    $newicons = [
        'rhicons' => [
            'name' => 'rhicons',
            'label' => 'Rehub Icons',
            'url' => '',
            'enqueue' => '',
            'prefix' => 'rhi-',
            'displayPrefix' => 'rhicon',
            'labelIcon' => 'rhicon rhi-font',
            'ver' => '5.9.0',
            'fetchJson' => get_template_directory_uri() . '/rehub-elementor/solid.js',
            'native' => true,
        ]
    ];
    $tabs += $newicons;
    return $tabs;
}

add_action( 'elementor/frontend/widget/before_render', 'RH_el_elementor_frontend' );
add_action( 'elementor/frontend/section/before_render', 'RH_el_elementor_frontend_section' );
add_action( 'elementor/element/section/section_advanced/after_section_end', 'RH_custom_section_elementor', 10, 2 );
add_action( 'elementor/element/common/_section_responsive/after_section_end', 'RH_parallax_el_elementor', 10, 2 );
add_action( 'elementor/element/html/section_title/after_section_end', 'RH_el_html_add_custom', 10, 2 );
add_action( 'elementor/widget/render_content', 'RH_el_custom_widget_render', 10, 2 );
add_filter('elementor/controls/animations/additional_animations', 'RH_additional_el_annimation');
add_filter( 'elementor/widget/print_template', 'rh_el_custom_print_template', 10, 2 );
add_filter('elementor/image_size/get_attachment_image_html', 'rh_el_add_lazy_load_images',10,4);


function RH_custom_section_elementor( $obj, $args ) {

    $obj->start_controls_section(
        'section_rh_stickyel',
        array(
            'label' => esc_html__( 'RH Smart Section and Background', 'rehub-theme' ),
            'tab'   => Elementor\Controls_Manager::TAB_ADVANCED,
        )
    );

    $obj->add_control(
        'rh_stickyel_section_sticky',
        array(
            'label'        => esc_html__( 'Enable smart scroll', 'rehub-theme' ),
            'description' => esc_html__( 'You must have minimum two columns. Smart scroll is visible only on frontend site and not visible in Editor mode of Elementor', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'true',
            'prefix_class' => 'rh-elementor-sticky-',
        )
    );

    $obj->add_control(
        'rh_stickyel_top_spacing',
        array(
            'label'   => esc_html__( 'Top Spacing', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 500,
            'step'    => 1,
            'condition' => array(
                'rh_stickyel_section_sticky' => 'true',
            ),
        )
    );

    $obj->add_control(
        'rh_stickyel_bottom_spacing',
        array(
            'label'   => esc_html__( 'Bottom Spacing', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 500,
            'step'    => 1,
            'condition' => array(
                'rh_stickyel_section_sticky' => 'true',
            ),
        )
    );

    $obj->add_control(
        'rh_parallax_bg',
        array(
            'label'        => esc_html__( 'Enable parallax for background image', 'rehub-theme' ),
            'description' => esc_html__( 'Add background in Style section', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'true',
            'prefix_class' => 'rh-parallax-bg-',
        )
    );

    $obj->add_control(
        'rh_parallax_bg_speed',
        array(
            'label'   => esc_html__( 'Parallax speed', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 200,
            'step'    => 1,
            'default' => 10,
            'condition' => array(
                'rh_parallax_bg' => 'true',
            ),
            'prefix_class' => 'rh-parallax-bg-speed-',
        )
    );  

    $obj->add_control(
        'rh_lazy_bg',[
            'label' => esc_html__( 'Lazy load background', 'rehub-theme' ),
            'type' => Elementor\Controls_Manager::MEDIA,
            'selectors' => [
                '.elementor-editor-active {{WRAPPER}}' => 'background-image: url("{{URL}}");',
                '{{WRAPPER}}.lazy-bg-loaded' => 'background-image: url("{{URL}}");',
            ],

        ]
    );

    $obj->add_control(
        'rh_lazy_bg_c',[
        'label' => esc_html__( 'Color', 'rehub-theme' ),
        'type' => Elementor\Controls_Manager::COLOR,
        'default' => '',
        'selectors' => [
            '{{WRAPPER}}' => 'background-color: {{VALUE}};',
        ],
        'condition' => [
            'rh_lazy_bg[url]!' => '',
        ],
    ]);

    $obj->add_control(
        'rh_lazy_bg_pos',[
            'label' => esc_html__( 'Position', 'rehub-theme' ),
            'type' => Elementor\Controls_Manager::SELECT,
            'default' => '',
            'options' => [
                '' => esc_html__( 'Default', 'rehub-theme' ),
                'top left' => esc_html__( 'Top Left', 'rehub-theme' ),
                'top center' => esc_html__( 'Top Center', 'rehub-theme' ),
                'top right' => esc_html__( 'Top Right', 'rehub-theme' ),
                'center left' => esc_html__( 'Center Left', 'rehub-theme' ),
                'center center' => esc_html__( 'Center Center', 'rehub-theme' ),
                'center right' => esc_html__( 'Center Right', 'rehub-theme' ),
                'bottom left' => esc_html__( 'Bottom Left', 'rehub-theme' ),
                'bottom center' => esc_html__( 'Bottom Center', 'rehub-theme' ),
                'bottom right' => esc_html__( 'Bottom Right', 'rehub-theme' ),
            ],
            'selectors' => [
                '{{WRAPPER}}' => 'background-position: {{VALUE}};',
            ],
            'condition' => [
                'rh_lazy_bg[url]!' => '',
            ],
        ]
    ); 

    $obj->add_control(
        'rh_lazy_bg_att',[
        'label' => esc_html__( 'Attachment', 'rehub-theme' ),
        'type' => Elementor\Controls_Manager::SELECT,
        'default' => '',
        'options' => [
            '' => esc_html__( 'Default', 'rehub-theme' ),
            'scroll' => esc_html__( 'Scroll', 'rehub-theme' ),
            'fixed' => esc_html__( 'Fixed', 'rehub-theme' ),
        ],
        'selectors' => [
            '{{WRAPPER}}' => 'background-attachment: {{VALUE}};',
        ],
        'condition' => [
            'rh_lazy_bg[url]!' => '',
        ],
    ]);   

    $obj->add_control(
        'rh_lazy_bg_repeat',[
        'label' => esc_html__( 'Repeat', 'rehub-theme' ),
        'type' => Elementor\Controls_Manager::SELECT,
        'default' => '',
        'options' => [
            '' => esc_html__( 'Default', 'rehub-theme' ),
            'no-repeat' => esc_html__( 'No-repeat', 'rehub-theme' ),
            'repeat' => esc_html__( 'Repeat', 'rehub-theme' ),
            'repeat-x' => esc_html__( 'Repeat-x', 'rehub-theme' ),
            'repeat-y' => esc_html__( 'Repeat-y', 'rehub-theme' ),
        ],
        'selectors' => [
            '{{WRAPPER}}' => 'background-repeat: {{VALUE}};',
        ],
        'condition' => [
            'rh_lazy_bg[url]!' => '',
        ],
    ]);

    $obj->add_control(
        'rh_lazy_bg_size',[
        'label' => esc_html__( 'Size', 'rehub-theme' ),
        'type' => Elementor\Controls_Manager::SELECT,
        'default' => '',
        'options' => [
            '' => esc_html__( 'Default', 'rehub-theme' ),
            'auto' => esc_html__( 'Auto', 'rehub-theme' ),
            'cover' => esc_html__( 'Cover', 'rehub-theme' ),
            'contain' => esc_html__( 'Contain', 'rehub-theme' ),
        ],
        'selectors' => [
            '{{WRAPPER}}' => 'background-size: {{VALUE}};',
        ],
        'condition' => [
            'rh_lazy_bg[url]!' => '',
        ],
    ]);

    $obj->end_controls_section();
} 
function RH_parallax_el_elementor( $obj, $args ) {

    $obj->start_controls_section(
        'rh_parallax_el_section',
        array(
            'label' => esc_html__( 'Re:Hub Quick Effects', 'rehub-theme' ),
            'tab'   => Elementor\Controls_Manager::TAB_ADVANCED,
        )
    );

    $obj->add_control(
        'rh_infinite_rotate',
        array(
            'label'        => esc_html__( 'Enable Infinite rotating', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'infinite',               
            'prefix_class' => 'rotate',
        )
    ); 
    $obj->add_control(
        'rh_infinite_leftright',
        array(
            'label'        => esc_html__( 'Enable Infinite Left to right', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'infinite',               
            'prefix_class' => 'leftright',
        )
    ); 
    $obj->add_control(
        'rh_infinite_updownright',
        array(
            'label'        => esc_html__( 'Enable Infinite Up and Down', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'infinite',               
            'prefix_class' => 'upanddown',
        )
    );
    $obj->add_control(
        'rh_infinite_fastshake',
        array(
            'label'        => esc_html__( 'Enable Infinite Shake', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'Shake',               
            'prefix_class' => 'fast',
        )
    );
    
    $obj->add_control( 'rh_infinite_speed', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Animation Speed', 'rehub-theme' ),
        'options'     => [
            '5'   => '5s',
            '10'   =>  '10s',
            '15'   =>  '15s',
            '20'   =>  '20s',
            '25'   =>  '25s',
            '50'   =>  '50s',
            '100'   =>  '100s',                        
            '0'   =>  '0s',
        ],               
        'prefix_class' => 'animationspeed',
    ]); 
    $obj->add_control(
        'rh_perspective_boxshadow',
        array(
            'label'        => esc_html__( 'Enable Perspective Box shadow', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => '1',
            'selectors' => [
                '{{WRAPPER}} > .elementor-widget-container' => 'box-shadow: 0 1px 0 #ccc, 0 2px 0 #ccc, 0 3px 0 #ccc, 0 4px 0 #ccc, 0 5px 0 #ccc, 0 6px 0 #ccc, 0 7px 0 #ccc, 0 8px 0 #ccc, 0 9px 0 #ccc, 0 50px 30px rgba(0,0,0,.25)',
            ],                
        )
    ); 
    $obj->add_control(
        'rh_perspective_textshadow',
        array(
            'label'        => esc_html__( 'Enable Perspective Text shadow', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => '1',
            'selectors' => [
                '{{WRAPPER}} > .elementor-widget-container' => 'text-shadow: 0 1px 0 #ccc, 0 2px 0 #ccc, 0 3px 0 #ccc, 0 4px 0 #ccc, 0 5px 0 #ccc, 0 6px 0 #ccc, 0 7px 0 #ccc, 0 8px 0 #ccc, 0 9px 0 #ccc, 0 50px 30px rgba(0,0,0,.25)',
            ],                
        )
    );                
    $obj->add_control(
        'rh_parallax_circle',
        array(
            'label'   => esc_html__( 'Make shape', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 3000,
            'step'    => 1,
            'selectors' => [
                '{{WRAPPER}} > .elementor-widget-container' => 'width: {{VALUE}}px;height: {{VALUE}}px;display: flex; align-items: center;justify-content: center;',
            ],
        )
    );  
    $obj->add_control(
        'rh_make_rotate',
        array(
            'label'   => esc_html__( 'Rotation (deg)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 360,
            'step'    => 1,
            'selectors' => [
                '{{WRAPPER}} > .elementor-widget-container' => 'transform: rotate({{VALUE}}deg);',
            ],
        )
    ); 

    $obj->end_controls_section(); 

    $obj->start_controls_section(
        'rh_gsap_section',
        array(
            'label' => esc_html__( 'Re:Hub WOW Animations', 'rehub-theme' ),
            'tab'   => Elementor\Controls_Manager::TAB_ADVANCED,
        )
    ); 

    $obj->add_control(
        'rh_gsap',
        array(
            'label'        => esc_html__( 'Enable Advanced animations', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'true',
        )
    );
    $obj->start_controls_tabs( 'gsapintabs', ['condition'=> ['rh_gsap' => 'true' ]] );
    $obj->start_controls_tab(
        'gsapftab',
        [
            'label' => esc_html__( 'Init Transform', 'rehub-theme' ),
        ]
    );
    $obj->add_control(
        'rh_gsap_x',
        array(
            'label'   => esc_html__( 'Translate X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -5000,
            'max'     => 5000,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
            
        )
    ); 

    $obj->add_control(
        'rh_gsap_y',
        array(
            'label'   => esc_html__( 'Translate Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -5000,
            'max'     => 5000,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );  

    $obj->add_control(
        'rh_gsap_xo',
        array(
            'label'   => esc_html__( 'Translate X (%)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -1000,
            'max'     => 1000,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_yo',
        array(
            'label'   => esc_html__( 'Translate Y (%)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -1000,
            'max'     => 1000,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_z',
        array(
            'label'   => esc_html__( 'Translate Z', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -5000,
            'max'     => 5000,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_r',
        array(
            'label'   => esc_html__( 'Rotation', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_rx',
        array(
            'label'   => esc_html__( 'Rotation X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_ry',
        array(
            'label'   => esc_html__( 'Rotation Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 
 

    $obj->add_control(
        'rh_gsap_scale',
        array(
            'label'   => esc_html__( 'Scale', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_scale_x',
        array(
            'label'   => esc_html__( 'Scale X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_scale_y',
        array(
            'label'   => esc_html__( 'Scale Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );

    $obj->add_control(
        'rh_gsap_width',
        array(
            'label'   => esc_html__( 'Width', 'rehub-theme' ),
            'description' => 'set with px, %, em',
            'type'    => Elementor\Controls_Manager::TEXT,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_height',
        array(
            'label'   => esc_html__( 'Height', 'rehub-theme' ),
            'description' => 'set with px, %, em',
            'type'    => Elementor\Controls_Manager::TEXT,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_boxshadow',
        array(
            'label'   => esc_html__( 'Css Box Shadow value', 'rehub-theme' ),
            'description' => 'example: inset 100px 0 0 0 #cc0000',
            'type'    => Elementor\Controls_Manager::TEXT,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );

    $obj->add_control(
        'rh_gsap_opacity',
        array(
            'label'   => esc_html__( 'Opacity', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 100,
            'step'    => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_gsap_bg', [
            'label' => __('Background Color', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::COLOR,
            'condition' => [
                'rh_gsap' => 'true'
            ]
        ]
    );
    $obj->add_control( 'rh_gsap_origin', [
        'label' => esc_html__( 'Transform Origin', 'rehub-theme' ),
        'label_block'  => true,
        'description' => 'left, right, top, bottom...',
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => [
            'rh_gsap' => 'true'
        ],
    ]);
    $obj->end_controls_tab();
    $obj->start_controls_tab(
        'gsapstab',
        [
            'label' => esc_html__( 'SVG MotionPath', 'rehub-theme' ),
        ]
    );
    $obj->add_control( 'rh_gsap_path', [
        'label' => esc_html__( 'Set path', 'rehub-theme' ),
        'description' => esc_html__('can be ID (place with #), svg path coordinates. Also, type here word "custom" to enable Path draw helper. Alt click will add new point. Del will delete it. Then, click on Copy Motion Path button in bottom of page and insert path parameter here.', 'rehub-theme'),
        'label_block'  => true,
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition'=> ['rh_gsap' => 'true' ],
    ]); 
    $obj->add_control( 'rh_gsap_path_align', [
        'label' => esc_html__( 'Align ID', 'rehub-theme' ),
        'description' => esc_html__('By default, element is alighned by itself, but you can set id of path or another element', 'rehub-theme'),
        'label_block'  => true,
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition'=> ['rh_gsap' => 'true', 'rh_gsap_path!' => '' ],
    ]); 
    $obj->add_control(
        'rh_gsap_path_orient',
        array(
            'label'        => esc_html__( 'Orient along path', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition'=> ['rh_gsap' => 'true', 'rh_gsap_path!' => '' ],
        )
    );
    $obj->add_control(
        'rh_gsap_path_align_x',
        [
            'label' => __( 'Align origin point X', 'rehub-theme' ),
            'type' => \Elementor\Controls_Manager::SLIDER,
            'default' => [
                'size' => 0.5,
            ],
            'label_block' => true,
            'range' => [
                'px' => [
                    'min' => 0,
                    'max' => 1,
                    'step' => 0.1,
                ],
            ],
            'condition'=> ['rh_gsap' => 'true', 'rh_gsap_path!' => '' ],
        ]
    );
    $obj->add_control(
        'rh_gsap_path_align_y',
        [
            'label' => __( 'Align origin point Y', 'rehub-theme' ),
            'type' => \Elementor\Controls_Manager::SLIDER,
            'default' => [
                'size' => 0.5,
            ],
            'label_block' => true,
            'range' => [
                'px' => [
                    'min' => 0,
                    'max' => 1,
                    'step' => 0.1,
                ],
            ],
            'condition'=> ['rh_gsap' => 'true', 'rh_gsap_path!' => '' ],
        ]
    );
    $obj->end_controls_tab();
    $obj->end_controls_tabs();

    $obj->add_control(
        'rhhrtabsone',
        [
            'type' => \Elementor\Controls_Manager::DIVIDER,
            'condition'=> [ 'rh_gsap' => 'true'],
        ]
    ); 

    $obj->start_controls_tabs( 'gsapopttabs', ['condition'=> ['rh_gsap' => 'true' ]] );
    $obj->start_controls_tab(
        'gsapttab',
        [
            'label' => esc_html__( 'Animation Option', 'rehub-theme' ),
        ]
    );
    $obj->add_control(
        'rh_gsap_duration',
        array(
            'label'   => esc_html__( 'Duration (s)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0.1,
            'max'     => 60,
            'step'    => 0.1,
            'default' => 1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 

    $obj->add_control(
        'rh_gsap_delay',
        array(
            'label'   => esc_html__( 'Delay (s)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0.1,
            'max'     => 20,
            'step'    => 0.1,
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );

    $obj->add_control( 'rh_gsap_ease', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Ease type', 'rehub-theme' ),
        'options'     => [
            'power0-none'   =>  esc_html__('Linear', 'rehub-theme'),
            'power1-in'   =>  esc_html__('Power 1 in', 'rehub-theme'),
            'power1-out'   =>  esc_html__('Power 1 out', 'rehub-theme'),
            'power1-inOut'   =>  esc_html__('Power 1 inOut', 'rehub-theme'),
            'power2-in'   =>  esc_html__('Power 2 in', 'rehub-theme'),
            'power2-out'   =>  esc_html__('Power 2 out', 'rehub-theme'),
            'power2-inOut'   =>  esc_html__('Power 2 inOut', 'rehub-theme'),
            'power3-in'   =>  esc_html__('Power 3 in', 'rehub-theme'),
            'power3-out'   =>  esc_html__('Power 3 out', 'rehub-theme'),
            'power3-inOut'   =>  esc_html__('Power 3 inOut', 'rehub-theme'),
            'power4-in'   =>  esc_html__('Power 4 in', 'rehub-theme'),
            'power4-out'   =>  esc_html__('Power 4 out', 'rehub-theme'),
            'power4-inOut'   =>  esc_html__('Power 4 inOut', 'rehub-theme'),
            'back-in'   =>  esc_html__('Back in', 'rehub-theme'),
            'back-out'   =>  esc_html__('Back out', 'rehub-theme'),
            'back-inOut'   =>  esc_html__('Back inOut', 'rehub-theme'),
            'elastic-in'   =>  esc_html__('elastic in', 'rehub-theme'),
            'elastic-out'   =>  esc_html__('elastic out', 'rehub-theme'),
            'elastic-inOut'   =>  esc_html__('elastic inOut', 'rehub-theme'),
            'circ-in'   =>  esc_html__('circ in', 'rehub-theme'),
            'circ-out'   =>  esc_html__('circ out', 'rehub-theme'),
            'circ-inOut'   =>  esc_html__('circ inOut', 'rehub-theme'),
            'expo-in'   =>  esc_html__('expo in', 'rehub-theme'),
            'expo-out'   =>  esc_html__('expo out', 'rehub-theme'),
            'expo-inOut'   =>  esc_html__('expo inOut', 'rehub-theme'),
            'cine-in'   =>  esc_html__('cine in', 'rehub-theme'),
            'cine-out'   =>  esc_html__('cine out', 'rehub-theme'),
            'cine-inOut'   =>  esc_html__('cine inOut', 'rehub-theme'),
        ],
        'condition' => array(
            'rh_gsap' => 'true',
        ),
    ]);

    $obj->add_control(
        'rh_gsap_infinite',
        array(
            'label'        => esc_html__( 'Enable infinite', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_gsap_yoyo',
        array(
            'label'        => esc_html__( 'Enable Yoyo style', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'default' => 'yes',
            'condition'=> [ 'rh_gsap_infinite' => 'yes', 'rh_gsap' => 'true' ],
        )
    );
    $obj->add_control(
        'rh_gsap_repeatdelay',
        array(
            'label'        => esc_html__( 'Enable delay between animations', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'default' => 'yes',
            'condition'=> [ 'rh_gsap_infinite' => 'yes', 'rh_gsap' => 'true' ],
        )
    );

    $obj->add_control(
        'rh_gsap_from',
        array(
            'label'        => esc_html__( 'Set direction as FROM', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'default' => 'yes',
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        )
    ); 
    $obj->end_controls_tab();
    $obj->start_controls_tab(
        'gsapfotab',
        [
            'label' => esc_html__( 'Trigger Option', 'rehub-theme' ),
        ]
    );
    $obj->add_control( 'rh_gsap_trigger_type', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Trigger type', 'rehub-theme' ),
        'description' => esc_html__('Check documentation for available values - ', 'rehub-theme').'<a href="https://greensock.com/docs/v3/Plugins/ScrollTrigger" target="_blank">ScrollTrigger Docs</a>',
        'options'     => [
            'custom'   =>  esc_html__('Scroll trigger', 'rehub-theme'),
            'load'   =>  esc_html__('On load', 'rehub-theme'),
            'batch'   =>  esc_html__('Batch Scroll', 'rehub-theme'),
            'hover'   =>  esc_html__('On Hover', 'rehub-theme'),
            'click'   =>  esc_html__('On Click', 'rehub-theme'),
        ],
        'default' => 'custom',
        'condition' => array(
            'rh_gsap' => 'true',
        ),
    ]);

    $obj->add_control( 'rh_gsap_trigger_field', [
        'label' => esc_html__( 'Css ID of custom trigger or custom class for Batch scroll', 'rehub-theme' ),
        'description' => esc_html__('By default, animation will start when you scroll to element. You can place here custom ID for trigger or custom css class if you use Batch Scroll', 'rehub-theme'),
        'label_block'  => true,
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => ['custom', 'batch', 'hover', 'click'], 'rh_gsap' => 'true',
        ),
    ]);
    $obj->add_control( 'rh_gsap_obj_field', [
        'label' => esc_html__( 'Css ID or class where to add animation', 'rehub-theme' ),
        'description' => esc_html__('By default, will be applied to current object but you can apply to custom object', 'rehub-theme'),
        'label_block'  => true,
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => ['custom', 'load', 'hover', 'click'], 'rh_gsap' => 'true',
        ),
    ]);

    $obj->add_control(
    'rh_gsap_sc_start',
    array(
        'label'   => esc_html__( 'Trigger start', 'rehub-theme' ),
        'description' => esc_html__('By default, trigger is set to top point of element, but you can change this. Example: top center', 'rehub-theme'),
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => ['custom', 'batch'], 'rh_gsap' => 'true',
        ),
    )
    );

    $obj->add_control(
    'rh_gsap_sc_end',
    array(
        'label'   => esc_html__( 'Trigger end', 'rehub-theme' ),
        'description' => esc_html__('By default, trigger scroll end is set to bottom point of element, but you can change this. Example: +=300 will set end of trigger as 300px after start', 'rehub-theme'),
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => ['custom', 'batch'], 'rh_gsap' => 'true',
        ),
    )
    ); 

    $obj->add_control(
    'rh_gsap_batch_interval',
    array(
        'label'   => esc_html__( 'Interval between items', 'rehub-theme' ),
        'description' => esc_html__('By default, interval is 0.15, but you can set other. Use float number.', 'rehub-theme'),
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => ['batch'], 'rh_gsap' => 'true',
        ),
    )
    ); 
    $obj->add_control(
        'rh_gsap_batchrandom',
        array(
            'label'        => esc_html__( 'Enable random order', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_gsap_trigger_type' => ['batch'], 'rh_gsap' => 'true',
            ),
        )
    );    

    $obj->add_control(
    'rh_gsap_sc_dur',
    array(
        'label'   => esc_html__( 'Interpolate animation by Scroll', 'rehub-theme' ),
        'description' => esc_html__('By default, scroll will trigger full animation. If you want to play animation by scrolling, place here number of seconds for feedback. Recommended value is 1.', 'rehub-theme'),
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition' => array(
            'rh_gsap_trigger_type' => 'custom', 'rh_gsap' => 'true',
        ),
    )
    ); 

    $obj->add_control( 'rh_gsap_pinned', [
        'label' => esc_html__( 'Pin while scroll', 'rehub-theme' ),
        'type' => \Elementor\Controls_Manager::SWITCHER,
        'label_on' => __('Yes', 'rehub-theme'),
        'label_off' => __('No', 'rehub-theme'),
        'return_value' => 'yes',
        'condition' => array(
            'rh_gsap_trigger_type' => 'custom', 'rh_gsap' => 'true',
        ),
    ]); 
    $obj->add_control( 'rh_gsap_pinspace', [
        'label' => esc_html__( 'Enable overflow on pinned item', 'rehub-theme' ),
        'type' => \Elementor\Controls_Manager::SWITCHER,
        'label_on' => __('Yes', 'rehub-theme'),
        'label_off' => __('No', 'rehub-theme'),
        'return_value' => 'yes',
        'condition' => array(
            'rh_gsap_trigger_type' => 'custom', 'rh_gsap' => 'true',
        ),
    ]);
    $obj->add_control(
        'rh_gsap_sc_act', [
            'label' => __('Trigger actions', 'rehub-theme'),
            'description' => esc_html__('Default is: play pause resume reset', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::TEXT,
            'default' => '',
            'condition' => array(
                'rh_gsap_trigger_type' => 'custom', 'rh_gsap' => 'true',
            ),
        //            
        ]
    );
    $obj->add_control(
        'rh_gsap_sc_snap',
        array(
            'label'   => esc_html__( 'Scroll snap', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0.01,
            'max'     => 1,
            'step'    => 0.01,
            'condition' => array(
                'rh_gsap_trigger_type' => 'custom', 'rh_gsap' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_videoplay',
        [
            'label' => __( 'Play video on this trigger', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_gsap_trigger_type' => ['custom', 'load', 'hover', 'click'], 'rh_gsap' => 'true',
            ),
        ]
    );
    $obj->end_controls_tab();
    $obj->end_controls_tabs();

    $obj->add_control(
        'rhhr2',
        [
            'label' => __( 'Text, SVG, Stagger', 'rehub-theme' ),
            'type' => \Elementor\Controls_Manager::HEADING,
            'separator' => 'before',
            'condition' => array(
                'rh_gsap' => 'true',
            ),
        ]
    );

    $obj->add_control( 'rh_gsap_st_type', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Enable Advanced Animation', 'rehub-theme' ),
        'options'     => [
            'no'   =>  esc_html__('No', 'rehub-theme'),
            'text'   =>  esc_html__('On Text', 'rehub-theme'),
            'class'   =>  esc_html__('Stagger', 'rehub-theme'),
            'svg'   =>  esc_html__('SVG lines', 'rehub-theme'),
        ],
        'condition' => array(
            'rh_gsap' => 'true',
        ),
    ]);

    $obj->add_control( 'rh_gsap_text', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Break type for text', 'rehub-theme' ),
        'options'     => [
            'lines'   =>  esc_html__('Lines', 'rehub-theme'),
            'chars'   =>  esc_html__('Chars', 'rehub-theme'),
            'words'   =>  esc_html__('Words', 'rehub-theme'),
        ],
        'condition'=> [ 'rh_gsap_st_type' => 'text', 'rh_gsap' => 'true' ],
    ]);

    $obj->add_control( 'rh_gsap_stagger', [
        'label' => esc_html__( 'Set stagger class', 'rehub-theme' ),
        'description' => esc_html__('this will trigger animation on all elements with this class with some delay between each item', 'rehub-theme'),
        'label_block'  => true,
        'type' => \Elementor\Controls_Manager::TEXT,
        'condition'=> [ 'rh_gsap_st_type' => 'class', 'rh_gsap' => 'true' ],
    ]); 

    $obj->add_control(
        'rh_gsap_stdelay',
        array(
            'label'   => esc_html__( 'Stagger delay', 'rehub-theme' ),
            'type'    => \Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 10,
            'step'    => 0.1,
            'condition' => array(
                'rh_gsap' => 'true', 'rh_gsap_st_type!' => ''
            ),
        )
    );
    $obj->add_control(
        'rh_gsap_strandom',
        array(
            'label'        => esc_html__( 'Enable random order', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_gsap' => 'true', 'rh_gsap_st_type!' => ''
            ),
        )
    );
    if ( ! defined( 'ELEMENTOR_PRO_VERSION' ) ) {
    $gsaprepeater = new \Elementor\Repeater();
    $gsaprepeater->add_control(
        'multi_x',
        array(
            'label'   => esc_html__( 'Translate X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -5000,
            'max'     => 5000,
            'step'    => 1,
            
        )
    ); 

    $gsaprepeater->add_control(
        'multi_y',
        array(
            'label'   => esc_html__( 'Translate Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -5000,
            'max'     => 5000,
            'step'    => 1,
        )
    );  

    $gsaprepeater->add_control(
        'multi_xo',
        array(
            'label'   => esc_html__( 'Translate X (%)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -1000,
            'max'     => 1000,
            'step'    => 1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_yo',
        array(
            'label'   => esc_html__( 'Translate Y (%)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -1000,
            'max'     => 1000,
            'step'    => 1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_r',
        array(
            'label'   => esc_html__( 'Rotation', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_rx',
        array(
            'label'   => esc_html__( 'Rotation X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_ry',
        array(
            'label'   => esc_html__( 'Rotation Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => -3600,
            'max'     => 3600,
            'step'    => 1,
        )
    ); 
 

    $gsaprepeater->add_control(
        'multi_scale',
        array(
            'label'   => esc_html__( 'Scale', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_scale_x',
        array(
            'label'   => esc_html__( 'Scale X', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_scale_y',
        array(
            'label'   => esc_html__( 'Scale Y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 30,
            'step'    => 0.1,
        )
    );

    $gsaprepeater->add_control(
        'multi_width',
        array(
            'label'   => esc_html__( 'Width', 'rehub-theme' ),
            'description' => 'set with px, %, em',
            'type'    => Elementor\Controls_Manager::TEXT,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_height',
        array(
            'label'   => esc_html__( 'Height', 'rehub-theme' ),
            'description' => 'set with px, %, em',
            'type'    => Elementor\Controls_Manager::TEXT,
        )
    ); 

    $gsaprepeater->add_control(
        'multi_opacity',
        array(
            'label'   => esc_html__( 'Opacity', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 100,
            'step'    => 1,
        )
    );
    $gsaprepeater->add_control(
        'multi_bg', [
            'label' => __('Background Color', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::COLOR,
        ]
    );
    $gsaprepeater->add_control( 'multi_origin', [
        'label' => esc_html__( 'Transform Origin', 'rehub-theme' ),
        'label_block'  => true,
        'description' => 'left, right, top, bottom...',
        'type' => \Elementor\Controls_Manager::TEXT,
    ]);
    $gsaprepeater->add_control(
        'multi_from',
        array(
            'label'        => esc_html__( 'Set direction as FROM', 'rehub-theme' ),
            'type'         => \Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
        )
    ); 
    $gsaprepeater->add_control(
        'multi_duration',
        array(
            'label'   => esc_html__( 'Duration (s)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0.1,
            'max'     => 60,
            'step'    => 0.1,
            'default' => 1,
        )
    ); 
    $gsaprepeater->add_control(
        'multi_delay',
        array(
            'label'   => esc_html__( 'Delay (s)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 0.1,
            'max'     => 20,
            'step'    => 0.1,
        )
    ); 
    $gsaprepeater->add_control( 'multi_time', [
        'label' => esc_html__( 'Custom start time', 'rehub-theme' ),
        'label_block'  => true,
        'description' => '<a href="https://greensock.com/docs/v3/GSAP/Timeline">Documentation</a>',
        'type' => \Elementor\Controls_Manager::TEXT,
    ]);
    $gsaprepeater->add_control(
        'multi_hover',
        array(
            'label'        => esc_html__( 'Enable On Hover Action', 'rehub-theme' ),
            'type'         => \Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
        )
    );
    $gsaprepeater->add_control( 'multi_ease', [
        'type'        => \Elementor\Controls_Manager::SELECT,
        'label'       => esc_html__( 'Ease type', 'rehub-theme' ),
        'options'     => [
            'power0-none'   =>  esc_html__('Linear', 'rehub-theme'),
            'power1-in'   =>  esc_html__('Power 1 in', 'rehub-theme'),
            'power1-out'   =>  esc_html__('Power 1 out', 'rehub-theme'),
            'power1-inOut'   =>  esc_html__('Power 1 inOut', 'rehub-theme'),
            'power2-in'   =>  esc_html__('Power 2 in', 'rehub-theme'),
            'power2-out'   =>  esc_html__('Power 2 out', 'rehub-theme'),
            'power2-inOut'   =>  esc_html__('Power 2 inOut', 'rehub-theme'),
            'power3-in'   =>  esc_html__('Power 3 in', 'rehub-theme'),
            'power3-out'   =>  esc_html__('Power 3 out', 'rehub-theme'),
            'power3-inOut'   =>  esc_html__('Power 3 inOut', 'rehub-theme'),
            'power4-in'   =>  esc_html__('Power 4 in', 'rehub-theme'),
            'power4-out'   =>  esc_html__('Power 4 out', 'rehub-theme'),
            'power4-inOut'   =>  esc_html__('Power 4 inOut', 'rehub-theme'),
            'back-in'   =>  esc_html__('Back in', 'rehub-theme'),
            'back-out'   =>  esc_html__('Back out', 'rehub-theme'),
            'back-inOut'   =>  esc_html__('Back inOut', 'rehub-theme'),
            'elastic-in'   =>  esc_html__('elastic in', 'rehub-theme'),
            'elastic-out'   =>  esc_html__('elastic out', 'rehub-theme'),
            'elastic-inOut'   =>  esc_html__('elastic inOut', 'rehub-theme'),
            'circ-in'   =>  esc_html__('circ in', 'rehub-theme'),
            'circ-out'   =>  esc_html__('circ out', 'rehub-theme'),
            'circ-inOut'   =>  esc_html__('circ inOut', 'rehub-theme'),
            'expo-in'   =>  esc_html__('expo in', 'rehub-theme'),
            'expo-out'   =>  esc_html__('expo out', 'rehub-theme'),
            'expo-inOut'   =>  esc_html__('expo inOut', 'rehub-theme'),
            'cine-in'   =>  esc_html__('cine in', 'rehub-theme'),
            'cine-out'   =>  esc_html__('cine out', 'rehub-theme'),
            'cine-inOut'   =>  esc_html__('cine inOut', 'rehub-theme'),
        ],
    ]); 
    $gsaprepeater->add_control( 'multi_obj', [
        'label' => esc_html__( 'Custom object', 'rehub-theme' ),
        'label_block'  => true,
        'description' => 'By default, animation will be applied to current object, but you can set custom class or id of object',
        'type' => \Elementor\Controls_Manager::TEXT,
    ]);                                       
    $obj->add_control( 'rh_gsap_multi', [
        'label'    => esc_html__( 'Multiple Animations', 'rehub-theme' ),
        'type'     => \Elementor\Controls_Manager::REPEATER,
        'fields'   => $gsaprepeater->get_controls(),
        'title_field' => 'Duration - {{{ multi_duration }}}',
        'separator' => 'before',
        'prevent_empty' => false,
        'condition' => array(
            'rh_gsap' => 'true',
        ),
    ]);
}

    $obj->add_control(
        'rhhr5',
        [
            'type' => \Elementor\Controls_Manager::DIVIDER,
            'condition'=> [ 'rh_gsap' => 'true' ],
        ]
    );   

    $obj->add_control(
        'rh_reveal', [
            'label' => __('Enabled Reveal', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::SWITCHER,
            'default' => '',
            'label_on' => __('Yes', 'rehub-theme'),
            'label_off' => __('No', 'rehub-theme'),
            'return_value' => 'yes',
        //            
        ]
    );
    $obj->add_control(
        'rh_reveal_dir',
        [
            'label' => __( 'Direction', 'rehub-theme' ),
            'type' => \Elementor\Controls_Manager::SELECT,
            'default' => 'lr',
            'options' => [
                'lr' => __( 'Left to Right', 'rehub-theme' ),
                'rl' => __( 'Right to Left', 'rehub-theme' ),
                'tb' => __( 'Top to Bottom', 'rehub-theme' ),
                'bt' => __( 'Bottom to top', 'rehub-theme' ),
            ],
            'condition' => [
                'rh_reveal' => 'yes'
            ]
        ]
    );
    $obj->add_control(
        'rh_reveal_speed', [
            'label' => __('Speed', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 10,
            'step'    => 0.1,
            'default' => 1,
            'condition' => [
                'rh_reveal' => 'yes'
            ]
        ]
    );
    $obj->add_control(
        'rh_reveal_delay', [
            'label' => __('Delay', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::NUMBER,
            'min'     => 0,
            'max'     => 10,
            'step'    => 0.1,
            'condition' => [
                'rh_reveal' => 'yes'
            ]
        ]
    );
    $obj->add_control(
        'rh_reveal_bgcolor', [
            'label' => __('Color', 'rehub-theme'),
            'type' => \Elementor\Controls_Manager::COLOR,
            'default' => '#ccc',
            'selectors' => [
                '{{WRAPPER}} .rh-reveal-block' => 'background-color: {{VALUE}};',
            ],
            'condition' => [
                'rh_reveal' => 'yes'
            ]
        ]
    );
    $obj->add_control(
        'rhhrrev',
        [
            'type' => \Elementor\Controls_Manager::DIVIDER,
            'condition'=> [ 'rh_reveal' => 'yes' ],
        ]
    ); 

    $obj->add_control(
        'rh_parallax_el',
        array(
            'label'        => esc_html__( 'Enable scroll parallax effect', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'true',
        )
    );

    $obj->add_control(
        'rh_parallax_el_speed',
        array(
            'label'   => esc_html__( 'Time (ms)', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 200,
            'step'    => 1,
            'default' => 10,
            'condition' => array(
                'rh_parallax_el' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_parallax_el_strength',
        array(
            'label'   => esc_html__( 'Strength', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 1500,
            'step'    => 1,
            'default' => 100,
            'condition' => array(
                'rh_parallax_el' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_parallax_el_dir',
        array(
            'label'        => esc_html__( 'Enable reverse direction', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'default' => 'yes',
            'condition' => array(
                'rh_parallax_el' => 'true',
            ),                
        )
    ); 
    $obj->add_control(
        'rhhrelpar',
        [
            'type' => \Elementor\Controls_Manager::DIVIDER,
            'condition'=> [ 'rh_parallax_el' => 'true' ],
        ]
    ); 

    $obj->add_control(
        'rh_parlx_m_el',
        array(
            'label'        => esc_html__( 'Enable mouse move effect', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'true',
        )
    );

    $obj->add_control(
        'rh_parlx_m_el_cur',
        array(
            'label'        => esc_html__( 'Bounds by Object', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_parlx_m_el' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_parlx_restore',
        array(
            'label'        => esc_html__( 'Restore on Mouse Leave', 'rehub-theme' ),
            'type'         => Elementor\Controls_Manager::SWITCHER,
            'label_on'     => esc_html__( 'Yes', 'rehub-theme' ),
            'label_off'    => esc_html__( 'No', 'rehub-theme' ),
            'return_value' => 'yes',
            'condition' => array(
                'rh_parlx_m_el' => 'true',
                'rh_parlx_m_el_cur' => 'yes'
            ),
        )
    );

    $obj->add_control(
        'rh_parlx_m_el_speed',
        array(
            'label'   => esc_html__( 'Strength for x and y', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 200,
            'step'    => 1,
            'default' => 20,
            'condition' => array(
                'rh_parlx_m_el' => 'true',
            ),
        )
    );
    $obj->add_control(
        'rh_parlx_m_el_tilt',
        array(
            'label'   => esc_html__( 'Strength for tilt', 'rehub-theme' ),
            'type'    => Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 200,
            'step'    => 1,
            'condition' => array(
                'rh_parlx_m_el' => 'true',
            ),
        )
    );                                       

    $obj->end_controls_section();
}
function RH_el_elementor_frontend( $element) {
    if ( $element->get_settings( 'rh_gsap' ) == 'true' || $element->get_settings( 'rh_parallax_el' ) == 'true' || $element->get_settings( 'rh_reveal' ) == 'true' ) {
        wp_enqueue_script('gsap');
        wp_enqueue_script('scrolltrigger');
        wp_enqueue_script('gsapinit');
        if ( $element->get_settings( 'rh_gsap_st_type' ) == 'text' ) {
            wp_enqueue_script('gsapsplittext');
        }
        if ( $element->get_settings( 'rh_gsap_st_type' ) == 'svg') {
            wp_enqueue_script('gsapsvgdraw');
        } 
        if ( $element->get_settings( 'rh_gsap_path' ) !='') {
            wp_enqueue_script('gsapsvgpath');
        }       
    } 
 
    if ( $element->get_settings( 'rh_parlx_m_el' ) == 'true') {
        wp_enqueue_script('gsap');wp_enqueue_script('gsapinit');
    }           
    return;        
}
function RH_el_elementor_frontend_section( $element) {
    if('section' === $element->get_name()){
        if ( $element->get_settings( 'rh_stickyel_section_sticky' ) == 'true' ) {
            wp_enqueue_script('stickysidebar');
            $element->add_render_attribute( '_wrapper', array(
                'data-sticky-top-offset' => ($element->get_settings('rh_stickyel_top_spacing')  != '') ? $element->get_settings('rh_stickyel_top_spacing') : '',
                'data-sticky-bottom-offset' => ($element->get_settings('rh_stickyel_bottom_spacing')  != '') ? $element->get_settings('rh_stickyel_bottom_spacing') : '',            
            ) );
        }
        if ( $element->get_settings( 'rh_parallax_bg' ) == 'true' ) {
            wp_enqueue_script('rh_elparallax');
        }  
        $lazybg = $element->get_settings('rh_lazy_bg');
        if ( !empty($lazybg['url'])) {
            wp_enqueue_script('rhyall');
            $element->add_render_attribute( '_wrapper', 'class', array('lazy-bg') );
        }
    }       
    return;        
}
function RH_el_html_add_custom( $obj, $args ) {
    $obj->start_controls_section(
        'section_rh_custom_html',
        array(
            'label' => esc_html__( 'Custom JS, CSS', 'rehub-theme' ),
            'tab'   => Elementor\Controls_Manager::TAB_CONTENT,
        )
    );    
    $obj->add_control(
        'rh_js',
        [
            'label' => __( 'Enter your JS code', 'rehub-theme' ),
            'type' => Elementor\Controls_Manager::CODE,
            'default' => '',
            'language' => 'javascript',           
        ]
    );
    $obj->add_control(
        'rh_css',
        [
            'label' => __( 'Enter your CSS code', 'rehub-theme' ),
            'type' => Elementor\Controls_Manager::CODE,
            'default' => '',
            'language' => 'css',          
        ]
    );
    $obj->end_controls_section();    
} 
function RH_el_custom_widget_render( $content, $widget ) {
    $settings = $widget->get_settings_for_display();
    if ( 'html' === $widget->get_name() ) {  
        if ( ! empty( $settings['rh_js'] ) ) {
            $customjs = $settings['rh_js'];
            wp_add_inline_script('elementor-frontend', $customjs);
        }
        if ( ! empty( $settings['rh_css'] ) ) {
            $customcss = $settings['rh_css'];
            $cssid = 'el_rh_css_html'.uniqid('', true);
            wp_register_style( $cssid, false );
            wp_enqueue_style( $cssid );
            wp_add_inline_style($cssid, $customcss);            
        }  
    }
    if (!empty($settings['rh_gsap'])) {
        if (\Elementor\Plugin::$instance->editor->is_edit_mode()) {
            
        }
        $hideclass = '';
        if ( ! empty( $settings['rh_gsap_from'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-from', $settings['rh_gsap_from'] );
        }
        if ( ! empty( $settings['rh_gsap_trigger_type'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-triggertype', $settings['rh_gsap_trigger_type'] );
            if($settings['rh_gsap_trigger_type'] == 'custom'){
                if ( ! empty( $settings['rh_gsap_sc_start'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-triggerstart', $settings['rh_gsap_sc_start'] );
                }
                if ( ! empty( $settings['rh_gsap_sc_end'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-triggerend', $settings['rh_gsap_sc_end'] );
                }
                if ( ! empty( $settings['rh_gsap_sc_dur'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-triggerscrub', $settings['rh_gsap_sc_dur'] );
                }
                if ( ! empty( $settings['rh_gsap_pinned'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-pinned', $settings['rh_gsap_pinned'] );
                }
                if ( ! empty( $settings['rh_gsap_pinspace'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-pinspace', $settings['rh_gsap_pinspace'] );
                }
                if ( ! empty( $settings['rh_gsap_sc_act'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-triggeraction', $settings['rh_gsap_sc_act'] );
                } 
                if ( ! empty( $settings['rh_gsap_sc_snap'] ) ) {
                    $widget->add_render_attribute( 'ann-wrapper', 'data-triggersnap', $settings['rh_gsap_sc_snap'] );
                }              
            }
            if ( ! empty( $settings['rh_gsap_trigger_field'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-customtrigger', $settings['rh_gsap_trigger_field'] );
            }
            if ( ! empty( $settings['rh_gsap_obj_field'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-customobject', $settings['rh_gsap_obj_field'] );
            }
            if ( ! empty( $settings['rh_gsap_batch_interval'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-batchint', $settings['rh_gsap_batch_interval'] );
            } 
            if ( ! empty( $settings['rh_gsap_batchrandom'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-batchrandom', $settings['rh_gsap_batchrandom'] );
            }           
        }
        if ( ! empty( $settings['rh_videoplay'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-videoplay', $settings['rh_videoplay'] );
        }
        if ( ! empty( $settings['rh_gsap_x'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-x', $settings['rh_gsap_x'] );
        }
        if ( ! empty( $settings['rh_gsap_y'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-y', $settings['rh_gsap_y'] );
        }
        if ( ! empty( $settings['rh_gsap_z'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-z', $settings['rh_gsap_z'] );
        }
        if ( ! empty( $settings['rh_gsap_xo'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-xo', $settings['rh_gsap_xo'] );
        }
        if ( ! empty( $settings['rh_gsap_yo'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-yo', $settings['rh_gsap_yo'] );
        }
        if ( ! empty( $settings['rh_gsap_r'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-r', $settings['rh_gsap_r'] );
        }
        if ( ! empty( $settings['rh_gsap_rx'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-rx', $settings['rh_gsap_rx'] );
        }
        if ( ! empty( $settings['rh_gsap_ry'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-ry', $settings['rh_gsap_ry'] );
        }
        if ( ! empty( $settings['rh_gsap_scale'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-s', $settings['rh_gsap_scale'] );
        }
        if ( ! empty( $settings['rh_gsap_scale_x'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-sx', $settings['rh_gsap_scale_x'] );
        }
        if ( ! empty( $settings['rh_gsap_scale_y'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-sy', $settings['rh_gsap_scale_y'] );
        }
        if ( ! empty( $settings['rh_gsap_width'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-width', $settings['rh_gsap_width'] );
        }
        if ( ! empty( $settings['rh_gsap_height'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-height', $settings['rh_gsap_height'] );
        }
        if ( ! empty( $settings['rh_gsap_boxshadow'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-boxshadow', $settings['rh_gsap_boxshadow'] );
        }
        if ( ! empty( $settings['rh_gsap_opacity'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-o', $settings['rh_gsap_opacity'] );
            if( ! empty( $settings['rh_gsap_from'] ) && $settings['rh_gsap_from'] == 'yes' ){
                if($settings['rh_gsap_opacity'] == 0 || $settings['rh_gsap_opacity'] == 1){
                    $hideclass = ' prehidden';
                }
            }
        }
        if ( ! empty( $settings['rh_gsap_infinite'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-loop', $settings['rh_gsap_infinite'] );
            if ( ! empty( $settings['rh_gsap_yoyo'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-yoyo', $settings['rh_gsap_yoyo'] );
            }
            if ( ! empty( $settings['rh_gsap_repeatdelay'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-repeatdelay', $settings['rh_gsap_repeatdelay'] );
            }
        }
        if ( ! empty( $settings['rh_gsap_delay'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-delay', $settings['rh_gsap_delay'] );
        }
        if ( ! empty( $settings['rh_gsap_ease'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-ease', $settings['rh_gsap_ease'] );
        }
        if ( ! empty( $settings['rh_gsap_stdelay'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-stdelay', $settings['rh_gsap_stdelay'] );
        }
        if ( ! empty( $settings['rh_gsap_strandom'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-strandom', $settings['rh_gsap_strandom'] );
        }
        if ( ! empty( $settings['rh_gsap_bg'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-bg', $settings['rh_gsap_bg'] );
        }
        if ( ! empty( $settings['rh_gsap_stagger'] ) && $settings['rh_gsap_st_type'] == 'class' ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-stagger', $settings['rh_gsap_stagger'] );
        }
        if ( ! empty( $settings['rh_gsap_text'] ) && $settings['rh_gsap_st_type'] == 'text' ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-text', $settings['rh_gsap_text'] );
        }
        if ($settings['rh_gsap_st_type'] == 'svg' ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-svgdraw', 'yes' );
        }
        if ( ! empty( $settings['rh_gsap_origin'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-origin', $settings['rh_gsap_origin'] );
        }
        if ( ! empty( $settings['rh_gsap_path'] ) ) {
            $widget->add_render_attribute( 'ann-wrapper', 'data-path', $settings['rh_gsap_path'] );
            if ( ! empty( $settings['rh_gsap_path_align'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-path-align', $settings['rh_gsap_path_align'] );
            }
            if ( ! empty( $settings['rh_gsap_path_align_x'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-path-alignx', $settings['rh_gsap_path_align_x']['size'] );
            }
            if ( ! empty( $settings['rh_gsap_path_align_y'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-path-aligny', $settings['rh_gsap_path_align_y']['size'] );
            }
            if ( ! empty( $settings['rh_gsap_path_orient'] ) ) {
                $widget->add_render_attribute( 'ann-wrapper', 'data-path-orient', $settings['rh_gsap_path_orient'] );
            }
        }
        $settings['multianimations'] = array();
        if ( ! empty( $settings['rh_gsap_multi'] )) {
            foreach ($settings['rh_gsap_multi'] as $index => $item) {
                foreach ($item as $key => $value) {
                    if(!empty($value)){
                        if(is_array($value)) $value = $value['size'];
                        if($value) $settings['multianimations'][$index][$key] = $value;
                    }
                }        
            }
            $widget->add_render_attribute( 'ann-wrapper', 'data-multianimations', json_encode($settings['multianimations']) );
        }
        $content = '<div '.$widget->get_render_attribute_string( 'ann-wrapper' ).' data-duration="'.$settings['rh_gsap_duration'].'" class="rh-gsap-wrap'.$hideclass.'">'.$content. '</div>';
        if(!empty($settings['rh_gsap_z'])) {
            $content = '<div class="rhforce3d">'.$content. '</div>';
        }
    }
    if ( ! empty( $settings['rh_reveal'] )) {
        if ( ! empty( $settings['rh_reveal_dir'] )) {
            $widget->add_render_attribute( 'reveal-wrapper', 'data-reveal-dir', $settings['rh_reveal_dir'] );
        }
        if ( ! empty( $settings['rh_reveal_speed'] )) {
            $widget->add_render_attribute( 'reveal-wrapper', 'data-reveal-speed', $settings['rh_reveal_speed'] );
        }
        if ( ! empty( $settings['rh_reveal_delay'] )) {
            $widget->add_render_attribute( 'reveal-wrapper', 'data-reveal-delay', $settings['rh_reveal_delay'] );
        }
        if ( ! empty( $settings['rh_reveal_bgcolor'] )) {
            $widget->add_render_attribute( 'reveal-wrapper', 'data-reveal-bg', $settings['rh_reveal_bgcolor'] );
        }
        $content = '<div class="rh-reveal-wrap prehidden position-relative"><div class="rh-reveal-cont">'.$content. '</div><div '.$widget->get_render_attribute_string( 'reveal-wrapper' ).' class="rh-reveal-block abdfullwidth pointernone"></div></div>';
    }
    if ( ! empty( $settings['rh_parallax_el'] )) {
        if ( ! empty( $settings['rh_parallax_el_dir'] )) {
            $widget->add_render_attribute( 'rhpar-wrapper', 'data-from', $settings['rh_parallax_el_dir'] );
        }
        if ( ! empty( $settings['rh_parallax_el_strength'] )) {
            $widget->add_render_attribute( 'rhpar-wrapper', 'data-y', $settings['rh_parallax_el_strength'] );
        }
        if ( ! empty( $settings['rh_parallax_el_speed'] )) {
            $widget->add_render_attribute( 'rhpar-wrapper', 'data-duration', $settings['rh_parallax_el_speed']/10 );
        }
        $content = '<div data-triggerscrub="1" data-triggertype="custom" class="prehidden rh-gsap-wrap" '.$widget->get_render_attribute_string( 'rhpar-wrapper' ).'>'.$content. '</div>';
    }
    if ( ! empty( $settings['rh_parlx_m_el'] )) {
        if ( ! empty( $settings['rh_parlx_m_el_speed'] )) {
            $widget->add_render_attribute( 'rhmprlx-wrapper', 'data-prlx-xy', $settings['rh_parlx_m_el_speed'] );
        }
        if ( ! empty( $settings['rh_parlx_m_el_cur'] )) {
            $widget->add_render_attribute( 'rhmprlx-wrapper', 'data-prlx-cur', $settings['rh_parlx_m_el_cur'] );
        }
        if ( ! empty( $settings['rh_parlx_restore'] )) {
            $widget->add_render_attribute( 'rhmprlx-wrapper', 'data-prlx-rest', $settings['rh_parlx_restore'] );
        }
        if ( ! empty( $settings['rh_parlx_m_el_tilt'] )) {
            $widget->add_render_attribute( 'rhmprlx-wrapper', 'data-prlx-tilt', $settings['rh_parlx_m_el_tilt'] );
        }
        $content = '<div class="rh-prlx-mouse" '.$widget->get_render_attribute_string( 'rhmprlx-wrapper' ).'>'.$content. '</div>';
    }
    return $content;
}

function rh_el_custom_print_template($content, $widget){
    if (!$content) return '';
    if ( 'html' === $widget->get_name() ) {
        ob_start();
        ?>
        {{{ settings.html }}}
        <# if (settings.rh_css ) { #>
        <style>{{{ settings.rh_css }}}</style>
        <# } #>       
        <?php
        $content = ob_get_clean();
    }
    //check gsap
    $content = "<# if ( settings.rh_gsap ) { 
        if ( settings.rh_gsap_from ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-from', settings.rh_gsap_from );
        }
        if ( settings.rh_gsap_trigger_type ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-triggertype', settings.rh_gsap_trigger_type );
            if(settings.rh_gsap_trigger_type == 'custom'){
                if ( settings.rh_gsap_sc_start ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-triggerstart', settings.rh_gsap_sc_start );
                }
                if ( settings.rh_gsap_sc_end ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-triggerend', settings.rh_gsap_sc_end );
                }
                if ( settings.rh_gsap_sc_dur ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-triggerscrub', settings.rh_gsap_sc_dur );
                }
                if ( settings.rh_gsap_pinned ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-pinned', settings.rh_gsap_pinned );
                }
                if ( settings.rh_gsap_pinspace ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-pinspace', settings.rh_gsap_pinspace);
                }
                if ( settings.rh_gsap_sc_act ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-triggeraction', settings.rh_gsap_sc_act );
                }
                if ( settings.rh_gsap_sc_snap ) {
                    view.addRenderAttribute( 'ann-wrapper', 'data-triggersnap', settings.rh_gsap_sc_snap );
                }
            }
            if ( settings.rh_gsap_trigger_field ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-customtrigger', settings.rh_gsap_trigger_field );
            }
            if ( settings.rh_gsap_obj_field ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-customobject', settings.rh_gsap_obj_field );
            }
            if ( settings.rh_gsap_batch_interval ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-batchint', settings.rh_gsap_batch_interval );
            } 
            if ( settings.rh_gsap_batchrandom ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-batchrandom', settings.rh_gsap_batchrandom );
            }           
        }
        if ( settings.rh_videoplay ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-videoplay', settings.rh_videoplay );
        }
        if ( settings.rh_gsap_x ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-x', settings.rh_gsap_x );
        }
        if ( settings.rh_gsap_y ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-y', settings.rh_gsap_y );
        }
        if ( settings.rh_gsap_z ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-z', settings.rh_gsap_z );
        }
        if ( settings.rh_gsap_xo ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-xo', settings.rh_gsap_xo );
        }
        if ( settings.rh_gsap_yo ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-yo', settings.rh_gsap_yo );
        }
        if ( settings.rh_gsap_r ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-r', settings.rh_gsap_r );
        }
        if ( settings.rh_gsap_rx ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-rx', settings.rh_gsap_rx );
        }
        if ( settings.rh_gsap_ry ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-ry', settings.rh_gsap_ry );
        }
        if ( settings.rh_gsap_scale ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-s', settings.rh_gsap_scale );
        }
        if ( settings.rh_gsap_scale_x ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-sx', settings.rh_gsap_scale_x );
        }
        if ( settings.rh_gsap_scale_y ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-sy', settings.rh_gsap_scale_y );
        }
        if ( settings.rh_gsap_width ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-width', settings.rh_gsap_width );
        }
        if ( settings.rh_gsap_height ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-height', settings.rh_gsap_height );
        }
        if ( settings.rh_gsap_boxshadow ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-boxshadow', settings.rh_gsap_boxshadow );
        }
        if ( settings.rh_gsap_opacity ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-o', settings.rh_gsap_opacity );
        }
        if ( settings.rh_gsap_infinite ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-loop', settings.rh_gsap_infinite );
            if ( settings.rh_gsap_yoyo ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-yoyo', settings.rh_gsap_yoyo );
            }
            if ( settings.rh_gsap_repeatdelay ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-repeatdelay', settings.rh_gsap_repeatdelay );
            }
        }
        if ( settings.rh_gsap_delay ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-delay', settings.rh_gsap_delay );
        }
        if ( settings.rh_gsap_ease ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-ease', settings.rh_gsap_ease );
        }
        if ( settings.rh_gsap_stdelay ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-stdelay', settings.rh_gsap_stdelay );
        }
        if ( settings.rh_gsap_strandom ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-strandom', settings.rh_gsap_strandom );
        }
        if ( settings.rh_gsap_stagger && settings.rh_gsap_st_type == 'class') {
            view.addRenderAttribute( 'ann-wrapper', 'data-stagger', settings.rh_gsap_stagger );
        }
        if (settings.rh_gsap_st_type == 'svg') {
            view.addRenderAttribute( 'ann-wrapper', 'data-svgdraw', 'yes' );
        }
        if ( settings.rh_gsap_text && settings.rh_gsap_st_type == 'text' ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-text', settings.rh_gsap_text );
        }
        if ( settings.rh_gsap_bg ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-bg', settings.rh_gsap_bg );
        }
        if ( settings.rh_gsap_origin ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-origin', settings.rh_gsap_origin );
        }
        if ( settings.rh_gsap_path ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-path', settings.rh_gsap_path );
            if ( settings.rh_gsap_path_align ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-path-align', settings.rh_gsap_path_align );
            }
            if ( settings.rh_gsap_path_align_x ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-path-alignx', settings.rh_gsap_path_align_x.size );
            }
            if ( settings.rh_gsap_path_align_y ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-path-aligny', settings.rh_gsap_path_align_y.size );
            }
            if ( settings.rh_gsap_path_orient ) {
                view.addRenderAttribute( 'ann-wrapper', 'data-path-orient', settings.rh_gsap_path_orient );
            }
        }
        if ( settings.rh_gsap_multi ) {
            view.addRenderAttribute( 'ann-wrapper', 'data-multianimations', JSON.stringify(settings.rh_gsap_multi) );
        }
        if ( settings.rh_gsap_z || settings.rh_gsap_rx || settings.rh_gsap_ry ) {
            #>
            <div class=\"rhforce3d\">
            <#
        }

        #>
        <div {{{ view.getRenderAttributeString( 'ann-wrapper' ) }}} class=\"rh-gsap-wrap\" data-duration=\"{{{settings.rh_gsap_duration}}}\">" . $content . "</div>
        <#
        if ( settings.rh_gsap_z || settings.rh_gsap_rx || settings.rh_gsap_ry ) {
            #>
            </div>
            <#
        } 
    }
    else {
        #>" . $content . "<# 
    } #>";


    //Check reveal
    $content = "<# if ( settings.rh_reveal ) {
        if ( settings.rh_reveal_dir ) {
            view.addRenderAttribute( 'reveal-wrapper', 'data-reveal-dir', settings.rh_reveal_dir );
        }
        if ( settings.rh_reveal_speed ) {
            view.addRenderAttribute( 'reveal-wrapper', 'data-reveal-speed', settings.rh_reveal_speed );
        }
        if ( settings.rh_reveal_delay ) {
            view.addRenderAttribute( 'reveal-wrapper', 'data-reveal-delay', settings.rh_reveal_delay );
        }
        if ( settings.rh_reveal_bgcolor ) {
            view.addRenderAttribute( 'reveal-wrapper', 'data-reveal-bg', settings.rh_reveal_bgcolor );
        }
        #>
        <div class=\"rh-reveal-wrap prehidden position-relative\"><div class=\"rh-reveal-cont\">" . $content . "</div><div {{{ view.getRenderAttributeString( 'reveal-wrapper' ) }}} class=\"rh-reveal-block abdfullwidth pointernone\"></div></div></div>
        <# 
    }
    else {
        #>" . $content . "<# 
    } #>";

    //Check parallax
    $content = "<# if ( settings.rh_parallax_el ) {
        if ( settings.rh_parallax_el_dir ) {
            view.addRenderAttribute( 'rhpar-wrapper', 'data-from', settings.rh_parallax_el_dir );
        }
        if ( settings.rh_parallax_el_strength ) {
            view.addRenderAttribute( 'rhpar-wrapper', 'data-y', settings.rh_parallax_el_strength );
        }
        if ( settings.rh_parallax_el_speed ) {
            view.addRenderAttribute( 'rhpar-wrapper', 'data-duration', settings.rh_parallax_el_speed/10 );
        }
        #>
        <div data-triggerscrub=\"1\" data-triggertype=\"custom\" class=\"rh-gsap-wrap\" {{{ view.getRenderAttributeString( 'rhpar-wrapper' ) }}}>" . $content . "</div>
        <# 
    }
    else {
        #>" . $content . "<# 
    } #>";

    //Check parallax mouse
    $content = "<# if ( settings.rh_parlx_m_el ) {
        if ( settings.rh_parlx_m_el_speed ) {
            view.addRenderAttribute( 'rhmprlx-wrapper', 'data-prlx-xy', settings.rh_parlx_m_el_speed );
        }
        if ( settings.rh_parlx_m_el_cur ) {
            view.addRenderAttribute( 'rhmprlx-wrapper', 'data-prlx-cur', settings.rh_parlx_m_el_cur );
        }
        if ( settings.rh_parlx_restore ) {
            view.addRenderAttribute( 'rhmprlx-wrapper', 'data-prlx-rest', settings.rh_parlx_restore );
        }
        if ( settings.rh_parlx_m_el_tilt ) {
            view.addRenderAttribute( 'rhmprlx-wrapper', 'data-prlx-tilt', settings.rh_parlx_m_el_tilt );
        }
        #>
        <div class=\"rh-prlx-mouse\" {{{ view.getRenderAttributeString( 'rhmprlx-wrapper' ) }}}>" . $content . "</div>
        <# 
    }
    else {
        #>" . $content . "<# 
    } #>";

    return $content;
}
function RH_additional_el_annimation($array){
    $array['Rehub Effects'] = [
        'stuckMoveUpOpacity' => 'Stuck Up with Fade',
        'stuckFlipUpOpacity' => 'Stuck Up with Flip and Fade',
        'tracking-in-expand' => 'Text tracking and expand',

    ];
    return $array; 
}
function rh_el_add_lazy_load_images($html, $settings, $image_size_key, $image_key){

    if (rehub_option('enable_lazy_images') == '1'){
        if($html){
            if(stripos($html, 'class=') !== false){
                $html = str_replace('class="', 'class="lazyload ', $html);                
            }else{
                $html = str_replace('img', 'img class="lazyload"', $html);
            }

            $new_src_url = get_template_directory_uri() . '/images/default/blank.gif';
            $html = preg_replace('(src="(.*?)")', 'src="'.$new_src_url.'" data-src="$1"', $html);
        }
    }
    return $html;

}

if ( !class_exists( 'Rehub_Lottie_Class' ) ) {
    class Rehub_Lottie_Class {
        public static $animations = array();

        function __construct() {
            add_action( 'wp_footer', array( $this, 'plus_animation_data' ), 5 );            
        }

        public static function plus_addAnimation( $animation = array() ) {
            
            if ( empty( $animation ) || empty( $animation['id'] ) ) {
                return false;
            }
            
            self::$animations[$animation['container_id']] = $animation;
        }
        public static function plus_getAnimations() {
            return apply_filters( 'wpbdmv-animations', self::$animations );
        }

        public static function plus_hasAnimations() {
            $animations = self::plus_getAnimations();
            return empty( $animations ) ? false : true;
        }

        function plus_animation_data() {
            if ( !self::plus_hasAnimations() ) {
                return;
            }
            wp_localize_script( 'lottie-init', 'wpbodymovin', array(
                'animations' => self::plus_getAnimations()
            ) );
        }

    }
}
function rh_get_local_el_templates() {
    $templates = \Elementor\Plugin::$instance->templates_manager->get_source( 'local' )->get_items();
    $types     = [];

    if ( empty( $templates ) ) {
        $options = [ '0' => esc_html__( 'You Haven’t Saved Templates Yet.', 'rehub-theme' ) ];
    } else {
        $options = [ '0' => esc_html__( 'Select Template', 'rehub-theme' ) ];
        
        foreach ( $templates as $template ) {
            $options[ $template['template_id'] ] = $template['title'] . ' (' . $template['type'] . ')';
            $types[ $template['template_id'] ] = $template['type'];
        }
    }

    return $options;
}
//add_action( 'elementor/element/parse_css', 'rh_add_post_css', 10, 2 );
/*function rh_add_post_css( $post_css, $element ) {
    if ( $post_css instanceof Dynamic_CSS ) {
        return;
    }
    $element_settings = $element->get_settings();
    if ( empty( $element_settings['rh_css'] ) ) {
        return;
    }
    $css = trim( $element_settings['rh_css'] );
    if ( empty( $css ) ) {
        return;
    }
    $post_css->get_stylesheet()->add_raw_css( $css );
}*/