Current File : /home/kelaby89/abl.academy/wp-content/themes/eduma/thim-elementor-kit/icon-box/icon-box.php
<?php

namespace Elementor;

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

class Thim_Ekit_Widget_Icon_Box extends Widget_Base {

	public function get_name() {
		return 'thim-icon-box';
	}

	public function get_title() {
		return esc_html__( 'Icon Box', 'eduma' );
	}

	public function get_icon() {
		return 'eduma-eicon thim-widget-icon thim-widget-icon-icon-box';
	}

	public function get_categories() {
		return [ 'eduma_ekit' ];
	}

//	protected function get_html_wrapper_class() {
//		return 'thim-widget-icon-box';
//	}

	protected function register_controls() {
		$this->register_style_heading();
		$this->register_style_description();
		$this->register_style_icons();
		$this->register_style_link();


		$this->start_controls_section(
			'layout_group',
			[
				'label' => esc_html__( 'Layout Options', 'eduma' ),
			]
		);

		$this->add_control(
			'pos',
			[
				'label'   => esc_html__( 'Box Style:', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					"left"  => esc_html__( "Icon at Left", 'eduma' ),
					"right" => esc_html__( "Icon at Right", 'eduma' ),
					"top"   => esc_html__( "Icon at Top", 'eduma' )
				],
				'default' => 'top'
			]
		);

		$this->add_responsive_control(
			'text_align_sc',
			[
				'label'        => esc_html__( 'Text Align Shortcode:', 'eduma' ),
				'type'         => Controls_Manager::SELECT,
				'options'      => [
					"text-left"   => esc_html__( "Text Left", 'eduma' ),
					"text-right"  => esc_html__( "Text Right", 'eduma' ),
					"text-center" => esc_html__( "Text Center", 'eduma' )
				],
				'default'      => 'text-left',
				'prefix_class' => 'iconbox-%s',
			]
		);

		$this->add_control(
			'style_box',
			[
				'label'   => esc_html__( 'Type Icon Box', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					""             => esc_html__( "Default", 'eduma' ),
					"overlay"      => esc_html__( "Overlay", 'eduma' ),
					"contact_info" => esc_html__( "Contact Info", 'eduma' ),
					"image_box"    => esc_html__( "Image Box", 'eduma' ),
				],
				'default' => ''
			]
		);

		$this->add_control(
			'dot_line',
			[
				'label'       => esc_html__( 'Dot - Line Top Button', 'eduma' ),
				'description' => esc_html__( 'Show line center of the dot from top page to bottom page', 'eduma' ),
				'type'        => Controls_Manager::SWITCHER,
				'default'     => '',
				'condition'   => [
					'style_box' => [ 'contact_info' ]
				]
			]
		);

		$this->add_control(
			'bg_image_box',
			[
				'label'     => esc_html__( 'Select background image', 'eduma' ),
				'type'      => Controls_Manager::MEDIA,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon' => 'background-image: url("{{URL}}");background-repeat:no-repeat;',
				],
				'condition' => [
					'style_box' => [ 'image_box' ]
				],
			]
		);
		$this->add_control(
			'bg_image_pos',
			[
				'label'       => __( 'Background Position', 'eduma' ),
				'type'        => Controls_Manager::TEXT,
				'description' => esc_html__( 'input position of background image.Ex: top left', 'eduma' ),
				'selectors'   => [
					'{{WRAPPER}} .wrapper-box-icon' => 'background-position:{{VAULE}};',
				],
				'condition'   => [
					'style_box' => [ 'image_box' ]
				]
			]
		);
		$this->add_responsive_control(
			'bg_image_size',
			[
				'label'     => esc_html__( 'Size', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				//				'responsive' => true,
				'default'   => '',
				'options'   => [
					''        => esc_html__( 'Default', 'eduma' ),
					'auto'    => esc_html__( 'Auto', 'eduma' ),
					'cover'   => esc_html__( 'Cover', 'eduma' ),
					'contain' => esc_html__( 'Contain', 'eduma' ),
				],
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon' => 'background-size: {{VALUE}};',
				],
				'condition' => [
					'style_box' => [ 'image_box' ]
				],
			]
		);


		$this->end_controls_section();

