<?php

namespace GriffinForms\Admin\Language;

use GriffinForms\Admin\Language\Helpers\FileNames;

class Field extends \GriffinForms\Admin\Language\Format
{
    use FileNames;

    private static $instance;
    
    protected function headingCreateField()
    {
        return __('Add New Field', 'griffinforms-form-builder');
    }

    protected function headingeditField()
    {
        return __('Edit Field', 'griffinforms-form-builder');
    }

    protected function createItem()
    {
        return __('Add Field', 'griffinforms-form-builder');
    }
    
    protected function general()
    {
        return __('General Field Settings', 'griffinforms-form-builder');
    }
    
    protected function nameLabel()
    {
        return __('Field Name', 'griffinforms-form-builder');
    }
    
    protected function nameDescription()
    {
        return __('Name of your field. (For admin use only.)', 'griffinforms-form-builder');
    }
    
    protected function headingLabel()
    {
        return __('Field Label', 'griffinforms-form-builder');
    }
    
    protected function headingDescription()
    {
        return __('Label of your field. This will be visible on your form.', 'griffinforms-form-builder');
    }
    
    protected function fieldTypeLabel()
    {
        return __('Field Type', 'griffinforms-form-builder');
    }
    
    protected function descriptionLabel()
    {
        return __('Field Description', 'griffinforms-form-builder');
    }
    
    protected function descriptionDescription()
    {
        return __('Describe the purpose of this field. This will be visible below the field on the form.', 'griffinforms-form-builder');
    }
    
    protected function common()
    {
        return __('Common Field Settings', 'griffinforms-form-builder');
    }
    
    protected function isRequiredLabel()
    {
        return __('Make this field required?', 'griffinforms-form-builder');
    }
    
    protected function isRequiredDescription()
    {
        return __('User will be required to fill this field before submitting the form.', 'griffinforms-form-builder');
    }
    
    protected function isReadonlyLabel()
    {
        return __('Make this field read-only?', 'griffinforms-form-builder');
    }
    
    protected function isReadonlyDescription()
    {
        return __('User will be able to see the value of this field but cannot change it. Field value will be submitted with the form.', 'griffinforms-form-builder');
    }
    
    protected function isDisabledLabel()
    {
        return __('Make this field disabled?', 'griffinforms-form-builder');
    }
    
    protected function isDisabledDescription()
    {
        return __('User will be able to see the value of this field but cannot change it. Field value will <u>not</u> be submitted with the form.', 'griffinforms-form-builder');
    } 
    
    protected function isHiddenLabel()
    {
        return __('Hide this field?', 'griffinforms-form-builder');
    }
    
    protected function isHiddenDescription()
    {
        return __('Hide this field from the form.', 'griffinforms-form-builder');
    }

    protected function isReusableLabel()
    {
        return __('Make Reusable', 'griffinforms-form-builder');
    }

    protected function isReusableDescription()
    {
        return __('Enable this option to make this field reusable across multiple forms. Once a field is marked as reusable, it can be added to other forms without needing to recreate it. Note: This action is permanent, and the field cannot be reverted to a one-time use field after being marked reusable.', 'griffinforms-form-builder');
    }

    protected function reusableField()
    {
        return __('Reusable', 'griffinforms-form-builder');
    }

    protected function thisIsReusableField()
    {
        return __('You cannot change status of a reusable field', 'griffinforms-form-builder');
    }
    
    protected function fieldspecific()
    {
        return __('Field Specific Settings', 'griffinforms-form-builder');
    } 
    
    protected function defaultValueLabel()
    {
        return __('Default Value', 'griffinforms-form-builder');
    }  
    
    protected function placeholderLabel()
    {
        return __('Placeholder', 'griffinforms-form-builder');
    }  

    protected function placeholderDescription()
    {
        return __('The placeholder attribute specifies a short hint that describes the expected value of an input field (e.g. a sample value or a short description of the expected format).', 'griffinforms-form-builder');
    }  

    protected function rating_scale_label()
    {
        return __('Scale', 'griffinforms-form-builder');
    }

    protected function ratingscalelabel()
    {
        return $this->rating_scale_label();
    }

    protected function rating_scale_description()
    {
        return __('Choose how many rating steps are available.', 'griffinforms-form-builder');
    }

    protected function ratingscaledescription()
    {
        return $this->rating_scale_description();
    }

    protected function rating_icon_group_label()
    {
        return __('Icon group', 'griffinforms-form-builder');
    }

    protected function ratingicongrouplabel()
    {
        return $this->rating_icon_group_label();
    }

    protected function rating_icon_group_description()
    {
        return __('Pick the icon set used for each rating step.', 'griffinforms-form-builder');
    }

    protected function ratingicongroupdescription()
    {
        return $this->rating_icon_group_description();
    }

    protected function rating_icon_size_label()
    {
        return __('Icon size', 'griffinforms-form-builder');
    }

    protected function ratingiconsizelabel()
    {
        return $this->rating_icon_size_label();
    }

    protected function rating_icon_size_description()
    {
        return __('Set the width and height of each icon in pixels.', 'griffinforms-form-builder');
    }

    protected function ratingiconsizedescription()
    {
        return $this->rating_icon_size_description();
    }

    protected function rating_icon_spacing_label()
    {
        return __('Icon spacing', 'griffinforms-form-builder');
    }

    protected function ratingiconspacinglabel()
    {
        return $this->rating_icon_spacing_label();
    }

    protected function rating_icon_spacing_description()
    {
        return __('Control the gap between each rating step.', 'griffinforms-form-builder');
    }

    protected function ratingiconspacingdescription()
    {
        return $this->rating_icon_spacing_description();
    }

    protected function rating_color_filled_label()
    {
        return __('Filled colour', 'griffinforms-form-builder');
    }

    protected function ratingcolorfilledlabel()
    {
        return $this->rating_color_filled_label();
    }

    protected function rating_color_filled_description()
    {
        return __('Colour used for selected or hovered steps.', 'griffinforms-form-builder');
    }

    protected function ratingcolorfilleddescription()
    {
        return $this->rating_color_filled_description();
    }

    protected function rating_color_empty_label()
    {
        return __('Empty colour', 'griffinforms-form-builder');
    }

    protected function ratingcoloremptylabel()
    {
        return $this->rating_color_empty_label();
    }

    protected function rating_color_empty_description()
    {
        return __('Colour used for unselected steps.', 'griffinforms-form-builder');
    }

    protected function ratingcoloremptydescription()
    {
        return $this->rating_color_empty_description();
    }

    protected function rating_custom_image_label()
    {
        return __('Custom image', 'griffinforms-form-builder');
    }

    protected function ratingcustomimagelabel()
    {
        return $this->rating_custom_image_label();
    }

    protected function rating_custom_image_description()
    {
        return __('Replace the bundled icon group with a single custom image.', 'griffinforms-form-builder');
    }

    protected function ratingcustomimagedescription()
    {
        return $this->rating_custom_image_description();
    }

    protected function rating_step_images_label()
    {
        return __('Per-step images', 'griffinforms-form-builder');
    }

    protected function ratingstepimageslabel()
    {
        return $this->rating_step_images_label();
    }

    protected function rating_step_images_description()
    {
        return __('Assign a different image to each rating step.', 'griffinforms-form-builder');
    }

    protected function ratingstepimagesdescription()
    {
        return $this->rating_step_images_description();
    }

    protected function rating_step_labels_label()
    {
        return __('Per-step labels', 'griffinforms-form-builder');
    }

    protected function ratingsteplabelslabel()
    {
        return $this->rating_step_labels_label();
    }

