@apia/validations 3.0.25 → 3.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -205,7 +205,7 @@ function getValidations(outerValidation) {
205
205
  if (returnValue === true && validation.email)
206
206
  returnValue = !!String(v).match(
207
207
  // eslint-disable-next-line no-control-regex
208
- /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/
208
+ /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i
209
209
  ) || lang("email");
210
210
  if (returnValue === true && validation.differs)
211
211
  returnValue = v !== validation.differs || lang("differs", validation.differs);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/form/FormContext.tsx","../src/validationMethods.ts","../src/util.ts","../src/validationStore.ts","../src/form/formStyles.ts","../src/form/Form.tsx","../src/hooks/useField.ts","../src/hooks/useFieldStatesClassNames.ts","../src/hooks/useFieldValue.ts","../src/hooks/useValidationClass.ts","../src/components/ValidationError.tsx","../src/components/FieldWrapper.tsx","../src/components/Captcha.tsx","../src/components/Checkbox.tsx","../src/components/DeletableInput.tsx","../src/components/FileInput.tsx","../src/components/Input.tsx","../src/components/NumberInput.tsx","../src/components/Radio.tsx","../src/components/Select.tsx","../src/components/Switchbox.tsx","../src/components/Textarea.tsx","../src/collector/CollectorField.tsx","../src/collector/ValidatedCollectorField.ts","../src/collector/fields/Checkbox.tsx","../src/collector/fields/Input.tsx","../src/collector/fields/Select.tsx","../src/collector/fields/Textarea.tsx","../src/collector/fields/Label.tsx","../src/collector/fields/Button.tsx","../src/collector/Collector.tsx"],"sourcesContent":["import React from 'react';\r\nimport { TValidationResult } from '../types';\r\n\r\nexport interface IFormContext<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n avoidFieldsTouch?: boolean;\r\n name: string;\r\n validate: () => Promise<TValidationResult<ValueType, SubmitValueType>>;\r\n}\r\n\r\nexport const FormContext = React.createContext<IFormContext>(\r\n {} as IFormContext,\r\n);\r\n\r\n/**\r\n * Provee acceso de forma sencilla al contexto de\r\n * validación, que básicamente posee el nombre del\r\n * form en caso de que se quiera usar para acceder\r\n * a través de Redux a la información del mismo y un\r\n * método validate, que dispara la validación del\r\n * form.\r\n *\r\n * En la práctica, el método validate es casi\r\n * innecesario, ya que la validación se puede disparar\r\n * con cualquier botón que no tenga seteado el\r\n * atributo type=\"button\" (esto es así ya que en el\r\n * DOM se renderiza un elemento de tipo form).\r\n */\r\nexport function useFormContext() {\r\n const formContext = React.useContext(FormContext);\r\n if (!formContext) throw new Error('There is no FormContext');\r\n return formContext;\r\n}\r\n","import { IFieldDefinition, TFieldValidationResult } from './types';\r\nimport { getValidations } from './util';\r\n\r\nexport interface IValidateByRules<ValueType> {\r\n rules: NonNullable<IFieldDefinition['validate']>;\r\n value: ValueType;\r\n}\r\n\r\n/**\r\n * Este método toma un valor y unas reglas de validación\r\n * y ejecuta la validación correspondiente a dichas reglas.\r\n */\r\nexport function validateByRules<ValueType>({\r\n rules,\r\n value,\r\n}: IValidateByRules<ValueType>): TFieldValidationResult {\r\n const validationResult = getValidations(rules).validate(value);\r\n return validationResult;\r\n}\r\n","import { customEvents } from '@apia/util';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n IFieldDefinition,\r\n TValidationField,\r\n} from './types';\r\nimport { validateByRules } from './validationMethods';\r\n\r\nimport type formcheckLanguage from './lang/es';\r\nimport { validationsStore } from './validationStore';\r\n\r\ndeclare global {\r\n interface Window {\r\n NO_LANGUAGE_EXCEPTION: string;\r\n MSG_INVALID_REG_EXP: string;\r\n GNR_INVALID_NAME: string;\r\n }\r\n}\r\n\r\n/**\r\n * Realiza la validación del campo tomando en cuenta las\r\n * distintas posibilidades de validación.\r\n */\r\nexport async function validateField(\r\n field: TValidationField<unknown>,\r\n formName: string,\r\n): Promise<TFieldValidationResult> {\r\n let validationResult: TFieldValidationResult | null = null;\r\n const fieldValue = field.validationValueParser\r\n ? field.validationValueParser(field.value)\r\n : field.value;\r\n if (field.validationFunction) {\r\n validationResult = await field.validationFunction(fieldValue, formName);\r\n }\r\n if (\r\n (!field.validationFunction || validationResult === true) &&\r\n field.validationRules\r\n ) {\r\n validationResult = validateByRules({\r\n rules: field.validationRules,\r\n value: fieldValue,\r\n });\r\n } else if (validationResult === null) validationResult = true;\r\n return validationResult;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un campo resultó exitosa.\r\n */\r\nexport function hasSucceedFieldValidation(\r\n result: TFieldValidationResult,\r\n): result is true {\r\n return result === true;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un formulario resultó\r\n * exitosa. Está pensada para utilizar en el callback\r\n * onValidate de Form o en la acción validationsActions.validateForm\r\n */\r\nexport function hasSucceedFormValidation<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>(\r\n result: TValidationResult<ValueType, SubmitValueType>,\r\n): result is TSuccessfulValidation<ValueType, SubmitValueType> {\r\n return !('errors' in result);\r\n}\r\n\r\n/**\r\n * Intenta hacer foco en el campo y devuelve un booleano\r\n * indicando si se logró o no.\r\n */\r\nexport async function focusOnField(formName: string, field: TValidationField) {\r\n if (field.focus) {\r\n return (await field.focus()) || true;\r\n }\r\n\r\n const formElement = document.getElementById(\r\n `ValidationForm-${formName}`,\r\n ) as HTMLFormElement;\r\n const fieldElement: HTMLElement | null = formElement?.querySelector(\r\n `[name=\"${CSS.escape(field.name)}\"], #${CSS.escape(field.name)}`,\r\n );\r\n\r\n if (fieldElement) {\r\n return new Promise((resolve) => {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n fieldElement.focus();\r\n fieldElement.dispatchEvent(event);\r\n fieldElement.scrollIntoView({\r\n block: 'center',\r\n behavior: 'auto',\r\n });\r\n resolve(true);\r\n });\r\n }\r\n return false;\r\n}\r\n\r\nlet langDefinition: typeof formcheckLanguage;\r\n/**\r\n * Devuelve la cadena correspondiente a un código\r\n * de error, realizando los reemplazos correspondientes.\r\n */\r\nexport function lang(\r\n errorCode: keyof typeof formcheckLanguage,\r\n ...replacements: (string | number)[]\r\n) {\r\n if (!langDefinition[errorCode]) return '';\r\n let returnString = langDefinition[errorCode];\r\n replacements.forEach((replace, index) => {\r\n returnString = returnString.replace(`%${index}`, replace.toString());\r\n });\r\n return returnString;\r\n}\r\n\r\nexport function classToValidationFunction<T = string>(\r\n className: string,\r\n): TValidationField<T>['validationFunction'] {\r\n // validate[confirm:fieldName:fieldTitle?]\r\n const match = className?.match(/'confirm:(\\w+):(.+?)']/);\r\n if (match) {\r\n const validationFunction: TValidationField<T>['validationFunction'] = (\r\n value,\r\n formName,\r\n ) => {\r\n return value === validationsStore.getFieldStore(formName, match[1])?.value\r\n ? true\r\n : lang('confirm', match[2] ?? match[1]);\r\n };\r\n\r\n return validationFunction;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function classToValidate(\r\n className: string,\r\n): IFieldDefinition['validate'] {\r\n const validations: Record<string, unknown> = {};\r\n if (className) {\r\n const match = className.match(/validate\\[([^\\]]+)\\]/);\r\n if (match) {\r\n const definitions = match[1].replaceAll('~', '').split(',');\r\n definitions.forEach((definition) => {\r\n const definitionMatch = definition.match(/(\\w+)(?:=([\\w\\d]+))?/);\r\n if (definitionMatch) {\r\n const prop = definitionMatch[1] as keyof NonNullable<\r\n IFieldDefinition['validate']\r\n >;\r\n if (prop === 'pattern' && definitionMatch[2])\r\n validations[prop] = new RegExp(definitionMatch[2]);\r\n else if (definitionMatch[2]) {\r\n const value = definitionMatch[2].split(',');\r\n const actualValue = (\r\n value.length < 2 ? value.join() : value\r\n ) as NonNullable<IFieldDefinition['validate']>[typeof prop];\r\n validations[prop] =\r\n actualValue as (typeof validations)[typeof prop];\r\n } else validations[prop] = true;\r\n }\r\n });\r\n return validations as IFieldDefinition['validate'];\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nexport const getValidationErrorMessagesByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Carga el archivo con mensajes de errores según el lenguaje\r\n * especificado.\r\n */\r\nexport const getErrorsMapByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Realiza la carga de los mensajes de errores para el lenguaje\r\n * especificado. Este método debe llamarse antes de utilizar\r\n * las validaciones.\r\n */\r\nexport async function initValidations() {\r\n if (langDefinition) return;\r\n const code = document.documentElement.lang ?? 'es';\r\n langDefinition = (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${code}.ts`\r\n ).catch((error) => {\r\n notify({\r\n type: 'danger',\r\n message: window.NO_LANGUAGE_EXCEPTION,\r\n });\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n}\r\n\r\n/**\r\n * Devuelve una función validadora, que devolverá true\r\n * o una cadena con el mensaje de error correspondiente\r\n * según el lenguaje actual y las reglas de validación\r\n * establecidas.\r\n */\r\nexport function getValidations(outerValidation: IFieldDefinition['validate']): {\r\n validate: (v: unknown) => string | true;\r\n} {\r\n const validation = { ...outerValidation };\r\n if (!validation)\r\n return {\r\n validate: () => {\r\n return true;\r\n },\r\n } as { validate: () => true };\r\n\r\n return {\r\n validate: (outerV: unknown) => {\r\n const v = outerV ?? '';\r\n let returnValue: boolean | string = true;\r\n\r\n if (returnValue && validation.pattern) {\r\n let actualRegexp: RegExp;\r\n\r\n if (!(validation.pattern instanceof RegExp)) {\r\n const patternResult = validation.pattern.match(\r\n /(?:^\\/(.+)\\/(\\w+)?$)|(^.*$)/,\r\n ) as RegExpMatchArray;\r\n\r\n const regexp = patternResult[1];\r\n const flags = patternResult[2];\r\n const stringPattern = patternResult[3];\r\n\r\n actualRegexp = new RegExp(\r\n regexp || stringPattern,\r\n flags || undefined,\r\n );\r\n } else actualRegexp = validation.pattern;\r\n\r\n returnValue =\r\n !!String(v).match(actualRegexp) ||\r\n (validation.patternMessage ?? window.MSG_INVALID_REG_EXP);\r\n }\r\n if (returnValue === true && validation.maxLength)\r\n returnValue =\r\n String(v).length <= validation.maxLength ||\r\n lang('lengthmax', validation.maxLength);\r\n if (returnValue === true && validation.minLength)\r\n returnValue =\r\n String(v).length >= validation.minLength ||\r\n lang('lengthmin', validation.minLength);\r\n if (returnValue === true && validation.max && validation.min)\r\n returnValue =\r\n (Number(v) <= validation.max && Number(v) >= validation.min) ||\r\n lang('digitltd', validation.min, validation.max);\r\n if (returnValue === true && validation.min)\r\n returnValue =\r\n Number(v) >= validation.min || lang('digitmin', validation.min);\r\n if (returnValue === true && validation.max)\r\n returnValue =\r\n Number(v) <= validation.max || lang('digitltd', 0, validation.max);\r\n if (returnValue === true && validation.validName)\r\n returnValue =\r\n !!String(v).match(/^[a-zA-Z0-9_.]*$/) || window.GNR_INVALID_NAME;\r\n if (returnValue === true && (validation.alpha || validation.nodigit))\r\n returnValue = !!String(v).match(/^[a-zA-Z]*$/) || lang('alpha');\r\n if (returnValue === true && validation.alphanum)\r\n returnValue = !!String(v).match(/^[a-zA-Z0-9]*$/) || lang('alphanum');\r\n if (returnValue === true && (validation.digit || validation.number))\r\n returnValue = !!String(v).match(/^[0-9]*$/) || lang('digit');\r\n if (returnValue === true && validation.email)\r\n returnValue =\r\n !!String(v).match(\r\n // eslint-disable-next-line no-control-regex\r\n /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/,\r\n ) || lang('email');\r\n if (returnValue === true && validation.differs)\r\n returnValue =\r\n v !== validation.differs || lang('differs', validation.differs);\r\n if (returnValue === true && validation.length_str)\r\n returnValue =\r\n (String(v).length >= validation.length_str[0] &&\r\n String(v).length <= validation.length_str[1]) ||\r\n lang('length_str', ...validation.length_str);\r\n if (returnValue === true && validation.length_fix)\r\n returnValue =\r\n String(v).length === validation.length_fix ||\r\n lang('length_fix', validation.length_fix);\r\n if (returnValue === true && validation.words_min) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words >= validation.words_min ||\r\n lang('words_min', validation.words_min)\r\n );\r\n }\r\n if (returnValue === true && validation.words_max) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words <= validation.words_max ||\r\n lang('words_max', validation.words_max)\r\n );\r\n }\r\n if (returnValue === true && validation.words_range) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n (words <= validation.words_range[0] &&\r\n words >= validation.words_range[1]) ||\r\n lang('words_range', ...validation.words_range)\r\n );\r\n }\r\n if (returnValue === true && validation.required)\r\n returnValue =\r\n (Array.isArray(outerV) && outerV.length > 0) ||\r\n typeof outerV === 'number' ||\r\n (!Array.isArray(v) && !!v) ||\r\n lang('required');\r\n\r\n return returnValue;\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TPropsComparator,\r\n TPropsSelector,\r\n TPropsConfiguration,\r\n propsStore,\r\n usePropsSelector,\r\n} from '@apia/util';\r\nimport {\r\n TValidationField,\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n TWrongValidation,\r\n TRegisterFormOptions,\r\n TUpdateFieldOptions,\r\n TFormState,\r\n TRegisterField,\r\n TRegisterFieldOptions,\r\n} from './types';\r\nimport { focusOnField, hasSucceedFieldValidation, validateField } from './util';\r\n\r\ndeclare global {\r\n interface Window {\r\n MSG_WRONG_VALIDATION_NO_FOCUSED_FILE: string;\r\n }\r\n}\r\n\r\nexport const validationsStore = new (class {\r\n activeForms: string[] = [];\r\n\r\n timeouts: Record<string, ReturnType<typeof setTimeout> | true> = {};\r\n\r\n loadFromSessionStorage(formName: string) {\r\n const storageValue = sessionStorage.getItem(this.makeFormName(formName));\r\n\r\n if (storageValue) {\r\n try {\r\n const parsedValue = JSON.parse(storageValue) as {\r\n formProps: Partial<TFormState>;\r\n fields: Record<string, Partial<TValidationField>>;\r\n };\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, parsedValue.formProps, true);\r\n Object.entries(parsedValue.fields).forEach(([name, field]) => {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, name),\r\n {\r\n ...this.getFieldStore(formName, name),\r\n ...field,\r\n },\r\n { noEmit: true },\r\n );\r\n });\r\n\r\n return true;\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n persistFormToSessionStorage(formName: string) {\r\n const { isTouched, isValid, validationResult, ...formProps } =\r\n this.getFormStore(formName);\r\n const shouldPersist = formProps.persistToSessionStorage;\r\n\r\n if (shouldPersist) {\r\n const fields = formProps.fields\r\n .map((current) => {\r\n const {\r\n validationFunction,\r\n isTouched,\r\n error,\r\n validationValueParser,\r\n ...field\r\n } = this.getFieldStore(formName, current);\r\n return field;\r\n })\r\n .reduce(\r\n (o, c) => ({ ...o, [c.name]: c }),\r\n {} as Record<string, Partial<TValidationField>>,\r\n );\r\n\r\n sessionStorage.setItem(\r\n this.makeFormName(formName),\r\n JSON.stringify({\r\n formProps,\r\n fields,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n getFieldStore(formName: string, fieldName: string) {\r\n return propsStore.getFieldProps<TValidationField>(\r\n this.makeFieldName(formName, fieldName),\r\n );\r\n }\r\n\r\n getFormStore(formName: string) {\r\n return propsStore.getFieldProps<TFormState>(this.makeFormName(formName));\r\n }\r\n\r\n updateFieldStore(\r\n formName: string,\r\n fieldName: string,\r\n props: Partial<TValidationField>,\r\n noEmit?: boolean,\r\n ) {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, fieldName),\r\n {\r\n ...this.getFieldStore(formName, fieldName),\r\n ...props,\r\n },\r\n { noEmit },\r\n );\r\n this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n updateFormStore(\r\n formName: string,\r\n newState: Partial<TFormState>,\r\n avoidPersist = false,\r\n ) {\r\n propsStore.updateField(this.makeFormName(formName), newState);\r\n if (!avoidPersist) this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n enableFormTouch(formName: string) {\r\n this.timeouts[formName] = true;\r\n }\r\n\r\n existsField = (formName: string, fieldName: string) => {\r\n return !!this.getFormStore(formName)?.fields?.includes(fieldName);\r\n };\r\n\r\n makeFieldName(formName: string, fieldName: string) {\r\n return `validation_${formName}_${fieldName}`;\r\n }\r\n\r\n makeFormName(formName: string) {\r\n return `validation_${formName}`;\r\n }\r\n\r\n registerField = (\r\n formName: string,\r\n registerData: TRegisterField,\r\n options: TRegisterFieldOptions = { registerIfExists: true },\r\n ) => {\r\n const formProps = this.getFormStore(formName);\r\n if (formProps === undefined) this.registerForm(formName);\r\n\r\n if (!this.getFormStore(formName)?.fields.includes(registerData.name))\r\n this.updateFormStore(formName, {\r\n fields: [\r\n ...(this.getFormStore(formName)?.fields ?? []),\r\n registerData.name,\r\n ],\r\n });\r\n\r\n const existsInStore = this.getFieldStore(formName, registerData.name);\r\n\r\n if (\r\n (formProps?.avoidFieldsOverride || !options.registerIfExists) &&\r\n existsInStore\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unused-vars\r\n const { value, ...updateData } = registerData;\r\n this.updateField(formName, updateData, {\r\n markFormAsTouched: false,\r\n avoidPropagation: options.avoidPropagation,\r\n });\r\n return;\r\n }\r\n\r\n this.updateFieldStore(\r\n formName,\r\n registerData.name,\r\n registerData,\r\n options.avoidPropagation,\r\n );\r\n };\r\n\r\n /**\r\n * Inicializa el estado de un nuevo formulario\r\n */\r\n registerForm = (\r\n formName: string,\r\n props: TRegisterFormOptions = { avoidFieldsOverride: false },\r\n ) => {\r\n props.persistToSessionStorage && this.loadFromSessionStorage(formName);\r\n\r\n if (this.activeForms.includes(formName)) {\r\n this.updateFormStore(\r\n formName,\r\n {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n true,\r\n );\r\n if (props.initialValues)\r\n Object.entries(props.initialValues).forEach(([fieldId, fieldProps]) => {\r\n if (fieldProps instanceof Object)\r\n this.updateField(\r\n formName,\r\n { name: fieldId, ...fieldProps },\r\n { avoidFieldsOverride: props.avoidFieldsOverride },\r\n );\r\n });\r\n return;\r\n }\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n fields: [],\r\n isTouched: false,\r\n isValid: false,\r\n name: formName,\r\n validationResult: null,\r\n persistToSessionStorage: props.persistToSessionStorage,\r\n });\r\n\r\n // Set initial values\r\n Object.entries(props.initialValues ?? {}).forEach(([name, value]) => {\r\n this.updateField(\r\n formName,\r\n { name, value },\r\n {\r\n markFormAsTouched: false,\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n );\r\n });\r\n };\r\n\r\n /**\r\n * Setea el valor del campo con el nombre provisto. Si el campo no existe\r\n * en el formulario lo crea.\r\n */\r\n setFieldValue = (\r\n formName: string,\r\n fieldName: string,\r\n newValue: unknown,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n if (!this.getFieldStore(formName, fieldName))\r\n this.registerField(formName, { name: fieldName, value: newValue });\r\n else\r\n this.updateField(\r\n formName,\r\n {\r\n name: fieldName,\r\n value: newValue,\r\n error: null,\r\n },\r\n options,\r\n );\r\n\r\n if (this.getFormStore(formName).isValid)\r\n this.updateFormStore(formName, { isValid: false });\r\n };\r\n\r\n setFormIsTouched = (formName: string, isTouched = true) => {\r\n this.updateFormStore(formName, { isTouched }, true);\r\n };\r\n\r\n /**\r\n * Elimina un campo del registro de validación de un formulario. De esta\r\n * forma cualquier validación que pudiera aplicarse sobre el mismo, ya no se\r\n * aplicará.\r\n */\r\n unregisterField = (formName: string, fieldName: string) => {\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, {\r\n fields: this.getFormStore(formName).fields.filter((current) => {\r\n return current !== fieldName;\r\n }),\r\n });\r\n propsStore.removeField(this.makeFieldName(formName, fieldName));\r\n };\r\n\r\n /**\r\n * Elimina un formulario del store de validación junto con todos los campos\r\n * asociados al mismo.\r\n */\r\n unregisterForm = (formName: string) => {\r\n this.getFormStore(formName)?.fields?.forEach((current) => {\r\n return propsStore.removeField(this.makeFieldName(formName, current));\r\n });\r\n this.activeForms = this.activeForms.filter((current) => {\r\n return current !== formName;\r\n });\r\n propsStore.removeField(this.makeFormName(formName));\r\n delete this.timeouts[formName];\r\n };\r\n\r\n /**\r\n * Actualiza las propiedades de un campo, si no existe, lo registra en el\r\n * formulario.\r\n */\r\n updateField = (\r\n formName: string,\r\n field: Partial<TValidationField> & Pick<TValidationField, 'name'>,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n const previousValue = this.getFieldStore(formName, field.name)\r\n ?.value as unknown;\r\n\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, { isValid: false }, true);\r\n else this.registerForm(formName);\r\n\r\n if (previousValue !== undefined && options?.avoidFieldsOverride) return;\r\n\r\n const isTouched =\r\n field.value !== undefined &&\r\n field.value !== previousValue &&\r\n options?.markFormAsTouched !== false;\r\n\r\n if (!this.existsField(formName, field.name))\r\n this.registerField(formName, field, {\r\n avoidPropagation: options?.avoidPropagation,\r\n });\r\n this.updateFieldStore(\r\n formName,\r\n field.name,\r\n {\r\n ...field,\r\n isTouched:\r\n isTouched || this.getFieldStore(formName, field.name)?.isTouched,\r\n },\r\n options?.avoidPropagation,\r\n );\r\n if (isTouched) this.setFormIsTouched(formName);\r\n };\r\n\r\n /**\r\n * Actualiza múltiples campos al mismo tiempo.\r\n */\r\n updateMultipleFields = (\r\n formName: string,\r\n fields: (Partial<TValidationField> & Pick<TValidationField, 'name'>)[],\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n fields.forEach((current) => {\r\n return this.updateField(formName, current, options);\r\n });\r\n };\r\n\r\n /**\r\n * Ejecuta la validación sobre un formulario. En caso de que la validación\r\n * falle, se intenta hacer foco sobre el campo que no pudo validar.\r\n * Es importante notar que en caso de que un campo requiera validación,\r\n * debería estar presente en el DOM.\r\n *\r\n * No es necesario que el campo esté visible, ya que en caso de estar oculto\r\n * (por ejemplo por ser hijo de un acordeón), se emitirá un evento para\r\n * expandir al elemento padre que lo estuviera ocultando.\r\n *\r\n * @returns Devuelve una promesa que al ser resuelta otorga un objeto de tipo\r\n * TValidationResult. Este tipo está pensado para ser usado en conjunto con\r\n * el método hasSucceedFormValidation, que determinará si la validación fue\r\n * exitosa o hubo errores.\r\n *\r\n * @example\r\n *\r\n * const result = await validationStore.validateForm('myForm');\r\n * if(hasSucceedValidation(result)) {\r\n * console.log('Success!', result);\r\n * } else {\r\n * console.error('Validation error', result);\r\n * }\r\n */\r\n validateForm = async <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n >(\r\n formName: string,\r\n ) => {\r\n const state = this.getFormStore(formName);\r\n\r\n if (!state) return { errors: { form: 'No form with name ' + formName } };\r\n\r\n const fields = state.fields.map((current) => {\r\n return this.getFieldStore(formName, current);\r\n });\r\n\r\n const validationErrors: TWrongValidation = { errors: {} };\r\n const validationValues: TSuccessfulValidation<Record<string, unknown>> = {\r\n submitValues: {},\r\n values: {},\r\n };\r\n let hasFiredFocus = false;\r\n let existsErrors = false;\r\n const fieldsWithError: Record<string, TFieldValidationResult> = {};\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const field of fields.filter((current) => {\r\n return current !== undefined;\r\n })) {\r\n // eslint-disable-next-line no-await-in-loop\r\n const validationResult = await validateField(field, formName);\r\n fieldsWithError[field.name] = validationResult;\r\n\r\n if (hasSucceedFieldValidation(validationResult)) {\r\n validationValues.submitValues[field.submitName ?? field.name] =\r\n field.submitValueParser\r\n ? await field.submitValueParser(field.value)\r\n : field.value;\r\n validationValues.values[field.name] = field.value;\r\n } else {\r\n this.updateField(formName, {\r\n name: field.name,\r\n error: validationResult,\r\n });\r\n if (!hasFiredFocus) {\r\n // eslint-disable-next-line no-await-in-loop\r\n if (await focusOnField(formName, field)) hasFiredFocus = true;\r\n }\r\n existsErrors = true;\r\n validationErrors.errors[field.name] = validationResult;\r\n }\r\n }\r\n\r\n if (existsErrors) {\r\n if (!hasFiredFocus) {\r\n notify({\r\n message: window.MSG_WRONG_VALIDATION_NO_FOCUSED_FILE,\r\n type: 'danger',\r\n });\r\n console.error('Campos que fallaron la validación', fieldsWithError);\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: false,\r\n validationResult: validationErrors,\r\n },\r\n true,\r\n );\r\n return validationErrors as TValidationResult<ValueType, SubmitValueType>;\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: true,\r\n validationResult: validationValues,\r\n },\r\n true,\r\n );\r\n return validationValues as TValidationResult<ValueType, SubmitValueType>;\r\n };\r\n})();\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function useFormSelector<Selected = any>(\r\n formName: string,\r\n selector: TPropsSelector<Selected, TFormState>,\r\n comparator?: TPropsComparator<Selected>,\r\n) {\r\n return usePropsSelector(\r\n validationsStore.makeFormName(formName),\r\n selector,\r\n comparator,\r\n );\r\n}\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un campo de formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n selector?: TPropsSelector<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n configurator?: TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n confOrSelector?:\r\n | TPropsSelector<Selected, TValidationField<ValueType, SubmitValueType>>\r\n | TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected {\r\n const fieldId = validationsStore.makeFieldName(formName, fieldName);\r\n return usePropsSelector(fieldId, confOrSelector, comparator);\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const formStyles: ThemeUICSSObject = {\r\n '.fieldWrapper': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n\r\n '&.checkbox': {\r\n alignItems: 'center',\r\n },\r\n },\r\n\r\n '.error': {\r\n borderLeftStyle: 'solid',\r\n borderLeftWidth: '4px',\r\n borderLeftColor: 'danger',\r\n },\r\n '.touched': {\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n borderColor: 'orange',\r\n },\r\n};\r\n","import { useUnmount, useMount } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { getVariant, injectStyles, Box, BoxProps } from '@apia/theme';\r\nimport { FormContext, IFormContext } from './FormContext';\r\nimport { TValidationResult } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\nimport { formStyles } from './formStyles';\r\n\r\nexport type TOnValidate<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> = (\r\n validationResult: TValidationResult<ValueType, SubmitValueType>,\r\n) => unknown;\r\n\r\nexport interface IForm<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n /**\r\n * Si se pasa en true, los campos que se registren en este form no\r\n * sobreescribirán valores previos si es que existen, sin importar el valor de\r\n * avoidRegisterIfExists pasado al useField.\r\n */\r\n avoidFieldsOverride?: boolean;\r\n /**\r\n * Impide que se apliquen los estilos que indican que un campo fue alterado.\r\n */\r\n avoidFieldsTouch?: boolean;\r\n children: React.ReactNode;\r\n className?: string;\r\n initialValues?: Partial<ValueType>;\r\n name?: string;\r\n onUnmount?: () => unknown;\r\n /**\r\n * Cuando se ejecuta una acción de validación desde\r\n * algún lugar de la aplicación se llama a este método\r\n * con el resultado de dicha ejecución.\r\n */\r\n onValidate?: TOnValidate<ValueType, SubmitValueType>;\r\n persistToSessionStorage?: boolean;\r\n /**\r\n * Permite definir si el formulario va a ser borrado de la validación al ser\r\n * desmontado\r\n */\r\n unregisterOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Cuando se desea usar el sistema de validación,\r\n * se debe utilizar este componente como form contenedor\r\n * de todos los campos que quieran validarse.\r\n *\r\n * Es importante que no se coloquen formularios dentro\r\n * de formularios ya que esto podría afectar negativamente\r\n * el proceso de validación.\r\n *\r\n * @props\r\n * *name:* Se puede pasar un nombre para identificar\r\n * el form. Este nombre será utilizado para almacenar\r\n * la información en Redux, por lo que si se desea\r\n * acceder a la información recolectada por la librería,\r\n * es conveniente pasar un nombre conocido y único. En\r\n * caso de no se pase ningún nombre, la aplicación\r\n * generará un nombre único automaticamente.\r\n *\r\n * *onValidate:* Un callback que será llamado cuando\r\n * se invoque el método validateForm del store o cuando\r\n * se lance el evento de submit del elemento form (por\r\n * ejemplo mediante un click en un botón que no tenga\r\n * type=\"button\"), con el resultado de la validación.\r\n *\r\n * avoidFieldsOverride\r\n * avoidFieldsTouch\r\n *\r\n * @see useField\r\n * @see useForm\r\n *\r\n * @important Debido a que este hook renderiza un elemento\r\n * form en el DOM, es importante agregar el atributo\r\n * type=\"button\" a todos los botones dentro del formulario\r\n * que no se desea que disparen la validación.\r\n *\r\n * @example\r\n * Para ver un ejemplo funcional, mira el componente\r\n * Invitations.tsx\r\n *\r\n * // IMPORTANTE: El tipado del componente Form es genérico\r\n * // por lo que es posible instanciarlo como se muestra a\r\n * // continuación, lo que nos da el tipado correcto en el\r\n * // callback onValidate.\r\n * <Form<FormDataType> onValidate={(res) => {\r\n * if(hasSucceedValidation(res)) {\r\n * // Do something with submitValues\r\n * } else {\r\n * // Do something with errors\r\n * }\r\n * }}>\r\n * ...{children}\r\n * </Form>\r\n */\r\nconst Form = <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>({\r\n avoidFieldsOverride,\r\n avoidFieldsTouch,\r\n children,\r\n className,\r\n name,\r\n initialValues,\r\n onUnmount,\r\n onValidate,\r\n persistToSessionStorage,\r\n unregisterOnUnmount,\r\n}: IForm<ValueType, SubmitValueType>) => {\r\n const actualName = React.useMemo(\r\n () => name ?? `ValidationForm${uniqueId()}`,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const handleSubmit = React.useCallback<React.FormEventHandler>(\r\n async (ev) => {\r\n ev.preventDefault();\r\n const validationRes = (await validationsStore.validateForm(\r\n actualName,\r\n )) as TValidationResult<ValueType, SubmitValueType>;\r\n if (validationRes && onValidate) onValidate(validationRes);\r\n },\r\n [actualName, onValidate],\r\n );\r\n const contextValue = React.useMemo<IFormContext>(\r\n () => ({\r\n avoidFieldsTouch,\r\n name: actualName,\r\n validate: async () => validationsStore.validateForm(actualName),\r\n }),\r\n [actualName, avoidFieldsTouch],\r\n );\r\n\r\n useUnmount(() => {\r\n onUnmount?.();\r\n if (unregisterOnUnmount !== false)\r\n validationsStore.unregisterForm(actualName);\r\n });\r\n\r\n const [hasRegistered, setHasRegistered] = React.useState(false);\r\n\r\n useMount(() => {\r\n validationsStore.registerForm(actualName, {\r\n avoidFieldsOverride: avoidFieldsOverride ?? initialValues !== undefined,\r\n initialValues,\r\n persistToSessionStorage,\r\n });\r\n setHasRegistered(true);\r\n });\r\n if (!hasRegistered) return null;\r\n\r\n return (\r\n <FormContext.Provider value={contextValue}>\r\n <Box\r\n as=\"form\"\r\n {...getVariant('layout.common.validations.form')}\r\n className={`validationsForm ${className}`}\r\n id={`ValidationForm-${actualName}`}\r\n {...({ name: actualName } as unknown as BoxProps)}\r\n onSubmit={handleSubmit}\r\n >\r\n {children}\r\n </Box>\r\n </FormContext.Provider>\r\n );\r\n};\r\n\r\ninjectStyles('layout.common.validations.form', formStyles);\r\n\r\nexport { Form };\r\n","import { useMount, useUnmount } from '@apia/util';\r\nimport React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { TValidationField } from '../types';\r\nimport { useFieldSelector, validationsStore } from '../validationStore';\r\n\r\nexport type TUseField<ValueType = unknown, SubmitValueType = ValueType> = Omit<\r\n TValidationField<ValueType, SubmitValueType>,\r\n 'error' | 'value' | 'isTouched'\r\n> & {\r\n /**\r\n * Con esta propiedad es posible evitar que el campo\r\n * se registre cuando ya fue registrado previamente en\r\n * el store. De esta forma, se evitaría escribir sobre\r\n * un valor que ya estaba seteado anteriormente.\r\n */\r\n avoidRegisterIfExists?: boolean;\r\n /**\r\n * Si se está fuera de contexto de validación, se puede pasar un formName\r\n * para evitar que el hook lo intente tomar de contexto.\r\n */\r\n formName?: string;\r\n initialValue?: ValueType;\r\n removeOnUnmount?: boolean;\r\n};\r\n\r\n/**\r\n * Este hook permite registrar un field para ser validado,\r\n * o simplemente para recolectar su valor, e incluso aplicar\r\n * una función de transformación de dicho valor antes de\r\n * hacer submit.\r\n *\r\n * @returns\r\n * *error:* Es null mientras que no haya errores de\r\n * validación, y un string en caso de que si lo haya.\r\n *\r\n * *value:* Es el valor actual del campo.\r\n *\r\n * *name:* Debería utilizarse para dar * valor al atributo\r\n * name o id del contenedor que debe recibir el foco en caso\r\n * de que la validación fallara. (Esto es, cuando se deba\r\n * realizar foco porque la validación falló, la librería\r\n * intentará encontrar un campo con el selector\r\n * [name=${name}, #${name}] dentro del formulario).\r\n *\r\n * *onChange:* Se utiliza para setear el valor del campo,\r\n * puede utilizarse directamente como callback para la\r\n * propiedad onChange que aceptan la mayoría de los campos,\r\n * ya que intentará setear el valor con ev.target.value\r\n * y si esa propiedad no está definida, lo hará directamente\r\n * con ev.\r\n *\r\n * @example\r\n * // Si se desea un ejemplo más complejo, vea el componente\r\n * // Invitations.tsx que se encuentra dentro del directorio\r\n * // de la librería.\r\n *\r\n * const inputProps = useField<string>({\r\n name: 'name',\r\n validationRules: {\r\n required: true,\r\n minLength: 5,\r\n maxLength: 10\r\n },\r\n initialValue: metadata.value,\r\n * });\r\n\r\n return <Box>\r\n <Input {...inputProps} />\r\n <ValidationError name=\"name\" />\r\n </Box>\r\n */\r\nexport function useField<ValueType = unknown, SubmitValueType = ValueType>(\r\n fieldDefinition: TUseField<ValueType, SubmitValueType>,\r\n) {\r\n const formContext = React.useContext(FormContext);\r\n const formName = fieldDefinition.formName ?? formContext.name;\r\n\r\n if (!formName) {\r\n console.error(fieldDefinition);\r\n throw new Error(\r\n `useField: It was not possible to determine the formName in field with name ${fieldDefinition.name}`,\r\n );\r\n }\r\n\r\n React.useMemo(() => {\r\n validationsStore.registerField(\r\n formName,\r\n {\r\n ...fieldDefinition,\r\n ...(fieldDefinition.initialValue !== undefined\r\n ? { value: fieldDefinition.initialValue }\r\n : null),\r\n },\r\n {\r\n avoidPropagation: true,\r\n registerIfExists: !fieldDefinition.avoidRegisterIfExists,\r\n },\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useMount(() => {\r\n if (\r\n fieldDefinition.initialValue !== undefined &&\r\n ((!validationsStore.getFormStore(formName)?.avoidFieldsOverride &&\r\n !fieldDefinition.avoidRegisterIfExists) ||\r\n validationsStore.getFieldStore(formName, fieldDefinition.name) ===\r\n undefined)\r\n )\r\n validationsStore.setFieldValue(\r\n formName,\r\n fieldDefinition.name,\r\n fieldDefinition.initialValue,\r\n );\r\n });\r\n\r\n useUnmount(() => {\r\n if (fieldDefinition.removeOnUnmount)\r\n validationsStore.unregisterField(formName, fieldDefinition.name);\r\n });\r\n\r\n const {\r\n name,\r\n value: storeValue,\r\n error,\r\n isTouched,\r\n } = useFieldSelector<\r\n ValueType,\r\n SubmitValueType,\r\n TValidationField<ValueType, SubmitValueType>\r\n >(\r\n formName,\r\n fieldDefinition.name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (\r\n a === PropsSelectorUndefinedObject &&\r\n fieldDefinition.initialValue !== undefined\r\n )\r\n return true;\r\n return shallowEqual(a, b);\r\n },\r\n );\r\n\r\n const [localValue, setLocalValue] = React.useState<ValueType | undefined>(\r\n fieldDefinition.initialValue,\r\n );\r\n\r\n React.useEffect(() => {\r\n setLocalValue(storeValue);\r\n }, [storeValue]);\r\n\r\n const onChange = React.useCallback(\r\n (ev: React.ChangeEvent | ValueType) => {\r\n const reactChangeEvent = ev as React.ChangeEvent<HTMLInputElement>;\r\n let newValue: ValueType;\r\n if (\r\n typeof reactChangeEvent === 'object' &&\r\n reactChangeEvent &&\r\n reactChangeEvent.target !== undefined &&\r\n reactChangeEvent.target.value !== undefined\r\n ) {\r\n newValue = reactChangeEvent.target.value as unknown as ValueType;\r\n } else newValue = ev as ValueType;\r\n\r\n setLocalValue(newValue);\r\n validationsStore.setFieldValue(formName, fieldDefinition.name, newValue);\r\n },\r\n [fieldDefinition.name, formName],\r\n );\r\n\r\n return {\r\n error,\r\n isTouched,\r\n name,\r\n onChange,\r\n updateValidations: React.useCallback(\r\n ({\r\n validationFunction,\r\n validationRules,\r\n }: Pick<TValidationField, 'validationRules' | 'validationFunction'>) => {\r\n validationsStore.updateField(formName, {\r\n name: fieldDefinition.name,\r\n validationFunction,\r\n validationRules,\r\n });\r\n },\r\n [formName, fieldDefinition.name],\r\n ),\r\n value: localValue ?? (fieldDefinition.initialValue as ValueType),\r\n };\r\n}\r\n","import { useFormContext } from '../form/FormContext';\r\nimport { useField } from './useField';\r\n\r\nexport function useFieldStatesClassNames<T = unknown>(\r\n name: string,\r\n formName?: string,\r\n): string {\r\n const { error, isTouched } = useField<T>({\r\n name,\r\n formName,\r\n avoidRegisterIfExists: true,\r\n removeOnUnmount: false,\r\n });\r\n const { avoidFieldsTouch } = useFormContext();\r\n if (error) return 'error';\r\n if (!avoidFieldsTouch && isTouched) return 'touched';\r\n return '';\r\n}\r\n","import { shallowEqual } from 'react-redux';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\ninterface IUseFieldValue {\r\n formName?: string;\r\n name: string;\r\n}\r\n\r\nexport function useFieldValue<T = unknown>({ formName, name }: IUseFieldValue) {\r\n const { name: hookFormName } = useFormContext();\r\n\r\n if (!formName && !hookFormName) {\r\n throw new Error(\r\n `useFieldValue: It was not possible to determine the formName in field with name ${name}`,\r\n );\r\n }\r\n\r\n const { value } = useFieldSelector(\r\n formName ?? hookFormName,\r\n name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (a === PropsSelectorUndefinedObject && b?.value === undefined)\r\n return true;\r\n return shallowEqual(a?.value, b?.value);\r\n },\r\n );\r\n\r\n return value as T;\r\n}\r\n","import React from 'react';\r\nimport { TDefaultFieldType } from '../components/types';\r\nimport { TValidationFunction } from '../types';\r\nimport { classToValidate, classToValidationFunction } from '../util';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FormContext } from '../form/FormContext';\r\n\r\nexport function useValidationClass<T>({\r\n customValidation,\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n}: Pick<\r\n TDefaultFieldType<T>,\r\n 'validationClass' | 'validationFunction' | 'validationRules' | 'name'\r\n> & {\r\n customValidation?: TValidationFunction<T>;\r\n formName?: string;\r\n}) {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n\r\n const classesValidationFunction = React.useMemo(\r\n () =>\r\n validationClass !== undefined\r\n ? classToValidationFunction<T>(validationClass)\r\n : undefined,\r\n [validationClass],\r\n );\r\n const initialValidationFunction = React.useMemo(\r\n () =>\r\n validationsStore.getFieldStore(formName ?? contextFormName, name)\r\n ?.validationFunction,\r\n [contextFormName, formName, name],\r\n );\r\n const actualValidationFunction: TValidationFunction<T> = React.useCallback(\r\n (currentValue, parameterFormName) => {\r\n let result =\r\n initialValidationFunction?.(currentValue, parameterFormName) ??\r\n validationFunction?.(currentValue, parameterFormName) ??\r\n true;\r\n if (typeof result === 'string') return result;\r\n\r\n if (customValidation) {\r\n result = customValidation(currentValue, parameterFormName);\r\n }\r\n if (typeof result === 'string') return result;\r\n\r\n if (classesValidationFunction)\r\n return classesValidationFunction(currentValue, parameterFormName);\r\n\r\n return true;\r\n },\r\n [\r\n classesValidationFunction,\r\n customValidation,\r\n initialValidationFunction,\r\n validationFunction,\r\n ],\r\n );\r\n const actualValidationRules = React.useMemo(() => {\r\n return {\r\n ...validationRules,\r\n ...(validationClass !== undefined\r\n ? classToValidate(validationClass)\r\n : {}),\r\n };\r\n }, [validationClass, validationRules]);\r\n\r\n return {\r\n actualValidationFunction,\r\n actualValidationRules,\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\n/**\r\n * Renderiza los errores del campo con el nombre pasado\r\n * como prop. En caso de que no exista error, no renderiza\r\n * nada.\r\n *\r\n * @props\r\n * *name:* El nombre del campo cuyos errores se quieren\r\n * renderizar.\r\n */\r\nexport const ValidationError = ({ name }: { name: string }) => {\r\n const formContext = useFormContext();\r\n const error = useFieldSelector(formContext.name, name, (state) => {\r\n return state?.error;\r\n });\r\n\r\n return error ? (\r\n <Box\r\n as=\"strong\"\r\n role=\"alert\"\r\n sx={{\r\n color: 'danger',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: error }}\r\n />\r\n ) : null;\r\n};\r\n","import { RequiredMark } from '@apia/components';\r\nimport React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\nimport { ValidationError } from './ValidationError';\r\n\r\ndeclare global {\r\n interface Window {\r\n SHOW_REQUIRED_POSITION: string;\r\n }\r\n}\r\n\r\nexport interface IWrapper extends BoxProps {\r\n avoidSemicolon?: boolean;\r\n children: React.ReactNode;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n type?: 'checkbox';\r\n}\r\n\r\nexport const FieldWrapper = ({\r\n name,\r\n label,\r\n avoidSemicolon,\r\n children,\r\n className,\r\n as = 'label',\r\n type,\r\n ...props\r\n}: IWrapper) => {\r\n const { name: formName } = useFormContext();\r\n const isRequired = useFieldSelector(\r\n formName,\r\n name,\r\n (global) => global?.validationRules?.required,\r\n );\r\n\r\n if (type === 'checkbox') {\r\n return (\r\n <Box\r\n className={`fieldWrapper checkboxWrapper ${className ?? ''}`}\r\n {...props}\r\n as={as}\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {children}\r\n <span>\r\n {label}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </span>\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n /**\r\n * Cuando el campo no tiene etiqueta, no tiene ningún sentido mostrar marca\r\n * de requerido ni tag label.\r\n */\r\n if (!label) {\r\n return (\r\n <Box className=\"fieldWrapper\" as=\"span\">\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box className={`fieldWrapper ${className ?? ''}`} {...props} as={as}>\r\n <Box as=\"span\" className=\"fieldWrapper__label\">\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {label}\r\n {!avoidSemicolon && label && <abbr className=\"semicolon\">: </abbr>}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </Box>\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n};\r\n","import { Captcha } from '@apia/components';\r\nimport { useField, useFieldStatesClassNames } from '../hooks';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\nimport React from 'react';\r\n\r\ntype TCaptchaProps = {\r\n name: string;\r\n imageUrl: string;\r\n className?: string;\r\n};\r\n\r\ntype TCaptcha = TCaptchaProps &\r\n Omit<\r\n TDefaultFieldType,\r\n 'validationFunction' | 'validationRules' | 'validationClass'\r\n >;\r\n\r\nconst InnerCaptcha = ({\r\n className,\r\n name,\r\n imageUrl,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n avoidSemicolon,\r\n formName,\r\n label,\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n}: TCaptcha) => {\r\n const { error, updateValidations, onChange, isTouched, ...validationProps } =\r\n useField({\r\n name,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: '',\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n validationRules: { required: true },\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n },\r\n [onChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Captcha\r\n name={name}\r\n imageUrl={imageUrl}\r\n onChange={handleOnChange}\r\n value={validationProps.value}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n};\r\n\r\nexport { InnerCaptcha as Captcha };\r\n","import React from 'react';\r\nimport { ButtonProps, InputProps } from '@apia/theme';\r\nimport { Checkbox as AppCheckbox } from '@apia/components';\r\nimport { useField } from '../hooks/useField';\r\nimport { TDefaultFieldType } from './types';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\nexport type TCheckboxProps = Omit<\r\n ButtonProps,\r\n 'onChange' | 'defaultChecked' | 'defaultValue'\r\n> &\r\n Pick<InputProps, 'onChange'>;\r\n\r\nexport type TCheckbox = TCheckboxProps &\r\n TDefaultFieldType<boolean | string> & { native?: boolean };\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n native,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n value: innerValue,\r\n onChange,\r\n updateValidations,\r\n isTouched,\r\n ...inputProps\r\n } = useField<boolean | string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n ((initialValue as unknown) === true || initialValue === 'on') ?? false,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`checkbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppCheckbox\r\n {...props}\r\n {...inputProps}\r\n native={native}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked);\r\n if (outerOnChange) outerOnChange(ev);\r\n }}\r\n checked={innerValue === true || innerValue === 'on'}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { IconButton } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput, ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\ntype TDeletableInput = InputProps & TDefaultFieldType;\r\n\r\nexport const DeletableInput = React.forwardRef<\r\n HTMLInputElement,\r\n TDeletableInput\r\n>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n outerOnChange?.(ev);\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useCallback(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n } as ThemeUICSSObject),\r\n [],\r\n )}\r\n className={`deletableInput ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={`deletableInput__input ${stateClassName ?? ''}`}\r\n />\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"deletableInput__deleteButton\"\r\n onClick={() => onChange('')}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nDeletableInput.displayName = 'DeletableInput';\r\n","import { getFieldErrorStyles } from '@apia/components';\r\nimport React from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useValidationClass } from '../hooks';\r\nimport { useField, TUseField } from '../hooks/useField';\r\nimport { lang } from '../util';\r\nimport { FieldWrapper, IWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TFileInput = Omit<InputProps, 'onChange' | 'type' | 'value' | 'multiple'> &\r\n TDefaultFieldType<File | null> &\r\n Pick<TUseField, 'removeOnUnmount'> &\r\n Pick<IWrapper, 'avoidSemicolon'>;\r\n\r\nexport const FileInput = React.memo(\r\n React.forwardRef<HTMLInputElement, TFileInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: formName } = useFormContext();\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n customValidation(fileValue) {\r\n return fileValue !== null && fileValue !== undefined\r\n ? true\r\n : lang('required');\r\n },\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n error,\r\n onChange,\r\n value,\r\n updateValidations,\r\n isTouched,\r\n ...validationProps\r\n } = useField<File | null>({\r\n formName,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Input\r\n {...props}\r\n {...validationProps}\r\n type=\"file\"\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n sx={getFieldErrorStyles(!error)}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev.target?.files?.[0] ?? null);\r\n },\r\n [onChange],\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nFileInput.displayName = 'FileInput';\r\n","import { DateInput } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TInput = InputProps & TDefaultFieldType;\r\n\r\nexport const Input = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (typeof ev === 'string') {\r\n // Es date\r\n outerOnChange?.({\r\n target: ref,\r\n } as unknown as React.ChangeEvent<HTMLInputElement>);\r\n } else {\r\n // Es comun\r\n outerOnChange?.(ev);\r\n }\r\n },\r\n [onChange, outerOnChange, ref],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n {type === 'date' ? (\r\n <DateInput\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onError={undefined}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n ) : (\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n )}\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nInput.displayName = 'Input';\r\n","import {\r\n TNumberInput,\r\n NumberInput as AppNumberInput,\r\n TNumberInputChangeEvent,\r\n ApiaUtil,\r\n} from '@apia/components';\r\nimport { formatMessage } from '@apia/util';\r\nimport React from 'react';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ndeclare global {\r\n interface Window {\r\n GNR_NUMERIC: string;\r\n }\r\n}\r\n\r\ntype TInput = TNumberInput & TDefaultFieldType;\r\n\r\nexport const NumberInputf = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { onChange, value: innerValue } = useField<string, number>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: TNumberInputChangeEvent) => {\r\n if (ev.error) {\r\n outerOnChange?.({ ...ev, value: '' });\r\n onChange('');\r\n validationsStore.updateField(formName, {\r\n name,\r\n error: formatMessage(window.GNR_NUMERIC, { TOK: '' }),\r\n });\r\n } else {\r\n onChange(ev.value);\r\n outerOnChange?.(ev);\r\n validationsStore.updateField(formName, { name, error: null });\r\n }\r\n },\r\n [formName, name, onChange, outerOnChange],\r\n );\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useMemo(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n }) as ThemeUICSSObject,\r\n [],\r\n )}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppNumberInput\r\n ref={ref}\r\n {...props}\r\n name={name}\r\n value={innerValue}\r\n onChange={handleOnChange}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nNumberInputf.displayName = 'NumberInputf';\r\n","import React from 'react';\r\nimport { RadioProps, Radio as TUIRadio, Label, Box } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TRadio = RadioProps &\r\n TDefaultFieldType & {\r\n options: { value: string; label: string }[];\r\n };\r\n\r\nexport const Radio = React.forwardRef<HTMLInputElement, TRadio>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n value: outerValue,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { value, updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n formName,\r\n name,\r\n initialValue: initialValue ?? (outerValue as string),\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`radio ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n as=\"ul\"\r\n >\r\n {options?.map((option) => (\r\n <li key={option.value}>\r\n <Label title={option.label} className=\"radio-label\">\r\n <TUIRadio\r\n {...props}\r\n {...inputProps}\r\n role=\"radio\"\r\n className=\"radio-button\"\r\n aria-label={option.label}\r\n ref={ref}\r\n value={option.value}\r\n checked={value === option.value}\r\n onChange={handleOnChange}\r\n />\r\n <Box as=\"span\" className=\"radio-text\">\r\n {option.label}\r\n </Box>\r\n </Label>\r\n </li>\r\n ))}\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nRadio.displayName = 'Radio';\r\n","import React from 'react';\r\nimport { SelectProps, Select as TUISelect } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TId } from '@apia/util';\r\n\r\nexport type TOption = { value: TId; label: string };\r\n\r\nexport type TSelectProps = Omit<SelectProps, 'defaultValue'>;\r\n\r\nexport type TSelect = TSelectProps &\r\n TDefaultFieldType & {\r\n options: TOption[];\r\n };\r\n\r\nexport const Select = React.forwardRef<HTMLSelectElement, TSelect>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n initialValue: initialValue ?? (value as string) ?? options[0]?.value,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`select ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUISelect\r\n {...getVariant('forms.select')}\r\n {...props}\r\n {...inputProps}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLSelectElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n )}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n >\r\n {options?.map((option) => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n {props.children}\r\n </TUISelect>\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import { toBoolean } from '@apia/util';\r\nimport React from 'react';\r\nimport { InputProps, Switch, SwitchProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TSwitchbox = Omit<SwitchProps, 'onChange'> &\r\n Pick<InputProps, 'onChange'> &\r\n TDefaultFieldType & { reverse?: boolean };\r\n\r\nexport const Switchbox = React.forwardRef<HTMLInputElement, TSwitchbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n reverse = false,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { onChange, updateValidations, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n (initialValue ?? 'off') === 'on' || toBoolean(initialValue)\r\n ? 'on'\r\n : 'off',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`switchbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Switch\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked !== reverse ? 'on' : 'off');\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n }}\r\n checked={((inputProps.value ?? 'off') === 'on') !== reverse}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSwitchbox.displayName = 'Switchbox';\r\n","import React from 'react';\r\nimport { Textarea as TUITextarea, TextareaProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TTextarea = TextareaProps & TDefaultFieldType;\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TTextarea>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: initialValue ?? (value as string),\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationRules: actualValidationRules,\r\n validationFunction: actualValidationFunction,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`textarea ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUITextarea\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n onChange={handleOnChange}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { EventEmitter, useSubscription, StatefulEmitter } from '@apia/util';\r\nimport { FC, ReactNode } from 'react';\r\nimport { TOption } from '../components';\r\nimport {\r\n TFocusRetriever,\r\n TValidationFunction,\r\n TValidationRules,\r\n} from '../types';\r\nimport { Box } from '@apia/theme';\r\nimport { Collector } from './Collector';\r\n\r\nexport abstract class CollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends EventEmitter<{\r\n focusFunctionUpdate: TFocusRetriever;\r\n functionUpdate: TValidationFunction<ValueType>;\r\n optionsUpdate: TOption[];\r\n propsUpdate: Partial<FieldProps>;\r\n rulesUpdate: TValidationRules;\r\n}> {\r\n /**\r\n * Este es el componente de implementación de cada campo particular\r\n */\r\n abstract Component: FC;\r\n abstract type: string;\r\n\r\n #emitter = new StatefulEmitter<{\r\n isHidden: boolean;\r\n }>({\r\n isHidden: false,\r\n });\r\n\r\n constructor(\r\n public readonly name: string,\r\n protected label: ReactNode,\r\n properties?: Partial<FieldProps>,\r\n ) {\r\n super();\r\n\r\n if (properties) {\r\n this.properties = properties;\r\n }\r\n }\r\n\r\n public collector: Collector = {} as Collector;\r\n\r\n isHidden = () => this.#emitter.getState('isHidden');\r\n setIsHidden = (isHidden: boolean) => {\r\n this.#emitter.emit('isHidden', isHidden);\r\n };\r\n\r\n protected properties: Partial<FieldProps> = {};\r\n setProperties = (newProps: Partial<FieldProps>) => {\r\n this.properties = newProps;\r\n this.emit('propsUpdate', { ...this.properties });\r\n };\r\n\r\n protected useProperties = () => {\r\n return useSubscription<Partial<FieldProps>>({\r\n getInitialState: () => this.properties,\r\n makeSubscription: (setProps) => this.on('propsUpdate', setProps),\r\n });\r\n };\r\n\r\n /**\r\n * Este componente se utiliza para controlar propiedades comunes a todos los\r\n * campos.\r\n */\r\n SuperComponent = () => {\r\n if (this.#emitter.useState('isHidden')) return null;\r\n\r\n return (\r\n <Box className={`collector__field ${this.type}`}>\r\n <this.Component />\r\n </Box>\r\n );\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useSubscription } from '@apia/util';\r\nimport { CollectorField } from './CollectorField';\r\nimport { TValidationRules, TValidationFunction } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport abstract class ValidatedCollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends CollectorField<ValueType, FieldProps> {\r\n constructor(\r\n public readonly name: string,\r\n protected label: string,\r\n protected config: Partial<{\r\n initialValue: ValueType;\r\n properties: Partial<FieldProps>;\r\n validationFunction: TValidationFunction<ValueType>;\r\n validationRules: TValidationRules;\r\n }> = {},\r\n ) {\r\n super(name, label, config?.properties);\r\n }\r\n\r\n get initialValue() {\r\n return this.config.initialValue;\r\n }\r\n\r\n get value() {\r\n return validationsStore.getFieldStore(this.collector.id, this.name).value;\r\n }\r\n\r\n setInitialValue = (newValue: ValueType) => {\r\n this.config.initialValue = newValue;\r\n };\r\n\r\n setValidationFunction = (newFunction: TValidationFunction<ValueType>) => {\r\n this.config.validationFunction = newFunction;\r\n this.emit('functionUpdate', this.config.validationFunction);\r\n };\r\n\r\n setValidationRules = (newRules: TValidationRules) => {\r\n this.config.validationRules = newRules;\r\n this.emit('rulesUpdate', { ...this.config.validationRules });\r\n };\r\n\r\n setValue = (newValue: ValueType) => {\r\n validationsStore.setFieldValue(this.collector.id, this.name, newValue);\r\n };\r\n\r\n protected useValidationFunction = () => {\r\n return useSubscription<TValidationFunction<ValueType> | undefined>({\r\n getInitialState: () => () => this.config.validationFunction,\r\n makeSubscription: (setValidationFunction) => {\r\n return this.on('functionUpdate', setValidationFunction);\r\n },\r\n });\r\n };\r\n\r\n protected useValidationRules = () => {\r\n return useSubscription({\r\n getInitialState: () => this.config.validationRules,\r\n makeSubscription: (setValidationRules) => {\r\n return this.on('rulesUpdate', setValidationRules);\r\n },\r\n });\r\n };\r\n}\r\n","import { Checkbox, TCheckboxProps } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorCheckbox extends ValidatedCollectorField<\r\n string | boolean,\r\n Omit<TCheckboxProps, 'name'>\r\n> {\r\n type = 'checkbox';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Checkbox\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n avoidSemicolon\r\n />\r\n );\r\n };\r\n}\r\n","import { InputProps } from '@apia/theme';\r\nimport { Input } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorInput extends ValidatedCollectorField<\r\n string,\r\n Omit<InputProps, 'name'>\r\n> {\r\n type = 'input';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Input\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n />\r\n );\r\n };\r\n}\r\n","import { useMount } from '@apia/util';\r\nimport { useState } from 'react';\r\nimport { TSelectProps, TOption } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Select } from '../../components';\r\nimport { TValidationFunction, TValidationRules } from '../../types';\r\n\r\nexport class CollectorSelect extends ValidatedCollectorField<\r\n string,\r\n Omit<TSelectProps, 'name'>\r\n> {\r\n type = 'select';\r\n\r\n constructor(\r\n protected _name: string,\r\n protected label: string,\r\n config?: Partial<{\r\n initialValue: string;\r\n options: TOption[];\r\n properties: Partial<Omit<TSelectProps, 'name'>>;\r\n validationFunction: TValidationFunction<string>;\r\n validationRules: TValidationRules;\r\n }>,\r\n ) {\r\n super(_name, label, config);\r\n if (config?.options) {\r\n this.#options = config.options;\r\n }\r\n }\r\n #options: TOption[] = [];\r\n\r\n addOption = (newOption: TOption) => {\r\n this.#options = [...this.#options, newOption];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n setOptions = (newOptions: TOption[]) => {\r\n this.#options = [...newOptions];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n #useOptions = () => {\r\n const [options, setOptions] = useState(this.#options);\r\n\r\n useMount(() => {\r\n return this.on('optionsUpdate', setOptions);\r\n });\r\n\r\n return options;\r\n };\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const options = this.#useOptions();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Select\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n options={options}\r\n />\r\n );\r\n };\r\n}\r\n","import { TextareaProps } from '@apia/theme';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Textarea } from '../../components';\r\n\r\nexport class CollectorTextarea extends ValidatedCollectorField<\r\n string,\r\n Omit<TextareaProps, 'name'>\r\n> {\r\n type = 'textarea';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Textarea\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n name={this.name}\r\n validationFunction={validationFunction}\r\n validationRules={rules}\r\n label={this.label}\r\n />\r\n );\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ReactNode } from 'react';\r\n\r\nexport class CollectorLabel extends CollectorField {\r\n private static maxId = 0;\r\n\r\n type = 'label';\r\n\r\n constructor(\r\n label: ReactNode,\r\n private kind:\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'p'\r\n | 'label' = 'label',\r\n ) {\r\n super(`label${CollectorLabel.maxId++}`, label);\r\n }\r\n\r\n Component = () => {\r\n if (this.kind === 'label') return <Box as={this.kind}>{this.label}</Box>;\r\n\r\n return <Box as={this.kind}>{this.label}</Box>;\r\n };\r\n}\r\n","import { SimpleButton } from '@apia/components';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ButtonProps } from '@apia/theme';\r\n\r\nlet i = 0;\r\n\r\nexport class CollectorButton extends CollectorField<\r\n null,\r\n Omit<ButtonProps, 'children'>\r\n> {\r\n type = 'button';\r\n\r\n constructor(\r\n protected label: string,\r\n properties?: Omit<ButtonProps, 'children'>,\r\n ) {\r\n super(`Button${i++}`, label, properties);\r\n }\r\n\r\n Component = () => {\r\n const props = this.useProperties();\r\n\r\n return <SimpleButton {...props}>{this.label}</SimpleButton>;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ApiaUtil,\r\n ApiaUtilModalHandler,\r\n TOpenModal,\r\n useModalContext,\r\n} from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { Box, Button, getVariant } from '@apia/theme';\r\nimport { hasSucceedFormValidation, initValidations } from '../util';\r\nimport { Form } from '../form/Form';\r\nimport { CollectorField } from './CollectorField';\r\nimport { CollectorCheckbox } from './fields/Checkbox';\r\nimport { CollectorInput } from './fields/Input';\r\nimport { CollectorSelect } from './fields/Select';\r\nimport { CollectorTextarea } from './fields/Textarea';\r\nimport { CollectorLabel } from './fields/Label';\r\nimport { CollectorButton } from './fields/Button';\r\nimport { ValidatedCollectorField } from './ValidatedCollectorField';\r\n\r\ntry {\r\n void initValidations().catch(() => {});\r\n} catch (e) {\r\n console.error(e);\r\n}\r\n\r\nlet maxId = 0;\r\n\r\nexport class Collector {\r\n fields = {\r\n button: CollectorButton,\r\n checkbox: CollectorCheckbox,\r\n input: CollectorInput,\r\n /**\r\n * Muestra una etiqueta con tag personalizable: h1...h6, p, label. (Por\r\n * defecto: label)\r\n */\r\n label: CollectorLabel,\r\n select: CollectorSelect,\r\n textarea: CollectorTextarea,\r\n };\r\n\r\n private private__id = `Collector${maxId++}`;\r\n public get id() {\r\n return this.private__id;\r\n }\r\n modal: ApiaUtilModalHandler | null = null;\r\n\r\n #fields: Record<string, CollectorField> = {};\r\n\r\n add = (...fields: CollectorField[]) => {\r\n fields.forEach((field) => {\r\n this.#fields[field.name] = field;\r\n // eslint-disable-next-line no-param-reassign\r\n field.collector = this;\r\n });\r\n return this;\r\n };\r\n\r\n forEach = (cb: (field: CollectorField, i: number) => void) => {\r\n Object.values(this.#fields).forEach(cb);\r\n };\r\n\r\n #Component = ({\r\n hideConfirm,\r\n resolve,\r\n }: {\r\n hideConfirm?: boolean;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n const modal = useModalContext();\r\n\r\n let hasValidated = false;\r\n\r\n return (\r\n <Box\r\n className=\"formContainer\"\r\n {...getVariant('layout.util.collector.formContainer')}\r\n >\r\n <Form\r\n name={this.private__id}\r\n onValidate={(result) => {\r\n if (hasSucceedFormValidation(result)) {\r\n const res = resolve(result.submitValues);\r\n if (res) {\r\n modal.close();\r\n }\r\n }\r\n }}\r\n >\r\n <Box className=\"collector__fields\">\r\n {Object.values(this.#fields).map((current) => {\r\n if (current instanceof ValidatedCollectorField)\r\n hasValidated = true;\r\n\r\n return <current.SuperComponent key={current.name} />;\r\n })}\r\n </Box>\r\n {hasValidated && !hideConfirm && (\r\n <Box className=\"collector__buttons\">\r\n <Button variant=\"outline\">{getLabel('btnCon').text}</Button>\r\n </Box>\r\n )}\r\n </Form>\r\n </Box>\r\n );\r\n };\r\n\r\n show = <FormValues extends Record<string, unknown>>(\r\n modalProps?: Partial<\r\n Omit<TOpenModal, 'children' | 'onConfirm' | 'onCancel' | 'confirmProps'>\r\n > &\r\n Partial<{\r\n hideConfirm: boolean;\r\n /**\r\n * Si este método devuelve false, el modal no se cerrará\r\n */\r\n onConfirm?: (res: FormValues | null) => boolean;\r\n }>,\r\n ): Promise<FormValues | null> => {\r\n const { onConfirm, ...actualModalProps } = modalProps ?? {};\r\n const hasResolved = false;\r\n return new Promise<FormValues | null>((resolve) => {\r\n const C = this.#Component;\r\n const modal = ApiaUtil.instance.modals.open({\r\n onExited: () => {\r\n if (!hasResolved) {\r\n this.modal = null;\r\n resolve(null);\r\n }\r\n },\r\n children: (\r\n <C\r\n hideConfirm={modalProps?.hideConfirm}\r\n resolve={(values) => {\r\n if (onConfirm) {\r\n const confirmResult = onConfirm(values as FormValues);\r\n if (!confirmResult) {\r\n return false;\r\n }\r\n }\r\n\r\n resolve(values as FormValues);\r\n return true;\r\n }}\r\n />\r\n ),\r\n variant: 'layout.util.collector.modal',\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>(\r\n 'input,textarea,select,button:not(.modal__closeButton)',\r\n );\r\n },\r\n ...actualModalProps,\r\n });\r\n this.modal = modal;\r\n });\r\n };\r\n}\r\n"],"names":["__publicField","isTouched","AppCheckbox","TUIInput","Input","AppNumberInput","TUIRadio","TUISelect","TUITextarea","__privateAdd","__privateGet"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/form/FormContext.tsx","../src/validationMethods.ts","../src/util.ts","../src/validationStore.ts","../src/form/formStyles.ts","../src/form/Form.tsx","../src/hooks/useField.ts","../src/hooks/useFieldStatesClassNames.ts","../src/hooks/useFieldValue.ts","../src/hooks/useValidationClass.ts","../src/components/ValidationError.tsx","../src/components/FieldWrapper.tsx","../src/components/Captcha.tsx","../src/components/Checkbox.tsx","../src/components/DeletableInput.tsx","../src/components/FileInput.tsx","../src/components/Input.tsx","../src/components/NumberInput.tsx","../src/components/Radio.tsx","../src/components/Select.tsx","../src/components/Switchbox.tsx","../src/components/Textarea.tsx","../src/collector/CollectorField.tsx","../src/collector/ValidatedCollectorField.ts","../src/collector/fields/Checkbox.tsx","../src/collector/fields/Input.tsx","../src/collector/fields/Select.tsx","../src/collector/fields/Textarea.tsx","../src/collector/fields/Label.tsx","../src/collector/fields/Button.tsx","../src/collector/Collector.tsx"],"sourcesContent":["import React from 'react';\r\nimport { TValidationResult } from '../types';\r\n\r\nexport interface IFormContext<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n avoidFieldsTouch?: boolean;\r\n name: string;\r\n validate: () => Promise<TValidationResult<ValueType, SubmitValueType>>;\r\n}\r\n\r\nexport const FormContext = React.createContext<IFormContext>(\r\n {} as IFormContext,\r\n);\r\n\r\n/**\r\n * Provee acceso de forma sencilla al contexto de\r\n * validación, que básicamente posee el nombre del\r\n * form en caso de que se quiera usar para acceder\r\n * a través de Redux a la información del mismo y un\r\n * método validate, que dispara la validación del\r\n * form.\r\n *\r\n * En la práctica, el método validate es casi\r\n * innecesario, ya que la validación se puede disparar\r\n * con cualquier botón que no tenga seteado el\r\n * atributo type=\"button\" (esto es así ya que en el\r\n * DOM se renderiza un elemento de tipo form).\r\n */\r\nexport function useFormContext() {\r\n const formContext = React.useContext(FormContext);\r\n if (!formContext) throw new Error('There is no FormContext');\r\n return formContext;\r\n}\r\n","import { IFieldDefinition, TFieldValidationResult } from './types';\r\nimport { getValidations } from './util';\r\n\r\nexport interface IValidateByRules<ValueType> {\r\n rules: NonNullable<IFieldDefinition['validate']>;\r\n value: ValueType;\r\n}\r\n\r\n/**\r\n * Este método toma un valor y unas reglas de validación\r\n * y ejecuta la validación correspondiente a dichas reglas.\r\n */\r\nexport function validateByRules<ValueType>({\r\n rules,\r\n value,\r\n}: IValidateByRules<ValueType>): TFieldValidationResult {\r\n const validationResult = getValidations(rules).validate(value);\r\n return validationResult;\r\n}\r\n","import { customEvents } from '@apia/util';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n IFieldDefinition,\r\n TValidationField,\r\n} from './types';\r\nimport { validateByRules } from './validationMethods';\r\n\r\nimport type formcheckLanguage from './lang/es';\r\nimport { validationsStore } from './validationStore';\r\n\r\ndeclare global {\r\n interface Window {\r\n NO_LANGUAGE_EXCEPTION: string;\r\n MSG_INVALID_REG_EXP: string;\r\n GNR_INVALID_NAME: string;\r\n }\r\n}\r\n\r\n/**\r\n * Realiza la validación del campo tomando en cuenta las\r\n * distintas posibilidades de validación.\r\n */\r\nexport async function validateField(\r\n field: TValidationField<unknown>,\r\n formName: string,\r\n): Promise<TFieldValidationResult> {\r\n let validationResult: TFieldValidationResult | null = null;\r\n const fieldValue = field.validationValueParser\r\n ? field.validationValueParser(field.value)\r\n : field.value;\r\n if (field.validationFunction) {\r\n validationResult = await field.validationFunction(fieldValue, formName);\r\n }\r\n if (\r\n (!field.validationFunction || validationResult === true) &&\r\n field.validationRules\r\n ) {\r\n validationResult = validateByRules({\r\n rules: field.validationRules,\r\n value: fieldValue,\r\n });\r\n } else if (validationResult === null) validationResult = true;\r\n return validationResult;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un campo resultó exitosa.\r\n */\r\nexport function hasSucceedFieldValidation(\r\n result: TFieldValidationResult,\r\n): result is true {\r\n return result === true;\r\n}\r\n\r\n/**\r\n * Determina si la validación de un formulario resultó\r\n * exitosa. Está pensada para utilizar en el callback\r\n * onValidate de Form o en la acción validationsActions.validateForm\r\n */\r\nexport function hasSucceedFormValidation<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>(\r\n result: TValidationResult<ValueType, SubmitValueType>,\r\n): result is TSuccessfulValidation<ValueType, SubmitValueType> {\r\n return !('errors' in result);\r\n}\r\n\r\n/**\r\n * Intenta hacer foco en el campo y devuelve un booleano\r\n * indicando si se logró o no.\r\n */\r\nexport async function focusOnField(formName: string, field: TValidationField) {\r\n if (field.focus) {\r\n return (await field.focus()) || true;\r\n }\r\n\r\n const formElement = document.getElementById(\r\n `ValidationForm-${formName}`,\r\n ) as HTMLFormElement;\r\n const fieldElement: HTMLElement | null = formElement?.querySelector(\r\n `[name=\"${CSS.escape(field.name)}\"], #${CSS.escape(field.name)}`,\r\n );\r\n\r\n if (fieldElement) {\r\n return new Promise((resolve) => {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n fieldElement.focus();\r\n fieldElement.dispatchEvent(event);\r\n fieldElement.scrollIntoView({\r\n block: 'center',\r\n behavior: 'auto',\r\n });\r\n resolve(true);\r\n });\r\n }\r\n return false;\r\n}\r\n\r\nlet langDefinition: typeof formcheckLanguage;\r\n/**\r\n * Devuelve la cadena correspondiente a un código\r\n * de error, realizando los reemplazos correspondientes.\r\n */\r\nexport function lang(\r\n errorCode: keyof typeof formcheckLanguage,\r\n ...replacements: (string | number)[]\r\n) {\r\n if (!langDefinition[errorCode]) return '';\r\n let returnString = langDefinition[errorCode];\r\n replacements.forEach((replace, index) => {\r\n returnString = returnString.replace(`%${index}`, replace.toString());\r\n });\r\n return returnString;\r\n}\r\n\r\nexport function classToValidationFunction<T = string>(\r\n className: string,\r\n): TValidationField<T>['validationFunction'] {\r\n // validate[confirm:fieldName:fieldTitle?]\r\n const match = className?.match(/'confirm:(\\w+):(.+?)']/);\r\n if (match) {\r\n const validationFunction: TValidationField<T>['validationFunction'] = (\r\n value,\r\n formName,\r\n ) => {\r\n return value === validationsStore.getFieldStore(formName, match[1])?.value\r\n ? true\r\n : lang('confirm', match[2] ?? match[1]);\r\n };\r\n\r\n return validationFunction;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function classToValidate(\r\n className: string,\r\n): IFieldDefinition['validate'] {\r\n const validations: Record<string, unknown> = {};\r\n if (className) {\r\n const match = className.match(/validate\\[([^\\]]+)\\]/);\r\n if (match) {\r\n const definitions = match[1].replaceAll('~', '').split(',');\r\n definitions.forEach((definition) => {\r\n const definitionMatch = definition.match(/(\\w+)(?:=([\\w\\d]+))?/);\r\n if (definitionMatch) {\r\n const prop = definitionMatch[1] as keyof NonNullable<\r\n IFieldDefinition['validate']\r\n >;\r\n if (prop === 'pattern' && definitionMatch[2])\r\n validations[prop] = new RegExp(definitionMatch[2]);\r\n else if (definitionMatch[2]) {\r\n const value = definitionMatch[2].split(',');\r\n const actualValue = (\r\n value.length < 2 ? value.join() : value\r\n ) as NonNullable<IFieldDefinition['validate']>[typeof prop];\r\n validations[prop] =\r\n actualValue as (typeof validations)[typeof prop];\r\n } else validations[prop] = true;\r\n }\r\n });\r\n return validations as IFieldDefinition['validate'];\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nexport const getValidationErrorMessagesByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Carga el archivo con mensajes de errores según el lenguaje\r\n * especificado.\r\n */\r\nexport const getErrorsMapByLang = async (\r\n langCode = window.LANG_CODE,\r\n): Promise<typeof formcheckLanguage> => {\r\n return (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${langCode}.ts`\r\n ).catch((error) => {\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n};\r\n\r\n/**\r\n * Realiza la carga de los mensajes de errores para el lenguaje\r\n * especificado. Este método debe llamarse antes de utilizar\r\n * las validaciones.\r\n */\r\nexport async function initValidations() {\r\n if (langDefinition) return;\r\n const code = document.documentElement.lang ?? 'es';\r\n langDefinition = (\r\n (await import(\r\n /* webpackChunkName: \"val-lang-[request]\" */ `./lang/${code}.ts`\r\n ).catch((error) => {\r\n notify({\r\n type: 'danger',\r\n message: window.NO_LANGUAGE_EXCEPTION,\r\n });\r\n throw error;\r\n })) as { default: typeof formcheckLanguage }\r\n ).default;\r\n}\r\n\r\n/**\r\n * Devuelve una función validadora, que devolverá true\r\n * o una cadena con el mensaje de error correspondiente\r\n * según el lenguaje actual y las reglas de validación\r\n * establecidas.\r\n */\r\nexport function getValidations(outerValidation: IFieldDefinition['validate']): {\r\n validate: (v: unknown) => string | true;\r\n} {\r\n const validation = { ...outerValidation };\r\n if (!validation)\r\n return {\r\n validate: () => {\r\n return true;\r\n },\r\n } as { validate: () => true };\r\n\r\n return {\r\n validate: (outerV: unknown) => {\r\n const v = outerV ?? '';\r\n let returnValue: boolean | string = true;\r\n\r\n if (returnValue && validation.pattern) {\r\n let actualRegexp: RegExp;\r\n\r\n if (!(validation.pattern instanceof RegExp)) {\r\n const patternResult = validation.pattern.match(\r\n /(?:^\\/(.+)\\/(\\w+)?$)|(^.*$)/,\r\n ) as RegExpMatchArray;\r\n\r\n const regexp = patternResult[1];\r\n const flags = patternResult[2];\r\n const stringPattern = patternResult[3];\r\n\r\n actualRegexp = new RegExp(\r\n regexp || stringPattern,\r\n flags || undefined,\r\n );\r\n } else actualRegexp = validation.pattern;\r\n\r\n returnValue =\r\n !!String(v).match(actualRegexp) ||\r\n (validation.patternMessage ?? window.MSG_INVALID_REG_EXP);\r\n }\r\n if (returnValue === true && validation.maxLength)\r\n returnValue =\r\n String(v).length <= validation.maxLength ||\r\n lang('lengthmax', validation.maxLength);\r\n if (returnValue === true && validation.minLength)\r\n returnValue =\r\n String(v).length >= validation.minLength ||\r\n lang('lengthmin', validation.minLength);\r\n if (returnValue === true && validation.max && validation.min)\r\n returnValue =\r\n (Number(v) <= validation.max && Number(v) >= validation.min) ||\r\n lang('digitltd', validation.min, validation.max);\r\n if (returnValue === true && validation.min)\r\n returnValue =\r\n Number(v) >= validation.min || lang('digitmin', validation.min);\r\n if (returnValue === true && validation.max)\r\n returnValue =\r\n Number(v) <= validation.max || lang('digitltd', 0, validation.max);\r\n if (returnValue === true && validation.validName)\r\n returnValue =\r\n !!String(v).match(/^[a-zA-Z0-9_.]*$/) || window.GNR_INVALID_NAME;\r\n if (returnValue === true && (validation.alpha || validation.nodigit))\r\n returnValue = !!String(v).match(/^[a-zA-Z]*$/) || lang('alpha');\r\n if (returnValue === true && validation.alphanum)\r\n returnValue = !!String(v).match(/^[a-zA-Z0-9]*$/) || lang('alphanum');\r\n if (returnValue === true && (validation.digit || validation.number))\r\n returnValue = !!String(v).match(/^[0-9]*$/) || lang('digit');\r\n if (returnValue === true && validation.email)\r\n returnValue =\r\n !!String(v).match(\r\n // eslint-disable-next-line no-control-regex\r\n /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i,\r\n ) || lang('email');\r\n if (returnValue === true && validation.differs)\r\n returnValue =\r\n v !== validation.differs || lang('differs', validation.differs);\r\n if (returnValue === true && validation.length_str)\r\n returnValue =\r\n (String(v).length >= validation.length_str[0] &&\r\n String(v).length <= validation.length_str[1]) ||\r\n lang('length_str', ...validation.length_str);\r\n if (returnValue === true && validation.length_fix)\r\n returnValue =\r\n String(v).length === validation.length_fix ||\r\n lang('length_fix', validation.length_fix);\r\n if (returnValue === true && validation.words_min) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words >= validation.words_min ||\r\n lang('words_min', validation.words_min)\r\n );\r\n }\r\n if (returnValue === true && validation.words_max) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n words <= validation.words_max ||\r\n lang('words_max', validation.words_max)\r\n );\r\n }\r\n if (returnValue === true && validation.words_range) {\r\n const words = String(v).split(' ').length;\r\n return (\r\n (words <= validation.words_range[0] &&\r\n words >= validation.words_range[1]) ||\r\n lang('words_range', ...validation.words_range)\r\n );\r\n }\r\n if (returnValue === true && validation.required)\r\n returnValue =\r\n (Array.isArray(outerV) && outerV.length > 0) ||\r\n typeof outerV === 'number' ||\r\n (!Array.isArray(v) && !!v) ||\r\n lang('required');\r\n\r\n return returnValue;\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n TPropsComparator,\r\n TPropsSelector,\r\n TPropsConfiguration,\r\n propsStore,\r\n usePropsSelector,\r\n} from '@apia/util';\r\nimport {\r\n TValidationField,\r\n TFieldValidationResult,\r\n TSuccessfulValidation,\r\n TValidationResult,\r\n TWrongValidation,\r\n TRegisterFormOptions,\r\n TUpdateFieldOptions,\r\n TFormState,\r\n TRegisterField,\r\n TRegisterFieldOptions,\r\n} from './types';\r\nimport { focusOnField, hasSucceedFieldValidation, validateField } from './util';\r\n\r\ndeclare global {\r\n interface Window {\r\n MSG_WRONG_VALIDATION_NO_FOCUSED_FILE: string;\r\n }\r\n}\r\n\r\nexport const validationsStore = new (class {\r\n activeForms: string[] = [];\r\n\r\n timeouts: Record<string, ReturnType<typeof setTimeout> | true> = {};\r\n\r\n loadFromSessionStorage(formName: string) {\r\n const storageValue = sessionStorage.getItem(this.makeFormName(formName));\r\n\r\n if (storageValue) {\r\n try {\r\n const parsedValue = JSON.parse(storageValue) as {\r\n formProps: Partial<TFormState>;\r\n fields: Record<string, Partial<TValidationField>>;\r\n };\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, parsedValue.formProps, true);\r\n Object.entries(parsedValue.fields).forEach(([name, field]) => {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, name),\r\n {\r\n ...this.getFieldStore(formName, name),\r\n ...field,\r\n },\r\n { noEmit: true },\r\n );\r\n });\r\n\r\n return true;\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n persistFormToSessionStorage(formName: string) {\r\n const { isTouched, isValid, validationResult, ...formProps } =\r\n this.getFormStore(formName);\r\n const shouldPersist = formProps.persistToSessionStorage;\r\n\r\n if (shouldPersist) {\r\n const fields = formProps.fields\r\n .map((current) => {\r\n const {\r\n validationFunction,\r\n isTouched,\r\n error,\r\n validationValueParser,\r\n ...field\r\n } = this.getFieldStore(formName, current);\r\n return field;\r\n })\r\n .reduce(\r\n (o, c) => ({ ...o, [c.name]: c }),\r\n {} as Record<string, Partial<TValidationField>>,\r\n );\r\n\r\n sessionStorage.setItem(\r\n this.makeFormName(formName),\r\n JSON.stringify({\r\n formProps,\r\n fields,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n getFieldStore(formName: string, fieldName: string) {\r\n return propsStore.getFieldProps<TValidationField>(\r\n this.makeFieldName(formName, fieldName),\r\n );\r\n }\r\n\r\n getFormStore(formName: string) {\r\n return propsStore.getFieldProps<TFormState>(this.makeFormName(formName));\r\n }\r\n\r\n updateFieldStore(\r\n formName: string,\r\n fieldName: string,\r\n props: Partial<TValidationField>,\r\n noEmit?: boolean,\r\n ) {\r\n propsStore.updateField(\r\n this.makeFieldName(formName, fieldName),\r\n {\r\n ...this.getFieldStore(formName, fieldName),\r\n ...props,\r\n },\r\n { noEmit },\r\n );\r\n this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n updateFormStore(\r\n formName: string,\r\n newState: Partial<TFormState>,\r\n avoidPersist = false,\r\n ) {\r\n propsStore.updateField(this.makeFormName(formName), newState);\r\n if (!avoidPersist) this.persistFormToSessionStorage(formName);\r\n }\r\n\r\n enableFormTouch(formName: string) {\r\n this.timeouts[formName] = true;\r\n }\r\n\r\n existsField = (formName: string, fieldName: string) => {\r\n return !!this.getFormStore(formName)?.fields?.includes(fieldName);\r\n };\r\n\r\n makeFieldName(formName: string, fieldName: string) {\r\n return `validation_${formName}_${fieldName}`;\r\n }\r\n\r\n makeFormName(formName: string) {\r\n return `validation_${formName}`;\r\n }\r\n\r\n registerField = (\r\n formName: string,\r\n registerData: TRegisterField,\r\n options: TRegisterFieldOptions = { registerIfExists: true },\r\n ) => {\r\n const formProps = this.getFormStore(formName);\r\n if (formProps === undefined) this.registerForm(formName);\r\n\r\n if (!this.getFormStore(formName)?.fields.includes(registerData.name))\r\n this.updateFormStore(formName, {\r\n fields: [\r\n ...(this.getFormStore(formName)?.fields ?? []),\r\n registerData.name,\r\n ],\r\n });\r\n\r\n const existsInStore = this.getFieldStore(formName, registerData.name);\r\n\r\n if (\r\n (formProps?.avoidFieldsOverride || !options.registerIfExists) &&\r\n existsInStore\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unused-vars\r\n const { value, ...updateData } = registerData;\r\n this.updateField(formName, updateData, {\r\n markFormAsTouched: false,\r\n avoidPropagation: options.avoidPropagation,\r\n });\r\n return;\r\n }\r\n\r\n this.updateFieldStore(\r\n formName,\r\n registerData.name,\r\n registerData,\r\n options.avoidPropagation,\r\n );\r\n };\r\n\r\n /**\r\n * Inicializa el estado de un nuevo formulario\r\n */\r\n registerForm = (\r\n formName: string,\r\n props: TRegisterFormOptions = { avoidFieldsOverride: false },\r\n ) => {\r\n props.persistToSessionStorage && this.loadFromSessionStorage(formName);\r\n\r\n if (this.activeForms.includes(formName)) {\r\n this.updateFormStore(\r\n formName,\r\n {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n true,\r\n );\r\n if (props.initialValues)\r\n Object.entries(props.initialValues).forEach(([fieldId, fieldProps]) => {\r\n if (fieldProps instanceof Object)\r\n this.updateField(\r\n formName,\r\n { name: fieldId, ...fieldProps },\r\n { avoidFieldsOverride: props.avoidFieldsOverride },\r\n );\r\n });\r\n return;\r\n }\r\n this.activeForms.push(formName);\r\n this.updateFormStore(formName, {\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n fields: [],\r\n isTouched: false,\r\n isValid: false,\r\n name: formName,\r\n validationResult: null,\r\n persistToSessionStorage: props.persistToSessionStorage,\r\n });\r\n\r\n // Set initial values\r\n Object.entries(props.initialValues ?? {}).forEach(([name, value]) => {\r\n this.updateField(\r\n formName,\r\n { name, value },\r\n {\r\n markFormAsTouched: false,\r\n avoidFieldsOverride: props.avoidFieldsOverride,\r\n },\r\n );\r\n });\r\n };\r\n\r\n /**\r\n * Setea el valor del campo con el nombre provisto. Si el campo no existe\r\n * en el formulario lo crea.\r\n */\r\n setFieldValue = (\r\n formName: string,\r\n fieldName: string,\r\n newValue: unknown,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n if (!this.getFieldStore(formName, fieldName))\r\n this.registerField(formName, { name: fieldName, value: newValue });\r\n else\r\n this.updateField(\r\n formName,\r\n {\r\n name: fieldName,\r\n value: newValue,\r\n error: null,\r\n },\r\n options,\r\n );\r\n\r\n if (this.getFormStore(formName).isValid)\r\n this.updateFormStore(formName, { isValid: false });\r\n };\r\n\r\n setFormIsTouched = (formName: string, isTouched = true) => {\r\n this.updateFormStore(formName, { isTouched }, true);\r\n };\r\n\r\n /**\r\n * Elimina un campo del registro de validación de un formulario. De esta\r\n * forma cualquier validación que pudiera aplicarse sobre el mismo, ya no se\r\n * aplicará.\r\n */\r\n unregisterField = (formName: string, fieldName: string) => {\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, {\r\n fields: this.getFormStore(formName).fields.filter((current) => {\r\n return current !== fieldName;\r\n }),\r\n });\r\n propsStore.removeField(this.makeFieldName(formName, fieldName));\r\n };\r\n\r\n /**\r\n * Elimina un formulario del store de validación junto con todos los campos\r\n * asociados al mismo.\r\n */\r\n unregisterForm = (formName: string) => {\r\n this.getFormStore(formName)?.fields?.forEach((current) => {\r\n return propsStore.removeField(this.makeFieldName(formName, current));\r\n });\r\n this.activeForms = this.activeForms.filter((current) => {\r\n return current !== formName;\r\n });\r\n propsStore.removeField(this.makeFormName(formName));\r\n delete this.timeouts[formName];\r\n };\r\n\r\n /**\r\n * Actualiza las propiedades de un campo, si no existe, lo registra en el\r\n * formulario.\r\n */\r\n updateField = (\r\n formName: string,\r\n field: Partial<TValidationField> & Pick<TValidationField, 'name'>,\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n const previousValue = this.getFieldStore(formName, field.name)\r\n ?.value as unknown;\r\n\r\n if (this.getFormStore(formName))\r\n this.updateFormStore(formName, { isValid: false }, true);\r\n else this.registerForm(formName);\r\n\r\n if (previousValue !== undefined && options?.avoidFieldsOverride) return;\r\n\r\n const isTouched =\r\n field.value !== undefined &&\r\n field.value !== previousValue &&\r\n options?.markFormAsTouched !== false;\r\n\r\n if (!this.existsField(formName, field.name))\r\n this.registerField(formName, field, {\r\n avoidPropagation: options?.avoidPropagation,\r\n });\r\n this.updateFieldStore(\r\n formName,\r\n field.name,\r\n {\r\n ...field,\r\n isTouched:\r\n isTouched || this.getFieldStore(formName, field.name)?.isTouched,\r\n },\r\n options?.avoidPropagation,\r\n );\r\n if (isTouched) this.setFormIsTouched(formName);\r\n };\r\n\r\n /**\r\n * Actualiza múltiples campos al mismo tiempo.\r\n */\r\n updateMultipleFields = (\r\n formName: string,\r\n fields: (Partial<TValidationField> & Pick<TValidationField, 'name'>)[],\r\n options?: TUpdateFieldOptions,\r\n ) => {\r\n fields.forEach((current) => {\r\n return this.updateField(formName, current, options);\r\n });\r\n };\r\n\r\n /**\r\n * Ejecuta la validación sobre un formulario. En caso de que la validación\r\n * falle, se intenta hacer foco sobre el campo que no pudo validar.\r\n * Es importante notar que en caso de que un campo requiera validación,\r\n * debería estar presente en el DOM.\r\n *\r\n * No es necesario que el campo esté visible, ya que en caso de estar oculto\r\n * (por ejemplo por ser hijo de un acordeón), se emitirá un evento para\r\n * expandir al elemento padre que lo estuviera ocultando.\r\n *\r\n * @returns Devuelve una promesa que al ser resuelta otorga un objeto de tipo\r\n * TValidationResult. Este tipo está pensado para ser usado en conjunto con\r\n * el método hasSucceedFormValidation, que determinará si la validación fue\r\n * exitosa o hubo errores.\r\n *\r\n * @example\r\n *\r\n * const result = await validationStore.validateForm('myForm');\r\n * if(hasSucceedValidation(result)) {\r\n * console.log('Success!', result);\r\n * } else {\r\n * console.error('Validation error', result);\r\n * }\r\n */\r\n validateForm = async <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n >(\r\n formName: string,\r\n ) => {\r\n const state = this.getFormStore(formName);\r\n\r\n if (!state) return { errors: { form: 'No form with name ' + formName } };\r\n\r\n const fields = state.fields.map((current) => {\r\n return this.getFieldStore(formName, current);\r\n });\r\n\r\n const validationErrors: TWrongValidation = { errors: {} };\r\n const validationValues: TSuccessfulValidation<Record<string, unknown>> = {\r\n submitValues: {},\r\n values: {},\r\n };\r\n let hasFiredFocus = false;\r\n let existsErrors = false;\r\n const fieldsWithError: Record<string, TFieldValidationResult> = {};\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const field of fields.filter((current) => {\r\n return current !== undefined;\r\n })) {\r\n // eslint-disable-next-line no-await-in-loop\r\n const validationResult = await validateField(field, formName);\r\n fieldsWithError[field.name] = validationResult;\r\n\r\n if (hasSucceedFieldValidation(validationResult)) {\r\n validationValues.submitValues[field.submitName ?? field.name] =\r\n field.submitValueParser\r\n ? await field.submitValueParser(field.value)\r\n : field.value;\r\n validationValues.values[field.name] = field.value;\r\n } else {\r\n this.updateField(formName, {\r\n name: field.name,\r\n error: validationResult,\r\n });\r\n if (!hasFiredFocus) {\r\n // eslint-disable-next-line no-await-in-loop\r\n if (await focusOnField(formName, field)) hasFiredFocus = true;\r\n }\r\n existsErrors = true;\r\n validationErrors.errors[field.name] = validationResult;\r\n }\r\n }\r\n\r\n if (existsErrors) {\r\n if (!hasFiredFocus) {\r\n notify({\r\n message: window.MSG_WRONG_VALIDATION_NO_FOCUSED_FILE,\r\n type: 'danger',\r\n });\r\n console.error('Campos que fallaron la validación', fieldsWithError);\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: false,\r\n validationResult: validationErrors,\r\n },\r\n true,\r\n );\r\n return validationErrors as TValidationResult<ValueType, SubmitValueType>;\r\n }\r\n this.updateFormStore(\r\n formName,\r\n {\r\n isValid: true,\r\n validationResult: validationValues,\r\n },\r\n true,\r\n );\r\n return validationValues as TValidationResult<ValueType, SubmitValueType>;\r\n };\r\n})();\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function useFormSelector<Selected = any>(\r\n formName: string,\r\n selector: TPropsSelector<Selected, TFormState>,\r\n comparator?: TPropsComparator<Selected>,\r\n) {\r\n return usePropsSelector(\r\n validationsStore.makeFormName(formName),\r\n selector,\r\n comparator,\r\n );\r\n}\r\n\r\n/**\r\n * Este hook permite suscribirse a los cambios realizados en el\r\n * store de validación de un campo de formulario. Funciona igual a un\r\n * useAppSelector en cuanto a la función selectora y comparadora.\r\n *\r\n * @param selector\r\n * @param comparator\r\n * @returns\r\n */\r\n\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n selector?: TPropsSelector<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n configurator?: TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n): Selected;\r\nexport function useFieldSelector<\r\n ValueType = unknown,\r\n SubmitValueType = unknown,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Selected = any,\r\n>(\r\n formName: string,\r\n fieldName: string,\r\n confOrSelector?:\r\n | TPropsSelector<Selected, TValidationField<ValueType, SubmitValueType>>\r\n | TPropsConfiguration<\r\n Selected,\r\n TValidationField<ValueType, SubmitValueType>\r\n >,\r\n comparator?: TPropsComparator<Selected>,\r\n): Selected {\r\n const fieldId = validationsStore.makeFieldName(formName, fieldName);\r\n return usePropsSelector(fieldId, confOrSelector, comparator);\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const formStyles: ThemeUICSSObject = {\r\n '.fieldWrapper': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n\r\n '&.checkbox': {\r\n alignItems: 'center',\r\n },\r\n },\r\n\r\n '.error': {\r\n borderLeftStyle: 'solid',\r\n borderLeftWidth: '4px',\r\n borderLeftColor: 'danger',\r\n },\r\n '.touched': {\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n borderColor: 'orange',\r\n },\r\n};\r\n","import { useUnmount, useMount } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { getVariant, injectStyles, Box, BoxProps } from '@apia/theme';\r\nimport { FormContext, IFormContext } from './FormContext';\r\nimport { TValidationResult } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\nimport { formStyles } from './formStyles';\r\n\r\nexport type TOnValidate<\r\n ValueType extends Record<string, unknown> = Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> = (\r\n validationResult: TValidationResult<ValueType, SubmitValueType>,\r\n) => unknown;\r\n\r\nexport interface IForm<\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n> {\r\n /**\r\n * Si se pasa en true, los campos que se registren en este form no\r\n * sobreescribirán valores previos si es que existen, sin importar el valor de\r\n * avoidRegisterIfExists pasado al useField.\r\n */\r\n avoidFieldsOverride?: boolean;\r\n /**\r\n * Impide que se apliquen los estilos que indican que un campo fue alterado.\r\n */\r\n avoidFieldsTouch?: boolean;\r\n children: React.ReactNode;\r\n className?: string;\r\n initialValues?: Partial<ValueType>;\r\n name?: string;\r\n onUnmount?: () => unknown;\r\n /**\r\n * Cuando se ejecuta una acción de validación desde\r\n * algún lugar de la aplicación se llama a este método\r\n * con el resultado de dicha ejecución.\r\n */\r\n onValidate?: TOnValidate<ValueType, SubmitValueType>;\r\n persistToSessionStorage?: boolean;\r\n /**\r\n * Permite definir si el formulario va a ser borrado de la validación al ser\r\n * desmontado\r\n */\r\n unregisterOnUnmount?: boolean;\r\n}\r\n\r\n/**\r\n * Cuando se desea usar el sistema de validación,\r\n * se debe utilizar este componente como form contenedor\r\n * de todos los campos que quieran validarse.\r\n *\r\n * Es importante que no se coloquen formularios dentro\r\n * de formularios ya que esto podría afectar negativamente\r\n * el proceso de validación.\r\n *\r\n * @props\r\n * *name:* Se puede pasar un nombre para identificar\r\n * el form. Este nombre será utilizado para almacenar\r\n * la información en Redux, por lo que si se desea\r\n * acceder a la información recolectada por la librería,\r\n * es conveniente pasar un nombre conocido y único. En\r\n * caso de no se pase ningún nombre, la aplicación\r\n * generará un nombre único automaticamente.\r\n *\r\n * *onValidate:* Un callback que será llamado cuando\r\n * se invoque el método validateForm del store o cuando\r\n * se lance el evento de submit del elemento form (por\r\n * ejemplo mediante un click en un botón que no tenga\r\n * type=\"button\"), con el resultado de la validación.\r\n *\r\n * avoidFieldsOverride\r\n * avoidFieldsTouch\r\n *\r\n * @see useField\r\n * @see useForm\r\n *\r\n * @important Debido a que este hook renderiza un elemento\r\n * form en el DOM, es importante agregar el atributo\r\n * type=\"button\" a todos los botones dentro del formulario\r\n * que no se desea que disparen la validación.\r\n *\r\n * @example\r\n * Para ver un ejemplo funcional, mira el componente\r\n * Invitations.tsx\r\n *\r\n * // IMPORTANTE: El tipado del componente Form es genérico\r\n * // por lo que es posible instanciarlo como se muestra a\r\n * // continuación, lo que nos da el tipado correcto en el\r\n * // callback onValidate.\r\n * <Form<FormDataType> onValidate={(res) => {\r\n * if(hasSucceedValidation(res)) {\r\n * // Do something with submitValues\r\n * } else {\r\n * // Do something with errors\r\n * }\r\n * }}>\r\n * ...{children}\r\n * </Form>\r\n */\r\nconst Form = <\r\n ValueType extends Record<string, unknown>,\r\n SubmitValueType extends Record<keyof ValueType, unknown> = ValueType,\r\n>({\r\n avoidFieldsOverride,\r\n avoidFieldsTouch,\r\n children,\r\n className,\r\n name,\r\n initialValues,\r\n onUnmount,\r\n onValidate,\r\n persistToSessionStorage,\r\n unregisterOnUnmount,\r\n}: IForm<ValueType, SubmitValueType>) => {\r\n const actualName = React.useMemo(\r\n () => name ?? `ValidationForm${uniqueId()}`,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const handleSubmit = React.useCallback<React.FormEventHandler>(\r\n async (ev) => {\r\n ev.preventDefault();\r\n const validationRes = (await validationsStore.validateForm(\r\n actualName,\r\n )) as TValidationResult<ValueType, SubmitValueType>;\r\n if (validationRes && onValidate) onValidate(validationRes);\r\n },\r\n [actualName, onValidate],\r\n );\r\n const contextValue = React.useMemo<IFormContext>(\r\n () => ({\r\n avoidFieldsTouch,\r\n name: actualName,\r\n validate: async () => validationsStore.validateForm(actualName),\r\n }),\r\n [actualName, avoidFieldsTouch],\r\n );\r\n\r\n useUnmount(() => {\r\n onUnmount?.();\r\n if (unregisterOnUnmount !== false)\r\n validationsStore.unregisterForm(actualName);\r\n });\r\n\r\n const [hasRegistered, setHasRegistered] = React.useState(false);\r\n\r\n useMount(() => {\r\n validationsStore.registerForm(actualName, {\r\n avoidFieldsOverride: avoidFieldsOverride ?? initialValues !== undefined,\r\n initialValues,\r\n persistToSessionStorage,\r\n });\r\n setHasRegistered(true);\r\n });\r\n if (!hasRegistered) return null;\r\n\r\n return (\r\n <FormContext.Provider value={contextValue}>\r\n <Box\r\n as=\"form\"\r\n {...getVariant('layout.common.validations.form')}\r\n className={`validationsForm ${className}`}\r\n id={`ValidationForm-${actualName}`}\r\n {...({ name: actualName } as unknown as BoxProps)}\r\n onSubmit={handleSubmit}\r\n >\r\n {children}\r\n </Box>\r\n </FormContext.Provider>\r\n );\r\n};\r\n\r\ninjectStyles('layout.common.validations.form', formStyles);\r\n\r\nexport { Form };\r\n","import { useMount, useUnmount } from '@apia/util';\r\nimport React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { TValidationField } from '../types';\r\nimport { useFieldSelector, validationsStore } from '../validationStore';\r\n\r\nexport type TUseField<ValueType = unknown, SubmitValueType = ValueType> = Omit<\r\n TValidationField<ValueType, SubmitValueType>,\r\n 'error' | 'value' | 'isTouched'\r\n> & {\r\n /**\r\n * Con esta propiedad es posible evitar que el campo\r\n * se registre cuando ya fue registrado previamente en\r\n * el store. De esta forma, se evitaría escribir sobre\r\n * un valor que ya estaba seteado anteriormente.\r\n */\r\n avoidRegisterIfExists?: boolean;\r\n /**\r\n * Si se está fuera de contexto de validación, se puede pasar un formName\r\n * para evitar que el hook lo intente tomar de contexto.\r\n */\r\n formName?: string;\r\n initialValue?: ValueType;\r\n removeOnUnmount?: boolean;\r\n};\r\n\r\n/**\r\n * Este hook permite registrar un field para ser validado,\r\n * o simplemente para recolectar su valor, e incluso aplicar\r\n * una función de transformación de dicho valor antes de\r\n * hacer submit.\r\n *\r\n * @returns\r\n * *error:* Es null mientras que no haya errores de\r\n * validación, y un string en caso de que si lo haya.\r\n *\r\n * *value:* Es el valor actual del campo.\r\n *\r\n * *name:* Debería utilizarse para dar * valor al atributo\r\n * name o id del contenedor que debe recibir el foco en caso\r\n * de que la validación fallara. (Esto es, cuando se deba\r\n * realizar foco porque la validación falló, la librería\r\n * intentará encontrar un campo con el selector\r\n * [name=${name}, #${name}] dentro del formulario).\r\n *\r\n * *onChange:* Se utiliza para setear el valor del campo,\r\n * puede utilizarse directamente como callback para la\r\n * propiedad onChange que aceptan la mayoría de los campos,\r\n * ya que intentará setear el valor con ev.target.value\r\n * y si esa propiedad no está definida, lo hará directamente\r\n * con ev.\r\n *\r\n * @example\r\n * // Si se desea un ejemplo más complejo, vea el componente\r\n * // Invitations.tsx que se encuentra dentro del directorio\r\n * // de la librería.\r\n *\r\n * const inputProps = useField<string>({\r\n name: 'name',\r\n validationRules: {\r\n required: true,\r\n minLength: 5,\r\n maxLength: 10\r\n },\r\n initialValue: metadata.value,\r\n * });\r\n\r\n return <Box>\r\n <Input {...inputProps} />\r\n <ValidationError name=\"name\" />\r\n </Box>\r\n */\r\nexport function useField<ValueType = unknown, SubmitValueType = ValueType>(\r\n fieldDefinition: TUseField<ValueType, SubmitValueType>,\r\n) {\r\n const formContext = React.useContext(FormContext);\r\n const formName = fieldDefinition.formName ?? formContext.name;\r\n\r\n if (!formName) {\r\n console.error(fieldDefinition);\r\n throw new Error(\r\n `useField: It was not possible to determine the formName in field with name ${fieldDefinition.name}`,\r\n );\r\n }\r\n\r\n React.useMemo(() => {\r\n validationsStore.registerField(\r\n formName,\r\n {\r\n ...fieldDefinition,\r\n ...(fieldDefinition.initialValue !== undefined\r\n ? { value: fieldDefinition.initialValue }\r\n : null),\r\n },\r\n {\r\n avoidPropagation: true,\r\n registerIfExists: !fieldDefinition.avoidRegisterIfExists,\r\n },\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useMount(() => {\r\n if (\r\n fieldDefinition.initialValue !== undefined &&\r\n ((!validationsStore.getFormStore(formName)?.avoidFieldsOverride &&\r\n !fieldDefinition.avoidRegisterIfExists) ||\r\n validationsStore.getFieldStore(formName, fieldDefinition.name) ===\r\n undefined)\r\n )\r\n validationsStore.setFieldValue(\r\n formName,\r\n fieldDefinition.name,\r\n fieldDefinition.initialValue,\r\n );\r\n });\r\n\r\n useUnmount(() => {\r\n if (fieldDefinition.removeOnUnmount)\r\n validationsStore.unregisterField(formName, fieldDefinition.name);\r\n });\r\n\r\n const {\r\n name,\r\n value: storeValue,\r\n error,\r\n isTouched,\r\n } = useFieldSelector<\r\n ValueType,\r\n SubmitValueType,\r\n TValidationField<ValueType, SubmitValueType>\r\n >(\r\n formName,\r\n fieldDefinition.name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (\r\n a === PropsSelectorUndefinedObject &&\r\n fieldDefinition.initialValue !== undefined\r\n )\r\n return true;\r\n return shallowEqual(a, b);\r\n },\r\n );\r\n\r\n const [localValue, setLocalValue] = React.useState<ValueType | undefined>(\r\n fieldDefinition.initialValue,\r\n );\r\n\r\n React.useEffect(() => {\r\n setLocalValue(storeValue);\r\n }, [storeValue]);\r\n\r\n const onChange = React.useCallback(\r\n (ev: React.ChangeEvent | ValueType) => {\r\n const reactChangeEvent = ev as React.ChangeEvent<HTMLInputElement>;\r\n let newValue: ValueType;\r\n if (\r\n typeof reactChangeEvent === 'object' &&\r\n reactChangeEvent &&\r\n reactChangeEvent.target !== undefined &&\r\n reactChangeEvent.target.value !== undefined\r\n ) {\r\n newValue = reactChangeEvent.target.value as unknown as ValueType;\r\n } else newValue = ev as ValueType;\r\n\r\n setLocalValue(newValue);\r\n validationsStore.setFieldValue(formName, fieldDefinition.name, newValue);\r\n },\r\n [fieldDefinition.name, formName],\r\n );\r\n\r\n return {\r\n error,\r\n isTouched,\r\n name,\r\n onChange,\r\n updateValidations: React.useCallback(\r\n ({\r\n validationFunction,\r\n validationRules,\r\n }: Pick<TValidationField, 'validationRules' | 'validationFunction'>) => {\r\n validationsStore.updateField(formName, {\r\n name: fieldDefinition.name,\r\n validationFunction,\r\n validationRules,\r\n });\r\n },\r\n [formName, fieldDefinition.name],\r\n ),\r\n value: localValue ?? (fieldDefinition.initialValue as ValueType),\r\n };\r\n}\r\n","import { useFormContext } from '../form/FormContext';\r\nimport { useField } from './useField';\r\n\r\nexport function useFieldStatesClassNames<T = unknown>(\r\n name: string,\r\n formName?: string,\r\n): string {\r\n const { error, isTouched } = useField<T>({\r\n name,\r\n formName,\r\n avoidRegisterIfExists: true,\r\n removeOnUnmount: false,\r\n });\r\n const { avoidFieldsTouch } = useFormContext();\r\n if (error) return 'error';\r\n if (!avoidFieldsTouch && isTouched) return 'touched';\r\n return '';\r\n}\r\n","import { shallowEqual } from 'react-redux';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { PropsSelectorUndefinedObject } from '@apia/util';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\ninterface IUseFieldValue {\r\n formName?: string;\r\n name: string;\r\n}\r\n\r\nexport function useFieldValue<T = unknown>({ formName, name }: IUseFieldValue) {\r\n const { name: hookFormName } = useFormContext();\r\n\r\n if (!formName && !hookFormName) {\r\n throw new Error(\r\n `useFieldValue: It was not possible to determine the formName in field with name ${name}`,\r\n );\r\n }\r\n\r\n const { value } = useFieldSelector(\r\n formName ?? hookFormName,\r\n name,\r\n (props) => {\r\n return props;\r\n },\r\n (a, b) => {\r\n if (a === PropsSelectorUndefinedObject && b?.value === undefined)\r\n return true;\r\n return shallowEqual(a?.value, b?.value);\r\n },\r\n );\r\n\r\n return value as T;\r\n}\r\n","import React from 'react';\r\nimport { TDefaultFieldType } from '../components/types';\r\nimport { TValidationFunction } from '../types';\r\nimport { classToValidate, classToValidationFunction } from '../util';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FormContext } from '../form/FormContext';\r\n\r\nexport function useValidationClass<T>({\r\n customValidation,\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n}: Pick<\r\n TDefaultFieldType<T>,\r\n 'validationClass' | 'validationFunction' | 'validationRules' | 'name'\r\n> & {\r\n customValidation?: TValidationFunction<T>;\r\n formName?: string;\r\n}) {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n\r\n const classesValidationFunction = React.useMemo(\r\n () =>\r\n validationClass !== undefined\r\n ? classToValidationFunction<T>(validationClass)\r\n : undefined,\r\n [validationClass],\r\n );\r\n const initialValidationFunction = React.useMemo(\r\n () =>\r\n validationsStore.getFieldStore(formName ?? contextFormName, name)\r\n ?.validationFunction,\r\n [contextFormName, formName, name],\r\n );\r\n const actualValidationFunction: TValidationFunction<T> = React.useCallback(\r\n (currentValue, parameterFormName) => {\r\n let result =\r\n initialValidationFunction?.(currentValue, parameterFormName) ??\r\n validationFunction?.(currentValue, parameterFormName) ??\r\n true;\r\n if (typeof result === 'string') return result;\r\n\r\n if (customValidation) {\r\n result = customValidation(currentValue, parameterFormName);\r\n }\r\n if (typeof result === 'string') return result;\r\n\r\n if (classesValidationFunction)\r\n return classesValidationFunction(currentValue, parameterFormName);\r\n\r\n return true;\r\n },\r\n [\r\n classesValidationFunction,\r\n customValidation,\r\n initialValidationFunction,\r\n validationFunction,\r\n ],\r\n );\r\n const actualValidationRules = React.useMemo(() => {\r\n return {\r\n ...validationRules,\r\n ...(validationClass !== undefined\r\n ? classToValidate(validationClass)\r\n : {}),\r\n };\r\n }, [validationClass, validationRules]);\r\n\r\n return {\r\n actualValidationFunction,\r\n actualValidationRules,\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\n\r\n/**\r\n * Renderiza los errores del campo con el nombre pasado\r\n * como prop. En caso de que no exista error, no renderiza\r\n * nada.\r\n *\r\n * @props\r\n * *name:* El nombre del campo cuyos errores se quieren\r\n * renderizar.\r\n */\r\nexport const ValidationError = ({ name }: { name: string }) => {\r\n const formContext = useFormContext();\r\n const error = useFieldSelector(formContext.name, name, (state) => {\r\n return state?.error;\r\n });\r\n\r\n return error ? (\r\n <Box\r\n as=\"strong\"\r\n role=\"alert\"\r\n sx={{\r\n color: 'danger',\r\n }}\r\n dangerouslySetInnerHTML={{ __html: error }}\r\n />\r\n ) : null;\r\n};\r\n","import { RequiredMark } from '@apia/components';\r\nimport React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useFieldSelector } from '../validationStore';\r\nimport { ValidationError } from './ValidationError';\r\n\r\ndeclare global {\r\n interface Window {\r\n SHOW_REQUIRED_POSITION: string;\r\n }\r\n}\r\n\r\nexport interface IWrapper extends BoxProps {\r\n avoidSemicolon?: boolean;\r\n children: React.ReactNode;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n type?: 'checkbox';\r\n}\r\n\r\nexport const FieldWrapper = ({\r\n name,\r\n label,\r\n avoidSemicolon,\r\n children,\r\n className,\r\n as = 'label',\r\n type,\r\n ...props\r\n}: IWrapper) => {\r\n const { name: formName } = useFormContext();\r\n const isRequired = useFieldSelector(\r\n formName,\r\n name,\r\n (global) => global?.validationRules?.required,\r\n );\r\n\r\n if (type === 'checkbox') {\r\n return (\r\n <Box\r\n className={`fieldWrapper checkboxWrapper ${className ?? ''}`}\r\n {...props}\r\n as={as}\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {children}\r\n <span>\r\n {label}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </span>\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n /**\r\n * Cuando el campo no tiene etiqueta, no tiene ningún sentido mostrar marca\r\n * de requerido ni tag label.\r\n */\r\n if (!label) {\r\n return (\r\n <Box className=\"fieldWrapper\" as=\"span\">\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box className={`fieldWrapper ${className ?? ''}`} {...props} as={as}>\r\n <Box as=\"span\" className=\"fieldWrapper__label\">\r\n {window.SHOW_REQUIRED_POSITION !== '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n {label}\r\n {!avoidSemicolon && label && <abbr className=\"semicolon\">: </abbr>}\r\n {window.SHOW_REQUIRED_POSITION === '0' && label && (\r\n <RequiredMark isRequired={isRequired} />\r\n )}\r\n </Box>\r\n {children}\r\n <ValidationError name={name} />\r\n </Box>\r\n );\r\n};\r\n","import { Captcha } from '@apia/components';\r\nimport { useField, useFieldStatesClassNames } from '../hooks';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\nimport React from 'react';\r\n\r\ntype TCaptchaProps = {\r\n name: string;\r\n imageUrl: string;\r\n className?: string;\r\n};\r\n\r\ntype TCaptcha = TCaptchaProps &\r\n Omit<\r\n TDefaultFieldType,\r\n 'validationFunction' | 'validationRules' | 'validationClass'\r\n >;\r\n\r\nconst InnerCaptcha = ({\r\n className,\r\n name,\r\n imageUrl,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n avoidSemicolon,\r\n formName,\r\n label,\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n}: TCaptcha) => {\r\n const { error, updateValidations, onChange, isTouched, ...validationProps } =\r\n useField({\r\n name,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: '',\r\n removeOnUnmount,\r\n submitName,\r\n submitValueParser,\r\n validationValueParser,\r\n validationRules: { required: true },\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n },\r\n [onChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Captcha\r\n name={name}\r\n imageUrl={imageUrl}\r\n onChange={handleOnChange}\r\n value={validationProps.value}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n};\r\n\r\nexport { InnerCaptcha as Captcha };\r\n","import React from 'react';\r\nimport { ButtonProps, InputProps } from '@apia/theme';\r\nimport { Checkbox as AppCheckbox } from '@apia/components';\r\nimport { useField } from '../hooks/useField';\r\nimport { TDefaultFieldType } from './types';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\nexport type TCheckboxProps = Omit<\r\n ButtonProps,\r\n 'onChange' | 'defaultChecked' | 'defaultValue'\r\n> &\r\n Pick<InputProps, 'onChange'>;\r\n\r\nexport type TCheckbox = TCheckboxProps &\r\n TDefaultFieldType<boolean | string> & { native?: boolean };\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n native,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n value: innerValue,\r\n onChange,\r\n updateValidations,\r\n isTouched,\r\n ...inputProps\r\n } = useField<boolean | string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n ((initialValue as unknown) === true || initialValue === 'on') ?? false,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`checkbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppCheckbox\r\n {...props}\r\n {...inputProps}\r\n native={native}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked);\r\n if (outerOnChange) outerOnChange(ev);\r\n }}\r\n checked={innerValue === true || innerValue === 'on'}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { IconButton } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput, ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\n\r\ntype TDeletableInput = InputProps & TDefaultFieldType;\r\n\r\nexport const DeletableInput = React.forwardRef<\r\n HTMLInputElement,\r\n TDeletableInput\r\n>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n outerOnChange?.(ev);\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useCallback(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n } as ThemeUICSSObject),\r\n [],\r\n )}\r\n className={`deletableInput ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={`deletableInput__input ${stateClassName ?? ''}`}\r\n />\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"deletableInput__deleteButton\"\r\n onClick={() => onChange('')}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nDeletableInput.displayName = 'DeletableInput';\r\n","import { getFieldErrorStyles } from '@apia/components';\r\nimport React from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\nimport { useFormContext } from '../form/FormContext';\r\nimport { useValidationClass } from '../hooks';\r\nimport { useField, TUseField } from '../hooks/useField';\r\nimport { lang } from '../util';\r\nimport { FieldWrapper, IWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TFileInput = Omit<InputProps, 'onChange' | 'type' | 'value' | 'multiple'> &\r\n TDefaultFieldType<File | null> &\r\n Pick<TUseField, 'removeOnUnmount'> &\r\n Pick<IWrapper, 'avoidSemicolon'>;\r\n\r\nexport const FileInput = React.memo(\r\n React.forwardRef<HTMLInputElement, TFileInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: formName } = useFormContext();\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n customValidation(fileValue) {\r\n return fileValue !== null && fileValue !== undefined\r\n ? true\r\n : lang('required');\r\n },\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const {\r\n error,\r\n onChange,\r\n value,\r\n updateValidations,\r\n isTouched,\r\n ...validationProps\r\n } = useField<File | null>({\r\n formName,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Input\r\n {...props}\r\n {...validationProps}\r\n type=\"file\"\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n sx={getFieldErrorStyles(!error)}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev.target?.files?.[0] ?? null);\r\n },\r\n [onChange],\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nFileInput.displayName = 'FileInput';\r\n","import { DateInput } from '@apia/components';\r\nimport React from 'react';\r\nimport { InputProps, Input as TUIInput } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TInput = InputProps & TDefaultFieldType;\r\n\r\nexport const Input = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const {\r\n error,\r\n updateValidations,\r\n onChange,\r\n isTouched,\r\n ...validationProps\r\n } = useField<string>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: string | React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (typeof ev === 'string') {\r\n // Es date\r\n outerOnChange?.({\r\n target: ref,\r\n } as unknown as React.ChangeEvent<HTMLInputElement>);\r\n } else {\r\n // Es comun\r\n outerOnChange?.(ev);\r\n }\r\n },\r\n [onChange, outerOnChange, ref],\r\n );\r\n\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n {type === 'date' ? (\r\n <DateInput\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onError={undefined}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n ) : (\r\n <TUIInput\r\n type={type}\r\n {...props}\r\n {...validationProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n onChange={handleOnChange}\r\n value={validationProps.value ?? ''}\r\n className={stateClassName}\r\n />\r\n )}\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nInput.displayName = 'Input';\r\n","import {\r\n TNumberInput,\r\n NumberInput as AppNumberInput,\r\n TNumberInputChangeEvent,\r\n ApiaUtil,\r\n} from '@apia/components';\r\nimport { formatMessage } from '@apia/util';\r\nimport React from 'react';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport { FormContext } from '../form/FormContext';\r\nimport { useFieldStatesClassNames } from '../hooks';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { validationsStore } from '../validationStore';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ndeclare global {\r\n interface Window {\r\n GNR_NUMERIC: string;\r\n }\r\n}\r\n\r\ntype TInput = TNumberInput & TDefaultFieldType;\r\n\r\nexport const NumberInputf = React.memo(\r\n React.forwardRef<HTMLInputElement, TInput>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n formName: propsFormName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { name: contextFormName } = React.useContext(FormContext);\r\n const formName = propsFormName ?? contextFormName;\r\n\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { onChange, value: innerValue } = useField<string, number>({\r\n formName,\r\n name,\r\n initialValue:\r\n initialValue ??\r\n (value as string) ??\r\n validationsStore.getFieldStore(formName, name)?.value ??\r\n '',\r\n removeOnUnmount,\r\n submitValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationValueParser: React.useCallback(\r\n (current: string) =>\r\n ApiaUtil.instance.parsers.jsNumber(current ?? ''),\r\n [],\r\n ),\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n const handleOnChange = React.useCallback(\r\n (ev: TNumberInputChangeEvent) => {\r\n if (ev.error) {\r\n outerOnChange?.({ ...ev, value: '' });\r\n onChange('');\r\n validationsStore.updateField(formName, {\r\n name,\r\n error: formatMessage(window.GNR_NUMERIC, { TOK: '' }),\r\n });\r\n } else {\r\n onChange(ev.value);\r\n outerOnChange?.(ev);\r\n validationsStore.updateField(formName, { name, error: null });\r\n }\r\n },\r\n [formName, name, onChange, outerOnChange],\r\n );\r\n const stateClassName = useFieldStatesClassNames(name);\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n sx={React.useMemo(\r\n () =>\r\n ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'start',\r\n }) as ThemeUICSSObject,\r\n [],\r\n )}\r\n className={`input ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <AppNumberInput\r\n ref={ref}\r\n {...props}\r\n name={name}\r\n value={innerValue}\r\n onChange={handleOnChange}\r\n className={stateClassName}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nNumberInputf.displayName = 'NumberInputf';\r\n","import React from 'react';\r\nimport { RadioProps, Radio as TUIRadio, Label, Box } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TRadio = RadioProps &\r\n TDefaultFieldType & {\r\n options: { value: string; label: string }[];\r\n };\r\n\r\nexport const Radio = React.forwardRef<HTMLInputElement, TRadio>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n value: outerValue,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { value, updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n formName,\r\n name,\r\n initialValue: initialValue ?? (outerValue as string),\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`radio ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n as=\"ul\"\r\n >\r\n {options?.map((option) => (\r\n <li key={option.value}>\r\n <Label title={option.label} className=\"radio-label\">\r\n <TUIRadio\r\n {...props}\r\n {...inputProps}\r\n role=\"radio\"\r\n className=\"radio-button\"\r\n aria-label={option.label}\r\n ref={ref}\r\n value={option.value}\r\n checked={value === option.value}\r\n onChange={handleOnChange}\r\n />\r\n <Box as=\"span\" className=\"radio-text\">\r\n {option.label}\r\n </Box>\r\n </Label>\r\n </li>\r\n ))}\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nRadio.displayName = 'Radio';\r\n","import React from 'react';\r\nimport { SelectProps, Select as TUISelect } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { TDefaultFieldType } from './types';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TId } from '@apia/util';\r\n\r\nexport type TOption = { value: TId; label: string };\r\n\r\nexport type TSelectProps = Omit<SelectProps, 'defaultValue'>;\r\n\r\nexport type TSelect = TSelectProps &\r\n TDefaultFieldType & {\r\n options: TOption[];\r\n };\r\n\r\nexport const Select = React.forwardRef<HTMLSelectElement, TSelect>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n options,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n initialValue: initialValue ?? (value as string) ?? options[0]?.value,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`select ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUISelect\r\n {...getVariant('forms.select')}\r\n {...props}\r\n {...inputProps}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLSelectElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n )}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n >\r\n {options?.map((option) => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n {props.children}\r\n </TUISelect>\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import { toBoolean } from '@apia/util';\r\nimport React from 'react';\r\nimport { InputProps, Switch, SwitchProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\nexport type TSwitchbox = Omit<SwitchProps, 'onChange'> &\r\n Pick<InputProps, 'onChange'> &\r\n TDefaultFieldType & { reverse?: boolean };\r\n\r\nexport const Switchbox = React.forwardRef<HTMLInputElement, TSwitchbox>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n label,\r\n onChange: outerOnChange,\r\n type,\r\n reverse = false,\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { onChange, updateValidations, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n name,\r\n initialValue:\r\n (initialValue ?? 'off') === 'on' || toBoolean(initialValue)\r\n ? 'on'\r\n : 'off',\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationFunction: actualValidationFunction,\r\n validationRules: actualValidationRules,\r\n });\r\n\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`switchbox ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <Switch\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n onChange={(ev) => {\r\n onChange(ev.target.checked !== reverse ? 'on' : 'off');\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n }}\r\n checked={((inputProps.value ?? 'off') === 'on') !== reverse}\r\n ref={ref}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nSwitchbox.displayName = 'Switchbox';\r\n","import React from 'react';\r\nimport { Textarea as TUITextarea, TextareaProps } from '@apia/theme';\r\nimport { useField } from '../hooks/useField';\r\nimport { useValidationClass } from '../hooks/useValidationClass';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { TDefaultFieldType } from './types';\r\n\r\ntype TTextarea = TextareaProps & TDefaultFieldType;\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TTextarea>(\r\n (\r\n {\r\n avoidSemicolon,\r\n className,\r\n formName,\r\n label,\r\n onChange: outerOnChange,\r\n /**\r\n * useField\r\n */\r\n avoidRegisterIfExists,\r\n initialValue,\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n value,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { actualValidationFunction, actualValidationRules } =\r\n useValidationClass({\r\n formName,\r\n name,\r\n validationClass,\r\n validationFunction,\r\n validationRules,\r\n });\r\n const { updateValidations, onChange, isTouched, ...inputProps } =\r\n useField<string>({\r\n avoidRegisterIfExists,\r\n formName,\r\n initialValue: initialValue ?? (value as string),\r\n name,\r\n removeOnUnmount,\r\n submitValueParser,\r\n validationRules: actualValidationRules,\r\n validationFunction: actualValidationFunction,\r\n });\r\n const handleOnChange = React.useCallback(\r\n (ev: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n onChange(ev);\r\n if (outerOnChange) {\r\n outerOnChange(ev);\r\n }\r\n },\r\n [onChange, outerOnChange],\r\n );\r\n return (\r\n <FieldWrapper\r\n name={name}\r\n label={label}\r\n className={`textarea ${className ?? ''}`}\r\n avoidSemicolon={avoidSemicolon}\r\n >\r\n <TUITextarea\r\n {...props}\r\n {...inputProps}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n value={inputProps.value ?? ''}\r\n onChange={handleOnChange}\r\n />\r\n </FieldWrapper>\r\n );\r\n },\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { EventEmitter, useSubscription, StatefulEmitter } from '@apia/util';\r\nimport { FC, ReactNode } from 'react';\r\nimport { TOption } from '../components';\r\nimport {\r\n TFocusRetriever,\r\n TValidationFunction,\r\n TValidationRules,\r\n} from '../types';\r\nimport { Box } from '@apia/theme';\r\nimport { Collector } from './Collector';\r\n\r\nexport abstract class CollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends EventEmitter<{\r\n focusFunctionUpdate: TFocusRetriever;\r\n functionUpdate: TValidationFunction<ValueType>;\r\n optionsUpdate: TOption[];\r\n propsUpdate: Partial<FieldProps>;\r\n rulesUpdate: TValidationRules;\r\n}> {\r\n /**\r\n * Este es el componente de implementación de cada campo particular\r\n */\r\n abstract Component: FC;\r\n abstract type: string;\r\n\r\n #emitter = new StatefulEmitter<{\r\n isHidden: boolean;\r\n }>({\r\n isHidden: false,\r\n });\r\n\r\n constructor(\r\n public readonly name: string,\r\n protected label: ReactNode,\r\n properties?: Partial<FieldProps>,\r\n ) {\r\n super();\r\n\r\n if (properties) {\r\n this.properties = properties;\r\n }\r\n }\r\n\r\n public collector: Collector = {} as Collector;\r\n\r\n isHidden = () => this.#emitter.getState('isHidden');\r\n setIsHidden = (isHidden: boolean) => {\r\n this.#emitter.emit('isHidden', isHidden);\r\n };\r\n\r\n protected properties: Partial<FieldProps> = {};\r\n setProperties = (newProps: Partial<FieldProps>) => {\r\n this.properties = newProps;\r\n this.emit('propsUpdate', { ...this.properties });\r\n };\r\n\r\n protected useProperties = () => {\r\n return useSubscription<Partial<FieldProps>>({\r\n getInitialState: () => this.properties,\r\n makeSubscription: (setProps) => this.on('propsUpdate', setProps),\r\n });\r\n };\r\n\r\n /**\r\n * Este componente se utiliza para controlar propiedades comunes a todos los\r\n * campos.\r\n */\r\n SuperComponent = () => {\r\n if (this.#emitter.useState('isHidden')) return null;\r\n\r\n return (\r\n <Box className={`collector__field ${this.type}`}>\r\n <this.Component />\r\n </Box>\r\n );\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useSubscription } from '@apia/util';\r\nimport { CollectorField } from './CollectorField';\r\nimport { TValidationRules, TValidationFunction } from '../types';\r\nimport { validationsStore } from '../validationStore';\r\n\r\nexport abstract class ValidatedCollectorField<\r\n ValueType = any,\r\n FieldProps = any,\r\n> extends CollectorField<ValueType, FieldProps> {\r\n constructor(\r\n public readonly name: string,\r\n protected label: string,\r\n protected config: Partial<{\r\n initialValue: ValueType;\r\n properties: Partial<FieldProps>;\r\n validationFunction: TValidationFunction<ValueType>;\r\n validationRules: TValidationRules;\r\n }> = {},\r\n ) {\r\n super(name, label, config?.properties);\r\n }\r\n\r\n get initialValue() {\r\n return this.config.initialValue;\r\n }\r\n\r\n get value() {\r\n return validationsStore.getFieldStore(this.collector.id, this.name).value;\r\n }\r\n\r\n setInitialValue = (newValue: ValueType) => {\r\n this.config.initialValue = newValue;\r\n };\r\n\r\n setValidationFunction = (newFunction: TValidationFunction<ValueType>) => {\r\n this.config.validationFunction = newFunction;\r\n this.emit('functionUpdate', this.config.validationFunction);\r\n };\r\n\r\n setValidationRules = (newRules: TValidationRules) => {\r\n this.config.validationRules = newRules;\r\n this.emit('rulesUpdate', { ...this.config.validationRules });\r\n };\r\n\r\n setValue = (newValue: ValueType) => {\r\n validationsStore.setFieldValue(this.collector.id, this.name, newValue);\r\n };\r\n\r\n protected useValidationFunction = () => {\r\n return useSubscription<TValidationFunction<ValueType> | undefined>({\r\n getInitialState: () => () => this.config.validationFunction,\r\n makeSubscription: (setValidationFunction) => {\r\n return this.on('functionUpdate', setValidationFunction);\r\n },\r\n });\r\n };\r\n\r\n protected useValidationRules = () => {\r\n return useSubscription({\r\n getInitialState: () => this.config.validationRules,\r\n makeSubscription: (setValidationRules) => {\r\n return this.on('rulesUpdate', setValidationRules);\r\n },\r\n });\r\n };\r\n}\r\n","import { Checkbox, TCheckboxProps } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorCheckbox extends ValidatedCollectorField<\r\n string | boolean,\r\n Omit<TCheckboxProps, 'name'>\r\n> {\r\n type = 'checkbox';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Checkbox\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n avoidSemicolon\r\n />\r\n );\r\n };\r\n}\r\n","import { InputProps } from '@apia/theme';\r\nimport { Input } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\n\r\nexport class CollectorInput extends ValidatedCollectorField<\r\n string,\r\n Omit<InputProps, 'name'>\r\n> {\r\n type = 'input';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Input\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n />\r\n );\r\n };\r\n}\r\n","import { useMount } from '@apia/util';\r\nimport { useState } from 'react';\r\nimport { TSelectProps, TOption } from '../../components';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Select } from '../../components';\r\nimport { TValidationFunction, TValidationRules } from '../../types';\r\n\r\nexport class CollectorSelect extends ValidatedCollectorField<\r\n string,\r\n Omit<TSelectProps, 'name'>\r\n> {\r\n type = 'select';\r\n\r\n constructor(\r\n protected _name: string,\r\n protected label: string,\r\n config?: Partial<{\r\n initialValue: string;\r\n options: TOption[];\r\n properties: Partial<Omit<TSelectProps, 'name'>>;\r\n validationFunction: TValidationFunction<string>;\r\n validationRules: TValidationRules;\r\n }>,\r\n ) {\r\n super(_name, label, config);\r\n if (config?.options) {\r\n this.#options = config.options;\r\n }\r\n }\r\n #options: TOption[] = [];\r\n\r\n addOption = (newOption: TOption) => {\r\n this.#options = [...this.#options, newOption];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n setOptions = (newOptions: TOption[]) => {\r\n this.#options = [...newOptions];\r\n this.emit('optionsUpdate', this.#options);\r\n };\r\n\r\n #useOptions = () => {\r\n const [options, setOptions] = useState(this.#options);\r\n\r\n useMount(() => {\r\n return this.on('optionsUpdate', setOptions);\r\n });\r\n\r\n return options;\r\n };\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const options = this.#useOptions();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Select\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n validationFunction={validationFunction}\r\n name={this.name}\r\n label={this.label}\r\n validationRules={rules}\r\n options={options}\r\n />\r\n );\r\n };\r\n}\r\n","import { TextareaProps } from '@apia/theme';\r\nimport { ValidatedCollectorField } from '../ValidatedCollectorField';\r\nimport { Textarea } from '../../components';\r\n\r\nexport class CollectorTextarea extends ValidatedCollectorField<\r\n string,\r\n Omit<TextareaProps, 'name'>\r\n> {\r\n type = 'textarea';\r\n\r\n Component = () => {\r\n const rules = this.useValidationRules();\r\n const validationFunction = this.useValidationFunction();\r\n const props = this.useProperties();\r\n\r\n return (\r\n <Textarea\r\n {...props}\r\n initialValue={this.config.initialValue}\r\n name={this.name}\r\n validationFunction={validationFunction}\r\n validationRules={rules}\r\n label={this.label}\r\n />\r\n );\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ReactNode } from 'react';\r\n\r\nexport class CollectorLabel extends CollectorField {\r\n private static maxId = 0;\r\n\r\n type = 'label';\r\n\r\n constructor(\r\n label: ReactNode,\r\n private kind:\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'p'\r\n | 'label' = 'label',\r\n ) {\r\n super(`label${CollectorLabel.maxId++}`, label);\r\n }\r\n\r\n Component = () => {\r\n if (this.kind === 'label') return <Box as={this.kind}>{this.label}</Box>;\r\n\r\n return <Box as={this.kind}>{this.label}</Box>;\r\n };\r\n}\r\n","import { SimpleButton } from '@apia/components';\r\nimport { CollectorField } from '../CollectorField';\r\nimport { ButtonProps } from '@apia/theme';\r\n\r\nlet i = 0;\r\n\r\nexport class CollectorButton extends CollectorField<\r\n null,\r\n Omit<ButtonProps, 'children'>\r\n> {\r\n type = 'button';\r\n\r\n constructor(\r\n protected label: string,\r\n properties?: Omit<ButtonProps, 'children'>,\r\n ) {\r\n super(`Button${i++}`, label, properties);\r\n }\r\n\r\n Component = () => {\r\n const props = this.useProperties();\r\n\r\n return <SimpleButton {...props}>{this.label}</SimpleButton>;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ApiaUtil,\r\n ApiaUtilModalHandler,\r\n TOpenModal,\r\n useModalContext,\r\n} from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { Box, Button, getVariant } from '@apia/theme';\r\nimport { hasSucceedFormValidation, initValidations } from '../util';\r\nimport { Form } from '../form/Form';\r\nimport { CollectorField } from './CollectorField';\r\nimport { CollectorCheckbox } from './fields/Checkbox';\r\nimport { CollectorInput } from './fields/Input';\r\nimport { CollectorSelect } from './fields/Select';\r\nimport { CollectorTextarea } from './fields/Textarea';\r\nimport { CollectorLabel } from './fields/Label';\r\nimport { CollectorButton } from './fields/Button';\r\nimport { ValidatedCollectorField } from './ValidatedCollectorField';\r\n\r\ntry {\r\n void initValidations().catch(() => {});\r\n} catch (e) {\r\n console.error(e);\r\n}\r\n\r\nlet maxId = 0;\r\n\r\nexport class Collector {\r\n fields = {\r\n button: CollectorButton,\r\n checkbox: CollectorCheckbox,\r\n input: CollectorInput,\r\n /**\r\n * Muestra una etiqueta con tag personalizable: h1...h6, p, label. (Por\r\n * defecto: label)\r\n */\r\n label: CollectorLabel,\r\n select: CollectorSelect,\r\n textarea: CollectorTextarea,\r\n };\r\n\r\n private private__id = `Collector${maxId++}`;\r\n public get id() {\r\n return this.private__id;\r\n }\r\n modal: ApiaUtilModalHandler | null = null;\r\n\r\n #fields: Record<string, CollectorField> = {};\r\n\r\n add = (...fields: CollectorField[]) => {\r\n fields.forEach((field) => {\r\n this.#fields[field.name] = field;\r\n // eslint-disable-next-line no-param-reassign\r\n field.collector = this;\r\n });\r\n return this;\r\n };\r\n\r\n forEach = (cb: (field: CollectorField, i: number) => void) => {\r\n Object.values(this.#fields).forEach(cb);\r\n };\r\n\r\n #Component = ({\r\n hideConfirm,\r\n resolve,\r\n }: {\r\n hideConfirm?: boolean;\r\n resolve: (v: Record<string, unknown>) => boolean;\r\n }) => {\r\n const modal = useModalContext();\r\n\r\n let hasValidated = false;\r\n\r\n return (\r\n <Box\r\n className=\"formContainer\"\r\n {...getVariant('layout.util.collector.formContainer')}\r\n >\r\n <Form\r\n name={this.private__id}\r\n onValidate={(result) => {\r\n if (hasSucceedFormValidation(result)) {\r\n const res = resolve(result.submitValues);\r\n if (res) {\r\n modal.close();\r\n }\r\n }\r\n }}\r\n >\r\n <Box className=\"collector__fields\">\r\n {Object.values(this.#fields).map((current) => {\r\n if (current instanceof ValidatedCollectorField)\r\n hasValidated = true;\r\n\r\n return <current.SuperComponent key={current.name} />;\r\n })}\r\n </Box>\r\n {hasValidated && !hideConfirm && (\r\n <Box className=\"collector__buttons\">\r\n <Button variant=\"outline\">{getLabel('btnCon').text}</Button>\r\n </Box>\r\n )}\r\n </Form>\r\n </Box>\r\n );\r\n };\r\n\r\n show = <FormValues extends Record<string, unknown>>(\r\n modalProps?: Partial<\r\n Omit<TOpenModal, 'children' | 'onConfirm' | 'onCancel' | 'confirmProps'>\r\n > &\r\n Partial<{\r\n hideConfirm: boolean;\r\n /**\r\n * Si este método devuelve false, el modal no se cerrará\r\n */\r\n onConfirm?: (res: FormValues | null) => boolean;\r\n }>,\r\n ): Promise<FormValues | null> => {\r\n const { onConfirm, ...actualModalProps } = modalProps ?? {};\r\n const hasResolved = false;\r\n return new Promise<FormValues | null>((resolve) => {\r\n const C = this.#Component;\r\n const modal = ApiaUtil.instance.modals.open({\r\n onExited: () => {\r\n if (!hasResolved) {\r\n this.modal = null;\r\n resolve(null);\r\n }\r\n },\r\n children: (\r\n <C\r\n hideConfirm={modalProps?.hideConfirm}\r\n resolve={(values) => {\r\n if (onConfirm) {\r\n const confirmResult = onConfirm(values as FormValues);\r\n if (!confirmResult) {\r\n return false;\r\n }\r\n }\r\n\r\n resolve(values as FormValues);\r\n return true;\r\n }}\r\n />\r\n ),\r\n variant: 'layout.util.collector.modal',\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>(\r\n 'input,textarea,select,button:not(.modal__closeButton)',\r\n );\r\n },\r\n ...actualModalProps,\r\n });\r\n this.modal = modal;\r\n });\r\n };\r\n}\r\n"],"names":["__publicField","isTouched","AppCheckbox","TUIInput","Input","AppNumberInput","TUIRadio","TUISelect","TUITextarea","__privateAdd","__privateGet"],"mappings":";;;;;;;;;AAYO,MAAM,cAAc,KAAM,CAAA,aAAA;AAAA,EAC/B,EAAC;AACH,EAAA;AAgBO,SAAS,cAAiB,GAAA;AAC/B,EAAM,MAAA,WAAA,GAAc,KAAM,CAAA,UAAA,CAAW,WAAW,CAAA,CAAA;AAChD,EAAA,IAAI,CAAC,WAAA;AAAa,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA,CAAA;AAC3D,EAAO,OAAA,WAAA,CAAA;AACT;;ACtBO,SAAS,eAA2B,CAAA;AAAA,EACzC,KAAA;AAAA,EACA,KAAA;AACF,CAAwD,EAAA;AACtD,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,KAAK,CAAA,CAAE,SAAS,KAAK,CAAA,CAAA;AAC7D,EAAO,OAAA,gBAAA,CAAA;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;ACQsB,eAAA,aAAA,CACpB,OACA,QACiC,EAAA;AACjC,EAAA,IAAI,gBAAkD,GAAA,IAAA,CAAA;AACtD,EAAM,MAAA,UAAA,GAAa,MAAM,qBACrB,GAAA,KAAA,CAAM,sBAAsB,KAAM,CAAA,KAAK,IACvC,KAAM,CAAA,KAAA,CAAA;AACV,EAAA,IAAI,MAAM,kBAAoB,EAAA;AAC5B,IAAA,gBAAA,GAAmB,MAAM,KAAA,CAAM,kBAAmB,CAAA,UAAA,EAAY,QAAQ,CAAA,CAAA;AAAA,GACxE;AACA,EAAA,IAAA,CACG,CAAC,KAAM,CAAA,kBAAA,IAAsB,gBAAqB,KAAA,IAAA,KACnD,MAAM,eACN,EAAA;AACA,IAAA,gBAAA,GAAmB,eAAgB,CAAA;AAAA,MACjC,OAAO,KAAM,CAAA,eAAA;AAAA,MACb,KAAO,EAAA,UAAA;AAAA,KACR,CAAA,CAAA;AAAA,aACQ,gBAAqB,KAAA,IAAA;AAAM,IAAmB,gBAAA,GAAA,IAAA,CAAA;AACzD,EAAO,OAAA,gBAAA,CAAA;AACT,CAAA;AAKO,SAAS,0BACd,MACgB,EAAA;AAChB,EAAA,OAAO,MAAW,KAAA,IAAA,CAAA;AACpB,CAAA;AAOO,SAAS,yBAId,MAC6D,EAAA;AAC7D,EAAA,OAAO,EAAE,QAAY,IAAA,MAAA,CAAA,CAAA;AACvB,CAAA;AAMsB,eAAA,YAAA,CAAa,UAAkB,KAAyB,EAAA;AAC5E,EAAA,IAAI,MAAM,KAAO,EAAA;AACf,IAAQ,OAAA,MAAM,KAAM,CAAA,KAAA,EAAY,IAAA,IAAA,CAAA;AAAA,GAClC;AAEA,EAAA,MAAM,cAAc,QAAS,CAAA,cAAA;AAAA,IAC3B,kBAAkB,QAAQ,CAAA,CAAA;AAAA,GAC5B,CAAA;AACA,EAAA,MAAM,eAAmC,WAAa,EAAA,aAAA;AAAA,IACpD,CAAA,OAAA,EAAU,GAAI,CAAA,MAAA,CAAO,KAAM,CAAA,IAAI,CAAC,CAAA,KAAA,EAAQ,GAAI,CAAA,MAAA,CAAO,KAAM,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,GAChE,CAAA;AAEA,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,MAAM,MAAA,KAAA,GAAQ,IAAI,WAAY,CAAA,YAAA,CAAa,OAAO,EAAE,OAAA,EAAS,MAAM,CAAA,CAAA;AACnE,MAAA,YAAA,CAAa,KAAM,EAAA,CAAA;AACnB,MAAA,YAAA,CAAa,cAAc,KAAK,CAAA,CAAA;AAChC,MAAA,YAAA,CAAa,cAAe,CAAA;AAAA,QAC1B,KAAO,EAAA,QAAA;AAAA,QACP,QAAU,EAAA,MAAA;AAAA,OACX,CAAA,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEA,IAAI,cAAA,CAAA;AAKY,SAAA,IAAA,CACd,cACG,YACH,EAAA;AACA,EAAI,IAAA,CAAC,eAAe,SAAS,CAAA;AAAG,IAAO,OAAA,EAAA,CAAA;AACvC,EAAI,IAAA,YAAA,GAAe,eAAe,SAAS,CAAA,CAAA;AAC3C,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAU,KAAA;AACvC,IAAA,YAAA,GAAe,aAAa,OAAQ,CAAA,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,GACpE,CAAA,CAAA;AACD,EAAO,OAAA,YAAA,CAAA;AACT,CAAA;AAEO,SAAS,0BACd,SAC2C,EAAA;AAE3C,EAAM,MAAA,KAAA,GAAQ,SAAW,EAAA,KAAA,CAAM,wBAAwB,CAAA,CAAA;AACvD,EAAA,IAAI,KAAO,EAAA;AACT,IAAM,MAAA,kBAAA,GAAgE,CACpE,KAAA,EACA,QACG,KAAA;AACH,MAAA,OAAO,UAAU,gBAAiB,CAAA,aAAA,CAAc,QAAU,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KACjE,GAAA,IAAA,GACA,KAAK,SAAW,EAAA,KAAA,CAAM,CAAC,CAAK,IAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,KAC1C,CAAA;AAEA,IAAO,OAAA,kBAAA,CAAA;AAAA,GACT;AAEA,EAAO,OAAA,KAAA,CAAA,CAAA;AACT,CAAA;AAEO,SAAS,gBACd,SAC8B,EAAA;AAC9B,EAAA,MAAM,cAAuC,EAAC,CAAA;AAC9C,EAAA,IAAI,SAAW,EAAA;AACb,IAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,KAAA,CAAM,sBAAsB,CAAA,CAAA;AACpD,IAAA,IAAI,KAAO,EAAA;AACT,MAAM,MAAA,WAAA,GAAc,MAAM,CAAC,CAAA,CAAE,WAAW,GAAK,EAAA,EAAE,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC1D,MAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,UAAe,KAAA;AAClC,QAAM,MAAA,eAAA,GAAkB,UAAW,CAAA,KAAA,CAAM,sBAAsB,CAAA,CAAA;AAC/D,QAAA,IAAI,eAAiB,EAAA;AACnB,UAAM,MAAA,IAAA,GAAO,gBAAgB,CAAC,CAAA,CAAA;AAG9B,UAAI,IAAA,IAAA,KAAS,SAAa,IAAA,eAAA,CAAgB,CAAC,CAAA;AACzC,YAAA,WAAA,CAAY,IAAI,CAAI,GAAA,IAAI,MAAO,CAAA,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAA;AAAA,eAC1C,IAAA,eAAA,CAAgB,CAAC,CAAG,EAAA;AAC3B,YAAA,MAAM,KAAQ,GAAA,eAAA,CAAgB,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;AAC1C,YAAA,MAAM,cACJ,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAA;AAEpC,YAAA,WAAA,CAAY,IAAI,CACd,GAAA,WAAA,CAAA;AAAA,WACJ;AAAO,YAAA,WAAA,CAAY,IAAI,CAAI,GAAA,IAAA,CAAA;AAAA,SAC7B;AAAA,OACD,CAAA,CAAA;AACD,MAAO,OAAA,WAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAA,OAAO,EAAC,CAAA;AACV,CAAA;AAmCA,eAAsB,eAAkB,GAAA;AACtC,EAAI,IAAA,cAAA;AAAgB,IAAA,OAAA;AACpB,EAAM,MAAA,IAAA,GAAO,QAAS,CAAA,eAAA,CAAgB,IAAQ,IAAA,IAAA,CAAA;AAC9C,EAAA,cAAA,GAAA,CACG,MAAM,iCAAA;AAAA;AAAA,IACwC,UAAU,IAAI,CAAA,GAAA,CAAA;AAAA,GAC3D,CAAA,KAAA,CAAM,CAAC,KAAU,KAAA;AACjB,IAAO,MAAA,CAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,SAAS,MAAO,CAAA,qBAAA;AAAA,KACjB,CAAA,CAAA;AACD,IAAM,MAAA,KAAA,CAAA;AAAA,GACP,CACD,EAAA,OAAA,CAAA;AACJ,CAAA;AAQO,SAAS,eAAe,eAE7B,EAAA;AACA,EAAM,MAAA,UAAA,GAAa,EAAE,GAAG,eAAgB,EAAA,CAAA;AACxC,EAAA,IAAI,CAAC,UAAA;AACH,IAAO,OAAA;AAAA,MACL,UAAU,MAAM;AACd,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAEF,EAAO,OAAA;AAAA,IACL,QAAA,EAAU,CAAC,MAAoB,KAAA;AAC7B,MAAA,MAAM,IAAI,MAAU,IAAA,EAAA,CAAA;AACpB,MAAA,IAAI,WAAgC,GAAA,IAAA,CAAA;AAEpC,MAAI,IAAA,WAAA,IAAe,WAAW,OAAS,EAAA;AACrC,QAAI,IAAA,YAAA,CAAA;AAEJ,QAAI,IAAA,EAAE,UAAW,CAAA,OAAA,YAAmB,MAAS,CAAA,EAAA;AAC3C,UAAM,MAAA,aAAA,GAAgB,WAAW,OAAQ,CAAA,KAAA;AAAA,YACvC,6BAAA;AAAA,WACF,CAAA;AAEA,UAAM,MAAA,MAAA,GAAS,cAAc,CAAC,CAAA,CAAA;AAC9B,UAAM,MAAA,KAAA,GAAQ,cAAc,CAAC,CAAA,CAAA;AAC7B,UAAM,MAAA,aAAA,GAAgB,cAAc,CAAC,CAAA,CAAA;AAErC,UAAA,YAAA,GAAe,IAAI,MAAA;AAAA,YACjB,MAAU,IAAA,aAAA;AAAA,YACV,KAAS,IAAA,KAAA,CAAA;AAAA,WACX,CAAA;AAAA,SACF;AAAO,UAAA,YAAA,GAAe,UAAW,CAAA,OAAA,CAAA;AAEjC,QACE,WAAA,GAAA,CAAC,CAAC,MAAA,CAAO,CAAC,CAAA,CAAE,MAAM,YAAY,CAAA,KAC7B,UAAW,CAAA,cAAA,IAAkB,MAAO,CAAA,mBAAA,CAAA,CAAA;AAAA,OACzC;AACA,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,SAAA;AACrC,QACE,WAAA,GAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,IAAU,WAAW,SAC/B,IAAA,IAAA,CAAK,WAAa,EAAA,UAAA,CAAW,SAAS,CAAA,CAAA;AAC1C,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,SAAA;AACrC,QACE,WAAA,GAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,IAAU,WAAW,SAC/B,IAAA,IAAA,CAAK,WAAa,EAAA,UAAA,CAAW,SAAS,CAAA,CAAA;AAC1C,MAAA,IAAI,WAAgB,KAAA,IAAA,IAAQ,UAAW,CAAA,GAAA,IAAO,UAAW,CAAA,GAAA;AACvD,QAAA,WAAA,GACG,MAAO,CAAA,CAAC,CAAK,IAAA,UAAA,CAAW,OAAO,MAAO,CAAA,CAAC,CAAK,IAAA,UAAA,CAAW,OACxD,IAAK,CAAA,UAAA,EAAY,UAAW,CAAA,GAAA,EAAK,WAAW,GAAG,CAAA,CAAA;AACnD,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,GAAA;AACrC,QACE,WAAA,GAAA,MAAA,CAAO,CAAC,CAAK,IAAA,UAAA,CAAW,OAAO,IAAK,CAAA,UAAA,EAAY,WAAW,GAAG,CAAA,CAAA;AAClE,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,GAAA;AACrC,QACE,WAAA,GAAA,MAAA,CAAO,CAAC,CAAK,IAAA,UAAA,CAAW,OAAO,IAAK,CAAA,UAAA,EAAY,CAAG,EAAA,UAAA,CAAW,GAAG,CAAA,CAAA;AACrE,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,SAAA;AACrC,QACE,WAAA,GAAA,CAAC,CAAC,MAAO,CAAA,CAAC,EAAE,KAAM,CAAA,kBAAkB,KAAK,MAAO,CAAA,gBAAA,CAAA;AACpD,MAAA,IAAI,WAAgB,KAAA,IAAA,KAAS,UAAW,CAAA,KAAA,IAAS,UAAW,CAAA,OAAA,CAAA;AAC1D,QAAc,WAAA,GAAA,CAAC,CAAC,MAAO,CAAA,CAAC,EAAE,KAAM,CAAA,aAAa,CAAK,IAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAChE,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,QAAA;AACrC,QAAc,WAAA,GAAA,CAAC,CAAC,MAAO,CAAA,CAAC,EAAE,KAAM,CAAA,gBAAgB,CAAK,IAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AACtE,MAAA,IAAI,WAAgB,KAAA,IAAA,KAAS,UAAW,CAAA,KAAA,IAAS,UAAW,CAAA,MAAA,CAAA;AAC1D,QAAc,WAAA,GAAA,CAAC,CAAC,MAAO,CAAA,CAAC,EAAE,KAAM,CAAA,UAAU,CAAK,IAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAC7D,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,KAAA;AACrC,QAAA,WAAA,GACE,CAAC,CAAC,MAAO,CAAA,CAAC,CAAE,CAAA,KAAA;AAAA;AAAA,UAEV,mcAAA;AAAA,SACF,IAAK,KAAK,OAAO,CAAA,CAAA;AACrB,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,OAAA;AACrC,QAAA,WAAA,GACE,MAAM,UAAW,CAAA,OAAA,IAAW,IAAK,CAAA,SAAA,EAAW,WAAW,OAAO,CAAA,CAAA;AAClE,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,UAAA;AACrC,QACG,WAAA,GAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,IAAU,WAAW,UAAW,CAAA,CAAC,KAC1C,MAAO,CAAA,CAAC,EAAE,MAAU,IAAA,UAAA,CAAW,WAAW,CAAC,CAAA,IAC7C,KAAK,YAAc,EAAA,GAAG,WAAW,UAAU,CAAA,CAAA;AAC/C,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,UAAA;AACrC,QACE,WAAA,GAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,KAAW,WAAW,UAChC,IAAA,IAAA,CAAK,YAAc,EAAA,UAAA,CAAW,UAAU,CAAA,CAAA;AAC5C,MAAI,IAAA,WAAA,KAAgB,IAAQ,IAAA,UAAA,CAAW,SAAW,EAAA;AAChD,QAAA,MAAM,QAAQ,MAAO,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,MAAA,CAAA;AACnC,QAAA,OACE,SAAS,UAAW,CAAA,SAAA,IACpB,IAAK,CAAA,WAAA,EAAa,WAAW,SAAS,CAAA,CAAA;AAAA,OAE1C;AACA,MAAI,IAAA,WAAA,KAAgB,IAAQ,IAAA,UAAA,CAAW,SAAW,EAAA;AAChD,QAAA,MAAM,QAAQ,MAAO,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,MAAA,CAAA;AACnC,QAAA,OACE,SAAS,UAAW,CAAA,SAAA,IACpB,IAAK,CAAA,WAAA,EAAa,WAAW,SAAS,CAAA,CAAA;AAAA,OAE1C;AACA,MAAI,IAAA,WAAA,KAAgB,IAAQ,IAAA,UAAA,CAAW,WAAa,EAAA;AAClD,QAAA,MAAM,QAAQ,MAAO,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,MAAA,CAAA;AACnC,QAAA,OACG,KAAS,IAAA,UAAA,CAAW,WAAY,CAAA,CAAC,KAChC,KAAS,IAAA,UAAA,CAAW,WAAY,CAAA,CAAC,CACnC,IAAA,IAAA,CAAK,aAAe,EAAA,GAAG,WAAW,WAAW,CAAA,CAAA;AAAA,OAEjD;AACA,MAAI,IAAA,WAAA,KAAgB,QAAQ,UAAW,CAAA,QAAA;AACrC,QAAA,WAAA,GACG,MAAM,OAAQ,CAAA,MAAM,KAAK,MAAO,CAAA,MAAA,GAAS,KAC1C,OAAO,MAAA,KAAW,YACjB,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA,IACxB,KAAK,UAAU,CAAA,CAAA;AAEnB,MAAO,OAAA,WAAA,CAAA;AAAA,KACT;AAAA,GACF,CAAA;AACF;;;;;;;;AC1Ta,MAAA,gBAAA,GAAmB,IAAK,MAAM;AAAA,EAAN,WAAA,GAAA;AACnC,IAAAA,eAAA,CAAA,IAAA,EAAA,aAAA,EAAwB,EAAC,CAAA,CAAA;AAEzB,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAAiE,EAAC,CAAA,CAAA;AAyGlE,IAAcA,eAAA,CAAA,IAAA,EAAA,aAAA,EAAA,CAAC,UAAkB,SAAsB,KAAA;AACrD,MAAO,OAAA,CAAC,CAAC,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAG,EAAA,MAAA,EAAQ,SAAS,SAAS,CAAA,CAAA;AAAA,KAClE,CAAA,CAAA;AAUA,IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,CACd,QACA,EAAA,YAAA,EACA,UAAiC,EAAE,gBAAA,EAAkB,MAClD,KAAA;AACH,MAAM,MAAA,SAAA,GAAY,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAC5C,MAAA,IAAI,SAAc,KAAA,KAAA,CAAA;AAAW,QAAA,IAAA,CAAK,aAAa,QAAQ,CAAA,CAAA;AAEvD,MAAI,IAAA,CAAC,KAAK,YAAa,CAAA,QAAQ,GAAG,MAAO,CAAA,QAAA,CAAS,aAAa,IAAI,CAAA;AACjE,QAAA,IAAA,CAAK,gBAAgB,QAAU,EAAA;AAAA,UAC7B,MAAQ,EAAA;AAAA,YACN,GAAI,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAU,EAAC;AAAA,YAC5C,YAAa,CAAA,IAAA;AAAA,WACf;AAAA,SACD,CAAA,CAAA;AAEH,MAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,aAAa,IAAI,CAAA,CAAA;AAEpE,MAAA,IAAA,CACG,SAAW,EAAA,mBAAA,IAAuB,CAAC,OAAA,CAAQ,qBAC5C,aACA,EAAA;AAEA,QAAA,MAAM,EAAE,KAAA,EAAO,GAAG,UAAA,EAAe,GAAA,YAAA,CAAA;AACjC,QAAK,IAAA,CAAA,WAAA,CAAY,UAAU,UAAY,EAAA;AAAA,UACrC,iBAAmB,EAAA,KAAA;AAAA,UACnB,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,SAC3B,CAAA,CAAA;AACD,QAAA,OAAA;AAAA,OACF;AAEA,MAAK,IAAA,CAAA,gBAAA;AAAA,QACH,QAAA;AAAA,QACA,YAAa,CAAA,IAAA;AAAA,QACb,YAAA;AAAA,QACA,OAAQ,CAAA,gBAAA;AAAA,OACV,CAAA;AAAA,KACF,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAA,cAAA,EAAe,CACb,QACA,EAAA,KAAA,GAA8B,EAAE,mBAAA,EAAqB,OAClD,KAAA;AACH,MAAM,KAAA,CAAA,uBAAA,IAA2B,IAAK,CAAA,sBAAA,CAAuB,QAAQ,CAAA,CAAA;AAErE,MAAA,IAAI,IAAK,CAAA,WAAA,CAAY,QAAS,CAAA,QAAQ,CAAG,EAAA;AACvC,QAAK,IAAA,CAAA,eAAA;AAAA,UACH,QAAA;AAAA,UACA;AAAA,YACE,qBAAqB,KAAM,CAAA,mBAAA;AAAA,WAC7B;AAAA,UACA,IAAA;AAAA,SACF,CAAA;AACA,QAAA,IAAI,KAAM,CAAA,aAAA;AACR,UAAO,MAAA,CAAA,OAAA,CAAQ,MAAM,aAAa,CAAA,CAAE,QAAQ,CAAC,CAAC,OAAS,EAAA,UAAU,CAAM,KAAA;AACrE,YAAA,IAAI,UAAsB,YAAA,MAAA;AACxB,cAAK,IAAA,CAAA,WAAA;AAAA,gBACH,QAAA;AAAA,gBACA,EAAE,IAAA,EAAM,OAAS,EAAA,GAAG,UAAW,EAAA;AAAA,gBAC/B,EAAE,mBAAqB,EAAA,KAAA,CAAM,mBAAoB,EAAA;AAAA,eACnD,CAAA;AAAA,WACH,CAAA,CAAA;AACH,QAAA,OAAA;AAAA,OACF;AACA,MAAK,IAAA,CAAA,WAAA,CAAY,KAAK,QAAQ,CAAA,CAAA;AAC9B,MAAA,IAAA,CAAK,gBAAgB,QAAU,EAAA;AAAA,QAC7B,qBAAqB,KAAM,CAAA,mBAAA;AAAA,QAC3B,QAAQ,EAAC;AAAA,QACT,SAAW,EAAA,KAAA;AAAA,QACX,OAAS,EAAA,KAAA;AAAA,QACT,IAAM,EAAA,QAAA;AAAA,QACN,gBAAkB,EAAA,IAAA;AAAA,QAClB,yBAAyB,KAAM,CAAA,uBAAA;AAAA,OAChC,CAAA,CAAA;AAGD,MAAO,MAAA,CAAA,OAAA,CAAQ,KAAM,CAAA,aAAA,IAAiB,EAAE,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,IAAM,EAAA,KAAK,CAAM,KAAA;AACnE,QAAK,IAAA,CAAA,WAAA;AAAA,UACH,QAAA;AAAA,UACA,EAAE,MAAM,KAAM,EAAA;AAAA,UACd;AAAA,YACE,iBAAmB,EAAA,KAAA;AAAA,YACnB,qBAAqB,KAAM,CAAA,mBAAA;AAAA,WAC7B;AAAA,SACF,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAMA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,CACd,QAAA,EACA,SACA,EAAA,QAAA,EACA,OACG,KAAA;AACH,MAAA,IAAI,CAAC,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,SAAS,CAAA;AACzC,QAAA,IAAA,CAAK,cAAc,QAAU,EAAA,EAAE,MAAM,SAAW,EAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA;AAEjE,QAAK,IAAA,CAAA,WAAA;AAAA,UACH,QAAA;AAAA,UACA;AAAA,YACE,IAAM,EAAA,SAAA;AAAA,YACN,KAAO,EAAA,QAAA;AAAA,YACP,KAAO,EAAA,IAAA;AAAA,WACT;AAAA,UACA,OAAA;AAAA,SACF,CAAA;AAEF,MAAI,IAAA,IAAA,CAAK,YAAa,CAAA,QAAQ,CAAE,CAAA,OAAA;AAC9B,QAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AAEA,IAAmBA,eAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CAAC,QAAkB,EAAA,SAAA,GAAY,IAAS,KAAA;AACzD,MAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,EAAU,EAAE,SAAA,IAAa,IAAI,CAAA,CAAA;AAAA,KACpD,CAAA,CAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAkBA,eAAA,CAAA,IAAA,EAAA,iBAAA,EAAA,CAAC,UAAkB,SAAsB,KAAA;AACzD,MAAI,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC5B,QAAA,IAAA,CAAK,gBAAgB,QAAU,EAAA;AAAA,UAC7B,MAAA,EAAQ,KAAK,YAAa,CAAA,QAAQ,EAAE,MAAO,CAAA,MAAA,CAAO,CAAC,OAAY,KAAA;AAC7D,YAAA,OAAO,OAAY,KAAA,SAAA,CAAA;AAAA,WACpB,CAAA;AAAA,SACF,CAAA,CAAA;AACH,MAAA,UAAA,CAAW,WAAY,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA,CAAA;AAAA,KAChE,CAAA,CAAA;AAMA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EAAiB,CAAC,QAAqB,KAAA;AACrC,MAAA,IAAA,CAAK,aAAa,QAAQ,CAAA,EAAG,MAAQ,EAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AACxD,QAAA,OAAO,WAAW,WAAY,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,OAAO,CAAC,CAAA,CAAA;AAAA,OACpE,CAAA,CAAA;AACD,MAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAK,WAAY,CAAA,MAAA,CAAO,CAAC,OAAY,KAAA;AACtD,QAAA,OAAO,OAAY,KAAA,QAAA,CAAA;AAAA,OACpB,CAAA,CAAA;AACD,MAAA,UAAA,CAAW,WAAY,CAAA,IAAA,CAAK,YAAa,CAAA,QAAQ,CAAC,CAAA,CAAA;AAClD,MAAO,OAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAMA;AAAA;AAAA;AAAA;AAAA,IAAcA,eAAA,CAAA,IAAA,EAAA,aAAA,EAAA,CACZ,QACA,EAAA,KAAA,EACA,OACG,KAAA;AACH,MAAA,MAAM,gBAAgB,IAAK,CAAA,aAAA,CAAc,QAAU,EAAA,KAAA,CAAM,IAAI,CACzD,EAAA,KAAA,CAAA;AAEJ,MAAI,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC5B,QAAA,IAAA,CAAK,gBAAgB,QAAU,EAAA,EAAE,OAAS,EAAA,KAAA,IAAS,IAAI,CAAA,CAAA;AAAA;AACpD,QAAA,IAAA,CAAK,aAAa,QAAQ,CAAA,CAAA;AAE/B,MAAI,IAAA,aAAA,KAAkB,UAAa,OAAS,EAAA,mBAAA;AAAqB,QAAA,OAAA;AAEjE,MAAM,MAAA,SAAA,GACJ,MAAM,KAAU,KAAA,KAAA,CAAA,IAChB,MAAM,KAAU,KAAA,aAAA,IAChB,SAAS,iBAAsB,KAAA,KAAA,CAAA;AAEjC,MAAA,IAAI,CAAC,IAAA,CAAK,WAAY,CAAA,QAAA,EAAU,MAAM,IAAI,CAAA;AACxC,QAAK,IAAA,CAAA,aAAA,CAAc,UAAU,KAAO,EAAA;AAAA,UAClC,kBAAkB,OAAS,EAAA,gBAAA;AAAA,SAC5B,CAAA,CAAA;AACH,MAAK,IAAA,CAAA,gBAAA;AAAA,QACH,QAAA;AAAA,QACA,KAAM,CAAA,IAAA;AAAA,QACN;AAAA,UACE,GAAG,KAAA;AAAA,UACH,WACE,SAAa,IAAA,IAAA,CAAK,cAAc,QAAU,EAAA,KAAA,CAAM,IAAI,CAAG,EAAA,SAAA;AAAA,SAC3D;AAAA,QACA,OAAS,EAAA,gBAAA;AAAA,OACX,CAAA;AACA,MAAI,IAAA,SAAA;AAAW,QAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA,CAAA;AAAA,KAC/C,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAuBA,eAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,CACrB,QACA,EAAA,MAAA,EACA,OACG,KAAA;AACH,MAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AAC1B,QAAA,OAAO,IAAK,CAAA,WAAA,CAAY,QAAU,EAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AAAA,OACnD,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AA0BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAA,cAAA,EAAe,OAIb,QACG,KAAA;AACH,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAExC,MAAA,IAAI,CAAC,KAAA;AAAO,QAAA,OAAO,EAAE,MAAQ,EAAA,EAAE,IAAM,EAAA,oBAAA,GAAuB,UAAW,EAAA,CAAA;AAEvE,MAAA,MAAM,MAAS,GAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA;AAC3C,QAAO,OAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAAA,OAC5C,CAAA,CAAA;AAED,MAAA,MAAM,gBAAqC,GAAA,EAAE,MAAQ,EAAA,EAAG,EAAA,CAAA;AACxD,MAAA,MAAM,gBAAmE,GAAA;AAAA,QACvE,cAAc,EAAC;AAAA,QACf,QAAQ,EAAC;AAAA,OACX,CAAA;AACA,MAAA,IAAI,aAAgB,GAAA,KAAA,CAAA;AACpB,MAAA,IAAI,YAAe,GAAA,KAAA,CAAA;AACnB,MAAA,MAAM,kBAA0D,EAAC,CAAA;AAGjE,MAAA,KAAA,MAAW,KAAS,IAAA,MAAA,CAAO,MAAO,CAAA,CAAC,OAAY,KAAA;AAC7C,QAAA,OAAO,OAAY,KAAA,KAAA,CAAA,CAAA;AAAA,OACpB,CAAG,EAAA;AAEF,QAAA,MAAM,gBAAmB,GAAA,MAAM,aAAc,CAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAC5D,QAAgB,eAAA,CAAA,KAAA,CAAM,IAAI,CAAI,GAAA,gBAAA,CAAA;AAE9B,QAAI,IAAA,yBAAA,CAA0B,gBAAgB,CAAG,EAAA;AAC/C,UAAA,gBAAA,CAAiB,YAAa,CAAA,KAAA,CAAM,UAAc,IAAA,KAAA,CAAM,IAAI,CAC1D,GAAA,KAAA,CAAM,iBACF,GAAA,MAAM,KAAM,CAAA,iBAAA,CAAkB,KAAM,CAAA,KAAK,IACzC,KAAM,CAAA,KAAA,CAAA;AACZ,UAAA,gBAAA,CAAiB,MAAO,CAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAM,CAAA,KAAA,CAAA;AAAA,SACvC,MAAA;AACL,UAAA,IAAA,CAAK,YAAY,QAAU,EAAA;AAAA,YACzB,MAAM,KAAM,CAAA,IAAA;AAAA,YACZ,KAAO,EAAA,gBAAA;AAAA,WACR,CAAA,CAAA;AACD,UAAA,IAAI,CAAC,aAAe,EAAA;AAElB,YAAI,IAAA,MAAM,YAAa,CAAA,QAAA,EAAU,KAAK,CAAA;AAAG,cAAgB,aAAA,GAAA,IAAA,CAAA;AAAA,WAC3D;AACA,UAAe,YAAA,GAAA,IAAA,CAAA;AACf,UAAiB,gBAAA,CAAA,MAAA,CAAO,KAAM,CAAA,IAAI,CAAI,GAAA,gBAAA,CAAA;AAAA,SACxC;AAAA,OACF;AAEA,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,IAAI,CAAC,aAAe,EAAA;AAClB,UAAO,MAAA,CAAA;AAAA,YACL,SAAS,MAAO,CAAA,oCAAA;AAAA,YAChB,IAAM,EAAA,QAAA;AAAA,WACP,CAAA,CAAA;AACD,UAAQ,OAAA,CAAA,KAAA,CAAM,wCAAqC,eAAe,CAAA,CAAA;AAAA,SACpE;AACA,QAAK,IAAA,CAAA,eAAA;AAAA,UACH,QAAA;AAAA,UACA;AAAA,YACE,OAAS,EAAA,KAAA;AAAA,YACT,gBAAkB,EAAA,gBAAA;AAAA,WACpB;AAAA,UACA,IAAA;AAAA,SACF,CAAA;AACA,QAAO,OAAA,gBAAA,CAAA;AAAA,OACT;AACA,MAAK,IAAA,CAAA,eAAA;AAAA,QACH,QAAA;AAAA,QACA;AAAA,UACE,OAAS,EAAA,IAAA;AAAA,UACT,gBAAkB,EAAA,gBAAA;AAAA,SACpB;AAAA,QACA,IAAA;AAAA,OACF,CAAA;AACA,MAAO,OAAA,gBAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAAA,GAAA;AAAA,EAtaA,uBAAuB,QAAkB,EAAA;AACvC,IAAA,MAAM,eAAe,cAAe,CAAA,OAAA,CAAQ,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAC,CAAA,CAAA;AAEvE,IAAA,IAAI,YAAc,EAAA;AAChB,MAAI,IAAA;AACF,QAAM,MAAA,WAAA,GAAc,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAI3C,QAAK,IAAA,CAAA,WAAA,CAAY,KAAK,QAAQ,CAAA,CAAA;AAC9B,QAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,EAAU,WAAY,CAAA,SAAA,EAAW,IAAI,CAAA,CAAA;AAC1D,QAAO,MAAA,CAAA,OAAA,CAAQ,YAAY,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAM,EAAA,KAAK,CAAM,KAAA;AAC5D,UAAW,UAAA,CAAA,WAAA;AAAA,YACT,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,IAAI,CAAA;AAAA,YACjC;AAAA,cACE,GAAG,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,IAAI,CAAA;AAAA,cACpC,GAAG,KAAA;AAAA,aACL;AAAA,YACA,EAAE,QAAQ,IAAK,EAAA;AAAA,WACjB,CAAA;AAAA,SACD,CAAA,CAAA;AAED,QAAO,OAAA,IAAA,CAAA;AAAA,eACA,CAAG,EAAA;AACV,OACF;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,4BAA4B,QAAkB,EAAA;AAC5C,IAAM,MAAA,EAAE,WAAW,OAAS,EAAA,gBAAA,EAAkB,GAAG,SAAU,EAAA,GACzD,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAC5B,IAAA,MAAM,gBAAgB,SAAU,CAAA,uBAAA,CAAA;AAEhC,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,MAAM,MAAS,GAAA,SAAA,CAAU,MACtB,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA;AAChB,QAAM,MAAA;AAAA,UACJ,kBAAA;AAAA,UACA,SAAAC,EAAAA,UAAAA;AAAA,UACA,KAAA;AAAA,UACA,qBAAA;AAAA,UACA,GAAG,KAAA;AAAA,SACD,GAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AACxC,QAAO,OAAA,KAAA,CAAA;AAAA,OACR,CACA,CAAA,MAAA;AAAA,QACC,CAAC,CAAG,EAAA,CAAA,MAAO,EAAE,GAAG,GAAG,CAAC,CAAA,CAAE,IAAI,GAAG,CAAE,EAAA,CAAA;AAAA,QAC/B,EAAC;AAAA,OACH,CAAA;AAEF,MAAe,cAAA,CAAA,OAAA;AAAA,QACb,IAAA,CAAK,aAAa,QAAQ,CAAA;AAAA,QAC1B,KAAK,SAAU,CAAA;AAAA,UACb,SAAA;AAAA,UACA,MAAA;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EAEA,aAAA,CAAc,UAAkB,SAAmB,EAAA;AACjD,IAAA,OAAO,UAAW,CAAA,aAAA;AAAA,MAChB,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,SAAS,CAAA;AAAA,KACxC,CAAA;AAAA,GACF;AAAA,EAEA,aAAa,QAAkB,EAAA;AAC7B,IAAA,OAAO,UAAW,CAAA,aAAA,CAA0B,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAC,CAAA,CAAA;AAAA,GACzE;AAAA,EAEA,gBACE,CAAA,QAAA,EACA,SACA,EAAA,KAAA,EACA,MACA,EAAA;AACA,IAAW,UAAA,CAAA,WAAA;AAAA,MACT,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,SAAS,CAAA;AAAA,MACtC;AAAA,QACE,GAAG,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,SAAS,CAAA;AAAA,QACzC,GAAG,KAAA;AAAA,OACL;AAAA,MACA,EAAE,MAAO,EAAA;AAAA,KACX,CAAA;AACA,IAAA,IAAA,CAAK,4BAA4B,QAAQ,CAAA,CAAA;AAAA,GAC3C;AAAA,EAEA,eACE,CAAA,QAAA,EACA,QACA,EAAA,YAAA,GAAe,KACf,EAAA;AACA,IAAA,UAAA,CAAW,WAAY,CAAA,IAAA,CAAK,YAAa,CAAA,QAAQ,GAAG,QAAQ,CAAA,CAAA;AAC5D,IAAA,IAAI,CAAC,YAAA;AAAc,MAAA,IAAA,CAAK,4BAA4B,QAAQ,CAAA,CAAA;AAAA,GAC9D;AAAA,EAEA,gBAAgB,QAAkB,EAAA;AAChC,IAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,CAAI,GAAA,IAAA,CAAA;AAAA,GAC5B;AAAA,EAMA,aAAA,CAAc,UAAkB,SAAmB,EAAA;AACjD,IAAO,OAAA,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAA;AAAA,GAC5C;AAAA,EAEA,aAAa,QAAkB,EAAA;AAC7B,IAAA,OAAO,cAAc,QAAQ,CAAA,CAAA,CAAA;AAAA,GAC/B;AAsTF,CAAG,GAAA;AAYa,SAAA,eAAA,CACd,QACA,EAAA,QAAA,EACA,UACA,EAAA;AACA,EAAO,OAAA,gBAAA;AAAA,IACL,gBAAA,CAAiB,aAAa,QAAQ,CAAA;AAAA,IACtC,QAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF,CAAA;AAuCO,SAAS,gBAMd,CAAA,QAAA,EACA,SACA,EAAA,cAAA,EAMA,UACU,EAAA;AACV,EAAA,MAAM,OAAU,GAAA,gBAAA,CAAiB,aAAc,CAAA,QAAA,EAAU,SAAS,CAAA,CAAA;AAClE,EAAO,OAAA,gBAAA,CAAiB,OAAS,EAAA,cAAA,EAAgB,UAAU,CAAA,CAAA;AAC7D;;ACthBO,MAAM,UAA+B,GAAA;AAAA,EAC1C,eAAiB,EAAA;AAAA,IACf,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,QAAA;AAAA,IACf,UAAY,EAAA,SAAA;AAAA,IAEZ,YAAc,EAAA;AAAA,MACZ,UAAY,EAAA,QAAA;AAAA,KACd;AAAA,GACF;AAAA,EAEA,QAAU,EAAA;AAAA,IACR,eAAiB,EAAA,OAAA;AAAA,IACjB,eAAiB,EAAA,KAAA;AAAA,IACjB,eAAiB,EAAA,QAAA;AAAA,GACnB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,WAAa,EAAA,OAAA;AAAA,IACb,WAAa,EAAA,KAAA;AAAA,IACb,WAAa,EAAA,QAAA;AAAA,GACf;AACF,CAAA;;AC+EA,MAAM,OAAO,CAGX;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EACA,mBAAA;AACF,CAAyC,KAAA;AACvC,EAAA,MAAM,aAAa,KAAM,CAAA,OAAA;AAAA,IACvB,MAAM,IAAA,IAAQ,CAAiB,cAAA,EAAA,QAAA,EAAU,CAAA,CAAA;AAAA;AAAA,IAEzC,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,eAAe,KAAM,CAAA,WAAA;AAAA,IACzB,OAAO,EAAO,KAAA;AACZ,MAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AAClB,MAAM,MAAA,aAAA,GAAiB,MAAM,gBAAiB,CAAA,YAAA;AAAA,QAC5C,UAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,aAAiB,IAAA,UAAA;AAAY,QAAA,UAAA,CAAW,aAAa,CAAA,CAAA;AAAA,KAC3D;AAAA,IACA,CAAC,YAAY,UAAU,CAAA;AAAA,GACzB,CAAA;AACA,EAAA,MAAM,eAAe,KAAM,CAAA,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,gBAAA;AAAA,MACA,IAAM,EAAA,UAAA;AAAA,MACN,QAAU,EAAA,YAAY,gBAAiB,CAAA,YAAA,CAAa,UAAU,CAAA;AAAA,KAChE,CAAA;AAAA,IACA,CAAC,YAAY,gBAAgB,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,UAAA,CAAW,MAAM;AACf,IAAY,SAAA,IAAA,CAAA;AACZ,IAAA,IAAI,mBAAwB,KAAA,KAAA;AAC1B,MAAA,gBAAA,CAAiB,eAAe,UAAU,CAAA,CAAA;AAAA,GAC7C,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA;AAE9D,EAAA,QAAA,CAAS,MAAM;AACb,IAAA,gBAAA,CAAiB,aAAa,UAAY,EAAA;AAAA,MACxC,mBAAA,EAAqB,uBAAuB,aAAkB,KAAA,KAAA,CAAA;AAAA,MAC9D,aAAA;AAAA,MACA,uBAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,GACtB,CAAA,CAAA;AACD,EAAA,IAAI,CAAC,aAAA;AAAe,IAAO,OAAA,IAAA,CAAA;AAE3B,EAAA,uBACG,GAAA,CAAA,WAAA,CAAY,QAAZ,EAAA,EAAqB,OAAO,YAC3B,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,MAAA;AAAA,MACF,GAAG,WAAW,gCAAgC,CAAA;AAAA,MAC/C,SAAA,EAAW,mBAAmB,SAAS,CAAA,CAAA;AAAA,MACvC,EAAA,EAAI,kBAAkB,UAAU,CAAA,CAAA;AAAA,MAC/B,GAAI,EAAE,IAAA,EAAM,UAAW,EAAA;AAAA,MACxB,QAAU,EAAA,YAAA;AAAA,MAET,QAAA;AAAA,KAAA;AAAA,GAEL,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEA,YAAA,CAAa,kCAAkC,UAAU,CAAA;;ACtGlD,SAAS,SACd,eACA,EAAA;AACA,EAAM,MAAA,WAAA,GAAc,KAAM,CAAA,UAAA,CAAW,WAAW,CAAA,CAAA;AAChD,EAAM,MAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,IAAY,WAAY,CAAA,IAAA,CAAA;AAEzD,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,OAAA,CAAQ,MAAM,eAAe,CAAA,CAAA;AAC7B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,2EAAA,EAA8E,gBAAgB,IAAI,CAAA,CAAA;AAAA,KACpG,CAAA;AAAA,GACF;AAEA,EAAA,KAAA,CAAM,QAAQ,MAAM;AAClB,IAAiB,gBAAA,CAAA,aAAA;AAAA,MACf,QAAA;AAAA,MACA;AAAA,QACE,GAAG,eAAA;AAAA,QACH,GAAI,gBAAgB,YAAiB,KAAA,KAAA,CAAA,GACjC,EAAE,KAAO,EAAA,eAAA,CAAgB,cACzB,GAAA,IAAA;AAAA,OACN;AAAA,MACA;AAAA,QACE,gBAAkB,EAAA,IAAA;AAAA,QAClB,gBAAA,EAAkB,CAAC,eAAgB,CAAA,qBAAA;AAAA,OACrC;AAAA,KACF,CAAA;AAAA,GAEF,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,QAAA,CAAS,MAAM;AACb,IAAA,IACE,gBAAgB,YAAiB,KAAA,KAAA,CAAA,KAC/B,CAAC,gBAAA,CAAiB,aAAa,QAAQ,CAAA,EAAG,mBAC1C,IAAA,CAAC,gBAAgB,qBACjB,IAAA,gBAAA,CAAiB,cAAc,QAAU,EAAA,eAAA,CAAgB,IAAI,CAC3D,KAAA,KAAA,CAAA,CAAA;AAEJ,MAAiB,gBAAA,CAAA,aAAA;AAAA,QACf,QAAA;AAAA,QACA,eAAgB,CAAA,IAAA;AAAA,QAChB,eAAgB,CAAA,YAAA;AAAA,OAClB,CAAA;AAAA,GACH,CAAA,CAAA;AAED,EAAA,UAAA,CAAW,MAAM;AACf,IAAA,IAAI,eAAgB,CAAA,eAAA;AAClB,MAAiB,gBAAA,CAAA,eAAA,CAAgB,QAAU,EAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AAAA,GAClE,CAAA,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAO,EAAA,UAAA;AAAA,IACP,KAAA;AAAA,IACA,SAAA;AAAA,GACE,GAAA,gBAAA;AAAA,IAKF,QAAA;AAAA,IACA,eAAgB,CAAA,IAAA;AAAA,IAChB,CAAC,KAAU,KAAA;AACT,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,GAAG,CAAM,KAAA;AACR,MACE,IAAA,CAAA,KAAM,4BACN,IAAA,eAAA,CAAgB,YAAiB,KAAA,KAAA,CAAA;AAEjC,QAAO,OAAA,IAAA,CAAA;AACT,MAAO,OAAA,YAAA,CAAa,GAAG,CAAC,CAAA,CAAA;AAAA,KAC1B;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,KAAM,CAAA,QAAA;AAAA,IACxC,eAAgB,CAAA,YAAA;AAAA,GAClB,CAAA;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AAAA,GAC1B,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAA,MAAM,WAAW,KAAM,CAAA,WAAA;AAAA,IACrB,CAAC,EAAsC,KAAA;AACrC,MAAA,MAAM,gBAAmB,GAAA,EAAA,CAAA;AACzB,MAAI,IAAA,QAAA,CAAA;AACJ,MACE,IAAA,OAAO,gBAAqB,KAAA,QAAA,IAC5B,gBACA,IAAA,gBAAA,CAAiB,WAAW,KAC5B,CAAA,IAAA,gBAAA,CAAiB,MAAO,CAAA,KAAA,KAAU,KAClC,CAAA,EAAA;AACA,QAAA,QAAA,GAAW,iBAAiB,MAAO,CAAA,KAAA,CAAA;AAAA,OACrC;AAAO,QAAW,QAAA,GAAA,EAAA,CAAA;AAElB,MAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACtB,MAAA,gBAAA,CAAiB,aAAc,CAAA,QAAA,EAAU,eAAgB,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAAA,KACzE;AAAA,IACA,CAAC,eAAgB,CAAA,IAAA,EAAM,QAAQ,CAAA;AAAA,GACjC,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,mBAAmB,KAAM,CAAA,WAAA;AAAA,MACvB,CAAC;AAAA,QACC,kBAAA;AAAA,QACA,eAAA;AAAA,OACsE,KAAA;AACtE,QAAA,gBAAA,CAAiB,YAAY,QAAU,EAAA;AAAA,UACrC,MAAM,eAAgB,CAAA,IAAA;AAAA,UACtB,kBAAA;AAAA,UACA,eAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH;AAAA,MACA,CAAC,QAAU,EAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,KACjC;AAAA,IACA,KAAA,EAAO,cAAe,eAAgB,CAAA,YAAA;AAAA,GACxC,CAAA;AACF;;ACjMgB,SAAA,wBAAA,CACd,MACA,QACQ,EAAA;AACR,EAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAI,QAAY,CAAA;AAAA,IACvC,IAAA;AAAA,IACA,QAAA;AAAA,IACA,qBAAuB,EAAA,IAAA;AAAA,IACvB,eAAiB,EAAA,KAAA;AAAA,GAClB,CAAA,CAAA;AACD,EAAM,MAAA,EAAE,gBAAiB,EAAA,GAAI,cAAe,EAAA,CAAA;AAC5C,EAAI,IAAA,KAAA;AAAO,IAAO,OAAA,OAAA,CAAA;AAClB,EAAA,IAAI,CAAC,gBAAoB,IAAA,SAAA;AAAW,IAAO,OAAA,SAAA,CAAA;AAC3C,EAAO,OAAA,EAAA,CAAA;AACT;;ACPO,SAAS,aAA2B,CAAA,EAAE,QAAU,EAAA,IAAA,EAAwB,EAAA;AAC7E,EAAA,MAAM,EAAE,IAAA,EAAM,YAAa,EAAA,GAAI,cAAe,EAAA,CAAA;AAE9C,EAAI,IAAA,CAAC,QAAY,IAAA,CAAC,YAAc,EAAA;AAC9B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,mFAAmF,IAAI,CAAA,CAAA;AAAA,KACzF,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,OAAU,GAAA,gBAAA;AAAA,IAChB,QAAY,IAAA,YAAA;AAAA,IACZ,IAAA;AAAA,IACA,CAAC,KAAU,KAAA;AACT,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,GAAG,CAAM,KAAA;AACR,MAAI,IAAA,CAAA,KAAM,4BAAgC,IAAA,CAAA,EAAG,KAAU,KAAA,KAAA,CAAA;AACrD,QAAO,OAAA,IAAA,CAAA;AACT,MAAA,OAAO,YAAa,CAAA,CAAA,EAAG,KAAO,EAAA,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,KACxC;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,KAAA,CAAA;AACT;;AC1BO,SAAS,kBAAsB,CAAA;AAAA,EACpC,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AACF,CAMG,EAAA;AACD,EAAA,MAAM,EAAE,IAAM,EAAA,eAAA,EAAoB,GAAA,KAAA,CAAM,WAAW,WAAW,CAAA,CAAA;AAE9D,EAAA,MAAM,4BAA4B,KAAM,CAAA,OAAA;AAAA,IACtC,MACE,eAAA,KAAoB,KAChB,CAAA,GAAA,yBAAA,CAA6B,eAAe,CAC5C,GAAA,KAAA,CAAA;AAAA,IACN,CAAC,eAAe,CAAA;AAAA,GAClB,CAAA;AACA,EAAA,MAAM,4BAA4B,KAAM,CAAA,OAAA;AAAA,IACtC,MACE,gBAAiB,CAAA,aAAA,CAAc,QAAY,IAAA,eAAA,EAAiB,IAAI,CAC5D,EAAA,kBAAA;AAAA,IACN,CAAC,eAAiB,EAAA,QAAA,EAAU,IAAI,CAAA;AAAA,GAClC,CAAA;AACA,EAAA,MAAM,2BAAmD,KAAM,CAAA,WAAA;AAAA,IAC7D,CAAC,cAAc,iBAAsB,KAAA;AACnC,MAAI,IAAA,MAAA,GACF,4BAA4B,YAAc,EAAA,iBAAiB,KAC3D,kBAAqB,GAAA,YAAA,EAAc,iBAAiB,CACpD,IAAA,IAAA,CAAA;AACF,MAAA,IAAI,OAAO,MAAW,KAAA,QAAA;AAAU,QAAO,OAAA,MAAA,CAAA;AAEvC,MAAA,IAAI,gBAAkB,EAAA;AACpB,QAAS,MAAA,GAAA,gBAAA,CAAiB,cAAc,iBAAiB,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,IAAI,OAAO,MAAW,KAAA,QAAA;AAAU,QAAO,OAAA,MAAA,CAAA;AAEvC,MAAI,IAAA,yBAAA;AACF,QAAO,OAAA,yBAAA,CAA0B,cAAc,iBAAiB,CAAA,CAAA;AAElE,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,yBAAA;AAAA,MACA,gBAAA;AAAA,MACA,yBAAA;AAAA,MACA,kBAAA;AAAA,KACF;AAAA,GACF,CAAA;AACA,EAAM,MAAA,qBAAA,GAAwB,KAAM,CAAA,OAAA,CAAQ,MAAM;AAChD,IAAO,OAAA;AAAA,MACL,GAAG,eAAA;AAAA,MACH,GAAI,eAAoB,KAAA,KAAA,CAAA,GACpB,eAAgB,CAAA,eAAe,IAC/B,EAAC;AAAA,KACP,CAAA;AAAA,GACC,EAAA,CAAC,eAAiB,EAAA,eAAe,CAAC,CAAA,CAAA;AAErC,EAAO,OAAA;AAAA,IACL,wBAAA;AAAA,IACA,qBAAA;AAAA,GACF,CAAA;AACF;;AC7DO,MAAM,eAAkB,GAAA,CAAC,EAAE,IAAA,EAA6B,KAAA;AAC7D,EAAA,MAAM,cAAc,cAAe,EAAA,CAAA;AACnC,EAAA,MAAM,QAAQ,gBAAiB,CAAA,WAAA,CAAY,IAAM,EAAA,IAAA,EAAM,CAAC,KAAU,KAAA;AAChE,IAAA,OAAO,KAAO,EAAA,KAAA,CAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAA,OAAO,KACL,mBAAA,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,QAAA;AAAA,MACH,IAAK,EAAA,OAAA;AAAA,MACL,EAAI,EAAA;AAAA,QACF,KAAO,EAAA,QAAA;AAAA,OACT;AAAA,MACA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,KAAM,EAAA;AAAA,KAAA;AAAA,GAEzC,GAAA,IAAA,CAAA;AACN;;ACPO,MAAM,eAAe,CAAC;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,EAAK,GAAA,OAAA;AAAA,EACL,IAAA;AAAA,EACA,GAAG,KAAA;AACL,CAAgB,KAAA;AACd,EAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,cAAe,EAAA,CAAA;AAC1C,EAAA,MAAM,UAAa,GAAA,gBAAA;AAAA,IACjB,QAAA;AAAA,IACA,IAAA;AAAA,IACA,CAAC,MAAW,KAAA,MAAA,EAAQ,eAAiB,EAAA,QAAA;AAAA,GACvC,CAAA;AAEA,EAAA,IAAI,SAAS,UAAY,EAAA;AACvB,IACE,uBAAA,IAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAgC,6BAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACzD,GAAG,KAAA;AAAA,QACJ,EAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,sBAA2B,KAAA,GAAA,IAAO,KACxC,oBAAA,GAAA,CAAC,gBAAa,UAAwB,EAAA,CAAA;AAAA,UAEvC,QAAA;AAAA,+BACA,MACE,EAAA,EAAA,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YACA,OAAO,sBAA2B,KAAA,GAAA,IAAO,KACxC,oBAAA,GAAA,CAAC,gBAAa,UAAwB,EAAA,CAAA;AAAA,WAE1C,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,mBAAgB,IAAY,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAC/B,CAAA;AAAA,GAEJ;AAMA,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,cAAA,EAAe,IAAG,MAC9B,EAAA,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACD,GAAA,CAAC,mBAAgB,IAAY,EAAA,CAAA;AAAA,KAC/B,EAAA,CAAA,CAAA;AAAA,GAEJ;AAEA,EACE,uBAAA,IAAA,CAAC,OAAI,SAAW,EAAA,CAAA,aAAA,EAAgB,aAAa,EAAE,CAAA,CAAA,EAAK,GAAG,KAAA,EAAO,EAC5D,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAG,MAAO,EAAA,SAAA,EAAU,qBACtB,EAAA,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,sBAA2B,KAAA,GAAA,IAAO,KACxC,oBAAA,GAAA,CAAC,gBAAa,UAAwB,EAAA,CAAA;AAAA,MAEvC,KAAA;AAAA,MACA,CAAC,cAAkB,IAAA,KAAA,wBAAU,MAAK,EAAA,EAAA,SAAA,EAAU,aAAY,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,MAC1D,OAAO,sBAA2B,KAAA,GAAA,IAAO,KACxC,oBAAA,GAAA,CAAC,gBAAa,UAAwB,EAAA,CAAA;AAAA,KAE1C,EAAA,CAAA;AAAA,IACC,QAAA;AAAA,oBACD,GAAA,CAAC,mBAAgB,IAAY,EAAA,CAAA;AAAA,GAC/B,EAAA,CAAA,CAAA;AAEJ;;ACxEA,MAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AACF,CAAgB,KAAA;AACd,EAAM,MAAA,EAAE,OAAO,iBAAmB,EAAA,QAAA,EAAU,WAAW,GAAG,eAAA,KACxD,QAAS,CAAA;AAAA,IACP,IAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAc,EAAA,EAAA;AAAA,IACd,eAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,eAAA,EAAiB,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,GACnC,CAAA,CAAA;AACH,EAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,IAC3B,CAAC,EAAqD,KAAA;AACpD,MAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AAAA,KACb;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiB,yBAAyB,IAAI,CAAA,CAAA;AACpD,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,CAAS,MAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACnC,cAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAU,EAAA,cAAA;AAAA,UACV,OAAO,eAAgB,CAAA,KAAA;AAAA,UACvB,SAAW,EAAA,cAAA;AAAA,SAAA;AAAA,OACb;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;ACrDO,MAAM,WAAW,KAAM,CAAA,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,IAAA;AAAA;AAAA;AAAA;AAAA,IAIA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAM,MAAA;AAAA,MACJ,KAAO,EAAA,UAAA;AAAA,MACP,QAAA;AAAA,MACA,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG,UAAA;AAAA,QACD,QAA2B,CAAA;AAAA,MAC7B,qBAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,YACI,EAAA,CAAA,YAAA,KAA6B,IAAQ,IAAA,YAAA,KAAiB,IAAS,KAAA,KAAA;AAAA,MACnE,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAoB,EAAA,wBAAA;AAAA,MACpB,eAAiB,EAAA,qBAAA;AAAA,KAClB,CAAA,CAAA;AAED,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,CAAY,SAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACtC,cAAA;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAACC,UAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,GAAG,UAAA;AAAA,YACJ,MAAA;AAAA,YACA,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,YACnC,QAAA,EAAU,CAAC,EAAO,KAAA;AAChB,cAAS,QAAA,CAAA,EAAA,CAAG,OAAO,OAAO,CAAA,CAAA;AAC1B,cAAI,IAAA,aAAA;AAAe,gBAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,aACrC;AAAA,YACA,OAAA,EAAS,UAAe,KAAA,IAAA,IAAQ,UAAe,KAAA,IAAA;AAAA,YAC/C,GAAA;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,QAAA,CAAS,WAAc,GAAA,UAAA;;AChFhB,MAAM,iBAAiB,KAAM,CAAA,UAAA;AAAA,EAIlC,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,IAAA;AAAA;AAAA;AAAA;AAAA,IAIA,qBAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,IAAM,EAAA,eAAA,EAAoB,GAAA,KAAA,CAAM,WAAW,WAAW,CAAA,CAAA;AAC9D,IAAA,MAAM,WAAW,aAAiB,IAAA,eAAA,CAAA;AAElC,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AAEH,IAAM,MAAA;AAAA,MACJ,KAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG,eAAA;AAAA,QACD,QAAiB,CAAA;AAAA,MACnB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA,EACE,gBACC,KACD,IAAA,gBAAA,CAAiB,cAAc,QAAU,EAAA,IAAI,GAAG,KAChD,IAAA,EAAA;AAAA,MACF,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAoB,EAAA,wBAAA;AAAA,MACpB,eAAiB,EAAA,qBAAA;AAAA,KAClB,CAAA,CAAA;AAED,IAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,MAC3B,CAAC,EAA4C,KAAA;AAC3C,QAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,QAAA,aAAA,GAAgB,EAAE,CAAA,CAAA;AAAA,OACpB;AAAA,MACA,CAAC,UAAU,aAAa,CAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiB,yBAAyB,IAAI,CAAA,CAAA;AAEpD,IACE,uBAAA,IAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAI,KAAM,CAAA,WAAA;AAAA,UACR,OACG;AAAA,YACC,OAAS,EAAA,MAAA;AAAA,YACT,aAAe,EAAA,QAAA;AAAA,YACf,UAAY,EAAA,OAAA;AAAA,WACd,CAAA;AAAA,UACF,EAAC;AAAA,SACH;AAAA,QACA,SAAA,EAAW,CAAkB,eAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QAC5C,cAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACC,GAAG,KAAA;AAAA,cACH,GAAG,eAAA;AAAA,cACJ,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,cACnC,GAAA;AAAA,cACA,QAAU,EAAA,cAAA;AAAA,cACV,KAAA,EAAO,gBAAgB,KAAS,IAAA,EAAA;AAAA,cAChC,SAAA,EAAW,CAAyB,sBAAA,EAAA,cAAA,IAAkB,EAAE,CAAA,CAAA;AAAA,aAAA;AAAA,WAC1D;AAAA,0BACA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAK,EAAA,OAAA;AAAA,cACL,SAAU,EAAA,8BAAA;AAAA,cACV,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA;AAAA,aAAA;AAAA,WAC5B;AAAA,SAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,cAAA,CAAe,WAAc,GAAA,gBAAA;;ACxGtB,MAAM,YAAY,KAAM,CAAA,IAAA;AAAA,EAC7B,KAAM,CAAA,UAAA;AAAA,IACJ,CACE;AAAA,MACE,cAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA;AAAA;AAAA;AAAA,MAIA,qBAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA,MACV,YAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,GAAG,KAAA;AAAA,OAEL,GACG,KAAA;AACH,MAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,cAAe,EAAA,CAAA;AAC1C,MAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,QACjB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,iBAAiB,SAAW,EAAA;AAC1B,UAAA,OAAO,cAAc,IAAQ,IAAA,SAAA,KAAc,KACvC,CAAA,GAAA,IAAA,GACA,KAAK,UAAU,CAAA,CAAA;AAAA,SACrB;AAAA,QACA,eAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA;AAAA,OACD,CAAA,CAAA;AACH,MAAM,MAAA;AAAA,QACJ,KAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA;AAAA,QACA,iBAAA;AAAA,QACA,SAAA;AAAA,QACA,GAAG,eAAA;AAAA,UACD,QAAsB,CAAA;AAAA,QACxB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,eAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAoB,EAAA,wBAAA;AAAA,QACpB,eAAiB,EAAA,qBAAA;AAAA,OAClB,CAAA,CAAA;AAED,MACE,uBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA,EAAW,CAAS,MAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,UACnC,cAAA;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAACC,OAAA;AAAA,YAAA;AAAA,cACE,GAAG,KAAA;AAAA,cACH,GAAG,eAAA;AAAA,cACJ,IAAK,EAAA,MAAA;AAAA,cACL,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,cACnC,GAAA;AAAA,cACA,EAAA,EAAI,mBAAoB,CAAA,CAAC,KAAK,CAAA;AAAA,cAC9B,UAAU,KAAM,CAAA,WAAA;AAAA,gBACd,CAAC,EAA4C,KAAA;AAC3C,kBAAA,QAAA,CAAS,EAAG,CAAA,MAAA,EAAQ,KAAQ,GAAA,CAAC,KAAK,IAAI,CAAA,CAAA;AAAA,iBACxC;AAAA,gBACA,CAAC,QAAQ,CAAA;AAAA,eACX;AAAA,aAAA;AAAA,WACF;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,EAAA;AAEA,SAAA,CAAU,WAAc,GAAA,WAAA;;AClFjB,MAAM,QAAQ,KAAM,CAAA,IAAA;AAAA,EACzB,KAAM,CAAA,UAAA;AAAA,IACJ,CACE;AAAA,MACE,cAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA,MACV,IAAA;AAAA;AAAA;AAAA;AAAA,MAIA,qBAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA,MACV,YAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAG,KAAA;AAAA,OAEL,GACG,KAAA;AACH,MAAA,MAAM,EAAE,IAAM,EAAA,eAAA,EAAoB,GAAA,KAAA,CAAM,WAAW,WAAW,CAAA,CAAA;AAC9D,MAAA,MAAM,WAAW,aAAiB,IAAA,eAAA,CAAA;AAElC,MAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,QACjB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,eAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA;AAAA,OACD,CAAA,CAAA;AAEH,MAAM,MAAA;AAAA,QACJ,KAAA;AAAA,QACA,iBAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,GAAG,eAAA;AAAA,UACD,QAAiB,CAAA;AAAA,QACnB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EACE,gBACC,KACD,IAAA,gBAAA,CAAiB,cAAc,QAAU,EAAA,IAAI,GAAG,KAChD,IAAA,EAAA;AAAA,QACF,eAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAoB,EAAA,wBAAA;AAAA,QACpB,eAAiB,EAAA,qBAAA;AAAA,OAClB,CAAA,CAAA;AAED,MAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,QAC3B,CAAC,EAAqD,KAAA;AACpD,UAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,UAAI,IAAA,OAAO,OAAO,QAAU,EAAA;AAE1B,YAAgB,aAAA,GAAA;AAAA,cACd,MAAQ,EAAA,GAAA;AAAA,aACyC,CAAA,CAAA;AAAA,WAC9C,MAAA;AAEL,YAAA,aAAA,GAAgB,EAAE,CAAA,CAAA;AAAA,WACpB;AAAA,SACF;AAAA,QACA,CAAC,QAAU,EAAA,aAAA,EAAe,GAAG,CAAA;AAAA,OAC/B,CAAA;AAEA,MAAM,MAAA,cAAA,GAAiB,yBAAyB,IAAI,CAAA,CAAA;AAEpD,MACE,uBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA,EAAW,CAAS,MAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,UACnC,cAAA;AAAA,UAEC,mBAAS,MACR,mBAAA,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACE,GAAG,KAAA;AAAA,cACH,GAAG,eAAA;AAAA,cACJ,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,cACnC,OAAS,EAAA,KAAA,CAAA;AAAA,cACT,GAAA;AAAA,cACA,QAAU,EAAA,cAAA;AAAA,cACV,KAAA,EAAO,gBAAgB,KAAS,IAAA,EAAA;AAAA,cAChC,SAAW,EAAA,cAAA;AAAA,aAAA;AAAA,WAGb,mBAAA,GAAA;AAAA,YAACD,OAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACC,GAAG,KAAA;AAAA,cACH,GAAG,eAAA;AAAA,cACJ,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,cACnC,GAAA;AAAA,cACA,QAAU,EAAA,cAAA;AAAA,cACV,KAAA,EAAO,gBAAgB,KAAS,IAAA,EAAA;AAAA,cAChC,SAAW,EAAA,cAAA;AAAA,aAAA;AAAA,WACb;AAAA,SAAA;AAAA,OAEJ,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,EAAA;AAEA,KAAA,CAAM,WAAc,GAAA,OAAA;;ACpGb,MAAM,eAAe,KAAM,CAAA,IAAA;AAAA,EAChC,KAAM,CAAA,UAAA;AAAA,IACJ,CACE;AAAA,MACE,cAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA;AAAA;AAAA;AAAA,MAIV,qBAAA;AAAA,MACA,QAAU,EAAA,aAAA;AAAA,MACV,YAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAG,KAAA;AAAA,OAEL,GACG,KAAA;AACH,MAAA,MAAM,EAAE,IAAM,EAAA,eAAA,EAAoB,GAAA,KAAA,CAAM,WAAW,WAAW,CAAA,CAAA;AAC9D,MAAA,MAAM,WAAW,aAAiB,IAAA,eAAA,CAAA;AAElC,MAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,QACjB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,eAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA;AAAA,OACD,CAAA,CAAA;AAEH,MAAA,MAAM,EAAE,QAAA,EAAU,KAAO,EAAA,UAAA,KAAe,QAAyB,CAAA;AAAA,QAC/D,QAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EACE,gBACC,KACD,IAAA,gBAAA,CAAiB,cAAc,QAAU,EAAA,IAAI,GAAG,KAChD,IAAA,EAAA;AAAA,QACF,eAAA;AAAA,QACA,mBAAmB,KAAM,CAAA,WAAA;AAAA,UACvB,CAAC,OACC,KAAA,QAAA,CAAS,SAAS,OAAQ,CAAA,QAAA,CAAS,WAAW,EAAE,CAAA;AAAA,UAClD,EAAC;AAAA,SACH;AAAA,QACA,uBAAuB,KAAM,CAAA,WAAA;AAAA,UAC3B,CAAC,OACC,KAAA,QAAA,CAAS,SAAS,OAAQ,CAAA,QAAA,CAAS,WAAW,EAAE,CAAA;AAAA,UAClD,EAAC;AAAA,SACH;AAAA,QACA,kBAAoB,EAAA,wBAAA;AAAA,QACpB,eAAiB,EAAA,qBAAA;AAAA,OAClB,CAAA,CAAA;AAED,MAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,QAC3B,CAAC,EAAgC,KAAA;AAC/B,UAAA,IAAI,GAAG,KAAO,EAAA;AACZ,YAAA,aAAA,GAAgB,EAAE,GAAG,EAAI,EAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AACpC,YAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,YAAA,gBAAA,CAAiB,YAAY,QAAU,EAAA;AAAA,cACrC,IAAA;AAAA,cACA,OAAO,aAAc,CAAA,MAAA,CAAO,aAAa,EAAE,GAAA,EAAK,IAAI,CAAA;AAAA,aACrD,CAAA,CAAA;AAAA,WACI,MAAA;AACL,YAAA,QAAA,CAAS,GAAG,KAAK,CAAA,CAAA;AACjB,YAAA,aAAA,GAAgB,EAAE,CAAA,CAAA;AAClB,YAAA,gBAAA,CAAiB,YAAY,QAAU,EAAA,EAAE,IAAM,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAAA,WAC9D;AAAA,SACF;AAAA,QACA,CAAC,QAAA,EAAU,IAAM,EAAA,QAAA,EAAU,aAAa,CAAA;AAAA,OAC1C,CAAA;AACA,MAAM,MAAA,cAAA,GAAiB,yBAAyB,IAAI,CAAA,CAAA;AAEpD,MACE,uBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,KAAA;AAAA,UACA,IAAI,KAAM,CAAA,OAAA;AAAA,YACR,OACG;AAAA,cACC,OAAS,EAAA,MAAA;AAAA,cACT,aAAe,EAAA,QAAA;AAAA,cACf,UAAY,EAAA,OAAA;AAAA,aACd,CAAA;AAAA,YACF,EAAC;AAAA,WACH;AAAA,UACA,SAAA,EAAW,CAAS,MAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,UACnC,cAAA;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAACE,WAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACC,GAAG,KAAA;AAAA,cACJ,IAAA;AAAA,cACA,KAAO,EAAA,UAAA;AAAA,cACP,QAAU,EAAA,cAAA;AAAA,cACV,SAAW,EAAA,cAAA;AAAA,aAAA;AAAA,WACb;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,EAAA;AAEA,YAAA,CAAa,WAAc,GAAA,cAAA;;AC1HpB,MAAM,QAAQ,KAAM,CAAA,UAAA;AAAA,EACzB,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,OAAA;AAAA,IACA,KAAO,EAAA,UAAA;AAAA;AAAA;AAAA;AAAA,IAIP,qBAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAM,MAAA,EAAE,OAAO,iBAAmB,EAAA,QAAA,EAAU,WAAW,GAAG,UAAA,KACxD,QAAiB,CAAA;AAAA,MACf,QAAA;AAAA,MACA,IAAA;AAAA,MACA,cAAc,YAAiB,IAAA,UAAA;AAAA,MAC/B,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAoB,EAAA,wBAAA;AAAA,MACpB,eAAiB,EAAA,qBAAA;AAAA,KAClB,CAAA,CAAA;AACH,IAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,MAC3B,CAAC,EAA4C,KAAA;AAC3C,QAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,SAClB;AAAA,OACF;AAAA,MACA,CAAC,UAAU,aAAa,CAAA;AAAA,KAC1B,CAAA;AACA,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,CAAS,MAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACnC,cAAA;AAAA,QACA,EAAG,EAAA,IAAA;AAAA,QAEF,QAAS,EAAA,OAAA,EAAA,GAAA,CAAI,CAAC,MAAA,qBACZ,GAAA,CAAA,IAAA,EAAA,EACC,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAM,KAAO,EAAA,MAAA,CAAO,KAAO,EAAA,SAAA,EAAU,aACpC,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACC,OAAA;AAAA,YAAA;AAAA,cACE,GAAG,KAAA;AAAA,cACH,GAAG,UAAA;AAAA,cACJ,IAAK,EAAA,OAAA;AAAA,cACL,SAAU,EAAA,cAAA;AAAA,cACV,cAAY,MAAO,CAAA,KAAA;AAAA,cACnB,GAAA;AAAA,cACA,OAAO,MAAO,CAAA,KAAA;AAAA,cACd,OAAA,EAAS,UAAU,MAAO,CAAA,KAAA;AAAA,cAC1B,QAAU,EAAA,cAAA;AAAA,aAAA;AAAA,WACZ;AAAA,8BACC,GAAI,EAAA,EAAA,EAAA,EAAG,QAAO,SAAU,EAAA,YAAA,EACtB,iBAAO,KACV,EAAA,CAAA;AAAA,SACF,EAAA,CAAA,EAAA,EAhBO,MAAO,CAAA,KAiBhB,CACD,CAAA;AAAA,OAAA;AAAA,KACH,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,KAAA,CAAM,WAAc,GAAA,OAAA;;AC/Eb,MAAM,SAAS,KAAM,CAAA,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,qBAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AAEH,IAAA,MAAM,EAAE,iBAAmB,EAAA,QAAA,EAAU,WAAW,GAAG,UAAA,KACjD,QAAiB,CAAA;AAAA,MACf,qBAAA;AAAA,MACA,YAAc,EAAA,YAAA,IAAiB,KAAoB,IAAA,OAAA,CAAQ,CAAC,CAAG,EAAA,KAAA;AAAA,MAC/D,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAoB,EAAA,wBAAA;AAAA,MACpB,eAAiB,EAAA,qBAAA;AAAA,KAClB,CAAA,CAAA;AAEH,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,CAAU,OAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACpC,cAAA;AAAA,QAEA,QAAA,kBAAA,IAAA;AAAA,UAACC,QAAA;AAAA,UAAA;AAAA,YACE,GAAG,WAAW,cAAc,CAAA;AAAA,YAC5B,GAAG,KAAA;AAAA,YACH,GAAG,UAAA;AAAA,YACJ,UAAU,KAAM,CAAA,WAAA;AAAA,cACd,CAAC,EAA6C,KAAA;AAC5C,gBAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,gBAAA,IAAI,aAAe,EAAA;AACjB,kBAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,iBAClB;AAAA,eACF;AAAA,cACA,CAAC,UAAU,aAAa,CAAA;AAAA,aAC1B;AAAA,YACA,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,YACnC,GAAA;AAAA,YACA,KAAA,EAAO,WAAW,KAAS,IAAA,EAAA;AAAA,YAE1B,QAAA,EAAA;AAAA,cAAA,OAAA,EAAS,GAAI,CAAA,CAAC,MACb,qBAAA,GAAA,CAAC,QAA0B,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EACtC,QAAO,EAAA,MAAA,CAAA,KAAA,EAAA,EADG,MAAO,CAAA,KAEpB,CACD,CAAA;AAAA,cACA,KAAM,CAAA,QAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACT;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,MAAA,CAAO,WAAc,GAAA,QAAA;;ACvFd,MAAM,YAAY,KAAM,CAAA,UAAA;AAAA,EAC7B,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA,IACV,IAAA;AAAA,IACA,OAAU,GAAA,KAAA;AAAA,IACV,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAA,MAAM,EAAE,QAAU,EAAA,iBAAA,EAAmB,WAAW,GAAG,UAAA,KACjD,QAAiB,CAAA;AAAA,MACf,qBAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eACG,YAAgB,IAAA,KAAA,MAAW,QAAQ,SAAU,CAAA,YAAY,IACtD,IACA,GAAA,KAAA;AAAA,MACN,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAoB,EAAA,wBAAA;AAAA,MACpB,eAAiB,EAAA,qBAAA;AAAA,KAClB,CAAA,CAAA;AAEH,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,CAAa,UAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACvC,cAAA;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,GAAG,UAAA;AAAA,YACJ,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,YACnC,QAAA,EAAU,CAAC,EAAO,KAAA;AAChB,cAAA,QAAA,CAAS,EAAG,CAAA,MAAA,CAAO,OAAY,KAAA,OAAA,GAAU,OAAO,KAAK,CAAA,CAAA;AACrD,cAAA,IAAI,aAAe,EAAA;AACjB,gBAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,eAClB;AAAA,aACF;AAAA,YACA,OAAW,EAAA,CAAA,UAAA,CAAW,KAAS,IAAA,KAAA,MAAW,IAAU,KAAA,OAAA;AAAA,YACpD,GAAA;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,SAAA,CAAU,WAAc,GAAA,WAAA;;AC1EjB,MAAM,WAAW,KAAM,CAAA,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,aAAA;AAAA;AAAA;AAAA;AAAA,IAIV,qBAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,KAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,EAAE,wBAAA,EAA0B,qBAAsB,EAAA,GACtD,kBAAmB,CAAA;AAAA,MACjB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAA,MAAM,EAAE,iBAAmB,EAAA,QAAA,EAAU,WAAW,GAAG,UAAA,KACjD,QAAiB,CAAA;AAAA,MACf,qBAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAc,YAAiB,IAAA,KAAA;AAAA,MAC/B,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAiB,EAAA,qBAAA;AAAA,MACjB,kBAAoB,EAAA,wBAAA;AAAA,KACrB,CAAA,CAAA;AACH,IAAA,MAAM,iBAAiB,KAAM,CAAA,WAAA;AAAA,MAC3B,CAAC,EAA+C,KAAA;AAC9C,QAAA,QAAA,CAAS,EAAE,CAAA,CAAA;AACX,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,SAClB;AAAA,OACF;AAAA,MACA,CAAC,UAAU,aAAa,CAAA;AAAA,KAC1B,CAAA;AACA,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,CAAY,SAAA,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACtC,cAAA;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAACC,UAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,GAAG,UAAA;AAAA,YACJ,YAAA,EAAY,KAAM,CAAA,YAAY,CAAK,IAAA,KAAA;AAAA,YACnC,GAAA;AAAA,YACA,KAAA,EAAO,WAAW,KAAS,IAAA,EAAA;AAAA,YAC3B,QAAU,EAAA,cAAA;AAAA,WAAA;AAAA,SACZ;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,QAAA,CAAS,WAAc,GAAA,UAAA;;;;;;;;;;;;;;;;;;;;;ACjFvB,IAAA,QAAA,CAAA;AAYO,MAAe,uBAGZ,YAMP,CAAA;AAAA,EAaD,WAAA,CACkB,IACN,EAAA,KAAA,EACV,UACA,EAAA;AACA,IAAM,KAAA,EAAA,CAAA;AAJU,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AACN,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AARZ,IAAAC,cAAA,CAAA,IAAA,EAAA,QAAA,EAAW,IAAI,eAEZ,CAAA;AAAA,MACD,QAAU,EAAA,KAAA;AAAA,KACX,CAAA,CAAA,CAAA;AAcD,IAAAT,eAAA,CAAA,IAAA,EAAO,aAAuB,EAAC,CAAA,CAAA;AAE/B,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAAW,MAAMU,cAAA,CAAA,IAAA,EAAK,QAAS,CAAA,CAAA,QAAA,CAAS,UAAU,CAAA,CAAA,CAAA;AAClD,IAAAV,eAAA,CAAA,IAAA,EAAA,aAAA,EAAc,CAAC,QAAsB,KAAA;AACnC,MAAKU,cAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,IAAK,CAAA,UAAA,EAAY,QAAQ,CAAA,CAAA;AAAA,KACzC,CAAA,CAAA;AAEA,IAAAV,eAAA,CAAA,IAAA,EAAU,cAAkC,EAAC,CAAA,CAAA;AAC7C,IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,CAAC,QAAkC,KAAA;AACjD,MAAA,IAAA,CAAK,UAAa,GAAA,QAAA,CAAA;AAClB,MAAA,IAAA,CAAK,KAAK,aAAe,EAAA,EAAE,GAAG,IAAA,CAAK,YAAY,CAAA,CAAA;AAAA,KACjD,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,iBAAgB,MAAM;AAC9B,MAAA,OAAO,eAAqC,CAAA;AAAA,QAC1C,eAAA,EAAiB,MAAM,IAAK,CAAA,UAAA;AAAA,QAC5B,kBAAkB,CAAC,QAAA,KAAa,IAAK,CAAA,EAAA,CAAG,eAAe,QAAQ,CAAA;AAAA,OAChE,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAMA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EAAiB,MAAM;AACrB,MAAI,IAAAU,cAAA,CAAA,IAAA,EAAK,QAAS,CAAA,CAAA,QAAA,CAAS,UAAU,CAAA;AAAG,QAAO,OAAA,IAAA,CAAA;AAE/C,MACE,uBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,CAAoB,iBAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAC3C,QAAC,kBAAA,GAAA,CAAA,IAAA,CAAK,SAAL,EAAA,EAAe,CAClB,EAAA,CAAA,CAAA;AAAA,KAEJ,CAAA,CAAA;AArCE,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,KACpB;AAAA,GACF;AAmCF,CAAA;AAnDE,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;ACtBK,MAAe,gCAGZ,cAAsC,CAAA;AAAA,EAC9C,WACkB,CAAA,IAAA,EACN,KACA,EAAA,MAAA,GAKL,EACL,EAAA;AACA,IAAM,KAAA,CAAA,IAAA,EAAM,KAAO,EAAA,MAAA,EAAQ,UAAU,CAAA,CAAA;AATrB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AACN,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAkBZ,IAAAV,eAAA,CAAA,IAAA,EAAA,iBAAA,EAAkB,CAAC,QAAwB,KAAA;AACzC,MAAA,IAAA,CAAK,OAAO,YAAe,GAAA,QAAA,CAAA;AAAA,KAC7B,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,uBAAA,EAAwB,CAAC,WAAgD,KAAA;AACvE,MAAA,IAAA,CAAK,OAAO,kBAAqB,GAAA,WAAA,CAAA;AACjC,MAAA,IAAA,CAAK,IAAK,CAAA,gBAAA,EAAkB,IAAK,CAAA,MAAA,CAAO,kBAAkB,CAAA,CAAA;AAAA,KAC5D,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,CAAC,QAA+B,KAAA;AACnD,MAAA,IAAA,CAAK,OAAO,eAAkB,GAAA,QAAA,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAK,aAAe,EAAA,EAAE,GAAG,IAAK,CAAA,MAAA,CAAO,iBAAiB,CAAA,CAAA;AAAA,KAC7D,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAAW,CAAC,QAAwB,KAAA;AAClC,MAAA,gBAAA,CAAiB,cAAc,IAAK,CAAA,SAAA,CAAU,EAAI,EAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AAAA,KACvE,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,yBAAwB,MAAM;AACtC,MAAA,OAAO,eAA4D,CAAA;AAAA,QACjE,eAAiB,EAAA,MAAM,MAAM,IAAA,CAAK,MAAO,CAAA,kBAAA;AAAA,QACzC,gBAAA,EAAkB,CAAC,qBAA0B,KAAA;AAC3C,UAAO,OAAA,IAAA,CAAK,EAAG,CAAA,gBAAA,EAAkB,qBAAqB,CAAA,CAAA;AAAA,SACxD;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,sBAAqB,MAAM;AACnC,MAAA,OAAO,eAAgB,CAAA;AAAA,QACrB,eAAA,EAAiB,MAAM,IAAA,CAAK,MAAO,CAAA,eAAA;AAAA,QACnC,gBAAA,EAAkB,CAAC,kBAAuB,KAAA;AACxC,UAAO,OAAA,IAAA,CAAK,EAAG,CAAA,aAAA,EAAe,kBAAkB,CAAA,CAAA;AAAA,SAClD;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GA5CA;AAAA,EAEA,IAAI,YAAe,GAAA;AACjB,IAAA,OAAO,KAAK,MAAO,CAAA,YAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,iBAAiB,aAAc,CAAA,IAAA,CAAK,UAAU,EAAI,EAAA,IAAA,CAAK,IAAI,CAAE,CAAA,KAAA,CAAA;AAAA,GACtE;AAqCF;;;;;;;;AC/DO,MAAM,0BAA0B,uBAGrC,CAAA;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAIL,IAAOA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAA;AAEP,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AACtC,MAAM,MAAA,kBAAA,GAAqB,KAAK,qBAAsB,EAAA,CAAA;AACtD,MAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AAEjC,MACE,uBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA,EAAc,KAAK,MAAO,CAAA,YAAA;AAAA,UAC1B,kBAAA;AAAA,UACA,MAAM,IAAK,CAAA,IAAA;AAAA,UACX,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,eAAiB,EAAA,KAAA;AAAA,UACjB,cAAc,EAAA,IAAA;AAAA,SAAA;AAAA,OAChB,CAAA;AAAA,KAEJ,CAAA,CAAA;AAAA,GAAA;AACF;;;;;;;;ACtBO,MAAM,uBAAuB,uBAGlC,CAAA;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAIL,IAAOA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,CAAA;AAEP,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AACtC,MAAM,MAAA,kBAAA,GAAqB,KAAK,qBAAsB,EAAA,CAAA;AACtD,MAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AAEjC,MACE,uBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA,EAAc,KAAK,MAAO,CAAA,YAAA;AAAA,UAC1B,kBAAA;AAAA,UACA,MAAM,IAAK,CAAA,IAAA;AAAA,UACX,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,eAAiB,EAAA,KAAA;AAAA,SAAA;AAAA,OACnB,CAAA;AAAA,KAEJ,CAAA,CAAA;AAAA,GAAA;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA,IAAA,QAAA,EAAA,WAAA,CAAA;AAOO,MAAM,wBAAwB,uBAGnC,CAAA;AAAA,EAGA,WAAA,CACY,KACA,EAAA,KAAA,EACV,MAOA,EAAA;AACA,IAAM,KAAA,CAAA,KAAA,EAAO,OAAO,MAAM,CAAA,CAAA;AAVhB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AAJZ,IAAOA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,QAAA,CAAA,CAAA;AAkBP,IAAAS,cAAA,CAAA,IAAA,EAAA,QAAA,EAAsB,EAAC,CAAA,CAAA;AAEvB,IAAAT,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,CAAC,SAAuB,KAAA;AAClC,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,CAAC,GAAGU,cAAA,CAAA,IAAA,EAAK,WAAU,SAAS,CAAA,CAAA,CAAA;AAC5C,MAAK,IAAA,CAAA,IAAA,CAAK,eAAiB,EAAAA,cAAA,CAAA,IAAA,EAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,KAC1C,CAAA,CAAA;AAEA,IAAAV,eAAA,CAAA,IAAA,EAAA,YAAA,EAAa,CAAC,UAA0B,KAAA;AACtC,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,CAAC,GAAG,UAAU,CAAA,CAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,IAAA,CAAK,eAAiB,EAAAU,cAAA,CAAA,IAAA,EAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,KAC1C,CAAA,CAAA;AAEA,IAAAD,cAAA,CAAA,IAAA,EAAA,WAAA,EAAc,MAAM;AAClB,MAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAASC,qBAAK,QAAQ,CAAA,CAAA,CAAA;AAEpD,MAAA,QAAA,CAAS,MAAM;AACb,QAAO,OAAA,IAAA,CAAK,EAAG,CAAA,eAAA,EAAiB,UAAU,CAAA,CAAA;AAAA,OAC3C,CAAA,CAAA;AAED,MAAO,OAAA,OAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAEA,IAAAV,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AACtC,MAAM,MAAA,kBAAA,GAAqB,KAAK,qBAAsB,EAAA,CAAA;AACtD,MAAM,MAAA,OAAA,GAAUU,qBAAK,WAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AAEjC,MACE,uBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA,EAAc,KAAK,MAAO,CAAA,YAAA;AAAA,UAC1B,kBAAA;AAAA,UACA,MAAM,IAAK,CAAA,IAAA;AAAA,UACX,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,eAAiB,EAAA,KAAA;AAAA,UACjB,OAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAEJ,CAAA,CAAA;AA3CE,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAA,YAAA,CAAA,IAAA,EAAK,UAAW,MAAO,CAAA,OAAA,CAAA,CAAA;AAAA,KACzB;AAAA,GACF;AAyCF,CAAA;AAxCE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAYA,WAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;ACrCK,MAAM,0BAA0B,uBAGrC,CAAA;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAIL,IAAOV,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,CAAA,CAAA;AAEP,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,EAAA,CAAA;AACtC,MAAM,MAAA,kBAAA,GAAqB,KAAK,qBAAsB,EAAA,CAAA;AACtD,MAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AAEjC,MACE,uBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA,EAAc,KAAK,MAAO,CAAA,YAAA;AAAA,UAC1B,MAAM,IAAK,CAAA,IAAA;AAAA,UACX,kBAAA;AAAA,UACA,eAAiB,EAAA,KAAA;AAAA,UACjB,OAAO,IAAK,CAAA,KAAA;AAAA,SAAA;AAAA,OACd,CAAA;AAAA,KAEJ,CAAA,CAAA;AAAA,GAAA;AACF;;;;;;;;ACtBO,MAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,cAAe,CAAA;AAAA,EAKjD,WAAA,CACE,KACQ,EAAA,IAAA,GAQM,OACd,EAAA;AACA,IAAA,KAAA,CAAM,CAAQ,KAAA,EAAA,eAAA,CAAe,KAAO,EAAA,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAVrC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAJV,IAAOA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,CAAA;AAiBP,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAA,IAAI,KAAK,IAAS,KAAA,OAAA;AAAS,QAAA,2BAAQ,GAAI,EAAA,EAAA,EAAA,EAAI,IAAK,CAAA,IAAA,EAAO,eAAK,KAAM,EAAA,CAAA,CAAA;AAElE,MAAA,2BAAQ,GAAI,EAAA,EAAA,EAAA,EAAI,IAAK,CAAA,IAAA,EAAO,eAAK,KAAM,EAAA,CAAA,CAAA;AAAA,KACzC,CAAA,CAAA;AAAA,GANA;AAOF,CAAA,CAAA;AAxBEA,eAAA,CADW,iBACI,OAAQ,EAAA,CAAA,CAAA,CAAA;AADlB,IAAM,cAAN,GAAA,eAAA;;;;;;;;ACAP,IAAI,CAAI,GAAA,CAAA,CAAA;AAED,MAAM,wBAAwB,cAGnC,CAAA;AAAA,EAGA,WAAA,CACY,OACV,UACA,EAAA;AACA,IAAA,KAAA,CAAM,CAAS,MAAA,EAAA,CAAA,EAAG,CAAI,CAAA,EAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAH7B,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AAHZ,IAAOA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,QAAA,CAAA,CAAA;AASP,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,MAAM;AAChB,MAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AAEjC,MAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAc,GAAG,KAAA,EAAQ,eAAK,KAAM,EAAA,CAAA,CAAA;AAAA,KAC9C,CAAA,CAAA;AAAA,GANA;AAOF;;;;;;;;;;;;;;;;;;;;;ACxBA,IAAA,OAAA,EAAA,UAAA,CAAA;AAoBA,IAAI;AACF,EAAK,KAAA,eAAA,EAAkB,CAAA,KAAA,CAAM,MAAM;AAAA,GAAE,CAAA,CAAA;AACvC,CAAA,CAAA,OAAS,CAAG,EAAA;AACV,EAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AACjB,CAAA;AAEA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEL,MAAM,SAAU,CAAA;AAAA,EAAhB,WAAA,GAAA;AACL,IAAS,aAAA,CAAA,IAAA,EAAA,QAAA,EAAA;AAAA,MACP,MAAQ,EAAA,eAAA;AAAA,MACR,QAAU,EAAA,iBAAA;AAAA,MACV,KAAO,EAAA,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,KAAO,EAAA,cAAA;AAAA,MACP,MAAQ,EAAA,eAAA;AAAA,MACR,QAAU,EAAA,iBAAA;AAAA,KACZ,CAAA,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,YAAY,KAAO,EAAA,CAAA,CAAA,CAAA,CAAA;AAIzC,IAAqC,aAAA,CAAA,IAAA,EAAA,OAAA,EAAA,IAAA,CAAA,CAAA;AAErC,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,EAA0C,EAAC,CAAA,CAAA;AAE3C,IAAA,aAAA,CAAA,IAAA,EAAA,KAAA,EAAM,IAAI,MAA6B,KAAA;AACrC,MAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACxB,QAAK,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAE3B,QAAA,KAAA,CAAM,SAAY,GAAA,IAAA,CAAA;AAAA,OACnB,CAAA,CAAA;AACD,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,EAAU,CAAC,EAAmD,KAAA;AAC5D,MAAA,MAAA,CAAO,MAAO,CAAA,YAAA,CAAA,IAAA,EAAK,OAAO,CAAA,CAAA,CAAE,QAAQ,EAAE,CAAA,CAAA;AAAA,KACxC,CAAA,CAAA;AAEA,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,EAAa,CAAC;AAAA,MACZ,WAAA;AAAA,MACA,OAAA;AAAA,KAII,KAAA;AACJ,MAAA,MAAM,QAAQ,eAAgB,EAAA,CAAA;AAE9B,MAAA,IAAI,YAAe,GAAA,KAAA,CAAA;AAEnB,MACE,uBAAA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,eAAA;AAAA,UACT,GAAG,WAAW,qCAAqC,CAAA;AAAA,UAEpD,QAAA,kBAAA,IAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,MAAM,IAAK,CAAA,WAAA;AAAA,cACX,UAAA,EAAY,CAAC,MAAW,KAAA;AACtB,gBAAI,IAAA,wBAAA,CAAyB,MAAM,CAAG,EAAA;AACpC,kBAAM,MAAA,GAAA,GAAM,OAAQ,CAAA,MAAA,CAAO,YAAY,CAAA,CAAA;AACvC,kBAAA,IAAI,GAAK,EAAA;AACP,oBAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AAAA,mBACd;AAAA,iBACF;AAAA,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAC,GAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,mBAAA,EACZ,QAAO,EAAA,MAAA,CAAA,MAAA,CAAO,mBAAK,OAAO,CAAA,CAAA,CAAE,GAAI,CAAA,CAAC,OAAY,KAAA;AAC5C,kBAAA,IAAI,OAAmB,YAAA,uBAAA;AACrB,oBAAe,YAAA,GAAA,IAAA,CAAA;AAEjB,kBAAA,uBAAQ,GAAA,CAAA,OAAA,CAAQ,cAAR,EAAA,EAAA,EAA4B,QAAQ,IAAM,CAAA,CAAA;AAAA,iBACnD,CACH,EAAA,CAAA;AAAA,gBACC,YAAgB,IAAA,CAAC,WAChB,oBAAA,GAAA,CAAC,OAAI,SAAU,EAAA,oBAAA,EACb,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAO,SAAQ,SAAW,EAAA,QAAA,EAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,MAAK,CACrD,EAAA,CAAA;AAAA,eAAA;AAAA,aAAA;AAAA,WAEJ;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAEJ,CAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,EAAO,CACL,UAU+B,KAAA;AAC/B,MAAA,MAAM,EAAE,SAAW,EAAA,GAAG,gBAAiB,EAAA,GAAI,cAAc,EAAC,CAAA;AAE1D,MAAO,OAAA,IAAI,OAA2B,CAAA,CAAC,OAAY,KAAA;AACjD,QAAA,MAAM,IAAI,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AACf,QAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,QAAS,CAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UAC1C,UAAU,MAAM;AACd,YAAkB;AAChB,cAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAA;AACb,cAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,aACd;AAAA,WACF;AAAA,UACA,QACE,kBAAA,GAAA;AAAA,YAAC,CAAA;AAAA,YAAA;AAAA,cACC,aAAa,UAAY,EAAA,WAAA;AAAA,cACzB,OAAA,EAAS,CAAC,MAAW,KAAA;AACnB,gBAAA,IAAI,SAAW,EAAA;AACb,kBAAM,MAAA,aAAA,GAAgB,UAAU,MAAoB,CAAA,CAAA;AACpD,kBAAA,IAAI,CAAC,aAAe,EAAA;AAClB,oBAAO,OAAA,KAAA,CAAA;AAAA,mBACT;AAAA,iBACF;AAEA,gBAAA,OAAA,CAAQ,MAAoB,CAAA,CAAA;AAC5B,gBAAO,OAAA,IAAA,CAAA;AAAA,eACT;AAAA,aAAA;AAAA,WACF;AAAA,UAEF,OAAS,EAAA,6BAAA;AAAA,UACT,mBAAmB,aAAe,EAAA;AAChC,YAAA,OAAO,aAAc,CAAA,aAAA;AAAA,cACnB,uDAAA;AAAA,aACF,CAAA;AAAA,WACF;AAAA,UACA,GAAG,gBAAA;AAAA,SACJ,CAAA,CAAA;AACD,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAAA,OACd,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAAA;AAAA,EAlHA,IAAW,EAAK,GAAA;AACd,IAAA,OAAO,IAAK,CAAA,WAAA,CAAA;AAAA,GACd;AAiHF,CAAA;AA9GE,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAeA,UAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/validations",
3
- "version": "3.0.25",
3
+ "version": "3.0.27",
4
4
  "sideEffects": [
5
5
  "./dist/lang/*.ts"
6
6
  ],
@@ -15,10 +15,10 @@
15
15
  "libWatch": "rollup --watch --config ./rollup.validations.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true"
16
16
  },
17
17
  "dependencies": {
18
- "@apia/components": "^3.0.25",
19
- "@apia/notifications": "^3.0.25",
20
- "@apia/theme": "^3.0.25",
21
- "@apia/util": "^3.0.25"
18
+ "@apia/components": "^3.0.27",
19
+ "@apia/notifications": "^3.0.27",
20
+ "@apia/theme": "^3.0.27",
21
+ "@apia/util": "^3.0.27"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/react": "^18.2.43",
@@ -34,5 +34,5 @@
34
34
  "access": "public",
35
35
  "registry": "https://registry.npmjs.org/"
36
36
  },
37
- "gitHead": "52353d1288412e6965964085efdaa9b042e62e04"
37
+ "gitHead": "7f1516ef83d668518df8932b3dd429b98d81457b"
38
38
  }