<?php
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
	exit;
} // Exit if accessed directly

/**
 * Plugin options
 */
class EcafePluginOptions {

	private $key           = 'ecafe_widgets';
	protected $ecafefields = array();
	protected $fields;
	protected $widget_lists;
	protected $title        = '';
	protected $optionsPage  = '';
	protected $optionsPages = array();

	/**
	 * Constructor
	 */
	public function __construct() {
		add_action(
			'admin_footer',
			function () {
				if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'ecafe_widgets' ) {
					return;
				}
				?>
			<script>
			(function () {
				document.addEventListener('DOMContentLoaded', function () {
					var searchInput = document.getElementById('ecafe-widget-search');
					var widgets = document.querySelectorAll('.ecafe-panel-column');
		
					if (!searchInput) return;
		
					searchInput.addEventListener('input', function () {
						var value = this.value.toLowerCase();
		
						widgets.forEach(function (widget) {
							var labelEl = widget.querySelector('.widget-label');
							var label = labelEl ? labelEl.innerText.toLowerCase() : '';
							var keys  = widget.dataset.search ? widget.dataset.search.toLowerCase() : '';
		
							if (label.indexOf(value) !== -1 || (keys && keys.indexOf(value) !== -1)) {
								widget.style.display = '';
							} else {
								widget.style.display = 'none';
							}
						});
					});
				});
			})();
			</script>
				<?php
			}
		);

		if ( defined( 'ECAFEP_VERSION' ) && is_admin() ) {

			$get_values         = unserialize( get_option( 'ecafewhitelabel' ) );
			$this->title        = ( ! empty( $get_values['plugin_name_free'] ) ) ? $get_values['plugin_name_free'] : 'Essential Classy';
			$plugin_brand_image = ( ! empty( $get_values['plugin_brand_image'] ) ) ? $get_values['plugin_brand_image'] : '';
			if ( ! empty( $plugin_brand_image ) ) {
				$logo = wp_get_attachment_image_url( $plugin_brand_image, 'full' );
				if ( $logo ) {
					add_action(
						'admin_enqueue_scripts',
						function () use ( $logo ) {
							wp_register_style( 'ecafe-wl-style', false );
							wp_enqueue_style( 'ecafe-wl-style' );
							$custom_css = "
							.wp-menu-image.dashicons-before.dashicons-ecafe-settings {
								background: url('" . esc_url( $logo ) . "') no-repeat center center !important;
								background-size: contain;
							}
						";
							wp_add_inline_style( 'ecafe-wl-style', $custom_css );
						}
					);
				}
			}
		} else {
			add_action(
				'init',
				function () {
					$this->title = esc_html__( 'Essential Classy', 'essential-classy-addons-for-elementor' );
				}
			);
		}

		$this->fields = array();
		// Add this to the appropriate hook
		add_action(
			'init',
			function () {
				$this->ecafeWidgetList();
			}
		);

		if ( is_admin() ) {
			add_action( 'admin_post_ecafe_widgets_options_save', array( $this, 'widgetsSaveFire' ) );
			add_action( 'admin_post_ecafe_extension_options_save', array( $this, 'extraListSaveOptions' ) );
			add_action( 'admin_post_ecafe_wp_performance_options_save', array( $this, 'wpPerformanceSaveOptions' ) );
			add_action( 'admin_post_ecafe_wp_security_options_save', array( $this, 'wpSecuritySaveOptions' ) );
			add_action( 'admin_post_ecafe_wp_utilities_options_save', array( $this, 'wpUtilitiesSaveOptions' ) );

			if ( ! defined( 'ECAFEP_VERSION' ) ) {
				add_action( 'ecafeWhiteLabelFree', array( $this, 'ecafeWhiteLabel' ) );
			}
		}