    protected function rating_step_labels_description()
    {
        return __('Label each step for captions shown below the icons.', 'griffinforms-form-builder');
    }

    protected function ratingsteplabelsdescription()
    {
        return $this->rating_step_labels_description();
    }

    protected function rating_allow_clear_label()
    {
        return __('Allow clear', 'griffinforms-form-builder');
    }

    protected function ratingallowclearlabel()
    {
        return $this->rating_allow_clear_label();
    }

    protected function rating_allow_clear_description()
    {
        return __('Allow clicking the active step again to clear the rating.', 'griffinforms-form-builder');
    }

    protected function ratingallowcleardescription()
    {
        return $this->rating_allow_clear_description();
    }

    protected function inputrating_required()
    {
        return __('Please select a rating.', 'griffinforms-form-builder');
    }

    protected function inputratingrequired()
    {
        return $this->inputrating_required();
    }

    protected function inputrating_min_rating()
    {
        return __('Please select at least {min}.', 'griffinforms-form-builder');
    }

    protected function inputratingminrating()
    {
        return $this->inputrating_min_rating();
    }

    protected function minrating()
    {
        return __('Minimum rating', 'griffinforms-form-builder');
    }

    protected function min_rating_label()
    {
        return __('Minimum rating', 'griffinforms-form-builder');
    }

    protected function minratinglabel()
    {
        return $this->min_rating_label();
    }

    protected function min_rating_placeholder()
    {
        return __('e.g. 3', 'griffinforms-form-builder');
    }

    protected function minratingplaceholder()
    {
        return $this->min_rating_placeholder();
    }

    protected function autocompleteLabel()
    {
        return __('Allow Autocomplete?', 'griffinforms-form-builder');
    }  
    
    protected function autocompleteDescription()
    {
        return __('The autocomplete attribute specifies if browsers should try to predict the value of an input field or not.', 'griffinforms-form-builder');
    }  
    
    protected function custom()
    {
        return __('Custom Value', 'griffinforms-form-builder');
    }  
    
    protected function variable()
    {
        return __('Variable', 'griffinforms-form-builder');
    }  
    
    protected function pageTitle()
    {
        return __('Current Page Title', 'griffinforms-form-builder');
    }  
    
    protected function userFirstName()
    {
        return __('User\'s First Name', 'griffinforms-form-builder');
    }  
    
    protected function userLastName()
    {
        return __('User\'s Last Name', 'griffinforms-form-builder');
    }  
    
    protected function userEmail()
    {
        return __('User\'s Email', 'griffinforms-form-builder');
    }  

    protected function userPhone()
    {
        return __('User\'s Phone Number', 'griffinforms-form-builder');
    }  
    
    protected function userWebsite()
    {
        return __('User\'s Website', 'griffinforms-form-builder');
    }  
    
    protected function currentUrl()
    {
        return __('Page URL', 'griffinforms-form-builder');
    }  
    
    protected function defaultValueCustomLabel()
    {
        return __('Please enter the value', 'griffinforms-form-builder');
    }  
    
    protected function defaultValueVariableLabel()
    {
        return __('Please select the variable', 'griffinforms-form-builder');
    }  
    
    protected function allowUrlGet()
    {
        return __('Allow fetching value from URL variable (example: https://website.com/?field_name=value)', 'griffinforms-form-builder');
    }  
    
    protected function defaultValueDescription()
    {
        return __('These options allow you to set the default value for this field on form load.', 'griffinforms-form-builder');
    }

    protected function allowedMimesLabel()
    {
        return __('Allowed MIME types (Select file types you wish to allow)', 'griffinforms-form-builder');
    }

    protected function allowedMimesDescription()
    {
        return __('Enter a comma-separated list of allowed MIME types (e.g. image/jpeg,image/png,application/pdf).', 'griffinforms-form-builder');
    }

    protected function maxSizeMbLabel()
    {
        return __('Max size (MB) per file', 'griffinforms-form-builder');
    }

    protected function maxSizeMbDescription()
    {
        return __('The maximum file size allowed for each upload, in megabytes.', 'griffinforms-form-builder');
    }

    protected function totalSizeMbLabel()
    {
        return __('Total size cap (MB)', 'griffinforms-form-builder');
    }

    protected function totalSizeMbDescription()
    {
        return __('Maximum combined size of all files selected. Leave blank for no total cap. Note: the request is also limited by server settings (post_max_size).', 'griffinforms-form-builder');
    }

    protected function maxFilesLabel()
    {
        return __('Max number of files', 'griffinforms-form-builder');
    }

    protected function maxFilesDescription()
    {
        return __('The maximum total number of files a user can attach to this field across all uploads. This is not limited to a single file-picker selection—users may upload in multiple batches until this total is reached.', 'griffinforms-form-builder');
    }

    protected function storageModeLabel()
    {
        return __('Storage mode', 'griffinforms-form-builder');
    }

    protected function storageModeDescription()
    {
        return __('Select where the uploaded files will be stored: in the WordPress Media Library or in a private folder.', 'griffinforms-form-builder');
    }

    /**
     * Label for allowing multiple file select in file picker.
     */
    protected function allowMultipleSelectLabel()
    {
        return __('Allow selecting multiple files at once', 'griffinforms-form-builder');
    }

    /**
     * Description for allowing multiple file select in file picker.
     */
    protected function allowMultipleSelectDescription()
    {
        return __('When enabled, the file picker allows selecting multiple files in one go (adds the HTML “multiple” attribute). This only affects how files are picked; overall limits (Max files / Total size) still apply.', 'griffinforms-form-builder');
    }

    protected function private()
    {
        return __('Private', 'griffinforms-form-builder');
    }

    protected function mediaLibrary()
    {
        return __('Media Library', 'griffinforms-form-builder');
    }
    
    protected function iterations()
    {
        return __('Field Iterations', 'griffinforms-form-builder');
    }    
    
    protected function iterationsLabel()
    {
        return __('Allow Iterations?', 'griffinforms-form-builder');
    }
    
    protected function iterationsDescription()
    {
        return __('Turning on iterations allow users to create instances of this field to enter multiple values.', 'griffinforms-form-builder');
    }     
    
    protected function allowMultipleIterations()
    {
        return __('Allow multiple iterations of this field?', 'griffinforms-form-builder');
    }    
    
    protected function iterationCount1()
    {
        return __('Allow a minimum of', 'griffinforms-form-builder');
    }   
    
    protected function iterationCount2()
    {
        return __('and a maximum of', 'griffinforms-form-builder');
    }    
    
    protected function iterationCount3()
    {
        return __('field iterations', 'griffinforms-form-builder');
    }
    
    protected function minIterationSuggestion()
    {
    	return __('Minimum iteration count should be equal to or more than 0.', 'griffinforms-form-builder');
    }
    
    protected function maxIterationSuggestion()
    {
    	return __('Maximum iteration count should be more than minimum iteration count.', 'griffinforms-form-builder');
    }
    
    protected function invalidMaxIterations()
    {
    	return __('Maximum iterations value is incorrect.', 'griffinforms-form-builder');
    }
    
    protected function addFieldIterationButtonLabel()
    {
    	return __('Add field button label', 'griffinforms-form-builder');
    }
    
    protected function onlyUniqueValues()
    {
        return __('Accept only unique values?', 'griffinforms-form-builder');
    }    
    
    protected function addIterationButtonLabel()
    {
        return __('Add', 'griffinforms-form-builder');
    }    
    
    protected function validations()
    {
        return __('Validation', 'griffinforms-form-builder');
    }    
    
    protected function validationsLabel()
    {
        return __('Validation Type', 'griffinforms-form-builder');
    }    
    
