File "class-table.php"

Full Path: /home/ycoalition/public_html/blog/wp-content/themes/woodmart/inc/integrations/elementor/elements/class-table.php
File size: 27.99 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * Table map
 *
 * @package WoodMart
 */

namespace XTS\Elementor;

use Elementor\Group_Control_Typography;
use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Plugin;
use Elementor\Repeater;
use Elementor\Group_Control_Border;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Direct access not allowed.
}

/**
 * Elementor widget that inserts an embeddable content into the page, from any given URL.
 *
 * @since 1.0.0
 */
class Table extends Widget_Base {
	/**
	 * Get widget name.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @return string Widget name.
	 */
	public function get_name() {
		return 'wd_table';
	}

	/**
	 * Get widget title.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @return string Widget title.
	 */
	public function get_title() {
		return esc_html__( 'Table', 'woodmart' );
	}

	/**
	 * Get widget icon.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @return string Widget icon.
	 */
	public function get_icon() {
		return 'wd-icon-table';
	}

	/**
	 * Get widget categories.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @return array Widget categories.
	 */
	public function get_categories() {
		return array( 'wd-elements' );
	}

	/**
	 * Register the widget controls.
	 *
	 * @since  1.0.0
	 * @access protected
	 */
	protected function register_controls() { // phpcs:ignore
		/**
		* Content tab
		* /

		/**
		 * Heading settings
		 */
		$this->start_controls_section(
			'heading_general_section',
			array(
				'label' => esc_html__( 'Heading', 'woodmart' ),
			)
		);

		$heading_repeater = new Repeater();

		$heading_repeater->add_control(
			'heading_content_type',
			array(
				'label'   => esc_html__( 'Action', 'woodmart' ),
				'type'    => Controls_Manager::SELECT,
				'default' => 'cell',
				'options' => array(
					'row'  => esc_html__( 'Start new row', 'woodmart' ),
					'cell' => esc_html__( 'Add new cell', 'woodmart' ),
				),
			)
		);

		$heading_repeater->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'           => 'heading_item_border',
				'label'          => esc_html__( 'Border', 'woodmart' ),
				'fields_options' => array(
					'border' => array(
						'options' => array(
							''       => esc_html__( 'Inherit', 'woodmart' ),
							'none'   => esc_html__( 'None', 'elementor' ),
							'solid'  => _x( 'Solid', 'Border Control', 'elementor' ),
							'double' => _x( 'Double', 'Border Control', 'elementor' ),
							'dotted' => _x( 'Dotted', 'Border Control', 'elementor' ),
							'dashed' => _x( 'Dashed', 'Border Control', 'elementor' ),
							'groove' => _x( 'Groove', 'Border Control', 'elementor' ),
						),
						'default' => '',
					),
					'width'  => array(
						'default'   => array(
							'top'      => '1',
							'right'    => '1',
							'bottom'   => '1',
							'left'     => '1',
							'isLinked' => true,
						),
						'condition' => array(
							'border!' => array( '', 'none' ),
						),
					),
					'color'  => array(
						'default'   => '#bbb',
						'condition' => array(
							'border!' => array( '', 'none' ),
						),
					),
				),
				'selector'       => '{{WRAPPER}} {{CURRENT_ITEM}} th',
				'condition'      => array(
					'heading_content_type' => 'row',
				),
			)
		);

		$heading_repeater->start_controls_tabs( 'heading_items_tabs' );

		$heading_repeater->start_controls_tab(
			'tab_heading_cell_content',
			array(
				'label'     => esc_html__( 'Content', 'woodmart' ),
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->add_control(
			'heading_cell_text',
			array(
				'label'     => esc_html__( 'Text', 'woodmart' ),
				'type'      => Controls_Manager::WYSIWYG,
				'default'   => 'Content',
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->end_controls_tab();

		$heading_repeater->start_controls_tab(
			'tab_heading_cell_settings',
			array(
				'label'     => esc_html__( 'Settings', 'woodmart' ),
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->add_control(
			'heading_cell_span',
			array(
				'label'     => esc_html__( 'Column Span', 'woodmart' ),
				'title'     => esc_html__( 'How many columns should this column span across.', 'woodmart' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 1,
				'min'       => 1,
				'max'       => 20,
				'step'      => 1,
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->add_control(
			'heading_cell_row_span',
			array(
				'label'     => esc_html__( 'Row Span', 'woodmart' ),
				'title'     => esc_html__( 'How many rows should this column span across.', 'woodmart' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 1,
				'min'       => 1,
				'max'       => 20,
				'step'      => 1,
				'separator' => 'below',
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->add_control(
			'heading_cell_color',
			array(
				'label'     => esc_html__( 'Color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} {{CURRENT_ITEM}}' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->add_control(
			'heading_cell_background_color',
			array(
				'label'     => esc_html__( 'Background Color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} {{CURRENT_ITEM}}' => 'background-color: {{VALUE}};',
				),
				'condition' => array(
					'heading_content_type' => 'cell',
				),
			)
		);

		$heading_repeater->end_controls_tab();

		$heading_repeater->end_controls_tabs();

		$this->add_control(
			'heading_items',
			array(
				'type'          => Controls_Manager::REPEATER,
				'title_field'   => '{{ heading_content_type }}: {{{ heading_cell_text }}}',
				'fields'        => $heading_repeater->get_controls(),
				'prevent_empty' => false,
				'default'       => array(
					array(
						'heading_content_type' => 'row',
					),
					array(
						'heading_cell_text'    => 'Heading #1',
						'heading_content_type' => 'cell',
					),
					array(
						'heading_cell_text'    => 'Heading #2',
						'heading_content_type' => 'cell',
					),
					array(
						'heading_cell_text'    => 'Heading #3',
						'heading_content_type' => 'cell',
					),
					array(
						'heading_cell_text'    => 'Heading #4',
						'heading_content_type' => 'cell',
					),
				),
			)
		);

		$this->end_controls_section();

		/**
		 * Content settings
		 */
		$this->start_controls_section(
			'general_content_section',
			array(
				'label' => esc_html__( 'Body', 'woodmart' ),
			)
		);

		$body_repeater = new Repeater();

		$body_repeater->add_control(
			'body_content_type',
			array(
				'label'   => esc_html__( 'Action', 'woodmart' ),
				'type'    => Controls_Manager::SELECT,
				'default' => 'cell',
				'options' => array(
					'row'  => esc_html__( 'Start new row', 'woodmart' ),
					'cell' => esc_html__( 'Add new cell', 'woodmart' ),
				),
			)
		);

		$body_repeater->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'           => 'body_item_border',
				'label'          => esc_html__( 'Border', 'woodmart' ),
				'fields_options' => array(
					'border' => array(
						'options' => array(
							''       => esc_html__( 'Inherit', 'woodmart' ),
							'none'   => esc_html__( 'None', 'elementor' ),
							'solid'  => _x( 'Solid', 'Border Control', 'elementor' ),
							'double' => _x( 'Double', 'Border Control', 'elementor' ),
							'dotted' => _x( 'Dotted', 'Border Control', 'elementor' ),
							'dashed' => _x( 'Dashed', 'Border Control', 'elementor' ),
							'groove' => _x( 'Groove', 'Border Control', 'elementor' ),
						),
						'default' => '',
					),
					'width'  => array(
						'default'   => array(
							'top'      => '1',
							'right'    => '1',
							'bottom'   => '1',
							'left'     => '1',
							'isLinked' => true,
						),
						'condition' => array(
							'border!' => array( '', 'none' ),
						),
					),
					'color'  => array(
						'default'   => '#bbb',
						'condition' => array(
							'border!' => array( '', 'none' ),
						),
					),
				),
				'selector'       => '{{WRAPPER}} {{CURRENT_ITEM}} th, {{WRAPPER}} {{CURRENT_ITEM}} td',
				'condition'      => array(
					'body_content_type' => 'row',
				),
			)
		);

		$body_repeater->start_controls_tabs( 'body_item_tabs' );

		$body_repeater->start_controls_tab(
			'tab_body_cell_content',
			array(
				'label'     => esc_html__( 'Content', 'woodmart' ),
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_text',
			array(
				'label'     => esc_html__( 'Text', 'woodmart' ),
				'type'      => Controls_Manager::WYSIWYG,
				'default'   => 'Content',
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->end_controls_tab();

		$body_repeater->start_controls_tab(
			'tab_body_cell_settings',
			array(
				'label'     => esc_html__( 'Settings', 'woodmart' ),
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_type',
			array(
				'label'     => esc_html__( 'Cell Type', 'woodmart' ),
				'type'      => Controls_Manager::SELECT,
				'default'   => 'td',
				'options'   => array(
					'td' => esc_html__( 'Default', 'woodmart' ),
					'th' => esc_html__( 'Header', 'woodmart' ),
				),
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_span',
			array(
				'label'     => esc_html__( 'Column Span', 'woodmart' ),
				'title'     => esc_html__( 'How many columns should this column span across.', 'woodmart' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 1,
				'min'       => 1,
				'max'       => 20,
				'step'      => 1,
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_row_span',
			array(
				'label'     => esc_html__( 'Row Span', 'woodmart' ),
				'title'     => esc_html__( 'How many rows should this column span across.', 'woodmart' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 1,
				'min'       => 1,
				'max'       => 20,
				'step'      => 1,
				'separator' => 'below',
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_color',
			array(
				'label'     => esc_html__( 'Color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} {{CURRENT_ITEM}}' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->add_control(
			'body_cell_background_color',
			array(
				'label'     => esc_html__( 'Background Color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} {{CURRENT_ITEM}}' => 'background-color: {{VALUE}};',
				),
				'condition' => array(
					'body_content_type' => 'cell',
				),
			)
		);

		$body_repeater->end_controls_tab();

		$body_repeater->end_controls_tabs();

		$this->add_control(
			'body_items',
			array(
				'type'        => Controls_Manager::REPEATER,
				'title_field' => '{{ body_content_type }}: {{{ body_cell_text }}}',
				'fields'      => $body_repeater->get_controls(),
				'default'     => array(
					array(
						'body_content_type' => 'row',
					),
					array(
						'body_cell_text'    => 'Row #1 Content #1',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #1 Content #2',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #1 Content #3',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #1 Content #4',
						'body_content_type' => 'cell',
					),
					array(
						'body_content_type' => 'row',
					),
					array(
						'body_cell_text'    => 'Row #2 Content #1',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #2 Content #2',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #2 Content #3',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #2 Content #4',
						'body_content_type' => 'cell',
					),
					array(
						'body_content_type' => 'row',
					),
					array(
						'body_cell_text'    => 'Row #3 Content #1',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #3 Content #2',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #3 Content #3',
						'body_content_type' => 'cell',
					),
					array(
						'body_cell_text'    => 'Row #3 Content #4',
						'body_content_type' => 'cell',
					),
				),
			)
		);

		$this->end_controls_section();

		/**
		 * Style tab
		 */

		/**
		 * Heading settings
		 */
		$this->start_controls_section(
			'heading_style_section',
			array(
				'label' => esc_html__( 'Heading', 'woodmart' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_control(
			'heading_text_align',
			array(
				'label'   => esc_html__( 'Text alignment', 'woodmart' ),
				'type'    => 'wd_buttons',
				'options' => array(
					'left'   => array(
						'title' => esc_html__( 'Left', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/left.jpg',
					),
					'center' => array(
						'title' => esc_html__( 'Center', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/center.jpg',
					),
					'right'  => array(
						'title' => esc_html__( 'Right', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/right.jpg',
					),
				),
				'default' => 'left',
			)
		);

		$this->add_control(
			'heading_background_color',
			array(
				'label'     => esc_html__( 'Background Color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} th' => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'heading_text_color',
			array(
				'label'     => esc_html__( 'Text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} th' => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'heading_typography_heading',
			array(
				'label'     => esc_html__( 'Typography', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'heading_custom_typography',
				'label'    => esc_html__( 'Custom typography', 'woodmart' ),
				'selector' => '{{WRAPPER}} th',
			)
		);

		$this->add_control(
			'heading_border_heading',
			array(
				'label'     => esc_html__( 'Border', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'           => 'heading_border',
				'label'          => esc_html__( 'Border', 'woodmart' ),
				'fields_options' => array(
					'border' => array(
						'options' => array(
							''       => esc_html__( 'Default', 'woodmart' ),
							'none'   => esc_html__( 'None', 'elementor' ),
							'solid'  => _x( 'Solid', 'Border Control', 'elementor' ),
							'double' => _x( 'Double', 'Border Control', 'elementor' ),
							'dotted' => _x( 'Dotted', 'Border Control', 'elementor' ),
							'dashed' => _x( 'Dashed', 'Border Control', 'elementor' ),
							'groove' => _x( 'Groove', 'Border Control', 'elementor' ),
						),
						'default' => '',
					),
					'width'  => array(
						'default' => array(
							'top'      => '1',
							'right'    => '1',
							'bottom'   => '1',
							'left'     => '1',
							'isLinked' => true,
						),
					),
					'color'  => array(
						'default' => '#bbb',
					),
				),
				'selector'       => '{{WRAPPER}} th',
			)
		);

		$this->add_control(
			'heading_padding_heading',
			array(
				'label'     => esc_html__( 'Padding', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_responsive_control(
			'heading_cell_padding',
			array(
				'label'      => esc_html__( 'Table cell padding', 'woodmart' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px' ),
				'default'    => array(
					'top'      => '',
					'bottom'   => '',
					'left'     => '',
					'right'    => '',
					'unit'     => 'px',
					'isLinked' => true,
				),
				'selectors'  => array(
					'{{WRAPPER}} th' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->end_controls_section();

		/**
		 * Body settings
		 */
		$this->start_controls_section(
			'body_style_section',
			array(
				'label' => esc_html__( 'Body', 'woodmart' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_control(
			'body_text_align',
			array(
				'label'   => esc_html__( 'Text alignment', 'woodmart' ),
				'type'    => 'wd_buttons',
				'options' => array(
					'left'   => array(
						'title' => esc_html__( 'Left', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/left.jpg',
					),
					'center' => array(
						'title' => esc_html__( 'Center', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/center.jpg',
					),
					'right'  => array(
						'title' => esc_html__( 'Right', 'woodmart' ),
						'image' => WOODMART_ASSETS_IMAGES . '/settings/align/right.jpg',
					),
				),
				'default' => 'left',
			)
		);

		$this->add_control(
			'body_background_heading',
			array(
				'label'     => esc_html__( 'Background', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_control(
			'body_background_type',
			array(
				'label'   => esc_html__( 'Background type', 'woodmart' ),
				'type'    => Controls_Manager::SELECT,
				'default' => 'body',
				'options' => array(
					'body'       => esc_html__( 'Body', 'woodmart' ),
					'h_even_odd' => esc_html__( 'Horizontal even & odd', 'woodmart' ),
					'v_even_odd' => esc_html__( 'Vertical even & odd', 'woodmart' ),
				),
			)
		);

		$this->add_control(
			'body_background_color',
			array(
				'label'     => esc_html__( 'Body background color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td' => 'background-color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'body',
				),
			)
		);

		$this->add_control(
			'body_text_color',
			array(
				'label'     => esc_html__( 'Body text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'body',
				),
			)
		);

		$this->add_control(
			'h_even_background_color',
			array(
				'label'     => esc_html__( 'Horizontal even background color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody tr:nth-child(even)' => 'background-color: {{VALUE}};',
				),
				'default'   => '#F8F8F8',
				'condition' => array(
					'body_background_type' => 'h_even_odd',
				),
			)
		);

		$this->add_control(
			'h_odd_background_color',
			array(
				'label'     => esc_html__( 'Horizontal odd background color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody tr:nth-child(odd)' => 'background-color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'h_even_odd',
				),
			)
		);

		$this->add_control(
			'h_even_text_color',
			array(
				'label'     => esc_html__( 'Horizontal even text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody tr:nth-child(even)' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'h_even_odd',
				),
			)
		);

		$this->add_control(
			'h_odd_text_color',
			array(
				'label'     => esc_html__( 'Horizontal odd text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody tr:nth-child(odd)' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'h_even_odd',
				),
			)
		);

		$this->add_control(
			'v_even_background_color',
			array(
				'label'     => esc_html__( 'Vertical even background color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td:nth-child(even), {{WRAPPER}} tbody th:nth-child(even)' => 'background-color: {{VALUE}};',
				),
				'default'   => '#F8F8F8',
				'condition' => array(
					'body_background_type' => 'v_even_odd',
				),
			)
		);

		$this->add_control(
			'v_odd_background_color',
			array(
				'label'     => esc_html__( 'Vertical odd background color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td:nth-child(odd), {{WRAPPER}} tbody th:nth-child(odd)' => 'background-color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'v_even_odd',
				),
			)
		);

		$this->add_control(
			'v_even_text_color',
			array(
				'label'     => esc_html__( 'Vertical even text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td:nth-child(even), {{WRAPPER}} tbody th:nth-child(even)' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'v_even_odd',
				),
			)
		);

		$this->add_control(
			'v_odd_text_color',
			array(
				'label'     => esc_html__( 'Vertical odd text color', 'woodmart' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} tbody td:nth-child(odd), {{WRAPPER}} tbody th:nth-child(odd)' => 'color: {{VALUE}};',
				),
				'condition' => array(
					'body_background_type' => 'v_even_odd',
				),
			)
		);

		$this->add_control(
			'body_typography_heading',
			array(
				'label'     => esc_html__( 'Typography', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'body',
				'label'    => esc_html__( 'Custom typography', 'woodmart' ),
				'selector' => '{{WRAPPER}} td',
			)
		);

		$this->add_control(
			'body_border_heading',
			array(
				'label'     => esc_html__( 'Border', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'           => 'body_border',
				'label'          => esc_html__( 'Border', 'woodmart' ),
				'fields_options' => array(
					'border' => array(
						'options' => array(
							''       => esc_html__( 'Default', 'woodmart' ),
							'none'   => esc_html__( 'None', 'elementor' ),
							'solid'  => _x( 'Solid', 'Border Control', 'elementor' ),
							'double' => _x( 'Double', 'Border Control', 'elementor' ),
							'dotted' => _x( 'Dotted', 'Border Control', 'elementor' ),
							'dashed' => _x( 'Dashed', 'Border Control', 'elementor' ),
							'groove' => _x( 'Groove', 'Border Control', 'elementor' ),
						),
						'default' => '',
					),
					'width'  => array(
						'default' => array(
							'top'      => '1',
							'right'    => '1',
							'bottom'   => '1',
							'left'     => '1',
							'isLinked' => true,
						),
					),
					'color'  => array(
						'default' => '#bbb',
					),
				),
				'selector'       => '{{WRAPPER}} td',
			)
		);

		$this->add_control(
			'body_cell_padding_heading',
			array(
				'label'     => esc_html__( 'Padding', 'woodmart' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_responsive_control(
			'body_cell_padding',
			array(
				'label'      => esc_html__( 'Table cell padding', 'woodmart' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px' ),
				'default'    => array(
					'top'      => '',
					'bottom'   => '',
					'left'     => '',
					'right'    => '',
					'unit'     => 'px',
					'isLinked' => true,
				),
				'selectors'  => array(
					'{{WRAPPER}} td' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->end_controls_section();
	}

	/**
	 * Render the widget output on the frontend.
	 *
	 * Written in PHP and used to generate the final HTML.
	 *
	 * @since  1.0.0
	 *
	 * @access protected
	 */
	protected function render() {
		$default_args = array(
			// Heading.
			'heading_items'         => array(),
			'heading_text_align'    => 'left',
			'heading_color_presets' => 'default',
			'heading_text_size'     => 'default',

			// Body.
			'body_items'            => array(),
			'body_text_align'       => 'left',
			'body_color_presets'    => 'default',
			'body_text_size'        => 'default',
		);

		$element_args = wp_parse_args( $this->get_settings_for_display(), $default_args ); // phpcs:ignore

		$wrapper_classes = '';

		// Heading classes.
		$heading_classes = 'text-' . $element_args['heading_text_align'];
		if ( 'default' !== $element_args['heading_color_presets'] ) {
			$heading_classes .= ' wd-textcolor-' . $element_args['heading_color_presets'];
		}
		if ( 'default' !== $element_args['heading_text_size'] ) {
			$heading_classes .= ' wd-fontsize-' . $element_args['heading_text_size'];
		}

		// Body classes.
		$body_classes = 'text-' . $element_args['body_text_align'];
		if ( 'default' !== $element_args['body_color_presets'] ) {
			$body_classes .= ' wd-textcolor-' . $element_args['body_color_presets'];
		}
		if ( 'default' !== $element_args['body_text_size'] ) {
			$body_classes .= ' wd-fontsize-' . $element_args['body_text_size'];
		}

		woodmart_enqueue_inline_style( 'el-table' );
		?>
		<div class="wd-el-table-wrap wd-reset-all-last<?php echo esc_attr( $wrapper_classes ); ?>">
			<table class="wd-el-table">
				<?php if ( $element_args['heading_items'] ) : ?>
					<thead class="<?php echo esc_attr( $heading_classes ); ?>">
						<?php foreach ( $element_args['heading_items'] as $key => $heading ) : ?>
							<?php if ( 'cell' === $heading['heading_content_type'] ) : ?>
								<th class="wd-table-cell elementor-repeater-item-<?php echo esc_attr( $heading['_id'] ); ?>" colspan="<?php echo esc_attr( $heading['heading_cell_span'] ); ?>" rowspan="<?php echo esc_attr( $heading['heading_cell_row_span'] ); ?>">
									<?php echo wp_kses( $heading['heading_cell_text'], true ); ?>
								</th>
							<?php else : ?>
								<?php if ( 0 === $key ) : ?>
									<tr class="wd-table-row elementor-repeater-item-<?php echo esc_attr( $heading['_id'] ); ?>">
								<?php else : ?>
									</tr>
									<tr class="wd-table-row elementor-repeater-item-<?php echo esc_attr( $heading['_id'] ); ?>">
								<?php endif; ?>
							<?php endif; ?>
						<?php endforeach; ?>
						</tr>
					</thead>
				<?php endif; ?>

				<tbody class="<?php echo esc_attr( $body_classes ); ?>">
					<?php foreach ( $element_args['body_items'] as $key => $item ) : ?>
						<?php if ( 'cell' === $item['body_content_type'] ) : ?>
							<<?php echo esc_attr( $item['body_cell_type'] ); ?> class="wd-table-cell elementor-repeater-item-<?php echo esc_attr( $item['_id'] ); ?>" colspan="<?php echo esc_attr( $item['body_cell_span'] ); ?>" rowspan="<?php echo esc_attr( $item['body_cell_row_span'] ); ?>">
							<?php echo wp_kses( $item['body_cell_text'], true ); ?>
							</<?php echo esc_attr( $item['body_cell_type'] ); ?>>
						<?php else : ?>
							<?php if ( 0 === $key ) : ?>
								<tr class="wd-table-row elementor-repeater-item-<?php echo esc_attr( $item['_id'] ); ?>">
							<?php else : ?>
								</tr>
								<tr class="wd-table-row elementor-repeater-item-<?php echo esc_attr( $item['_id'] ); ?>">
							<?php endif; ?>
						<?php endif; ?>
					<?php endforeach; ?>
					</tr>
				</tbody>
			</table>
		</div>
		<?php
	}
}

Plugin::instance()->widgets_manager->register( new Table() );