		$this->start_controls_section(
			'widget_setting',
			[
				'label' => esc_html__( 'Widget Setting', 'eduma' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_control(
			'widget_background',
			[
				'label'     => esc_html__( 'Widget Background', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => [
					"none"     => esc_html__( "None", 'eduma' ),
					"bg_color" => esc_html__( "Background Color", 'eduma' ),
					"bg_video" => esc_html__( "Video Background", 'eduma' )
				],
				'default'   => 'none',
				'separator' => 'before'
			]
		);

		$this->add_control(
			'bg_box_color',
			[
				'label'     => esc_html__( 'Background Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon' => 'background-color: {{VALUE}};',
				],
				'condition' => [
					'widget_background' => [ 'bg_color' ]
				]
			]
		);

		$this->add_control(
			'self_video',
			[
				'label'       => esc_html__( 'Select video', 'eduma' ),
				'description' => esc_html__( 'Select an uploaded video in mp4 format. Other formats, such as webm and ogv will work in some browsers. You can use an online service such as \'http://video.online-convert.com/convert-to-mp4\' to convert your videos to mp4.', 'eduma' ),
				'type'        => Controls_Manager::MEDIA,
				'media_type'  => 'video',
				'condition'   => [
					'widget_background' => [ 'bg_video' ]
				],
			]
		);

		$this->add_control(
			'self_poster',
			[
				'label'     => esc_html__( 'Select cover image', 'eduma' ),
				'type'      => Controls_Manager::MEDIA,
				'condition' => [
					'widget_background' => [ 'bg_video' ]
				]
			]
		);
		$this->end_controls_section();
	}

	protected function register_style_heading() {
		$this->start_controls_section(
			'title_group',
			[
				'label' => __( 'Title', 'eduma' )
			]
		);

		$this->add_control(
			'title',
			[
				'label'       => __( 'Title', 'eduma' ),
				'type'        => Controls_Manager::TEXT,
				'placeholder' => esc_html__( 'Add your text here', 'eduma' ),
				'label_block' => true
			]
		);

		$this->add_control( 
			'size',
			[
				'label'   => __( 'HTML Tag', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					'h1'   => 'H1',
					'h2'   => 'H2',
					'h3'   => 'H3',
					'h4'   => 'H4',
					'h5'   => 'H5',
					'h6'   => 'H6',
					'div'  => 'div',
					'span' => 'span',
					'p'    => 'p',
				],
				'default' => 'h3',
			]
		);

		$this->add_control(
			'line_after_title',
			[
				'label'   => __( 'Show Separator?', 'eduma' ),
				'type'    => Controls_Manager::SWITCHER,
				'options' => [
					true  => __( 'Yes', 'eduma' ),
					false => __( 'No', 'eduma' ),
				],
				'default' => false
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'heading_settings',
			[
				'label' => esc_html__( 'Title', 'eduma' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_responsive_control(
			'custom_mg_bt',
			[
				'label'      => esc_html__( 'Margin', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .heading__primary' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name'     => 'font_heading',
				'label'    => esc_html__( 'Typography', 'eduma' ),
				'selector' => '{{WRAPPER}} .wrapper-box-icon .sc-heading .heading__primary',
			]
		);
		$this->add_control(
			'color_title',
			[
				'label'     => esc_html__( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'default'   => '',
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .heading__primary, {{WRAPPER}} .wrapper-box-icon .sc-heading .heading__primary a' => 'color: {{VALUE}};'
				],
			]
		);
		$this->add_control(
			'color_title_hover',
			[
				'label'     => esc_html__( 'Link Hover Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'default'   => '',
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .heading__primary a:hover' => 'color: {{VALUE}};'
				],
			]
		);
		$this->end_controls_section();
		$this->start_controls_section(
			'separator_settings',
			[
				'label'     => esc_html__( 'Separator', 'eduma' ),
				'tab'       => Controls_Manager::TAB_STYLE,
				'condition' => [
					'line_after_title' => 'yes'
				],
			]
		);
		$this->add_responsive_control(
			'w_separator',
			[
				'label'     => esc_html__( 'Width (px)', 'eduma' ),
				'type'      => Controls_Manager::SLIDER,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .line-heading' => 'width: {{SIZE}}px;',
				],
			]
		);
		$this->add_responsive_control(
			'h_separator',
			[
				'label'     => esc_html__( 'Height (px)', 'eduma' ),
				'type'      => Controls_Manager::SLIDER,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .line-heading' => 'height: {{SIZE}}px;',
				],
			]
		);
		$this->add_control(
			'bg_line',
			[
				'label'     => esc_html__( 'Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .sc-heading .line-heading' => 'background-color: {{VALUE}};'
				],
			]
		);

		$this->end_controls_section();
	}

	protected function register_style_description() {
		$this->start_controls_section(
			'desc_group',
			[
				'label' => __( 'Description', 'eduma' ),
			]
		);

		$this->add_control(
			'content',
			[
				'label'       => __( 'Add Description', 'eduma' ),
				'type'        => Controls_Manager::TEXTAREA,
				'placeholder' => esc_html__( 'Add your text here', 'eduma' ),
				'label_block' => true
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'desc_settings',
			[
				'label' => esc_html__( 'Description', 'eduma' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_responsive_control(
			'desc_margin',
			[
				'label'      => esc_html__( 'Margin', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .desc-content' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name'     => 'custom_font_size_des',
				'label'    => esc_html__( 'Typography', 'eduma' ),
				'selector' => '{{WRAPPER}} .wrapper-box-icon .desc-content',
			]
		);
		$this->add_control(
			'color_description',
			[
				'label'     => esc_html__( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'default'   => '',
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .desc-content' => 'color: {{VALUE}};'
				],
			]
		);
		$this->end_controls_section();

	}

	protected function register_style_icons() {

		$this->start_controls_section(
			'icon_group',
			[
				'label' => __( 'Icon', 'eduma' ),
			]
		);

		$this->add_control(
			'icon_type',
			[
				'label'   => __( 'Icon Type', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					"font-awesome"  => esc_html__( "Font Awesome Icon", 'eduma' ),
					"font_ionicons" => esc_html__( "Ionicons", 'eduma' ),
					"font-7-stroke" => esc_html__( "Font 7 stroke Icon", 'eduma' ),
					"font-flaticon" => esc_html__( "Font Flat Icon", 'eduma' ),
					"custom"        => esc_html__( "Custom Image", 'eduma' ),
					"text_number"   => esc_html__( "Text Number", 'eduma' )
				],
				'default' => 'font-awesome'
			]
		);

		$this->add_control(
			'icons',
			[
				'label'            => esc_html__( 'Select Icon:', 'eduma' ),
				'type'             => Controls_Manager::ICONS,
				'fa4compatibility' => 'icon',
				'label_block'      => false,
				'skin'             => 'inline',

				'condition' => [
					'icon_type' => [ 'font-awesome' ]
				]
			]
		);


		$this->add_control(
			'flat_icon',
			[
				'label'       => esc_html__( 'Select Icon:', 'eduma' ),
				'type'        => Controls_Manager::ICON,
				'placeholder' => esc_html__( 'Choose...', 'eduma' ),
				'options'     => apply_filters( 'thim-builder-el-flat_icon-icon', array() ),
				'exclude'     => array_keys( Control_Icon::get_icons() ),
				'condition'   => [
					'icon_type' => [ 'font-flaticon' ]
				]
			]
		);
		$this->add_control(
			'font_ionicons',
			[
				'label'       => esc_html__( 'Select Icon:', 'eduma' ),
				'type'        => Controls_Manager::ICON,
				'placeholder' => esc_html__( 'Choose...', 'eduma' ),
				'options'     => apply_filters( 'thim-builder-el-ionicons-icon', array() ),
				'exclude'     => array_keys( Control_Icon::get_icons() ),
				'condition'   => [
					'icon_type' => [ 'font_ionicons' ]
				]
			]
		);

		$this->add_control(
			'stroke_icon',
			[
				'label'       => esc_html__( 'Select Icon:', 'eduma' ),
				'type'        => Controls_Manager::ICON,
				'placeholder' => esc_html__( 'Choose...', 'eduma' ),
				'options'     => apply_filters( 'thim-builder-el-stroke_icon-icon', array() ),
				'exclude'     => array_keys( Control_Icon::get_icons() ),
				'condition'   => [
					'icon_type' => [ 'font-7-stroke' ]
				]
			]
		);

		$this->add_responsive_control(
			'icon_size',
			[
				'label'     => __( 'Icon Font Size (px)', 'eduma' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 14,
				'min'       => 0,
				'step'      => 1,
				'condition' => [
					'icon_type!' => [ 'custom' ]
				],
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'font-size: {{VALUE}}px;',
				],
			]
		);


		$this->add_control(
			'icon_img',
			[
				'label'     => esc_html__( 'Choose Image', 'eduma' ),
				'type'      => Controls_Manager::MEDIA,
				'condition' => [
					'icon_type' => [ 'custom' ]
				]
			]
		);
		$this->add_control(
			'text_number',
			[
				'label'       => __( 'Number', 'eduma' ),
				'type'        => Controls_Manager::TEXT,
				'label_block' => true,
				'condition'   => [
					'icon_type' => [ 'text_number' ]
				]
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'icon_setting',
			[
				'label' => esc_html__( 'Icon', 'eduma' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			]
		);

		$this->add_responsive_control(
			'width_icon_box',
			[
				'label'      => esc_html__( 'Width Box Icon (px)', 'eduma' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => [ 'px' ],
				'range'      => [
					'px' => [
						'min'  => 0,
						'max'  => 1000,
						'step' => 1,
					]
				],
				'default'    => [
					'unit' => 'px',
					'size' => 100,
				],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon'                                      => 'width: {{SIZE}}px;',
					'{{WRAPPER}} .wrapper-box-icon .iconbox-left .content-inner,
					{{WRAPPER}} .wrapper-box-icon .iconbox-right .content-inner' => 'width: calc(100% - {{SIZE}}px - 15px);',
				],
			]
		);

		$this->add_responsive_control(
			'height_icon_box',
			[
				'label'      => esc_html__( 'Height Box Icon (px)', 'eduma' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => [ 'px' ],
				'range'      => [
					'px' => [
						'min'  => 0,
						'max'  => 1000,
						'step' => 1,
					]
				],
				'default'    => [
					'unit' => 'px',
					'size' => 100,
				],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'height: {{SIZE}}px; line-height: {{SIZE}}px;'
				],
			]
		);

		$this->add_responsive_control(
			'icon_margin_btn',
			[
				'label'     => esc_html__( 'Margin Bottom (px)', 'eduma' ),
				'type'      => Controls_Manager::SLIDER,
				'selectors' => [
					'{{WRAPPER}} .thim-widget-icon-box .wrapper-box-icon .boxes-icon' => 'margin-bottom: {{SIZE}}px;',
				],
			]
		);

		$this->add_responsive_control(
			'icon_border_style',
			[
				'label'     => esc_html_x( 'Border Type', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => [
					'none'   => esc_html__( 'None', 'eduma' ),
					'solid'  => esc_html_x( 'Solid', 'Border Control', 'eduma' ),
					'double' => esc_html_x( 'Double', 'Border Control', 'eduma' ),
					'dotted' => esc_html_x( 'Dotted', 'Border Control', 'eduma' ),
					'dashed' => esc_html_x( 'Dashed', 'Border Control', 'eduma' ),
					'groove' => esc_html_x( 'Groove', 'Border Control', 'eduma' ),
				],
				'default'   => 'none',
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'border-style: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'icon_border_dimensions',
			[
				'label'     => esc_html_x( 'Width', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::DIMENSIONS,
				'condition' => [
					'icon_border_style!' => 'none'
				],
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->start_controls_tabs( 'tabs_color_icon_border_style' );
		$this->start_controls_tab(
			'tab_color_color_normal',
			[
				'label' => esc_html__( 'Normal', 'eduma' ),
			]
		);
		$this->add_control(
			'icon_color',
			[
				'label'     => esc_html__( 'Icon Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon'                               => 'color: {{VALUE}};',
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon .icon svg path:not(.nochange)' => 'stroke: {{VALUE}}; fill: {{VALUE}};',
					'{{WRAPPER}} .dot_line_buttom_top .dot-line,
					{{WRAPPER}} .dot_line_buttom_top .dot-line span'      => 'color: {{VALUE}};background-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'icon_border_color',
			[
				'label'     => esc_html__( 'Border Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'icon_bg_color',
			[
				'label'     => esc_html__( 'Background Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'border_icon_radius',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'default'    => [
					'top'    => '',
					'right'  => '',
					'bottom' => '',
					'left'   => '',
				],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();

		$this->start_controls_tab(
			'tabs_color_icon_border_hover',
			[
				'label' => esc_html__( 'Hover', 'eduma' ),
			]
		);
		$this->add_control(
			'icon_hover_color',
			[
				'label'     => esc_html__( 'Icon Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon:hover' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'icon_border_color_hover',
			[
				'label'     => esc_html__( 'Border Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon:hover' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'icon_bg_color_hover',
			[
				'label'     => esc_html__( 'Background Color:', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon:hover' => 'background-color: {{VALUE}};',
				],
			]
		);
		$this->add_responsive_control(
			'border_icon_radius_h',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .boxes-icon:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();
		$this->end_controls_tabs();
		$this->end_controls_section();

	}

	protected function register_style_link() {
		$this->start_controls_section(
			'read_more_group',
			[
				'label' => __( 'Link', 'eduma' ),
			]
		);

		$this->add_control(
			'link',
			[
				'label'         => __( 'URL', 'eduma' ),
				'type'          => Controls_Manager::URL,
				'placeholder'   => __( 'https://your-link.com', 'eduma' ),
				'show_external' => true,
				'default'       => [
					'url'         => '',
					'is_external' => true,
					'nofollow'    => true,
				],
			]
		);

		$this->add_control(
			'read_more',
			[
				'label'   => __( 'Apply to', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					"complete_box" => esc_html__( "Complete Box", 'eduma' ),
					"title"        => esc_html__( "Box Title", 'eduma' ),
					"link_icon"    => esc_html__( "Link To Icon", 'eduma' ),
					"more"         => esc_html__( "Display Read More", 'eduma' ),
				],
				'default' => 'complete_box'
			]
		);
		$this->add_control(
			'link_image_title',
			[
				'label'     => __( 'Enable URL Tile & Icon', 'eduma' ),
				'type'      => Controls_Manager::SWITCHER,
				'options'   => [
					true  => __( 'Yes', 'eduma' ),
					false => __( 'No', 'eduma' ),
				],
				'default'   => false,
				'condition' => [
					'read_more' => [ 'more' ]
				]
			]
		);
		$this->add_control(
			'read_text',
			[
				'label'       => __( 'Read More Text', 'eduma' ),
				'type'        => Controls_Manager::TEXT,
				'placeholder' => esc_html__( 'Add your text here', 'eduma' ),
				'default'     => esc_html__( 'Read More', 'eduma' ),
				'label_block' => true,
				'condition'   => [
					'read_more' => [ 'more' ]
				]
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'link_read_more_style_tabs',
			[
				'label'     => esc_html__( 'Read More', 'eduma' ),
				'tab'       => Controls_Manager::TAB_STYLE,
				'condition' => [
					'read_more' => [ 'more' ]
				]
			]
		);

		$this->add_responsive_control(
			'text_padding',
			[
				'label'      => esc_html__( 'Padding', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_responsive_control(
			'text_margin',
			[
				'label'      => esc_html__( 'Margin', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name'     => 'link_read_more_typography',
				'label'    => esc_html__( 'Typography', 'eduma' ),
				'selector' => '{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read',
			]
		);

		$this->add_responsive_control(
			'link_read_more_style',
			[
				'label'     => esc_html_x( 'Border Type', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => [
					'none'   => esc_html__( 'None', 'eduma' ),
					'solid'  => esc_html_x( 'Solid', 'Border Control', 'eduma' ),
					'double' => esc_html_x( 'Double', 'Border Control', 'eduma' ),
					'dotted' => esc_html_x( 'Dotted', 'Border Control', 'eduma' ),
					'dashed' => esc_html_x( 'Dashed', 'Border Control', 'eduma' ),
					'groove' => esc_html_x( 'Groove', 'Border Control', 'eduma' ),
				],
				'default'   => 'none',
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'border-style: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'border_dimensions',
			[
				'label'     => esc_html_x( 'Width', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::DIMENSIONS,
				'condition' => [
					'link_read_more_style!' => 'none'
				],
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->start_controls_tabs( 'tabs_color_link_read_more_style' );
		$this->start_controls_tab(
			'tab_color_link_normal',
			[
				'label' => esc_html__( 'Normal', 'eduma' ),
			]
		);
		$this->add_control(
			'read_more_text_color',
			[
				'label'     => __( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'border_read_more_text',
			[
				'label'     => __( 'Border Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'bg_read_more_text',
			[
				'label'     => __( 'Background Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'border_radius',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'default'    => [
					'top'    => '',
					'right'  => '',
					'bottom' => '',
					'left'   => '',
				],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab_color_link_hover',
			[
				'label' => esc_html__( 'Hover', 'eduma' ),
			]
		);
		$this->add_control(
			'read_more_text_color_hover',
			[
				'label'     => __( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read:hover' => 'color: {{VALUE}};',
				],
			]
		);
		$this->add_control(
			'border_read_more_text_hover',
			[
				'label'     => __( 'Border Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read:hover' => 'border-color: {{VALUE}};',
				],
			]
		);
		$this->add_control(
			'bg_read_more_text_hover',
			[
				'label'     => __( 'Background Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read:hover' => 'background-color: {{VALUE}};',
				],
			]
		);
		$this->add_responsive_control(
			'border_radius_h',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .wrapper-box-icon .content-inner .smicon-read:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();
		$this->end_controls_tabs();
		$this->end_controls_section();

	}

	public function get_base() {
		return basename( __FILE__, '.php' );
	}


	protected function render_title( $settings ) {
		$html_title = $css_old_custom = '';
		if ( isset( $settings['link'] ) && ! empty( $settings['link']['url'] ) ) {
			$this->add_link_attributes( 'render_link_title', $settings['link'] );
		}
		// add link for title
		$before_link_title = ( $settings['link_image_title'] == true || $settings['read_more'] == 'title' || $settings['read_more'] == 'complete_box' ) && $this->get_render_attribute_string( 'render_link_title' ) ? '<a class="icon-box-link" ' . $this->get_render_attribute_string( 'render_link_title' ) . '>' : '';
		$after_link_title  = $before_link_title ? '</a>' : '';
		$tag = Utils::validate_html_tag($settings['size']);
		if ( isset( $settings['title'] ) && $settings['title'] ) {
			$html_title .= '<div class="sc-heading">';
			$html_title .= '<' . $tag . ' class="heading__primary"' . $this->render_style_old_title() . '>';
			$html_title .= $before_link_title . $settings['title'] . $after_link_title;
			$html_title .= '</' . $tag . '>';
			if ( isset( $settings['line_after_title'] ) && $settings['line_after_title'] ) {
				$html_title .= '<span class="line-heading"></span>';
			}
			$html_title .= '</div>';
		}

		return $html_title;
	}

	protected function render_icon( $settings ) {

		if ( isset( $settings['link'] ) && ! empty( $settings['link']['url'] ) ) {
			$this->add_link_attributes( 'render_link_icon', $settings['link'] );
		}
		// old data $icon_layout
		$icon_layout = ( isset( $settings['box_icon_style'] ) && $settings['box_icon_style'] ) ? ' ' . $settings['box_icon_style'] : '';
		if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-awesome' ) {
			// new icon
			$migrated = isset( $settings['__fa4_migrated']['icons'] );
			// Check if its a new widget without previously selected icon using the old Icon control
			$is_new = empty( $settings['icon'] );
			if ( $is_new || $migrated ) {
				// new icon
				ob_start();
				Icons_Manager::render_icon( $settings['icons'], [ 'aria-hidden' => 'true' ] );
				$html_icon = '<span class="icon">' . ob_get_contents() . '</span>';
				ob_end_clean();
			} else {
				if ( isset( $settings['icon'] ) ) {
					if ( strpos( $settings['icon'], 'fa' ) !== false ) {
						$html_icon = '<span class="icon"><i class="' . $settings['icon'] . '"></i></span>';
					} else {
						$html_icon = '<span class="icon"><i class="fa fa-' . $settings['icon'] . '"></i></span>';
					}
				}
			}
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-7-stroke' ) {
			wp_enqueue_style( 'font-pe-icon-7' );
			$html_icon = isset( $settings['stroke_icon'] ) && $settings['stroke_icon'] != 'none' ? '<span class="icon"><i class="' . $settings['stroke_icon'] . '"></i></span>' : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'icomoon' ) {
			wp_enqueue_style( 'thim-linearicons-font' );
			$html_icon = isset( $settings['font_ionicons'] ) && $settings['font_ionicons'] != 'none' ? '<span class="icon"><i class="' . $settings['font_ionicons'] . '"></i></span>' : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-flaticon' ) {
			wp_enqueue_style( 'flaticon' );
			$html_icon = isset( $settings['flat_icon'] ) && $settings['flat_icon'] != 'none' ? '<span class="icon"><i class="' . $settings['flat_icon'] . '"></i></span>' : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font_ionicons' ) {
			wp_enqueue_style( 'ionicons' );
			$html_icon = isset( $settings['font_ionicons'] ) && $settings['font_ionicons'] != 'none' ? '<span class="icon"><i class="' . $settings['font_ionicons'] . '"></i></span>' : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'text_number' ) {
			$html_icon = isset( $settings['text_number'] ) && $settings['text_number'] ? '<span class="text-number-icon">' . $settings['text_number'] . '</span>' : '';
		} else {
			$html_icon = isset( $settings['icon_img'] ) && $settings['icon_img']['id'] ? '<span class="icon icon-images">' . thim_get_feature_image( $settings['icon_img']['id'] ) . '</span>' : '';
		}
		// add link for icon
		$before_link_icon = ( $settings['link_image_title'] == true || $settings['read_more'] == 'link_icon' || $settings['read_more'] == 'complete_box' ) && $this->get_render_attribute_string( 'render_link_icon' ) ? '<a class="icon-box-link" ' . $this->get_render_attribute_string( 'render_link_icon' ) . '>' : '';
		$after_link_icon  = $before_link_icon ? '</a>' : '';

		return '<div class="boxes-icon' . $icon_layout . '"' . $this->render_style_old_icon( $settings ) . '>' . $before_link_icon . '<span class="inner-icon">' . $html_icon . '</span>' . $after_link_icon . '</div>';
	}

	protected function render_style_old_icon( $settings ) {
		$icon_font_size = $css_style = '';
		$old_settings   = $this->get_data( 'settings' );

		if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-awesome' ) {
			$icon_font_size = isset( $settings['font_awesome_icon_size'] ) ? $settings['font_awesome_icon_size'] : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-7-stroke' ) {
			$icon_font_size = isset( $settings['stroke_icon_size'] ) ? $settings['stroke_icon_size'] : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'icomoon' ) {
			$icon_font_size = isset( $settings['font_ionicons_size'] ) ? $settings['font_ionicons_size'] : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font-flaticon' ) {
			$icon_font_size = isset( $settings['flat_icon_size'] ) ? $settings['flat_icon_size'] : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'font_ionicons' ) {
			$icon_font_size = isset( $settings['font_awesome_icon_size'] ) ? $settings['font_awesome_icon_size'] : '';
		} else if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'text_number' ) {
			$icon_font_size = isset( $settings['text_number_font_size'] ) ? $settings['text_number_font_size'] : '';
		}
		if ( isset( $icon_font_size ) && $icon_font_size && ( ! isset( $old_settings['icon_size'] ) ) ) {
			$css_style = 'font-size:' . $icon_font_size . 'px;';
		}
		if ( isset( $old_settings['width_icon_box']['size'] ) && $old_settings['width_icon_box']['size'] == '0' ) {
			$css_style .= 'width: inherit';
		}

		return $css_style ? ' style="' . $css_style . '"' : '';
	}

	protected function render_style_old_title() {
		// old custom
		$css_old_custom            = '';
		$custom_title_settings_old = $this->get_data( 'settings' );
		if ( isset( $custom_title_settings_old['font_heading'] ) && $custom_title_settings_old['font_heading'] == 'custom' ) {
			if ( ! isset( $custom_title_settings_old['font_heading_typography'] ) ) {
				$css_old_custom = isset( $custom_title_settings_old['custom_font_size_heading'] ) ? 'font-size:' . $custom_title_settings_old['custom_font_size_heading'] . 'px;' : '';
				$css_old_custom .= isset( $custom_title_settings_old['custom_font_weight_heading'] ) ? 'font-weight:' . $custom_title_settings_old['custom_font_weight_heading'] . ';' : '';
			}
			if ( isset( $custom_title_settings_old['custom_mg_bt'] ) && ! is_array( $custom_title_settings_old['custom_mg_bt'] ) ) {
				$css_old_custom .= ( isset( $custom_title_settings_old['custom_mg_bt'] ) && $custom_title_settings_old['custom_mg_bt'] != '0' ) ? 'margin-bottom:' . $custom_title_settings_old['custom_mg_bt'] . 'px;' : '';
				$css_old_custom .= ( isset( $custom_title_settings_old['custom_mg_top'] ) && $custom_title_settings_old['custom_mg_top'] != '0' ) ? 'margin-top:' . $custom_title_settings_old['custom_mg_top'] . 'px;' : '';
			}
			if ( ! isset( $custom_title_settings_old['custom_mg_bt'] ) && isset( $custom_title_settings_old['custom_mg_top'] ) ) {
				$css_old_custom .= ( isset( $custom_title_settings_old['custom_mg_top'] ) && $custom_title_settings_old['custom_mg_top'] != '0' ) ? 'margin-top:' . $custom_title_settings_old['custom_mg_top'] . 'px;' : '';
			}
		}

		// end old custom

		return $css_old_custom ? ' style="' . $css_old_custom . '"' : '';
	}

	protected function render_desc( $settings ) {
		if ( isset( $settings['link'] ) && ! empty( $settings['link']['url'] ) ) {
			$this->add_link_attributes( 'render_link_desc', $settings['link'] );
		}

		$html_content = $close_des = '';
		$before_desc  = ( $settings['read_more'] == 'complete_box' ) && $this->get_render_attribute_string( 'render_link_desc' ) ? '<a class="icon-box-link" ' . $this->get_render_attribute_string( 'render_link_desc' ) . '>' : '';
		$after_desc   = $before_desc ? '</a>' : '';

		if ( isset( $settings['content'] ) && $settings['content'] ) {
			$close_des    = true;
			$html_content .= '<div class="desc-icon-box"><div class="desc-content">' . $before_desc . $settings['content'] . $after_desc . '</div>';
		}
		if ( isset ( $settings['read_text'] ) && $settings['read_text'] && $settings['read_more'] == 'more' && $this->get_render_attribute_string( 'render_link_desc' ) ) {
			$html_content .= '<a class="smicon-read sc-btn" ' . $this->get_render_attribute_string( 'render_link_desc' ) . '>' . $settings['read_text'] . ' <i class="fa fa-chevron-right"></i></a>';
		}

		$html_content .= $close_des ? "</div>" : '';


		return $html_content;
	}
	protected function render() {
		$settings = $this->get_settings_for_display();

		$extent_class = $html_dot = $bg_video = $icon_play = '';

		if ( isset( $settings['icon_img'] ) && $settings['icon_img']['id'] ) {
			$extent_class .= ' has_custom_image';
		}

		if ( isset( $settings['icon_type'] ) && $settings['icon_type'] == 'text_number' ) {
			$extent_class .= ' layout_text_number';
		}

		if ( isset( $settings['text_align_sc'] ) ) {
			$extent_class .= ' ' . $settings['text_align_sc'];
		}

		if ( isset( $settings['style_box'] ) ) {
			$extent_class .= ' ' . $settings['style_box'];
		}

		if ( isset( $settings['widget_background'] ) && $settings['widget_background'] == 'bg_video' && isset( $settings['self_video'] ) && $settings['self_video'] != '' ) {
			$poster       = isset( $settings['self_poster'] ) && $settings['self_poster']['id'] ? ' poster="' . wp_get_attachment_url( $settings['self_poster']['id'] ) . '"' : '';
			$src          = wp_get_attachment_url( $settings['self_video'] );
			$bg_video     = '<video loop muted' . $poster . ' class="full-screen-video"><source src="' . $src . '" type="video/mp4"></video>';
			$extent_class .= ' background-video';
			$icon_play    = '<span class="bg-video-play"></span>';
		}

		if ( isset( $settings['style_box'] ) && $settings['style_box'] == 'contact_info' && isset( $settings['dot_line'] ) && $settings['dot_line'] != '' ) {
			$extent_class .= ' dot_line_buttom_top';
			$html_dot     = '<span class="dot-line"><span></span></span>';
		}

		//start div wrapper-box-icon
		$html = '<div class="thim-widget-icon-box"><div class="wrapper-box-icon' . $extent_class . '">';
		$html .= '<div class="smicon-box iconbox-' . $settings['pos'] . '">';
		// show icon
		$html .= $this->render_icon( $settings );
		// show title
		$html .= '<div class="content-inner">';
		$html .= $html_dot;
		$html .= $this->render_title( $settings );

		// show content
		$html .= $this->render_desc( $settings );
		$html .= $icon_play;
		$html .= '</div>';
		$html .= '</div>';
		$html .= '</div>';
		$html .= $bg_video;
		$html .= '</div>';
		echo ent2ncr( $html );
	}
}
Hello World !