    protected function noValidation()
    {
        return __('Do not validate', 'griffinforms-form-builder');
    }

    protected function pattern()
    {
        return __('Match pattern', 'griffinforms-form-builder');
    }    

    protected function dbValidate()
    {
        return __('Database validation', 'griffinforms-form-builder');
    }    
    
    protected function validatePattern()
    {
        return __('Use global expression', 'griffinforms-form-builder');
    }    
    
    protected function inputTextPattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }

    protected function inputNumberPattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }    
    
    protected function inputEmailPattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }    
    
    protected function inputUrlPattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }    
    
    protected function inputPhonePattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }    
    
    protected function inputPasswordPattern()
    {
        return __('RegEx pattern', 'griffinforms-form-builder');
    }    
    
    protected function customParameters()
    {
        return __('Choose custom parameters', 'griffinforms-form-builder');
    }    

    protected function minMaxSelect()
    {
        return __('Min / Max Selections', 'griffinforms-form-builder');
    }
    
    protected function inputTextMinCharsLabel()
    {
        return __('Minimum characters', 'griffinforms-form-builder');
    }    
    
    protected function inputTextMaxCharsLabel()
    {
        return __('Maxmimum characters', 'griffinforms-form-builder');
    }    
    
    protected function inputphoneMinDigitsLabel()
    {
        return __('Minimum digits', 'griffinforms-form-builder');
    }    
    
    protected function inputphoneMaxDigitsLabel()
    {
        return __('Maximum digits', 'griffinforms-form-builder');
    }    
    
    protected function inputNumberMinCharsLabel()
    {
        return __('Minimum Value', 'griffinforms-form-builder');
    }    
    
    protected function inputNumberMaxCharsLabel()
    {
        return __('Maximum Value', 'griffinforms-form-builder');
    }    
    
    protected function allowNumbers()
    {
        return __('Allow numbers?', 'griffinforms-form-builder');
    }    
    
    protected function allowSpaces()
    {
        return __('Allow spaces?', 'griffinforms-form-builder');
    }    
    
    protected function allowSplChars()
    {
        return __('Allow special characters?', 'griffinforms-form-builder');
    }    
    
    protected function phoneFormatTypeLabel()
    {
        return __('Accepted format', 'griffinforms-form-builder');
    }

    protected function phoneFormatTypeDescription()
    {
        return __('Choose how strictly the number format should be enforced.', 'griffinforms-form-builder');
    }

    protected function anyFormat()
    {
        return __('Any formatted number', 'griffinforms-form-builder');
    }

    protected function internationalFormat()
    {
        return __('International (E.164)', 'griffinforms-form-builder');
    }

    protected function nationalFormat()
    {
        return __('National (based on country code)', 'griffinforms-form-builder');
    }

    protected function phoneDisplayModeLabel()
    {
        return __('Country display', 'griffinforms-form-builder');
    }

    protected function phoneDisplayModeDescription()
    {
        return __('Choose how the selected country is shown next to the phone input.', 'griffinforms-form-builder');
    }

    protected function flagCode()
    {
        return __('Flag + code', 'griffinforms-form-builder');
    }

    protected function codeOnly()
    {
        return __('Code only', 'griffinforms-form-builder');
    }

    protected function flagCodeName()
    {
        return __('Flag + code + name', 'griffinforms-form-builder');
    }

    protected function allowExtensionLabel()
    {
        return __('Allow extensions?', 'griffinforms-form-builder');
    }

    protected function allowExtensionDescription()
    {
        return __('Permits values like “+1 312 555 1234 x204”.', 'griffinforms-form-builder');
    }

    protected function allowedCountryCodesLabel()
    {
        return __('Allowed country codes', 'griffinforms-form-builder');
    }

    protected function allowedCountryCodesDescription()
    {
        return __('Comma or space separated list (numbers only). Leave empty to allow any country code.', 'griffinforms-form-builder');
    }

    protected function allowedCountryCodesPlaceholder()
    {
        return __('1, 44, 91', 'griffinforms-form-builder');
    }
    
    protected function validationsDescription()
    {
        return __('Field validations allow you to accept only certain type of values.', 'griffinforms-form-builder');
    }    
    
    protected function excludeCharsLabel()
    {
        return __('Exclude following characters', 'griffinforms-form-builder');
    }
    
    protected function allowNumberTypelabel()
    {
        return __('Accepted number type', 'griffinforms-form-builder');
    }
    
    protected function anyNumber()
    {
        return __('Any number', 'griffinforms-form-builder');
    }
    
    protected function oddNumbers()
    {
        return __('Only odd numbers', 'griffinforms-form-builder');
    }
    
    protected function evenNumbers()
    {
        return __('Only even numbers', 'griffinforms-form-builder');
    }
    
    protected function allowDecimal()
    {
        return __('Allow decimal', 'griffinforms-form-builder');
    }
    
    protected function multiplesOf()
    {
        return __('Multiple of', 'griffinforms-form-builder');
    }
    
    protected function multiplesOfLabel()
    {
        return __('Value should be a multiple of', 'griffinforms-form-builder');
    }
    
    protected function restrictDomains()
    {
        return __('Accept specific domains only?', 'griffinforms-form-builder');
    }
    
    protected function restrictedDomainNamesLabel()
    {
        return __('Allowed domains', 'griffinforms-form-builder');
    }

    protected function excludedDomainNamesLabel()
    {
        return __('Exclude these domains', 'griffinforms-form-builder');
    }

    protected function httpLabel()
    {
        return __('HTTP', 'griffinforms-form-builder');
    }

    protected function httpsLabel()
    {
        return __('HTTPS', 'griffinforms-form-builder');
    }

    protected function ftpLabel()
    {
        return __('FTP', 'griffinforms-form-builder');
    }

    protected function sftpLabel()
    {
        return __('SFTP', 'griffinforms-form-builder');
    }

    protected function checkAllLabel()
    {
        return __('Select All', 'griffinforms-form-builder');
    }

    protected function uncheckAllLabel()
    {
        return __('Deselect All', 'griffinforms-form-builder');
    }

    protected function restoreCheckLabel()
    {
        return __('Last saved selection', 'griffinforms-form-builder');
    }

    protected function restrictedTldNamesLabel()
    {
        return __('Only allow following TLDs (e.g. com, org)', 'griffinforms-form-builder');
    }

    protected function restrictedExcludeNamesLabel()
    {
        return __('Do not allow following TLDs (e.g. net, co)', 'griffinforms-form-builder');
    }
    
    protected function pageId()
    {
        return __('Page ID', 'griffinforms-form-builder');
    }
    
    protected function userId()
    {
        return __('User ID', 'griffinforms-form-builder');
    }
    
    protected function selecttableLabel()
    {
        return __('Select database table', 'griffinforms-form-builder');
    }
    
    protected function selectColumnLabel()
    {
        return __('Select table column', 'griffinforms-form-builder');
    }
    
    protected function matchType()
    {
        return __('Match logic', 'griffinforms-form-builder');
    }
    
    protected function inColumn()
    {
        return __('Value exists in column', 'griffinforms-form-builder');
    }
    
    protected function notInColumn()
    {
        return __('Value does not exists in column', 'griffinforms-form-builder');
    }
    
    protected function fieldOptionsLabel()
    {
        return __('Selectable Options', 'griffinforms-form-builder');
    }
    
    protected function optionsGroupName()
    {
        return __('Options Group', 'griffinforms-form-builder');
    }

    protected function addOptionBtnLabel()
    {
        return __('Add Option', 'griffinforms-form-builder');
    }
    
    protected function optionText()
    {
        return __('Option Name (Example: Red, Large, Premium)', 'griffinforms-form-builder');
    }

    protected function optionValue()
    {
        return __('Option Value (Example: red, large, premium)', 'griffinforms-form-builder');
    }

        protected function optionsText()
    {
        return __('Option Name (Example: Red, Large, Premium)', 'griffinforms-form-builder');
    }
    
    protected function optionsValue()
    {
        return __('Option Value (Example: red, large, premium)', 'griffinforms-form-builder');
    }
    
    protected function deleteOptionsGroup()
    {
        return __('Delete Group', 'griffinforms-form-builder');
    }
    
    protected function addOptionsGroup()
    {
        return __('Add Group', 'griffinforms-form-builder');
    }
    
    protected function fieldOptionsDescription()
    {
        return __('Organize options into groups. These groups may appear side-by-side or as labeled sections depending on the field type. Tip: The Option Name is what your users see on the form. The Option Value is what gets saved when they select it.', 'griffinforms-form-builder');
    }
    
    protected function minChars()
    {
        return __('Minimum characters', 'griffinforms-form-builder');
    }
    
    protected function maxChars()
    {
        return __('Maximum characters', 'griffinforms-form-builder');
    }
    
    protected function daysLabel()
    {
        return __('Days', 'griffinforms-form-builder');
    }
    
    protected function weeksLabel()
    {
        return __('Weeks', 'griffinforms-form-builder');
    }
    
    protected function monthsLabel()
    {
        return __('Months', 'griffinforms-form-builder');
    }
    
    protected function yearsLabel()
    {
        return __('Years', 'griffinforms-form-builder');
    }
    
    protected function beforeDate()
    {
        return __('Before', 'griffinforms-form-builder');
    }
    
    protected function afterDate()
    {
        return __('After', 'griffinforms-form-builder');
    }
    
    protected function currentDate()
    {
        return __('Current Date', 'griffinforms-form-builder');
    }
    
    protected function currentPagePublishDate()
    {
        return __('Page Publish Date', 'griffinforms-form-builder');
    }
    
    protected function currentPageEditDate()
    {
        return __('Page Edit Date', 'griffinforms-form-builder');
    }
    
    protected function currentFormCreationDate()
    {
        return __('Form Creation Date', 'griffinforms-form-builder');
    }
    
    protected function fixedDate()
    {
        return __('Fixed date', 'griffinforms-form-builder');
    }
    
    protected function relativeDate()
    {
        return __('Relative date', 'griffinforms-form-builder');
    }
    
    protected function minDateLabel()
    {
        return __('Minimum', 'griffinforms-form-builder');
    }
    
    protected function maxDateLabel()
    {
        return __('Maximum', 'griffinforms-form-builder');
    }
    
    protected function dateTypeLabel()
    {
        return __('Day type', 'griffinforms-form-builder');
    }
    
    protected function allDays()
    {
        return __('Any day', 'griffinforms-form-builder');
    }
    
    protected function weekDays()
    {
        return __('Only weekdays', 'griffinforms-form-builder');
    }
    
    protected function weekEnds()
    {
        return __('Only weekends', 'griffinforms-form-builder');
    }
    
    protected function sunday()
    {
        return __('Only Sundays', 'griffinforms-form-builder');
    }
    
    protected function monday()
    {
        return __('Only Mondays', 'griffinforms-form-builder');
    }
    
    protected function tuesday()
    {
        return __('Only Tuesdays', 'griffinforms-form-builder');
    }
    
    protected function wednesday()
    {
        return __('Only Wednesdays', 'griffinforms-form-builder');
    }
    
    protected function thursday()
    {
        return __('Only Thursdays', 'griffinforms-form-builder');
    }
    
    protected function friday()
    {
        return __('Only Fridays', 'griffinforms-form-builder');
    }
    
    protected function saturday()
    {
        return __('Only Saturdays', 'griffinforms-form-builder');
    }
    
    protected function dateFormatLabel()
    {
        return __('Date Format', 'griffinforms-form-builder');
    }
    
    protected function dateFormatDescription()
    {
        return __('Select date format for this date field.', 'griffinforms-form-builder');
    }

    protected function dateTipYearRangeDescription()
    {
        return __('Tip: Type the year manually or select a nearby year to browse further.', 'griffinforms-form-builder');
    }

    protected function minTimeLabel()
    {
        return __('Minimum Time', 'griffinforms-form-builder');
    }

    protected function minTimeDescription()
    {
        return __('Set the earliest time users can select.', 'griffinforms-form-builder');
    }

    protected function maxTimeLabel()
    {
        return __('Maximum Time', 'griffinforms-form-builder');
    }

    protected function maxTimeDescription()
    {
        return __('Set the latest time users can select.', 'griffinforms-form-builder');
    }

    protected function timeFormatLabel()
    {
        return __('Time Format', 'griffinforms-form-builder');
    }

    protected function timeFormatDescription()
    {
        return __('Select time format for this time field.', 'griffinforms-form-builder');
    }

    protected function time24h()
    {
        return __('24 Hour (HH:MM)', 'griffinforms-form-builder');
    }

    protected function time12h()
    {
        return __('12 Hour (hh:mm AM/PM)', 'griffinforms-form-builder');
    }

    protected function otherSettings()
    {
        return __('Other Settings', 'griffinforms-form-builder');
    }
    
    protected function fieldSettingsLabel()
    {
        return __('Field Settings', 'griffinforms-form-builder');
    }
    
    protected function yymmdd()
    {
        return __('yy-mm-dd', 'griffinforms-form-builder');
    }
    
    protected function ddmmyy()
    {
        return __('dd-mm-yy', 'griffinforms-form-builder');
    }
    
    protected function fieldSettingsDescription()
    {
        return __('Additional settings for this field.', 'griffinforms-form-builder');
    }

    protected function invalidMaxNumber()
    {
        return __('Maximum value must be greater than or equal to the minimum value.', 'griffinforms-form-builder');
    }

    protected function invalidMaxDate()
    {
        return __('Maximum date must be later than or equal to the Minimum date.', 'griffinforms-form-builder');
    }

    protected function invalidMaxTime()
    {
        return __('Maximum time cannot be earlier than minimum time.', 'griffinforms-form-builder');
    }

    protected function invalidMaxChecks()
    {
        return __('Invalid maximum checks value.', 'griffinforms-form-builder');
    }
    
    protected function minMorethanOptionsCount()
    {
        return __('Minimum checks value is greater than total number of options.', 'griffinforms-form-builder');
    }

    protected function invalidMinNumber()
    {
        return __('Invalid minimum characters value.', 'griffinforms-form-builder');
    }
    
    protected function invalidRegexPattern()
    {
        return __('The regular expression pattern you entered is invalid.', 'griffinforms-form-builder');
    }

    protected function emptyRegexPattern()
    {
        return __('Please enter a regular expression pattern.', 'griffinforms-form-builder');
    }

    protected function regexNotSuitableForNumbers()
    {
        return __('This pattern does not appear to match numeric values. Please adjust it.', 'griffinforms-form-builder');
    }

    /**
     * Error message when default value is required.
     */
    protected function defaultValueRequired()
    {
        return __('Please enter a default value.', 'griffinforms-form-builder');
    }

    /**
     * Error message when domain format is invalid.
     */
    protected function invalidDomainErrorPrefix()
    {
        return __('Invalid domain format – ', 'griffinforms-form-builder');
    }

    /**
     * Error message when domain is found in both restricted and excluded lists.
     */
    protected function duplicateDomainErrorPrefix()
    {
        return __('Domain cannot be both restricted and excluded – ', 'griffinforms-form-builder');
    }

    /**
     * Error message when a TLD is found in both restricted and excluded lists.
     */
    protected function duplicateTldErrorPrefix()
    {
        return __('TLD cannot be both restricted and excluded – ', 'griffinforms-form-builder');
    }

    /**
     * Error message when TLD format is invalid.
     */
    protected function invalidTldFormatPrefix()
    {
        return __('Invalid TLD format – ', 'griffinforms-form-builder');
    }

    protected function invalidCountryCodeErrorPrefix()
    {
        return __('Invalid country code – ', 'griffinforms-form-builder');
    }

    protected function duplicateCountryCodeErrorPrefix()
    {
        return __('Country code cannot be repeated – ', 'griffinforms-form-builder');
    }

    /**
     * Label for back button in field editor.
     */
    protected function backToFields()
    {
        return __('All Fields', 'griffinforms-form-builder');
    }

    protected function defaultValueGetnameRequired()
    {
        return __('Please enter a GET variable name to extract the default value.', 'griffinforms-form-builder');
    }

    /**
     * Error message when positive integer is required.
     */
    protected function positiveIntegerRequired()
    {
        return __('Value cannot be negative or decimal.', 'griffinforms-form-builder');
    }

    /**
     * Error message when invalid date is selected.
     */
    protected function invalidDateSelected()
    {
        return __('Please select a valid date.', 'griffinforms-form-builder');
    }

    /**
     * Alert when max option group limit is reached.
     */
    protected function maxOptionsGroupsLimit()
    {
        return __('Limit reached: More than 5 groups may make the layout harder to use.', 'griffinforms-form-builder');
    }

    protected function maxOptGroupLimit()
    {
        return __('Limit reached: More than 10 option groups may make the field harder to use.', 'griffinforms-form-builder');
    }

    /**
     * Alert when user tries to delete the last remaining group.
     */
    protected function minOptionsGroupsLimit()
    {
        return __('At least one option group is required.', 'griffinforms-form-builder');
    }

    /**
     * Alert when user tries to delete the last remaining option pair in the last group.
     */
    protected function minOptionsPairsLimit()
    {
        return __('At least one option is required in the last remaining group.', 'griffinforms-form-builder');
    }

    /**
     * Alert when no valid option is defined before saving.
     */
    protected function atLeastOneOptionRequired()
    {
        return __('At least one valid option is required.', 'griffinforms-form-builder');
    }

    /**
     * Error message for invalid max file size (MB).
     */
    public function getInvalidMaxFileSizeErrorMsg() {
        return __( 'Please enter a valid maximum file size in MB.', 'griffinforms-form-builder' );
    }

    /**
     * Error message for invalid total size cap (MB).
     */
    public function getInvalidTotalSizeCapErrorMsg() {
        return __( 'Please enter a valid total size cap in MB.', 'griffinforms-form-builder' );
    }

    /**
     * Error message for invalid minimum image width.
     */
    public function getInvalidMinWidthErrorMsg() {
        return __( 'Please enter a valid minimum image width.', 'griffinforms-form-builder' );
    }

    /**
     * Error message for invalid maximum image width.
     */
    public function getInvalidMaxWidthErrorMsg() {
        return __( 'Please enter a valid maximum image width.', 'griffinforms-form-builder' );
    }

    /**
     * Error message for invalid minimum image height.
     */
    public function getInvalidMinHeightErrorMsg() {
        return __( 'Please enter a valid minimum image height.', 'griffinforms-form-builder' );
    }

    /**
     * Error message for invalid maximum image height.
     */
    public function getInvalidMaxHeightErrorMsg() {
        return __( 'Please enter a valid maximum image height.', 'griffinforms-form-builder' );
    }

    protected function addressLabelsDescription()
    {
        return __('Customize the labels shown for each address component.', 'griffinforms-form-builder');
    }

    protected function addressLine1Label()
    {
        return __('Address Line 1 label', 'griffinforms-form-builder');
    }

    protected function addressLine2Label()
    {
        return __('Address Line 2 label', 'griffinforms-form-builder');
    }

    protected function addressCityLabel()
    {
        return __('City label', 'griffinforms-form-builder');
    }

    protected function addressStateLabel()
    {
        return __('State / Province label', 'griffinforms-form-builder');
    }

    protected function addressPostalLabel()
    {
        return __('Postal / ZIP Code label', 'griffinforms-form-builder');
    }

    protected function addressCountryLabel()
    {
        return __('Country label', 'griffinforms-form-builder');
    }

    protected function addressLine1DefaultLabel()
    {
        return __('Address Line 1', 'griffinforms-form-builder');
    }

    protected function addressLine2DefaultLabel()
    {
        return __('Address Line 2', 'griffinforms-form-builder');
    }

    protected function addressCityDefaultLabel()
    {
        return __('City', 'griffinforms-form-builder');
    }

    protected function addressStateDefaultLabel()
    {
        return __('State / Province', 'griffinforms-form-builder');
    }

    protected function addressPostalDefaultLabel()
    {
        return __('Postal Code', 'griffinforms-form-builder');
    }

    protected function addressCountryDefaultLabel()
    {
        return __('Country', 'griffinforms-form-builder');
    }

    protected function addressLine2ToggleLabel()
    {
        return __('Show Address Line 2 field', 'griffinforms-form-builder');
    }

    protected function addressLine2ToggleDescription()
    {
        return __('Disable this if you want to hide the second street address field.', 'griffinforms-form-builder');
    }

    protected function countryFilterModeLabel()
    {
        return __('Country availability', 'griffinforms-form-builder');
    }

    protected function countryFilterModeDescription()
    {
        return __('Choose whether all countries are shown or provide a custom allow/deny list.', 'griffinforms-form-builder');
    }

    protected function allowedCountriesLabel()
    {
        return __('Allowed countries', 'griffinforms-form-builder');
    }

    protected function allowedCountriesDescription()
    {
        return __('Enter ISO country codes (for example: US, CA, GB) separated by commas or spaces.', 'griffinforms-form-builder');
    }

    protected function excludedCountriesLabel()
    {
        return __('Excluded countries', 'griffinforms-form-builder');
    }

    protected function excludedCountriesDescription()
    {
        return __('Enter ISO country codes to remove from the dropdown.', 'griffinforms-form-builder');
    }

    protected function addressCountryCodesRequired()
    {
        return __('Add at least one valid two-letter country code.', 'griffinforms-form-builder');
    }

    protected function allCountries()
    {
        return __('Show all countries', 'griffinforms-form-builder');
    }

    protected function limitToCountries()
    {
        return __('Only allow selected countries', 'griffinforms-form-builder');
    }

    protected function excludeCountries()
    {
        return __('Exclude selected countries', 'griffinforms-form-builder');
    }

    protected function countryFilterError()
    {
        return __('The selected country is not available for this field.', 'griffinforms-form-builder');
    }

    /**
     * Error message for invalid megapixels value.
     */
    public function getInvalidMegapixelsErrorMsg() {
        return __( 'Please enter a valid maximum megapixels value.', 'griffinforms-form-builder' );
    }

    /**
     * Error strings used via $this->lang->getText('<key>', 'error_msg') in JS.
     * Keys map as follows:
     *  - invalid_max_file_size_error      -> invalidMaxFileSizeError()
     *  - invalid_total_size_cap_error     -> invalidTotalSizeCapError()
     *  - invalid_megapixels_error         -> invalidMegapixelsError()
     *  - invalid_max_width_error          -> invalidMaxWidthError()
     *  - invalid_max_height_error         -> invalidMaxHeightError()
     *  - invalid_min_width_error          -> invalidMinWidthError()
     *  - at_least_one_mime_required       -> atLeastOneMimeRequired()
     *  - total_less_than_per_file_error   -> totalLessThanPerFileErrorMsg()
     */
    protected function invalidMaxFileSizeErrorMsg()
    {
        return __('Please enter a valid maximum file size in MB.', 'griffinforms-form-builder');
    }

    protected function invalidTotalSizeCapErrorMsg()
    {
        return __('Please enter a valid total size cap in MB.', 'griffinforms-form-builder');
    }

    protected function invalidMegapixelsErrorMsg()
    {
        return __('Please enter a valid maximum megapixels value.', 'griffinforms-form-builder');
    }

    protected function invalidMaxWidthErrorMsg()
    {
        return __('Maximum image width must be greater than or equal to the minimum width.', 'griffinforms-form-builder');
    }

    protected function invalidMinWidthErrorMsg()
    {
        return __('Minimum image width must be less than or equal to the maximum width.', 'griffinforms-form-builder');
    }

    protected function invalidMinWidthError()
    {
        return $this->invalidMinWidthErrorMsg();
    }

    protected function invalidMaxHeightErrorMsg()
    {
        return __('Maximum image height must be greater than or equal to the minimum height.', 'griffinforms-form-builder');
    }

    protected function atLeastOneMimeRequiredErrorMsg()
    {
        return __('Select at least one file type (from presets or Custom).', 'griffinforms-form-builder');
    }

    protected function totalLessThanPerFileErrorMsg()
    {
        return __('Total upload size must be equal to or greater than per-file size.', 'griffinforms-form-builder');
    }

    protected function termscheckboxlabelLabel()
    {
        return __('Checkbox Label', 'griffinforms-form-builder');
    }

    protected function termscheckboxlabelDescription()
    {
        return __('Text displayed next to the acceptance checkbox.', 'griffinforms-form-builder');
    }

    protected function termsanchortextLabel()
    {
        return __('Anchor Text', 'griffinforms-form-builder');
    }

    protected function termsanchortextDescription()
    {
        return __('Clickable text that points users to the Terms and Conditions.', 'griffinforms-form-builder');
    }

    protected function termssubtextLabel()
    {
        return __('Subtext', 'griffinforms-form-builder');
    }

    protected function termssubtextDescription()
    {
        return __('Additional information shown below the checkbox in a muted style.', 'griffinforms-form-builder');
    }

    protected function termslinktypeLabel()
    {
        return __('Terms Source', 'griffinforms-form-builder');
    }

    protected function termslinktypeDescription()
    {
        return __('Select whether to load the terms from a WordPress page or post.', 'griffinforms-form-builder');
    }

    protected function termspageselectLabel()
    {
        return __('Select Page', 'griffinforms-form-builder');
    }

    protected function termspageselectDescription()
    {
        return __('Choose the WordPress page that contains your Terms and Conditions.', 'griffinforms-form-builder');
    }

    protected function termspostselectLabel()
    {
        return __('Select Post', 'griffinforms-form-builder');
    }

    protected function termspostselectDescription()
    {
        return __('Choose the WordPress post that contains your Terms and Conditions.', 'griffinforms-form-builder');
    }

    protected function termsopenmodalLabel()
    {
        return __('Open in Modal?', 'griffinforms-form-builder');
    }

    protected function termsopenmodalDescription()
    {
        return __('Display the selected content inside a modal dialog instead of a new tab.', 'griffinforms-form-builder');
    }

    protected function termscheckboxlabelDefault()
    {
        return __('I agree to the Terms and Conditions', 'griffinforms-form-builder');
    }

    protected function termsanchortextDefault()
    {
        return __('Read Terms & Conditions', 'griffinforms-form-builder');
    }

    protected function termssubtextDefault()
    {
        return __('You must accept the terms before submitting this form.', 'griffinforms-form-builder');
    }

    protected function termsacceptlabelLabel()
    {
        return __('“I Accept” Button Label', 'griffinforms-form-builder');
    }

    protected function termsacceptlabelDescription()
    {
        return __('Customize the label for the acceptance button inside the modal.', 'griffinforms-form-builder');
    }

    protected function termsacceptlabelDefault()
    {
        return __('I Accept', 'griffinforms-form-builder');
    }

    protected function termsdeclinelabelLabel()
    {
        return __('“Do Not Accept” Button Label', 'griffinforms-form-builder');
    }

    protected function termsdeclinelabelDescription()
    {
        return __('Customize the label for the decline button inside the modal.', 'griffinforms-form-builder');
    }

    protected function termsdeclinelabelDefault()
    {
        return __('Do Not Accept', 'griffinforms-form-builder');
    }

    protected function termslinktargetrequired()
    {
        return __('Please select a page or post that contains your Terms and Conditions.', 'griffinforms-form-builder');
    }

    protected function termscheckboxlabelrequired()
    {
        return __('Checkbox label cannot be empty.', 'griffinforms-form-builder');
    }

    protected function termsanchortextrequired()
    {
        return __('Anchor text cannot be empty.', 'griffinforms-form-builder');
    }

    protected function displayStrengthMeterLabel()
    {
        return __('Show strength meter', 'griffinforms-form-builder');
    }

    protected function displayStrengthMeterDescription()
    {
        return __('Display WordPress\' built-in password strength bar and helper text under the field.', 'griffinforms-form-builder');
    }

    protected function showPasswordToggleLabel()
    {
        return __('Add “show password” toggle', 'griffinforms-form-builder');
    }

    protected function showPasswordToggleDescription()
    {
        return __('Adds an eye icon so respondents can reveal or hide their password while typing.', 'griffinforms-form-builder');
    }

    protected function autocompleteModeLabel()
    {
        return __('Autocomplete hint', 'griffinforms-form-builder');
    }

    protected function autocompleteModeDescription()
    {
        return __('Select the autocomplete value to use when browsers are allowed to remember this field.', 'griffinforms-form-builder');
    }

    protected function autocompleteModeNewPassword()
    {
        return __('New password (recommended for sign-up forms)', 'griffinforms-form-builder');
    }

    protected function autocompleteModeCurrentPassword()
    {
        return __('Existing password (use on log-in forms)', 'griffinforms-form-builder');
    }

    protected function autocompleteModeOn()
    {
        return __('Generic “on” value', 'griffinforms-form-builder');
    }

    protected function autocompleteModeOff()
    {
        return __('Disable browser suggestions', 'griffinforms-form-builder');
    }

    protected function requireConfirmationLabel()
    {
        return __('Require confirmation field', 'griffinforms-form-builder');
    }

    protected function requireConfirmationDescription()
    {
        return __('Adds a second password input and validates that both entries match.', 'griffinforms-form-builder');
    }

    protected function confirmationLabelLabel()
    {
        return __('Confirmation field label', 'griffinforms-form-builder');
    }

    protected function confirmationLabelDescription()
    {
        return __('Text displayed above the confirmation password input.', 'griffinforms-form-builder');
    }

    protected function confirmationLabelDefault()
    {
        return __('Confirm Password', 'griffinforms-form-builder');
    }

    protected function confirmationMessageLabel()
    {
        return __('Mismatch message', 'griffinforms-form-builder');
    }

    protected function confirmationMessageDescription()
    {
        return __('Shown when the confirmation value does not match the primary password.', 'griffinforms-form-builder');
    }

    protected function confirmationMessageDefault()
    {
        return __('Your passwords do not match.', 'griffinforms-form-builder');
    }

    protected function encryptPasswordsLabel()
    {
        return __('Encrypt saved passwords', 'griffinforms-form-builder');
    }

    protected function encryptPasswordsDescription()
    {
        return __('Encrypt this field before storing submissions. Decryption requires the key below.', 'griffinforms-form-builder');
    }

    protected function encryptionKeyLabel()
    {
        return __('Encryption key', 'griffinforms-form-builder');
    }

    protected function encryptionKeyDescription()
    {
        return __('Use a unique 32-character key. Keep it secure—without it encrypted passwords cannot be recovered.', 'griffinforms-form-builder');
    }

    protected function encryptionKeyGenerate()
    {
        return __('Generate secure key', 'griffinforms-form-builder');
    }

    protected function passwordMinLengthLabel()
    {
        return __('Minimum length', 'griffinforms-form-builder');
    }

    protected function passwordMinLengthDescription()
    {
        return __('Reject passwords shorter than this number of characters.', 'griffinforms-form-builder');
    }

    protected function passwordMaxLengthLabel()
    {
        return __('Maximum length', 'griffinforms-form-builder');
    }

    protected function passwordMaxLengthDescription()
    {
        return __('Reject passwords longer than this number of characters.', 'griffinforms-form-builder');
    }

    protected function passwordMinMessageLabel()
    {
        return __('Too-short message', 'griffinforms-form-builder');
    }

    protected function passwordMinMessageDefault()
    {
        return __('Your password must contain at least {{min}} characters.', 'griffinforms-form-builder');
    }

    protected function passwordMaxMessageLabel()
    {
        return __('Too-long message', 'griffinforms-form-builder');
    }

    protected function passwordMaxMessageDefault()
    {
        return __('Your password must not exceed {{max}} characters.', 'griffinforms-form-builder');
    }

    protected function passwordAllowedSetsLabel()
    {
        return __('Allowed character sets', 'griffinforms-form-builder');
    }

    protected function passwordAllowedSetsDescription()
    {
        return __('Only the selected character categories will be accepted in user passwords.', 'griffinforms-form-builder');
    }

    protected function passwordAllowedMessageLabel()
    {
        return __('Invalid character message', 'griffinforms-form-builder');
    }

    protected function passwordAllowedMessageDefault()
    {
        return __('Remove any characters that are not permitted in this password.', 'griffinforms-form-builder');
    }

    protected function passwordCharsetUppercase()
    {
        return __('Uppercase letters (A–Z)', 'griffinforms-form-builder');
    }

    protected function passwordCharsetLowercase()
    {
        return __('Lowercase letters (a–z)', 'griffinforms-form-builder');
    }

    protected function passwordCharsetNumbers()
    {
        return __('Numbers (0–9)', 'griffinforms-form-builder');
    }

    protected function passwordCharsetSymbols()
    {
        return __('Symbols (! @ # $ …)', 'griffinforms-form-builder');
    }

    protected function passwordCharsetSpaces()
    {
        return __('Spaces', 'griffinforms-form-builder');
    }

    protected function passwordRequiredSetsLabel()
    {
        return __('Required character types', 'griffinforms-form-builder');
    }

    protected function passwordRequiredSetsDescription()
    {
        return __('Users must include at least one character from each checked category.', 'griffinforms-form-builder');
    }

    protected function passwordRequireUppercaseMessageLabel()
    {
        return __('Missing uppercase message', 'griffinforms-form-builder');
    }

    protected function passwordRequireUppercaseMessageDefault()
    {
        return __('Your password must include at least one uppercase letter.', 'griffinforms-form-builder');
    }

    protected function passwordRequireLowercaseMessageLabel()
    {
        return __('Missing lowercase message', 'griffinforms-form-builder');
    }

    protected function passwordRequireLowercaseMessageDefault()
    {
        return __('Your password must include at least one lowercase letter.', 'griffinforms-form-builder');
    }

    protected function passwordRequireNumberMessageLabel()
    {
        return __('Missing number message', 'griffinforms-form-builder');
    }

    protected function passwordRequireNumberMessageDefault()
    {
        return __('Your password must include at least one number.', 'griffinforms-form-builder');
    }

    protected function passwordRequireSymbolMessageLabel()
    {
        return __('Missing symbol message', 'griffinforms-form-builder');
    }

    protected function passwordRequireSymbolMessageDefault()
    {
        return __('Your password must include at least one symbol.', 'griffinforms-form-builder');
    }

    protected function passwordDisallowedCharsLabel()
    {
        return __('Explicitly blocked characters', 'griffinforms-form-builder');
    }

    protected function passwordDisallowedCharsDescription()
    {
        return __('Enter characters (or short sequences) that should never appear in the password.', 'griffinforms-form-builder');
    }

    protected function passwordDisallowedMessageLabel()
    {
        return __('Blocked character message', 'griffinforms-form-builder');
    }

    protected function passwordDisallowedMessageDefault()
    {
        return __('Remove the characters that are not permitted in this password.', 'griffinforms-form-builder');
    }

    protected function passwordMinStrengthLabel()
    {
        return __('Minimum accepted strength', 'griffinforms-form-builder');
    }

    protected function passwordMinStrengthDescription()
    {
        return __('Passwords must score at or above this level on the strength meter.', 'griffinforms-form-builder');
    }

    protected function passwordStrengthWeak()
    {
        return __('Weak', 'griffinforms-form-builder');
    }

    protected function passwordStrengthMedium()
    {
        return __('Medium', 'griffinforms-form-builder');
    }

    protected function passwordStrengthStrong()
    {
        return __('Strong', 'griffinforms-form-builder');
    }

    protected function passwordStrengthVeryStrong()
    {
        return __('Very strong', 'griffinforms-form-builder');
    }

    protected function passwordStrengthMessageLabel()
    {
        return __('Strength error message', 'griffinforms-form-builder');
    }

    protected function passwordStrengthMessageDefault()
    {
        return __('Your password must reach at least a {{strength}} strength.', 'griffinforms-form-builder');
    }

    protected function passwordAllowedSetsRequired()
    {
        return __('Select at least one allowed character category.', 'griffinforms-form-builder');
    }

    protected function passwordrulessectionLabel()
    {
        return __('Length & Basic Rules', 'griffinforms-form-builder');
    }

    protected function passwordallowedsectionLabel()
    {
        return __('Allowed Character Sets', 'griffinforms-form-builder');
    }

    protected function passwordrequiredsectionLabel()
    {
        return __('Required Character Types', 'griffinforms-form-builder');
    }

    protected function passworddisallowedsectionLabel()
    {
        return __('Disallowed Characters', 'griffinforms-form-builder');
    }

    protected function passwordstrengthsectionLabel()
    {
        return __('Strength Requirement', 'griffinforms-form-builder');
    }

    protected function passworddisplaysectionLabel()
    {
        return __('Display Options', 'griffinforms-form-builder');
    }

    protected function passwordconfirmationsectionLabel()
    {
        return __('Confirmation', 'griffinforms-form-builder');
    }

    protected function passwordstoragesectionLabel()
    {
        return __('Storage & Encryption', 'griffinforms-form-builder');
    }

    protected function passwordRequiredSetsSubsetError()
    {
        return __('Required character types must also be listed in the allowed set.', 'griffinforms-form-builder');
    }

    protected function passwordMinGreaterThanMaxError()
    {
        return __('Maximum length must be greater than or equal to the minimum length.', 'griffinforms-form-builder');
    }

    protected function passwordConfirmationLabelRequired()
    {
        return __('Enter a label for the confirmation field.', 'griffinforms-form-builder');
    }

    protected function passwordConfirmationMessageRequired()
    {
        return __('Provide the message shown when passwords do not match.', 'griffinforms-form-builder');
    }

    protected function passwordEncryptionKeyRequired()
    {
        return __('Provide an encryption key or disable encryption for this field.', 'griffinforms-form-builder');
    }

    protected function padheightLabel()
    {
        return __('Pad Height', 'griffinforms-form-builder');
    }

    protected function padheightDescription()
    {
        return __('Height of the signature canvas in pixels.', 'griffinforms-form-builder');
    }

    protected function pencolorLabel()
    {
        return __('Pen Color', 'griffinforms-form-builder');
    }

    protected function pencolorDescription()
    {
        return __('Color of the pen stroke drawn on the signature pad.', 'griffinforms-form-builder');
    }

    protected function penthicknessLabel()
    {
        return __('Pen Thickness', 'griffinforms-form-builder');
    }

    protected function penthicknessDescription()
    {
        return __('Stroke weight of the pen, between 1 and 10.', 'griffinforms-form-builder');
    }

    protected function bgcolorLabel()
    {
        return __('Background Color', 'griffinforms-form-builder');
    }

    protected function bgcolorDescription()
    {
        return __('Background fill color of the signature canvas.', 'griffinforms-form-builder');
    }

    protected function signatureplaceholderLabel()
    {
        return __('Placeholder Text', 'griffinforms-form-builder');
    }

    protected function signatureplaceholderDescription()
    {
        return __('Hint text shown inside the empty pad before the user signs.', 'griffinforms-form-builder');
    }

    protected function inputrichtextoptionsLabel()
    {
        return __('Rich Text Options', 'griffinforms-form-builder');
    }

    protected function richtexttoolbarLabel()
    {
        return __('Toolbar', 'griffinforms-form-builder');
    }

    protected function richtexttoolbarDescription()
    {
        return __('Choose which formatting buttons are shown in the editor toolbar.', 'griffinforms-form-builder');
    }

    protected function richtextplaceholderLabel()
    {
        return __('Placeholder', 'griffinforms-form-builder');
    }

    protected function richtextplaceholderDescription()
    {
        return __('Text shown inside the empty editor before the user starts typing.', 'griffinforms-form-builder');
    }

    protected function richtextminheightLabel()
    {
        return __('Min Height', 'griffinforms-form-builder');
    }

    protected function richtextminheightDescription()
    {
        return __('Minimum height of the editor content area in pixels.', 'griffinforms-form-builder');
    }

    protected function richtextmaxheightLabel()
    {
        return __('Max Height', 'griffinforms-form-builder');
    }

    protected function richtextmaxheightDescription()
    {
        return __('Maximum height in pixels; the editor scrolls internally when set. Leave at 0 for no limit.', 'griffinforms-form-builder');
    }

    protected function richtextmaxcharactersLabel()
    {
        return __('Max Characters', 'griffinforms-form-builder');
    }

    protected function richtextmaxcharactersDescription()
    {
        return __('Maximum plain-text character count. Leave at 0 for no limit. A counter is shown to the user when set.', 'griffinforms-form-builder');
    }

    protected function inputlikertoptionsLabel()
    {
        return __('Likert Scale Options', 'griffinforms-form-builder');
    }

    protected function likertgridLabel()
    {
        return __('Scale Grid', 'griffinforms-form-builder');
    }

    protected function likertgridDescription()
    {
        return __('Add rows and columns, drag to reorder rows, and edit labels inline.', 'griffinforms-form-builder');
    }

    protected function likertallownaLabel()
    {
        return __('Add N/A column', 'griffinforms-form-builder');
    }

    protected function likertallownaDescription()
    {
        return __('Appends a "Not applicable" option column so respondents can opt out of a specific row.', 'griffinforms-form-builder');
    }

    protected function likertrequiredmodeLabel()
    {
        return __('Required mode', 'griffinforms-form-builder');
    }

    protected function likertrequiredmodeDescription()
    {
        return __('Controls what counts as a valid response when the field is marked required.', 'griffinforms-form-builder');
    }

    protected function likertcolumnwidthLabel()
    {
        return __('Column width', 'griffinforms-form-builder');
    }

    protected function likertcolumnwidthDescription()
    {
        return __('Auto lets each column size to its label. Equal width distributes columns evenly across the table.', 'griffinforms-form-builder');
    }

    protected function imageselectionoptionsLabel()
    {
        return __('Image Selection Options', 'griffinforms-form-builder');
    }

    protected function imageselectionoptionsDescription()
    {
        return __('Add image-based options and configure how they render and behave.', 'griffinforms-form-builder');
    }

    protected function imageselectionoptiontitleLabel()
    {
        return __('Option Title', 'griffinforms-form-builder');
    }

    protected function imageselectionoptiontitleDescription()
    {
        return __('Visible title shown below the option image.', 'griffinforms-form-builder');
    }

    protected function imageselectionoptiondescriptionLabel()
    {
        return __('Option Description', 'griffinforms-form-builder');
    }

    protected function imageselectionoptiondescriptionDescription()
    {
        return __('Optional secondary text shown below the option title.', 'griffinforms-form-builder');
    }

    protected function imageselectionoptionvalueLabel()
    {
        return __('Stored Value', 'griffinforms-form-builder');
    }

    protected function imageselectionoptionvalueDescription()
    {
        return __('Internal option slug stored with the submission.', 'griffinforms-form-builder');
    }

    protected function imageselectionnoneoptionLabel()
    {
        return __('Mark as "None of the above"', 'griffinforms-form-builder');
    }

    protected function imageselectionnoneoptionDescription()
    {
        return __('Selecting this option should represent an exclusive none-choice state.', 'griffinforms-form-builder');
    }

    protected function imageselectioncolumnsdesktopLabel()
    {
        return __('Desktop Columns', 'griffinforms-form-builder');
    }

    protected function imageselectioncolumnsdesktopDescription()
    {
        return __('Number of cards shown per row on desktop screens.', 'griffinforms-form-builder');
    }

    protected function imageselectioncolumnsmobileLabel()
    {
        return __('Mobile Columns', 'griffinforms-form-builder');
    }

    protected function imageselectioncolumnsmobileDescription()
    {
        return __('Number of cards shown per row on smaller screens.', 'griffinforms-form-builder');
    }

    protected function imageselectionshowtitleLabel()
    {
        return __('Show Option Title', 'griffinforms-form-builder');
    }

    protected function imageselectionshowtitleDescription()
    {
        return __('Display the title text beneath each image card.', 'griffinforms-form-builder');
    }

    protected function imageselectionshowdescriptionLabel()
    {
        return __('Show Option Description', 'griffinforms-form-builder');
    }

    protected function imageselectionshowdescriptionDescription()
    {
        return __('Display the description text beneath each option title.', 'griffinforms-form-builder');
    }

    protected function imageselectionaspectratioLabel()
    {
        return __('Image Aspect Ratio', 'griffinforms-form-builder');
    }

    protected function imageselectionaspectratioDescription()
    {
        return __('Controls how each option image is cropped inside its card.', 'griffinforms-form-builder');
    }

    protected function imageselectionrandomiseLabel()
    {
        return __('Randomise Option Order', 'griffinforms-form-builder');
    }

    protected function imageselectionrandomiseDescription()
    {
        return __('Shuffle the rendered option order each time the form loads.', 'griffinforms-form-builder');
    }

    protected function imageselectiondefaultselectedLabel()
    {
        return __('Default Selected Options', 'griffinforms-form-builder');
    }

    protected function imageselectiondefaultselectedDescription()
    {
        return __('Choose which options should be pre-selected when the form first loads.', 'griffinforms-form-builder');
    }

    public static function getInstance()
    {
        if (self::$instance == null)
        {
            self::$instance = new Field();
        }

        return self::$instance;
    }

    private function __construct()
    {
    }
}