		// Handle wp-login.php and wp-admin access
		add_action(
			'init',
			function () {
				if ( is_user_logged_in() ) {
					return; // allow logged-in users into wp-admin normally
				}

				$wpSecurity = get_option( 'ecafe_wp_security' );
				if ( empty( $wpSecurity['wpsecurityList'] ) ) {
					return;
				}

				$settings   = $wpSecurity['wpsecurityList'];
				$login_path = '';
				if ( isset( $settings['custom_login_path'] ) && ! empty( $settings['custom_login_path'] ) ) {
					// sanitize user input to be safe for rewrite rules & URLs
					$login_path = sanitize_title_with_dashes( trim( $settings['custom_login_path'], '/' ) );
				}
				$behavior = $settings['custom_login_behavior'] ?? '';
				$message  = $settings['custom_login_message'] ?? '';

				if ( empty( $login_path ) ) {
					return;
				}
				if ( ! empty( $login_path ) ) {
					// Register rewrite rule for custom login path
					add_rewrite_rule( "^{$login_path}/?", 'wp-login.php', 'top' );
				}

				$request_uri = trim( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), '/' );

				// Check wp-login.php or wp-admin/
				if (
				strpos( $request_uri, 'wp-login.php' ) !== false ||
				$request_uri === 'wp-login.php' ||
				strpos( $request_uri, 'wp-admin' ) === 0
				) {
					// Allow if matches custom login path
					if ( $request_uri !== $login_path ) {
						if ( $behavior === 'message' ) {
							wp_die(
								wp_kses_post( ! empty( $message ) ? $message : __( 'Access Denied', 'essential-classy-addons-for-elementor' ) ),
								esc_html__( 'Login Disabled', 'essential-classy-addons-for-elementor' ),
								array( 'response' => 403 )
							);
						} elseif ( $behavior === 'home' ) {
							wp_safe_redirect( home_url() );
							exit;
						}
					}
				}
			}
		);
		add_action(
			'template_redirect',
			function () {
				$wpSecurity = get_option( 'ecafe_wp_security' );
				if ( empty( $wpSecurity['wpsecurityList'] ) ) {
					return;
				}

				$settings   = $wpSecurity['wpsecurityList'];
				$login_path = '';
				if ( isset( $settings['custom_login_path'] ) && ! empty( $settings['custom_login_path'] ) ) {
					// sanitize user input to be safe for rewrite rules & URLs
					$login_path = sanitize_title_with_dashes( trim( $settings['custom_login_path'], '/' ) );
				}

				if ( ! empty( $login_path ) ) {
					$request_uri = trim( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), '/' );

					if ( $request_uri === $login_path ) {
						global $error, $user_login;
						$error = $user_login = ''; // prevent undefined warnings

						require_once ABSPATH . 'wp-login.php';
						exit;
					}
				}
			}
		);
		add_filter(
			'site_url',
			function ( $url, $path, $scheme, $blog_id ) {
				$wpSecurity = get_option( 'ecafe_wp_security' );
				if ( empty( $wpSecurity['wpsecurityList'] ) ) {
					return $url;
				}

				$settings   = $wpSecurity['wpsecurityList'];
				$login_path = '';
				if ( isset( $settings['custom_login_path'] ) && ! empty( $settings['custom_login_path'] ) ) {
					// sanitize user input to be safe for rewrite rules & URLs
					$login_path = sanitize_title_with_dashes( trim( $settings['custom_login_path'], '/' ) );
				}

				if ( ! empty( $login_path ) && $path === 'wp-login.php' && strpos( $url, 'action=' ) === false ) {
					// Replace wp-login.php with your custom login path
					return home_url( '/' . $login_path . '/' );
				}

				return $url;
			},
			10,
			4
		);

		// Filter login_url so wp_login_url() returns the custom path
		add_filter(
			'login_url',
			function ( $login_url, $redirect, $force_reauth ) {
				$wpSecurity = get_option( 'ecafe_wp_security' );
				if ( empty( $wpSecurity['wpsecurityList'] ) ) {
					return $login_url;
				}

				$settings   = $wpSecurity['wpsecurityList'];
				$login_path = '';
				if ( isset( $settings['custom_login_path'] ) && ! empty( $settings['custom_login_path'] ) ) {
					// sanitize user input to be safe for rewrite rules & URLs
					$login_path = sanitize_title_with_dashes( trim( $settings['custom_login_path'], '/' ) );
				}

				if ( ! empty( $login_path ) ) {
					$custom_url = home_url( '/' . $login_path . '/' );
					if ( ! empty( $redirect ) ) {
						$custom_url = add_query_arg( 'redirect_to', urlencode( $redirect ), $custom_url );
					}
					return $custom_url;
				}

				return $login_url;
			},
			10,
			3
		);

		$ecafewidgetsPage = get_option( 'ecafe_widgets' );
		if ( ! empty( $ecafewidgetsPage ) && isset( $ecafewidgetsPage['widgetsload'] ) && ! empty( $ecafewidgetsPage['widgetsload'] ) ) {
			if ( in_array( 'ecafe-preloader', $ecafewidgetsPage['widgetsload'] ) ) {
				add_filter(
					'body_class',
					function ( $classes ) {
						return array_merge( $classes, array( 'ec-preloader-active' ) );
					}
				);
				add_action( 'wp_body_open', array( $this, 'ecafe_add_preloader' ) );
			}
		}

		$ecafe_extension = get_option( 'ecafe_extension' );

		if ( ! empty( $ecafe_extension ) && isset( $ecafe_extension['extrasList'] ) && ! empty( $ecafe_extension['extrasList'] ) ) {
			if ( in_array( 'ecafe-live-copy', $ecafe_extension['extrasList'] ) ) {
				require ECAFE_LIVECOPY_PATH . 'ec-live-copy.php';
			}
		}

		// performance
		$wpPerf = get_option( 'ecafe_wp_performance' );
		if ( ! empty( $wpPerf ) && isset( $wpPerf['wpperformanceList'] ) && ! empty( $wpPerf['wpperformanceList'] ) ) {

			// emoji_scripts
			if ( in_array( 'emoji_scripts', $wpPerf['wpperformanceList'] ) ) {
				add_action( 'init', 'ec_emoji_scripts' );
				function ec_emoji_scripts() {
					remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
					remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );

					if ( function_exists( 'wp_enqueue_emoji_styles' ) ) {
						remove_action( 'wp_enqueue_scripts', 'wp_enqueue_emoji_styles' );
						remove_action( 'admin_enqueue_scripts', 'wp_enqueue_emoji_styles' );
					}
					if ( function_exists( 'print_emoji_styles' ) ) {
						remove_action( 'wp_print_styles', 'print_emoji_styles' );
						remove_action( 'admin_print_styles', 'print_emoji_styles' );
					}

					remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
					remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
					remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );

					add_filter(
						'tiny_mce_plugins',
						function ( $plugins ) {
							if ( is_array( $plugins ) ) {
								return array_diff( $plugins, array( 'wpemoji' ) );
							} else {
								return array();
							}
						}
					);

					add_filter(
						'wp_resource_hints',
						function ( $urls, $relation_type ) {
							if ( 'dns-prefetch' === $relation_type ) {
								$emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' );

								$urls = array_diff( $urls, array( $emoji_svg_url ) );
							}

							return $urls;
						},
						10,
						2
					);
				}
			}

			// disable_embeds
			if ( in_array( 'disable_embeds', $wpPerf['wpperformanceList'] ) ) {
				add_action( 'init', 'ec_disable_embeds', 9999 );
				function ec_disable_embeds() {
					global $wp;
					$wp->public_query_vars = array_diff( $wp->public_query_vars, array( 'embed' ) );
					add_filter( 'embed_oembed_discover', '__return_false' );
					remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
					remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
					remove_action( 'wp_head', 'wp_oembed_add_host_js' );
					add_filter(
						'tiny_mce_plugins',
						function ( $plugins ) {
							return array_diff( $plugins, array( 'wpembed' ) );
						}
					);
					add_filter(
						'rewrite_rules_array',
						function ( $rules ) {
							foreach ( $rules as $rule => $rewrite ) {
								if ( false !== strpos( $rewrite, 'embed=true' ) ) {
									unset( $rules[ $rule ] );
								}
							}
							return $rules;
						}
					);
					remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
				}
			}

			// media_library_grid_to_infinite_scroll
			if ( in_array( 'media_library_grid_to_infinite_scroll', $wpPerf['wpperformanceList'] ) ) {
				add_filter( 'media_library_infinite_scrolling', '__return_true' );
			}

			// pass_str_mtr
			if ( in_array( 'pass_str_mtr', $wpPerf['wpperformanceList'] ) ) {
				add_action(
					'wp_print_scripts',
					function () {
						if ( is_admin() ) {
							return;
						}

						if ( ( isset( $GLOBALS['pagenow'] ) && $GLOBALS['pagenow'] === 'wp-login.php' ) || ( isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'register', 'rp', 'lostpassword' ) ) ) ) {
							return;
						}

						if ( class_exists( 'WooCommerce' ) && ( is_account_page() || is_checkout() ) ) {
							return;
						}

						wp_dequeue_script( 'password-strength-meter' );
						wp_deregister_script( 'password-strength-meter' );

						wp_dequeue_script( 'wc-password-strength-meter' );
						wp_deregister_script( 'wc-password-strength-meter' );

						wp_dequeue_script( 'zxcvbn-async' );
						wp_deregister_script( 'zxcvbn-async' );
					},
					100
				);
			}

			// xml_rpc
			if ( in_array( 'xml_rpc', $wpPerf['wpperformanceList'] ) ) {
				add_filter( 'xmlrpc_enabled', '__return_false' );
				add_filter( 'wp_headers', 'ecp_remove_x_pingback' );
				add_filter( 'pings_open', '__return_false', 9999 );
				add_filter( 'pre_update_option_enable_xmlrpc', '__return_false' );
				add_filter( 'pre_option_enable_xmlrpc', '__return_zero' );
				add_action( 'init', 'ecp_xmlrpc_header' );

				function ecp_remove_x_pingback( $headers ) {
					unset( $headers['X-Pingback'], $headers['x-pingback'] );
						return $headers;
				}

				function ecp_xmlrpc_header() {
					if ( ! isset( $_SERVER['SCRIPT_FILENAME'] ) ) {
						return;
					}

					if ( basename( $_SERVER['SCRIPT_FILENAME'] ) !== 'xmlrpc.php' ) {
						return;
					}

					$header = 'HTTP/1.1 Error 403 Forbidden';
					header( $header );
					echo $header;
					die();
				}
			}

			// async_js
			if ( in_array( 'async_js', $wpPerf['wpperformanceList'] ) ) {
				if ( ! is_admin() ) {
					add_filter(
						'script_loader_tag',
						function ( $tag, $handle, $src ) use ( $wpPerf ) {
							$exclude = array( 'jquery-core', 'jquery-migrate' );

							if ( ! empty( $wpPerf['exclude_async_js'] ) ) {
								$extra   = array_map( 'trim', explode( ',', $wpPerf['exclude_async_js'] ) );
								$exclude = array_merge( $exclude, $extra );
							}

							if ( ! in_array( $handle, $exclude, true ) ) {
								$tag = str_replace( ' src', ' async src', $tag );
							}

							return $tag;
						},
						10,
						3
					);
				}
			}

			// disable_dashicons
			if ( in_array( 'disable_dashicons', $wpPerf['wpperformanceList'] ) ) {
				add_action( 'wp_enqueue_scripts', 'ec_disable_dashicons' );
				function ec_disable_dashicons() {
					if ( ! is_user_logged_in() ) {
						wp_dequeue_style( 'dashicons' );
						wp_deregister_style( 'dashicons' );
					}
				}
			}

			// preload_onload_css
			if ( in_array( 'preload_onload_css', $wpPerf['wpperformanceList'] ) ) {
				if ( ! is_admin() ) {
					add_filter(
						'style_loader_tag',
						function ( $html, $handle, $href, $media ) use ( $wpPerf ) {
							// Default exclusions (critical styles etc.)
							$exclude = array( 'theme-style', 'critical-css' );

							// Add user exclusions from settings
							if ( ! empty( $wpPerf['exclude_preload_onload_css'] ) ) {
								$extra   = array_map( 'trim', explode( ',', $wpPerf['exclude_preload_onload_css'] ) );
								$exclude = array_merge( $exclude, $extra );
							}

							// Skip excluded styles
							if ( in_array( $handle, $exclude, true ) ) {
								return $html;
							}

							// Build preload + onload tag (modern way)
							$new_html  = '<link rel="preload" href="' . esc_url( $href ) . '" as="style" id="' . esc_attr( $handle ) . '-css" onload="this.onload=null;this.rel=\'stylesheet\'">';
							$new_html .= '<noscript><link rel="stylesheet" id="' . esc_attr( $handle ) . '-css" href="' . esc_url( $href ) . '" media="all"></noscript>';

							return $new_html;
						},
						10,
						4
					);
				}
			}

			// defer_js
			if ( in_array( 'defer_js', $wpPerf['wpperformanceList'] ) ) {
				if ( ! is_admin() ) {
					add_filter(
						'script_loader_tag',
						function ( $tag, $handle, $src ) use ( $wpPerf ) {
							$exclude = array( 'jquery-core', 'jquery-migrate' );

							if ( ! empty( $wpPerf['exclude_defer_js'] ) ) {
								$extra   = array_map( 'trim', explode( ',', $wpPerf['exclude_defer_js'] ) );
								$exclude = array_merge( $exclude, $extra );
							}

							if ( ! in_array( $handle, $exclude, true ) ) {
								$tag = str_replace( ' src', ' defer src', $tag );
							}

							return $tag;
						},
						10,
						3
					);
				}
			}

			// rsd_link
			if ( in_array( 'rsd_link', $wpPerf['wpperformanceList'] ) ) {
				remove_action( 'wp_head', 'rsd_link' );
			}

			// shortlink
			if ( in_array( 'shortlink', $wpPerf['wpperformanceList'] ) ) {
				remove_action( 'wp_head', 'wp_shortlink_wp_head' );
				remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 );
			}

			// wlwmanifest_link
			if ( in_array( 'wlwmanifest_link', $wpPerf['wpperformanceList'] ) ) {
				remove_action( 'wp_head', 'wlwmanifest_link' );
			}

			// self_pingbacks
			if ( in_array( 'self_pingbacks', $wpPerf['wpperformanceList'] ) ) {
				add_action( 'pre_ping', 'selfPingbacks' );
				function selfPingbacks( &$links ) {
					$home = home_url();
					foreach ( $links as $l => $link ) {
						if ( strpos( $link, $home ) === 0 ) {
							unset( $links[ $l ] );
						}
					}
				}
			}

			// wp_version
			if ( in_array( 'wp_version', $wpPerf['wpperformanceList'] ) ) {
				remove_action( 'wp_head', 'wp_generator' );
				add_filter(
					'the_generator',
					function () {
						return '';
					}
				);
			}

			// rss_feeds
			if ( in_array( 'rss_feeds', $wpPerf['wpperformanceList'] ) ) {
				add_action( 'template_redirect', 'ecRssFeeds', 1 );
				function ecRssFeeds() {
					if ( ! is_feed() || is_404() ) {
						return;
					}

					global $wp_rewrite;
					global $wp_query;

					if ( isset( $_GET['feed'] ) ) {
						wp_redirect( esc_url_raw( remove_query_arg( 'feed' ) ), 301 );
						exit;
					}

					if ( get_query_var( 'feed' ) !== 'old' ) {
						set_query_var( 'feed', '' );
					}

					redirect_canonical();

					/* translators: %s: URL to home page */
					wp_die( sprintf( esc_html__( "No feed available, go to <a href='%s'>Home Page</a>!", 'essential-classy-addons-for-elementor' ), esc_url( home_url( '/' ) ) ) );
				}
			}

			// rss_feed_link
			if ( in_array( 'rss_feed_link', $wpPerf['wpperformanceList'] ) ) {
				remove_action( 'wp_head', 'feed_links_extra', 3 );
				remove_action( 'wp_head', 'feed_links', 2 );
			}
		}

		// security
		$wpSecurity = get_option( 'ecafe_wp_security' );
		if ( ! empty( $wpSecurity ) && isset( $wpSecurity['wpsecurityList'] ) && ! empty( $wpSecurity['wpsecurityList'] ) ) {
			/**
			 * Add security headers to all WordPress responses
			 */

			// block_author_enumeration
			if ( in_array( 'block_author_enumeration', $wpSecurity['wpsecurityList'] ) ) {
				if ( ! is_admin() && isset( $_REQUEST['author'] ) ) {
					wp_die( 'Forbidden', 'Access denied', 403 );
				}
			}

			// Clickjacking Protection - SAMEORIGIN
			if ( ! empty( $wpSecurity ) && isset( $wpSecurity['wpsecurityList']['clickjacking_protection'] ) ) {
				$value = $wpSecurity['wpsecurityList']['clickjacking_protection'];
				if ( $value === 'SAMEORIGIN' || $value === 'DENY' ) {
					add_action(
						'send_headers',
						function () use ( $value ) {
							header( "X-Frame-Options: $value" );
						},
						10
					);
				}
			}

			// Cross-Origin Embedder Policy (COEP)
			if ( in_array( 'cross_origin_embedder_policy_coep', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Helps isolate your site for better security (important for WebAssembly, SharedArrayBuffer).
						header( 'Cross-Origin-Embedder-Policy: require-corp' );
					},
					10
				);
			}

			// Cross-Origin Opener Policy (COOP)
			$cross_origin_opener_policy_coop_value = $wpSecurity['wpsecurityList']['cross_origin_opener_policy_coop'];
			if ( ! empty( $cross_origin_opener_policy_coop_value ) ) {
				if ( $cross_origin_opener_policy_coop_value === 'same-origin' || $cross_origin_opener_policy_coop_value === 'same-origin-allow-popups' ) {
					add_action(
						'send_headers',
						function () use ( $cross_origin_opener_policy_coop_value ) {
							header( "Cross-Origin-Opener-Policy: $cross_origin_opener_policy_coop_value" );
						},
						10
					);
				}
			}

			// Cross-Origin Resource Policy (CORP)
			$cross_origin_resource_policy_corp_value = $wpSecurity['wpsecurityList']['cross_origin_resource_policy_corp'];
			if ( ! empty( $cross_origin_resource_policy_corp_value ) ) {
				if ( $cross_origin_resource_policy_corp_value === 'same-origin' || $cross_origin_resource_policy_corp_value === 'same-site' || $cross_origin_resource_policy_corp_value === 'cross-origin' ) {
					add_action(
						'send_headers',
						function () use ( $cross_origin_resource_policy_corp_value ) {
							// Controls how your resources can be loaded by other origins.
							header( "Cross-Origin-Resource-Policy: $cross_origin_resource_policy_corp_value" );
						},
						10
					);
				}
			}

			// Cross-Site Scripting (XSS) Protection
			if ( in_array( 'cross_site_scripting_xss_protection', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Enable basic XSS protection (ignored by modern browsers, but safe)
						header( 'X-XSS-Protection: 1; mode=block' );
					},
					10
				);
			}

			// Disable file editor
			if ( in_array( 'disable_file_editor', $wpSecurity['wpsecurityList'] ) ) {
				if ( ! defined( 'DISALLOW_FILE_EDIT' ) ) {
					define( 'DISALLOW_FILE_EDIT', true );
				}
			}

			// Disable REST API for Non-Logged-in Users
			if ( in_array( 'disable_rest_api_non_logged', $wpSecurity['wpsecurityList'] ) ) {
				add_filter(
					'rest_authentication_errors',
					function ( $result ) {
						if ( ! is_user_logged_in() ) {
							return new WP_Error( 'rest_disabled', __( 'REST API restricted.' ), array( 'status' => 403 ) );
						}
						return $result;
					}
				);
			}

			// Global Privacy Control (GPC)
			if ( in_array( 'global_privacy_control_gpc', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						header( 'Sec-GPC: 1' );
					},
					10
				);
			}

			// HTTPS Strict Transport Security (HSTS)
			if ( in_array( 'https_strict_transport_security_hsts', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Only enable if your site is HTTPS everywhere!
						header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
					},
					10
				);
			}

			// MIME Sniffing Protection
			if ( in_array( 'mime_sniffing_protection', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Prevent MIME sniffing
						header( 'X-Content-Type-Options: nosniff' );
					},
					10
				);
			}

			// Permissions Policy (Feature Policy)
			if ( in_array( 'permissions_policy_feature_policy', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Permissions Policy (formerly Feature Policy) - restrict browser APIs
						header( 'Permissions-Policy: geolocation=(), camera=(), microphone=()' );
					},
					10
				);
			}

			// Referrer Policy
			if ( in_array( 'referrer_policy', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Referrer policy (controls what info is sent in Referer header)
						header( 'Referrer-Policy: no-referrer-when-downgrade' );
					},
					10
				);
			}

			// Strict Referrer Policy
			if ( in_array( 'referrer_policy_strict_origin', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						// Referrer policy (controls what info is sent in Referer header)
						header( 'Referrer-Policy: strict-origin-when-cross-origin' );
					},
					10
				);
			}

			// Remove Server Signature
			if ( in_array( 'server_signature_masking', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						header_remove( 'Server' );
					},
					10
				);
			}

			// Remove X-Powered-By
			if ( in_array( 'remove_x_powered_by_header', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						header_remove( 'X-Powered-By' );
					},
					10
				);
			}

			// DNS Prefetch Control
			if ( in_array( 'x_dns_prefetch_control', $wpSecurity['wpsecurityList'] ) ) {
				add_action(
					'send_headers',
					function () {
						header( 'X-DNS-Prefetch-Control: off' );
					},
					10
				);
			}

			// Session Cookie
			if ( in_array( 'session_cookie', $wpSecurity['wpsecurityList'] ) ) {
				@ini_set( 'session.cookie_httponly', true );
				@ini_set( 'session.cookie_secure', true );
				@ini_set( 'session.use_only_cookies', true );
			}
		}

		// Utilities
		$wpUtilities = get_option( 'ecafe_wp_utilities' );
		if ( ! empty( $wpUtilities ) && isset( $wpUtilities['wputilitiesList'] ) && ! empty( $wpUtilities['wputilitiesList'] ) ) {

			// 404_redirect_home
			if ( in_array( '404_redirect_home', $wpUtilities['wputilitiesList'] ) ) {
				add_action(
					'template_redirect',
					function () {
						$wpUtilities = get_option( 'ecafe_wp_utilities' );
						$enabled     = ! empty( $wpUtilities['wputilitiesList'] ) ? $wpUtilities['wputilitiesList'] : array();
						// Exclude admin, cron, XML-RPC requests
						if ( ! is_404() || is_admin() || ( defined( 'DOING_CRON' ) && DOING_CRON ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) || ! in_array( '404_redirect_home', $enabled ) ) {
							return;
						}
						$wpSecurity = get_option( 'ecafe_wp_security' );
						if ( ! empty( $wpSecurity['wpsecurityList']['custom_login_path'] ) ) {
							$custom_login_slug = sanitize_title( $wpSecurity['wpsecurityList']['custom_login_path'] );
							if ( strpos( $_SERVER['REQUEST_URI'], '/' . $custom_login_slug ) !== false ) {
								return;
							}
						}

						// Redirect 404 to home url
						wp_safe_redirect( home_url(), 301 );
						exit;
					},
					1
				);
			}

			// disable_author_archives
			if ( in_array( 'disable_author_archives', $wpUtilities['wputilitiesList'] ) ) {
				add_action(
					'template_redirect',
					function () {
						// Disable author archives for frontend only
						if ( is_author() && ! is_admin() ) {
							wp_redirect( home_url(), 301 );
							exit;
						}
					}
				);

				add_filter(
					'author_link',
					function ( $link ) {
						return home_url();
					}
				);
			}

			// query monitor
			if ( in_array( 'query_monitor_lite', $wpUtilities['wputilitiesList'] ) ) {
				if ( ! current_user_can( 'manage_options' ) ) {
					return;
				}
				// Add Query Monitor Lite to Admin Bar
				add_action(
					'admin_bar_menu',
					function ( $wp_admin_bar ) {
						global $wpdb;

						// Basic metrics
						$load        = timer_stop( 0, 2 );
						$queries     = isset( $wpdb->num_queries ) ? $wpdb->num_queries : 0;
						$mem         = size_format( memory_get_usage( true ) );
						$peak        = size_format( memory_get_peak_usage( true ) );
						$phpver      = phpversion();
						$mysqlver    = $wpdb->db_version();
						$http_method = $_SERVER['REQUEST_METHOD'] ?? 'CLI';

						// OPcache Status
						$opcache_status = function_exists( 'opcache_get_status' ) && opcache_get_status( false );
						$opcache_msg    = $opcache_status && ! empty( $opcache_status['opcache_enabled'] )
						? "Enabled (Hits: {$opcache_status['hits']}, Misses: {$opcache_status['misses']})"
						: 'Disabled';

						// Main node
						$title = '⏱ ' . esc_html( $load ) . 's | 💾 ' . esc_html( $mem ) . ' | 🗄 ' . esc_html( $queries ) . ' queries';
						$wp_admin_bar->add_node(
							array(
								'id'    => 'qm-lite',
								'title' => $title,
								'href'  => '#',
							)
						);

						global $wp_version;
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-wp',
								'title'  => '🌀 WP Version: ' . esc_html( $wp_version ),
								'parent' => 'qm-lite',
							)
						);

						global $wp_scripts, $wp_styles;
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-scripts',
								'title'  => '📜 Scripts: ' . esc_html( count( $wp_scripts->queue ?? array() ) ),
								'parent' => 'qm-lite',
							)
						);

						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-styles',
								'title'  => '🎨 Styles: ' . esc_html( count( $wp_styles->queue ?? array() ) ),
								'parent' => 'qm-lite',
							)
						);

						// Peak memory
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-peak',
								'title'  => '📈 Peak Memory: ' . esc_html( $peak ),
								'parent' => 'qm-lite',
							)
						);

						// PHP version
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-php',
								'title'  => '⚙️ PHP Version: ' . esc_html( $phpver ),
								'parent' => 'qm-lite',
							)
						);

						// MySQL version
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-mysql',
								'title'  => '🗄 MySQL Version: ' . esc_html( $mysqlver ),
								'parent' => 'qm-lite',
							)
						);

						// Query details
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-sql',
								'title'  => '🔍 Total Queries: ' . esc_html( $queries ),
								'parent' => 'qm-lite',
							)
						);

						// OPcache
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-opcache',
								'title'  => '🗜 OPcache: ' . esc_html( $opcache_msg ),
								'parent' => 'qm-lite',
							)
						);

						// HTTP Method
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-method',
								'title'  => '🌐 HTTP Method: ' . esc_html( $http_method ),
								'parent' => 'qm-lite',
							)
						);

						// Server info
						$server_info = php_uname( 's' ) . ' (' . php_uname( 'r' ) . ')';
						$wp_admin_bar->add_node(
							array(
								'id'     => 'qm-lite-server',
								'title'  => '🖥 Server: ' . esc_html( $server_info ),
								'parent' => 'qm-lite',
							)
						);
					},
					999
				);
			}

			// switch theme preview
			if ( in_array( 'switch_theme_preview', $wpUtilities['wputilitiesList'] ) ) {
				add_filter(
					'template',
					function ( $current ) {
						if ( isset( $_GET['preview_theme'] ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) {
							return sanitize_text_field( $_GET['preview_theme'] );
						}
						return $current;
					}
				);

				add_filter(
					'stylesheet',
					function ( $current ) {
						if ( isset( $_GET['preview_theme'] ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) {
							return sanitize_text_field( $_GET['preview_theme'] );
						}
						return $current;
					}
				);
			}

			// duplicate post
			if ( in_array( 'duplicate_post', $wpUtilities['wputilitiesList'] ) ) {
				add_filter( 'post_row_actions', 'ecafe_duplicate_post_link', 10, 2 );
				add_filter( 'page_row_actions', 'ecafe_duplicate_post_link', 10, 2 );

				function ecafe_duplicate_post_link( $actions, $post ) {
					$wpUtilities = get_option( 'ecafe_wp_utilities' );
					$allowed     = ! empty( $wpUtilities['duplicate_post_types'] ) ? $wpUtilities['duplicate_post_types'] : array();
					if ( in_array( $post->post_type, $allowed ) ) {
						$url                  = wp_nonce_url(
							admin_url( 'admin.php?action=ecafe_duplicate_post&post=' . $post->ID ),
							'ecafe_duplicate_post_' . $post->ID
						);
						$actions['duplicate'] = '<a href="' . $url . '">' . esc_html__( 'Duplicate', 'essential-classy-addons-for-elementor' ) . '</a>';
					}
					return $actions;
				}

				add_action(
					'admin_action_ecafe_duplicate_post',
					function () {
						if ( ! isset( $_GET['post'] ) || ! isset( $_GET['_wpnonce'] ) ) {
							wp_die( 'Invalid request' );
						}

						$post_id = absint( $_GET['post'] );
						check_admin_referer( 'ecafe_duplicate_post_' . $post_id );

						$post = get_post( $post_id );
						if ( ! $post ) {
							wp_die( 'Post not found' );
						}

						// Duplicate post
						$new_post = array(
							'post_title'   => $post->post_title . ' (Copy)',
							'post_content' => $post->post_content,
							'post_status'  => 'draft',
							'post_type'    => $post->post_type,
							'post_author'  => get_current_user_id(),
						);
						$new_id   = wp_insert_post( $new_post );

						// Copy meta
						$meta = get_post_meta( $post_id );
						foreach ( $meta as $key => $values ) {
							foreach ( $values as $value ) {
								add_post_meta( $new_id, $key, maybe_unserialize( $value ) );
							}
						}

						wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_id ) );
						exit;
					}
				);
			}
		}
	}

	/**
	 * Hooks
	 */
	public function hooks() {
		add_action( 'admin_init', array( $this, 'init' ) );
		add_action( 'admin_menu', array( $this, 'optionsPageAppend' ) );
	}

	/**
	 * Init
	 */
	public function init() {
		$optionTabs = self::fieldsOption();
		foreach ( $optionTabs as $index => $optionTab ) {
			register_setting( $optionTab['id'], $optionTab['id'] );
		}
	}

	/**
	 * Pre Loader
	 */
	public function ecafe_add_preloader() {
		echo '<div class="ec-pre-loader"><div class="ec-pre-loader-in"></div></div>';
	}

	/**
	 * White Label
	 */
	public function ecafeWhiteLabel() {
		echo '<div class="ecafe-licence-whitelabel">
		<h1>' . esc_html__( 'Unlock Pro Features...', 'essential-classy-addons-for-elementor' ) . '</h1>
		<ul>
			<li>STEP I : Go to <a href="https://ecaddons.com/">Essential Classy Addons For Elementor</a> and Buy Pro Version.</li>
			<li>STEP II : Download and Install Plugin.</li>
			<li>STEP III : Activate and Unlock Pro Features...</li>
		</ul>
		<img src=' . ECAFE_URL . 'assets/images/whitelabel.png />
		</div>';
	}

	/**
	 * Widget save and fire action
	 */
	public function widgetsSaveFire() {
		$actionPage = 'ecafe_widgets';
		if ( isset( $_POST['submit-key'] ) && ! empty( $_POST['submit-key'] ) && $_POST['submit-key'] == 'Save' ) {
			$nonce = isset( $_POST['nonce_ecafe_widgets'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce_ecafe_widgets'] ) ) : '';
			if ( ! isset( $nonce ) || ! wp_verify_nonce( $nonce, 'nonce_ecafe_widgets_action' ) ) {
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} elseif ( get_option( $actionPage ) === false ) {
					$defaultValue = array( 'widgetsload' => '' );
					add_option( $actionPage, $defaultValue );
					wp_redirect( admin_url( 'admin.php?page=ecafe_widgets' ) );
			} else {
				$updateValue = array();
				$widgetsload = isset( $_POST['widgetsload'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['widgetsload'] ) ) : array();
				if ( isset( $widgetsload ) && ! empty( $widgetsload ) ) {
					$updateValue['widgetsload'] = $widgetsload;
				} elseif ( empty( $widgetsload ) ) {
					$updateValue['widgetsload'] = '';
				}
				update_option( $actionPage, $updateValue );
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			}
		} else {
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
		}
	}

	/**
	 * Extras List Save Options
	 */
	public function extraListSaveOptions() {
		$actionPage = 'ecafe_extension';
		if ( isset( $_POST['submit-key'] ) && ! empty( $_POST['submit-key'] ) && $_POST['submit-key'] == 'Save' ) {
			$nonce = isset( $_POST['nonce_ecafe_extension'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce_ecafe_extension'] ) ) : '';
			if ( ! isset( $nonce ) || ! wp_verify_nonce( $nonce, 'nonce_ecafe_extension_action' ) ) {
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} elseif ( get_option( $actionPage ) === false ) {
					$extrasList   = isset( $_POST['extrasList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['extrasList'] ) ) : array();
					$defaultValue = array( 'extrasList' => $extrasList );
					add_option( $actionPage, $defaultValue );
					wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} else {
				$updateValue = array();
				$extrasList  = isset( $_POST['extrasList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['extrasList'] ) ) : array();
				if ( isset( $extrasList ) && ! empty( $extrasList ) ) {
					$updateValue['extrasList'] = $extrasList;
				} elseif ( empty( $extrasList ) ) {
					$updateValue['extrasList'] = '';
				}
				update_option( $actionPage, $updateValue );
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			}
		} else {
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
		}
	}


	/**
	 * WP Performance Save Options
	 */
	public function wpPerformanceSaveOptions() {
		$actionPage = 'ecafe_wp_performance';
		if ( isset( $_POST['submit-key'] ) && ! empty( $_POST['submit-key'] ) && $_POST['submit-key'] == 'Save' ) {
			$nonce = isset( $_POST['nonce_ecafe_wp_performance'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce_ecafe_wp_performance'] ) ) : '';
			if ( ! isset( $nonce ) || ! wp_verify_nonce( $nonce, 'nonce_ecafe_wp_performance_action' ) ) {
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} elseif ( get_option( $actionPage ) === false ) {
					$wpperformanceList = isset( $_POST['wpperformanceList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['wpperformanceList'] ) ) : array();
					$defaultValue      = array( 'wpperformanceList' => $wpperformanceList );
					add_option( $actionPage, $defaultValue );
					wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} else {
				$updateValue       = array();
				$wpperformanceList = isset( $_POST['wpperformanceList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['wpperformanceList'] ) ) : array();
				// Collect exclude values
				$exclude_async_js           = isset( $_POST['exclude_async_js'] ) ? sanitize_text_field( wp_unslash( $_POST['exclude_async_js'] ) ) : '';
				$exclude_defer_js           = isset( $_POST['exclude_defer_js'] ) ? sanitize_text_field( wp_unslash( $_POST['exclude_defer_js'] ) ) : '';
				$exclude_preload_onload_css = isset( $_POST['exclude_preload_onload_css'] ) ? sanitize_text_field( wp_unslash( $_POST['exclude_preload_onload_css'] ) ) : '';
				$updateValue                = array(
					'wpperformanceList'          => $wpperformanceList,
					'exclude_async_js'           => $exclude_async_js,
					'exclude_defer_js'           => $exclude_defer_js,
					'exclude_preload_onload_css' => $exclude_preload_onload_css,
				);

				if ( get_option( $actionPage ) === false ) {
					add_option( $actionPage, $updateValue );
				} else {
					update_option( $actionPage, $updateValue );
				}
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			}
		} else {
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
		}
	}

	/**
	 * WP Security Save Options
	 */
	public function wpSecuritySaveOptions() {
		$actionPage = 'ecafe_wp_security';
		if ( isset( $_POST['submit-key'] ) && ! empty( $_POST['submit-key'] ) && $_POST['submit-key'] == 'Save' ) {
			$nonce = isset( $_POST['nonce_ecafe_wp_security'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce_ecafe_wp_security'] ) ) : '';
			if ( ! isset( $nonce ) || ! wp_verify_nonce( $nonce, 'nonce_ecafe_wp_security_action' ) ) {
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} elseif ( get_option( $actionPage ) === false ) {
					$wpsecurityList = isset( $_POST['wpsecurityList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['wpsecurityList'] ) ) : array();
					$defaultValue   = array( 'wpsecurityList' => $wpsecurityList );
					add_option( $actionPage, $defaultValue );
					wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			} else {
				$updateValue    = array();
				$wpsecurityList = isset( $_POST['wpsecurityList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['wpsecurityList'] ) ) : array();
				if ( isset( $wpsecurityList ) && ! empty( $wpsecurityList ) ) {
					$updateValue['wpsecurityList'] = $wpsecurityList;
				} elseif ( empty( $wpsecurityList ) ) {
					$updateValue['wpsecurityList'] = '';
				}
				update_option( $actionPage, $updateValue );
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			}
		} else {
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
		}
	}

	/**
	 * WP Utilities Save Options
	 */
	public function wpUtilitiesSaveOptions() {
		$actionPage = 'ecafe_wp_utilities';
		if ( isset( $_POST['submit-key'] ) && $_POST['submit-key'] === 'Save' ) {
			$nonce = isset( $_POST['nonce_ecafe_wp_utilities'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce_ecafe_wp_utilities'] ) ) : '';
			if ( ! wp_verify_nonce( $nonce, 'nonce_ecafe_wp_utilities_action' ) ) {
				wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
				exit;
			}

			$wputilitiesList = isset( $_POST['wputilitiesList'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['wputilitiesList'] ) ) : array();
			$updateValue     = array( 'wputilitiesList' => $wputilitiesList );

			// Extra: Save duplicate post types if enabled
			if ( in_array( 'duplicate_post', $wputilitiesList, true ) && isset( $_POST['duplicate_post_types'] ) ) {
				$duplicateTypes                      = array_map( 'sanitize_text_field', wp_unslash( $_POST['duplicate_post_types'] ) );
				$updateValue['duplicate_post_types'] = $duplicateTypes;
			}

			if ( get_option( $actionPage ) === false ) {
				add_option( $actionPage, $updateValue );
			} else {
				update_option( $actionPage, $updateValue );
			}
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			exit;
		} else {
			wp_redirect( admin_url( 'admin.php?page=' . $actionPage ) );
			exit;
		}
	}

	/**
	 * Widget lists
	 */
	public function ecafeWidgetList() {
		$this->widget_lists = array(
			'ecafe-accordion'                       => array(
				'label'   => esc_html__( 'Accordion', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/accordion/',
				'wdoc'    => 'https://ecaddons.com/docs/accordion-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=7mcz9eMpX40',
				'search'  => array( 'faq', 'toggle', 'tabs', 'vertical tab', 'collapsible', 'expandable', 'foldable' ),
			),
			'ecafe-adv-text-block'                  => array(
				'label'   => esc_html__( 'Advanced Text Block', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/advanced-text-block/',
				'wdoc'    => 'https://ecaddons.com/docs/advanced-text-block-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=1ts5PYoLxuM',
				'search'  => array( 'text editor', 'advanced editor' ),
			),
			'ecafe-advanced-button'                 => array(
				'label'   => esc_html__( 'Advanced Button', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/advanced-creative-button-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/creative-button-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=L22nCJIjbSI',
				'search'  => array( 'creative button', 'cta' ),
			),
			'ecafe-audio-player'                    => array(
				'label'   => esc_html__( 'Audio Player', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/audio-player/',
				'wdoc'    => 'https://ecaddons.com/docs/audio-player-tutorials/',
				'wvideo'  => 'https://youtu.be/WyMUZSLUQrE',
			),
			'ecafe-back-to-top'                     => array(
				'label'   => esc_html__( 'Back to Top', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/back-to-top/',
				'wdoc'    => 'https://ecaddons.com/docs/back-to-top-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=7qM0E5Dief4',
				'search'  => array( 'btt', 'scroll', 'scroll top', 'scroll up', 'go to top', 'return to top' ),
			),
			'ecafe-banner'                          => array(
				'label'   => esc_html__( 'Banner', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/banner/',
				'wdoc'    => 'https://ecaddons.com/docs/banner-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/Wayf0gaoplU',
				'search'  => array( 'image banner' ),
			),
			'ecafe-beforeafter-image'               => array(
				'label'   => esc_html__( 'Before After Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/before-after-image-comparison-slider-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/before-after-image-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=tPW-sM17DTs',
				'search'  => array( 'image compare', 'after image', 'before image' ),
			),
			'ecafe-blockquote'                      => array(
				'label'   => esc_html__( 'Blockquote', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/creative-blockquote/',
				'wdoc'    => 'https://ecaddons.com/docs/blockquote-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=x-xkJCuDhAo',
				'search'  => array( 'block quote' ),
			),
			'ecafe-business-hours'                  => array(
				'label'   => esc_html__( 'Business Hours', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/business-hours/',
				'wdoc'    => 'https://ecaddons.com/docs/business-hours-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=GtoLHbPzrLc',
				'search'  => array( 'opening', 'time table', 'schedule', 'opening hours', 'store hours', 'service timings', 'open close schedule' ),
			),
			'ecafe-button'                          => array(
				'label'   => esc_html__( 'Button', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/button/',
				'wdoc'    => 'https://ecaddons.com/docs/button-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=hEuud3BJ8_4',
				'search'  => array( 'creative button', 'cool button', 'advanced button', 'cta', 'call to action' ),
			),
			'ecafe-calendly'                        => array(
				'label'   => esc_html__( 'Calendly', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/calendly-meeting-scheduler/',
				'wdoc'    => 'https://ecaddons.com/docs/calendly-meeting-scheduler-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=az-vv5LfztU',
				'search'  => array( 'schedule', 'meeting', 'meeting schedule', 'booking' ),
			),
			'ecafe-changelog'                       => array(
				'label'   => esc_html__( 'Changelog', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/changelog/',
				'wdoc'    => 'https://ecaddons.com/docs/changelog-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=bzuCVf-RnnY',
				'search'  => array( 'list', 'animation', 'lists', 'release notes', 'version history', 'updates log', 'change history', 'revision tracker' ),
			),
			'ecafe-chart'                           => array(
				'label'   => esc_html__( 'Chart', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/chart/',
				'wdoc'    => 'https://ecaddons.com/docs/chart-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=PJxMZWjsHco',
				'search'  => array( 'advanced chart', 'line', 'bar', 'vertical bar', 'horizontal bar', 'radar', 'pie', 'doughnut', 'polararea', 'bubble', 'datachart', 'infograph', 'info graph' ),
			),
			'ecafe-circular-image-hover-effect'     => array(
				'label'   => esc_html__( 'Circular Image Hover Effect', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/circular-image-hover-effect/',
				'wdoc'    => 'https://ecaddons.com/docs/circular-image-hover-effect-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/69Ml6K3sI_I',
				'search'  => array( 'image circle', 'circle image', 'image circular', 'advanced image', 'image effect', 'circular effect' ),
			),
			'ecafe-circle-menu'                     => array(
				'label'   => esc_html__( 'Circle Menu', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/circle-menu-widget-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/circle-menu-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=NzHlsXqvD1s',
				'search'  => array( 'lists' ),
			),
			'ecafe-circular-progress'               => array(
				'label'   => esc_html__( 'Circular Progress', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/circular-progress/',
				'wdoc'    => 'https://ecaddons.com/docs/circular-progress-tutorials/',
				'wvideo'  => 'https://youtu.be/rEhsMe6iDeU',
				'search'  => array( 'circle progress' ),
			),
			'ecafe-contact-form-7'                  => array(
				'label'   => esc_html__( 'Contact Form 7', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'forms',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/contact-form-7/',
				'wdoc'    => 'https://ecaddons.com/docs/contact-form-7-widget-tutorial/',
				'search'  => array( 'cf7' ),
			),
			'ecafe-copyright'                       => array(
				'label'   => esc_html__( 'Copyright', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/copyright-year-dynamically-in-elementor-widget/',
				'wdoc'    => 'https://ecaddons.com/docs/copyright-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=qx9naRjtSug',
				'search'  => array( 'year', 'copy right', 'footer' ),
			),
			'ecafe-count-down'                      => array(
				'label'   => esc_html__( 'Countdown', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/countdown/',
				'wdoc'    => 'https://ecaddons.com/docs/countdown-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=-Y-3py1nplc',
				'search'  => array( 'count down', 'timer', 'sale', 'timer trek', 'deadline', 'live timer' ),
			),
			'ecafe-coupon-code'                     => array(
				'label'   => esc_html__( 'Coupon Code', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/coupon-code/',
				'wdoc'    => 'https://ecaddons.com/docs/coupon-code-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=u_rfCCsYKzA',
				'search'  => array( 'promo code', 'discount code', 'voucher code', 'offer code', 'deal code' ),
			),
			'ecafe-creative-gallery'                => array(
				'label'   => esc_html__( 'Creative Gallery', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/creative-gallery/',
				'wdoc'    => 'https://ecaddons.com/docs/creative-gallery-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=5JuRxuNSnHw',
				'search'  => array( 'images', 'clip', 'clip path' ),
			),
			'ecafe-creative-title'                  => array(
				'label'   => esc_html__( 'Creative Title', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/creative-text-title-info-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/creative-text-title-info-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=JrqLf-DsIDg',
				'search'  => array( 'highlight', 'title creative' ),
			),
			'ecafe-darkmode-styling'                => array(
				'label'   => esc_html__( 'Dark Mode Styling', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/dark-mode-styling/',
				'search'  => array( 'darkmode', 'light', 'dark theme toggle', 'night shift', 'cosmic dark' ),
			),
			'ecafe-design-grid-layout'              => array(
				'label'   => esc_html__( 'Design Grid Layout', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/design-grid-layout/',
				'wdoc'    => 'https://ecaddons.com/docs/design-grid-layout-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=1VUOnLUzAtM',
				'search'  => array( 'designer tool' ),
			),
			'ecafe-device-mockup'                   => array(
				'label'   => esc_html__( 'Device Mockup', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/device-mockup/',
				'wdoc'    => 'https://ecaddons.com/docs/device-mockup-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=xU2u4yKaZJE',
				'search'  => array( 'laptop', 'tablet', 'mobile' ),
			),
			'ecafe-draw-svg'                        => array(
				'label'   => esc_html__( 'Draw SVG', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/elementor-draw-svg-vivus-widget/',
				'wdoc'    => 'https://ecaddons.com/docs/elementor-draw-svg-vivus-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=-RgN0pqNJf0',
				'search'  => array( 'svg draw', 'svg animation', 'vivus svg' ),
			),
			'ecafe-dropcap'                         => array(
				'label'   => esc_html__( 'Dropcap', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/dropcap/',
				'wdoc'    => 'https://ecaddons.com/docs/dropcap-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Wx9WUP7Z5V0',
				'search'  => array( 'drop cap', 'capital', 'first capital' ),
			),
			'ecafe-dual-image'                      => array(
				'label'   => esc_html__( 'Dual Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/dual-image/',
				'wdoc'    => 'https://ecaddons.com/docs/dual-image-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/iVEp8nnV5gk',
				'search'  => array( 'image dual' ),
			),
			'ecafe-dynamic-comparison-table'        => array(
				'label'   => esc_html__( 'Dynamic Comparison Table', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/dynamic-comparison-table/',
				'wdoc'    => 'https://ecaddons.com/docs/dynamic-comparison-table-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/CDtIC61_dck',
				'search'  => array( 'service', 'pricing' ),
			),
			'ecafe-dynamic-ticker'                  => array(
				'label'   => esc_html__( 'Dynamic Ticker', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/dynamic-news-ticker/',
				'wdoc'    => 'https://ecaddons.com/docs/dynamic-ticker-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=gX9wG9k3MD0',
				'search'  => array( 'news', 'news slider', 'post slider', 'post navigation' ),
			),
			'ecafe-flipbox'                         => array(
				'label'   => esc_html__( 'Flipbox', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/flipbox/',
				'wdoc'    => 'https://ecaddons.com/docs/flipbox-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=4TzJoHFvBd0',
				'search'  => array( 'flip box', 'flip info', 'info flip', 'front', 'front back', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-flipbox-grid'                    => array(
				'label'   => esc_html__( 'Flipbox Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/flipbox-grid-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/flipbox-grid-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=mwSiMeZGNrk',
				'search'  => array( 'grid flip', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-flipbox-slider'                  => array(
				'label'   => esc_html__( 'Flipbox Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/flipbox-slider-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/flipbox-slider-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=eeiP26S7DV4',
				'search'  => array( 'flip box slider', 'slide custom listing', 'slide', 'slider', 'custom', 'listing', 'slide custom', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-freebusy'                        => array(
				'label'   => esc_html__( 'Freebusy', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/freebusy-meeting-scheduler/',
				'wdoc'    => 'https://ecaddons.com/docs/freebusy-meeting-scheduler-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Mh8YwnQOH3o',
				'search'  => array( 'schedule', 'meeting', 'meeting schedule' ),
			),
			'ecafe-gradient-underline-text'         => array(
				'label'   => esc_html__( 'Gradient Underline Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/gradient-underline-text/',
				'wdoc'    => 'https://ecaddons.com/docs/gradient-underline-text-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=9uD8K_jNz68',
				'search'  => array( 'underline gradient' ),
			),
			'ecafe-gravity-forms'                   => array(
				'label'   => esc_html__( 'Gravity Forms', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'forms',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/gravity-forms/',
				'wdoc'    => 'https://ecaddons.com/docs/gravity-forms-widget-tutorial/',
			),
			'ecafe-grid-custom-listing'             => array(
				'label'   => esc_html__( 'Grid Custom Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/grid-custom-listing-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/grid-custom-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=gcDrgYzSx84',
				'search'  => array( 'grid listing', 'masonry', 'masonry listing' ),
			),
			'ecafe-grid-post-listing'               => array(
				'label'   => esc_html__( 'Grid Post Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/grid-post-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/grid-post-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=iicO0c6ah5E',
				'search'  => array( 'cpt', 'masonry', 'grid listing', 'masonry listing' ),
			),
			'ecafe-heading-animation'               => array(
				'label'   => esc_html__( 'Heading Animation', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/heading-animation/',
				'wdoc'    => 'https://ecaddons.com/docs/heading-animation-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=UlWN7izzcm4',
				'search'  => array( 'type', 'typing' ),
			),
			'ecafe-heading-gradient-animation'      => array(
				'label'   => esc_html__( 'Heading Gradient Animation', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/heading-gradient-animation/',
				'wdoc'    => 'https://ecaddons.com/docs/heading-gradient-animation-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=xooK-DHID-g',
			),
			'ecafe-horizontal-page-scroll'          => array(
				'label'   => esc_html__( 'Horizontal Page Scroll', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/horizontal-page-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/horizontal-page-scroll-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/jqgcWm1FjX8',
				'search'  => array( 'page scroll', 'horizontal scroll', 'scroll horizontal' ),
			),
			'ecafe-hotspot'                         => array(
				'label'   => esc_html__( 'Hotspot', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/hotspots/',
				'wdoc'    => 'https://ecaddons.com/docs/hotspot-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=yh8GY0oQka8',
				'search'  => array( 'image', 'image hot spot', 'image hotspot', 'hot spot' ),
			),
			'ecafe-hover-background'                => array(
				'label'   => esc_html__( 'Hover Background', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/hover-background/',
				'wdoc'    => 'https://ecaddons.com/docs/hover-background-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=4yokyDoD2M0',
				'search'  => array( 'background change', 'bg change', 'image change', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-image-accordion'                 => array(
				'label'   => esc_html__( 'Image Accordion', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-accordion/',
				'wdoc'    => 'https://ecaddons.com/docs/image-accordion-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=vmGin1MyCzA',
				'search'  => array( 'vertical accordion', 'horizontal accordion', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-image-animated-shape'            => array(
				'label'   => esc_html__( 'Image Animated Shape', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-animated-shape/',
				'wdoc'    => 'https://ecaddons.com/docs/image-animated-shape-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/2bmkQrEmnGA',
				'search'  => array( 'card effect' ),
			),
			'ecafe-image-hover-effect'              => array(
				'label'   => esc_html__( 'Image Hover Effect', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-hover-effect/',
				'wdoc'    => 'https://ecaddons.com/docs/image-hover-effect-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=-7-98EpNDjk',
				'search'  => array( 'advanced image hover', 'image effect', 'infobox', 'infobanner', 'button', 'box', 'skin', 'tags', 'title', 'heading', 'servicebox', 'image', 'layout', 'creative', 'html', 'animation', 'builder', 'custom', 'loop', 'social', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-image-info-slide'                => array(
				'label'   => esc_html__( 'Image Info Slide', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/image-info-slide-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/image-info-slide-elementor-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=meL9utvmi8c',
				'search'  => array( 'image sliding', 'slide', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-image-mask-hover-effect'         => array(
				'label'   => esc_html__( 'Image Mask Hover Effect', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-mask-hover-effect/',
				'wdoc'    => 'https://ecaddons.com/docs/image-mask-hover-effect-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/Na5dLtbvBWI',
				'search'  => array( 'advanced image hover', 'image effect', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-image-mask-layer'                => array(
				'label'   => esc_html__( 'Image Mask Layer', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-mask-layer/',
				'wdoc'    => 'https://ecaddons.com/docs/image-mask-layer-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/VU-TeB0MN04',
				'search'  => array( 'layer image', 'advanced image', 'image effect', 'card effect' ),
			),
			'ecafe-image-scroll'                    => array(
				'label'   => esc_html__( 'Image Scroll', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-sequence-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/image-scroll-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=5cNPGBntpu4',
				'search'  => array( 'image scroll sequence', 'sequence' ),
			),
			'ecafe-imageswap'                       => array(
				'label'   => esc_html__( 'Image Swap', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/image-swap/',
				'wdoc'    => 'https://ecaddons.com/docs/image-swap-tutorials/',
				'wvideo'  => 'https://youtu.be/M6BzKXx52Xc',
				'search'  => array( 'imageswap' ),
			),
			'ecafe-infobox'                         => array(
				'label'   => esc_html__( 'Info Box', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/info-box/',
				'wdoc'    => 'https://ecaddons.com/docs/info-box-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=HDiBMfQtqcY',
				'search'  => array( 'infobox', 'icon', 'box layout', 'iconic layout', 'list', 'info', 'details box', 'information', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infobox-grid'                    => array(
				'label'   => esc_html__( 'Info Box Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/infobox-grid-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/infobox-grid-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=CuRawocdFy8',
				'search'  => array( 'icon', 'box layout', 'iconic layout', 'infobox masonry', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infobox-slider'                  => array(
				'label'   => esc_html__( 'Info Box Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/infobox-slider-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/infobox-slider-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=T5OxGzjKwyE',
				'search'  => array( 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infocard'                        => array(
				'label'   => esc_html__( 'Info Card', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/info-3d-card-elementor-wp/',
				'wdoc'    => 'https://ecaddons.com/docs/info-3d-card-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=vdsQkoQNF04',
				'search'  => array( 'box layout', 'iconic layout', 'list', 'info box', '3d', '3d card', 'infocard', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infocard-grid'                   => array(
				'label'   => esc_html__( 'Info Card Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/info-3d-grid-cards-elementor-wp/',
				'wdoc'    => 'https://ecaddons.com/docs/info-3d-grid-card-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=YClnXpcjJ0w',
				'search'  => array( 'infobox', 'box layout', 'iconic layout', 'list', 'info box', 'info card 3d', '3d card', 'infocard', 'grid', 'infocardgrid', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infocard-slider'                 => array(
				'label'   => esc_html__( 'Info Card Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/info-3d-slider-cards-elementor-wp/',
				'wdoc'    => 'https://ecaddons.com/docs/info-3d-slider-card-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=wjiddbtPIIU',
				'search'  => array( 'infobox', 'box layout', 'iconic layout', 'list', 'info box', 'slider', 'slide', 'custom', 'listing', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infocircle'                      => array(
				'label'   => esc_html__( 'Info Circle', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/interactive-info-circle-widget-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/info-circle-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=LFrKoxCVKMI',
				'search'  => array( 'circle info', 'info icon', 'information', 'circular info box', 'info bubble', 'circular feature box', 'highlight circle', 'round info card', 'info dot' ),
			),
			'ecafe-infoprofile'                     => array(
				'label'   => esc_html__( 'Info Profile', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/info-profile-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/info-profile-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=rLeNUOC_s60',
				'search'  => array( 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infoprofile-grid'                => array(
				'label'   => esc_html__( 'Info Profile Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/info-profile-grid-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/info-profile-grid-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=jSDrZ6BM8R0',
				'search'  => array( 'masonry', 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infoprofile-slider'              => array(
				'label'   => esc_html__( 'Info Profile Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/info-profile-slider-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/info-profile-slider-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=aF6wrLLSl-k',
				'search'  => array( 'card', 'hover card', 'card effect', 'hover effect' ),
			),
			'ecafe-infounfold'                      => array(
				'label'   => esc_html__( 'Info Unfold Card', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/info-unfold-card-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/info-unfold-card-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=8o0bmJZWH5Q',
				'search'  => array( 'card unfold' ),
			),
			'ecafe-layer-image'                     => array(
				'label'   => esc_html__( 'Layer Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/advanced-layer-image-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/layer-image-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=so6ZUhnf-kI',
				'search'  => array( 'image layer', 'image collection', 'collection' ),
			),
			'ecafe-logo-slider'                     => array(
				'label'   => esc_html__( 'Logo Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/logo-slider/',
				'wdoc'    => 'https://ecaddons.com/docs/logo-slider-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/b8Q7uqUPEUw',
				'search'  => array( 'image carousel', 'logo carousel', 'clients' ),
			),
			'ecafe-lottie'                          => array(
				'label'   => esc_html__( 'Lottie', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/lottie/',
				'wdoc'    => 'https://ecaddons.com/docs/lottie-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=8G71n95wnyg',
				'search'  => array( 'animations', 'lottiefiles', 'bodylines', 'lottie animation', 'bodymoving', 'hover', 'click', 'mouse over out effect', 'parallax effect' ),
			),
			'ecafe-magazine-repeater-listing'       => array(
				'label'   => esc_html__( 'Magazine Repeater Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/magazine-repeater-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/magazine-repeater-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=CN6PrIGeXSQ',
				'search'  => array( 'magazine slide', 'repeater magazine', 'repeater slide' ),
			),
			'ecafe-magazine-listing'                => array(
				'label'   => esc_html__( 'Magazine Post Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/magazine-post-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/magazine-post-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=exCq13N88w0',
				'search'  => array( 'magazine listing', 'magazine list', 'magazine slide', 'post magazine', 'post slide', 'post magazine listing' ),
			),
			'ecafe-mailchimp'                       => array(
				'label'   => esc_html__( 'Mailchimp', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/integrate-mailchimp-with-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/mail-chimp-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=0qVCCrnLR50',
				'search'  => array( 'email marketing', 'email', 'marketing', 'marketing email', 'subscription', 'mail chimp' ),
			),
			'ecafe-manual-comparison-table'         => array(
				'label'   => esc_html__( 'Manual Comparison Table', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/manual-comparison-table/',
				'wdoc'    => 'https://ecaddons.com/docs/manual-comparison-table-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/EIN8He4BHLs',
				'search'  => array( 'pricing', 'service' ),
			),
			'ecafe-marketing-link'                  => array(
				'label'   => esc_html__( 'Marketing Link', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/marketing-link/',
				'wdoc'    => 'https://ecaddons.com/docs/marketing-link-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=s7bjWanLBG0',
				'search'  => array( 'affiliate', 'button', 'creative button', 'cool button', 'advanced button', 'link', 'marketing', 'promo link', 'promo bridge' ),
			),
			'ecafe-marquee'                    		=> array(
				'label'   => esc_html__( 'Marquee Repeater', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/marquee/',
				'wdoc'    => 'https://ecaddons.com/docs/marquee-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/ls4A-pgCFNQ',
				'search'  => array( 'text animation', 'marquee left', 'marquee right' ),
			),
			'ecafe-marquee-text'                    => array(
				'label'   => esc_html__( 'Marquee Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/marquee-text-animation-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/marquee-text-animation-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=SYknNpsa31w',
				'search'  => array( 'text animation', 'marquee left', 'marquee right' ),
			),
			'ecafe-megamenu'                        => array(
				'label'   => esc_html__( 'Mega Menu', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/mega-menu/',
				'wdoc'    => 'https://ecaddons.com/docs/mega-menu-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/9c6Kt4Cpal0',
				'search'  => array( 'menu', 'navigation' ),
			),
			'ecafe-messagebox'                      => array(
				'label'   => esc_html__( 'Message Box', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/message-box-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/message-box-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=boDb4w6aSug',
				'search'  => array( 'alert', 'messagebox' ),
			),
			'ecafe-mobilemenu'                      => array(
				'label'   => esc_html__( 'Mobile Menu', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/mobile-menu/',
				'wdoc'    => 'https://ecaddons.com/docs/mobile-menu-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=0NsHesfcioo',
				'search'  => array( 'navigation', 'navigation menu', 'site menu', 'device menu', 'swipe menu', 'swiper menu', 'slide menu', 'popup', 'pop up' ),
			),
			'ecafe-motion-text-circle'              => array(
				'label'   => esc_html__( 'Motion Text Circle', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/motion-text-circle/',
				'wdoc'    => 'https://ecaddons.com/docs/motion-text-circle-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/Cekqoc1uE30',
				'search'  => array( 'text animation', 'marquee left', 'marquee right' ),
			),
			'ecafe-navigation-menu'                 => array(
				'label'   => esc_html__( 'Navigation Menu', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/navigation-menu/',
				'wdoc'    => 'https://ecaddons.com/docs/navigation-menu-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=JqdXK2bf2ug',
				'search'  => array( 'site menu' ),
			),
			'ecafe-page-piling'                     => array(
				'label'   => esc_html__( 'Page Pilling', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/page-pilling-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/page-pilling-scroll-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=m06baDsjS6Q',
				'search'  => array( 'pagepiling', 'piling', 'layered views', 'stacked', 'scrollable' ),
			),
			'ecafe-page-scroll-to-id'               => array(
				'label'   => esc_html__( 'Page Scroll to Id', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/page-scroll-to-id/',
				'wdoc'    => 'https://ecaddons.com/docs/page-scroll-to-id-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/nW4iXe84teY',
				'search'  => array( 'scroll navigation' ),
			),
			'ecafe-particles-effects'               => array(
				'label'   => esc_html__( 'Particles Effects', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/particles-effects-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/particles-effects-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Dusm9hnRpXM',
				'search'  => array( 'background' ),
			),
			'ecafe-pdf-viewer'                      => array(
				'label'   => esc_html__( 'PDF Viewer', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/pdf-viewer/',
				'wdoc'    => 'https://ecaddons.com/docs/pdf-viewer-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=dcVJM3MPKtU',
			),
			'ecafe-popup-offcanvas'                 => array(
				'label'   => esc_html__( 'Popup / Offcanvas', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/popup-offcanvas-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/popup-offcanvas-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=xPB76Yy9wBw',
			),
			'ecafe-preloader'                       => array(
				'label'   => esc_html__( 'Pre Loader', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/preloader-animation/',
				'wdoc'    => 'https://ecaddons.com/docs/preloader-animation-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=AjVhWo4V5W4',
				'search'  => array( 'preloader' ),
			),
			'ecafe-pricing-menu'                    => array(
				'label'   => esc_html__( 'Pricing Menu', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/pricing-menu/',
				'wdoc'    => 'https://ecaddons.com/docs/pricing-menu-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=0Z531Qt61PI',
				'search'  => array( 'food menu', 'lists' ),
			),
			'ecafe-pricing-table'                   => array(
				'label'   => esc_html__( 'Pricing Table', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/pricing-table/',
				'wdoc'    => 'https://ecaddons.com/docs/pricing-table-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=7i5JZTR3Bn0',
			),
			'ecafe-product-category-grid'           => array(
				'label'   => esc_html__( 'Product Category Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/elementor-woocommerce-products-category-grid/',
				'wdoc'    => 'https://ecaddons.com/docs/product-category-grid-woo-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=apR6MffgucQ',
				'search'  => array( 'woocommerce', 'woo product', 'woo product category', 'woo category product' ),
			),
			'ecafe-product-category-slide'          => array(
				'label'   => esc_html__( 'Product Category Slide', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/elementor-woocommerce-products-category-slider/',
				'wdoc'    => 'https://ecaddons.com/docs/product-category-slider-woo-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=q_arUmTCPYw',
				'search'  => array( 'woocommerce', 'woo product', 'woo product category', 'woo category product' ),
			),
			'ecafe-product-grid'                    => array(
				'label'   => esc_html__( 'Product Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/elementor-woocommerce-products-grid/',
				'wdoc'    => 'https://ecaddons.com/docs/product-grid-woo-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=vgslXL9BWv8',
				'search'  => array( 'woocommerce', 'woo product' ),
			),
			'ecafe-product-slide'                   => array(
				'label'   => esc_html__( 'Product Slide', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/elementor-woocommerce-products-slider/',
				'wdoc'    => 'https://ecaddons.com/docs/product-slider-woo-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=aqQCVob5Vu4',
				'search'  => array( 'woocommerce', 'woo product' ),
			),
			'ecafe-action-schema'                   => array(
				'label'   => esc_html__( 'Action Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/action-schema/',
			),
			'ecafe-article-blogposting-schema'      => array(
				'label'   => esc_html__( 'Article / BlogPosting Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/article-blogposting-schema/',
			),
			'ecafe-audioobject-schema'              => array(
				'label'   => esc_html__( 'Audio Object Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/audio-object-schema/',
			),
			'ecafe-book-schema'                     => array(
				'label'   => esc_html__( 'Book Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/book-schema/',
			),
			'ecafe-course-schema'                   => array(
				'label'   => esc_html__( 'Course Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/course-schema/',
			),
			'ecafe-event-schema'                    => array(
				'label'   => esc_html__( 'Event Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/event-schema/',
			),
			'ecafe-howto-schema'                    => array(
				'label'   => esc_html__( 'HowTo Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/howto-schema/',
			),
			'ecafe-imageobject-schema'              => array(
				'label'   => esc_html__( 'Image Object Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/image-object-schema/',
			),
			'ecafe-jobposting-schema'               => array(
				'label'   => esc_html__( 'Job Posting Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/job-posting-schema/',
			),
			'ecafe-localbusiness-schema'            => array(
				'label'   => esc_html__( 'Local Business Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/local-business-schema/',
			),
			'ecafe-medicalhealth-schema'            => array(
				'label'   => esc_html__( 'Medical / Health Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/medical-health-schema/',
			),
			'ecafe-organization-schema'             => array(
				'label'   => esc_html__( 'Organization Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/organization-schema/',
			),
			'ecafe-person-schema'                   => array(
				'label'   => esc_html__( 'Person Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/person-schema/',
			),
			'ecafe-product-schema'                  => array(
				'label'   => esc_html__( 'Product Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/product-schema/',
			),
			'ecafe-recipe-schema'                   => array(
				'label'   => esc_html__( 'Recipe Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/recipe-schema/',
			),
			'ecafe-review-schema'                   => array(
				'label'   => esc_html__( 'Review Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/review-schema/',
			),
			'ecafe-service-schema'                  => array(
				'label'   => esc_html__( 'Service Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/service-schema/',
			),
			'ecafe-softwareapplication-schema'      => array(
				'label'   => esc_html__( 'Sofware Application Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/sofware-application-schema/',
			),
			'ecafe-techarticle-schema'              => array(
				'label'   => esc_html__( 'Tech Article Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/tech-article-schema/',
			),
			'ecafe-video-schema'                    => array(
				'label'   => esc_html__( 'Video Schema', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/pro/video-schema/',
			),
			'ecafe-qr-code'                         => array(
				'label'   => esc_html__( 'QR Code', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/qr-code-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/qr-code-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IxJ4Gkb6n6A',
				'search'  => array( 'qrcode', 'scanner code', 'scan' ),
			),
			'ecafe-randomimage'                     => array(
				'label'   => esc_html__( 'Random Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/random-image/',
				'wdoc'    => 'https://ecaddons.com/docs/random-image-tutorials/',
				'wvideo'  => 'https://youtu.be/XNHEDbFUs5w',
				'search'  => array( 'randomimage' ),
			),
			'ecafe-rss-feed-grid'                   => array(
				'label'   => esc_html__( 'RSS Feed Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/rss-feed-grid/',
				'wdoc'    => 'https://ecaddons.com/docs/rss-feed-grid-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/XV2B4_Fc__g',
			),
			'ecafe-rss-feed-slider'                 => array(
				'label'   => esc_html__( 'RSS Feed Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/rss-feed-slider/',
				'wdoc'    => 'https://ecaddons.com/docs/rss-feed-slider-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/gC2u70-U3hw',
			),
			'ecafe-scroll-background'               => array(
				'label'   => esc_html__( 'Scroll Background', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/background-color-change-on-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/scroll-background-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=gWClV8k90vE',
				'search'  => array( 'color changer', 'background color changer' ),
			),
			'ecafe-scroll-image'                    => array(
				'label'   => esc_html__( 'Scroll Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/background-image-change-on-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/scroll-image-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=PhFe1glGQvo',
				'search'  => array( 'image changer', 'background image changer' ),
			),
			'ecafe-scroll-progress'                 => array(
				'label'   => esc_html__( 'Scroll Progress', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/scroll-progress/',
				'wdoc'    => 'https://ecaddons.com/docs/scroll-progress-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=W1JU2Y1peUY',
				'search'  => array( 'line scroll', 'scroll indicator', 'page scroll tracker', 'scroll bar progress', 'progress bar tracker', 'scroll progression' ),
			),
			'ecafe-scroll-highlight-text'           => array(
				'label'   => esc_html__( 'Scroll Highlight Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/scroll-highlight-text/',
				'wdoc'    => 'https://ecaddons.com/docs/scroll-highlight-text-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/1VNuVSKBLnc',
				'search'  => array( 'line scroll', 'scroll indicator' ),
			),
			'ecafe-service-lists'                   => array(
				'label'   => esc_html__( 'Service Lists', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/service-lists/',
				'wdoc'    => 'https://ecaddons.com/docs/service-lists-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=UV1WpaAuMlI',
				'search'  => array( 'info lists', 'service portfolio' ),
			),
			'ecafe-slide-anything'                  => array(
				'label'   => esc_html__( 'Slide Anything', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/slide-anything-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/slide-anything-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=_9W3tuDBP-s',
				'search'  => array( 'slide custom listing', 'slide', 'slider', 'custom', 'listing', 'slide custom', 'template', 'anything slide' ),
			),
			'ecafe-slide-custom-listing'            => array(
				'label'   => esc_html__( 'Slide Custom Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/slide-custom-listing-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/slide-custom-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=8MXpxDMQW8I',
			),
			'ecafe-slide-post-listing'              => array(
				'label'   => esc_html__( 'Slide Post Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/slide-post-listing-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/slide-post-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=xH_Gtv7op88',
			),
			'ecafe-smart-deadline-timer'            => array(
				'label'   => esc_html__( 'Smart Deadline Timer', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/smart-deadline-timer/',
				'wdoc'    => 'https://ecaddons.com/docs/smart-deadline-timer-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/0xcHc6I-UYg',
				'search'  => array( 'ever green', 'evergreen', 'adaptive', 'urgency booster', 'scarcity', 'fomo', 'sales' ),
			),
			'ecafe-smart-listing'                   => array(
				'label'   => esc_html__( 'Smart Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/smart-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/smart-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=VY3n5vE2ouM',
				'search'  => array( 'custom listing', 'custom post listing' ),
			),
			'ecafe-smart-custom-listing'            => array(
				'label'   => esc_html__( 'Smart Custom Listing', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/smart-custom-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/smart-custom-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=QnfHob2_gdU',
				'search'  => array( 'custom listing' ),
			),
			'ecafe-smooth-scroll'                   => array(
				'label'   => esc_html__( 'Smooth Scroll', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/smooth-scroll/',
				'wdoc'    => 'https://ecaddons.com/docs/smooth-scroll-widget-tutorial/',
				'wvideo'  => 'https://youtu.be/VZOa8HzvO1E',
			),
			'ecafe-split-image'                     => array(
				'label'   => esc_html__( 'Split Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/split-image/',
				'wdoc'    => 'https://ecaddons.com/docs/split-image-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/X8299HTfeuo',
				'search'  => array( 'image split', 'image animation' ),
			),
			'ecafe-spread-image'                    => array(
				'label'   => esc_html__( 'Spread image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/spread-image/',
				'wdoc'    => 'https://ecaddons.com/docs/spread-image-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/DBodeheRIII',
				'search'  => array( 'image spred' ),
			),
			'ecafe-social-icons'                    => array(
				'label'   => esc_html__( 'Social Icons', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/social-icons/',
				'wdoc'    => 'https://ecaddons.com/docs/social-icons-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=YQnMhf5dRe8',
			),
			'ecafe-steps'                           => array(
				'label'   => esc_html__( 'Steps', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/advanced-steps-process/',
				'wdoc'    => 'https://ecaddons.com/docs/advanced-steps-process-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=HwM4rz4Hwxs',
				'search'  => array( 'process step', 'lists', 'line', 'advanced steps', 'advanced process steps' ),
			),
			'ecafe-sticky-video'                    => array(
				'label'   => esc_html__( 'Sticky Video', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/sticky-video-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=X-hWQNuPzis',
				'search'  => array( 'video sticky' ),
			),
			'ecafe-switcher'                        => array(
				'label'   => esc_html__( 'Switcher', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/content-switcher-widget-for-elementor/',
				'wdoc'    => 'https://ecaddons.com/docs/switcher-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Rz4p4jxhUCo',
				'search'  => array( 'toggle', 'tab', 'content switcher', 'interactive toggle', 'mode switcher', 'style switcher' ),
			),
			'ecafe-table'                           => array(
				'label'   => esc_html__( 'Table', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/table/',
				'wdoc'    => 'https://ecaddons.com/docs/table-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Ex_pR2vcpY8',
			),
			'ecafe-toc'                             => array(
				'label'   => esc_html__( 'Table of Content', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/table-of-contents/',
				'wdoc'    => 'https://ecaddons.com/docs/table-of-content-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=xCEfz-K-lwI',
				'search'  => array( 'toc' ),
			),
			'ecafe-teammember'                      => array(
				'label'   => esc_html__( 'Team Member', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/team-member/',
				'wdoc'    => 'https://ecaddons.com/docs/team-member-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=qbZwVOjgpzU',
				'search'  => array( 'team showcase', 'meet the team', 'crew', 'people', 'contributors' ),
			),
			'ecafe-teammember-grid'                 => array(
				'label'   => esc_html__( 'Team Member Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/team-member-grid-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/team-member-grid-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=DCedOW2ZNWc',
			),
			'ecafe-teammember-slider'               => array(
				'label'   => esc_html__( 'Team Member Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/team-member-slider-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/team-member-slider-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=hXGmW4Gg0Qs',
			),
			'ecafe-testimonial'                     => array(
				'label'   => esc_html__( 'Testimonial', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/testimonial/',
				'wdoc'    => 'https://ecaddons.com/docs/testimonial-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=O1nTF3hLu7o',
				'search'  => array( 'client feedback', 'customer reviews', 'success stories', 'reviews' ),
			),
			'ecafe-testimonial-grid'                => array(
				'label'   => esc_html__( 'Testimonial Grid', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/testimonial-grid-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/testimonial-grid-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=KH7Tqd6wS1I',
			),
			'ecafe-testimonial-slider'              => array(
				'label'   => esc_html__( 'Testimonial Slider', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/testimonial-slider-listing/',
				'wdoc'    => 'https://ecaddons.com/docs/testimonial-slider-listing-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=tpBAhnIw5LY',
			),
			'ecafe-timeline'                        => array(
				'label'   => esc_html__( 'Timeline', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/timeline/',
				'wdoc'    => 'https://ecaddons.com/docs/timeline-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=aYqSsoj6_hw',
				'search'  => array( 'history scroll', 'time line', 'progress' ),
			),
			'ecafe-title'                           => array(
				'label'   => esc_html__( 'Title', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/title/',
				'wdoc'    => 'https://ecaddons.com/docs/title-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=RmQkB1pxk18',
				'search'  => array( 'advanced title', 'info title', 'heading' ),
			),
			'ecafe-tabs'                            => array(
				'label'   => esc_html__( 'Tabs', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/tabs/',
				'wdoc'    => 'https://ecaddons.com/docs/tabs-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=uR7tumFA6tQ',
				'search'  => array( 'tours', 'vertical', 'horizontal', 'vertical tabs', 'horizontal tabs' ),
			),
			'ecafe-text-background'                 => array(
				'label'   => esc_html__( 'Text Background', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/text-background/',
				'wdoc'    => 'https://ecaddons.com/docs/text-background-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=qQrz76qANx8',
				'search'  => array( 'gif', 'background', 'creative text', 'text style enhancer' ),
			),
			'ecafe-unfold-content'                  => array(
				'label'   => esc_html__( 'Unfold Content', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pro',
				'tag'     => 'pro',
				'wdemo'   => 'https://ecaddons.com/pro/unfold-content/',
				'wdoc'    => 'https://ecaddons.com/docs/unfold-content-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=eABtWCWCvvU',
				'search'  => array( 'read more', 'more', 'content', 'expand', 'load more' ),
			),
			'ecafe-whatsapp'                        => array(
				'label'   => esc_html__( 'Whatsapp', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/whatsapp/',
				'wdoc'    => 'https://ecaddons.com/docs/whatsapp-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=_J22-DkZQNs',
				'search'  => array( 'whats app' ),
			),
			'ecafe-wpforms'                         => array(
				'label'   => esc_html__( 'WPForms', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'forms',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/wpforms/',
				'wdoc'    => 'https://ecaddons.com/docs/wpforms-widget-tutorial/',
				'search'  => array( 'wp forms' ),
			),
			'ecafe-woocommerce-cart'                => array(
				'label'   => esc_html__( 'WooCommerce Cart', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'woocommerce',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/cart/?add-to-cart=2169',
				'wdoc'    => 'https://ecaddons.com/docs/woocommerce-cart-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=jWjNPu674aQ',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-checkout'            => array(
				'label'   => esc_html__( 'WooCommerce Checkout', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'woocommerce',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/checkout/?add-to-cart=2169',
				'wdoc'    => 'https://ecaddons.com/docs/woocommerce-checkout-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=jWjNPu674aQ',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-myaccount'           => array(
				'label'   => esc_html__( 'WooCommerce MyAccount', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'woocommerce',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/my-account/',
				'wdoc'    => 'https://ecaddons.com/docs/woocommerce-myaccount-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=jWjNPu674aQ',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-ordertrack'          => array(
				'label'   => esc_html__( 'WooCommerce Order Track', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'woocommerce',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/woocommerce-order-track/',
				'wdoc'    => 'https://ecaddons.com/docs/woocommerce-order-track-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=jWjNPu674aQ',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-breadcrumb'          => array(
				'label'   => esc_html__( 'Woo Breadcrumb', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/breadcrumb-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-title'               => array(
				'label'   => esc_html__( 'Woo Title', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/title-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-short-description'   => array(
				'label'   => esc_html__( 'Woo Short Description', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/short-description-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-product-description' => array(
				'label'   => esc_html__( 'Woo Product Description', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/product-description-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-image'               => array(
				'label'   => esc_html__( 'Woo Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/image-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-gallery'             => array(
				'label'   => esc_html__( 'Woo Gallery', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/gallery-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-grid-gallery'        => array(
				'label'   => esc_html__( 'Woo Grid Gallery', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/grid-gallery-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-slider-gallery'      => array(
				'label'   => esc_html__( 'Woo Slider Gallery', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/slider-gallery-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-badge'               => array(
				'label'   => esc_html__( 'Woo Badge', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/badge-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-rating'              => array(
				'label'   => esc_html__( 'Woo Rating', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/rating-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-price'               => array(
				'label'   => esc_html__( 'Woo Price', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/price-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-stock'               => array(
				'label'   => esc_html__( 'Woo Stock', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/stock-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-sold-info'           => array(
				'label'   => esc_html__( 'Woo Sold Info', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/sold-info-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-attribute'           => array(
				'label'   => esc_html__( 'Woo Attribute', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/attribute-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-add-to-cart'         => array(
				'label'   => esc_html__( 'Woo Add to Cart', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/add-to-cart-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-info-tabs'           => array(
				'label'   => esc_html__( 'Woo Info Tabs', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/info-tabs-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-navigation'          => array(
				'label'   => esc_html__( 'Woo Navigation', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/navigation-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=IefRZW5aIkY',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-woocommerce-sticky-add-to-cart'  => array(
				'label'   => esc_html__( 'Woo Sticky Add To Cart', 'essential-classy-addons-for-elementor' ),
				'catlist' => array( 'woocommerce', 'pro' ),
				'tag'     => 'pro',
				'wdoc'    => 'https://ecaddons.com/docs/woo/sticky-add-to-cart-widget-tutorials/',
				'wvideo'  => 'https://youtu.be/L6K_4jndnRk',
				'search'  => array( 'woocommerce' ),
			),
			'ecafe-facebook-embed'                  => array(
				'label'   => esc_html__( 'Facebook Embed', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'embed',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/facebook-embed/',
				'wdoc'    => 'https://ecaddons.com/docs/facebook-embed-widget-tutorial/',
			),
			'ecafe-googlemap-embed'                 => array(
				'label'   => esc_html__( 'Google Map Embed', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'embed',
				'tag'     => 'free',
				'wdemo'   => 'https://ecaddons.com/elements/google-map-embed/',
				'wdoc'    => 'https://ecaddons.com/docs/google-map-embed-widget-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=eyLnx9QyiIM',
			),
			'ecafe-site-logo'                       => array(
				'label'   => esc_html__( 'Site Logo', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/site-logo/',
				'wvideo'  => 'https://www.youtube.com/watch?v=5VUo1DfC004',
			),
			'ecafe-site-title'                      => array(
				'label'   => esc_html__( 'Site Title', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/site-title/',
				'wvideo'  => 'https://www.youtube.com/watch?v=5VUo1DfC004',
			),
			'ecafe-site-tagline'                    => array(
				'label'   => esc_html__( 'Site Tagline', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/site-tagline/',
				'wvideo'  => 'https://www.youtube.com/watch?v=5VUo1DfC004',
			),
			'ecafe-post-title'                      => array(
				'label'   => esc_html__( 'Post Title', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-title-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=9Uh-GQZCgc0',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-meta'                       => array(
				'label'   => esc_html__( 'Post Meta', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-meta-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=rI3TSpMLFYA',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-content'                    => array(
				'label'   => esc_html__( 'Post Content', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-content-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=RK3YmTV0_I0',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-image'                      => array(
				'label'   => esc_html__( 'Post Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-image-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=8yfgtYoKSHM',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-authorinfo'                 => array(
				'label'   => esc_html__( 'Post Author Info', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-author-info-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=-rnxZcDQGuM',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-comment'                    => array(
				'label'   => esc_html__( 'Post Comment', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-comment-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Pb9KETAoF60',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-post-navigation'                 => array(
				'label'   => esc_html__( 'Post Navigation', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'essential',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/post-navigation-blog-builder-tutorial/',
				'wvideo'  => 'https://www.youtube.com/watch?v=Pr5kIGYHdu0',
				'search'  => array( 'blogs', 'single' ),
			),
			'ecafe-acf-text'                        => array(
				'label'   => esc_html__( 'ACF : Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-text-area'                   => array(
				'label'   => esc_html__( 'ACF : Text Area', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-wysiwyg-editor'              => array(
				'label'   => esc_html__( 'ACF : Wysiwyg Editor', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-url'                         => array(
				'label'   => esc_html__( 'ACF : Url', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-email'                       => array(
				'label'   => esc_html__( 'ACF : Email', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-number'                      => array(
				'label'   => esc_html__( 'ACF : Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-image'                       => array(
				'label'   => esc_html__( 'ACF : Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-date'                        => array(
				'label'   => esc_html__( 'ACF : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-time'                        => array(
				'label'   => esc_html__( 'ACF : Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-date-time'                   => array(
				'label'   => esc_html__( 'ACF : Date Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-acf-oembed'                      => array(
				'label'   => esc_html__( 'ACF : oEmbed', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'acf',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/acf-widget-tutorial/',
			),
			'ecafe-cfs-text'                        => array(
				'label'   => esc_html__( 'Custom Field Suite : Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-cfs-textarea'                    => array(
				'label'   => esc_html__( 'Custom Field Suite : Text Area', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-cfs-wysiwyg'                     => array(
				'label'   => esc_html__( 'Custom Field Suite : Wysiwyg', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-cfs-hyperlink'                   => array(
				'label'   => esc_html__( 'Custom Field Suite : Hyperlink', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-cfs-date'                        => array(
				'label'   => esc_html__( 'Custom Field Suite : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-cfs-image'                       => array(
				'label'   => esc_html__( 'Custom Field Suite : Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'cfs',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/custom-field-suite-widget-tutorial/',
				'search'  => array( 'cfs' ),
			),
			'ecafe-jetengine-text'                  => array(
				'label'   => esc_html__( 'JetEngine : Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-date'                  => array(
				'label'   => esc_html__( 'JetEngine : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-time'                  => array(
				'label'   => esc_html__( 'JetEngine : Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-datetime'              => array(
				'label'   => esc_html__( 'JetEngine : Date Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-textarea'              => array(
				'label'   => esc_html__( 'JetEngine : Text Area', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-wysiwyg'               => array(
				'label'   => esc_html__( 'JetEngine : Wysiwyg', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-media'                 => array(
				'label'   => esc_html__( 'JetEngine : Media', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-jetengine-number'                => array(
				'label'   => esc_html__( 'JetEngine : Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'jet',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/jetengine-widget-tutorial/',
			),
			'ecafe-metabox-text'                    => array(
				'label'   => esc_html__( 'Meta Box : Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-textarea'                => array(
				'label'   => esc_html__( 'Meta Box : Text Area', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-wysiwyg'                 => array(
				'label'   => esc_html__( 'Meta Box : Wysiwyg', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-email'                   => array(
				'label'   => esc_html__( 'Meta Box : Email', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-number'                  => array(
				'label'   => esc_html__( 'Meta Box : Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-url'                     => array(
				'label'   => esc_html__( 'Meta Box : Url', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-imageadvanced'           => array(
				'label'   => esc_html__( 'Meta Box : Image Advanced', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-video'                   => array(
				'label'   => esc_html__( 'Meta Box : Video', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-date'                    => array(
				'label'   => esc_html__( 'Meta Box : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-datetime'                => array(
				'label'   => esc_html__( 'Meta Box : Datetime', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-metabox-time'                    => array(
				'label'   => esc_html__( 'Meta Box : Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'metabox',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/meta-box-widget-tutorial/',
			),
			'ecafe-pods-plaintext'                  => array(
				'label'   => esc_html__( 'Pods : Plain Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-website'                    => array(
				'label'   => esc_html__( 'Pods : Website', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-phone'                      => array(
				'label'   => esc_html__( 'Pods : Phone', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-email'                      => array(
				'label'   => esc_html__( 'Pods : Email', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-plain-paragraph-text'       => array(
				'label'   => esc_html__( 'Pods : Plain Paragraph Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-wysywyg'                    => array(
				'label'   => esc_html__( 'Pods : WYSIWYG (Visual Editor)', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-date-time'                  => array(
				'label'   => esc_html__( 'Pods : Date / Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-date'                       => array(
				'label'   => esc_html__( 'Pods : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-time'                       => array(
				'label'   => esc_html__( 'Pods : Time', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-plain-number'               => array(
				'label'   => esc_html__( 'Pods : Plain Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-currency'                   => array(
				'label'   => esc_html__( 'Pods : Currency', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-image'                      => array(
				'label'   => esc_html__( 'Pods : Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-video'                      => array(
				'label'   => esc_html__( 'Pods : Video', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-pods-oembed'                     => array(
				'label'   => esc_html__( 'Pods : oEmbed', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'pods',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/pods-widget-tutorial/',
			),
			'ecafe-toolset-single-line'             => array(
				'label'   => esc_html__( 'Toolset : Single Line', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-multiple-lines'          => array(
				'label'   => esc_html__( 'Toolset : Multiple Lines', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-wysiwyg'                 => array(
				'label'   => esc_html__( 'Toolset : WYSIWYG', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-image'                   => array(
				'label'   => esc_html__( 'Toolset : Image', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-video'                   => array(
				'label'   => esc_html__( 'Toolset : Video', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-embedded-media'          => array(
				'label'   => esc_html__( 'Toolset : Embedded Media', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-email'                   => array(
				'label'   => esc_html__( 'Toolset : Email', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-url'                     => array(
				'label'   => esc_html__( 'Toolset : URL', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-number'                  => array(
				'label'   => esc_html__( 'Toolset : Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-phone'                   => array(
				'label'   => esc_html__( 'Toolset : Phone', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-skype'                   => array(
				'label'   => esc_html__( 'Toolset : Skype', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-toolset-date'                    => array(
				'label'   => esc_html__( 'Toolset : Date', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'toolset',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/toolset-widget-tutorial/',
			),
			'ecafe-wck-text'                        => array(
				'label'   => esc_html__( 'WCK : Text', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-textarea'                    => array(
				'label'   => esc_html__( 'WCK : Text Area', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-wysiwyg-editor'              => array(
				'label'   => esc_html__( 'WCK : Wysiwyg Editor', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-currency-select'             => array(
				'label'   => esc_html__( 'WCK : Currency Select', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-phone'                       => array(
				'label'   => esc_html__( 'WCK : Phone', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-timepicker'                  => array(
				'label'   => esc_html__( 'WCK : Timepicker', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-number'                      => array(
				'label'   => esc_html__( 'WCK : Number', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-upload-image'                => array(
				'label'   => esc_html__( 'WCK : Image Upload', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
			'ecafe-wck-upload-video'                => array(
				'label'   => esc_html__( 'WCK : Video Upload', 'essential-classy-addons-for-elementor' ),
				'catlist' => 'wck',
				'tag'     => 'free',
				'wdoc'    => 'https://ecaddons.com/docs/wck-widget-tutorial/',
			),
		);
	}

	/**
	 * Render Pro Version Notice
	 */
	private function ecafeRenderProVersionNotice() {
		$show                  = '<div class="ecpopup-overlay" id="ecpopup">';
			$show             .= '<div class="ecpopup-box">';
						$show .= '<span class="close-btn" onclick="ecproclosePopup()">&times;</span>';
						$show .= '<h3>🔑 ' . esc_html__( 'Unlock Premium Features', 'essential-classy-addons-for-elementor' ) . '</h3>';
						$show .= '<p>' . esc_html__( 'Access powerful tools and advanced features with the Pro version.', 'essential-classy-addons-for-elementor' ) . '</p>';
						$show .= '<ul>';
						$show .= '<li>✨ ' . esc_html__( '70+ Premium Widgets & Extensions', 'essential-classy-addons-for-elementor' ) . '</li>';
						$show .= '<li>✨ ' . esc_html__( '80+ Readymade Templates Library', 'essential-classy-addons-for-elementor' ) . '</li>';
						$show .= '<li>✨ ' . esc_html__( 'White Label Branding', 'essential-classy-addons-for-elementor' ) . '</li>';
						$show .= '<li>✨ ' . esc_html__( 'Regular Plugin Updates', 'essential-classy-addons-for-elementor' ) . '</li>';
						$show .= '<li>🔥 ' . esc_html__( 'Upgrade or Cancel Anytime', 'essential-classy-addons-for-elementor' ) . '</li>';
						$show .= '</ul>';
						$show .= '<p>' . esc_html__( '🌱 Your upgrade makes a difference — we plant one tree.', 'essential-classy-addons-for-elementor' ) . '</p>';
						$show .= '<a href="https://ecaddons.com/pro/" target="_blank" rel="noopener noreferrer">🔘 ' . esc_html__( 'Upgrade to Pro', 'essential-classy-addons-for-elementor' ) . '</a>';
			$show             .= '</div>';
		$show                 .= '</div>';
		$show                 .= '<script>
					document.addEventListener("DOMContentLoaded", function () {
						var triggers = document.querySelectorAll(".ecprodisable");
						var popup = document.getElementById("ecpopup");
						triggers.forEach(function (trigger) {
							trigger.addEventListener("click", function () {
								popup.style.display = "flex";
							});
						});
					});

					function ecproclosePopup() {
						document.getElementById("ecpopup").style.display = "none";
					}
				</script>';
		return $show;
	}
	/**
	 * Render widget lists
	 */
	private function ecafeRenderWidgetList() {
		$widgetList       = $this->widget_lists;
		$show             = '';
		$fetchWidgetsSave = get_option( 'ecafe_widgets' );
		$saveWidget       = '';

		if ( ! empty( $fetchWidgetsSave['widgetsload'] ) ) {
			$saveWidget = $fetchWidgetsSave['widgetsload'];
		}

		if ( ! empty( $widgetList ) ) {
			$schema_widgets = array(
				'ecafe-action-schema',
				'ecafe-article-blogposting-schema',
				'ecafe-audioobject-schema',
				'ecafe-book-schema',
				'ecafe-course-schema',
				'ecafe-event-schema',
				'ecafe-howto-schema',
				'ecafe-imageobject-schema',
				'ecafe-jobposting-schema',
				'ecafe-localbusiness-schema',
				'ecafe-medicalhealth-schema',
				'ecafe-organization-schema',
				'ecafe-person-schema',
				'ecafe-product-schema',
				'ecafe-recipe-schema',
				'ecafe-review-schema',
				'ecafe-service-schema',
				'ecafe-softwareapplication-schema',
				'ecafe-techarticle-schema',
				'ecafe-video-schema',
			);
			foreach ( $widgetList as $key => $widget ) {

				$proDisable = '';
				// $proExtraDiv = '';
				if ( $widget['tag'] == 'pro' && ! defined( 'ECAFEP_VERSION' ) ) {
					$proDisable = ' ecprodisable';
					// $proExtraDiv = '<div class="ec-pro-hover-pro"></div>';
				}
				$listcatwise = '';
				if ( is_array( $widget['catlist'] ) ) {
					if ( ! empty( $widget['catlist'][0] ) ) {
						$listcatwise .= ' ecafecate' . $widget['catlist'][0];
					}
					if ( ! empty( $widget['catlist'][1] ) ) {
						$listcatwise .= ' ecafecate' . $widget['catlist'][1];
					}
				} else {
					$listcatwise = ' ecafecate' . $widget['catlist'];
				}
				// $show .='<div class="ecafe-panel-column '.esc_attr($listcatwise).' ecafefeatures-'.esc_attr($widget['tag']).' '.esc_attr($proDisable).'">';

				$searchKeys = '';
				if ( ! empty( $widget['search'] ) ) {
					$searchKeys = implode( ' ', array_map( 'sanitize_title', $widget['search'] ) );
				}
				$extraClass = '';

				if ( in_array( $key, $schema_widgets ) ) {
					$extraClass = ' ecafefeatures-pro-schema';
				}

				$show .= '<div class="ecafe-panel-column ' . esc_attr( $listcatwise ) . ' ecafefeatures-' . esc_attr( $widget['tag'] ) . ' ' . esc_attr( $proDisable ) . ' ' . esc_attr( $extraClass ) . '" data-search="' . esc_attr( $searchKeys ) . '">';

					// $show .= $proExtraDiv;
					$show         .= '<div class="widget-list-wrapper">';
						$show     .= '<div class="widget-list-inner">';
							$show .= '<span class="widget-label">' . esc_html( $widget['label'] ) . '</span>';

				if ( ! empty( $widget['wdemo'] ) || ! empty( $widget['wdoc'] ) || ! empty( $widget['wvideo'] ) ) {
					$show .= '<span class="widget-links">';
					if ( ! empty( $widget['wdemo'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdemo'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/></svg>';
						$show .= '</a>';
					}
					if ( ! empty( $widget['wdoc'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdoc'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z"/></svg>';
						$show .= '</a>';
					}
					if ( ! empty( $widget['wvideo'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wvideo'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M549.7 124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8 64 288 64 288 64S117.2 64 74.6 75.5c-23.5 6.3-42 24.9-48.3 48.6-11.4 42.9-11.4 132.3-11.4 132.3s0 89.4 11.4 132.3c6.3 23.7 24.8 41.5 48.3 47.8C117.2 448 288 448 288 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zm-317.5 213.5V175.2l142.7 81.2-142.7 81.2z"/></svg>';
						$show .= '</a>';
					}
					$show .= '</span>';
				}

						$show   .= '</div>';
						$checked = '';
				if ( ! empty( $saveWidget ) && in_array( $key, $saveWidget ) ) {
					$checked = 'checked="checked"';
				}

						$show .= '<div class="widget-check-wrapper">
									<input type="checkbox" class="widget-list-checkbox" name="widgetsload[]" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '" ' . $checked . '>
									<label for="' . esc_attr( $key ) . '"></label>
								</div>';
					$show     .= '</div>';
				$show         .= '</div>';
			}
		}
		return $show;
	}

	/**
	 * Render Extra Options lists
	 */
	private function ecafeRenderExtraList() {
		$extraList     = array(
			'ecafe-boxshadow'        => array(
				'label'  => esc_html__( 'Box Shadow', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/advanced-box-shadow/',
				'wdoc'   => 'https://ecaddons.com/docs/advanced-box-shadow-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=uL3CGSErKKg',
			),
			'ecafe-confettieffect'   => array(
				'label'  => esc_html__( 'Confetti Effect', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'free',
				'wdemo'  => 'https://ecaddons.com/extension/confetti-effect/',
				'wdoc'   => 'https://ecaddons.com/docs/confetti-effect-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=LaL4h_QjuNw',
			),
			'ecafe-customcss'        => array(
				'label'  => esc_html__( 'Custom CSS', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/custom-css/',
				'wvideo' => 'https://www.youtube.com/watch?v=iAS3ylfBt_g',
			),
			'ecafe-displaycondition' => array(
				'label'  => esc_html__( 'Display Condition', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'free',
				'wdemo'  => 'https://ecaddons.com/extension/display-condition-for-elementor/',
				'wdoc'   => 'https://ecaddons.com/docs/display-condition-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=-0d8AP3vu7k',
			),
			'ecafe-dropshadow'       => array(
				'label'  => esc_html__( 'Drop Shadow', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/advanced-drop-shadow/',
				'wdoc'   => 'https://ecaddons.com/docs/advanced-drop-shadow-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=1yXMTjXxavI',
			),
			'ecafe-equalheight'      => array(
				'label'  => esc_html__( 'Equal Height', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/equal-height-feature-for-elementor-widget/',
				'wdoc'   => 'https://ecaddons.com/docs/equal-height-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=sWD4aEegM7U',
			),
			'ecafe-fancyborder'      => array(
				'label'  => esc_html__( 'Fancy Border', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/fancy-border/',
				'wdoc'   => 'https://ecaddons.com/docs/fancy-border-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=DNVNzNX4XUE',
			),
			'ecafe-glassmorphism'    => array(
				'label'  => esc_html__( 'Glassmorphism', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'free',
				'wdemo'  => 'https://ecaddons.com/extension/glass-morphism/',
				'wdoc'   => 'https://ecaddons.com/docs/glass-morphism-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=O-nxYMD1MvA',
			),
			'ecafe-lax-scroll'       => array(
				'label' => esc_html__( 'Lax Scroll', 'essential-classy-addons-for-elementor' ),
				'tag'   => 'free',
				'wdemo' => 'https://ecaddons.com/extension/lax-scroll/',
			),
			'ecafe-liquid-glass'     => array(
				'label'  => esc_html__( 'Liquid Glass Effect', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/liquid-glass-effect/',
				'wdoc'   => 'https://ecaddons.com/docs/liquid-glass-effect-tutorials/',
				'wvideo' => 'https://youtu.be/AhVIa4dahKs',
			),
			'ecafe-widget-link'      => array(
				'label'  => esc_html__( 'Wrapper Link', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'free',
				'wdemo'  => 'https://ecaddons.com/extension/link/',
				'wdoc'   => 'https://ecaddons.com/docs/link-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=hG3jeYwrdkc',
			),
			'ecafe-live-copy'        => array(
				'label' => esc_html__( 'Live Copy Paste', 'essential-classy-addons-for-elementor' ),
				'tag'   => 'free',
				'wdemo' => 'https://ecaddons.com/extension/cross-domain-copy-paste-elementor/',
				'wdoc'  => 'https://ecaddons.com/docs/cross-domain-copy-paste-elementor-extension-tutorial/',
			),
			'ecafe-textshadow'       => array(
				'label'  => esc_html__( 'Text Shadow', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/advanced-text-shadow/',
				'wdoc'   => 'https://ecaddons.com/docs/advanced-text-shadow-extension-tutorial/',
				'wvideo' => 'https://www.youtube.com/watch?v=6FRzmhUTtts',
			),
			'ecafe-template-library' => array(
				'label'  => esc_html__( 'Template Library', 'essential-classy-addons-for-elementor' ),
				'tag'    => 'pro',
				'wdemo'  => 'https://ecaddons.com/extension/template-library/',
				'wvideo' => 'https://www.youtube.com/watch?v=jhcV0Xmez30',
			),
		);
		$show          = '';
		$extrasListOpt = get_option( 'ecafe_extension' );
		$saveWidget    = '';
		if ( ! empty( $extrasListOpt['extrasList'] ) ) {
			$saveWidget = $extrasListOpt['extrasList'];
		}

		if ( ! empty( $extraList ) ) {
			foreach ( $extraList as $key => $widget ) {
				$proDisable  = '';
				$proExtraDiv = '';
				if ( $widget['tag'] == 'pro' && ! defined( 'ECAFEP_VERSION' ) ) {
					$proDisable = ' ecprodisable';
					// $proExtraDiv = '<div class="ec-pro-hover-pro"></div>';
				}
				$show             .= '<div class="ecafe-panel-column ecafefeatures-' . esc_attr( $widget['tag'] ) . ' ' . esc_attr( $proDisable ) . '">';
					$show         .= $proExtraDiv;
					$show         .= '<div class="widget-list-wrapper">';
						$show     .= '<div class="widget-list-inner">';
							$show .= '<span class="widget-label">' . esc_html( $widget['label'] ) . '</span>';
				if ( ! empty( $widget['wdemo'] ) || ! empty( $widget['wdoc'] ) || ! empty( $widget['wvideo'] ) ) {
					$show .= '<span class="widget-links">';
					if ( ! empty( $widget['wdemo'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdemo'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/></svg>';
						$show .= '</a>';
					}
					if ( ! empty( $widget['wdoc'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdoc'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z"/></svg>';
						$show .= '</a>';
					}
					if ( ! empty( $widget['wvideo'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wvideo'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M549.7 124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8 64 288 64 288 64S117.2 64 74.6 75.5c-23.5 6.3-42 24.9-48.3 48.6-11.4 42.9-11.4 132.3-11.4 132.3s0 89.4 11.4 132.3c6.3 23.7 24.8 41.5 48.3 47.8C117.2 448 288 448 288 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zm-317.5 213.5V175.2l142.7 81.2-142.7 81.2z"/></svg>';
						$show .= '</a>';
					}
					$show .= '</span>';
				}
						$show   .= '</div>';
						$checked = '';
				if ( ! empty( $saveWidget ) && in_array( $key, $saveWidget ) ) {
					$checked = 'checked="checked"';
				}
						$show .= '<div class="widget-check-wrapper">
									<input type="checkbox" class="widget-list-checkbox" name="extrasList[]" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '" ' . $checked . '>
									<label for="' . esc_attr( $key ) . '"></label>
								</div>';
					$show     .= '</div>';
				$show         .= '</div>';
			}
		}
		return $show;
	}

	/**
	 * Render WP Performance Options lists
	 */
	private function ecafeRenderWpPerfomanceList() {
		$wpPerfList           = array(
			'disable_dashicons'                     => array(
				'label' => esc_html__( 'Dashicons', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#dashicon',
			),
			'emoji_scripts'                         => array(
				'label' => esc_html__( 'Emojis Script', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#emojis',
			),
			'disable_embeds'                        => array(
				'label' => esc_html__( 'Embeds', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#embeds',
			),
			'media_library_grid_to_infinite_scroll' => array(
				'label' => esc_html__( 'Media Library Grid to Infinite Scroll', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#media',
			),
			'pass_str_mtr'                          => array(
				'label' => esc_html__( 'Password Strength Meter', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#passwordstrengthmeter',
			),
			'rsd_link'                              => array(
				'label' => esc_html__( 'Remove RSD Link', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#rsdlink',
			),
			'shortlink'                             => array(
				'label' => esc_html__( 'Remove Shortlink', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#removeshortlink',
			),
			'wlwmanifest_link'                      => array(
				'label' => esc_html__( 'Remove wlwmanifest Link', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#removewlwmanifest',
			),
			'rss_feeds'                             => array(
				'label' => esc_html__( 'RSS Feeds', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#rssfeed',
			),
			'rss_feed_link'                         => array(
				'label' => esc_html__( 'Remove RSS Feed Links', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#rssfeedlink',
			),
			'self_pingbacks'                        => array(
				'label' => esc_html__( 'Self Pingbacks', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#trackbackpings',
			),
			'xml_rpc'                               => array(
				'label' => esc_html__( 'XML-RPC', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#xmlrpc',
			),
			'wp_version'                            => array(
				'label' => esc_html__( 'WP Version Generator', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-performance/#wpversion',
			),
			'preload_onload_css'                    => array(
				'label'         => esc_html__( 'Preload + onload CSS', 'essential-classy-addons-for-elementor' ),
				'wdoc'          => 'https://ecaddons.com/wp-performance/#preloadonloadcss',
				'exclude_field' => true,
			),
			'async_js'                              => array(
				'label'         => esc_html__( 'Async JS', 'essential-classy-addons-for-elementor' ),
				'wdoc'          => 'https://ecaddons.com/wp-performance/#asyncjs',
				'exclude_field' => true,
			),
			'defer_js'                              => array(
				'label'         => esc_html__( 'Defer JS', 'essential-classy-addons-for-elementor' ),
				'wdoc'          => 'https://ecaddons.com/wp-performance/#deferjs',
				'exclude_field' => true,
			),
		);
		$show                 = '';
		$wpPerformanceListOpt = get_option( 'ecafe_wp_performance' );
		$saveWidget           = '';
		if ( ! empty( $wpPerformanceListOpt['wpperformanceList'] ) ) {
			$saveWidget = $wpPerformanceListOpt['wpperformanceList'];
		}

		if ( ! empty( $wpPerfList ) ) {
			foreach ( $wpPerfList as $key => $widget ) {
				$show             .= '<div class="ecafe-panel-column">';
					$show         .= '<div class="widget-list-wrapper">';
						$show     .= '<div class="widget-list-inner">';
							$show .= '<span class="widget-label">' . esc_html( $widget['label'] ) . '</span>';
				if ( ! empty( $widget['exclude_field'] ) ) {
					$excludeVal = '';
					if ( ! empty( $wpPerformanceListOpt[ 'exclude_' . $key ] ) ) {
						$excludeVal = esc_attr( $wpPerformanceListOpt[ 'exclude_' . $key ] );
					}
					$show .= '<div class="widget-exclude-wrapper">';
					$show .= '<textarea name="exclude_' . esc_attr( $key ) . '" 
									placeholder="' . esc_attr__( 'Exclude handles (comma separated)', 'essential-classy-addons-for-elementor' ) . '" 
									class="regular-text" 
									rows="3" cols="40">' . esc_textarea( $excludeVal ) . '</textarea>';
					$show .= '</div>';
				}
				if ( ! empty( $widget['wdoc'] ) ) {
					$show .= '<span class="widget-links">';
					if ( ! empty( $widget['wdoc'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdoc'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z"/></svg>';
						$show .= '</a>';
					}
					$show .= '</span>';
				}
						$show   .= '</div>';
						$checked = '';
				if ( ! empty( $saveWidget ) && in_array( $key, $saveWidget ) ) {
					$checked = 'checked="checked"';
				}
						$show .= '<div class="widget-check-wrapper">
									<input type="checkbox" class="widget-list-checkbox" name="wpperformanceList[]" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '" ' . $checked . '>
									<label for="' . esc_attr( $key ) . '"></label>
								</div>';
					$show     .= '</div>';
				$show         .= '</div>';
			}
		}
		return $show;
	}

	/**
	 * Render WP Security Options lists
	 */
	private function ecafeRenderWpSecurityList() {
		$wpSecuList        = array(
			'block_author_enumeration'             => array(
				'label' => esc_html__( 'Block Author Enumeration', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#blockauthorenumeration',
			),
			'clickjacking_protection'              => array(
				'label'   => esc_html__( 'Clickjacking Protection', 'essential-classy-addons-for-elementor' ),
				'type'    => 'select',
				'options' => array(
					''           => esc_html__( 'Disabled', 'essential-classy-addons-for-elementor' ),
					'SAMEORIGIN' => esc_html__( 'Same Origin', 'essential-classy-addons-for-elementor' ),
					'DENY'       => esc_html__( 'Deny', 'essential-classy-addons-for-elementor' ),
				),
				'wdoc'    => 'https://ecaddons.com/wp-security/#clickjackingprotection',
			),
			'cross_origin_embedder_policy_coep'    => array(
				'label' => esc_html__( 'Cross-Origin Embedder Policy (COEP)', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#crossoriginembedderpolicy',
			),
			'cross_origin_opener_policy_coop'      => array(
				'label'   => esc_html__( 'Cross-Origin Opener Policy (COOP)', 'essential-classy-addons-for-elementor' ),
				'type'    => 'select',
				'options' => array(
					''                         => esc_html__( 'Disabled', 'essential-classy-addons-for-elementor' ),
					'same-origin'              => esc_html__( 'Same Origin', 'essential-classy-addons-for-elementor' ),
					'same-origin-allow-popups' => esc_html__( 'Same Origin (Allow Popups)', 'essential-classy-addons-for-elementor' ),
				),
				'wdoc'    => 'https://ecaddons.com/wp-security/#crossoriginopenerpolicy',
			),
			'cross_origin_resource_policy_corp'    => array(
				'label'   => esc_html__( 'Cross-Origin Resource Policy (CORP)', 'essential-classy-addons-for-elementor' ),
				'type'    => 'select',
				'options' => array(
					''             => esc_html__( 'Disabled', 'essential-classy-addons-for-elementor' ),
					'same-origin'  => esc_html__( 'Same Origin', 'essential-classy-addons-for-elementor' ),
					'same-site'    => esc_html__( 'Same Site', 'essential-classy-addons-for-elementor' ),
					'cross-origin' => esc_html__( 'Cross Origin', 'essential-classy-addons-for-elementor' ),
				),
				'wdoc'    => 'https://ecaddons.com/wp-security/#crossoriginresourcepolicy',
			),
			'cross_site_scripting_xss_protection'  => array(
				'label' => esc_html__( 'Cross-Site Scripting (XSS) Protection', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#crosssitescriptingxssprotection',
			),
			'custom_login_path'                    => array(
				'label'       => esc_html__( 'Custom Login Path', 'essential-classy-addons-for-elementor' ),
				'type'        => 'text',
				'placeholder' => esc_html__( 'e.g. my-login', 'essential-classy-addons-for-elementor' ),
				'wdoc'        => 'https://ecaddons.com/wp-security/#customloginpath',
			),
			'custom_login_behavior'                => array(
				'label'   => esc_html__( 'Custom Login Behaviour', 'essential-classy-addons-for-elementor' ),
				'type'    => 'select',
				'options' => array(
					'message' => esc_html__( 'Message', 'essential-classy-addons-for-elementor' ),
					'home'    => esc_html__( 'Redirect to Home', 'essential-classy-addons-for-elementor' ),
				),
			),
			'custom_login_message'                 => array(
				'label'         => esc_html__( 'Custom Login Message', 'essential-classy-addons-for-elementor' ),
				'type'          => 'textarea',
				'depends_value' => 'message',
			),
			'disable_file_editor'                  => array(
				'label' => esc_html__( 'Disable File Editor', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#disablefileeditor',
			),
			'disable_rest_api_non_logged'          => array(
				'label' => esc_html__( 'Disable REST API for Non-Logged-in Users', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#disablerestapinonloggedinusers',
			),
			'global_privacy_control_gpc'           => array(
				'label' => esc_html__( 'Global Privacy Control (GPC)', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#globalprivacycontrol',
			),
			'https_strict_transport_security_hsts' => array(
				'label' => esc_html__( 'HTTPS Strict Transport Security (HSTS)', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#httpsstricttransportsecurity',
			),
			'mime_sniffing_protection'             => array(
				'label' => esc_html__( 'MIME Sniffing Protection', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#mimesniffingprotection',
			),
			'permissions_policy_feature_policy'    => array(
				'label' => esc_html__( 'Permissions Policy (Feature Policy)', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#permissionspolicyfeaturepolicy',
			),
			'referrer_policy'                      => array(
				'label' => esc_html__( 'Referrer Policy - No Referrer', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#referrerpolicynoreferrer',
			),
			'referrer_policy_strict_origin'        => array(
				'label' => esc_html__( 'Referrer Policy - Strict Mode HTTP Only', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#referrerpolicystrictmodehttponly',
			),
			'remove_x_powered_by_header'           => array(
				'label' => esc_html__( 'Remove X-Powered-By Header', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#removexpoweredbyheader',
			),
			'server_signature_masking'             => array(
				'label' => esc_html__( 'Server Signature Masking', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#serversignaturemasking',
			),
			'session_cookie'                       => array(
				'label' => esc_html__( 'Session Cookie', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#sessioncookie',
			),
			'x_dns_prefetch_control'               => array(
				'label' => esc_html__( 'X-DNS-Prefetch-Control', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-security/#xdnsprefetchcontrol',
			),
		);
		$show              = '';
		$wpSecurityListOpt = get_option( 'ecafe_wp_security' );
		$saveWidget        = '';
		if ( ! empty( $wpSecurityListOpt['wpsecurityList'] ) ) {
			$saveWidget = $wpSecurityListOpt['wpsecurityList'];
		}

		if ( ! empty( $wpSecuList ) ) {
			foreach ( $wpSecuList as $key => $widget ) {
				$selectclass = '';
				if ( isset( $widget['type'] ) ) {
					if ( $widget['type'] === 'select' ) {
						$selectclass = ' ecafe-select-field';
					} elseif ( $widget['type'] === 'text' ) {
						$selectclass = ' ecafe-text-field';
					} elseif ( $widget['type'] === 'textarea' ) {
						$selectclass = ' ecafe-textarea-field';
					}
				}

				$show             .= '<div class="ecafe-panel-column ' . esc_attr( $selectclass ) . '">';
					$show         .= '<div class="widget-list-wrapper">';
						$show     .= '<div class="widget-list-inner">';
							$show .= '<span class="widget-label">' . esc_html( $widget['label'] ) . '</span>';
				if ( ! empty( $widget['wdoc'] ) ) {
					$show .= '<span class="widget-links">';
					if ( ! empty( $widget['wdoc'] ) ) {
						$show .= '<a href="' . esc_url( $widget['wdoc'] ) . '" target="_blank" rel="noopener noreferrer">';
						$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z"/></svg>';
						$show .= '</a>';
					}
					$show .= '</span>';
				}
						$show .= '</div>';

						$show .= '<div class="widget-check-wrapper">';
					// Dropdown
				if ( isset( $widget['type'] ) && $widget['type'] === 'select' ) {
					$selectedValue = '';
					if ( ! empty( $saveWidget[ $key ] ) ) {
						$selectedValue = $saveWidget[ $key ];
					}

					$show .= '<select name="wpsecurityList[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '" class="widget-list-select">';
					foreach ( $widget['options'] as $optValue => $optLabel ) {
						$sel   = selected( $selectedValue, $optValue, false );
						$show .= '<option value="' . esc_attr( $optValue ) . '" ' . $sel . '>' . esc_html( $optLabel ) . '</option>';
					}
					$show .= '</select>';
				} elseif ( isset( $widget['type'] ) && $widget['type'] === 'text' ) {
					$val         = $saveWidget[ $key ] ?? '';
					$placeholder = $widget['placeholder'] ?? '';
					$show       .= '<input type="text" name="wpsecurityList[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '" value="' . esc_attr( $val ) . '" placeholder="' . esc_attr( $placeholder ) . '" class="widget-list-text">';
				} elseif ( isset( $widget['type'] ) && $widget['type'] === 'textarea' ) {
					$val   = $saveWidget[ $key ] ?? '';
					$show .= '<textarea name="wpsecurityList[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '" class="widget-list-textarea">' . esc_textarea( $val ) . '</textarea>';
				} else {
					// Checkbox
					$checked = '';
					if ( ! empty( $saveWidget ) && in_array( $key, $saveWidget ) ) {
						$checked = 'checked="checked"';
					}
					$show .= '<input type="checkbox" class="widget-list-checkbox" name="wpsecurityList[]" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '" ' . $checked . '>';
					$show .= '<label for="' . esc_attr( $key ) . '"></label>';
				}
					$show .= '</div>';

					$show .= '</div>';
				$show     .= '</div>';
			}
		}
		return $show;
	}

	/**
	 * Render WP Utilities Options lists
	 */
	private function ecafeRenderWpUtilitiesList() {
		$wpUtiList          = array(
			'disable_author_archives' => array(
				'label' => esc_html__( 'Disable Author Archives', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-utilities/#disableauthorarchives',
			),
			'duplicate_post'          => array(
				'label' => esc_html__( 'Duplicate Post', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-utilities/#duplicatepost',
			),
			'query_monitor_lite'      => array(
				'label' => esc_html__( 'Query Monitor Lite', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-utilities/#querymonitorlite',
			),
			'switch_theme_preview'    => array(
				'label' => esc_html__( 'Switch Theme Preview', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-utilities/#switchthemepreview',
			),
			'404_redirect_home'       => array(
				'label' => esc_html__( '404 pages to Home URL', 'essential-classy-addons-for-elementor' ),
				'wdoc'  => 'https://ecaddons.com/wp-utilities/#404pagestohomeurl',
			),
		);
		$show               = '';
		$wpUtilitiesListOpt = get_option( 'ecafe_wp_utilities' );
		$saved              = ! empty( $wpUtilitiesListOpt['wputilitiesList'] ) ? $wpUtilitiesListOpt['wputilitiesList'] : array();

		foreach ( $wpUtiList as $key => $widget ) {
			$checked           = ( ! empty( $saved ) && in_array( $key, $saved ) ) ? 'checked="checked"' : '';
			$show             .= '<div class="ecafe-panel-column">';
				$show         .= '<div class="widget-list-wrapper">';
					$show     .= '<div class="widget-list-inner">';
						$show .= '<span class="widget-label">' . esc_html( $widget['label'] ) . '</span>';
			if ( ! empty( $widget['wdoc'] ) ) {
				$show .= '<span class="widget-links">';
				$show .= '<a href="' . esc_url( $widget['wdoc'] ) . '" target="_blank" rel="noopener noreferrer">';
				$show .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z"/></svg>';
				$show .= '</a>';
				$show .= '</span>';
			}
					$show     .= '</div>';
					$show     .= '<div class="widget-check-wrapper">';
						$show .= '<input type="checkbox" class="widget-list-checkbox" name="wputilitiesList[]" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '" ' . $checked . '>';
						$show .= '<label for="' . esc_attr( $key ) . '"></label>';
					$show     .= '</div>';
				$show         .= '</div>';

				// Inside foreach ($wpUtiList as $key => $widget)
			if ( $key === 'duplicate_post' && $checked ) {
				$post_types    = get_post_types( array( 'public' => true ), 'objects' );
				$savedDupTypes = ! empty( $wpUtilitiesListOpt['duplicate_post_types'] ) ? (array) $wpUtilitiesListOpt['duplicate_post_types'] : array();

				$show .= '<div><strong>' . esc_html__( 'Select Post Types:', 'essential-classy-addons-for-elementor' ) . '</strong></div><br>';
				$show .= '<div class="duplicate-post-box">';

				foreach ( $post_types as $slug => $post_type ) {
					$checkedType = in_array( $slug, $savedDupTypes, true ) ? 'checked="checked"' : '';
					$show       .= '<label style="display:block;margin-bottom:4px;">';
					$show       .= '<input type="checkbox" name="duplicate_post_types[]" value="' . esc_attr( $slug ) . '" ' . $checkedType . '> ';
					$show       .= esc_html( $post_type->labels->name );
					$show       .= '</label>';
				}

				$show .= '</div>';
			}

				// Extra UI for theme preview
			if ( $key === 'switch_theme_preview' && $checked ) {
				$themes = wp_get_themes();
				$show  .= '<div class="theme-preview-box">';
				$show  .= '<select id="ecafe-theme-preview" class="regular-text">';
				foreach ( $themes as $slug => $theme ) {
					$show .= '<option value="' . esc_attr( $slug ) . '">' . esc_html( $theme->get( 'Name' ) ) . '</option>';
				}
				$show .= '</select> ';
				$show .= '<a href="#" target="_blank" id="ecafe-theme-preview-btn" class="button">' . esc_html__( 'Preview', 'essential-classy-addons-for-elementor' ) . '</a>';
				$show .= '</div>';

				// JS to handle preview link
				$show .= '<script>
						document.addEventListener("DOMContentLoaded", function(){
							var select = document.getElementById("ecafe-theme-preview");
							var btn = document.getElementById("ecafe-theme-preview-btn");
							btn.addEventListener("click", function(e){
								e.preventDefault();
								var theme = select.value;
								window.open("' . home_url() . '?preview_theme="+theme, "_blank");
							});
						});
					</script>';
			}

			$show .= '</div>';
		}
		return $show;
	}

	/**
	 * Options page append
	 */
	public function optionsPageAppend() {
		$optionTabs = self::fieldsOption();

		foreach ( $optionTabs as $index => $optionTab ) {
			if ( $index == 0 ) {
				$this->optionsPages[] = add_menu_page( $this->title, $this->title, 'manage_options', $optionTab['id'], array( $this, 'displayAdminPage' ), 'dashicons-ecafe-settings' );
				add_submenu_page( $optionTabs[0]['id'], $this->title, $optionTab['title'], 'manage_options', $optionTab['id'], array( $this, 'displayAdminPage' ) );
			} elseif ( isset( $optionTabs ) ) {
					$this->optionsPages[] = add_submenu_page( $optionTabs[0]['id'], $this->title, $optionTab['title'], 'manage_options', $optionTab['id'], array( $this, 'displayAdminPage' ) );
			}
		}
	}

	/**
	 * Display admin page
	 */
	public function displayAdminPage() {
		$optionTabs    = self::fieldsOption();
		$tabForms      = array();
		$show          = '';
		$show         .= '<div class="' . $this->key . '">';
				$show .= '<div id="ecafe-setting-head-wrapper">';
		if ( defined( 'ECAFEP_VERSION' ) ) {
			$get_values         = unserialize( get_option( 'ecafewhitelabel' ) );
			$plugin_brand_image = ( ! empty( $get_values['plugin_brand_image'] ) ) ? $get_values['plugin_brand_image'] : '';
			if ( ! empty( $plugin_brand_image ) ) {
				$logo  = wp_get_attachment_image_url( $plugin_brand_image, 'full' );
				$show .= '<img style="height:100px" src=' . $logo . ' />';
			} else {
				$show .= '<img src=' . ECAFE_URL . 'assets/images/ec-addons.gif />';
			}
		} else {
			$show .= '<img src=' . ECAFE_URL . 'assets/images/ec-addons.gif />';
		}

					$show .= '<div class="ecafe-current-version"> ' . esc_html__( 'Version', 'essential-classy-addons-for-elementor' ) . ' ' . ECAFE_VERSION . '</div>';
				$show     .= '</div>';

				$show     .= '<div class="ecafe-nav-tab-wrapper">';
					$show .= '<div class="nav-tab-wrapper">';
						ob_start();
		foreach ( $optionTabs as $optionTab ) :
			$tabSlug            = $optionTab['id'];
			$navigationTabClass = 'nav-tab';
			$page_key           = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
			if ( $tabSlug == $page_key ) {
				$navigationTabClass .= ' nav-tab-active';
				$tabForms[]          = $optionTab;
			}
			?>
							<a class="<?php echo esc_attr( $navigationTabClass ); ?>" href="<?php menu_page_url( $tabSlug ); ?>">
								<span><?php echo esc_html( $optionTab['title'] ); ?></span>
							</a>
							<?php

						endforeach;
						$show .= ob_get_clean();
					$show     .= '</div>';
				$show         .= '</div>';

				$show .= '<div class="ecafe-settings-form-wrapper form-' . $tabForms[0]['id'] . '">';

		if ( ! empty( $tabForms ) ) {
			ob_start();
			foreach ( $tabForms as $tabForm ) :
				if ( $tabForm['id'] == 'ecafe_welcome' ) {
					echo '<div class="ecafe-panel-welcome-page">';
						echo '<div class="ecafe-panel-row">';
							echo '<div class="ecafe-panel-column">';
								/*User Info*/
								echo '<div class="ecafe-welcome-col ecafe-user-info-wrapper">';
									echo '<div class="ecafe-user-info">';
										$user = wp_get_current_user();
					if ( isset( $user ) ) {
						echo '<img src="' . esc_url( get_avatar_url( $user->ID ) ) . '" class="ecafe-avatar-img" />';
					}
										echo '<div class="ecafe-author-name">' . esc_html__( 'Welcome ', 'essential-classy-addons-for-elementor' ) . esc_html( $user->display_name ) . ',</div>';

					if ( function_exists( 'ini_get' ) ) {
							echo "<div class='ecafe-info-panel'>You have <span>" . size_format( wp_convert_hr_to_bytes( ini_get( 'memory_limit' ) ) ) . "</span> Memory.<br/> If you face spinning circle in Elementor Backend.<a href='https://kapasias.com/ultimate-troubleshooting-of-common-issues-of-elementor-page-builder/' target='_blank' rel='nofollow' class='ecafe-wel-btn' style='color:#d84242;background:unset;padding:0;margin:5px 0 0 10px;border:none'>Please have a look</a></div>";
					}
									echo '</div>';
											echo '</div>';
											/*User Info*/

											/*Banner Image*/
											echo '<div class="ecafe-welcome-col ecafe-banner-wrapper">';
									echo '<a class="ecafe-banner-wrapper-link" href="https://kapasias.com/addons-features"></a>';
											echo '</div>';
											/*Banner Image*/
											$get_values = unserialize( get_option( 'ecafewhitelabel' ) );
					if ( defined( 'ECAFEP_VERSION' ) && ! empty( $get_values['plugin_name_free'] ) ) {

					} else {
						/*Rating*/
							echo '<div class="ecafe-welcome-col ecafe-ratting-wrapper">';
							echo '<div class="ecafe-welcome-title">' . esc_html__( 'Rate Us 😍✨🌟', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<div class="ecafe-welcome-subtitle">' . esc_html__( 'Your rating motivates us to do better. And important for us. 😍', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<div class="ecafe-ratting-border"></div>';
							echo '<div class="ecafe-ratting-desc">' . esc_html__( 'Your reviews will help us to build better product for you. Please share your experience with other users.', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<a href="https://wordpress.org/support/plugin/essential-classy-addons-for-elementor/reviews/?rate=5#new-post" class="ecafe-wel-btn" title="' . esc_attr__( 'Rate on WordPress', 'essential-classy-addons-for-elementor' ) . '" target="_blank">' . esc_html__( 'Rate on WordPress', 'essential-classy-addons-for-elementor' ) . '</a>';
							echo '</div>';
						/*Rating*/

						/*Request New Feature*/
							echo '<div class="ecafe-welcome-col ecafe-request-wrapper">';
							echo '<div class="ecafe-welcome-title">' . esc_html__( 'Wish to see your favorite feature? 💬💓💌', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<div class="ecafe-welcome-subtitle">' . esc_html__( 'Please share your idea or some reference you want in our addons.', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<a href="https://www.facebook.com/groups/340597333894907" class="ecafe-wel-btn" title="' . esc_attr__( 'Share Feedback', 'essential-classy-addons-for-elementor' ) . '" target="_blank">' . esc_html__( 'Suggest Feature', 'essential-classy-addons-for-elementor' ) . '</a>';
							echo '</div>';
						/*Request New Feature*/

						/*Info Panel*/
							echo '<div class="ecafe-welcome-col ecafe-info-panel-wrapper">';
							echo '<div class="ecafe-welcome-title">' . esc_html__( 'Technical Support 👋', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<div class="ecafe-welcome-subtitle">' . esc_html__( 'Let’s start with queries and end with solutions.', 'essential-classy-addons-for-elementor' ) . '</div>';
							echo '<a href="http://store.kapasias.com/helpdesk/" class="ecafe-wel-btn" title="' . esc_attr__( 'Helpdesk', 'essential-classy-addons-for-elementor' ) . '" target="_blank">' . esc_html__( 'Helpdesk 💬🕘', 'essential-classy-addons-for-elementor' ) . '</a>';
							echo '</div>';
						/*Info Panel*/
					}
											echo '</div>';
											echo '</div>';
											echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_widgets' ) {
					$widstyle = '';
					if ( ! did_action( 'elementor/loaded' ) ) {
						echo '<div class="notice notice-error"><p>';
						echo esc_html__( 'Elementor plugin must be installed and activated to use Widgets.', 'essential-classy-addons-for-elementor' );
						echo '</p></div>';
						$widstyle = 'style="opacity:0.3;pointer-events:none;"';
						// return;
					}
					echo '<div class="ecafe-panel-widget-page" ' . $widstyle . '>';

						echo '<div class="ecafe-panel-head">';
							echo '<div class="ecafe-panel-h-se">';
								echo '<div class="ecafe-panel-hse-edtoggle" data-title="Exclude Widget : Schema, ACF, CFS, JET, METABOX, PODS, TOOLSET, WCK">';
									echo '<label class="ecafe-edtoggle"><span><svg xmlns="http://www.w3.org/2000/svg" width="23.532" height="20.533" viewBox="0 0 23.532 20.533">
												<path d="M6.9,15.626,0,8.73,2.228,6.5,6.9,11.064,17.729,0,20,2.388Z" transform="translate(4.307) rotate(16)"/>
												</svg></span><input type="checkbox" id="ecafe-edtoggleId" /> ' . esc_html__( 'Enable/Disable Widgets', 'essential-classy-addons-for-elementor' ) . '</label>';
								echo '</div>';
								echo '<div class="ecafe-panel-hse-search">';
									echo '<div class="ecafe-search-wrapper">
													<input type="text" id="ecafe-widget-search" placeholder="' . esc_html__( 'Search...', 'essential-classy-addons-for-elementor' ) . '">
												</div>';
								echo '</div>';
							echo '</div>';

							echo '<div class="ecafe-panel-h-filter">';
								echo '<div class="ecafe-panel-h-filter-list">';
								echo '<a href="#" data-catlist="ecafecatall" class="ecactivecat">' . esc_html__( 'All Widgets', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecateessential">' . esc_html__( 'Essential', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecateforms">' . esc_html__( 'Forms', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecatewoocommerce">' . esc_html__( 'Woocommerce', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecateembed">' . esc_html__( 'Embed', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecateacf">' . esc_html__( 'ACF', 'essential-classy-addons-for-elementor' ) . '</a>';
								// echo '<a href="#" data-catlist="ecafecatecfs">'.esc_html__('CFS','essential-classy-addons-for-elementor').'</a>';
								// echo '<a href="#" data-catlist="ecafecatejet">'.esc_html__('Jet','essential-classy-addons-for-elementor').'</a>';
								echo '<a href="#" data-catlist="ecafecatemetabox">' . esc_html__( 'Metabox', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecatepods">' . esc_html__( 'PODS', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecatetoolset">' . esc_html__( 'Toolset', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecatewck">' . esc_html__( 'WCK', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '<a href="#" data-catlist="ecafecatepro">' . esc_html__( 'Pro', 'essential-classy-addons-for-elementor' ) . '</a>';
								echo '</div>';
							echo '</div>';
						echo '</div>';
						/*widget list*/
						echo '<form action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" method="post" id="ecafe_widgets" enctype="multipart/form-data" encoding="multipart/form-data">';
							wp_nonce_field( 'nonce_ecafe_widgets_action', 'nonce_ecafe_widgets' );
							echo '<div class="ecafe-panel-row widget-list">';
					if ( ! defined( 'ECAFEP_VERSION' ) ) {
						echo $this->ecafeRenderProVersionNotice();
					}
								echo $this->ecafeRenderWidgetList();
							echo '</div>';

							echo '<input type="hidden" name="action" value="ecafe_widgets_options_save">';
							echo '<input type="submit" name="submit-key" value="Save" class="button-primary ecafe-submit-widget">';
						echo '</form>';
						/*widget list*/
								echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_extension' ) {
					$extenstyle = '';
					if ( ! did_action( 'elementor/loaded' ) ) {
						echo '<div class="notice notice-error"><p>';
						echo esc_html__( 'Elementor plugin must be installed and activated to use Extension.', 'essential-classy-addons-for-elementor' );
						echo '</p></div>';
						$extenstyle = 'style="opacity:0.3;pointer-events:none;"';
						// return;
					}
					echo '<div class="ecafe-panel-widget-page" ' . $extenstyle . '>';
						/*widget list*/
						echo '<form action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" method="post" id="ecafe_extension" enctype="multipart/form-data" encoding="multipart/form-data">';
							wp_nonce_field( 'nonce_ecafe_extension_action', 'nonce_ecafe_extension' );
							echo '<div class="ecafe-panel-row widget-list">';
					if ( ! defined( 'ECAFEP_VERSION' ) ) {
						echo $this->ecafeRenderProVersionNotice();
					}
								echo $this->ecafeRenderExtraList();
							echo '</div>';
							echo '<input type="hidden" name="action" value="ecafe_extension_options_save">';
							echo '<input type="submit" name="submit-key" value="Save" class="button-primary ecafe-submit-widget">';
						echo '</form>';
						/*widget list*/
								echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_wp_performance' ) {
					echo '<div class="ecafe-panel-widget-page">';
						/*widget list*/
						echo '<form action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" method="post" id="ecafe_wp_performance" enctype="multipart/form-data" encoding="multipart/form-data">';
							wp_nonce_field( 'nonce_ecafe_wp_performance_action', 'nonce_ecafe_wp_performance' );
							echo '<div class="ecafe-panel-row widget-list">';
								echo $this->ecafeRenderWpPerfomanceList();
							echo '</div>';
							echo '<input type="hidden" name="action" value="ecafe_wp_performance_options_save">';
							echo '<input type="submit" name="submit-key" value="Save" class="button-primary ecafe-submit-widget">';
						echo '</form>';
						/*widget list*/
					echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_wp_security' ) {
					echo '<div class="ecafe-panel-widget-page">';
						echo '<form action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" method="post" id="ecafe_wp_security" enctype="multipart/form-data" encoding="multipart/form-data">';
							wp_nonce_field( 'nonce_ecafe_wp_security_action', 'nonce_ecafe_wp_security' );
							echo '<div class="ecafe-panel-row widget-list">';
								echo $this->ecafeRenderWpSecurityList();
							echo '</div>';
							echo '<input type="hidden" name="action" value="ecafe_wp_security_options_save">';
							echo '<input type="submit" name="submit-key" value="Save" class="button-primary ecafe-submit-widget">';
						echo '</form>';
					echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_wp_utilities' ) {
					echo '<div class="ecafe-panel-widget-page">';
						echo '<form action="' . esc_url( admin_url( 'admin-post.php' ) ) . '" method="post" id="ecafe_wp_utilities" enctype="multipart/form-data" encoding="multipart/form-data">';
							wp_nonce_field( 'nonce_ecafe_wp_utilities_action', 'nonce_ecafe_wp_utilities' );
							echo '<div class="ecafe-panel-row widget-list">';
								echo $this->ecafeRenderWpUtilitiesList();
							echo '</div>';
							echo '<input type="hidden" name="action" value="ecafe_wp_utilities_options_save">';
							echo '<input type="submit" name="submit-key" value="Save" class="button-primary ecafe-submit-widget">';
						echo '</form>';
					echo '</div>';
				}

				if ( $tabForm['id'] == 'ecafe_white_label' ) {
					do_action( 'ecafeWhiteLabelFree' );
				}
			endforeach;
			$show .= ob_get_clean();
		}
				$show .= '</div>';

		$show .= '</div>';
		echo wp_kses_normalize_entities( $show );
	}

	/**
	 * Fields option
	 */
	public function fieldsOption() {
		if ( ! empty( $this->ecafefields ) ) {
			return $this->ecafefields;
		}

		$this->ecafefields[] = array(
			'id'         => 'ecafe_welcome',
			'title'      => 'Welcome',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_welcome',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);

		$this->ecafefields[] = array(
			'id'         => 'ecafe_widgets',
			'title'      => 'Widgets',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_widgets',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);

		$this->ecafefields[] = array(
			'id'         => 'ecafe_extension',
			'title'      => 'Extension',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_extension',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);

		$this->ecafefields[] = array(
			'id'         => 'ecafe_wp_performance',
			'title'      => 'WP Performance',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_wp_performance',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);
		$this->ecafefields[] = array(
			'id'         => 'ecafe_wp_security',
			'title'      => 'WP Security',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_wp_security',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);
		$this->ecafefields[] = array(
			'id'         => 'ecafe_wp_utilities',
			'title'      => 'WP Utilities',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_wp_utilities',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);
		$this->ecafefields[] = array(
			'id'         => 'ecafe_white_label',
			'title'      => 'White Label',
			'show_on'    => array(
				'key'   => 'option-page',
				'value' => array(
					'ecafe_white_label',
				),
			),
			'show_names' => true,
			'fields'     => '',
		);
		return $this->ecafefields;
	}

	/**
	 * Option key get
	 */
	public function optionKeyGet( $fieldId ) {
		$optionTabs = $this->fieldsOption();
		foreach ( $optionTabs as $optionTab ) {
			foreach ( $optionTab['fields'] as $field ) {
				if ( $field['id'] == $fieldId ) {
					return $optionTab['id'];
				}
			}
		}
		return $this->key;
	}

	public function __get( $field ) {
		if ( in_array( $field, array( 'key', 'fields', 'title', 'optionsPage' ), true ) ) {
			return $this->{$field};
		}
		if ( 'ecafefields' === $field ) {
			return $this->fieldsOption();
		}

		throw new Exception( 'Invalid property: ' . $field );
	}
}

$EcafePluginOptions = new EcafePluginOptions();
$EcafePluginOptions->hooks();