?? GreyFile — Mystic File Browser

Current path: home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Frontend/ContactField/



?? Go up: /home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Frontend

?? Viewing: ContactFieldConversionOutline.php

<?php

namespace KS_PAC_DCFH\Frontend\ContactField;

if (!defined('ABSPATH')) {
    exit;
}

class ContactFieldConversionOutline
{
    public function load(): void
    {
        add_filter(
            'divi.moduleLibrary.conversion.moduleConversionOutline',
            [$this, 'maybe_module_conversion_outline'],
            10,
            2
        );
    }

    public function maybe_module_conversion_outline($conversion_outline, $module_name)
    {
        if ('divi/contact-field' !== $module_name) {
            return $conversion_outline;
        }
        // ==========================
        // Field Type Options
        // ==========================
        $conversion_outline['module']['field_type'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_file_upload'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_datetime'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_signature_pad'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_star_rating'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_field_html'] = 'fieldItem.advanced.type.*';
        $conversion_outline['module']['use_custom_phone_format'] = 'fieldItem.advanced.type.*';
        // ==========================
        // Placeholder & Description
        // ==========================
        $conversion_outline['module']['use_field_placeholder'] = 'fieldCustomItem.advanced.hidePlaceholder.*';
        $conversion_outline['module']['field_placeholder'] = 'fieldCustomItem.innerContent.placeholderText.*';
        $conversion_outline['module']['field_description'] = 'fieldCustomItem.innerContent.descriptionText.*';
        $conversion_outline['module']['field_description_location'] = 'fieldCustomItem.advanced.descriptionPosition.*';
        // ==========================
        // Field Label & Layout
        // ==========================
        $conversion_outline['module']['use_field_label'] = 'fieldCustomLayout.advanced.showLabel.*';
        $conversion_outline['module']['show_field_labels_left'] = 'fieldCustomLayout.advanced.showLabelOnLeft.*';
        $conversion_outline['module']['field_label_width'] = 'fieldCustomLayout.advanced.labelWidth.*';
        $conversion_outline['module']['textarea_min_height'] = 'fieldCustomLayout.advanced.textAreaHeight.*';
        // ==========================
        // Field Requirements & Validation
        // ==========================
        $conversion_outline['module']['use_required_asterisk'] = 'fieldCustomItem.advanced.showAsterisk.*';
        $conversion_outline['module']['custom_phone_format'] = 'fieldCustomItem.innerContent.phoneNumberPattern.*';
        // ==========================
        // Value Expansion Function Map
        // ==========================
        $conversion_outline['valueExpansionFunctionMap'] = [
            'field_type' => [$this, 'convert_field_type'],
            'use_custom_phone_format' => [$this, 'convert_phone_input'],
        ];
        // ==========================
        // Field Icon
        // ==========================
        $conversion_outline['module']['use_field_icon'] = "fieldIcon.advanced.showIcon.*";
        $conversion_outline['module']['field_icon'] = "fieldIcon.advanced.icon.*";
        $conversion_outline['module']['field_icon_color'] = "fieldIcon.decoration.iconColor.*";
        $conversion_outline['valueExpansionFunctionMap']['field_icon'] = [$this, 'convert_icon'];
        // ==========================
        // Dropdown & Search Options
        // ==========================
        $conversion_outline['module']['use_dropdown_search'] = 'fieldCustomItem.advanced.searchInDropdownEnabled.*';
        $conversion_outline['valueExpansionFunctionMap']['select_options'] = [$this, 'sortable_list_converter'];
        $conversion_outline['valueExpansionFunctionMap']['booleancheckbox_options'] = [$this, 'sortable_list_converter'];
        // ==========================
        // Checkboxes
        // ==========================
        $conversion_outline['module']['checkbox_options'] = 'fieldItem.advanced.checkboxOptions.*';
        $conversion_outline['module']['checkbox_layout'] = 'fieldCustomLayout.advanced.checkboxLayout.*';
        $conversion_outline['module']['checkbox_columns'] = 'fieldCustomLayout.advanced.checkboxColumns.*';
        $conversion_outline['valueExpansionFunctionMap']['checkbox_options'] = [$this, 'sortable_list_converter'];
        $conversion_outline['valueExpansionFunctionMap']['checkbox_layout'] = [$this, 'convert_checkboxradio_layout'];
        $conversion_outline['valueExpansionFunctionMap']['checkbox_columns'] = [$this, 'convert_checkboxradio_columns'];
        // ==========================
        // Radio Buttons
        // ==========================
        $conversion_outline['module']['radio_options'] = 'fieldItem.advanced.radioOptions.*';
        $conversion_outline['module']['radio_layout'] = 'fieldCustomLayout.advanced.radioLayout.*';
        $conversion_outline['module']['radio_columns'] = 'fieldCustomLayout.advanced.radioColumns.*';
        $conversion_outline['valueExpansionFunctionMap']['radio_options'] = [$this, 'sortable_list_converter'];
        $conversion_outline['valueExpansionFunctionMap']['radio_layout'] = [$this, 'convert_checkboxradio_layout'];
        $conversion_outline['valueExpansionFunctionMap']['radio_columns'] = [$this, 'convert_checkboxradio_columns'];
        // ==========================
        // File Upload
        // ==========================
        $conversion_outline['module']['file_size'] = 'fileUpload.innerContent.maxFileSize.*';
        $conversion_outline['module']['files_limit'] = 'fileUpload.innerContent.maxFileCount.*';
        $conversion_outline['module']['file_mime'] = 'fileUpload.advanced.allowedFileTypes.*';
        $conversion_outline['valueExpansionFunctionMap']['use_file_upload'] = [$this, 'convert_file_upload_type'];
        $conversion_outline['valueExpansionFunctionMap']['file_mime'] = [$this, 'convert_file_mime'];
        // ==========================
        // Date Picker
        // ==========================
        $conversion_outline['module']['datetime_type'] = 'dateTimePicker.advanced.pickerFieldType.*';
        $conversion_outline['module']['datetime_format'] = 'dateTimePicker.advanced.dateTimeFormat.*';
        $conversion_outline['module']['date_format'] = 'dateTimePicker.advanced.dateFormat.*';
        $conversion_outline['module']['custom_date_format'] = 'dateTimePicker.innerContent.customDateFormat.*';
        $conversion_outline['module']['time_format'] = 'dateTimePicker.advanced.timeFormat.*';
        $conversion_outline['module']['custom_time_format'] = 'dateTimePicker.innerContent.customTimeFormat.*';
        $conversion_outline['module']['disabled_past_times'] = 'dateTimePicker.advanced.disablePastTimes.*';
        $conversion_outline['module']['datetime_week_start'] = 'dateTimePicker.advanced.dayOfWeekStart.*';
        $conversion_outline['module']['datetime_disabled_week_days'] = 'dateTimePicker.advanced.disabledDaysOfWeek.*';
        $conversion_outline['module']['datetime_disabled_weeks'] = 'dateTimePicker.advanced.disableWeekRowNumberMarker.*';
        $conversion_outline['module']['datetime_disabled_past_days'] = 'dateTimePicker.advanced.disablePastDates.*';
        $conversion_outline['module']['datetime_disabled_current_date'] = 'dateTimePicker.advanced.disableCurrentDate.*';
        $conversion_outline['module']['min_date_type'] = 'dateTimePicker.advanced.minDateType.*';
        $conversion_outline['module']['fixed_min_date'] = 'dateTimePicker.innerContent.minFixedDate.*';
        $conversion_outline['module']['relative_min_date'] = 'dateTimePicker.innerContent.minRelativeDate.*';
        $conversion_outline['module']['max_date_type'] = 'dateTimePicker.advanced.maxDateType.*';
        $conversion_outline['module']['fixed_max_date'] = 'dateTimePicker.innerContent.maxFixedDate.*';
        $conversion_outline['module']['relative_max_date'] = 'dateTimePicker.innerContent.relativeFixedDate.*';
        $conversion_outline['module']['available_dates'] = 'dateTimePicker.innerContent.availableDates.*';
        $conversion_outline['module']['unavailable_dates'] = 'dateTimePicker.innerContent.unAvailableDates.*';
        $conversion_outline['module']['min_time'] = 'dateTimePicker.innerContent.minSelectableTime.*';
        $conversion_outline['module']['max_time'] = 'dateTimePicker.innerContent.maxSelectableTime.*';
        $conversion_outline['module']['available_times'] = 'dateTimePicker.innerContent.globalAvailableTimes.*';
        $conversion_outline['module']['unavailable_times'] = 'dateTimePicker.innerContent.globalUnAvailableTimes.*';
        $conversion_outline['module']['time_steps'] = 'dateTimePicker.innerContent.timeSlotInterval.*';
        $conversion_outline['module']['datetime_inline'] = 'dateTimePicker.advanced.showInline.*';
        $conversion_outline['module']['datetime_setcurrent_datetime'] = 'dateTimePicker.advanced.autoFillCurrentDateTime.*';
        $conversion_outline['module']['datetime_locale'] = 'dateTimePicker.advanced.pickerLocale.*';
        $conversion_outline['module']['datetime_locale_direction'] = 'dateTimePicker.advanced.enableRTL.*';
        $conversion_outline['module']['use_datetime_icscalendar_sync'] = 'dateTimePicker.advanced.enableICSCalendarSync.*';
        $conversion_outline['module']['datetime_ics_sync_url'] = 'dateTimePicker.innerContent.icsFeedURL.*';
        foreach (['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] as $day) {
            $day_capitalized = ucfirst($day);
            $conversion_outline['module']["available_times_$day"] = "dateTimePicker.innerContent.availableTimes$day_capitalized.*";
            $conversion_outline['module']["unavailable_times_$day"] = "dateTimePicker.innerContent.unAvailableTimes$day_capitalized.*";
        }
        $conversion_outline['valueExpansionFunctionMap']['use_datetime'] = [$this, 'convert_datetime_input'];
        $conversion_outline['valueExpansionFunctionMap']['datetime_type'] = [$this, 'convert_datetime_type'];
        $conversion_outline['valueExpansionFunctionMap']['datetime_format'] = [$this, 'convert_datetime_format'];
        $conversion_outline['valueExpansionFunctionMap']['datetime_disabled_week_days'] = [$this, 'convert_week_days'];
        // ==========================
        // Signature Pad
        // ==========================
        $conversion_outline['module']['sp_width'] = 'signaturePad.decoration.canvasWidth.*';
        $conversion_outline['module']['sp_height'] = 'signaturePad.decoration.canvasHeight.*';
        $conversion_outline['module']['sp_background_color'] = 'signaturePad.decoration.canvasBackground.*';
        $conversion_outline['module']['sp_pen_color'] = 'signaturePad.decoration.canvasPenColor.*';
        $conversion_outline['module']['sp_pen_thickness'] = 'signaturePad.decoration.canvasPenThickness.*';
        $conversion_outline['module']['sp_margin'] = 'signaturePad.decoration.canvasSpacing.*.margin';
        $conversion_outline['module']['sp_padding'] = 'signaturePad.decoration.canvasSpacing.*.padding';
        $conversion_outline['module']['sp_border'] = 'signaturePad.decoration.canvasBorder.*';
        $conversion_outline['module']['sp_border_color'] = 'signaturePad.decoration.canvasBorder.*.styles.all.color';
        $conversion_outline['module']['sp_border_width'] = 'signaturePad.decoration.canvasBorder.*.styles.all.width';
        $conversion_outline['module']['sp_border_style'] = 'signaturePad.decoration.canvasBorder.*.styles.all.style';
        $conversion_outline['module']['sp_shadow'] = 'signaturePad.decoration.canvasShadow.*';
        $conversion_outline['module']['sp_shadow_horizontal'] = 'signaturePad.decoration.canvasShadow.*.horizontal';
        $conversion_outline['module']['sp_shadow_vertical'] = 'signaturePad.decoration.canvasShadow.*.vertical';
        $conversion_outline['module']['sp_shadow_blur'] = 'signaturePad.decoration.canvasShadow.*.blur';
        $conversion_outline['module']['sp_shadow_spread'] = 'signaturePad.decoration.canvasShadow.*.spread';
        $conversion_outline['module']['sp_shadow_color'] = 'signaturePad.decoration.canvasShadow.*.color';
        $conversion_outline['module']['sp_shadow_position'] = 'dateTimePicker.decoration.canvasShadow.*.position';
        $conversion_outline['module']['sp_save_btn_font'] = 'signaturePad.decoration.saveButtonFont.font.*';
        $conversion_outline['module']['sp_save_btn_font_size'] = 'signaturePad.decoration.saveButtonFont.font.*.size';
        $conversion_outline['module']['sp_save_btn_color'] = 'signaturePad.decoration.saveButtonFont.font.*.color';
        $conversion_outline['module']['sp_save_btn_background_color'] = 'signaturePad.decoration.saveButtonBackground.*.color';
        $conversion_outline['module']['sp_save_btn_padding'] = 'signaturePad.decoration.saveButtonSpacing.*.padding';
        $conversion_outline['module']['sp_clear_btn_font'] = 'signaturePad.decoration.clearButtonFont.font.*';
        $conversion_outline['module']['sp_clear_btn_font_size'] = 'signaturePad.decoration.clearButtonFont.font.*.size';
        $conversion_outline['module']['sp_clear_btn_color'] = 'signaturePad.decoration.clearButtonFont.font.*.color';
        $conversion_outline['module']['sp_clear_btn_background_color'] = 'signaturePad.decoration.clearButtonBackground.*.color';
        $conversion_outline['module']['sp_clear_btn_padding'] = 'signaturePad.decoration.clearButtonSpacing.*.padding';
        $conversion_outline['module']['sp_message_font'] = "signaturePad.decoration.messageFont.font.*";
        $conversion_outline['module']['sp_message_font_size'] = "signaturePad.decoration.messageFont.font.*.size";
        $conversion_outline['valueExpansionFunctionMap']['use_signature_pad'] = [$this, 'convert_signature_input'];
        $conversion_outline['valueExpansionFunctionMap']['sp_margin'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['sp_padding'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['sp_border'] = [$this, 'convert_signature_pad_border'];
        $conversion_outline['valueExpansionFunctionMap']['sp_shadow'] = [$this, 'convert_shadow'];
        $conversion_outline['valueExpansionFunctionMap']['sp_save_btn_padding'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['sp_clear_btn_padding'] = [$this, 'convert_spacing'];
        // ==========================
        // HTML Block
        // ==========================
        $conversion_outline['module']['field_htmlcontent'] = 'htmlBlock.innerContent.htmlContent.*';
        $conversion_outline['module']['html_wrapper_margin'] = 'htmlBlock.decoration.containerSpacing.*.margin';
        $conversion_outline['module']['html_wrapper_padding'] = 'htmlBlock.decoration.containerSpacing.*.padding';
        $conversion_outline['module']['html_wrapper_background'] = 'htmlBlock.decoration.containerBackground.*.color';
        $conversion_outline['module']['html_wrapper_border'] = 'htmlBlock.decoration.containerBorder.*';
        $conversion_outline['module']['html_wrapper_border_color'] = 'htmlBlock.decoration.containerBorder.*.styles.all.color';
        $conversion_outline['module']['html_wrapper_border_width'] = 'htmlBlock.decoration.containerBorder.*.styles.all.width';
        $conversion_outline['module']['html_wrapper_border_style'] = 'htmlBlock.decoration.containerBorder.*.styles.all.style';
        $conversion_outline['module']['html_wrapper_shadow'] = 'htmlBlock.decoration.containerShadow.*';
        $conversion_outline['module']['html_wrapper_shadow_horizontal'] = 'htmlBlock.decoration.containerShadow.*.horizontal';
        $conversion_outline['module']['html_wrapper_shadow_vertical'] = 'htmlBlock.decoration.containerShadow.*.vertical';
        $conversion_outline['module']['html_wrapper_shadow_blur'] = 'htmlBlock.decoration.containerShadow.*.blur';
        $conversion_outline['module']['html_wrapper_shadow_spread'] = 'htmlBlock.decoration.containerShadow.*.spread';
        $conversion_outline['module']['html_wrapper_shadow_color'] = 'htmlBlock.decoration.containerShadow.*.color';
        $conversion_outline['module']['html_wrapper_shadow_position'] = 'htmlBlock.decoration.containerShadow.*.position';
        $conversion_outline['module']['html_heading_font'] = 'htmlBlock.decoration.headingFont.h1.font.*';
        $conversion_outline['module']['html_heading_color'] = 'htmlBlock.decoration.headingFont.h1.font.*.color';
        $conversion_outline['module']['html_heading_size'] = 'htmlBlock.decoration.headingFont.h1.font.*.size';
        $conversion_outline['module']['html_heading_letterspace'] = 'htmlBlock.decoration.headingFont.h1.font.*.letterSpacing';
        $conversion_outline['module']['html_heading_lineheight'] = 'htmlBlock.decoration.headingFont.h1.font.*.lineHeight';
        $conversion_outline['module']['html_heading_alignment'] = 'htmlBlock.decoration.headingFont.h1.font.*.textAlign';
        $conversion_outline['module']['html_paragraph_font'] = 'htmlBlock.decoration.contentFont.body.font.*';
        $conversion_outline['module']['html_paragraph_color'] = 'htmlBlock.decoration.contentFont.body.font.*.color';
        $conversion_outline['module']['html_paragraph_size'] = 'htmlBlock.decoration.contentFont.body.font.*.size';
        $conversion_outline['module']['html_paragraph_letterspace'] = 'htmlBlock.decoration.contentFont.body.font.*.letterSpacing';
        $conversion_outline['module']['html_paragraph_lineheight'] = 'htmlBlock.decoration.contentFont.body.font.*.lineHeight';
        $conversion_outline['module']['html_paragraph_alignment'] = 'htmlBlock.decoration.contentFont.body.font.*.textAlign';
        $conversion_outline['module']['html_link_font'] = 'htmlBlock.decoration.contentFont.link.font.*';
        $conversion_outline['module']['html_link_color'] = 'htmlBlock.decoration.contentFont.link.font.*.color';
        $conversion_outline['module']['html_link_size'] = 'htmlBlock.decoration.contentFont.link.font.*.size';
        $conversion_outline['module']['html_link_letterspace'] = 'htmlBlock.decoration.contentFont.link.font.*.letterSpacing';
        $conversion_outline['module']['html_link_lineheight'] = 'htmlBlock.decoration.contentFont.link.font.*.lineHeight';
        $conversion_outline['module']['html_link_margin'] = 'htmlBlock.decoration.contentFont.link.font.*.textAlign';
        $conversion_outline['module']['html_image_width'] = 'htmlBlock.decoration.imageWidth.*';
        $conversion_outline['module']['html_image_height'] = 'htmlBlock.decoration.imageHeight.*';
        $conversion_outline['module']['html_image_fit'] = 'htmlBlock.decoration.imageFit.*';
        $conversion_outline['module']['html_image_margin'] = 'htmlBlock.decoration.imageSpacing.*.margin';
        $conversion_outline['module']['html_image_padding'] = 'htmlBlock.decoration.imageSpacing.*.padding';
        $conversion_outline['module']['html_image_border'] = 'htmlBlock.decoration.imageBorder.*';
        $conversion_outline['module']['html_image_border_color'] = 'htmlBlock.decoration.imageBorder.*.styles.all.color';
        $conversion_outline['module']['html_image_border_width'] = 'htmlBlock.decoration.imageBorder.*.styles.all.width';
        $conversion_outline['module']['html_image_border_style'] = 'htmlBlock.decoration.imageBorder.*.styles.all.style';
        $conversion_outline['module']['html_image_shadow'] = 'htmlBlock.decoration.imageShadow.*';
        $conversion_outline['module']['html_image_shadow_horizontal'] = 'htmlBlock.decoration.imageShadow.*.horizontal';
        $conversion_outline['module']['html_image_shadow_vertical'] = 'htmlBlock.decoration.imageShadow.*.vertical';
        $conversion_outline['module']['html_image_shadow_blur'] = 'htmlBlock.decoration.imageShadow.*.blur';
        $conversion_outline['module']['html_image_shadow_spread'] = 'htmlBlock.decoration.imageShadow.*.spread';
        $conversion_outline['module']['html_image_shadow_color'] = 'htmlBlock.decoration.imageShadow.*.color';
        $conversion_outline['module']['html_image_shadow_position'] = 'htmlBlock.decoration.imageShadow.*.position';
        $conversion_outline['valueExpansionFunctionMap']['use_field_html'] = [$this, 'convert_html_input'];
        $conversion_outline['valueExpansionFunctionMap']['html_wrapper_margin'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['html_wrapper_padding'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['html_wrapper_border'] = [$this, 'convert_border'];
        $conversion_outline['valueExpansionFunctionMap']['html_wrapper_shadow'] = [$this, 'convert_shadow'];
        $conversion_outline['valueExpansionFunctionMap']['html_image_margin'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['html_image_padding'] = [$this, 'convert_spacing'];
        $conversion_outline['valueExpansionFunctionMap']['html_image_border'] = [$this, 'convert_border'];
        $conversion_outline['valueExpansionFunctionMap']['html_image_shadow'] = [$this, 'convert_shadow'];
        // ==========================
        // Star Ratigs
        // ==========================
        $conversion_outline['module']['star_color'] = "starRating.decoration.color.*";
        $conversion_outline['module']['star_checked_color'] = "starRating.decoration.selectedColor.*";
        $conversion_outline['module']['star_svg_width'] = "starRating.decoration.width.*";
        $conversion_outline['module']['star_svg_height'] = "starRating.decoration.height.*";
        $conversion_outline['valueExpansionFunctionMap']['use_star_rating'] = [$this, 'convert_star_rating_input'];

        return $conversion_outline;
    }

    public function convert_icon($value, array $context = [])
    {
        $value_array = explode('||', $value);
        $icon = [];
        // Directly access array elements and check if they are set.
        if (!empty($value_array[0])) {
            $icon['unicode'] = $value_array[0];
        }
        if (!empty($value_array[1])) {
            $icon['type'] = $value_array[1];
        }
        if (!empty($value_array[2])) {
            $icon['weight'] = $value_array[2];
        }

        return !empty($icon) ? $icon : false;
    }

    public function convert_spacing($value): array
    {
        $valueArray = explode('|', $value);
        $syncVertical = isset($valueArray[4]) ? $valueArray[4] : 'false';
        $syncHorizontal = isset($valueArray[5]) ? $valueArray[5] : 'false';

        return [
            'top' => isset($valueArray[0]) ? $valueArray[0] : '',
            'right' => isset($valueArray[1]) ? $valueArray[1] : '',
            'bottom' => isset($valueArray[2]) ? $valueArray[2] : '',
            'left' => isset($valueArray[3]) ? $valueArray[3] : '',
            'syncVertical' => $syncVertical === 'true' ? 'on' : 'off',
            'syncHorizontal' => $syncHorizontal === 'true' ? 'on' : 'off',
        ];
    }

    public function convert_border($value, array $context = []): array
    {
        $valueArray = explode('|', $value);
        $isSingleValue = (strpos($value, '|') === false);

        return [
            'sync' => $isSingleValue ? 'on' : ($valueArray[0] ?? ''),
            'topLeft' => $isSingleValue ? $value : ($valueArray[1] ?? ''),
            'topRight' => $isSingleValue ? $value : ($valueArray[2] ?? ''),
            'bottomRight' => $isSingleValue ? $value : ($valueArray[3] ?? ''),
            'bottomLeft' => $isSingleValue ? $value : ($valueArray[4] ?? ''),
        ];
    }

    public function convert_shadow($value): array
    {
        if (!is_string($value) || trim($value) === '') {
            return [];
        }
        $presets = [
            'preset1' => [
                'horizontal' => '0px',
                'vertical' => '2px',
                'blur' => '18px',
                'spread' => '0px',
                'position' => 'outer',
                'color' => 'rgba(0, 0, 0, 0.3)',
                'style' => 'preset1',
            ],
            'preset2' => [
                'horizontal' => '0px',
                'vertical' => '5px',
                'blur' => '30px',
                'spread' => '0px',
                'position' => 'outer',
                'color' => 'rgba(0, 0, 0, 0.2)',
                'style' => 'preset2',
            ],
            'preset3' => [
                'horizontal' => '0px',
                'vertical' => '12px',
                'blur' => '18px',
                'spread' => '-6px',
                'position' => 'outer',
                'color' => 'rgba(0, 0, 0, 0.25)',
                'style' => 'preset3',
            ],
            'preset4' => [
                'horizontal' => '10px',
                'vertical' => '10px',
                'blur' => '0px',
                'spread' => '0px',
                'position' => 'outer',
                'color' => 'rgba(0, 0, 0, 0.25)',
                'style' => 'preset4',
            ],
            'preset5' => [
                'horizontal' => '0px',
                'vertical' => '6px',
                'blur' => '0px',
                'spread' => '10px',
                'position' => 'outer',
                'color' => 'rgba(0, 0, 0, 0.25)',
                'style' => 'preset5',
            ],
            'preset6' => [
                'horizontal' => '0px',
                'vertical' => '0px',
                'blur' => '18px',
                'spread' => '0px',
                'position' => 'inner',
                'color' => 'rgba(0, 0, 0, 0.3)',
                'style' => 'preset6',
            ],
            'preset7' => [
                'horizontal' => '10px',
                'vertical' => '10px',
                'blur' => '0px',
                'spread' => '0px',
                'position' => 'inner',
                'color' => 'rgba(0, 0, 0, 0.25)',
                'style' => 'preset7',
            ],
        ];
        if (isset($presets[$value])) {
            return $presets[$value];
        }

        return [
            'horizontal' => '0px',
            'vertical' => '0px',
            'blur' => '0px',
            'spread' => '0px',
            'position' => 'outer',
            'color' => 'rgba(0, 0, 0, 0.3)',
            'style' => $value,
        ];
    }

    public function convert_signature_pad_border($value, array $context = []): array
    {
        if (is_array($value) && isset($value['radius'])) {
            return $value;
        }
        if (is_string($value)) {
            $parts = explode('|', $value);
            if ($parts[0] === 'on' && count($parts) >= 5) {
                return [
                    'radius' => [
                        'topLeft' => $parts[1] ?? '',
                        'topRight' => $parts[2] ?? '',
                        'bottomLeft' => $parts[3] ?? '',
                        'bottomRight' => $parts[4] ?? '',
                        'sync' => 'on',
                    ],
                    'styles' => [
                        'all' => [
                            'color' => $context['sp_border_color'] ?? '#000000',
                            'width' => $context['sp_border_width'] ?? '1px',
                            'style' => $context['sp_border_style'] ?? 'solid',
                        ],
                    ],
                ];
            }
        }

        return [
            'radius' => [
                'topLeft' => '',
                'topRight' => '',
                'bottomLeft' => '',
                'bottomRight' => '',
                'sync' => 'on',
            ],
            'styles' => [
                'all' => [
                    'color' => $context['sp_border_color'] ?? '#000000',
                    'width' => $context['sp_border_width'] ?? '1px',
                    'style' => $context['sp_border_style'] ?? 'solid',
                ],
            ],
        ];
    }

    public function sortable_list_converter($value): array
    {
        $options = str_replace(['%91', '%93', '%92', '%22'], ['[', ']', '\\', '"'], $value);
        $options = urldecode($options);
        $sortable_options = json_decode($options, true);

        return array_map(
            function ($option) {
                return array_merge(
                    $option,
                    [
                        'dragID' => isset($option['dragID']) ? (string)$option['dragID'] : null,
                        'checked' => isset($option['checked']) ? (string)$option['checked'] : null,
                    ]
                );
            },
            $sortable_options
        );
    }

    public function convert_checkboxradio_layout($value, $context = []): array
    {
        $layout_value = 'column';
        if (is_array($value)) {
            if (isset($value['desktop']['value'])) {
                $layout_value = $value['desktop']['value'];
            } elseif (isset($value['value'])) {
                $layout_value = $value['value'];
            }
        } elseif (is_string($value)) {
            $layout_value = $value;
        }
        if ($layout_value === 'inline') {
            $mapped_value = 'inline';
        } else {
            $mapped_value = 'column';
        }

        return [
            'desktop' => ['value' => $mapped_value],
            'tablet' => ['value' => $mapped_value],
            'phone' => ['value' => $mapped_value],
        ];
    }

    public function convert_checkboxradio_columns($value, $context = []): array
    {
        if (!isset($context['attrs']['checkbox_layout'])) {
            $context['attrs']['checkbox_layout'] = 'column';
        }
        $columns_value = 4;
        if (is_array($value)) {
            if (isset($value['desktop']['value'])) {
                $columns_value = (int)$value['desktop']['value'];
            } elseif (isset($value['value'])) {
                $columns_value = (int)$value['value'];
            }
        } elseif (is_numeric($value)) {
            $columns_value = (int)$value;
        } elseif (is_string($value) && is_numeric($value)) {
            $columns_value = (int)$value;
        }
        $columns_value = max(1, min(12, $columns_value));

        return [
            'desktop' => ['value' => $columns_value],
            'tablet' => ['value' => $columns_value],
            'phone' => ['value' => $columns_value],
        ];
    }

    public function convert_file_upload_type($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'file';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_signature_input($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'signature-pad';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_datetime_input($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'datetime-picker';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_datetime_type($value, $context = []): ?string
    {
        if ('date' === $value) {
            return 'datePicker';
        } elseif ('time' === $value) {
            return 'timePicker';
        } elseif ('daterange' === $value) {
            return 'dateRangePicker';
        }

        return 'both';
    }

    public function convert_star_rating_input($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'star-rating';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_html_input($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'html-block';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_phone_input($value, $context = []): ?string
    {
        if ($value === 'on') {
            return 'phone-number';
        }

        return $context['attrs']['field_type'] ?? 'text';
    }

    public function convert_field_type($value, $context = []): ?string
    {
        if (isset($context['attrs']['use_field_html']) && $context['attrs']['use_field_html'] === 'on') {
            return 'html-block';
        }
        if (isset($context['attrs']['use_signature_pad']) && $context['attrs']['use_signature_pad'] === 'on') {
            return 'signature-pad';
        }
        if (isset($context['attrs']['use_file_upload']) && $context['attrs']['use_file_upload'] === 'on') {
            return 'file';
        }
        if (isset($context['attrs']['use_datetime']) && $context['attrs']['use_datetime'] === 'on') {
            return 'datetime-picker';
        }
        if (isset($context['attrs']['use_star_rating']) && $context['attrs']['use_star_rating'] === 'on') {
            return 'star-rating';
        }
        if (isset($context['attrs']['use_custom_phone_format']) && $context['attrs']['use_custom_phone_format'] === 'on') {
            return 'phone-number';
        }

        return $value ?? 'text';
    }

    public function convert_file_mime($value, $context = []): array
    {
        if (empty($value)) {
            return [];
        }
        $flags = explode('|', $value);
        $mime_types = [];
        foreach (get_allowed_mime_types() as $key => $value) {
            $mime_types[$key] = $value;
            if ($key === 'css') {
                $mime_types['htm|html'] = 'text/html';
            } elseif ($key === 'rtf') {
                $mime_types['js'] = 'application/javascript';
            }
        }
        $unique_mimes = array_values(array_unique(array_values($mime_types)));
        $allowed = [];
        foreach ($flags as $index => $flag) {
            if ($flag === 'on' && isset($unique_mimes[$index])) {
                $allowed[] = $unique_mimes[$index];
            }
        }

        return $allowed;
    }

    public function convert_datetime_format($value)
    {
        if (!is_string($value)) {
            return $value;
        }

        return str_replace('_dt_', ' ', $value);
    }

    public function convert_week_days(string $value = '', array $context = []): array
    {
        if (!$value) {
            return [];
        }
        $week_days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
        $flags = explode('|', $value);
        $allowed = [];
        foreach ($flags as $index => $flag) {
            if ($flag === 'on' && isset($week_days[$index])) {
                $allowed[] = $week_days[$index];
            }
        }

        return $allowed;
    }
}


??

??