<?php


namespace JFB_Compatibility\Elementor\Widgets;

use Elementor\Controls_Manager;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Typography;
use Elementor\Widget_Base;
use Jet_Form_Builder\Admin\Tabs_Handlers\Tab_Handler_Manager;
use Jet_Form_Builder\Blocks\Modules\General_Style_Functions;
use Jet_Form_Builder\Classes\Arguments\Form_Arguments;
use Jet_Form_Builder\Classes\Tools;

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

class Form extends Widget_Base implements Widget_Base_It {

	use General_Style_Functions;

	public function init_hooks() {
		add_filter(
			'jet-engine/booking-form/combine-selector',
			array( $this, 'combine_selector' ),
			10,
			3
		);

		add_filter(
			'jet-engine/forms/pre-render-form',
			array( $this, 'booking_form_render' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_general/after_section_start',
			array( $this, 'after_general_section_start' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_general/before_section_end',
			array( $this, 'update_general_form_controls' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_range_fields_style/before_section_end',
			array( $this, 'update_section_range_fields_style' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/form_submit_style/before_section_end',
			array( $this, 'update_form_submit_style' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_rows_style/before_section_end',
			array( $this, 'update_section_rows_style' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_fields_style/before_section_end',
			array( $this, 'update_section_fields_style' ),
			10,
			2
		);

		add_action(
			'elementor/element/jet-engine-booking-form/section_checkradio_fields_style/before_section_end',
			array( $this, 'update_section_checkradio_fields_style' ),
			10,
			2
		);
		add_action(
			'elementor/element/jet-engine-booking-form/section_checkradio_fields_style/after_section_end',
			array( $this, 'after_section_checkradio_fields_style' ),
			10,
			2
		);
		// form_prev_page_style
		add_action(
			'elementor/element/jet-engine-booking-form/form_prev_page_style/after_section_end',
			array( $this, 'after_form_prev_page_style' ),
			10,
			2
		);
	}


	/**
	 * @return string
	 */
	public function get_name() {
		return 'jet-form-builder-form';
	}

	public function get_title() {
		return __( 'JetForm', 'jet-form-builder' );
	}

	public function get_icon() {
		return 'jet-form-builder-icon--form';
	}

	public function get_categories() {
		return array( 'jet-form-builder' );
	}

	public function get_style_depends() {
		return array( 'jet-form-builder-frontend' );
	}

	private function jet_form_builder_slug() {
		return jet_form_builder()->post_type->slug();
	}

	private function jet_engine_form_slug() {
		return jet_engine()->forms->slug();
	}

	public function combine_selector( $additional, $engine_selector, $control_id ) {
		if ( ! $control_id ) {
			return $this->selector( $engine_selector );
		}

		switch ( $control_id ) {
			case 'labels_v_alignment':
				return $this->selector( '-row' );
			case 'fields_background_color':
				return $this->selector( '__field:not(.checkradio-field):not(.range-field):not(.%s-repeater)' );
			case 'field_messages_font_size':
			case 'field_messages_color':
			case 'field_messages_margin':
			case 'field_messages_alignment':
				return $this->selector( '-file-upload__errors' );
		}

		return '';
	}


	public function after_general_section_start( $element, $args ) {
		$element->add_control(
			'form_provider',
			array(
				'label'   => __( 'Choose Provider', 'jet-form-builder' ),
				'type'    => Controls_Manager::SELECT,
				'options' => array(
					$this->jet_form_builder_slug() => __( 'JetFormBuilder', 'jet-form-builder' ),
					$this->jet_engine_form_slug()  => __( 'JetEngine', 'jet-form-builder' ),
				),
				'default' => $this->jet_engine_form_slug(),
			)
		);

		$element->add_control(
			'form_id',
			array(
				'label'      => __( 'Select JetForm', 'jet-form-builder' ),
				'type'       => 'jet-query',
				'query_type' => 'post',
				'query'      => array(
					'post_type' => $this->jet_form_builder_slug(),
				),
				'condition'  => array( 'form_provider' => $this->jet_form_builder_slug() ),
			)
		);
	}

	public function update_general_form_controls( $element, $args ) {
		$element->update_control(
			'_form_id',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			)
		);
		$element->update_control(
			'fields_label_tag',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			)
		);
		$element->update_control(
			'cache_form',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			)
		);
		$element->add_control(
			'enable_progress',
			array(
				'label'     => __( 'Enable form pages progress', 'jet-form-builder' ),
				'type'      => Controls_Manager::SWITCHER,
				'condition' => array( 'form_provider' => $this->jet_form_builder_slug() ),
			)
		);
	}

	public function update_section_rows_style( $element, $args ) {
		$element->update_control(
			'rows_divider',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			)
		);
		$element->update_control(
			'rows_divider_height',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			),
			array( 'recursive' => true )
		);
		$element->update_control(
			'rows_divider_color',
			array(
				'condition' => array( 'form_provider' => $this->jet_engine_form_slug() ),
			),
			array( 'recursive' => true )
		);
		$element->update_control(
			'cols_gap',
			array(
				'selectors' => array(
					$this->selector( ' .wp-block-column:not(:first-child)' ) => 'margin-left: {{SIZE}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);
	}

	public function update_section_fields_style( $element, $args ) {
		$element->update_control(
			'fields_placeholder_color',
			array(
				'selectors' => array(
					$this->selector( ' ::-webkit-input-placeholder' ) => 'color: {{VALUE}};',
					$this->selector( ' ::-ms-input-placeholder' )     => 'color: {{VALUE}};',
					$this->selector( ' ::-moz-placeholder' )          => 'color: {{VALUE}};',
					$this->selector( ' :-moz-placeholder' )           => 'color: {{VALUE}};',
				),
			),
			array( 'recursive' => true )
		);
	}

	public function update_section_checkradio_fields_style( $element, $args ) {
		$element->update_control(
			'checkradio_fields_gap',
			array(
				'selectors' => array(
					'body:not(.rtl) ' . $this->selector( '__field-wrap.checkradio-wrap span::before' ) => 'margin-right: {{SIZE}}{{UNIT}};',
					'body.rtl ' . $this->selector( '__field-wrap.checkradio-wrap span::before' )       => 'margin-left: {{SIZE}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);
	}

	public function after_section_checkradio_fields_style( $booking_form, $args ) {
		$booking_form->start_controls_section(
			'builder__checkbox_field_style_section',
			$this->on_fb(
				array(
					'label' => __( 'JetForm Checkbox', 'jet-form-builder' ),
					'tab'   => Controls_Manager::TAB_STYLE,
				)
			)
		);

		$booking_form->add_control(
			'builder__checkbox_show_decorator',
			array(
				'label'     => __( 'Show Checkbox', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'options'   => array(
					'inline-block' => array(
						'title' => __( 'Yes', 'jet-form-builder' ),
						'icon'  => 'fa fa-check',
					),
					'none'         => array(
						'title' => __( 'No', 'jet-form-builder' ),
						'icon'  => 'fa fa-times',
					),
				),
				'default'   => 'inline-block',
				'selectors' => array(
					$this->selector( '__field-wrap .for-checkbox span::before' ) => 'display:{{VALUE}};',
				),
			)
		);

		$booking_form->add_responsive_control(
			'builder__checkbox_size',
			array(
				'label'      => __( 'Checkbox Size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-wrap .for-checkbox span::before' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
				'condition'  => array(
					'builder__checkbox_show_decorator' => 'inline-block',
				),
			)
		);

		$booking_form->start_controls_tabs( 'builder__checkbox_state_styles' );

		$booking_form->start_controls_tab(
			'builder__checkbox_state--normal',
			array(
				'label' => esc_html__( 'Normal', 'jet-form-builder' ),
			)
		);
		$this->add_border(
			$booking_form,
			'builder__checkbox_state--normal__border',
			$this->selector( '__field-wrap .for-checkbox span::before' )
		);

		$booking_form->add_control(
			'builder__checkbox_state--normal__bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap .for-checkbox span::before' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$booking_form->end_controls_tab();

		$booking_form->start_controls_tab(
			'builder__checkbox_state--checked',
			array(
				'label' => esc_html__( 'Checked', 'jet-form-builder' ),
			)
		);

		$this->add_border(
			$booking_form,
			'builder__checkbox_state--checked__border',
			$this->selector( '__field-wrap label.for-checkbox :checked + span::before' )
		);
		$booking_form->add_control(
			'builder__checkbox_state--checked__bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label.for-checkbox :checked + span::before' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$booking_form->end_controls_tab();
		$booking_form->end_controls_tabs();
		$booking_form->end_controls_section();

		$booking_form->start_controls_section(
			'builder__radio_field_style_section',
			$this->on_fb(
				array(
					'label' => __( 'JetForm Radio', 'jet-form-builder' ),
					'tab'   => Controls_Manager::TAB_STYLE,
				)
			)
		);
		$booking_form->add_control(
			'builder__radio_show_decorator',
			array(
				'label'     => __( 'Show Radio', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'default'   => 'inline-block',
				'options'   => array(
					'inline-block' => array(
						'title' => __( 'Yes', 'jet-form-builder' ),
						'icon'  => 'fa fa-check',
					),
					'none'         => array(
						'title' => __( 'No', 'jet-form-builder' ),
						'icon'  => 'fa fa-times',
					),
				),
				'selectors' => array(
					$this->selector( '__field-wrap .for-radio span::before' ) => 'display:{{VALUE}};',
				),
			)
		);

		$booking_form->add_responsive_control(
			'builder__radio_size',
			array(
				'label'      => __( 'Radio Size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-wrap .for-radio span::before' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
				'condition'  => array(
					'builder__radio_show_decorator' => 'inline-block',
				),
			)
		);

		$booking_form->start_controls_tabs( 'builder__radio_state_styles' );

		$booking_form->start_controls_tab(
			'builder__radio_state--normal',
			array(
				'label' => esc_html__( 'Normal', 'jet-form-builder' ),
			)
		);
		$this->add_border(
			$booking_form,
			'builder__radio_state--normal__border',
			$this->selector( '__field-wrap .for-radio span::before' )
		);
		$booking_form->add_control(
			'builder__radio_state--normal__bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap .for-radio span::before' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$booking_form->end_controls_tab();

		$booking_form->start_controls_tab(
			'builder__radio_state--checked',
			array(
				'label' => esc_html__( 'Checked', 'jet-form-builder' ),
			)
		);
		$this->add_border(
			$booking_form,
			'builder__radio_state--checked__border',
			$this->selector( '__field-wrap label.for-radio :checked + span::before' )
		);
		$booking_form->add_control(
			'builder__radio_state--checked__bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label.for-radio :checked + span::before' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$booking_form->end_controls_tab();
		$booking_form->end_controls_tabs();
		$booking_form->end_controls_section();
	}

	public function after_form_prev_page_style( $element, $args ) {
		$this->run_form_progress_controls(
			$element,
			array( $this, 'selector' ),
			array( $this, 'on_fb' )
		);
	}

	public function update_section_range_fields_style( $element, $args ) {
		$range_obj = jet_form_builder()->blocks->get_field_by_name( 'range-field' );

		$element->update_control(
			'track_height',
			array(
				'selectors' => array(
					$this->selector() => $range_obj::CSS_VAR_RANGE_HEIGHT . ': {{SIZE}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);
		$element->update_control(
			'thumb_size',
			array(
				'selectors' => array(
					$this->selector() => $range_obj::CSS_VAR_SLIDER_SIZE . ': {{SIZE}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);

		$element->update_control(
			'track_border_radius',
			array(
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-runnable-track' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-moz-range-track' )              => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-ms-track' )                     => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);
		$element->update_control(
			'thumb_border_radius',
			array(
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-moz-range-thumb' )     => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-ms-thumb' )            => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			),
			array( 'recursive' => true )
		);

		$element->update_control(
			'track_bg_color',
			array(
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-runnable-track' ) => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-moz-range-track' )              => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-ms-track' )                     => 'background-color: {{VALUE}};',
				),
			),
			array( 'recursive' => true )
		);
		$element->update_control(
			'thumb_bg_color',
			array(
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-moz-range-thumb' )     => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-ms-thumb' )            => 'background-color: {{VALUE}};',
				),
			),
			array( 'recursive' => true )
		);
	}

	public function update_form_submit_style( $element, $args ) {
		$element->update_control(
			'booking_form_submit_alignment',
			array(
				'selectors' => array(
					$this->selector( '__submit' ) => 'justify-content: center;',
				),
			),
			array( 'recursive' => true )
		);
	}


	private function on_fb( $args ) {
		return array_merge(
			$args,
			array(
				'condition' => array(
					'form_provider' => jet_form_builder()->post_type->slug(),
				),
			)
		);
	}

	public function on_jet_engine( $args ) {
		return array_merge_recursive(
			$args,
			array(
				'condition' => array(
					'form_provider' => jet_engine()->forms->slug(),
				),
			)
		);
	}


	public function run_form_progress_controls( $instance, $selector_callable, $add_section_condition ) {
		$instance->start_controls_section(
			'jet_fb_progress_wrapper_section',
			$add_section_condition(
				array(
					'label' => __( 'Form Progress - Wrapper', 'jet-form-builder' ),
					'tab'   => Controls_Manager::TAB_STYLE,
				)
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_wrapper_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( '-progress-pages' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_wrapper_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( '-progress-pages' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'jet_fb_progress_wrapper_typography',
				'selector' => $selector_callable( '-progress-pages' ),
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_wrapper_border',
			$selector_callable( '-progress-pages' )
		);
		$instance->add_control(
			'jet_fb_progress_wrapper_color',
			array(
				'label'     => __( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( '-progress-pages' ) => 'color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_wrapper_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( '-progress-pages' ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->end_controls_section();

		$instance->start_controls_section(
			'jet_fb_progress_pages_section',
			$add_section_condition(
				array(
					'label' => __( 'Form Progress - Pages', 'jet-form-builder' ),
					'tab'   => Controls_Manager::TAB_STYLE,
				)
			)
		);
		$instance->start_controls_tabs( 'jet_fb_progress_pages_tabs' );

		$wrapper = '-progress-pages__item--wrapper';
		$item    = '-progress-pages__item';

		$scheme = array(
			'active-wrapper'   => "$wrapper.active-page",
			'active-item'      => "$wrapper.active-page .%s$item",
			'active-separator' => "$wrapper.active-page .%s-progress-pages__separator",
			'active-circle'    => "$wrapper.active-page .%s$item--circle",

			'next-wrapper'   => "$wrapper:not(.passed-page):not(.active-page)",
			'next-item'      => "$wrapper:not(.passed-page):not(.active-page) .%s$item",
			'next-separator' => "$wrapper:not(.passed-page):not(.active-page) .%s-progress-pages__separator",
			'next-circle'    => "$wrapper:not(.passed-page):not(.active-page) .%s$item--circle",

			'prev-wrapper'   => "$wrapper.passed-page",
			'prev-item'      => "$wrapper.passed-page .%s$item",
			'prev-separator' => "$wrapper.passed-page .%s-progress-pages__separator",
			'prev-circle'    => "$wrapper.passed-page .%s$item--circle",
		);

		$instance->start_controls_tab(
			'jet_fb_progress_pages_tab--current',
			array(
				'label' => esc_html__( 'Current', 'jet-form-builder' ),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--current_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['active-item'] ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--current_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['active-item'] ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'jet_fb_progress_pages_tab--current_typography',
				'selector' => $selector_callable( $scheme['active-item'] ),
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--current_item_border',
			$selector_callable( $scheme['active-item'] )
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--current_color',
			array(
				'label'     => __( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['active-item'] ) => 'color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--current_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['active-item'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_active_separator',
			array(
				'label'     => esc_html__( 'Separator', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--current_separator_height',
			array(
				'label'      => __( 'Height', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 100,
					),
				),
				'selectors'  => array(
					$selector_callable( $scheme['active-separator'] ) => 'height: {{SIZE}}{{UNIT}}; min-height: {{SIZE}}{{UNIT}};',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--current_separator_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['active-separator'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_active_circle',
			array(
				'label'     => esc_html__( 'Circle', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--current_separator_border',
			$selector_callable( $scheme['active-circle'] )
		);
		$instance->end_controls_tab();

		$instance->start_controls_tab(
			'jet_fb_progress_pages_tab--next',
			array(
				'label' => esc_html__( 'Next', 'jet-form-builder' ),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--next_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['next-item'] ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--next_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['next-item'] ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'jet_fb_progress_pages_tab--next_typography',
				'selector' => $selector_callable( $scheme['next-item'] ),
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--next_item_border',
			$selector_callable( $scheme['next-item'] )
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--next_color',
			array(
				'label'     => __( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['next-item'] ) => 'color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--next_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['next-item'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_next_separator',
			array(
				'label'     => esc_html__( 'Separator', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--next_separator_height',
			array(
				'label'      => __( 'Height', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 100,
					),
				),
				'selectors'  => array(
					$selector_callable( $scheme['next-separator'] ) => 'height: {{SIZE}}{{UNIT}}; min-height: {{SIZE}}{{UNIT}};',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--next_separator_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['next-separator'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_next_circle',
			array(
				'label'     => esc_html__( 'Circle', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--next_separator_border',
			$selector_callable( $scheme['next-circle'] )
		);
		$instance->end_controls_tab();

		$instance->start_controls_tab(
			'jet_fb_progress_pages_tab--prev',
			array(
				'label' => esc_html__( 'Prev', 'jet-form-builder' ),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--prev_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['prev-item'] ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--prev_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector_callable( $scheme['prev-item'] ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
		$instance->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'jet_fb_progress_pages_tab--prev_typography',
				'selector' => $selector_callable( $scheme['prev-item'] ),
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--prev_item_border',
			$selector_callable( $scheme['prev-item'] )
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--prev_color',
			array(
				'label'     => __( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['prev-item'] ) => 'color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--prev_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['prev-item'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_prev_separator',
			array(
				'label'     => esc_html__( 'Separator', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$instance->add_responsive_control(
			'jet_fb_progress_pages_tab--prev_separator_height',
			array(
				'label'      => __( 'Height', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 100,
					),
				),
				'selectors'  => array(
					$selector_callable( $scheme['prev-separator'] ) => 'height: {{SIZE}}{{UNIT}}; min-height: {{SIZE}}{{UNIT}};',
				),
			)
		);
		$instance->add_control(
			'jet_fb_progress_pages_tab--prev_separator_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$selector_callable( $scheme['prev-separator'] ) => 'background-color: {{VALUE}}',
				),
			)
		);
		$instance->add_control(
			'jet_fb_separator_prev_circle',
			array(
				'label'     => esc_html__( 'Circle', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);
		$this->add_border(
			$instance,
			'jet_fb_progress_pages_tab--prev_separator_border',
			$selector_callable( $scheme['prev-circle'] )
		);
		$instance->end_controls_tab();
		$instance->end_controls_tabs();
		$instance->end_controls_section();
	}

	public function booking_form_render( $result, $settings ) {
		$slug = $this->jet_form_builder_slug();

		if ( empty( $settings['form_provider'] ) || $slug !== $settings['form_provider'] ) {
			return false;
		}
		if ( empty( $settings['form_id'] ) ) {
			return __( 'Please, select JetForm to show', 'jet-form-builder' );
		}

		return jet_fb_render_form( $settings );
	}

	/**
	 * Register the widget controls.
	 *
	 * Adds different input fields to allow the user to change and customize the widget settings.
	 *
	 * @since 1.1.0
	 *
	 * @access protected
	 */
	protected function register_controls() {
		do_action(
			'jfb/elementor/form/before-form-settings',
			$this
		);

		$this->section_form_settings();

		do_action(
			'jfb/elementor/form/after-form-settings',
			$this
		);

		do_action(
			'jfb/elementor/form/before-style-sections',
			$this
		);

		/** Form Row */
		$this->section_form_style();

		/** Label */
		$this->section_label_style();

		/** Description */
		$this->section_description_style();

		/** Checkbox & Radio Fields */
		$this->section_checkradio_fields_style();

		/** Input Fields */
		$this->section_form_input_fields();

		/** Calculated Fields */
		$this->section_calc_fields_style();

		/** Range Fields */
		$this->section_range_fields_style();

		/** Heading Fields */
		$this->section_headings_style();

		/** Repeater */
		$this->section_repeater_style();

		/** Conditional block */
		$this->conditional_style();

		/** Submit */
		$this->form_submit_style();

		/** Form Break Row */
		$this->section_form_break_style();

		/** Form Break Buttons */
		$this->section_form_break_next_style();

		/** Form Break Disabled Message */
		$this->section_form_break_disabled_style();

		$this->run_form_progress_controls(
			$this,
			array( $this, 'selector' ),
			function ( $args ) {
				return $args;
			}
		);

		/** Messages */
		$this->section_message_error_style();

		do_action(
			'jfb/elementor/form/after-style-sections',
			$this
		);
	}

	private function section_form_settings() {
		$options = Form_Arguments::get_options( true );

		$this->start_controls_section(
			'section_ form_settings',
			array(
				'label' => __( 'Form Settings', 'jet-form-builder' ),
			)
		);

		do_action(
			'jfb/elementor/form/settings/before-controls',
			$this,
			array(),
			$this
		);

		$this->add_control(
			'form_id',
			array(
				'label'       => __( 'Choose Form', 'jet-form-builder' ),
				'type'        => Controls_Manager::SELECT,
				'default'     => '',
				'label_block' => false,
				'options'     => Tools::get_forms_list_for_js( true ),
			)
		);

		$this->add_control(
			'form_id_custom',
			array(
				'label'       => __( 'Form ID', 'jet-form-builder' ),
				'type'        => Controls_Manager::TEXT,
				'default'     => '',
				'label_block' => false,
				'dynamic'     => array( 'active' => true ),
				'condition'   => array(
					'form_id' => 'manual_form_id',
				),
			)
		);

		$this->add_control(
			'fields_layout',
			array(
				'label'   => __( 'Fields Layout', 'jet-form-builder' ),
				'type'    => Controls_Manager::SELECT,
				'default' => '',
				'options' => $options['fields_layout'],
			)
		);

		$this->add_control(
			'required_mark',
			array(
				'label'   => __( 'Required Mark', 'jet-form-builder' ),
				'type'    => Controls_Manager::TEXT,
				'default' => '',
			)
		);

		$this->add_control(
			'fields_label_tag',
			array(
				'label'   => __( 'Fields label HTML tag', 'jet-form-builder' ),
				'type'    => Controls_Manager::SELECT,
				'default' => '',
				'options' => array( '' => 'Default' ) + $options['fields_label_tag'],
			)
		);

		$this->add_control(
			'markup_type',
			array(
				'label'   => __( 'Markup type', 'jet-form-builder' ),
				'type'    => Controls_Manager::SELECT,
				'default' => '',
				'options' => array( '' => 'Default' ) + ( $options['markup_type'] ?? array() ),
			)
		);

		$this->add_control(
			'submit_type',
			array(
				'label'   => __( 'Submit Type', 'jet-form-builder' ),
				'type'    => Controls_Manager::SELECT,
				'default' => '',
				'options' => $options['submit_type'],
			)
		);

		$this->add_control(
			'enable_progress',
			array(
				'label'        => __( 'Enable form pages progress', 'jet-form-builder' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => __( 'Yes', 'jet-form-builder' ),
				'label_off'    => __( 'No', 'jet-form-builder' ),
				'return_value' => 'yes',
				'default'      => '',
			)
		);

		$this->add_control(
			'clear',
			array(
				'label'        => __( 'Clear data on success submit', 'jet-form-builder' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => __( 'Yes', 'jet-form-builder' ),
				'label_off'    => __( 'No', 'jet-form-builder' ),
				'return_value' => 'yes',
				'default'      => '',
			)
		);

		do_action(
			'jfb/elementor/form/settings/after-controls',
			$this,
			array(),
			$this
		);

		$this->end_controls_section();
	}

	private function section_form_style() {
		$this->start_controls_section(
			'section_form_style',
			array(
				'label' => __( 'Form Row', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_responsive_control(
			'form_row_gap_before',
			array(

				'type'       => Controls_Manager::SLIDER,
				'label'      => __( 'Gap Before', 'jet-form-builder' ),
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 100,
					),
				),
				'selectors'  => array(
					$this->selector( '-row' ) => 'margin-top: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_row_gap_after',
			array(

				'type'       => Controls_Manager::SLIDER,
				'label'      => __( 'Gap After', 'jet-form-builder' ),
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 100,
					),
				),
				'selectors'  => array(
					$this->selector( '-row' ) => 'margin-bottom: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_label_style() {
		$this->start_controls_section(
			'section_label_style',
			array(
				'label' => __( 'Label', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_responsive_control(
			'form_label_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__label' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_label_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__label' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_label_alignment',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'default'     => 'left',
				'separator'   => 'before',
				'options'     => array(
					'left'   => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '__label' ) => 'text-align: {{VALUE}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_label_typography',
				'selector' => $this->selector( '__label' ),
			)
		);

		$this->add_control(
			'form_label_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__label' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_label_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__label' ) => 'background-color: {{VALUE}};',
				),
			)
		);
		$this->add_border(
			$this,
			'form_label_border',
			$this->selector( '__label' )
		);

		$this->add_control(
			'divider__label__required_mark',
			array(
				'label'     => __( 'Required Mark', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_required_typography',
				'selector' => $this->selector( '__label .%s__required' ),
			)
		);
		$this->add_control(
			'form_required_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__label .%s__required' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->end_controls_section();
	}

	private function section_description_style() {
		$this->start_controls_section(
			'section_description_style',
			array(
				'label' => __( 'Description', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);
		$this->add_responsive_control(
			'form_description_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__desc' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_description_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__desc' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_description_alignment',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'default'     => 'left',
				'separator'   => 'before',
				'options'     => array(
					'left'   => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '__desc' ) => 'text-align: {{VALUE}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_description_typography',
				'selector' => $this->selector( '__desc' ),
			)
		);

		$this->add_control(
			'form_description_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__desc' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_description_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__desc' ) => 'background-color: {{VALUE}};',
				),
			)
		);
		$this->add_border(
			$this,
			'form_description_border',
			$this->selector( '__desc' )
		);
		$this->end_controls_section();
	}

	private function section_checkradio_fields_style() {
		$this->start_controls_section(
			'section_checkradio_fields_style',
			array(
				'label'      => __( 'Checkbox & Radio Fields', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->add_responsive_control(
			'checkradio_fields_layout',
			array(
				'label'                => __( 'Layout', 'jet-form-builder' ),
				'type'                 => Controls_Manager::CHOOSE,
				'label_block'          => false,
				'options'              => array(
					'inline-block' => array(
						'title' => __( 'Horizontal', 'jet-form-builder' ),
						'icon'  => 'eicon-ellipsis-h',
					),
					'block'        => array(
						'title' => __( 'Vertical', 'jet-form-builder' ),
						'icon'  => 'eicon-editor-list-ul',
					),
				),
				'selectors_dictionary' => array(
					'inline-block' => 'row',
					'block'        => 'column',
				),
				'selectors'            => array(
					$this->selector( '__fields-group' ) => 'flex-direction: {{VALUE}};',
				),
			)
		);

		$this->add_responsive_control(
			'checkradio_fields_gaps',
			array(
				'label'      => __( 'Gaps', 'jet-form-builder' ),
				'type'       => Controls_Manager::GAPS,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'default'    => array(
					'row'    => '0.7',
					'column' => '0.7',
					'unit'   => 'em',
				),
				'validators' => array(
					'Number' => array(
						'min' => 0,
					),
				),
				'selectors'  => array(
					$this->selector( '__fields-group' ) => 'gap: {{ROW}}{{UNIT}} {{COLUMN}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'checkradio_fields_typography',
				'selector' => $this->selector( '__field-wrap label' ),
			)
		);

		$this->add_responsive_control(
			'checkradio_fields_gap',
			array(
				'label'      => __( 'Gap between control and label', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'default'    => array(
					'size' => 8,
				),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-wrap.checkradio-wrap span' ) => 'gap: {{SIZE}}{{UNIT}};',
				),
			)
		);
		$this->add_responsive_control(
			'checkradio_fields_control_size',
			array(
				'label'      => __( 'Control Size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 0,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-wrap span::before' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'checkradio_fields_option_label_heading',
			array(
				'label'     => __( 'Option label', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_control(
			'checkradio_fields_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'checkradio_fields_background_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->start_controls_tabs(
			'tab__checkradio_tabs_items',
			array(
				'separator' => 'before',
			)
		);

		$this->start_controls_tab(
			'tab__checkradio_control_color__normal',
			array(
				'label' => __( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_border(
			$this,
			'tab__checkradio_control_border__normal',
			$this->selector( '__field-wrap span::before' )
		);

		$this->add_control(
			'tab__checkradio_control_bg_color__normal',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label.jet-form-builder__field-label > span::before' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab__checkradio_control_border__hover',
			array(
				'label' => __( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_border(
			$this,
			'tab__checkradio_control_border__hover',
			$this->selector( '__field-wrap label :not(:disabled):not(:checked):hover + span::before' )
		);

		$this->add_control(
			'tab__checkradio_control_bg_color__hover',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label :not(:disabled):not(:checked):hover + span::before' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab__checkradio_control_border__focus',
			array(
				'label' => __( 'Focus', 'jet-form-builder' ),
			)
		);

		$this->add_border(
			$this,
			'tab__checkradio_control_border__focus',
			$this->selector( '__field-wrap label :focus:not(:checked) + span::before' )
		);

		$this->add_control(
			'tab__checkradio_control_bg_color__focus',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label :focus:not(:checked) + span::before' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab__checkradio_control_border__checked',
			array(
				'label' => __( 'Checked', 'jet-form-builder' ),
			)
		);

		$this->add_border(
			$this,
			'tab__checkradio_control_border__checked',
			$this->selector( '__field-wrap label :checked + span::before' )
		);

		$this->add_control(
			'tab__checkradio_control_bg_color__checked',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-wrap label :checked + span::before' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();
		$this->end_controls_tabs();
		$this->end_controls_section();
	}

	private function section_form_input_fields() {
		$simple_input = '__field:not(.checkradio-field):not(.range-field):not(.%s-repeater):not(.wysiwyg-field):not([role="switch"])';

		$this->start_controls_section(
			'section_form_input_fields',
			array(
				'label' => __( 'Input Fields', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'fields_typography',
				'selector' => $this->selector( $simple_input ),
			)
		);

		$this->add_control(
			'fields_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( $simple_input ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'fields_placeholder_color',
			array(
				'label'     => __( 'Placeholder Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( ' ::-webkit-input-placeholder' ) => 'color: {{VALUE}};',
					$this->selector( ' ::-ms-input-placeholder' )     => 'color: {{VALUE}};',
					$this->selector( ' ::-moz-placeholder' )          => 'color: {{VALUE}};',
					$this->selector( ' :-moz-placeholder' )           => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'fields_background_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( $simple_input ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_responsive_control(
			'fields_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( $simple_input ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'fields_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( $simple_input ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'fields_border',
				'label'       => __( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( $simple_input ),
			)
		);

		$this->add_responsive_control(
			'fields_border_radius',
			array(
				'label'      => __( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( $simple_input ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			array(
				'name'     => 'fields_box_shadow',
				'selector' => $this->selector( $simple_input ),
			)
		);

		$this->add_responsive_control(
			'fields_width',
			array(
				'label'      => __( 'Fields width', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 50,
						'max' => 1000,
					),
				),
				'selectors'  => array(
					$this->selector( $simple_input ) => 'max-width: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'fields_textarea_height',
			array(
				'label'      => __( 'Textarea Height', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 10,
						'max' => 500,
					),
				),
				'selectors'  => array(
					$this->selector( '__field.textarea-field' ) => 'height:{{SIZE}}{{UNIT}}; min-height:{{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'fields_color_scheme',
			array(
				'label'       => __( 'Color Scheme', 'jet-form-builder' ),
				'type'        => Controls_Manager::SELECT,
				'description' => __( 'Affects default browser UI elements like date and time icons, UI etc.', 'jet-form-builder' ),
				'default'     => 'normal',
				'options'     => array(
					'normal' => __( 'Normal', 'jet-form-builder' ),
					'light'  => __( 'Light', 'jet-form-builder' ),
					'dark'   => __( 'Dark', 'jet-form-builder' ),
				),
				'selectors'   => array(
					$this->selector( ' input' ) => 'color-scheme: {{VALUE}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_calc_fields_style() {
		$this->start_controls_section(
			'section_calc_fields_style',
			array(
				'label'      => __( 'Calculated Fields', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'calc_fields_typography',
				'selector' => $this->selector( '__calculated-field' ),
			)
		);

		$this->add_control(
			'calc_fields_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__calculated-field' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'calc_fields_prefix_color',
			array(
				'label'     => __( 'Prefix Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__calculated-field-prefix' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_responsive_control(
			'calc_fields_prefix_size',
			array(
				'label'      => __( 'Prefix size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 10,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__calculated-field-prefix' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'calc_fields_suffix_color',
			array(
				'label'     => __( 'Suffix Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__calculated-field-suffix' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_responsive_control(
			'calc_fields_suffix_size',
			array(
				'label'      => __( 'Suffix size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 10,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__calculated-field-suffix' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'calc_fields_background_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__calculated-field' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_responsive_control(
			'calc_fields_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__calculated-field' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'calc_fields_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__calculated-field' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'calc_fields_border',
				'label'       => __( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( '__calculated-field' ),
			)
		);

		$this->add_responsive_control(
			'calc_fields_border_radius',
			array(
				'label'      => __( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__calculated-field' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'calc_fields_flex_align',
			array(
				'label'     => __( 'Content Align', 'jet-form-builder' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => array(
					''              => __( 'Default', 'jet-form-builder' ),
					'start'         => __( 'Left', 'jet-form-builder' ),
					'center'        => __( 'Center', 'jet-form-builder' ),
					'end'           => __( 'Right', 'jet-form-builder' ),
					'space-between' => __( 'Space Between', 'jet-form-builder' ),
					'space-evenly'  => __( 'Space Evenly', 'jet-form-builder' ),
					'space-around'  => __( 'Space Around', 'jet-form-builder' ),
				),
				'selectors' => array(
					$this->selector( '__calculated-field' ) => 'justify-content: {{VALUE}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_range_fields_style() {
		$this->start_controls_section(
			'section_range_fields_style',
			array(
				'label' => __( 'Range Fields', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_responsive_control(
			'range_max_width',
			array(
				'label'      => esc_html__( 'Max Width', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 1000,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-wrap.range-wrap' ) => 'max-width: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'range_slider_heading',
			array(
				'label'     => esc_html__( 'Slider', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_responsive_control(
			'track_height',
			array(
				'label'      => esc_html__( 'Track Height', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 20,
					),
				),
				'selectors'  => array(
					$this->selector( ' .range-field::-webkit-slider-runnable-track' ) => 'height: {{SIZE}}{{UNIT}};',
					$this->selector( ' .range-field::-moz-range-track' )              => 'height: {{SIZE}}{{UNIT}};',
					$this->selector( ' .range-field::-ms-track' )                     => 'height: {{SIZE}}{{UNIT}};',
					$this->selector( ' .range-field::-webkit-slider-thumb' )          => 'margin-top: calc( (18px - {{SIZE}}{{UNIT}})/-2 )',
				),
			)
		);

		$this->add_responsive_control(
			'thumb_size',
			array(
				'label'      => esc_html__( 'Thumb Size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field.range-field' )                       => 'min-height: {{SIZE}}{{UNIT}};',
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}; margin-top: calc( ({{SIZE}}{{UNIT}} - 4px)/-2 )',
					$this->selector( '__field.range-field::-moz-range-thumb' )     => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
					$this->selector( '__field.range-field::-ms-thumb' )            => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'thumb_indent',
			array(
				'type'      => Controls_Manager::HIDDEN,
				'default'   => 'style',
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'margin-top: calc( ({{thumb_size.SIZE}}{{thumb_size.UNIT}} - {{track_height.SIZE}}{{track_height.UNIT}})/-2 )',
				),
			)
		);

		$this->add_control(
			'track_border_radius',
			array(
				'label'      => esc_html__( 'Track Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__field.range-field::-webkit-slider-runnable-track' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-moz-range-track' )              => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-ms-track' )                     => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'thumb_border_radius',
			array(
				'label'      => esc_html__( 'Thumb Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-moz-range-thumb' )     => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
					$this->selector( '__field.range-field::-ms-thumb' )            => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'track_bg_color',
			array(
				'label'     => esc_html__( 'Track Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-runnable-track' ) => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-moz-range-track' )              => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-ms-track' )                     => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'thumb_bg_color',
			array(
				'label'     => esc_html__( 'Thumb Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field.range-field::-webkit-slider-thumb' ) => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-moz-range-thumb' )     => 'background-color: {{VALUE}};',
					$this->selector( '__field.range-field::-ms-thumb' )            => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'range_value_heading',
			array(
				'label'     => esc_html__( 'Value', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'range_value_typography',
				'selector' => $this->selector( '__field-value.range-value' ),
			)
		);

		$this->add_control(
			'range_value_color',
			array(
				'label'     => esc_html__( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-value.range-value' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_responsive_control(
			'range_prefix_value_size',
			array(
				'label'      => __( 'Prefix size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 10,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-value.range-value .%s__field-value-prefix' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
				'separator'  => 'before',
			)
		);

		$this->add_control(
			'range_prefix_value_color',
			array(
				'label'     => __( 'Prefix Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-value.range-value .%s__field-value-prefix' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_responsive_control(
			'range_suffix_value_size',
			array(
				'label'      => __( 'Suffix size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 10,
						'max' => 50,
					),
				),
				'selectors'  => array(
					$this->selector( '__field-value.range-value .%s__field-value-suffix' ) => 'font-size: {{SIZE}}{{UNIT}};',
				),
				'separator'  => 'before',
			)
		);

		$this->add_control(
			'range_suffix_value_color',
			array(
				'label'     => __( 'Suffix Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__field-value.range-value .%s__field-value-suffix' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_headings_style() {
		$this->start_controls_section(
			'section_headings_style',
			array(
				'label'      => __( 'Heading', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->add_control(
			'field_heading_styles_heading',
			array(
				'label'     => esc_html__( 'Label', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'field_heading_typography',
				'selector' => $this->selector( '__heading' ),
			)
		);

		$this->add_control(
			'fields_heading_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__heading' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_responsive_control(
			'fields_heading_gap',
			array(
				'label'      => __( 'Gap', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__heading' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'field_heading_styles_desc',
			array(
				'label'     => esc_html__( 'Description', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'field_desc_typography',
				'selector' => $this->selector( '__heading-desc' ),
			)
		);

		$this->add_control(
			'fields_desc_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__heading-desc' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_responsive_control(
			'fields_heading_desc_gap',
			array(
				'label'      => __( 'Gap', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__heading-desc' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_repeater_style() {
		$this->start_controls_section(
			'section_repeater_style',
			array(
				'label'      => __( 'Repeater', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->add_control(
			'field_repeater_row_desc',
			array(
				'label'     => esc_html__( 'Repeater row', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_row_padding',
			array(
				'label'      => esc_html__( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__row' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_control(
			'field_repeater_new_desc',
			array(
				'label'     => esc_html__( 'New item button', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->start_controls_tabs( 'tabs_booking_form_repeater_style' );

		$this->start_controls_tab(
			'booking_form_repeater_normal',
			array(
				'label' => esc_html__( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_repeater_bg_color',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__new' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_color',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__new' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'booking_form_repeater_hover',
			array(
				'label' => esc_html__( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_repeater_bg_color_hover',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__new:hover' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_color_hover',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__new:hover' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_hover_border_color',
			array(
				'label'     => esc_html__( 'Border Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'condition' => array(
					'booking_form_repeater_border_border!' => '',
				),
				'selectors' => array(
					$this->selector( '-repeater__new:hover' ) => 'border-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->end_controls_tabs();

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'           => 'booking_form_repeater_typography',
				'selector'       => $this->selector( '-repeater__new' ),
				'fields_options' => array(
					'typography' => array(
						'separator' => 'before',
					),
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_padding',
			array(
				'label'      => esc_html__( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__new' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_margin',
			array(
				'label'      => esc_html__( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__new' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'booking_form_repeater_border',
				'label'       => esc_html__( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( '-repeater__new' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_border_radius',
			array(
				'label'      => esc_html__( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__new' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			array(
				'name'     => 'booking_form_repeater_box_shadow',
				'selector' => $this->selector( '-repeater__new' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_alignment',
			array(
				'label'     => esc_html__( 'Alignment', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'options'   => array(
					'flex-start' => array(
						'title' => esc_html__( 'Start', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right',
					),
					'center'     => array(
						'title' => esc_html__( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'flex-end'   => array(
						'title' => esc_html__( 'End', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left',
					),
				),
				'selectors' => array(
					$this->selector( '-repeater__actions' ) => 'justify-content: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'field_repeater_del_desc',
			array(
				'label'     => esc_html__( 'Remove item button', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->start_controls_tabs( 'tabs_booking_form_repeater_del_style' );

		$this->start_controls_tab(
			'booking_form_repeater_del_normal',
			array(
				'label' => esc_html__( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_repeater_del_bg_color',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__remove' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_del_color',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__remove' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'booking_form_repeater_del_hover',
			array(
				'label' => esc_html__( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_repeater_del_bg_color_hover',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__remove:hover' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_del_color_hover',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-repeater__remove:hover' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_repeater_del_hover_border_color',
			array(
				'label'     => esc_html__( 'Border Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'condition' => array(
					'booking_form_repeater_del_border_border!' => '',
				),
				'selectors' => array(
					$this->selector( '-repeater__remove:hover' ) => 'border-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->end_controls_tabs();

		$this->add_responsive_control(
			'booking_form_repeater_del_padding',
			array(
				'label'      => esc_html__( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'separator'  => 'before',
				'selectors'  => array(
					$this->selector( '-repeater__remove' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_del_margin',
			array(
				'label'      => esc_html__( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__remove' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'booking_form_repeater_del_border',
				'label'       => esc_html__( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( '-repeater__remove' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_del_border_radius',
			array(
				'label'      => esc_html__( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-repeater__remove' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_del_size',
			array(
				'label'      => esc_html__( 'Icon Size', 'jet-form-builder' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', 'rem', 'custom' ),
				'range'      => array(
					'px' => array(
						'min' => 12,
						'max' => 90,
					),
				),
				'selectors'  => array(
					$this->selector( '-repeater__remove' ) => 'font-size: {{SIZE}}{{UNIT}};line-height: {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			array(
				'name'     => 'booking_form_repeater_del_box_shadow',
				'selector' => $this->selector( '-repeater__remove' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_repeater_del_alignment',
			array(
				'label'     => esc_html__( 'Alignment', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'default'   => 'flex-start',
				'options'   => array(
					'flex-start' => array(
						'title' => esc_html__( 'Top', 'jet-form-builder' ),
						'icon'  => 'eicon-v-align-top',
					),
					'center'     => array(
						'title' => esc_html__( 'Middle', 'jet-form-builder' ),
						'icon'  => 'eicon-v-align-middle',
					),
					'flex-end'   => array(
						'title' => esc_html__( 'Bottom', 'jet-form-builder' ),
						'icon'  => 'eicon-v-align-bottom',
					),
				),
				'selectors' => array(
					$this->selector( '-repeater__row-remove' ) => 'align-self: {{VALUE}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function conditional_style() {
		$this->start_controls_section(
			'conditional_style',
			array(
				'label'      => esc_html__( 'Conditional block', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->add_responsive_control(
			'conditional_padding',
			array(
				'label'      => esc_html__( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__conditional' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'conditional_margin',
			array(
				'label'      => esc_html__( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__conditional' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'conditional_border',
				'label'       => esc_html__( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( '__conditional' ),
			)
		);

		$this->add_responsive_control(
			'conditional_border_radius',
			array(
				'label'      => esc_html__( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__conditional' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			array(
				'name'     => 'conditional_box_shadow',
				'selector' => $this->selector( '__conditional' ),
			)
		);

		$this->add_control(
			'conditional_bg_color',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__conditional' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->end_controls_section();
	}

	private function form_submit_style() {
		$this->start_controls_section(
			'form_submit_style',
			array(
				'label'      => esc_html__( 'Submit', 'jet-form-builder' ),
				'tab'        => Controls_Manager::TAB_STYLE,
				'show_label' => false,
			)
		);

		$this->start_controls_tabs( 'tabs_booking_form_submit_style' );

		$this->start_controls_tab(
			'booking_form_submit_normal',
			array(
				'label' => esc_html__( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_submit_bg_color',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__action-button' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_submit_color',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__action-button' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'booking_form_submit_hover',
			array(
				'label' => esc_html__( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'booking_form_submit_bg_color_hover',
			array(
				'label'     => esc_html__( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__action-button:hover' ) => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_submit_color_hover',
			array(
				'label'     => esc_html__( 'Text Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__action-button:hover' ) => 'color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'booking_form_submit_hover_border_color',
			array(
				'label'     => esc_html__( 'Border Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'condition' => array(
					'booking_form_submit_border_border!' => '',
				),
				'selectors' => array(
					$this->selector( '__action-button:hover' ) => 'border-color: {{VALUE}};',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_hover_transition',
			array(

				'type'       => Controls_Manager::SLIDER,
				'label'      => __( 'Transition Duration', 'jet-form-builder' ),
				'size_units' => array( 's', 'ms', 'custom' ),
				'default'    => array(
					'unit' => 's',
					'size' => 0.3,
				),
				'selectors'  => array(
					$this->selector( '__action-button' ) => 'transition: all {{SIZE}}{{UNIT}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->end_controls_tabs();

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'booking_form_submit_typography',
				'selector' => $this->selector( '__action-button' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_padding',
			array(
				'label'      => esc_html__( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'separator'  => 'before',
				'selectors'  => array(
					$this->selector( '__action-button' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_margin',
			array(
				'label'      => esc_html__( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__action-button' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => 'booking_form_submit_border',
				'label'       => esc_html__( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $this->selector( '__action-button' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_border_radius',
			array(
				'label'      => esc_html__( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__action-button' ) => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Box_Shadow::get_type(),
			array(
				'name'     => 'booking_form_submit_box_shadow',
				'selector' => $this->selector( '__action-button' ),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_alignment',
			array(
				'label'     => esc_html__( 'Alignment', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'options'   => array(
					'flex-start' => array(
						'title' => esc_html__( 'Start', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right',
					),
					'center'     => array(
						'title' => esc_html__( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'flex-end'   => array(
						'title' => esc_html__( 'End', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left',
					),
					'stretch'    => array(
						'title' => esc_html__( 'Fullwidth', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-stretch',
					),
				),
				'selectors' => array(
					$this->selector( '__submit-wrap' ) => 'justify-content: {{VALUE}}; align-items: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'booking_form_submit_alignment_hidden',
			array(
				'type'      => Controls_Manager::HIDDEN,
				'default'   => 'style',
				'selectors' => array(
					$this->selector( '__submit-wrap > .%s__submit' ) => 'width: 100%',
				),
				'condition' => array(
					'booking_form_submit_alignment' => 'stretch',
				),
			)
		);

		$this->add_responsive_control(
			'booking_form_submit_alignment_text',
			array(
				'label'     => esc_html__( 'Button Text Alignment', 'jet-form-builder' ),
				'type'      => Controls_Manager::CHOOSE,
				'options'   => array(
					'flex-start' => array(
						'title' => esc_html__( 'Start', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right',
					),
					'center'     => array(
						'title' => esc_html__( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'flex-end'   => array(
						'title' => esc_html__( 'End', 'jet-form-builder' ),
						'icon'  => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left',
					),
				),
				'selectors' => array(
					$this->selector( '__submit' ) => 'justify-content: {{VALUE}};',
				),
			)
		);

		$this->end_controls_section();
	}

	private function section_form_break_style() {
		$this->start_controls_section(
			'section_form_break_style',
			array(
				'label' => __( 'Form Break Row', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_control(
			'form_break_notice',
			array(
				'type'        => 'notice',
				'notice_type' => 'info',
				'dismissible' => false,
				'content'     => esc_html__( 'Styles from this tab apply to the Next Page and Prev Page controls added through the Form Page Break block.', 'jet-form-builder' ),
			)
		);

		$this->add_responsive_control(
			'form_break_gap',
			array(
				'label'      => __( 'Gap', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__next-page-wrap' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_alignment',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'default'     => 'left',
				'separator'   => 'before',
				'options'     => array(
					'left'   => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '__next-page-wrap' ) => 'text-align: {{VALUE}};',
				),
			)
		);

		$this->add_border(
			$this,
			'form_break_border',
			$this->selector( '__next-page-wrap' )
		);

		$this->end_controls_section();
	}

	private function section_form_break_next_style() {
		$this->start_controls_section(
			'section_form_break_next_style',
			array(
				'label' => __( 'Form Break Buttons', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_control(
			'form_break_next_notice',
			array(
				'type'        => 'notice',
				'notice_type' => 'info',
				'dismissible' => false,
				'content'     => esc_html__( 'The styles from this tab apply to the Next Page and Prev Page added as separate blocks in the form.', 'jet-form-builder' ),
			)
		);

		$this->add_control(
			'form_break_next_button__error_heading',
			array(
				'label'     => __( 'Next Button', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'after',
			)
		);

		$this->add_responsive_control(
			'form_break_next_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__next-page' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_next_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__next-page' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_next_justify',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'options'     => array(
					'flex-start' => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center'     => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'flex-end'   => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '-row .%s__action-button-wrapper[data-type="next"]' ) => 'justify-content: {{VALUE}};',
				),
			)
		);

		$this->start_controls_tabs( 'form_break_next_styles' );

		$this->start_controls_tab(
			'form_break_next--normal',
			array(
				'label' => __( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_break_next_typography',
				'selector' => $this->selector( '__next-page' ),
			)
		);

		$this->add_border(
			$this,
			'form_break_next_border',
			$this->selector( '__next-page' )
		);

		$this->add_control(
			'form_break_next_color--normal',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__next-page' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'form_break_next_bg_color--normal',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__next-page' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'form_break_next--hover',
			array(
				'label' => __( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_break_next_typography--hover',
				'selector' => $this->selector( '__next-page:hover' ),
			)
		);

		$this->add_border(
			$this,
			'form_break_next_border--hover',
			$this->selector( '__next-page:hover' )
		);

		$this->add_control(
			'form_break_next_color--hover',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__next-page:hover' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_break_next_bg_color--hover',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__next-page:hover' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$options = Tab_Handler_Manager::get_options( 'options-tab' );

		if ( $options['disable_next_button'] ?? false ) {
			$this->start_controls_tab(
				'form_break_next--disabled',
				array(
					'label' => __( 'Disabled', 'jet-form-builder' ),
				)
			);

			$this->add_group_control(
				Group_Control_Typography::get_type(),
				array(
					'name'     => 'form_break_next_typography--disabled',
					'selector' => $this->selector( '__next-page:disabled' ),
				)
			);

			$this->add_border(
				$this,
				'form_break_next_border--disabled',
				$this->selector( '__next-page:disabled' )
			);

			$this->add_control(
				'form_break_next_color--disabled',
				array(
					'label'     => __( 'Color', 'jet-form-builder' ),
					'type'      => Controls_Manager::COLOR,
					'selectors' => array(
						$this->selector( '__next-page:disabled' ) => 'color: {{VALUE}};',
					),
				)
			);
			$this->add_control(
				'form_break_next_bg_color--disabled',
				array(
					'label'     => __( 'Background', 'jet-form-builder' ),
					'type'      => Controls_Manager::COLOR,
					'selectors' => array(
						$this->selector( '__next-page:disabled' ) => 'background-color: {{VALUE}};',
					),
				)
			);

			$this->end_controls_tab();
		}

		$this->end_controls_tabs();

		$this->add_control(
			'form_break_prev_button__error_heading',
			array(
				'label'     => __( 'Prev Button', 'jet-form-builder' ),
				'type'      => Controls_Manager::HEADING,
				'separator' => 'before',
			)
		);

		$this->add_responsive_control(
			'form_break_prev_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__prev-page' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_prev_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__prev-page' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_prev_justify',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'options'     => array(
					'flex-start' => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center'     => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'flex-end'   => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '-row .%s__action-button-wrapper[data-type="prev"]' ) => 'justify-content: {{VALUE}};',
				),
			)
		);

		$this->start_controls_tabs( 'form_break_prev_styles' );

		$this->start_controls_tab(
			'form_break_prev--normal',
			array(
				'label' => __( 'Normal', 'jet-form-builder' ),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_break_prev_typography',
				'selector' => $this->selector( '__prev-page' ),
			)
		);

		$this->add_border(
			$this,
			'form_break_prev_border',
			$this->selector( '__prev-page' )
		);

		$this->add_control(
			'form_break_prev_color--normal',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__prev-page' ) => 'color: {{VALUE}};',
				),
			)
		);

		$this->add_control(
			'form_break_prev_bg_color--normal',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__prev-page' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'form_break_prev--hover',
			array(
				'label' => __( 'Hover', 'jet-form-builder' ),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_break_prev_typography--hover',
				'selector' => $this->selector( '__prev-page:hover' ),
			)
		);

		$this->add_border(
			$this,
			'form_break_prev_border--hover',
			$this->selector( '__prev-page:hover' )
		);

		$this->add_control(
			'form_break_prev_color--hover',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__prev-page:hover' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_break_prev_bg_color--hover',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '__prev-page:hover' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->end_controls_tab();
		$this->end_controls_tabs();

		$this->end_controls_section();
	}

	private function section_form_break_disabled_style() {
		$this->start_controls_section(
			'section_form_break_disabled_style',
			array(
				'label' => __( 'Form Break Disabled Message', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->add_responsive_control(
			'form_break_disabled_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__next-page-msg' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_break_disabled_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '__next-page-msg' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_break_disabled_typography',
				'selector' => $this->selector( '__next-page-msg' ),
			)
		);

		$this->add_border(
			$this,
			'form_break_disabled_border',
			$this->selector( '__next-page-msg' )
		);

		$this->end_controls_section();
	}

	private function section_message_error_style() {
		$this->start_controls_section(
			'section_message_error_style',
			array(
				'label' => __( 'Messages', 'jet-form-builder' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->start_controls_tabs( 'section_messages_tabs' );

		$this->start_controls_tab(
			'messages_success_tab',
			array(
				'label' => __( 'Success Message', 'jet-form-builder' ),
			)
		);

		$this->add_responsive_control(
			'form_success_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-message--success' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_success_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-message--success' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_success_alignment',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'default'     => 'center',
				'separator'   => 'before',
				'options'     => array(
					'left'   => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '-message--success' ) => 'text-align: {{VALUE}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_success_typography',
				'selector' => $this->selector( '-message--success' ),
			)
		);

		$this->add_control(
			'form_success_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-message--success' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_success_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-message--success' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_border(
			$this,
			'form_success_border',
			$this->selector( '-message--success' )
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'messages_error_tab',
			array(
				'label' => __( 'Error Message', 'jet-form-builder' ),
			)
		);

		$this->add_responsive_control(
			'form_error_margin',
			array(
				'label'      => __( 'Margin', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-message--error' ) => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_error_padding',
			array(
				'label'      => __( 'Padding', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$this->selector( '-message--error' ) => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);

		$this->add_responsive_control(
			'form_error_alignment',
			array(
				'label'       => __( 'Alignment', 'jet-form-builder' ),
				'type'        => Controls_Manager::CHOOSE,
				'label_block' => false,
				'default'     => 'center',
				'separator'   => 'before',
				'options'     => array(
					'left'   => array(
						'title' => __( 'Left', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'jet-form-builder' ),
						'icon'  => 'eicon-h-align-right',
					),
				),
				'selectors'   => array(
					$this->selector( '-message--error' ) => 'text-align: {{VALUE}};',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			array(
				'name'     => 'form_error_typography',
				'selector' => $this->selector( '-message--error' ),
			)
		);

		$this->add_control(
			'form_error_color',
			array(
				'label'     => __( 'Color', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-message--error' ) => 'color: {{VALUE}};',
				),
			)
		);
		$this->add_control(
			'form_error_bg_color',
			array(
				'label'     => __( 'Background', 'jet-form-builder' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					$this->selector( '-message--error' ) => 'background-color: {{VALUE}};',
				),
			)
		);

		$this->add_border(
			$this,
			'form_error_border',
			$this->selector( '-message--error' )
		);

		$this->end_controls_tab();
		$this->end_controls_tabs();
		$this->end_controls_section();
	}


	private function add_border( $instance, $control_id, $selector ) {
		$instance->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'        => $control_id,
				'label'       => __( 'Border', 'jet-form-builder' ),
				'placeholder' => '1px',
				'selector'    => $selector,
			)
		);
		$instance->add_responsive_control(
			$control_id . '_radius',
			array(
				'label'      => __( 'Border Radius', 'jet-form-builder' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ),
				'selectors'  => array(
					$selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				),
			)
		);
	}

	/**
	 * Render the widget output on the frontend.
	 *
	 * Written in PHP and used to generate the final HTML.
	 *
	 * @since 1.1.0
	 *
	 * @access protected
	 */
	protected function render() {
		wp_print_styles( 'wp-block-library' );
		$settings = $this->get_settings_for_display();

		// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		echo jet_fb_render_form( $settings );
	}


}
