<?php
if (!defined('ABSPATH')) exit;  // if direct access
if (!class_exists('settings_tabs_field')) {
  class settings_tabs_field
  {

    public function allowed()
    {

      return  wp_kses_allowed_html('post');
    }
    public $custom = array(
      'select' => array(
        'name'     => true,
        'id'       => true,
        'class'    => true,
        'multiple' => true,
      ),
      'option' => array(
        'value'    => true,
        'selected' => true,
      ),
      'optgroup' => array(
        'label' => true,
      ),
      'input' => array(
        'type'  => true,
        'name'  => true,
        'value' => true,
        'class' => true,
        'id'    => true,
        'checked' => true,
        'placeholder' => true,
      ),

    );

    public function allowed_html()
    {

      return  array_merge($this->allowed(), $this->custom);
    }


    //public $asset_dir_url = '';
    public function __construct() {}









    function admin_scripts()
    {
      wp_enqueue_script('jquery');
      wp_enqueue_script('jquery-ui-sortable');
      wp_enqueue_script('jquery-ui-core');
      wp_enqueue_script('jquery-ui-accordion');
      wp_enqueue_style('jquery-ui');
      wp_enqueue_script('wp-color-picker');
      wp_enqueue_style('wp-color-picker');
      wp_enqueue_style('select2');
      wp_enqueue_script('select2');
      wp_enqueue_style('font-awesome-5');
      wp_enqueue_style('settings-tabs');
      wp_enqueue_script('settings-tabs');
      wp_enqueue_script('code-editor');
      wp_enqueue_style('code-editor');
      wp_enqueue_script('jquery.lazy');
      wp_enqueue_script('jquery-ui-datepicker');

      if (function_exists('wp_enqueue_editor')) {
        wp_enqueue_editor();
      }
    }
    function field_template($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $wraper_class            = isset($option['wraper_class']) ? $option['wraper_class'] : "";
      $conditions     = isset($option['conditions']) ? $option['conditions'] : array();
      $is_error             = isset($option['is_error']) ? $option['is_error'] : false;
      $error_details             = isset($option['error_details']) ? $option['error_details'] : '';
      if (!empty($conditions)) :
        $depends = '';
        $field = isset($conditions['field']) ? $conditions['field'] : '';
        $cond_value = isset($conditions['value']) ? $conditions['value'] : '';
        $type = isset($conditions['type']) ? $conditions['type'] : '';
        $pattern = isset($conditions['pattern']) ? $conditions['pattern'] : '';
        $modifier = isset($conditions['modifier']) ? $conditions['modifier'] : '';
        $like = isset($conditions['like']) ? $conditions['like'] : '';
        $strict = isset($conditions['strict']) ? $conditions['strict'] : '';
        $empty = isset($conditions['empty']) ? $conditions['empty'] : '';
        $sign = isset($conditions['sign']) ? $conditions['sign'] : '';
        $min = isset($conditions['min']) ? $conditions['min'] : '';
        $max = isset($conditions['max']) ? $conditions['max'] : '';
        $depends .= "{'[name=$field]':";
        $depends .= '{';
        if (!empty($type)) :
          $depends .= "'type':";
          $depends .= "'" . $type . "'";
        endif;
        if (!empty($modifier)) :
          $depends .= ",'modifier':";
          $depends .= "'" . $modifier . "'";
        endif;
        if (!empty($like)) :
          $depends .= ",'like':";
          $depends .= "'" . $like . "'";
        endif;
        if (!empty($strict)) :
          $depends .= ",'strict':";
          $depends .= "'" . $strict . "'";
        endif;
        if (!empty($empty)) :
          $depends .= ",'empty':";
          $depends .= "'" . $empty . "'";
        endif;
        if (!empty($sign)) :
          $depends .= ",'sign':";
          $depends .= "'" . $sign . "'";
        endif;
        if (!empty($min)) :
          $depends .= ",'min':";
          $depends .= "'" . $min . "'";
        endif;
        if (!empty($max)) :
          $depends .= ",'max':";
          $depends .= "'" . $max . "'";
        endif;
        if (!empty($cond_value)) :
          $depends .= ",'value':";
          if (is_array($cond_value)) :
            $count = count($cond_value);
            $i = 1;
            $depends .= "[";
            foreach ($cond_value as $val) :
              $depends .= "'" . $val . "'";
              if ($i < $count)
                $depends .= ",";
              $i++;
            endforeach;
            $depends .= "]";
          else :
            $depends .= "[";
            $depends .= "'" . $cond_value . "'";
            $depends .= "]";
          endif;
        endif;
        $depends .= '}}';
      endif;
      ob_start();
?>
      <div <?php if (!empty($depends)) { ?> data-depends="[<?php echo esc_attr($depends); ?>]" <?php } ?> class="setting-field <?php if ($is_error) echo 'field-error';  ?> <?php echo esc_attr($wraper_class); ?> <?php if (!empty($depends)) echo 'dependency-field'; ?>">
        <div class="field-lable ">%s</div>
        <div class="field-input">%s
          <p class="description">%s</p>
          <?php if ($is_error && !empty($error_details)) : ?>
            <p class="error-details"><i class="fas fa-exclamation-circle"></i> <?php echo esc_html($error_details); ?></p>
          <?php endif; ?>
        </div>
      </div>
    <?php
      return ob_get_clean();
    }
    function generate_field($option)
    {
      $id         = isset($option['id']) ? $option['id'] : "";
      $type         = isset($option['type']) ? $option['type'] : "";
      $details     = isset($option['details']) ? $option['details'] : "";
      if (empty($id)) return;
      if (isset($option['type']) && $option['type'] === 'select')                 $this->field_select($option);
      elseif (isset($option['type']) && $option['type'] === 'select2')            $this->field_select2($option);
      elseif (isset($option['type']) && $option['type'] === 'checkbox')            $this->field_checkbox($option);
      elseif (isset($option['type']) && $option['type'] === 'radio')                $this->field_radio($option);
      elseif (isset($option['type']) && $option['type'] === 'radio_image')        $this->field_radio_image($option);
      elseif (isset($option['type']) && $option['type'] === 'textarea')            $this->field_textarea($option);
      elseif (isset($option['type']) && $option['type'] === 'scripts_js')            $this->field_scripts_js($option);
      elseif (isset($option['type']) && $option['type'] === 'scripts_css')        $this->field_scripts_css($option);
      elseif (isset($option['type']) && $option['type'] === 'number')             $this->field_number($option);
      elseif (isset($option['type']) && $option['type'] === 'text')                 $this->field_text($option);
      elseif (isset($option['type']) && $option['type'] === 'text_icon')         $this->field_text_icon($option);
      elseif (isset($option['type']) && $option['type'] === 'text_multi')         $this->field_text_multi($option);
      elseif (isset($option['type']) && $option['type'] === 'hidden')             $this->field_hidden($option);
      elseif (isset($option['type']) && $option['type'] === 'range')             $this->field_range($option);
      elseif (isset($option['type']) && $option['type'] === 'colorpicker')        $this->field_colorpicker($option);
      elseif (isset($option['type']) && $option['type'] === 'colorpicker_multi')  $this->field_colorpicker_multi($option);
      elseif (isset($option['type']) && $option['type'] === 'datepicker')            $this->field_datepicker($option);
      elseif (isset($option['type']) && $option['type'] === 'faq')                $this->field_faq($option);
      elseif (isset($option['type']) && $option['type'] === 'addons_grid')        $this->field_addons_grid($option);
      elseif (isset($option['type']) && $option['type'] === 'custom_html')        $this->field_custom_html($option);
      elseif (isset($option['type']) && $option['type'] === 'repeatable')            $this->field_repeatable($option);
      elseif (isset($option['type']) && $option['type'] === 'media')                $this->field_media($option);
      elseif (isset($option['type']) && $option['type'] === 'media_url')            $this->field_media_url($option);
      elseif (isset($option['type']) && $option['type'] === 'option_group')        $this->field_option_group($option);
      elseif (isset($option['type']) && $option['type'] === 'option_group_accordion')        $this->field_option_group_accordion($option);
      elseif (isset($option['type']) && $option['type'] === 'wp_editor')        $this->field_wp_editor($option);
      elseif (isset($option['type']) && $option['type'] === 'textarea_editor')        $this->field_textarea_editor($option);
      elseif (isset($option['type']) && $option['type'] === $type)     do_action("settings_tabs_field_$type", $option);
    }
    public function field_option_group_accordion($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $sortable             = isset($option['sortable']) ? $option['sortable'] : false;
      $args_index     = isset($option['args_index']) ? $option['args_index'] : array();
      $args_index_default     = isset($option['args_index_default']) ? $option['args_index_default'] : array();
      $args_index_hide     = isset($option['args_index_hide']) ? $option['args_index_hide'] : array();
      $args_index = !empty($args_index) ? $args_index : $args_index_default;
      $args     = isset($option['args']) ? $option['args'] : array();
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $group_details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $group_details = '<span class="pro-feature">' . $pro_text . '</span> ' . $group_details;
      }
      ob_start();
    ?>
      <div class="option-group-accordion-wrap" id="<?php echo esc_attr($css_id); ?>">
        <div sortable="<?php echo esc_attr($sortable) ? 'true' :  'false'; ?>" class='option-group-accordion accordion'>
          <?php
          if (!empty($args_index))
            foreach ($args_index as $index) :
              //foreach( $args as $key => $value ):
              $group_title = isset($args[$index]['title']) ? $args[$index]['title'] : '';
              $is_hide = isset($args_index_hide[$index]) ? $args_index_hide[$index] : false;
              //$link = $value['link'];
              $options = isset($args[$index]['options']) ? $args[$index]['options'] : array();
          ?>
            <div class="group">
              <h3 class="accordion-title">
                <?php if ($sortable) : ?>
                  <span class="sort"><i class="fas fa-sort"></i></span>
                <?php endif; ?>
                <span class="title-text"><?php echo esc_html($group_title); ?></span>
              </h3>
              <div class="accordion-content">
                <?php
                if (!empty($options)) :
                  foreach ($options as $option) :
                    $id         = isset($option['id']) ? $option['id'] : "";
                    $type         = isset($option['type']) ? $option['type'] : "";
                    $details     = isset($option['details']) ? $option['details'] : "";
                    if (isset($option['type']) && $option['type'] === 'select')                 $this->field_select($option);
                    elseif (isset($option['type']) && $option['type'] === 'select2')            $this->field_select2($option);
                    elseif (isset($option['type']) && $option['type'] === 'checkbox')            $this->field_checkbox($option);
                    elseif (isset($option['type']) && $option['type'] === 'radio')                $this->field_radio($option);
                    elseif (isset($option['type']) && $option['type'] === 'radio_image')        $this->field_radio_image($option);
                    elseif (isset($option['type']) && $option['type'] === 'textarea')            $this->field_textarea($option);
                    elseif (isset($option['type']) && $option['type'] === 'scripts_js')            $this->field_scripts_js($option);
                    elseif (isset($option['type']) && $option['type'] === 'scripts_css')        $this->field_scripts_css($option);
                    elseif (isset($option['type']) && $option['type'] === 'number')             $this->field_number($option);
                    elseif (isset($option['type']) && $option['type'] === 'text')                 $this->field_text($option);
                    elseif (isset($option['type']) && $option['type'] === 'text_icon')         $this->field_text_icon($option);
                    elseif (isset($option['type']) && $option['type'] === 'text_multi')         $this->field_text_multi($option);
                    elseif (isset($option['type']) && $option['type'] === 'hidden')                 $this->field_hidden($option);
                    elseif (isset($option['type']) && $option['type'] === 'range')             $this->field_range($option);
                    elseif (isset($option['type']) && $option['type'] === 'colorpicker')        $this->field_colorpicker($option);
                    elseif (isset($option['type']) && $option['type'] === 'colorpicker_multi')  $this->field_colorpicker_multi($option);
                    elseif (isset($option['type']) && $option['type'] === 'datepicker')            $this->field_datepicker($option);
                    elseif (isset($option['type']) && $option['type'] === 'faq')                $this->field_faq($option);
                    elseif (isset($option['type']) && $option['type'] === 'addons_grid')        $this->field_addons_grid($option);
                    elseif (isset($option['type']) && $option['type'] === 'custom_html')        $this->field_custom_html($option);
                    elseif (isset($option['type']) && $option['type'] === 'repeatable')            $this->field_repeatable($option);
                    elseif (isset($option['type']) && $option['type'] === 'media')                $this->field_media($option);
                    elseif (isset($option['type']) && $option['type'] === 'media_url')            $this->field_media_url($option);
                  endforeach;
                endif;
                ?>
              </div> <!-- ..accordion-content -->
            </div><!-- .group -->
          <?php
            //endforeach;
            endforeach;
          ?>
        </div> <!-- .option-group-accordion -->
      </div><!-- .option-group-accordion-wrap -->
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($group_details)));
    }
    public function field_option_group($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $options     = isset($option['options']) ? $option['options'] : array();
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $group_details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $group_details = '<span class="pro-feature">' . $pro_text . '</span> ' . $group_details;
      }
      ob_start();
    ?>
      <div id="<?php echo esc_attr($css_id); ?>">
        <?php
        if (!empty($options)) :
          foreach ($options as $option) :
            $id         = isset($option['id']) ? $option['id'] : "";
            $type         = isset($option['type']) ? $option['type'] : "";
            $details     = isset($option['details']) ? $option['details'] : "";
            if (isset($option['type']) && $option['type'] === 'select')                 $this->field_select($option);
            elseif (isset($option['type']) && $option['type'] === 'select2')            $this->field_select2($option);
            elseif (isset($option['type']) && $option['type'] === 'checkbox')            $this->field_checkbox($option);
            elseif (isset($option['type']) && $option['type'] === 'radio')                $this->field_radio($option);
            elseif (isset($option['type']) && $option['type'] === 'radio_image')        $this->field_radio_image($option);
            elseif (isset($option['type']) && $option['type'] === 'textarea')            $this->field_textarea($option);
            elseif (isset($option['type']) && $option['type'] === 'scripts_js')            $this->field_scripts_js($option);
            elseif (isset($option['type']) && $option['type'] === 'scripts_css')        $this->field_scripts_css($option);
            elseif (isset($option['type']) && $option['type'] === 'number')             $this->field_number($option);
            elseif (isset($option['type']) && $option['type'] === 'text')                 $this->field_text($option);
            elseif (isset($option['type']) && $option['type'] === 'text_icon')         $this->field_text_icon($option);
            elseif (isset($option['type']) && $option['type'] === 'text_multi')         $this->field_text_multi($option);
            elseif (isset($option['type']) && $option['type'] === 'hidden')             $this->field_hidden($option);
            elseif (isset($option['type']) && $option['type'] === 'range')             $this->field_range($option);
            elseif (isset($option['type']) && $option['type'] === 'colorpicker')        $this->field_colorpicker($option);
            elseif (isset($option['type']) && $option['type'] === 'colorpicker_multi')  $this->field_colorpicker_multi($option);
            elseif (isset($option['type']) && $option['type'] === 'datepicker')            $this->field_datepicker($option);
            elseif (isset($option['type']) && $option['type'] === 'faq')                $this->field_faq($option);
            elseif (isset($option['type']) && $option['type'] === 'addons_grid')        $this->field_addons_grid($option);
            elseif (isset($option['type']) && $option['type'] === 'custom_html')        $this->field_custom_html($option);
            elseif (isset($option['type']) && $option['type'] === 'repeatable')            $this->field_repeatable($option);
            elseif (isset($option['type']) && $option['type'] === 'media')                $this->field_media($option);
            elseif (isset($option['type']) && $option['type'] === 'media_url')            $this->field_media_url($option);
          endforeach;
        endif;
        ?>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($group_details)), $this->allowed_html());
    }
    public function field_media($option)
    {
      $id            = isset($option['id']) ? $option['id'] : "";
      if (empty($id)) return;
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $field_name     = isset($option['field_name']) ? $option['field_name'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $title            = isset($option['title']) ? $option['title'] : "";
      $placeholder    = isset($option['placeholder']) ? $option['placeholder'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $default            = isset($option['default']) ? $option['default'] : '';
      $value            = isset($option['value']) ? $option['value'] : '';
      $value          = !empty($value) ?  $value : $default;
      $media_url    = wp_get_attachment_url($value);
      $media_type    = get_post_mime_type($value);
      $media_title = !empty($value) ? get_the_title($value) : "Placeholder";
      $media_url = !empty($media_url) ? $media_url : $default;
      $media_url = !empty($media_url) ? $media_url : $placeholder;
      $media_basename = wp_basename($media_type);
      $field_name     = !empty($field_name) ? $field_name : $id;
      $field_name = !empty($parent) ? $parent . '[' . $field_name . ']' : $field_name;
      ob_start();
      //wp_enqueue_media();
    ?>
      <div id="input-wrapper-<?php echo esc_attr($css_id); ?>" class="input-wrapper field-media-wrapper
            field-media-wrapper-<?php echo esc_attr($css_id); ?>">
        <div class="media-preview-wrap" style="width: 150px;margin-bottom: 10px;background: #eee;padding: 5px;    text-align: center;word-break: break-all;">
          <?php
          if ("audio/mpeg" == $media_type) {
          ?>
            <div class="media-preview" class="dashicons dashicons-format-audio" style="font-size: 70px;display: inline;"></div>
            <div class="media-title"><?php echo esc_html($media_title); ?></div>
          <?php
          } elseif (
            "images/png" == $media_type ||
            "image/png" == $media_type ||
            "images/gif" == $media_type  ||
            "image/gif" == $media_type  ||
            "images/jpeg" == $media_type ||
            "image/jpeg" == $media_type ||
            "images/jpg" == $media_type ||
            "image/jpg" == $media_type ||
            "images/ico" == $media_type ||
            "image/ico" == $media_type
          ) {
          ?>
            <img class="media-preview" src="<?php echo esc_url($media_url); ?>" style="width:100%" />
            <div class="media-title"><?php echo esc_html($media_title); ?></div>
          <?php
          } else {
          ?>
            <img class="media-preview" src="<?php echo esc_url($media_url); ?>" style="width:100%" />
            <div class="media-title"><?php echo esc_html($media_title); ?></div>
          <?php
          }
          ?>
        </div>
        <input class="media-input-value" type="hidden" name="<?php echo esc_attr($field_name); ?>" id="media_input_<?php echo esc_attr($css_id); ?>" value="<?php echo esc_attr($value); ?>" />
        <div class="media-upload button" id="media_upload_<?php echo esc_attr($css_id); ?>">
          <?php echo "Upload"; ?></div>
        <div placeholder="<?php echo esc_attr($placeholder); ?>" class="clear button" id="media_clear_<?php echo esc_attr($css_id); ?>"><?php echo 'Clear'; ?></div>
        <div class="error-mgs"></div>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_media_url($option)
    {
      $id            = isset($option['id']) ? $option['id'] : "";
      if (empty($id)) return;
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $field_name     = isset($option['field_name']) ? $option['field_name'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder    = isset($option['placeholder']) ? $option['placeholder'] : "";
      $placeholder_img    = isset($option['placeholder_img']) ? $option['placeholder_img'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $default            = isset($option['default']) ? $option['default'] : '';
      $value            = isset($option['value']) ? $option['value'] : '';
      $value          = !empty($value) ?  $value : $default;
      $media_url    = $value;
      $media_type    = get_post_mime_type($value);
      $media_title = get_the_title($value);
      $media_url = !empty($media_url) ? $media_url : '';
      $media_url = !empty($media_url) ? $media_url : $placeholder_img;
      $field_name     = !empty($field_name) ? $field_name : $id;
      $field_name = !empty($parent) ? $parent . '[' . $field_name . ']' : $field_name;
      wp_enqueue_media();
      ob_start();
    ?>
      <div id="input-wrapper-<?php echo esc_attr($css_id); ?>" class="input-wrapper field-media-url-wrapper
            field-media-wrapper-<?php echo esc_attr($css_id); ?>">
        <div class="media-preview-wrap" style="width: 150px;margin-bottom: 10px;background: #eee;padding: 5px;    text-align: center;">
          <?php
          if ("audio/mpeg" == $media_type) {
          ?>
            <div class="media-preview" class="dashicons dashicons-format-audio" style="font-size: 70px;display: inline;"></div>
          <?php
          } elseif (
            "images/png" == $media_type || "images/jpg" == $media_type || "images/jpeg" == $media_type ||
            "images/gif" == $media_type  ||
            "images/ico" == $media_type
          ) {
          ?>
            <img class="media-preview" src="<?php echo esc_url($media_url); ?>" style="width:100%" />
          <?php
          } else {
          ?>
            <img class="media-preview" src="<?php echo esc_url($media_url); ?>" style="width:100%" />
          <?php
          }
          ?>
        </div>
        <input type="text" placeholder="<?php echo esc_attr($placeholder); ?>" name="<?php echo esc_attr($field_name); ?>" id="media_input_<?php echo esc_attr($css_id); ?>" value="<?php echo esc_attr($value); ?>" />
        <div class="media-upload button" id="media_upload_<?php echo esc_attr($css_id); ?>">
          <?php echo 'Upload'; ?></div>
        <div class="clear button" id="media_clear_<?php echo esc_attr($css_id); ?>">
          <?php echo 'Clear'; ?></div>
        <div class="error-mgs"></div>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_repeatable($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      if (empty($id)) return;
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_name     = isset($option['field_name']) ? $option['field_name'] : $id;
      $field_name     = !empty($parent) ? $parent . '[' . $field_name . ']' : $field_name;
      $sortable         = isset($option['sortable']) ? $option['sortable'] : true;
      $collapsible     = isset($option['collapsible']) ? $option['collapsible'] : true;
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $values            = isset($option['value']) ? $option['value'] : array();
      $fields         = isset($option['fields']) ? $option['fields'] : array();
      $title_field     = isset($option['title_field']) ? $option['title_field'] : '';
      $remove_text     = isset($option['remove_text']) ? $option['remove_text'] : '<i class="fas fa-times"></i>';
      $limit             = isset($option['limit']) ? $option['limit'] : '';
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $settings_tabs_field = new settings_tabs_field();
      ob_start();
    ?>
      <div class="item-wrap collapsible">
        <div class="header">
          <span class="remove" onclick="jQuery(this).parent().parent().remove()"><?php echo wp_kses_post($remove_text); ?></span>
          <?php
          if ($sortable) :
          ?>
            <span class="sort"><i class="fas fa-arrows-alt"></i></span>
          <?php
          endif;
          ?>
          <span class="title-text">#TIMEINDEX</span>
        </div>
        <?php
        if (!empty($fields)) :
          foreach ($fields as $field) :
            $fieldType = isset($field['type']) ? $field['type'] : '';
            $field['parent'] = $field_name . '[TIMEINDEX]';
        ?>
            <div class="item">
              <?php if ($collapsible) : ?>
                <div class="content">
                <?php endif; ?>
                <?php
                $settings_tabs_field->generate_field($field);
                ?>
                <?php if ($collapsible) : ?>
                </div>
              <?php endif; ?>
            </div>
        <?php
          endforeach;
        endif;
        ?>
      </div>
      <?php
      $fieldHtml = ob_get_clean();
      $fieldHtml = preg_replace("/[\r\n]+/", "\n", $fieldHtml);
      $fieldHtml = preg_replace("/\s+/", ' ', $fieldHtml);
      ob_start();
      ?>
      <div id="input-wrapper-<?php echo esc_attr($css_id); ?>" class=" input-wrapper field-repeatable-wrapper
            field-repeatable-wrapper-<?php echo esc_attr($css_id); ?>">
        <div data-add_html="<?php echo esc_attr($fieldHtml); ?>" class="add-repeat-field" data-wrapper-id="<?php echo esc_attr($css_id); ?>"><i class="far fa-plus-square"></i>
          <?php echo 'Add'; ?></div>
        <div class="repeatable-field-list sortable" id="<?php echo esc_attr($css_id); ?>">
          <?php
          if (!empty($values)) :
            $count = 1;
            foreach ($values as $index => $val) :
              $title_field_val = !empty($val[$title_field]) ? $val[$title_field] : '#' . $count;
          ?>
              <div class="item-wrap <?php if ($collapsible) echo 'collapsible'; ?>" index="<?php echo esc_attr($index); ?>">
                <?php if ($collapsible) : ?>
                  <div class="header">
                  <?php endif; ?>
                  <span class="remove" onclick="jQuery(this).parent().parent().remove()"><?php echo wp_kses_post($remove_text); ?></span>
                  <?php if ($sortable) : ?>
                    <span class="sort"><i class="fas fa-arrows-alt"></i></span>
                  <?php endif; ?>
                  <span class="title-text"><?php echo esc_html($title_field_val); ?></span>
                  <?php if ($collapsible) : ?>
                  </div>
                <?php endif; ?>
                <?php
                foreach ($fields as $field_index => $field) :
                  $fieldId = $field['id'];
                  $field_css_id = isset($field['css_id']) ? str_replace('TIMEINDEX', $index, $field['css_id']) : '';
                  $title_field_class = ($title_field == $field_index) ? 'title-field' : '';
                ?>
                  <div class="item <?php echo esc_attr($title_field_class); ?>">
                    <?php if ($collapsible) : ?>
                      <div class="content">
                      <?php endif; ?>
                      <?php
                      $field['parent'] = $field_name . '[' . $index . ']';
                      $field['css_id'] = $field_css_id;
                      $field['value'] = isset($val[$fieldId]) ? $val[$fieldId] : '';
                      $settings_tabs_field->generate_field($field);
                      if ($collapsible) : ?>
                      </div>
                    <?php endif; ?>
                  </div>
                <?php
                endforeach; ?>
              </div>
            <?php
              $count++;
            endforeach;
          else :
            ?>
          <?php
          endif;
          ?>
        </div>
        <div class="error-mgs"></div>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_select($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $args     = isset($option['args']) ? $option['args'] : array();
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $disabled     = isset($option['disabled']) ? $option['disabled'] : false;
      $disabledMessage     = isset($option['disabledMessage']) ? $option['disabledMessage'] : '';
      $multiple     = isset($option['multiple']) ? $option['multiple'] : false;
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      if ($multiple) {
        $value     = isset($option['value']) ? $option['value'] : array();
        $field_name = !empty($parent) ? $parent . '[' . $id . '][]' : $id . '[]';
        $default     = isset($option['default']) ? $option['default'] : array();
      } else {
        $value     = isset($option['value']) ? $option['value'] : '';
        $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
        $default     = isset($option['default']) ? $option['default'] : '';
      }
      $value = !empty($value) ? $value : $default;
      ob_start();
    ?>
      <select <?php if ($multiple) echo 'multiple'; ?> <?php if ($disabled) echo 'disabled'; ?> name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>">
        <?php
        foreach ($args as $key => $name) :
          if ($multiple) {
            $selected =  in_array($key, $value) ? "selected" : "";
          } else {
            $selected = $value == $key ? "selected" : "";
          }
        ?>
          <option <?php echo esc_attr($selected); ?> value="<?php echo esc_attr($key); ?>"><?php echo esc_html($name); ?>
          </option>
        <?php
        endforeach;
        ?>
      </select>
      <?php
      if ($multiple) :
      ?>
        <div class="button select-reset"><?php echo 'Reset'; ?></div><br>
      <?php
      endif;
      ?>
      <?php if ($disabled) : ?>
        <div class="disabled"><?php echo wp_kses_post($disabledMessage); ?></div>
      <?php endif; ?>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_select2($option)
    {
      $id                 = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $args                 = isset($option['args']) ? $option['args'] : array();
      $multiple             = isset($option['multiple']) ? $option['multiple'] : "";
      $attributes         = isset($option['attributes']) ? $option['attributes'] : array();
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro             = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text             = isset($option['pro_text']) ? $option['pro_text'] : '';
      if ($multiple) {
        $value     = isset($option['value']) ? $option['value'] : array();
        $field_name = !empty($parent) ? $parent . '[' . $id . '][]' : $id . '[]';
        $default     = isset($option['default']) ? $option['default'] : array();
      } else {
        $value     = isset($option['value']) ? $option['value'] : '';
        $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
        $default     = isset($option['default']) ? $option['default'] : '';
      }
      $value = !empty($value) ? $value : $default;
      //$value	= get_post_meta( $post_id, $id, true );
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $attributes_html = '';
      foreach ($attributes as $attributeId => $attribute) :
        $attributes_html = $attributeId . '=' . $attribute . ' ';
      endforeach;
      ob_start();
    ?>
      <select <?php echo esc_attr($attributes_html); ?> class="select2" <?php if ($multiple) echo 'multiple'; ?> name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>">
        <?php
        foreach ($args as $key => $name) :
          if ($multiple) {
            $selected = in_array($key, $value) ? "selected" : "";
          } else {
            $selected = ($key == $value) ? "selected" : "";
          }
        ?>
          <option <?php echo esc_attr($selected); ?> value="<?php echo esc_attr($key); ?>"><?php echo esc_html($name); ?>
          </option>
        <?php
        endforeach;
        ?>
      </select>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_text_multi($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $default     = isset($option['default']) ? $option['default'] : array();
      $values     = isset($option['value']) ? $option['value'] : $default;
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $remove_text     = isset($option['remove_text']) ? $option['remove_text'] : '<i class="fas fa-times"></i>';
      $sortable         = isset($option['sortable']) ? $option['sortable'] : true;
      $allow_clone         = isset($option['allow_clone']) ? $option['allow_clone'] : false;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <div id="input-wrapper-<?php echo esc_attr($id); ?>" class="input-wrapper input-text-multi-wrapper
            input-text-multi-wrapper-<?php echo esc_attr($css_id); ?>">
        <span data-placeholder="<?php echo esc_attr($placeholder); ?>" data-sort="<?php echo esc_attr($sortable); ?>" data-clone="<?php echo esc_attr($allow_clone); ?>" data-name="<?php echo esc_attr($field_name); ?>[]" class="button add-item"><?php echo 'Add'; ?></span>
        <div class="field-list <?php if ($sortable) {
                                  echo 'sortable';
                                } ?>" id="<?php echo esc_attr($css_id); ?>">
          <?php
          if (!empty($values)) :
            foreach ($values as $value) :
          ?>
              <div class="item">
                <input type="text" name="<?php echo esc_attr($field_name); ?>[]" placeholder="<?php
                                                                                              echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($value); ?>" />
                <?php if ($allow_clone) : ?>
                  <span class="button clone"><i class="far fa-clone"></i></span>
                <?php endif; ?>
                <?php if ($sortable) : ?>
                  <span class="button sort"><i class="fas fa-arrows-alt"></i></span>
                <?php endif; ?>
                <span class="button remove" onclick="jQuery(this).parent().remove()"><?php echo wp_kses_post($remove_text); ?></span>
              </div>
            <?php
            endforeach;
          else :
            ?>
            <div class="item">
              <input type="text" name="<?php echo esc_attr($field_name); ?>[]" placeholder="<?php
                                                                                            echo esc_attr($placeholder); ?>" value="" />
              <?php if ($allow_clone) : ?>
                <span class="button clone"><i class="far fa-clone"></i></span>
              <?php endif; ?>
              <?php if ($sortable) : ?>
                <span class="button sort"><i class="fas fa-arrows-alt"></i></span>
              <?php endif; ?>
              <span class="button remove" onclick="jQuery(this).parent().remove()"><?php echo wp_kses_post($remove_text); ?></span>
            </div>
          <?php
          endif;
          ?>
        </div>
        <div class="error-mgs"></div>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_hidden($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <input type="hidden" class="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($value); ?>" />
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_text($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $default     = isset($option['default']) ? $option['default'] : '';
      $value     = isset($option['value']) ? $option['value'] : $default;
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <input type="text" class="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($value); ?>" />
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_number($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <input type="number" class="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($value); ?>" />
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_wp_editor($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      $editor_settings = isset($option['editor_settings']) ? $option['editor_settings'] : array('textarea_name' => $field_name, 'teeny' => true,  'textarea_rows' => 15,);
      ob_start();
    ?>
      <div id="field-wrapper-<?php echo esc_attr($id); ?>" class="<?php if (!empty($depends)) echo 'dependency-field'; ?> field-wrapper field-wp_editor-wrapper
            field-wp_editor-wrapper-<?php echo esc_attr($id); ?>">
        <?php
        wp_editor($value, $css_id, $editor_settings);
        ?>
        <div class="error-mgs"></div>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_text_icon($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $option_value = empty($value) ? $default : $value;
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <div class="text-icon">
        <span class="icon"><?php echo esc_html($option_value); ?></span><input type="text" class="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($option_value); ?>" />
      </div>


    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_range($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $args     = isset($option['args']) ? $option['args'] : "";
      $min = isset($args['min']) ? $args['min'] : '';
      $max = isset($args['max']) ? $args['max'] : '';
      $step = isset($args['step']) ? $args['step'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <div class="range-input">
        <span class="range-value"><?php echo esc_html($value); ?></span><input type="range" min="<?php if ($min) echo esc_attr($min); ?>" max="<?php if ($max) echo esc_attr($max); ?>" step="<?php if ($step) echo esc_attr($step); ?>" class="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" class="range" value="<?php echo esc_attr($value); ?>" />
      </div>


    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_textarea($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      ob_start();
    ?>
      <textarea name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" cols="40" rows="5" placeholder="<?php echo esc_attr($placeholder); ?>"><?php echo esc_html($value); ?></textarea>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_textarea_editor($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      if ($is_pro == true) {
        $details = '<span class="pro-feature">' . $pro_text . '</span> ' . $details;
      }
      ob_start();
    ?>
      <textarea editor_enabled="no" class="textarea-editor" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" cols="40" rows="5" placeholder="<?php echo esc_attr($placeholder); ?>"><?php echo esc_html($value); ?></textarea>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_scripts_js($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <textarea name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" class="code-editor" cols="40" rows="5" placeholder="<?php echo esc_attr($placeholder); ?>"><?php echo esc_html($value); ?></textarea>

    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_scripts_css($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details         = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
    ?>
      <?php
      ob_start();
      ?>
      <textarea name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" class="css_editor" cols="40" rows="5" placeholder="<?php echo esc_attr($placeholder); ?>"><?php echo esc_html($value); ?></textarea>

    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_checkbox($option)
    {
      $id                = isset($option['id']) ? $option['id'] : "";
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $title            = isset($option['title']) ? $option['title'] : "";
      $details         = isset($option['details']) ? $option['details'] : "";
      $for         = isset($option['for']) ? $option['for'] : "";
      $args            = isset($option['args']) ? $option['args'] : array();
      $style            = isset($option['style']) ? $option['style'] : array();
      $style_inline            = isset($style['inline']) ? $style['inline'] : true;
      $option_value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $option_value = !empty($option_value) ? $option_value : $default;
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
    ?>
      <div class="setting-field">
        <div class="field-lable"><?php if (!empty($title)) echo esc_html($title);  ?></div>
        <div class="field-input">
          <?php
          if (!empty($args))
            foreach ($args as $key => $value) :
              //$checked = ( $key == $option_value ) ? "checked" : "";
              $checked = in_array($key, $option_value) ? "checked" : "";
              $for = !empty($for) ? $for . '-' . $id . "-" . $key : $id . "-" . $key;
          ?>
            <label for='<?php echo esc_attr($for); ?>'><input name='<?php echo esc_attr($field_name); ?>[]' type='checkbox' id='<?php echo esc_attr($for); ?>' value='<?php echo esc_attr($key); ?>' <?php echo esc_attr($checked); ?>><span><?php echo esc_html($value); ?></span></label>
            <?php
              if (!$style_inline) {
            ?>
              <br>
          <?php
              }
            endforeach;
          ?>
          <p class="description"><?php if (!empty($details)) echo esc_html($details);  ?></p>
        </div>
      </div>
      <?php
    }
    public function field_radio($option)
    {
      $id                = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $title            = isset($option['title']) ? $option['title'] : "";
      $details         = isset($option['details']) ? $option['details'] : "";
      $for         = isset($option['for']) ? $option['for'] : "";
      $args            = isset($option['args']) ? $option['args'] : array();
      $style            = isset($option['style']) ? $option['style'] : array();
      $style_inline            = isset($style['inline']) ? $style['inline'] : true;
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $option_value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $option_value = !empty($option_value) ? $option_value : $default;
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
      if (!empty($args))
        foreach ($args as $key => $value) :
          $for = '';
          $checked = ($key == $option_value) ? "checked" : "";
          $for = !empty($for) ? $for . '-' . $css_id . "-" . $key : $css_id . "-" . $key;
      ?>
        <label for="<?php echo esc_attr($for); ?>"><input name="<?php echo esc_attr($field_name); ?>" type="radio" id="<?php echo esc_attr($for); ?>" value="<?php echo esc_attr($key); ?>" <?php echo esc_attr($checked); ?>><span><?php echo esc_html($value); ?></span></label>
        <?php
          if (!$style_inline) {
        ?>
          <br>
      <?php
          }
        endforeach;
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_radio_image($option)
    {
      $id                = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $args            = isset($option['args']) ? $option['args'] : array();
      //$args			= is_array( $args ) ? $args : $this->generate_args_from_string( $args );
      $option_value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $lazy_load_img     = isset($option['lazy_load_img']) ? $option['lazy_load_img'] : '';
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $width             = isset($option['width']) ? $option['width'] : "250px";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      $option_value = empty($option_value) ? $default : $option_value;
      ob_start();
      ?>
      <div class="radio-img">
        <?php
        foreach ($args as $key => $value) :
          $name = isset($value['name']) ? $value['name'] : '';
          $thumb = isset($value['thumb']) ? $value['thumb'] : '';
          $disabled = isset($value['disabled']) ? $value['disabled'] : '';
          $pro_msg = isset($value['pro_msg']) ? $value['pro_msg'] : '';
          $link = isset($value['link']) ? $value['link'] : '';
          $link_text = isset($value['link_text']) ? $value['link_text'] : 'Go';
          $checked = ($key == $option_value) ? "checked" : "";
        ?>
          <label style="width: <?php echo esc_attr($width); ?>;" title="<?php echo esc_attr($name); ?>" data-value="<?php echo esc_attr($key); ?>" class="<?php if ($checked == 'checked') echo 'active'; ?> <?php if ($disabled == true) echo 'disabled'; ?>">
            <input <?php if ($disabled) echo 'disabled'; ?> name="<?php echo esc_attr($field_name); ?>" type="radio" id="<?php echo esc_attr($css_id); ?>-<?php echo esc_attr($key); ?>" value="<?php echo esc_attr($key); ?>" <?php echo esc_attr($checked); ?>>
            <?php
            if (!empty($thumb)) :
            ?>
              <img alt="<?php echo esc_attr($name); ?>" src="<?php echo esc_url($thumb); ?>">
              <div class="name"><?php echo esc_html($name); ?></div>
            <?php
            else :
              echo esc_html($name);
            endif;
            ?>
            <?php if ($disabled == true) : ?>
              <span class="pro-msg"><?php echo esc_html($pro_msg); ?></span>
            <?php endif; ?>
            <?php if (!empty($link)) : ?>
              <a target="_blank" class="link" href="<?php echo esc_url($link); ?>"><?php echo esc_html($link_text); ?></a>
            <?php endif; ?>
          </label>
        <?php
        endforeach;
        ?>
      </div>
    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_datepicker($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $format     = isset($option['format']) ? $option['format'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;

      ob_start();
    ?>
      <input type="text" autocomplete="off" name="<?php echo esc_attr($field_name); ?>" class="datepicker" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr($placeholder); ?>" value="<?php echo esc_attr($value); ?>" format="<?php echo esc_attr($format); ?>" />

    <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_colorpicker($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $placeholder     = isset($option['placeholder']) ? $option['placeholder'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
    ?>
      <input class="color-picker" colorPicker="" name="<?php echo esc_attr($field_name); ?>" id="<?php echo esc_attr($css_id); ?>" placeholder="<?php echo esc_attr(esc_attr($placeholder)); ?>" value="<?php echo esc_attr($value); ?>" />
      <?php
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_colorpicker_multi($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $args     = isset($option['args']) ? $option['args'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $value     = isset($option['value']) ? $option['value'] : '';
      $default     = isset($option['default']) ? $option['default'] : '';
      $value = !empty($value) ? $value : $default;
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      $field_name = !empty($parent) ? $parent . '[' . $id . ']' : $id;
      ob_start();
      if (!empty($args)) :
        foreach ($args as $arg_key => $arg) :
          $item_value = isset($value[$arg_key]) ? $value[$arg_key] : $arg;
      ?>
          <div class="">
            <span><?php echo esc_html($arg_key); ?></span>
            <input name="<?php echo esc_attr($field_name); ?>[<?php echo esc_attr($arg_key); ?>]" id="<?php echo esc_attr($arg_key . '-' . $css_id); ?>" class="color-picker" value="<?php echo esc_attr($item_value); ?>" />

          </div>
<?php
        endforeach;
      endif;
      $input_html = ob_get_clean();
      echo wp_kses(sprintf($field_template, esc_html($title), $input_html, wp_kses_post($details)), $this->allowed_html());
    }
    public function field_custom_html($option)
    {
      $id             = isset($option['id']) ? $option['id'] : "";
      $css_id             = isset($option['css_id']) ? $option['css_id'] : $id;
      $parent             = isset($option['parent']) ? $option['parent'] : "";
      $field_template     = isset($option['field_template']) ? $option['field_template'] : $this->field_template($option);
      $html     = isset($option['html']) ? $option['html'] : "";
      $is_pro     = isset($option['is_pro']) ? $option['is_pro'] : false;
      $pro_text     = isset($option['pro_text']) ? $option['pro_text'] : '';
      $title            = isset($option['title']) ? $option['title'] : "";
      $details             = isset($option['details']) ? $option['details'] : "";
      echo wp_kses(sprintf($field_template, esc_html($title), $html, wp_kses_post($details)), $this->allowed_html());
    }
  }
}
