HOME


Mini Shell 1.0
DIR: /home/otwalrll/satojafurnitures.com/wp-content/plugins/martfury-addons/inc/
Upload File :
Current File : /home/otwalrll/satojafurnitures.com/wp-content/plugins/martfury-addons/inc/elementor.php
<?php

namespace MartfuryAddons;

use Elementor\Controls_Stack;
use Elementor\Controls_Manager;
use Elementor\Element_Column;
use Elementor\Core\Responsive\Responsive;

/**
 * Integrate with Elementor.
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

class Elementor {
	/**
	 * Instance
	 *
	 * @access private
	 */
	private static $_instance = null;


	/**
	 * Instance
	 *
	 * Ensures only one instance of the class is loaded or can be loaded.	 *
	 * @return Martfury_Addons_Elementor An instance of the class.
	 */
	public static function instance() {
		if ( is_null( self::$_instance ) ) {
			self::$_instance = new self();
		}

		return self::$_instance;
	}

	/**
	 * Constructor
	 */
	public function __construct() {
		spl_autoload_register( [ $this, 'autoload' ] );

		$this->_includes();

		spl_autoload_register( '\Martfury\Addons\Auto_Loader::load' );

		$this->add_actions();
	}

	/**
	 * Auto load widgets
	 */
	public function autoload( $class ) {
		if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
			return;
		}

		if ( false === strpos( $class, 'Widgets' ) ) {
			return;
		}

		$path     = explode( '\\', $class );
		$filename = strtolower( array_pop( $path ) );

		if ( 'Widgets' != array_pop( $path ) ) {
			return;
		}

		$filename = str_replace( '_', '-', $filename );
		$filename = MARTFURY_ADDONS_DIR . 'inc/elementor-widgets/' . $filename . '.php';

		if ( is_readable( $filename ) ) {
			include( $filename );
		}
	}

	/**
	 * Includes files which are not widgets
	 */
	private function _includes() {
		\Martfury\Addons\Auto_Loader::register( [
			'Martfury\Addons\Elementor\Controls' => MARTFURY_ADDONS_DIR . 'inc/controls/controls.php',
		] );
	}

	/**
	 * Hooks to init
	 */
	protected function add_actions() {
		add_action( 'elementor/frontend/after_enqueue_styles', [ $this, 'styles' ] );
		add_action( 'elementor/frontend/after_register_scripts', [ $this, 'scripts' ] );

		add_action( 'elementor/controls/register', [ $this, 'init_controls' ] );
		add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] );

		add_action( 'elementor/elements/categories_registered', [ $this, 'add_category' ] );

		add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'editor_styles' ] );

		add_action( 'post_class', [ $this, 'get_product_classes' ], 20, 3 );

		add_action( 'martfury_woo_after_shop_loop_item', [ $this, 'deal_progress' ], 7 );

		add_action( 'wc_ajax_nopriv_mf_elementor_load_products', [ $this, 'elementor_load_products' ] );
		add_action( 'wc_ajax_mf_elementor_load_products', [ $this, 'elementor_load_products' ] );

		add_action( 'elementor/element/before_section_end', [ $this, 'register_controls' ], 10, 2 );

		add_filter( 'body_class', array( $this, 'elementor_body_class' ), 20 );

		$this->get( 'controls' );
	}

	/**
	 * Get Martfury Elementor Class instance
	 *
	 * @since 1.0.0
	 *
	 * @return object
	 */
	public function get( $class ) {
		switch ( $class ) {
			case 'controls':
				return \Martfury\Addons\Elementor\Controls::instance();
				break;
		}
	}

	public function elementor_body_class( $classes ) {

	    if( class_exists('\Elementor\Core\Experiments\Manager') && method_exists('\Elementor\Core\Experiments\Manager', 'is_feature_active') ) {
	        if(  \Elementor\Plugin::$instance->experiments->is_feature_active( 'e_dom_optimization' ) ) {
	            $classes[] = 'elementor-no-row';
            }
        }

		return $classes;
	}

	public function get_product_classes( $classes, $class, $post_id ) {
		if ( is_admin() && \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
			$post      = get_post( $post_id );
			$classes[] = $post->post_type;
		}

		return $classes;
	}

	/**
	 * Register styles
	 */
	public function styles() {
	}

	/**
	 * Register styles
	 */
	public function scripts() {
		wp_register_script( 'martfury-elementor', MARTFURY_ADDONS_URL . '/assets/js/elementor.js', array( 'jquery' ), '20221030', true );
		wp_localize_script(
			'martfury-elementor', 'mf_elementor_data', array(
			'ajax_url' => $this->get_endpoint( '%%endpoint%%' ),
		) );
	}

	public function get_endpoint( $request = '' ) {
		return esc_url_raw( apply_filters( 'woocommerce_ajax_get_endpoint', add_query_arg( 'wc-ajax', $request, remove_query_arg( array(
			'remove_item',
			'add-to-cart',
			'added-to-cart',
			'order_again',
			'_wpnonce'
		), home_url( '/', 'relative' ) ) ), $request ) );
	}


	/**
	 * Register styles
	 */
	public function editor_styles() {
		wp_enqueue_style( 'linearicons', MARTFURY_ADDONS_URL . 'assets/css/linearicons.min.css', array(), '1.0.0' );
	}

	/**
	 * Init Controls
	 */
	public function init_controls( $controls_registry ) {
		$this->modify_icons_controls( $controls_registry );

		add_action( 'elementor/icons_manager/additional_tabs', [ $this, 'elementor_custom_icons' ] );
	}

	/**
	 * @param $element    Controls_Stack
	 * @param $section_id string
	 */
	public function register_controls( Controls_Stack $element, $section_id ) {
		if ( ! $element instanceof Element_Column ) {
			return;
		}
		$required_section_id = 'section_advanced';

		if ( $required_section_id !== $section_id ) {
			return;
		}

		$element->update_responsive_control(
			'padding',
			[
				'selectors' => [
					'{{WRAPPER}} > .elementor-element-populated' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;',
				],
			]
		);
	}

	/**
	 * Init Widgets
	 */
	public function init_widgets() {
		$widgets_manager = \Elementor\Plugin::instance()->widgets_manager;

		// Products
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Product_Deals_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Product_Deals_Carousel_2() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Product_Deals_Grid() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Newsletter() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_Of_Category() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_Of_Category_2() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Product_Tabs_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Product_Tabs_Grid() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_List_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_Grid() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_List() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Products_Brands() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Recently_Viewed_Products() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Recently_Viewed_Products_Carousel() );

		// Banners
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Banner_Small() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Banner_Medium() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Banner_Large() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Banner_Large_2() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Banner_App() );

		// Images
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Image_Box() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Image_Box_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Images_Grid() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Images_Carousel() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Brand_Images() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Brand_Images_Carousel() );

		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Icons_List() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Category_Tabs() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Category_Box() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Post_Grid() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Testimonial_Slides() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Testimonial_Slides_2() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\FAQs() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Contact_Form_7() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Counter() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Countdown() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Journey() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Member() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Icon_Box() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Process() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Bubbles() );
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Instagram_Grid() );

		// Slides
		$this->register_widget( new \MartfuryAddons\Elementor\Widgets\Slides() );
	}

	public function register_widget(\Elementor\Widget_Base $widget ) {
		$widgets_manager = \Elementor\Plugin::instance()->widgets_manager;
		return $widgets_manager->register($widget);
	}

	/**
	 * Add Martfury category
	 */
	public function add_category( $elements_manager ) {
		$elements_manager->add_category(
			'martfury',
			[
				'title' => esc_html__( 'Martfury', 'martfury-addons' )
			]
		);
	}

	/**
	 * Adding custom icon to icon control in Elementor
	 */
	public function modify_icons_controls( $controls_registry ) {
		// Get existing icons
		$icons = $controls_registry->get_control( 'icon' )->get_settings( 'options' );
		// Append new icons
		$new_icons = array_merge(
			array(
				'icon-home'                         => 'home',
				'icon-home2'                        => 'home2',
				'icon-home3'                        => 'home3',
				'icon-home4'                        => 'home4',
				'icon-home5'                        => 'home5',
				'icon-home6'                        => 'home6',
				'icon-bathtub'                      => 'bathtub',
				'icon-toothbrush'                   => 'toothbrush',
				'icon-bed'                          => 'bed',
				'icon-couch'                        => 'couch',
				'icon-chair'                        => 'chair',
				'icon-city'                         => 'city',
				'icon-apartment'                    => 'apartment',
				'icon-pencil'                       => 'pencil',
				'icon-pencil2'                      => 'pencil2',
				'icon-pen'                          => 'pen',
				'icon-pencil3'                      => 'pencil3',
				'icon-eraser'                       => 'eraser',
				'icon-pencil4'                      => 'pencil4',
				'icon-pencil5'                      => 'pencil5',
				'icon-feather'                      => 'feather',
				'icon-feather2'                     => 'feather2',
				'icon-feather3'                     => 'feather3',
				'icon-pen2'                         => 'pen2',
				'icon-pen-add'                      => 'pen-add',
				'icon-pen-remove'                   => 'pen-remove',
				'icon-vector'                       => 'vector',
				'icon-pen3'                         => 'pen3',
				'icon-blog'                         => 'blog',
				'icon-brush'                        => 'brush',
				'icon-brush2'                       => 'brush2',
				'icon-spray'                        => 'spray',
				'icon-paint-roller'                 => 'paint-roller',
				'icon-stamp'                        => 'stamp',
				'icon-tape'                         => 'tape',
				'icon-desk-tape'                    => 'desk-tape',
				'icon-texture'                      => 'texture',
				'icon-eye-dropper'                  => 'eye-dropper',
				'icon-palette'                      => 'palette',
				'icon-color-sampler'                => 'color-sampler',
				'icon-bucket'                       => 'bucket',
				'icon-gradient'                     => 'gradient',
				'icon-gradient2'                    => 'gradient2',
				'icon-magic-wand'                   => 'magic-wand',
				'icon-magnet'                       => 'magnet',
				'icon-pencil-ruler'                 => 'pencil-ruler',
				'icon-pencil-ruler2'                => 'pencil-ruler2',
				'icon-compass'                      => 'compass',
				'icon-aim'                          => 'aim',
				'icon-gun'                          => 'gun',
				'icon-bottle'                       => 'bottle',
				'icon-drop'                         => 'drop',
				'icon-drop-crossed'                 => 'drop-crossed',
				'icon-drop2'                        => 'drop2',
				'icon-snow'                         => 'snow',
				'icon-snow2'                        => 'snow2',
				'icon-fire'                         => 'fire',
				'icon-lighter'                      => 'lighter',
				'icon-knife'                        => 'knife',
				'icon-dagger'                       => 'dagger',
				'icon-tissue'                       => 'tissue',
				'icon-toilet-paper'                 => 'toilet-paper',
				'icon-poop'                         => 'poop',
				'icon-umbrella'                     => 'umbrella',
				'icon-umbrella2'                    => 'umbrella2',
				'icon-rain'                         => 'rain',
				'icon-tornado'                      => 'tornado',
				'icon-wind'                         => 'wind',
				'icon-fan'                          => 'fan',
				'icon-contrast'                     => 'contrast',
				'icon-sun-small'                    => 'sun-small',
				'icon-sun'                          => 'sun',
				'icon-sun2'                         => 'sun2',
				'icon-moon'                         => 'moon',
				'icon-cloud'                        => 'cloud',
				'icon-cloud-upload'                 => 'cloud-upload',
				'icon-cloud-download'               => 'cloud-download',
				'icon-cloud-rain'                   => 'cloud-rain',
				'icon-cloud-hailstones'             => 'cloud-hailstones',
				'icon-cloud-snow'                   => 'cloud-snow',
				'icon-cloud-windy'                  => 'cloud-windy',
				'icon-sun-wind'                     => 'sun-wind',
				'icon-cloud-fog'                    => 'cloud-fog',
				'icon-cloud-sun'                    => 'cloud-sun',
				'icon-cloud-lightning'              => 'cloud-lightning',
				'icon-cloud-sync'                   => 'cloud-sync',
				'icon-cloud-lock'                   => 'cloud-lock',
				'icon-cloud-gear'                   => 'cloud-gear',
				'icon-cloud-alert'                  => 'cloud-alert',
				'icon-cloud-check'                  => 'cloud-check',
				'icon-cloud-cross'                  => 'cloud-cross',
				'icon-cloud-crossed'                => 'cloud-crossed',
				'icon-cloud-database'               => 'cloud-database',
				'icon-database'                     => 'database',
				'icon-database-add'                 => 'database-add',
				'icon-database-remove'              => 'database-remove',
				'icon-database-lock'                => 'database-lock',
				'icon-database-refresh'             => 'database-refresh',
				'icon-database-check'               => 'database-check',
				'icon-database-history'             => 'database-history',
				'icon-database-upload'              => 'database-upload',
				'icon-database-download'            => 'database-download',
				'icon-server'                       => 'server',
				'icon-shield'                       => 'shield',
				'icon-shield-check'                 => 'shield-check',
				'icon-shield-alert'                 => 'shield-alert',
				'icon-shield-cross'                 => 'shield-cross',
				'icon-lock'                         => 'lock',
				'icon-rotation-lock'                => 'rotation-lock',
				'icon-unlock'                       => 'unlock',
				'icon-key'                          => 'key',
				'icon-key-hole'                     => 'key-hole',
				'icon-toggle-off'                   => 'toggle-off',
				'icon-toggle-on'                    => 'toggle-on',
				'icon-cog'                          => 'cog',
				'icon-cog2'                         => 'cog2',
				'icon-wrench'                       => 'wrench',
				'icon-screwdriver'                  => 'screwdriver',
				'icon-hammer-wrench'                => 'hammer-wrench',
				'icon-hammer'                       => 'hammer',
				'icon-saw'                          => 'saw',
				'icon-axe'                          => 'axe',
				'icon-axe2'                         => 'axe2',
				'icon-shovel'                       => 'shovel',
				'icon-pickaxe'                      => 'pickaxe',
				'icon-factory'                      => 'factory',
				'icon-factory2'                     => 'factory2',
				'icon-recycle'                      => 'recycle',
				'icon-trash'                        => 'trash',
				'icon-trash2'                       => 'trash2',
				'icon-trash3'                       => 'trash3',
				'icon-broom'                        => 'broom',
				'icon-game'                         => 'game',
				'icon-gamepad'                      => 'gamepad',
				'icon-joystick'                     => 'joystick',
				'icon-dice'                         => 'dice',
				'icon-spades'                       => 'spades',
				'icon-diamonds'                     => 'diamonds',
				'icon-clubs'                        => 'clubs',
				'icon-hearts'                       => 'hearts',
				'icon-heart'                        => 'heart',
				'icon-star'                         => 'star',
				'icon-star-half'                    => 'star-half',
				'icon-star-empty'                   => 'star-empty',
				'icon-flag'                         => 'flag',
				'icon-flag2'                        => 'flag2',
				'icon-flag3'                        => 'flag3',
				'icon-mailbox-full'                 => 'mailbox-full',
				'icon-mailbox-empty'                => 'mailbox-empty',
				'icon-at-sign'                      => 'at-sign',
				'icon-envelope'                     => 'envelope',
				'icon-envelope-open'                => 'envelope-open',
				'icon-paperclip'                    => 'paperclip',
				'icon-paper-plane'                  => 'paper-plane',
				'icon-reply'                        => 'reply',
				'icon-reply-all'                    => 'reply-all',
				'icon-inbox'                        => 'inbox',
				'icon-inbox2'                       => 'inbox2',
				'icon-outbox'                       => 'outbox',
				'icon-box'                          => 'box',
				'icon-archive'                      => 'archive',
				'icon-archive2'                     => 'archive2',
				'icon-drawers'                      => 'drawers',
				'icon-drawers2'                     => 'drawers2',
				'icon-drawers3'                     => 'drawers3',
				'icon-eye'                          => 'eye',
				'icon-eye-crossed'                  => 'eye-crossed',
				'icon-eye-plus'                     => 'eye-plus',
				'icon-eye-minus'                    => 'eye-minus',
				'icon-binoculars'                   => 'binoculars',
				'icon-binoculars2'                  => 'binoculars2',
				'icon-hdd'                          => 'hdd',
				'icon-hdd-down'                     => 'hdd-down',
				'icon-hdd-up'                       => 'hdd-up',
				'icon-floppy-disk'                  => 'floppy-disk',
				'icon-disc'                         => 'disc',
				'icon-tape2'                        => 'tape2',
				'icon-printer'                      => 'printer',
				'icon-shredder'                     => 'shredder',
				'icon-file-empty'                   => 'file-empty',
				'icon-file-add'                     => 'file-add',
				'icon-file-check'                   => 'file-check',
				'icon-file-lock'                    => 'file-lock',
				'icon-files'                        => 'files',
				'icon-copy'                         => 'copy',
				'icon-compare'                      => 'compare',
				'icon-folder'                       => 'folder',
				'icon-folder-search'                => 'folder-search',
				'icon-folder-plus'                  => 'folder-plus',
				'icon-folder-minus'                 => 'folder-minus',
				'icon-folder-download'              => 'folder-download',
				'icon-folder-upload'                => 'folder-upload',
				'icon-folder-star'                  => 'folder-star',
				'icon-folder-heart'                 => 'folder-heart',
				'icon-folder-user'                  => 'folder-user',
				'icon-folder-shared'                => 'folder-shared',
				'icon-folder-music'                 => 'folder-music',
				'icon-folder-picture'               => 'folder-picture',
				'icon-folder-film'                  => 'folder-film',
				'icon-scissors'                     => 'scissors',
				'icon-paste'                        => 'paste',
				'icon-clipboard-empty'              => 'clipboard-empty',
				'icon-clipboard-pencil'             => 'clipboard-pencil',
				'icon-clipboard-text'               => 'clipboard-text',
				'icon-clipboard-check'              => 'clipboard-check',
				'icon-clipboard-down'               => 'clipboard-down',
				'icon-clipboard-left'               => 'clipboard-left',
				'icon-clipboard-alert'              => 'clipboard-alert',
				'icon-clipboard-user'               => 'clipboard-user',
				'icon-register'                     => 'register',
				'icon-enter'                        => 'enter',
				'icon-exit'                         => 'exit',
				'icon-papers'                       => 'papers',
				'icon-news'                         => 'news',
				'icon-reading'                      => 'reading',
				'icon-typewriter'                   => 'typewriter',
				'icon-document'                     => 'document',
				'icon-document2'                    => 'document2',
				'icon-graduation-hat'               => 'graduation-hat',
				'icon-license'                      => 'license',
				'icon-license2'                     => 'license2',
				'icon-medal-empty'                  => 'medal-empty',
				'icon-medal-first'                  => 'medal-first',
				'icon-medal-second'                 => 'medal-second',
				'icon-medal-third'                  => 'medal-third',
				'icon-podium'                       => 'podium',
				'icon-trophy'                       => 'trophy',
				'icon-trophy2'                      => 'trophy2',
				'icon-music-note'                   => 'music-note',
				'icon-music-note2'                  => 'music-note2',
				'icon-music-note3'                  => 'music-note3',
				'icon-playlist'                     => 'playlist',
				'icon-playlist-add'                 => 'playlist-add',
				'icon-guitar'                       => 'guitar',
				'icon-trumpet'                      => 'trumpet',
				'icon-album'                        => 'album',
				'icon-shuffle'                      => 'shuffle',
				'icon-repeat-one'                   => 'repeat-one',
				'icon-repeat'                       => 'repeat',
				'icon-headphones'                   => 'headphones',
				'icon-headset'                      => 'headset',
				'icon-loudspeaker'                  => 'loudspeaker',
				'icon-equalizer'                    => 'equalizer',
				'icon-theater'                      => 'theater',
				'icon-3d-glasses'                   => '3d-glasses',
				'icon-ticket'                       => 'ticket',
				'icon-presentation'                 => 'presentation',
				'icon-play'                         => 'play',
				'icon-film-play'                    => 'film-play',
				'icon-clapboard-play'               => 'clapboard-play',
				'icon-media'                        => 'media',
				'icon-film'                         => 'film',
				'icon-film2'                        => 'film2',
				'icon-surveillance'                 => 'surveillance',
				'icon-surveillance2'                => 'surveillance2',
				'icon-camera'                       => 'camera',
				'icon-camera-crossed'               => 'camera-crossed',
				'icon-camera-play'                  => 'camera-play',
				'icon-time-lapse'                   => 'time-lapse',
				'icon-record'                       => 'record',
				'icon-camera2'                      => 'camera2',
				'icon-camera-flip'                  => 'camera-flip',
				'icon-panorama'                     => 'panorama',
				'icon-time-lapse2'                  => 'time-lapse2',
				'icon-shutter'                      => 'shutter',
				'icon-shutter2'                     => 'shutter2',
				'icon-face-detection'               => 'face-detection',
				'icon-flare'                        => 'flare',
				'icon-convex'                       => 'convex',
				'icon-concave'                      => 'concave',
				'icon-picture'                      => 'picture',
				'icon-picture2'                     => 'picture2',
				'icon-picture3'                     => 'picture3',
				'icon-pictures'                     => 'pictures',
				'icon-book'                         => 'book',
				'icon-audio-book'                   => 'audio-book',
				'icon-book2'                        => 'book2',
				'icon-bookmark'                     => 'bookmark',
				'icon-bookmark2'                    => 'bookmark2',
				'icon-label'                        => 'label',
				'icon-library'                      => 'library',
				'icon-library2'                     => 'library2',
				'icon-contacts'                     => 'contacts',
				'icon-profile'                      => 'profile',
				'icon-portrait'                     => 'portrait',
				'icon-portrait2'                    => 'portrait2',
				'icon-user'                         => 'user',
				'icon-user-plus'                    => 'user-plus',
				'icon-user-minus'                   => 'user-minus',
				'icon-user-lock'                    => 'user-lock',
				'icon-users'                        => 'users',
				'icon-users2'                       => 'users2',
				'icon-users-plus'                   => 'users-plus',
				'icon-users-minus'                  => 'users-minus',
				'icon-group-work'                   => 'group-work',
				'icon-woman'                        => 'woman',
				'icon-man'                          => 'man',
				'icon-baby'                         => 'baby',
				'icon-baby2'                        => 'baby2',
				'icon-baby3'                        => 'baby3',
				'icon-baby-bottle'                  => 'baby-bottle',
				'icon-walk'                         => 'walk',
				'icon-hand-waving'                  => 'hand-waving',
				'icon-jump'                         => 'jump',
				'icon-run'                          => 'run',
				'icon-woman2'                       => 'woman2',
				'icon-man2'                         => 'man2',
				'icon-man-woman'                    => 'man-woman',
				'icon-height'                       => 'height',
				'icon-weight'                       => 'weight',
				'icon-scale'                        => 'scale',
				'icon-button'                       => 'button',
				'icon-bow-tie'                      => 'bow-tie',
				'icon-tie'                          => 'tie',
				'icon-socks'                        => 'socks',
				'icon-shoe'                         => 'shoe',
				'icon-shoes'                        => 'shoes',
				'icon-hat'                          => 'hat',
				'icon-pants'                        => 'pants',
				'icon-shorts'                       => 'shorts',
				'icon-flip-flops'                   => 'flip-flops',
				'icon-shirt'                        => 'shirt',
				'icon-hanger'                       => 'hanger',
				'icon-laundry'                      => 'laundry',
				'icon-store'                        => 'store',
				'icon-haircut'                      => 'haircut',
				'icon-store-24'                     => 'store-24',
				'icon-barcode'                      => 'barcode',
				'icon-barcode2'                     => 'barcode2',
				'icon-barcode3'                     => 'barcode3',
				'icon-cashier'                      => 'cashier',
				'icon-bag'                          => 'bag',
				'icon-bag2'                         => 'bag2',
				'icon-cart'                         => 'cart',
				'icon-cart-empty'                   => 'cart-empty',
				'icon-cart-full'                    => 'cart-full',
				'icon-cart-plus'                    => 'cart-plus',
				'icon-cart-plus2'                   => 'cart-plus2',
				'icon-cart-add'                     => 'cart-add',
				'icon-cart-remove'                  => 'cart-remove',
				'icon-cart-exchange'                => 'cart-exchange',
				'icon-tag'                          => 'tag',
				'icon-tags'                         => 'tags',
				'icon-receipt'                      => 'receipt',
				'icon-wallet'                       => 'wallet',
				'icon-credit-card'                  => 'credit-card',
				'icon-cash-dollar'                  => 'cash-dollar',
				'icon-cash-euro'                    => 'cash-euro',
				'icon-cash-pound'                   => 'cash-pound',
				'icon-cash-yen'                     => 'cash-yen',
				'icon-bag-dollar'                   => 'bag-dollar',
				'icon-bag-euro'                     => 'bag-euro',
				'icon-bag-pound'                    => 'bag-pound',
				'icon-bag-yen'                      => 'bag-yen',
				'icon-coin-dollar'                  => 'coin-dollar',
				'icon-coin-euro'                    => 'coin-euro',
				'icon-coin-pound'                   => 'coin-pound',
				'icon-coin-yen'                     => 'coin-yen',
				'icon-calculator'                   => 'calculator',
				'icon-calculator2'                  => 'calculator2',
				'icon-abacus'                       => 'abacus',
				'icon-vault'                        => 'vault',
				'icon-telephone'                    => 'telephone',
				'icon-phone-lock'                   => 'phone-lock',
				'icon-phone-wave'                   => 'phone-wave',
				'icon-phone-pause'                  => 'phone-pause',
				'icon-phone-outgoing'               => 'phone-outgoing',
				'icon-phone-incoming'               => 'phone-incoming',
				'icon-phone-in-out'                 => 'phone-in-out',
				'icon-phone-error'                  => 'phone-error',
				'icon-phone-sip'                    => 'phone-sip',
				'icon-phone-plus'                   => 'phone-plus',
				'icon-phone-minus'                  => 'phone-minus',
				'icon-voicemail'                    => 'voicemail',
				'icon-dial'                         => 'dial',
				'icon-telephone2'                   => 'telephone2',
				'icon-pushpin'                      => 'pushpin',
				'icon-pushpin2'                     => 'pushpin2',
				'icon-map-marker'                   => 'map-marker',
				'icon-map-marker-user'              => 'map-marker-user',
				'icon-map-marker-down'              => 'map-marker-down',
				'icon-map-marker-check'             => 'map-marker-check',
				'icon-map-marker-crossed'           => 'map-marker-crossed',
				'icon-radar'                        => 'radar',
				'icon-compass2'                     => 'compass2',
				'icon-map'                          => 'map',
				'icon-map2'                         => 'map2',
				'icon-location'                     => 'location',
				'icon-road-sign'                    => 'road-sign',
				'icon-calendar-empty'               => 'calendar-empty',
				'icon-calendar-check'               => 'calendar-check',
				'icon-calendar-cross'               => 'calendar-cross',
				'icon-calendar-31'                  => 'calendar-31',
				'icon-calendar-full'                => 'calendar-full',
				'icon-calendar-insert'              => 'calendar-insert',
				'icon-calendar-text'                => 'calendar-text',
				'icon-calendar-user'                => 'calendar-user',
				'icon-mouse'                        => 'mouse',
				'icon-mouse-left'                   => 'mouse-left',
				'icon-mouse-right'                  => 'mouse-right',
				'icon-mouse-both'                   => 'mouse-both',
				'icon-keyboard'                     => 'keyboard',
				'icon-keyboard-up'                  => 'keyboard-up',
				'icon-keyboard-down'                => 'keyboard-down',
				'icon-delete'                       => 'delete',
				'icon-spell-check'                  => 'spell-check',
				'icon-escape'                       => 'escape',
				'icon-enter2'                       => 'enter2',
				'icon-screen'                       => 'screen',
				'icon-aspect-ratio'                 => 'aspect-ratio',
				'icon-signal'                       => 'signal',
				'icon-signal-lock'                  => 'signal-lock',
				'icon-signal-80'                    => 'signal-80',
				'icon-signal-60'                    => 'signal-60',
				'icon-signal-40'                    => 'signal-40',
				'icon-signal-20'                    => 'signal-20',
				'icon-signal-0'                     => 'signal-0',
				'icon-signal-blocked'               => 'signal-blocked',
				'icon-sim'                          => 'sim',
				'icon-flash-memory'                 => 'flash-memory',
				'icon-usb-drive'                    => 'usb-drive',
				'icon-phone'                        => 'phone',
				'icon-smartphone'                   => 'smartphone',
				'icon-smartphone-notification'      => 'smartphone-notification',
				'icon-smartphone-vibration'         => 'smartphone-vibration',
				'icon-smartphone-embed'             => 'smartphone-embed',
				'icon-smartphone-waves'             => 'smartphone-waves',
				'icon-tablet'                       => 'tablet',
				'icon-tablet2'                      => 'tablet2',
				'icon-laptop'                       => 'laptop',
				'icon-laptop-phone'                 => 'laptop-phone',
				'icon-desktop'                      => 'desktop',
				'icon-launch'                       => 'launch',
				'icon-new-tab'                      => 'new-tab',
				'icon-window'                       => 'window',
				'icon-cable'                        => 'cable',
				'icon-cable2'                       => 'cable2',
				'icon-tv'                           => 'tv',
				'icon-radio'                        => 'radio',
				'icon-remote-control'               => 'remote-control',
				'icon-power-switch'                 => 'power-switch',
				'icon-power'                        => 'power',
				'icon-power-crossed'                => 'power-crossed',
				'icon-flash-auto'                   => 'flash-auto',
				'icon-lamp'                         => 'lamp',
				'icon-flashlight'                   => 'flashlight',
				'icon-lampshade'                    => 'lampshade',
				'icon-cord'                         => 'cord',
				'icon-outlet'                       => 'outlet',
				'icon-battery-power'                => 'battery-power',
				'icon-battery-empty'                => 'battery-empty',
				'icon-battery-alert'                => 'battery-alert',
				'icon-battery-error'                => 'battery-error',
				'icon-battery-low1'                 => 'battery-low1',
				'icon-battery-low2'                 => 'battery-low2',
				'icon-battery-low3'                 => 'battery-low3',
				'icon-battery-mid1'                 => 'battery-mid1',
				'icon-battery-mid2'                 => 'battery-mid2',
				'icon-battery-mid3'                 => 'battery-mid3',
				'icon-battery-full'                 => 'battery-full',
				'icon-battery-charging'             => 'battery-charging',
				'icon-battery-charging2'            => 'battery-charging2',
				'icon-battery-charging3'            => 'battery-charging3',
				'icon-battery-charging4'            => 'battery-charging4',
				'icon-battery-charging5'            => 'battery-charging5',
				'icon-battery-charging6'            => 'battery-charging6',
				'icon-battery-charging7'            => 'battery-charging7',
				'icon-chip'                         => 'chip',
				'icon-chip-x64'                     => 'chip-x64',
				'icon-chip-x86'                     => 'chip-x86',
				'icon-bubble'                       => 'bubble',
				'icon-bubbles'                      => 'bubbles',
				'icon-bubble-dots'                  => 'bubble-dots',
				'icon-bubble-alert'                 => 'bubble-alert',
				'icon-bubble-question'              => 'bubble-question',
				'icon-bubble-text'                  => 'bubble-text',
				'icon-bubble-pencil'                => 'bubble-pencil',
				'icon-bubble-picture'               => 'bubble-picture',
				'icon-bubble-video'                 => 'bubble-video',
				'icon-bubble-user'                  => 'bubble-user',
				'icon-bubble-quote'                 => 'bubble-quote',
				'icon-bubble-heart'                 => 'bubble-heart',
				'icon-bubble-emoticon'              => 'bubble-emoticon',
				'icon-bubble-attachment'            => 'bubble-attachment',
				'icon-phone-bubble'                 => 'phone-bubble',
				'icon-quote-open'                   => 'quote-open',
				'icon-quote-close'                  => 'quote-close',
				'icon-dna'                          => 'dna',
				'icon-heart-pulse'                  => 'heart-pulse',
				'icon-pulse'                        => 'pulse',
				'icon-syringe'                      => 'syringe',
				'icon-pills'                        => 'pills',
				'icon-first-aid'                    => 'first-aid',
				'icon-lifebuoy'                     => 'lifebuoy',
				'icon-bandage'                      => 'bandage',
				'icon-bandages'                     => 'bandages',
				'icon-thermometer'                  => 'thermometer',
				'icon-microscope'                   => 'microscope',
				'icon-brain'                        => 'brain',
				'icon-beaker'                       => 'beaker',
				'icon-skull'                        => 'skull',
				'icon-bone'                         => 'bone',
				'icon-construction'                 => 'construction',
				'icon-construction-cone'            => 'construction-cone',
				'icon-pie-chart'                    => 'pie-chart',
				'icon-pie-chart2'                   => 'pie-chart2',
				'icon-graph'                        => 'graph',
				'icon-chart-growth'                 => 'chart-growth',
				'icon-chart-bars'                   => 'chart-bars',
				'icon-chart-settings'               => 'chart-settings',
				'icon-cake'                         => 'cake',
				'icon-gift'                         => 'gift',
				'icon-balloon'                      => 'balloon',
				'icon-rank'                         => 'rank',
				'icon-rank2'                        => 'rank2',
				'icon-rank3'                        => 'rank3',
				'icon-crown'                        => 'crown',
				'icon-lotus'                        => 'lotus',
				'icon-diamond'                      => 'diamond',
				'icon-diamond2'                     => 'diamond2',
				'icon-diamond3'                     => 'diamond3',
				'icon-diamond4'                     => 'diamond4',
				'icon-linearicons'                  => 'linearicons',
				'icon-teacup'                       => 'teacup',
				'icon-teapot'                       => 'teapot',
				'icon-glass'                        => 'glass',
				'icon-bottle2'                      => 'bottle2',
				'icon-glass-cocktail'               => 'glass-cocktail',
				'icon-glass2'                       => 'glass2',
				'icon-dinner'                       => 'dinner',
				'icon-dinner2'                      => 'dinner2',
				'icon-chef'                         => 'chef',
				'icon-scale2'                       => 'scale2',
				'icon-egg'                          => 'egg',
				'icon-egg2'                         => 'egg2',
				'icon-eggs'                         => 'eggs',
				'icon-platter'                      => 'platter',
				'icon-steak'                        => 'steak',
				'icon-hamburger'                    => 'hamburger',
				'icon-hotdog'                       => 'hotdog',
				'icon-pizza'                        => 'pizza',
				'icon-sausage'                      => 'sausage',
				'icon-chicken'                      => 'chicken',
				'icon-fish'                         => 'fish',
				'icon-carrot'                       => 'carrot',
				'icon-cheese'                       => 'cheese',
				'icon-bread'                        => 'bread',
				'icon-ice-cream'                    => 'ice-cream',
				'icon-ice-cream2'                   => 'ice-cream2',
				'icon-candy'                        => 'candy',
				'icon-lollipop'                     => 'lollipop',
				'icon-coffee-bean'                  => 'coffee-bean',
				'icon-coffee-cup'                   => 'coffee-cup',
				'icon-cherry'                       => 'cherry',
				'icon-grapes'                       => 'grapes',
				'icon-citrus'                       => 'citrus',
				'icon-apple'                        => 'apple',
				'icon-leaf'                         => 'leaf',
				'icon-landscape'                    => 'landscape',
				'icon-pine-tree'                    => 'pine-tree',
				'icon-tree'                         => 'tree',
				'icon-cactus'                       => 'cactus',
				'icon-paw'                          => 'paw',
				'icon-footprint'                    => 'footprint',
				'icon-speed-slow'                   => 'speed-slow',
				'icon-speed-medium'                 => 'speed-medium',
				'icon-speed-fast'                   => 'speed-fast',
				'icon-rocket'                       => 'rocket',
				'icon-hammer2'                      => 'hammer2',
				'icon-balance'                      => 'balance',
				'icon-briefcase'                    => 'briefcase',
				'icon-luggage-weight'               => 'luggage-weight',
				'icon-dolly'                        => 'dolly',
				'icon-plane'                        => 'plane',
				'icon-plane-crossed'                => 'plane-crossed',
				'icon-helicopter'                   => 'helicopter',
				'icon-traffic-lights'               => 'traffic-lights',
				'icon-siren'                        => 'siren',
				'icon-road'                         => 'road',
				'icon-engine'                       => 'engine',
				'icon-oil-pressure'                 => 'oil-pressure',
				'icon-coolant-temperature'          => 'coolant-temperature',
				'icon-car-battery'                  => 'car-battery',
				'icon-gas'                          => 'gas',
				'icon-gallon'                       => 'gallon',
				'icon-transmission'                 => 'transmission',
				'icon-car'                          => 'car',
				'icon-car-wash'                     => 'car-wash',
				'icon-car-wash2'                    => 'car-wash2',
				'icon-bus'                          => 'bus',
				'icon-bus2'                         => 'bus2',
				'icon-car2'                         => 'car2',
				'icon-parking'                      => 'parking',
				'icon-car-lock'                     => 'car-lock',
				'icon-taxi'                         => 'taxi',
				'icon-car-siren'                    => 'car-siren',
				'icon-car-wash3'                    => 'car-wash3',
				'icon-car-wash4'                    => 'car-wash4',
				'icon-ambulance'                    => 'ambulance',
				'icon-truck'                        => 'truck',
				'icon-trailer'                      => 'trailer',
				'icon-scale-truck'                  => 'scale-truck',
				'icon-train'                        => 'train',
				'icon-ship'                         => 'ship',
				'icon-ship2'                        => 'ship2',
				'icon-anchor'                       => 'anchor',
				'icon-boat'                         => 'boat',
				'icon-bicycle'                      => 'bicycle',
				'icon-bicycle2'                     => 'bicycle2',
				'icon-dumbbell'                     => 'dumbbell',
				'icon-bench-press'                  => 'bench-press',
				'icon-swim'                         => 'swim',
				'icon-football'                     => 'football',
				'icon-baseball-bat'                 => 'baseball-bat',
				'icon-baseball'                     => 'baseball',
				'icon-tennis'                       => 'tennis',
				'icon-tennis2'                      => 'tennis2',
				'icon-ping-pong'                    => 'ping-pong',
				'icon-hockey'                       => 'hockey',
				'icon-8ball'                        => '8ball',
				'icon-bowling'                      => 'bowling',
				'icon-bowling-pins'                 => 'bowling-pins',
				'icon-golf'                         => 'golf',
				'icon-golf2'                        => 'golf2',
				'icon-archery'                      => 'archery',
				'icon-slingshot'                    => 'slingshot',
				'icon-soccer'                       => 'soccer',
				'icon-basketball'                   => 'basketball',
				'icon-cube'                         => 'cube',
				'icon-3d-rotate'                    => '3d-rotate',
				'icon-puzzle'                       => 'puzzle',
				'icon-glasses'                      => 'glasses',
				'icon-glasses2'                     => 'glasses2',
				'icon-accessibility'                => 'accessibility',
				'icon-wheelchair'                   => 'wheelchair',
				'icon-wall'                         => 'wall',
				'icon-fence'                        => 'fence',
				'icon-wall2'                        => 'wall2',
				'icon-icons'                        => 'icons',
				'icon-resize-handle'                => 'resize-handle',
				'icon-icons2'                       => 'icons2',
				'icon-select'                       => 'select',
				'icon-select2'                      => 'select2',
				'icon-site-map'                     => 'site-map',
				'icon-earth'                        => 'earth',
				'icon-earth-lock'                   => 'earth-lock',
				'icon-network'                      => 'network',
				'icon-network-lock'                 => 'network-lock',
				'icon-planet'                       => 'planet',
				'icon-happy'                        => 'happy',
				'icon-smile'                        => 'smile',
				'icon-grin'                         => 'grin',
				'icon-tongue'                       => 'tongue',
				'icon-sad'                          => 'sad',
				'icon-wink'                         => 'wink',
				'icon-dream'                        => 'dream',
				'icon-shocked'                      => 'shocked',
				'icon-shocked2'                     => 'shocked2',
				'icon-tongue2'                      => 'tongue2',
				'icon-neutral'                      => 'neutral',
				'icon-happy-grin'                   => 'happy-grin',
				'icon-cool'                         => 'cool',
				'icon-mad'                          => 'mad',
				'icon-grin-evil'                    => 'grin-evil',
				'icon-evil'                         => 'evil',
				'icon-wow'                          => 'wow',
				'icon-annoyed'                      => 'annoyed',
				'icon-wondering'                    => 'wondering',
				'icon-confused'                     => 'confused',
				'icon-zipped'                       => 'zipped',
				'icon-grumpy'                       => 'grumpy',
				'icon-mustache'                     => 'mustache',
				'icon-tombstone-hipster'            => 'tombstone-hipster',
				'icon-tombstone'                    => 'tombstone',
				'icon-ghost'                        => 'ghost',
				'icon-ghost-hipster'                => 'ghost-hipster',
				'icon-halloween'                    => 'halloween',
				'icon-christmas'                    => 'christmas',
				'icon-easter-egg'                   => 'easter-egg',
				'icon-mustache2'                    => 'mustache2',
				'icon-mustache-glasses'             => 'mustache-glasses',
				'icon-pipe'                         => 'pipe',
				'icon-alarm'                        => 'alarm',
				'icon-alarm-add'                    => 'alarm-add',
				'icon-alarm-snooze'                 => 'alarm-snooze',
				'icon-alarm-ringing'                => 'alarm-ringing',
				'icon-bullhorn'                     => 'bullhorn',
				'icon-hearing'                      => 'hearing',
				'icon-volume-high'                  => 'volume-high',
				'icon-volume-medium'                => 'volume-medium',
				'icon-volume-low'                   => 'volume-low',
				'icon-volume'                       => 'volume',
				'icon-mute'                         => 'mute',
				'icon-lan'                          => 'lan',
				'icon-lan2'                         => 'lan2',
				'icon-wifi'                         => 'wifi',
				'icon-wifi-lock'                    => 'wifi-lock',
				'icon-wifi-blocked'                 => 'wifi-blocked',
				'icon-wifi-mid'                     => 'wifi-mid',
				'icon-wifi-low'                     => 'wifi-low',
				'icon-wifi-low2'                    => 'wifi-low2',
				'icon-wifi-alert'                   => 'wifi-alert',
				'icon-wifi-alert-mid'               => 'wifi-alert-mid',
				'icon-wifi-alert-low'               => 'wifi-alert-low',
				'icon-wifi-alert-low2'              => 'wifi-alert-low2',
				'icon-stream'                       => 'stream',
				'icon-stream-check'                 => 'stream-check',
				'icon-stream-error'                 => 'stream-error',
				'icon-stream-alert'                 => 'stream-alert',
				'icon-communication'                => 'communication',
				'icon-communication-crossed'        => 'communication-crossed',
				'icon-broadcast'                    => 'broadcast',
				'icon-antenna'                      => 'antenna',
				'icon-satellite'                    => 'satellite',
				'icon-satellite2'                   => 'satellite2',
				'icon-mic'                          => 'mic',
				'icon-mic-mute'                     => 'mic-mute',
				'icon-mic2'                         => 'mic2',
				'icon-spotlights'                   => 'spotlights',
				'icon-hourglass'                    => 'hourglass',
				'icon-loading'                      => 'loading',
				'icon-loading2'                     => 'loading2',
				'icon-loading3'                     => 'loading3',
				'icon-refresh'                      => 'refresh',
				'icon-refresh2'                     => 'refresh2',
				'icon-undo'                         => 'undo',
				'icon-redo'                         => 'redo',
				'icon-jump2'                        => 'jump2',
				'icon-undo2'                        => 'undo2',
				'icon-redo2'                        => 'redo2',
				'icon-sync'                         => 'sync',
				'icon-repeat-one2'                  => 'repeat-one2',
				'icon-sync-crossed'                 => 'sync-crossed',
				'icon-sync2'                        => 'sync2',
				'icon-repeat-one3'                  => 'repeat-one3',
				'icon-sync-crossed2'                => 'sync-crossed2',
				'icon-return'                       => 'return',
				'icon-return2'                      => 'return2',
				'icon-refund'                       => 'refund',
				'icon-history'                      => 'history',
				'icon-history2'                     => 'history2',
				'icon-self-timer'                   => 'self-timer',
				'icon-clock'                        => 'clock',
				'icon-clock2'                       => 'clock2',
				'icon-clock3'                       => 'clock3',
				'icon-watch'                        => 'watch',
				'icon-alarm2'                       => 'alarm2',
				'icon-alarm-add2'                   => 'alarm-add2',
				'icon-alarm-remove'                 => 'alarm-remove',
				'icon-alarm-check'                  => 'alarm-check',
				'icon-alarm-error'                  => 'alarm-error',
				'icon-timer'                        => 'timer',
				'icon-timer-crossed'                => 'timer-crossed',
				'icon-timer2'                       => 'timer2',
				'icon-timer-crossed2'               => 'timer-crossed2',
				'icon-download'                     => 'download',
				'icon-upload'                       => 'upload',
				'icon-download2'                    => 'download2',
				'icon-upload2'                      => 'upload2',
				'icon-enter-up'                     => 'enter-up',
				'icon-enter-down'                   => 'enter-down',
				'icon-enter-left'                   => 'enter-left',
				'icon-enter-right'                  => 'enter-right',
				'icon-exit-up'                      => 'exit-up',
				'icon-exit-down'                    => 'exit-down',
				'icon-exit-left'                    => 'exit-left',
				'icon-exit-right'                   => 'exit-right',
				'icon-enter-up2'                    => 'enter-up2',
				'icon-enter-down2'                  => 'enter-down2',
				'icon-enter-vertical'               => 'enter-vertical',
				'icon-enter-left2'                  => 'enter-left2',
				'icon-enter-right2'                 => 'enter-right2',
				'icon-enter-horizontal'             => 'enter-horizontal',
				'icon-exit-up2'                     => 'exit-up2',
				'icon-exit-down2'                   => 'exit-down2',
				'icon-exit-left2'                   => 'exit-left2',
				'icon-exit-right2'                  => 'exit-right2',
				'icon-cli'                          => 'cli',
				'icon-bug'                          => 'bug',
				'icon-code'                         => 'code',
				'icon-file-code'                    => 'file-code',
				'icon-file-image'                   => 'file-image',
				'icon-file-zip'                     => 'file-zip',
				'icon-file-audio'                   => 'file-audio',
				'icon-file-video'                   => 'file-video',
				'icon-file-preview'                 => 'file-preview',
				'icon-file-charts'                  => 'file-charts',
				'icon-file-stats'                   => 'file-stats',
				'icon-file-spreadsheet'             => 'file-spreadsheet',
				'icon-link'                         => 'link',
				'icon-unlink'                       => 'unlink',
				'icon-link2'                        => 'link2',
				'icon-unlink2'                      => 'unlink2',
				'icon-thumbs-up'                    => 'thumbs-up',
				'icon-thumbs-down'                  => 'thumbs-down',
				'icon-thumbs-up2'                   => 'thumbs-up2',
				'icon-thumbs-down2'                 => 'thumbs-down2',
				'icon-thumbs-up3'                   => 'thumbs-up3',
				'icon-thumbs-down3'                 => 'thumbs-down3',
				'icon-share'                        => 'share',
				'icon-share2'                       => 'share2',
				'icon-share3'                       => 'share3',
				'icon-magnifier'                    => 'magnifier',
				'icon-file-search'                  => 'file-search',
				'icon-find-replace'                 => 'find-replace',
				'icon-zoom-in'                      => 'zoom-in',
				'icon-zoom-out'                     => 'zoom-out',
				'icon-loupe'                        => 'loupe',
				'icon-loupe-zoom-in'                => 'loupe-zoom-in',
				'icon-loupe-zoom-out'               => 'loupe-zoom-out',
				'icon-cross'                        => 'cross',
				'icon-menu'                         => 'menu',
				'icon-list'                         => 'list',
				'icon-list2'                        => 'list2',
				'icon-list3'                        => 'list3',
				'icon-menu2'                        => 'menu2',
				'icon-list4'                        => 'list4',
				'icon-menu3'                        => 'menu3',
				'icon-exclamation'                  => 'exclamation',
				'icon-question'                     => 'question',
				'icon-check'                        => 'check',
				'icon-cross2'                       => 'cross2',
				'icon-plus'                         => 'plus',
				'icon-minus'                        => 'minus',
				'icon-percent'                      => 'percent',
				'icon-chevron-up'                   => 'chevron-up',
				'icon-chevron-down'                 => 'chevron-down',
				'icon-chevron-left'                 => 'chevron-left',
				'icon-chevron-right'                => 'chevron-right',
				'icon-chevrons-expand-vertical'     => 'chevrons-expand-vertical',
				'icon-chevrons-expand-horizontal'   => 'chevrons-expand-horizontal',
				'icon-chevrons-contract-vertical'   => 'chevrons-contract-vertical',
				'icon-chevrons-contract-horizontal' => 'chevrons-contract-horizontal',
				'icon-arrow-up'                     => 'arrow-up',
				'icon-arrow-down'                   => 'arrow-down',
				'icon-arrow-left'                   => 'arrow-left',
				'icon-arrow-right'                  => 'arrow-right',
				'icon-arrow-up-right'               => 'arrow-up-right',
				'icon-arrows-merge'                 => 'arrows-merge',
				'icon-arrows-split'                 => 'arrows-split',
				'icon-arrow-divert'                 => 'arrow-divert',
				'icon-arrow-return'                 => 'arrow-return',
				'icon-expand'                       => 'expand',
				'icon-contract'                     => 'contract',
				'icon-expand2'                      => 'expand2',
				'icon-contract2'                    => 'contract2',
				'icon-move'                         => 'move',
				'icon-tab'                          => 'tab',
				'icon-arrow-wave'                   => 'arrow-wave',
				'icon-expand3'                      => 'expand3',
				'icon-expand4'                      => 'expand4',
				'icon-contract3'                    => 'contract3',
				'icon-notification'                 => 'notification',
				'icon-warning'                      => 'warning',
				'icon-notification-circle'          => 'notification-circle',
				'icon-question-circle'              => 'question-circle',
				'icon-menu-circle'                  => 'menu-circle',
				'icon-checkmark-circle'             => 'checkmark-circle',
				'icon-cross-circle'                 => 'cross-circle',
				'icon-plus-circle'                  => 'plus-circle',
				'icon-circle-minus'                 => 'circle-minus',
				'icon-percent-circle'               => 'percent-circle',
				'icon-arrow-up-circle'              => 'arrow-up-circle',
				'icon-arrow-down-circle'            => 'arrow-down-circle',
				'icon-arrow-left-circle'            => 'arrow-left-circle',
				'icon-arrow-right-circle'           => 'arrow-right-circle',
				'icon-chevron-up-circle'            => 'chevron-up-circle',
				'icon-chevron-down-circle'          => 'chevron-down-circle',
				'icon-chevron-left-circle'          => 'chevron-left-circle',
				'icon-chevron-right-circle'         => 'chevron-right-circle',
				'icon-backward-circle'              => 'backward-circle',
				'icon-first-circle'                 => 'first-circle',
				'icon-previous-circle'              => 'previous-circle',
				'icon-stop-circle'                  => 'stop-circle',
				'icon-play-circle'                  => 'play-circle',
				'icon-pause-circle'                 => 'pause-circle',
				'icon-next-circle'                  => 'next-circle',
				'icon-last-circle'                  => 'last-circle',
				'icon-forward-circle'               => 'forward-circle',
				'icon-eject-circle'                 => 'eject-circle',
				'icon-crop'                         => 'crop',
				'icon-frame-expand'                 => 'frame-expand',
				'icon-frame-contract'               => 'frame-contract',
				'icon-focus'                        => 'focus',
				'icon-transform'                    => 'transform',
				'icon-grid'                         => 'grid',
				'icon-grid-crossed'                 => 'grid-crossed',
				'icon-layers'                       => 'layers',
				'icon-layers-crossed'               => 'layers-crossed',
				'icon-toggle'                       => 'toggle',
				'icon-rulers'                       => 'rulers',
				'icon-ruler'                        => 'ruler',
				'icon-funnel'                       => 'funnel',
				'icon-flip-horizontal'              => 'flip-horizontal',
				'icon-flip-vertical'                => 'flip-vertical',
				'icon-flip-horizontal2'             => 'flip-horizontal2',
				'icon-flip-vertical2'               => 'flip-vertical2',
				'icon-angle'                        => 'angle',
				'icon-angle2'                       => 'angle2',
				'icon-subtract'                     => 'subtract',
				'icon-combine'                      => 'combine',
				'icon-intersect'                    => 'intersect',
				'icon-exclude'                      => 'exclude',
				'icon-align-center-vertical'        => 'align-center-vertical',
				'icon-align-right'                  => 'align-right',
				'icon-align-bottom'                 => 'align-bottom',
				'icon-align-left'                   => 'align-left',
				'icon-align-center-horizontal'      => 'align-center-horizontal',
				'icon-align-top'                    => 'align-top',
				'icon-square'                       => 'square',
				'icon-plus-square'                  => 'plus-square',
				'icon-minus-square'                 => 'minus-square',
				'icon-percent-square'               => 'percent-square',
				'icon-arrow-up-square'              => 'arrow-up-square',
				'icon-arrow-down-square'            => 'arrow-down-square',
				'icon-arrow-left-square'            => 'arrow-left-square',
				'icon-arrow-right-square'           => 'arrow-right-square',
				'icon-chevron-up-square'            => 'chevron-up-square',
				'icon-chevron-down-square'          => 'chevron-down-square',
				'icon-chevron-left-square'          => 'chevron-left-square',
				'icon-chevron-right-square'         => 'chevron-right-square',
				'icon-check-square'                 => 'check-square',
				'icon-cross-square'                 => 'cross-square',
				'icon-menu-square'                  => 'menu-square',
				'icon-prohibited'                   => 'prohibited',
				'icon-circle'                       => 'circle',
				'icon-radio-button'                 => 'radio-button',
				'icon-ligature'                     => 'ligature',
				'icon-text-format'                  => 'text-format',
				'icon-text-format-remove'           => 'text-format-remove',
				'icon-text-size'                    => 'text-size',
				'icon-bold'                         => 'bold',
				'icon-italic'                       => 'italic',
				'icon-underline'                    => 'underline',
				'icon-strikethrough'                => 'strikethrough',
				'icon-highlight'                    => 'highlight',
				'icon-text-align-left'              => 'text-align-left',
				'icon-text-align-center'            => 'text-align-center',
				'icon-text-align-right'             => 'text-align-right',
				'icon-text-align-justify'           => 'text-align-justify',
				'icon-line-spacing'                 => 'line-spacing',
				'icon-indent-increase'              => 'indent-increase',
				'icon-indent-decrease'              => 'indent-decrease',
				'icon-text-wrap'                    => 'text-wrap',
				'icon-pilcrow'                      => 'pilcrow',
				'icon-direction-ltr'                => 'direction-ltr',
				'icon-direction-rtl'                => 'direction-rtl',
				'icon-page-break'                   => 'page-break',
				'icon-page-break2'                  => 'page-break2',
				'icon-sort-alpha-asc'               => 'sort-alpha-asc',
				'icon-sort-alpha-desc'              => 'sort-alpha-desc',
				'icon-sort-numeric-asc'             => 'sort-numeric-asc',
				'icon-sort-numeric-desc'            => 'sort-numeric-desc',
				'icon-sort-amount-asc'              => 'sort-amount-asc',
				'icon-sort-amount-desc'             => 'sort-amount-desc',
				'icon-sort-time-asc'                => 'sort-time-asc',
				'icon-sort-time-desc'               => 'sort-time-desc',
				'icon-sigma'                        => 'sigma',
				'icon-pencil-line'                  => 'pencil-line',
				'icon-hand'                         => 'hand',
				'icon-pointer-up'                   => 'pointer-up',
				'icon-pointer-right'                => 'pointer-right',
				'icon-pointer-down'                 => 'pointer-down',
				'icon-pointer-left'                 => 'pointer-left',
				'icon-finger-tap'                   => 'finger-tap',
				'icon-fingers-tap'                  => 'fingers-tap',
				'icon-reminder'                     => 'reminder',
				'icon-fingers-crossed'              => 'fingers-crossed',
				'icon-fingers-victory'              => 'fingers-victory',
				'icon-gesture-zoom'                 => 'gesture-zoom',
				'icon-gesture-pinch'                => 'gesture-pinch',
				'icon-fingers-scroll-horizontal'    => 'fingers-scroll-horizontal',
				'icon-fingers-scroll-vertical'      => 'fingers-scroll-vertical',
				'icon-fingers-scroll-left'          => 'fingers-scroll-left',
				'icon-fingers-scroll-right'         => 'fingers-scroll-right',
				'icon-hand2'                        => 'hand2',
				'icon-pointer-up2'                  => 'pointer-up2',
				'icon-pointer-right2'               => 'pointer-right2',
				'icon-pointer-down2'                => 'pointer-down2',
				'icon-pointer-left2'                => 'pointer-left2',
				'icon-finger-tap2'                  => 'finger-tap2',
				'icon-fingers-tap2'                 => 'fingers-tap2',
				'icon-reminder2'                    => 'reminder2',
				'icon-gesture-zoom2'                => 'gesture-zoom2',
				'icon-gesture-pinch2'               => 'gesture-pinch2',
				'icon-fingers-scroll-horizontal2'   => 'fingers-scroll-horizontal2',
				'icon-fingers-scroll-vertical2'     => 'fingers-scroll-vertical2',
				'icon-fingers-scroll-left2'         => 'fingers-scroll-left2',
				'icon-fingers-scroll-right2'        => 'fingers-scroll-right2',
				'icon-fingers-scroll-vertical3'     => 'fingers-scroll-vertical3',
				'icon-border-style'                 => 'border-style',
				'icon-border-all'                   => 'border-all',
				'icon-border-outer'                 => 'border-outer',
				'icon-border-inner'                 => 'border-inner',
				'icon-border-top'                   => 'border-top',
				'icon-border-horizontal'            => 'border-horizontal',
				'icon-border-bottom'                => 'border-bottom',
				'icon-border-left'                  => 'border-left',
				'icon-border-vertical'              => 'border-vertical',
				'icon-border-right'                 => 'border-right',
				'icon-border-none'                  => 'border-none',
				'icon-ellipsis'                     => 'ellipsis',
				'icon-uni21'                        => 'uni21',
				'icon-uni22'                        => 'uni22',
				'icon-uni23'                        => 'uni23',
				'icon-uni24'                        => 'uni24',
				'icon-uni25'                        => 'uni25',
				'icon-uni26'                        => 'uni26',
				'icon-uni27'                        => 'uni27',
				'icon-uni28'                        => 'uni28',
				'icon-uni29'                        => 'uni29',
				'icon-uni2a'                        => 'uni2a',
				'icon-uni2b'                        => 'uni2b',
				'icon-uni2c'                        => 'uni2c',
				'icon-uni2d'                        => 'uni2d',
				'icon-uni2e'                        => 'uni2e',
				'icon-uni2f'                        => 'uni2f',
				'icon-uni30'                        => 'uni30',
				'icon-uni31'                        => 'uni31',
				'icon-uni32'                        => 'uni32',
				'icon-uni33'                        => 'uni33',
				'icon-uni34'                        => 'uni34',
				'icon-uni35'                        => 'uni35',
				'icon-uni36'                        => 'uni36',
				'icon-uni37'                        => 'uni37',
				'icon-uni38'                        => 'uni38',
				'icon-uni39'                        => 'uni39',
				'icon-uni3a'                        => 'uni3a',
				'icon-uni3b'                        => 'uni3b',
				'icon-uni3c'                        => 'uni3c',
				'icon-uni3d'                        => 'uni3d',
				'icon-uni3e'                        => 'uni3e',
				'icon-uni3f'                        => 'uni3f',
				'icon-uni40'                        => 'uni40',
				'icon-uni41'                        => 'uni41',
				'icon-uni42'                        => 'uni42',
				'icon-uni43'                        => 'uni43',
				'icon-uni44'                        => 'uni44',
				'icon-uni45'                        => 'uni45',
				'icon-uni46'                        => 'uni46',
				'icon-uni47'                        => 'uni47',
				'icon-uni48'                        => 'uni48',
				'icon-uni49'                        => 'uni49',
				'icon-uni4a'                        => 'uni4a',
				'icon-uni4b'                        => 'uni4b',
				'icon-uni4c'                        => 'uni4c',
				'icon-uni4d'                        => 'uni4d',
				'icon-uni4e'                        => 'uni4e',
				'icon-uni4f'                        => 'uni4f',
				'icon-uni50'                        => 'uni50',
				'icon-uni51'                        => 'uni51',
				'icon-uni52'                        => 'uni52',
				'icon-uni53'                        => 'uni53',
				'icon-uni54'                        => 'uni54',
				'icon-uni55'                        => 'uni55',
				'icon-uni56'                        => 'uni56',
				'icon-uni57'                        => 'uni57',
				'icon-uni58'                        => 'uni58',
				'icon-uni59'                        => 'uni59',
				'icon-uni5a'                        => 'uni5a',
				'icon-uni5b'                        => 'uni5b',
				'icon-uni5c'                        => 'uni5c',
				'icon-uni5d'                        => 'uni5d',
				'icon-uni5e'                        => 'uni5e',
				'icon-uni5f'                        => 'uni5f',
				'icon-uni60'                        => 'uni60',
				'icon-uni61'                        => 'uni61',
				'icon-uni62'                        => 'uni62',
				'icon-uni63'                        => 'uni63',
				'icon-uni64'                        => 'uni64',
				'icon-uni65'                        => 'uni65',
				'icon-uni66'                        => 'uni66',
				'icon-uni67'                        => 'uni67',
				'icon-uni68'                        => 'uni68',
				'icon-uni69'                        => 'uni69',
				'icon-uni6a'                        => 'uni6a',
				'icon-uni6b'                        => 'uni6b',
				'icon-uni6c'                        => 'uni6c',
				'icon-uni6d'                        => 'uni6d',
				'icon-uni6e'                        => 'uni6e',
				'icon-uni6f'                        => 'uni6f',
				'icon-uni70'                        => 'uni70',
				'icon-uni71'                        => 'uni71',
				'icon-uni72'                        => 'uni72',
				'icon-uni73'                        => 'uni73',
				'icon-uni74'                        => 'uni74',
				'icon-uni75'                        => 'uni75',
				'icon-uni76'                        => 'uni76',
				'icon-uni77'                        => 'uni77',
				'icon-uni78'                        => 'uni78',
				'icon-uni79'                        => 'uni79',
				'icon-uni7a'                        => 'uni7a',
				'icon-uni7b'                        => 'uni7b',
				'icon-uni7c'                        => 'uni7c',
				'icon-uni7d'                        => 'uni7d',
				'icon-uni7e'                        => 'uni7e',
				'icon-copyright'                    => 'copyright',
			),
			$icons
		);
		// Then we set a new list of icons as the options of the icon control
		$controls_registry->get_control( 'icon' )->set_settings( 'options', $new_icons );
	}

	public function elementor_custom_icons( $additional_tabs ) {
		$additional_tabs['linearicons'] = [
			'name'          => 'linearicons',
			'label'         => esc_html__( 'Linearicons', 'martfury-addons' ),
			'url'           => self::get_linearicons_asset_url( 'linearicons' ),
			'enqueue'       => [ self::get_linearicons_asset_url( 'linearicons' ) ],
			'prefix'        => 'icon-',
			'displayPrefix' => 'icon',
			'labelIcon'     => 'icon-pencil4',
			'ver'           => '1.0.0',
			'fetchJson'     => self::get_linearicons_asset_url( 'linearicons', 'js', false ),
			'native'        => true,
		];

		return $additional_tabs;
	}

	public static function get_linearicons_asset_url( $filename, $ext_type = 'css', $add_suffix = true ) {

		$url = MARTFURY_ADDONS_URL . 'assets/' . $ext_type . '/' . $filename;

		if ( $add_suffix ) {
			$url .= '.min';
		}

		return $url . '.' . $ext_type;
	}

	/**
	 * Load products
	 */
	public static function elementor_load_products() {

		$atts = array(
			'columns'      => isset( $_POST['columns'] ) ? intval( $_POST['columns'] ) : '',
			'products'     => isset( $_POST['products'] ) ? $_POST['products'] : '',
			'order'        => isset( $_POST['order'] ) ? $_POST['order'] : '',
			'orderby'      => isset( $_POST['orderby'] ) ? $_POST['orderby'] : '',
			'per_page'     => isset( $_POST['per_page'] ) ? intval( $_POST['per_page'] ) : '',
			'product_cats' => isset( $_POST['product_cats'] ) ? $_POST['product_cats'] : '',
		);

		/* if( ! empty( $_POST['ids'] ) ) {
			$atts['ids'] = $_POST['ids'];
		} */

		$products = self::get_products( $atts );

		wp_send_json_success( $products );
	}

	/**
	 * Retrieve the list of taxonomy
	 *
	 * @return array Widget categories.
	 */
	public static function get_taxonomy( $taxonomy = 'product_cat' ) {

		$output = array();

		$categories = get_categories(
			array(
				'taxonomy' => $taxonomy
			)
		);

		foreach ( $categories as $category ) {
			$output[ $category->slug ] = $category->name;
		}

		return $output;
	}

	/**
	 * Retrieve the list of products
	 *
	 * @param $atts
	 *
	 * @return string
	 */
	public static function get_products( $atts ) {
		$params   = '';
		$order    = $atts['order'];
		$order_by = $atts['orderby'];
		if ( $atts['products'] == 'featured' ) {
			$params = 'visibility="featured"';
		} elseif ( $atts['products'] == 'best_selling' ) {
			$params = 'best_selling="true"';
		} elseif ( $atts['products'] == 'sale' ) {
			$params = 'on_sale="true"';
		} elseif ( $atts['products'] == 'recent' ) {
			$order    = $order ? $order : 'desc';
			$order_by = $order_by ? $order_by : 'date';
		} elseif ( $atts['products'] == 'top_rated' ) {
			$params = 'top_rated="true"';
		}

		if ( ! empty( $atts['ids'] ) ) {
			$params   .= ' ids="' . $atts['ids'] . '" ';
			$order_by = 'post__in';
		}

		$params .= ' columns="' . intval( $atts['columns'] ) . '" limit="' . intval( $atts['per_page'] ) . '" order="' . $order . '" orderby ="' . $order_by . '"';
		if ( isset( $atts['product_cats'] ) && ! empty( $atts['product_cats'] ) ) {
			$cats = $atts['product_cats'];
			if ( is_array( $cats ) ) {
				$cats = implode( ',', $cats );
			}

			$params .= ' category="' . $cats . '" ';
		}

		if ( isset( $atts['paginate'] ) && ! empty( $atts['paginate'] ) ) {
			$params .= ' paginate="true"';
		}

		if ( isset( $atts['product_tags'] ) && ! empty( $atts['product_tags'] ) ) {
			$params .= ' tag="' . implode( ',', $atts['product_tags'] ) . '" ';
		}

		if ( isset( $atts['product_brands'] ) && ! empty( $atts['product_brands'] ) ) {
			$params .= ' class="sc_brand,' . implode( ',', $atts['product_brands'] ) . '" ';
		}

		if ( is_admin() ) {
			add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
			add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
			remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash' );
			remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
			remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
			remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
			remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );
			remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail' );

		}

		return do_shortcode( '[products ' . $params . ']' );

	}

	/**
	 * Display numeric pagination
	 *
	 * @param $max_num_pages
	 *
	 * *@return string
	 */
	public static function get_pagination_numeric( $max_num_pages ) {
		$big  = 999999999;
		$args = array(
			'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
			'total'     => $max_num_pages,
			'current'   => max( 1, get_query_var( 'paged' ) ),
			'prev_text' => esc_html__( 'Previous', 'martfury-addons' ),
			'next_text' => esc_html__( 'Next', 'martfury-addons' ),
			'type'      => 'plain',
		);

		return sprintf( '<nav class="navigation paging-navigation numeric-navigation">%s</nav>', paginate_links( $args ) );
	}

	/**
	 * Loop over products
	 *
	 * @param array $products_ids
	 */
	public static function get_loop_deals( $products_ids, $template ) {
		update_meta_cache( 'post', $products_ids );
		update_object_term_cache( $products_ids, 'product' );

		$original_post = $GLOBALS['post'];

		woocommerce_product_loop_start();

		foreach ( $products_ids as $product_id ) {
			$GLOBALS['post'] = get_post( $product_id ); // WPCS: override ok.
			setup_postdata( $GLOBALS['post'] );
			wc_get_template_part( 'content', $template );
		}

		$GLOBALS['post'] = $original_post; // WPCS: override ok.
		woocommerce_product_loop_end();

		wp_reset_postdata();
		woocommerce_reset_loop();
	}

	public static function deal_progress() {
		global $woocommerce_loop, $product;

		if ( ! isset( $woocommerce_loop['name'] ) ) {
			return;
		}

		if ( 'martfury_deals_elementor' != $woocommerce_loop['name'] ) {
			return;
		}

		if ( ! function_exists( 'tawc_is_deal_product' ) ) {
			return;
		}

		if ( ! tawc_is_deal_product( $product ) ) {
			return;
		}

		$limit = get_post_meta( $product->get_id(), '_deal_quantity', true );
		$sold  = intval( get_post_meta( $product->get_id(), '_deal_sales_counts', true ) );
		?>

        <div class="deal-progress">
            <div class="progress-bar">
                <div class="progress-value" style="width: <?php echo esc_attr( intval($sold) / intval($limit) * 100 ); ?>%"></div>
            </div>
            <p class="progress-text"><?php esc_html_e( 'Sold', 'martfury-addons' ) ?>: <?php echo $sold; ?></p>
        </div>

		<?php
	}

	/**
	 * Get the product deals
	 *
	 * @return string.
	 */
	public static function get_product_deals( $settings, $template = 'product-deals' ) {

		$per_page   = intval( $settings['per_page'] );
		$query_args = array(
			'post_type'           => 'product',
			'post_status'         => 'publish',
			'posts_per_page'      => $per_page,
			'ignore_sticky_posts' => true,
			'no_found_rows'       => true,
			'fields'              => 'ids',
			'post__in'            => (array) wc_get_product_ids_on_sale(),
			'meta_query'          => WC()->query->get_meta_query(),
			'tax_query'           => WC()->query->get_tax_query(),
			'orderby'             => $settings['orderby'],
			'order'               => $settings['order'],
		);

		if ( $settings['pagination'] == 'yes' ) {
			$paged                       = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
			$offset                      = ( $paged - 1 ) * $per_page;
			$query_args['offset']        = $offset;
			$query_args['no_found_rows'] = false;
		}

		$product_variations = ! empty( $settings['product_variations'] ) ? $settings['product_variations'] : '';

		if( $product_variations == 'yes' && in_array( $settings['product_type'], array( 'day', 'week', 'month', 'deals', 'sale'  ) ) ) {
			$query_args['post_type'] = array( 'product', 'product_variation' );
			$product_variables = self::get_product_variable_ids( $query_args, $settings['product_type'] );

			if( ! empty ( $product_variables ) ) {
				foreach( $product_variables as $key => $value ) {
					$key = array_search( $value, $query_args['post__in'] );
					if( $key ) {
						unset($query_args['post__in'][$key]);
					}
				}
			}
		}

		if ( in_array( $settings['product_type'], array( 'day', 'week', 'month' ) ) ) {
			$date = '+1 day';
			if ( $settings['product_type'] == 'week' ) {
				$date = '+7 day';
			} else if ( $settings['product_type'] == 'month' ) {
				$date = '+1 month';
			}
			$query_args['meta_query'] = apply_filters(
				'martfury_product_deals_meta_query', array_merge(
					WC()->query->get_meta_query(), array(
						array(
							'key'     => '_deal_quantity',
							'value'   => 0,
							'compare' => '>',
						),
						array(
							'key'     => '_sale_price_dates_to',
							'value'   => 0,
							'compare' => '>',
						),
						array(
							'key'     => '_sale_price_dates_to',
							'value'   => strtotime( $date ),
							'compare' => '<=',
						),
					)
				)
			);
		} elseif ( $settings['product_type'] == 'deals' ) {
			$query_args['meta_query'] = apply_filters(
				'martfury_product_deals_meta_query', array_merge(
					WC()->query->get_meta_query(), array(
						array(
							'key'     => '_deal_quantity',
							'value'   => 0,
							'compare' => '>',
						)
					)
				)
			);

			$product_variables = self::get_product_variable_ids( $query_args, $settings['product_type'] );

			if( ! empty ( $product_variables ) ) {
				foreach( $product_variables as $key => $value ) {
					$key = array_search( $value, $query_args['post__in'] );
					if( $key ) {
						unset($query_args['post__in'][$key]);
					}
				}
			}
		}


		if ( $settings['product_cats'] ) {
			$query_args['tax_query'] = array_merge(
				WC()->query->get_tax_query(), array(
					array(
						'taxonomy' => 'product_cat',
						'field'    => 'slug',
						'terms'    => $settings['product_cats'],
					),
				)
			);
		}

		if (  isset($settings['product_tags']) && $settings['product_tags'] ) {
			$query_args['tax_query'] = array_merge(
				WC()->query->get_tax_query(), array(
					array(
						'taxonomy' => 'product_tag',
						'field'    => 'slug',
						'terms'    => $settings['product_tags'],
					),
				)
			);
		}

		$deals = new \WP_Query( $query_args );

		if ( ! $deals->have_posts() ) {
			return '';
		}

		global $woocommerce_loop;

		if ( $template == 'product-deals' ) {
			$woocommerce_loop['columns'] = intval( $settings['columns'] );
			$woocommerce_loop['name']    = 'martfury_deals_elementor';
		} else {
			$woocommerce_loop['columns'] = 1;
		}

		ob_start();

		self::get_loop_deals( $deals->posts, $template );

		if ( $settings['pagination'] == 'yes' ) {
			$total_pages = $deals->max_num_pages;
			$align_class = 'text-' . $settings['pagination_text_align'];
			self::pagination_numeric( $total_pages, $align_class );
		}

		return ob_get_clean();
	}

	/**
	 * Get pagination numeric
	 *
	 * @return string.
	 */

	public static function pagination_numeric( $max_num_pages, $align_class ) {
		?>
        <nav class="navigation paging-navigation numeric-navigation <?php echo esc_attr( $align_class ); ?>">
			<?php
			$big  = 999999999;
			$args = array(
				'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
				'total'     => $max_num_pages,
				'current'   => max( 1, get_query_var( 'paged' ) ),
				'prev_text' => esc_html__( 'Previous', 'martfury-addons' ),
				'next_text' => esc_html__( 'Next', 'martfury-addons' ),
				'type'      => 'plain',
			);

			echo paginate_links( $args );
			?>
        </nav>
		<?php
	}

	/**
	 * Run the query and return an array of data, including queried ids.
	 *
	 * @since 1.0.0
	 *
	 * @return array with the following props; ids
	 */
	public static function get_product_variable_ids( $query_args, $type ) {
		$product_variables = [];

		if( in_array( $type, array( 'day', 'week', 'month' ) ) || $type == 'deals' || $type == 'sale' ) {
			$query = new \WP_Query( $query_args );
			$ids = wp_parse_id_list( $query->posts );

			if( ! empty( $ids ) ) {
				foreach( $ids as $key => $id ) {
					$_product = wc_get_product( $id );
					if( $_product->is_type( 'variable') ) {
						$product_variables[] = $id;
					}
				}
			}
		}

		wp_reset_query();

		return $product_variables;
	}
}

Elementor::instance();