easy-forms-core 1.2.7 → 1.2.8
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/easy-form.js +6 -6
- package/dist/easy-form.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1014,6 +1014,11 @@ declare class ValidationEngine {
|
|
|
1014
1014
|
* Obtiene mensaje por defecto para una validación
|
|
1015
1015
|
*/
|
|
1016
1016
|
private getDefaultMessage;
|
|
1017
|
+
/**
|
|
1018
|
+
* Evalúa si un campo debe ser validado basándose en sus dependencias
|
|
1019
|
+
* Un campo no debe validarse si está oculto por una condición
|
|
1020
|
+
*/
|
|
1021
|
+
private shouldValidateField;
|
|
1017
1022
|
/**
|
|
1018
1023
|
* Valida todos los campos de un formulario
|
|
1019
1024
|
*/
|
package/dist/index.js
CHANGED
|
@@ -910,7 +910,7 @@ var z=class{parse(t){if(!t)throw new Error("Schema es requerido");if(!t.fields&&
|
|
|
910
910
|
form {
|
|
911
911
|
position: relative;
|
|
912
912
|
}
|
|
913
|
-
`}function Ie(c,t){switch(c){case"plano":return ve(t);case"tradicional":return Ne(t);case"material":return qe(t);case"rounded-shadow":return
|
|
913
|
+
`}function Ie(c,t){switch(c){case"plano":return ve(t);case"tradicional":return Ne(t);case"material":return qe(t);case"rounded-shadow":return Ve(t);case"lines":return Pe(t);case"shadcn":return Re(t);case"chakra":return De(t);case"mantine":return He(t);case"glass":return $e(t);case"bordered":return Be(t);case"minimal":return Oe(t);case"efc":return je(t);default:return ve(t)}}function ve(c){return`
|
|
914
914
|
.easy-form-label {
|
|
915
915
|
color: var(--easy-form-label-color);
|
|
916
916
|
}
|
|
@@ -1063,7 +1063,7 @@ var z=class{parse(t){if(!t)throw new Error("Schema es requerido");if(!t.fields&&
|
|
|
1063
1063
|
background: transparent;
|
|
1064
1064
|
border: none;
|
|
1065
1065
|
}
|
|
1066
|
-
`}function
|
|
1066
|
+
`}function Ve(c){return`
|
|
1067
1067
|
.easy-form-label {
|
|
1068
1068
|
color: var(--easy-form-label-color);
|
|
1069
1069
|
}
|
|
@@ -1115,7 +1115,7 @@ var z=class{parse(t){if(!t)throw new Error("Schema es requerido");if(!t.fields&&
|
|
|
1115
1115
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
1116
1116
|
background: var(--easy-form-group-background);
|
|
1117
1117
|
}
|
|
1118
|
-
`}function
|
|
1118
|
+
`}function Pe(c){return`
|
|
1119
1119
|
.easy-form-field {
|
|
1120
1120
|
border-bottom: 1px solid var(--easy-form-border);
|
|
1121
1121
|
padding-bottom: 1rem;
|
|
@@ -2173,7 +2173,7 @@ var z=class{parse(t){if(!t)throw new Error("Schema es requerido");if(!t.fields&&
|
|
|
2173
2173
|
background-position: right 1rem center;
|
|
2174
2174
|
padding-right: 2.5rem;
|
|
2175
2175
|
}
|
|
2176
|
-
`}var xe={phone:{pattern:"(999) 999-9999",placeholder:"_"},"phone-us":{pattern:"(999) 999-9999",placeholder:"_"},"phone-international":{pattern:"+99 999 999 9999",placeholder:"_"},date:{pattern:"99/99/9999",placeholder:"_"},"date-us":{pattern:"99/99/9999",placeholder:"_"},"date-eu":{pattern:"99-99-9999",placeholder:"_"},"credit-card":{pattern:"9999 9999 9999 9999",placeholder:"_"},ssn:{pattern:"999-99-9999",placeholder:"_"},"zip-code":{pattern:"99999",placeholder:"_"},currency:{pattern:"$999,999.99",placeholder:"_",transform:c=>{let t=c.replace(/[^\d.]/g,"");return(parseFloat(t)||0).toFixed(2)}},percentage:{pattern:"999%",placeholder:"_",transform:c=>c.replace(/[^\d]/g,"")},time:{pattern:"99:99",placeholder:"_"},datetime:{pattern:"99/99/9999 99:99",placeholder:"_"}};function ue(c){return xe[c]}var D="El valor contiene caracteres o patrones no permitidos",We=[/\b(union|select|insert|update|delete|drop|exec|execute|declare)\s+(all\s+)?(select|from|into|table)/i,/\b(or|and)\s+['"]?\d+['"]?\s*=\s*['"]?\d+/i,/;\s*(drop|delete|truncate|alter)\s+/i,/--\s*$/,/\/\*[\s\S]*\*\//,/'\s*or\s+'1'\s*=\s*'1/i,/"\s*or\s+"1"\s*=\s*"1/i,/\bexec\s*\(/i,/\bxp_\w+/i,/<script\b[\s\S]*?>[\s\S]*?<\/script>/i,/<script\b/i,/javascript\s*:/i,/vbscript\s*:/i,/on\w+\s*=\s*["'][^"']*["']/i,/on\w+\s*=\s*[^\s>]+/i,/<iframe\b/i,/<object\b/i,/<embed\b/i,/\beval\s*\(/i,/document\.(cookie|write|location)/i,/window\.(location|open|eval)/i,/[;&|]\s*(ls|cat|rm|wget|curl|nc|bash|sh|python|perl)\s/i,/\$\s*\([^)]+\)/,/`[^`]+`/,/\|\s*\w+/,/\$\s*where\b/i,/\$\s*gt\b|\$\s*ne\b|\$\s*regex\b/i,/\{\{[^}]*\}\}/,/\$\{[^}]*\}/];function we(c){if(typeof c!="string"||c.length===0||c.trim().length===0)return!1;for(let e of We)if(e.test(c))return!0;return!1}function I(c){return c==null?!0:typeof c=="string"?!we(c):Array.isArray(c)?c.every(t=>I(t)):typeof c=="object"?Object.values(c).every(t=>I(t)):!0}var N=class{constructor(t){this.attempts=0;this.lockedUntil=null;this.unlockCheckInterval=null;this.maxAttempts=Math.max(1,t.maxAttempts),this.blockDurationMs=(t.blockDurationMinutes??5)*60*1e3,this.storageKey=t.storageKey,this.onLocked=t.onLocked,this.onUnlocked=t.onUnlocked,this.storageKey&&typeof sessionStorage<"u"&&this.loadFromStorage()}loadFromStorage(){if(!(!this.storageKey||typeof sessionStorage>"u"))try{let t=sessionStorage.getItem(this.storageKey);if(t){let e=JSON.parse(t);this.attempts=e.attempts??0,this.lockedUntil=e.lockedUntil??null,this.checkExpiration()}}catch{}}saveToStorage(){if(!(!this.storageKey||typeof sessionStorage>"u"))try{let t={attempts:this.attempts,lockedUntil:this.lockedUntil??void 0};sessionStorage.setItem(this.storageKey,JSON.stringify(t))}catch{}}checkExpiration(){return this.lockedUntil===null?!1:Date.now()>=this.lockedUntil?(this.reset(),this.onUnlocked?.(),!0):!1}startUnlockCheck(){this.unlockCheckInterval||(this.unlockCheckInterval=setInterval(()=>{this.checkExpiration()&&this.stopUnlockCheck()},1e3))}stopUnlockCheck(){this.unlockCheckInterval&&(clearInterval(this.unlockCheckInterval),this.unlockCheckInterval=null)}incrementAttempts(){this.attempts++,this.attempts>=this.maxAttempts?(this.lockedUntil=Date.now()+this.blockDurationMs,this.saveToStorage(),this.onLocked?.(this.blockDurationMs),this.startUnlockCheck()):this.saveToStorage()}isLocked(){return this.checkExpiration()?!1:this.lockedUntil!==null&&Date.now()<this.lockedUntil}getRemainingBlockTimeMs(){return this.checkExpiration()||this.lockedUntil===null?0:Math.max(0,this.lockedUntil-Date.now())}reset(){this.attempts=0,this.lockedUntil=null,this.stopUnlockCheck(),this.saveToStorage()}getAttempts(){return this.attempts}};function M(c){return c==null?"":typeof c=="boolean"?c?"true":"false":typeof c=="object"?JSON.stringify(c):String(c)}function F(c){if(!c)return null;try{return JSON.parse(c)}catch{return c}}function ut(c="ef"){return`${c}-${Math.random().toString(36).substr(2,9)}`}function A(c,t){return t.split(".").reduce((e,a)=>e?.[a],c)}function T(c,t,e){let a=t.split("."),r=a.pop(),o=a.reduce((s,i)=>((!s[i]||typeof s[i]!="object")&&(s[i]={}),s[i]),c);o[r]=e}function ke(c){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(c)}function ft(c){return c.replace(/[^a-zA-Z0-9-_]/g,"-")}var q=class{async validateField(t,e){return this.validateFieldWithValidations(t,e,t.validations||[])}async validateFieldWithValidations(t,e,a){let r=[];if(!a||a.length===0)return r;for(let o of a){let s=await this.validateValue(o,e);s.isValid||r.push(s.message||this.getDefaultMessage(o))}return r}async validateValue(t,e){switch(t.type){case"required":return this.validateRequired(e);case"email":return this.validateEmail(e);case"minLength":return this.validateMinLength(e,t.value);case"maxLength":return this.validateMaxLength(e,t.value);case"min":return this.validateMin(e,t.value);case"max":return this.validateMax(e,t.value);case"pattern":return this.validatePattern(e,t.value);case"custom":return await this.validateCustom(e,t);case"noInjection":return this.validateNoInjection(e,t);default:return{isValid:!0}}}validateRequired(t){let e=t!=null&&t!==""&&!(Array.isArray(t)&&t.length===0);return{isValid:e,message:e?void 0:"Este campo es requerido"}}validateEmail(t){if(!t)return{isValid:!0};let e=typeof t=="string"&&ke(t);return{isValid:e,message:e?void 0:"Debe ser un email v\xE1lido"}}validateMinLength(t,e){if(!t)return{isValid:!0};let r=String(t).length>=e;return{isValid:r,message:r?void 0:`Debe tener al menos ${e} caracteres`}}validateMaxLength(t,e){if(!t)return{isValid:!0};let r=String(t).length<=e;return{isValid:r,message:r?void 0:`Debe tener m\xE1ximo ${e} caracteres`}}validateMin(t,e){if(t==null||t==="")return{isValid:!0};let a=Number(t),r=!isNaN(a)&&a>=e;return{isValid:r,message:r?void 0:`Debe ser mayor o igual a ${e}`}}validateMax(t,e){if(t==null||t==="")return{isValid:!0};let a=Number(t),r=!isNaN(a)&&a<=e;return{isValid:r,message:r?void 0:`Debe ser menor o igual a ${e}`}}validatePattern(t,e){if(!t)return{isValid:!0};let a;if(e instanceof RegExp)a=e;else if(typeof e=="string")try{a=new RegExp(e)}catch{return console.warn("Invalid regex pattern:",e),{isValid:!0}}else return console.warn("Pattern validation expects string or RegExp, got:",typeof e,e),{isValid:!0};let r=a.test(String(t));return{isValid:r,message:r?void 0:"El formato no es v\xE1lido"}}validateNoInjection(t,e){if(t==null||t==="")return{isValid:!0};let a=I(t);return{isValid:a,message:a?void 0:e.message||D}}async validateCustom(t,e){try{let a=await e.validator(t);return{isValid:!!a,message:a?void 0:e.message||"Validaci\xF3n fallida"}}catch{return{isValid:!1,message:e.message||"Error en la validaci\xF3n"}}}getDefaultMessage(t){switch(t.type){case"required":return"Este campo es requerido";case"email":return"Debe ser un email v\xE1lido";case"minLength":return`Debe tener al menos ${t.value} caracteres`;case"maxLength":return`Debe tener m\xE1ximo ${t.value} caracteres`;case"min":return`Debe ser mayor o igual a ${t.value}`;case"max":return`Debe ser menor o igual a ${t.value}`;case"pattern":return"El formato no es v\xE1lido";case"custom":return"Validaci\xF3n fallida";case"noInjection":return D;default:return"Campo inv\xE1lido"}}async validateForm(t,e){let a={};for(let r of t){let o=e[r.name],s=await this.validateField(r,o);s.length>0&&(a[r.name]=s)}return a}};var P=class{evaluateCondition(t,e){let a=this.getFieldValue(t.field,e);return this.compareValues(a,t.operator,t.value)}evaluateConditions(t,e,a="and"){let r=Array.isArray(t)?t:[t];return r.length===0?!0:a==="and"?r.every(o=>this.evaluateCondition(o,e)):r.some(o=>this.evaluateCondition(o,e))}evaluateDependencies(t,e){let a=!0,r=!0,o=!1;if(t.show&&(a=this.evaluateConditions(t.show,e)),t.hide){let s=this.evaluateConditions(t.hide,e);a=a&&!s}if(t.enable&&(r=this.evaluateConditions(t.enable,e)),t.disable){let s=this.evaluateConditions(t.disable,e);r=r&&!s}if(t.required&&(o=this.evaluateConditions(t.required,e)),t.optional){let s=this.evaluateConditions(t.optional,e);o=o&&!s}return{visible:a,enabled:r,required:o}}getFieldValue(t,e){let a=t.split("."),r=e;for(let o of a){if(r==null)return null;r=r[o]}return r}compareValues(t,e,a){switch(e){case"equals":return this.deepEqual(t,a);case"notEquals":return!this.deepEqual(t,a);case"contains":return Array.isArray(t)?t.includes(a):typeof t=="string"?t.includes(String(a)):!1;case"notContains":return!this.compareValues(t,"contains",a);case"greaterThan":return this.toNumber(t)>this.toNumber(a);case"lessThan":return this.toNumber(t)<this.toNumber(a);case"greaterThanOrEqual":return this.toNumber(t)>=this.toNumber(a);case"lessThanOrEqual":return this.toNumber(t)<=this.toNumber(a);case"in":return Array.isArray(a)?a.includes(t):!1;case"notIn":return!this.compareValues(t,"in",a);case"isEmpty":return t==null||t===""||Array.isArray(t)&&t.length===0;case"isNotEmpty":return!this.compareValues(t,"isEmpty",a);case"regex":try{return(typeof a=="string"?new RegExp(a):a).test(String(t||""))}catch{return!1}default:return!1}}deepEqual(t,e){if(t===e)return!0;if(t===null||e===null||t===void 0||e===void 0)return t===e;if(typeof t!=typeof e)return!1;if(Array.isArray(t)&&Array.isArray(e))return t.length!==e.length?!1:t.every((a,r)=>this.deepEqual(a,e[r]));if(typeof t=="object"){let a=Object.keys(t),r=Object.keys(e);return a.length!==r.length?!1:a.every(o=>this.deepEqual(t[o],e[o]))}return!1}toNumber(t){if(typeof t=="number")return t;if(typeof t=="string"){let e=parseFloat(t);return isNaN(e)?0:e}return 0}};var V=class{constructor(){this.wizardState=null;this.schema=null;this.dependencyCache=new Map;this.fieldDependencies=new Map;this.parser=new z,this.validator=new q,this.conditionEngine=new P,this.state=this.createInitialState()}createInitialState(){return{values:{},errors:{},touched:{},isValid:!0,isSubmitting:!1}}initializeSchema(t,e){this.schema=this.parser.parse(t),this.initializeValues(e),this.initializeWizard(),this.buildDependencyMap()}extractAllFields(t){let e=[];for(let a of t)e.push(a),a.type==="group"&&"fields"in a&&e.push(...this.extractAllFields(a.fields)),a.type==="row"&&"fields"in a&&e.push(...this.extractAllFields(a.fields));return e}getArrayItemOnlyFieldNames(t){let e=new Set(t.map(r=>r.name)),a=new Set;for(let r of t)if(r.type==="array"&&"itemSchema"in r&&r.itemSchema?.fields)for(let o of r.itemSchema.fields)e.has(o.name)||a.add(o.name);return a}findFieldPath(t,e,a=""){for(let r of e){let o=a?`${a}.${r.name}`:r.name;if(r.name===t)return o;if(r.type==="group"&&"fields"in r){let s=this.findFieldPath(t,r.fields,o);if(s)return s}if(r.type==="row"&&"fields"in r){let s=this.findFieldPath(t,r.fields,o);if(s)return s}}return null}buildDependencyMap(){if(this.fieldDependencies.clear(),this.dependencyCache.clear(),!this.schema)return;let t=this.schema.isWizard?this.schema.steps.flatMap(a=>a.fields):this.schema.fields||[],e=this.extractAllFields(t);for(let a of e){if(!a.dependencies)continue;let r=this.extractObservedFields(a.dependencies);for(let o of r)this.fieldDependencies.has(o)||this.fieldDependencies.set(o,new Set),this.fieldDependencies.get(o).add(a.name)}}extractObservedFields(t){let e=new Set,a=o=>{o&&o.field&&e.add(o.field)},r=o=>{Array.isArray(o)?o.forEach(a):o&&a(o)};return t.show&&r(t.show),t.hide&&r(t.hide),t.enable&&r(t.enable),t.disable&&r(t.disable),t.required&&r(t.required),t.optional&&r(t.optional),e}initializeValues(t){if(!this.schema)return;let e=this.schema.isWizard?this.schema.steps.flatMap(i=>i.fields):this.schema.fields||[],a=this.extractAllFields(e),r={...this.state.values},o={};if(t)for(let i in t){let n=t[i];n!=null&&T(o,i,n)}for(let i of a){let n=A(o,i.name);if(n!=null)continue;let l=A(r,i.name);l!=null?T(o,i.name,l):this.initializeFieldValue(i,o)}let s=this.getArrayItemOnlyFieldNames(e);for(let i in r)s.has(i)||i in o||(o[i]=r[i]);for(let i of e)if(i.type==="array"&&"minItems"in i&&"itemSchema"in i){let n=i,l=n.minItems??0;if(l>=1&&n.itemSchema?.fields?.length){let d=A(o,i.name);if(Array.isArray(d)&&d.length<l){let m=[...d];for(let p=d.length;p<l;p++){let u={};for(let h of n.itemSchema.fields)this.initializeFieldValue(h,u);m.push(u)}T(o,i.name,m)}}}for(let i of s)i in o&&delete o[i];this.state.values=o}initializeFieldValue(t,e){if(t.defaultValue!==void 0)e[t.name]=t.defaultValue;else switch(t.type){case"checkbox":case"switch":e[t.name]=t.checked||!1;break;case"select":"multiple"in t&&t.multiple?e[t.name]=[]:e[t.name]=null;break;case"array":{let a=t,r=a.minItems??0,o=a.itemSchema?.fields;if(r>=1&&o?.length){let s=[];for(let i=0;i<r;i++){let n={};for(let l of o)this.initializeFieldValue(l,n);s.push(n)}e[t.name]=s}else e[t.name]=[];break}case"group":if(e[t.name]={},"fields"in t)for(let a of t.fields)this.initializeFieldValue(a,e[t.name]);break;case"colorpicker":e[t.name]=t.defaultValue??"#000000";break;default:e[t.name]=null}}initializeWizard(){if(!this.schema||!this.schema.isWizard){this.wizardState=null;return}this.wizardState={currentStep:0,totalSteps:this.schema.steps.length,completedSteps:[]}}getState(){return{...this.state}}getWizardState(){return this.wizardState?{...this.wizardState}:null}getValue(t){return A(this.state.values,t)}createDefaultArrayItem(t){let a=t.itemSchema?.fields;if(!a?.length)return{};let r={};for(let o of a)this.initializeFieldValue(o,r);return r}async setValue(t,e){T(this.state.values,t,e),this.state.touched[t]=!0,this.invalidateDependencyCache(t),this.state.touched[t]&&this.schema&&await this.validateField(t);let a=this.fieldDependencies.get(t);if(a)for(let r of a)await this.validateField(r);this.updateValidity()}invalidateDependencyCache(t){let e=this.fieldDependencies.get(t);if(e)for(let a of e)this.dependencyCache.delete(a)}setValueWithoutValidation(t,e){T(this.state.values,t,e),this.invalidateDependencyCache(t)}async validateField(t){if(!this.schema)return;let e=this.schema.isWizard?this.schema.steps.flatMap(n=>n.fields):this.schema.fields||[],r=this.extractAllFields(e).find(n=>n.name===t);if(!r)return;if(!this.getFieldVisibility(t)){delete this.state.errors[t];return}let o=this.getValue(t),s=this.getActiveValidations(r),i=await this.validator.validateFieldWithValidations(r,o,s);i.length>0?this.state.errors[t]=i:delete this.state.errors[t]}getActiveValidations(t){let e=[...t.validations||[]],a=["text","email","password","textarea"],r=t.skipInjectionValidation??t.props?.skipInjectionValidation;a.includes(t.type)&&!r&&!e.some(i=>i.type==="noInjection")&&(e=[{type:"noInjection"},...e]);let o=this.getFieldRequired(t.name),s=e.some(i=>i.type==="required");if(o&&!s?e=[{type:"required"},...e]:!o&&s&&(e=e.filter(i=>i.type!=="required")),t.conditionalValidations)for(let i of t.conditionalValidations)this.conditionEngine.evaluateConditions(i.condition,this.state.values)&&(e=[...e,...i.validations]);return e}async validateForm(){if(!this.schema)return{};let t=this.schema.isWizard?this.schema.steps.flatMap(r=>r.fields):this.schema.fields||[],e=this.extractAllFields(t),a=await this.validator.validateForm(e,this.state.values);return this.state.errors=a,this.updateValidity(),a}updateValidity(){this.state.isValid=Object.keys(this.state.errors).length===0}setTouched(t){this.state.touched[t]=!0}getErrors(t){return this.state.errors[t]||[]}getAllErrors(){return{...this.state.errors}}reset(){this.state=this.createInitialState(),this.schema&&(this.initializeValues(),this.initializeWizard())}nextStep(){return this.wizardState&&this.wizardState.currentStep<this.wizardState.totalSteps-1?(this.wizardState.currentStep++,!0):!1}previousStep(){return this.wizardState&&this.wizardState.currentStep>0?(this.wizardState.currentStep--,!0):!1}goToStep(t){return this.wizardState&&t>=0&&t<this.wizardState.totalSteps?(this.wizardState.currentStep=t,!0):!1}completeStep(t){this.wizardState&&(this.wizardState.completedSteps.includes(t)||this.wizardState.completedSteps.push(t))}setSubmitting(t){this.state.isSubmitting=t}getCurrentStepFields(){return!this.schema||!this.schema.isWizard||!this.wizardState?this.schema?.fields||[]:this.schema.steps[this.wizardState.currentStep].fields}getFieldVisibility(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.visible;if(!this.schema)return!0;let a=this.schema.isWizard?this.schema.steps.flatMap(d=>d.fields):this.schema.fields||[],r=this.extractAllFields(a),o=r.find(d=>this.findFieldPath(d.name,a)===t||d.name===t);if(o||(o=r.find(d=>d.name===t)),!o||!o.dependencies)return!o?.hidden;let s=this.findFieldPath(o.name,a)||o.name,i=s.includes(".")?s.split(".").slice(0,-1).join("."):"",n={...this.state.values};if(i&&o.dependencies){let d=A(this.state.values,i);if(d&&typeof d=="object"){let m=(u,h="")=>{let b={};for(let[f,y]of Object.entries(u)){let E=h?`${h}.${f}`:f;y&&typeof y=="object"&&!Array.isArray(y)&&y!==null?Object.assign(b,m(y,E)):b[E]=y}return b},p=m(d);n={...this.state.values,...p}}}let l=this.conditionEngine.evaluateDependencies(o.dependencies,n);return this.dependencyCache.set(t,l),l.visible&&!o.hidden}getFieldEnabled(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.enabled;if(!this.schema)return!0;let a=this.schema.isWizard?this.schema.steps.flatMap(i=>i.fields):this.schema.fields||[],o=this.extractAllFields(a).find(i=>i.name===t);if(!o)return!0;if(o.disabled)return!1;if(!o.dependencies)return!0;let s=this.conditionEngine.evaluateDependencies(o.dependencies,this.state.values);return this.dependencyCache.set(t,s),s.enabled}getFieldRequired(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.required;if(!this.schema)return!1;let a=this.schema.isWizard?this.schema.steps.flatMap(n=>n.fields):this.schema.fields||[],o=this.extractAllFields(a).find(n=>n.name===t);if(!o)return!1;let s=o.validations?.some(n=>n.type==="required")||!1;if(!o.dependencies)return s;let i=this.conditionEngine.evaluateDependencies(o.dependencies,this.state.values);return this.dependencyCache.set(t,i),i.required||s}getDependentFields(t){return Array.from(this.fieldDependencies.get(t)||[])}};var g=class{constructor(t,e,a,r,o){this.field=t,this.value=e,this.error=a,this.onChange=r,this.onBlur=o}createInputWithSlots(t){let e=this.field.leadingIcon,a=this.field.trailingIcon;if(!e&&!a)return t;let r=document.createElement("div");if(r.className="easy-form-input-wrapper",e&&this.isSlotContentValid(e)){let s=this.renderSlotContent(e);s.className="easy-form-input-slot easy-form-input-slot-leading",r.appendChild(s)}let o=document.createElement("div");if(o.className="easy-form-input-core",o.appendChild(t),r.appendChild(o),a&&this.isSlotContentValid(a)){let s=this.renderSlotContent(a);s.className="easy-form-input-slot easy-form-input-slot-trailing",r.appendChild(s)}return r}isSlotContentValid(t){return t.type?t.type==="image"?!!t.src:t.type==="html"?!!t.html:!1:!1}renderSlotContent(t){let e=document.createElement("span");if(e.className="easy-form-input-slot-content",t.type==="image"&&t.src){let a=document.createElement("img");a.src=t.src,a.alt=t.alt??"",a.setAttribute("aria-hidden","true"),e.appendChild(a)}else t.type==="html"&&t.html&&(e.innerHTML=t.html);return e}createFieldContainer(t){let e=document.createElement("div"),r=Array.from(t.classList).filter(l=>l.startsWith("easy-form-")&&l!=="easy-form-field"&&(l.includes("-container")||l.includes("-wrapper"))),o=this.field.labelPosition??"up",s=this.createInputWithSlots(t);if(r.length>0?e.className=`easy-form-field easy-form-label-${o} ${r.join(" ")}`:e.className=`easy-form-field easy-form-label-${o}`,o==="none"&&this.field.label){let l=s.querySelector("input, textarea, select")||s;l instanceof HTMLElement&&l.setAttribute("aria-label",this.field.label)}let n=(()=>{if(!this.field.label||o==="none")return null;let l=document.createElement("label");if(l.className="easy-form-label",l.setAttribute("for",this.getFieldId()),l.textContent=this.field.label,this.field.validations?.some(d=>d.type==="required")){let d=document.createElement("span");d.className="easy-form-required",d.textContent=" *",l.appendChild(d)}return l})();if(o==="up")n&&e.appendChild(n),e.appendChild(s);else if(o==="down")e.appendChild(s),n&&e.appendChild(n);else if(o==="left"){let l=document.createElement("div");l.className="easy-form-field-inner easy-form-field-inner-horizontal",n&&l.appendChild(n),l.appendChild(s),e.appendChild(l)}else if(o==="right"){let l=document.createElement("div");l.className="easy-form-field-inner easy-form-field-inner-horizontal",l.appendChild(s),n&&l.appendChild(n),e.appendChild(l)}else e.appendChild(s);if(this.field.description){let l=document.createElement("p");l.className="easy-form-description",l.textContent=this.field.description,e.appendChild(l)}if(this.error){let l=document.createElement("p");l.className="easy-form-error",l.textContent=this.error,e.appendChild(l)}return e}getFieldId(){return`easy-form-${this.field.name}`}applyCommonProps(t){if(t.id=this.getFieldId(),t.setAttribute("name",this.field.name),this.field.disabled&&(t.setAttribute("disabled","true"),t.classList.add("easy-form-input-disabled")),this.field.hidden&&(t.style.display="none",t.classList.add("easy-form-field-hidden")),this.error&&t.classList.add("easy-form-input-error"),this.field.props)for(let[e,a]of Object.entries(this.field.props))(e.startsWith("data-")||e.startsWith("aria-"))&&t.setAttribute(e,String(a))}};function Ee(c){let t=[];for(let e=0;e<c.length;e++){let a=c[e];switch(a){case"9":t.push({type:"digit",char:"9",editable:!0});break;case"a":case"A":t.push({type:"letter",char:a,editable:!0});break;case"*":t.push({type:"any",char:"*",editable:!0});break;default:t.push({type:"literal",char:a,editable:!1});break}}return t}function R(c,t){let e="",a=0;for(let r of t){if(!r.editable){e+=r.char;continue}if(a>=c.length)break;let o=c[a];if(!(r.type==="digit"&&!/\d/.test(o))){{if(r.type==="letter"&&!/[a-zA-Z]/.test(o))continue;if(r.type!=="any"){if(r.type!=="any"&&r.type!=="digit"&&r.type!=="letter")continue}}e+=o,a++}}return e}function fe(c,t){if(!c)return"";let e="",a=0;for(let r=0;r<c.length&&a<t.length;r++){let o=c[r],s=t[a];if(s.editable)s.type==="digit"&&/\d/.test(o)||s.type==="letter"&&/[a-zA-Z]/.test(o)||s.type==="any"?(e+=o,a++):(a++,r--);else if(o===s.char)a++;else if(a<t.length-1){let i=t[a+1];i&&i.editable&&(i.type==="digit"&&/\d/.test(o)||i.type==="letter"&&/[a-zA-Z]/.test(o)||i.type==="any")?(e+=o,a+=2):a++}else break}return e}function H(c,t,e="forward"){if(e==="forward"){for(let a=c+1;a<t.length;a++)if(t[a].editable)return a;return t.length}else{for(let a=c-1;a>=0;a--)if(t[a].editable)return a;return 0}}function Ce(c,t="_"){return c.map(e=>e.editable?t:e.char).join("")}function Se(c,t,e,a){let r=0;for(let s=0;s<Math.min(e,c.length);s++){let i=s;i<a.length&&a[i].editable&&r++}let o=0;for(let s=0;s<t.length&&s<a.length;s++)if(a[s].editable&&(o++,o>r))return s+1;return H(Math.min(e,t.length-1),a,"forward")}var L=class{constructor(){this.tokenCache=new Map}getCustomMask(t){return t.custom?t.custom:t.type?ue(t.type):null}getTokens(t){let e=this.getCustomMask(t);if(!e)return null;let a=e.pattern;if(this.tokenCache.has(a))return this.tokenCache.get(a);let r=Ee(e.pattern);return this.tokenCache.set(a,r),r}applyMask(t,e){let a=this.getTokens(e);if(!a)return t;let r=this.getCustomMask(e),o=a.filter(l=>l.editable),s=new Set(o.map(l=>l.type)),i="";for(let l of t)(s.has("any")||s.has("digit")&&/\d/.test(l)||s.has("letter")&&/[a-zA-Z]/.test(l))&&(i+=l);let n=R(i,a);return r.transform&&(n=r.transform(n),n=R(n,a)),n}removeMask(t,e){let a=this.getTokens(e);return a?fe(t,a):t}getMaskPlaceholder(t){let e=this.getTokens(t);if(!e)return"";let a=this.getCustomMask(t);return Ce(e,a.placeholder||"_")}canInsertChar(t,e,a){let r=this.getTokens(a);if(!r||e>=r.length)return!1;let o=r[e];if(!o.editable)return!1;switch(o.type){case"digit":return/\d/.test(t);case"letter":return/[a-zA-Z]/.test(t);case"any":return!0;default:return!1}}processInput(t,e,a,r){let o=this.getTokens(a);if(!o)return{value:t,cursorPosition:t.length};let s=fe(t,o),i=R(s,o),n=this.getCustomMask(a);n.transform&&(i=n.transform(i),i=R(i,o));let l=Se(e,i,r,o);return{value:i,cursorPosition:Math.min(l,i.length)}}processKeyInput(t,e,a,r,o=!1){let s=this.getTokens(r);if(!s)return{value:e,cursorPosition:a};if(o){if(a===0)return{value:e,cursorPosition:0};let i=H(a-1,s,"backward"),n=e.substring(0,i),l=e.substring(a),d=n+l,m=this.removeMask(d,r),p=this.applyMask(m,r),u=Math.max(0,i-1),h=H(u,s,"forward");return{value:p,cursorPosition:h}}if(t.length===1&&this.canInsertChar(t,a,r)){let i=e.substring(0,a),n=e.substring(a),l=i+t+n;return this.processInput(l,e,r,a)}return{value:e,cursorPosition:a}}};var $=class extends g{constructor(e,a,r,o,s){super(e,a,r,o,s);this.maskEngine=null;this.previousValue="";e.mask&&(this.maskEngine=new L)}render(){let e=document.createElement("input");e.type=this.field.type==="email"?"email":this.field.type==="password"?"password":"text";let a=this.value??"";if(this.maskEngine&&this.field.mask&&(a&&(a=this.maskEngine.applyMask(String(a),this.field.mask)),this.previousValue=a),e.value=a,this.applyCommonProps(e),this.field.placeholder)e.placeholder=this.field.placeholder;else if(this.maskEngine&&this.field.mask){let r=this.maskEngine.getMaskPlaceholder(this.field.mask);r&&(e.placeholder=r)}return this.maskEngine&&this.field.mask?(e.addEventListener("input",r=>{let o=r.target,s=o.selectionStart||0,i=o.value,n=this.maskEngine.processInput(i,this.previousValue,this.field.mask,s);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=this.field.mask.keepFormat?n.value:this.maskEngine.removeMask(n.value,this.field.mask);this.onChange(l)}),e.addEventListener("keydown",r=>{let o=r.target,s=o.selectionStart||0;if(r.key==="Backspace"||r.key==="Delete"){r.preventDefault();let i=r.key==="Backspace",n=this.maskEngine.processKeyInput("",o.value,s,this.field.mask,i);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=this.field.mask.keepFormat?n.value:this.maskEngine.removeMask(n.value,this.field.mask);this.onChange(l)}}),e.addEventListener("paste",r=>{r.preventDefault();let o=(r.clipboardData||window.clipboardData).getData("text");if(o){let s=r.target,i=s.selectionStart||0,n=s.value.substring(0,i),l=s.value.substring(i),d=n+o+l,m=this.maskEngine.processInput(d,this.previousValue,this.field.mask,i);s.value=m.value,this.previousValue=m.value,setTimeout(()=>{s.setSelectionRange(m.cursorPosition,m.cursorPosition)},0);let p=this.field.mask.keepFormat?m.value:this.maskEngine.removeMask(m.value,this.field.mask);this.onChange(p)}})):e.addEventListener("input",r=>{let o=r.target;this.onChange(o.value)}),e.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(e)}};var B=class extends g{constructor(e,a,r,o,s){super(e,a,r,o,s);this.maskEngine=null;this.previousValue="";e.mask&&(this.maskEngine=new L)}render(){let e=document.createElement("input");if(this.maskEngine&&this.field.mask){e.type="text";let r=this.value??"";r!==null&&r!==""&&(this.field.mask.type==="currency"?r=this.maskEngine.applyMask(String(r),this.field.mask):this.field.mask.type==="percentage"&&(r=this.maskEngine.applyMask(String(r),this.field.mask))),this.previousValue=r,e.value=r}else e.type="number",e.value=this.value??"";let a=this.field;if(!this.maskEngine&&e.type==="number"&&(a.min!==void 0&&(e.min=String(a.min)),a.max!==void 0&&(e.max=String(a.max)),a.step!==void 0&&(e.step=String(a.step))),this.applyCommonProps(e),this.field.placeholder)e.placeholder=this.field.placeholder;else if(this.maskEngine&&this.field.mask){let r=this.maskEngine.getMaskPlaceholder(this.field.mask);r&&(e.placeholder=r)}return this.maskEngine&&this.field.mask?(e.addEventListener("input",r=>{let o=r.target,s=o.selectionStart||0,i=o.value,n=this.maskEngine.processInput(i,this.previousValue,this.field.mask,s);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=null;if(this.field.mask.type==="currency"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d):null}this.onChange(l)}),e.addEventListener("keydown",r=>{let o=r.target,s=o.selectionStart||0;if(r.key==="Backspace"||r.key==="Delete"){r.preventDefault();let i=r.key==="Backspace",n=this.maskEngine.processKeyInput("",o.value,s,this.field.mask,i);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=null;if(this.field.mask.type==="currency"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d):null}this.onChange(l)}}),e.addEventListener("paste",r=>{r.preventDefault();let o=(r.clipboardData||window.clipboardData).getData("text");if(o){let s=r.target,i=s.selectionStart||0,n=s.value.substring(0,i),l=s.value.substring(i),d=n+o+l,m=this.maskEngine.processInput(d,this.previousValue,this.field.mask,i);s.value=m.value,this.previousValue=m.value,setTimeout(()=>{s.setSelectionRange(m.cursorPosition,m.cursorPosition)},0);let p=null;if(this.field.mask.type==="currency"){let u=this.maskEngine.removeMask(m.value,this.field.mask);p=u?parseFloat(u.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let u=this.maskEngine.removeMask(m.value,this.field.mask);p=u?parseFloat(u):null}this.onChange(p)}})):e.addEventListener("input",r=>{let o=r.target,s=o.value===""?null:Number(o.value);this.onChange(s)}),e.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(e)}};var O=class extends g{render(){let t=document.createElement("textarea");t.value=this.value??"",t.placeholder=this.field.placeholder||"";let e=this.field;return e.rows&&(t.rows=e.rows),e.cols&&(t.cols=e.cols),this.applyCommonProps(t),t.addEventListener("input",a=>{let r=a.target;this.onChange(r.value)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var j=class extends g{render(){let t=document.createElement("select"),e=this.field;if(e.multiple&&(t.multiple=!0),!e.multiple){let r=document.createElement("option");r.value="",r.textContent=e.placeholder||"Selecciona una opci\xF3n",r.setAttribute("data-placeholder",""),r.disabled=!0,t.appendChild(r)}for(let r of e.options){let o=document.createElement("option");typeof r=="string"?(o.value=r,o.textContent=r):(o.value=String(r.value),o.textContent=r.label),t.appendChild(o)}if(e.multiple&&Array.isArray(this.value))for(let r of t.options)r.selected=this.value.includes(r.value);else t.value=this.value??"";this.applyCommonProps(t);let a=()=>{!t.value?t.classList.add("easy-form-select-placeholder"):t.classList.remove("easy-form-select-placeholder")};return a(),t.addEventListener("change",r=>{let o=r.target;if(a(),e.multiple){let s=Array.from(o.selectedOptions).map(i=>i.value);this.onChange(s)}else this.onChange(o.value||null)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var W=class extends g{render(){let t=document.createElement("input");t.type="checkbox",t.checked=!!this.value,this.applyCommonProps(t),t.addEventListener("change",r=>{let o=r.target;this.onChange(o.checked)}),t.addEventListener("blur",()=>{this.onBlur()});let e=document.createElement("div");e.className="easy-form-field";let a=document.createElement("label");if(a.className="easy-form-label-checkbox",a.setAttribute("for",this.getFieldId()),a.appendChild(t),this.field.label){let r=document.createTextNode(this.field.label);a.appendChild(r)}if(e.appendChild(a),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,e.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,e.appendChild(r)}return e}};var _=class extends g{render(){let t=document.createElement("div");if(t.className="easy-form-field",this.field.label){let r=document.createElement("label");if(r.className="easy-form-label",r.textContent=this.field.label,this.field.validations?.some(o=>o.type==="required")){let o=document.createElement("span");o.className="easy-form-required",o.textContent=" *",r.appendChild(o)}t.appendChild(r)}let e=document.createElement("div");e.className="easy-form-radio-group";let a=this.field;for(let r of a.options){let o=typeof r=="string"?r:r.value,s=typeof r=="string"?r:r.label,i=document.createElement("div");i.className="easy-form-radio-option";let n=document.createElement("input");n.type="radio",n.name=this.field.name,n.id=`${this.getFieldId()}-${o}`,n.value=String(o),n.checked=String(this.value)===String(o),this.field.disabled&&(n.disabled=!0);let l=document.createElement("label");l.setAttribute("for",n.id),l.textContent=s,l.className="easy-form-radio-label",n.addEventListener("change",()=>{this.onChange(o)}),n.addEventListener("blur",()=>{this.onBlur()}),i.appendChild(n),i.appendChild(l),e.appendChild(i)}if(t.appendChild(e),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,t.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,t.appendChild(r)}return t}};var Y=class extends g{render(){let t=document.createElement("input");t.type="checkbox",t.className="easy-form-switch",t.checked=!!this.value,this.applyCommonProps(t),t.addEventListener("change",r=>{let o=r.target;this.onChange(o.checked)}),t.addEventListener("blur",()=>{this.onBlur()});let e=document.createElement("div");e.className="easy-form-field";let a=document.createElement("label");if(a.className="easy-form-label-switch",a.setAttribute("for",this.getFieldId()),this.field.label){let r=document.createTextNode(this.field.label);a.appendChild(r)}if(a.appendChild(t),e.appendChild(a),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,e.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,e.appendChild(r)}return e}};var U=class extends g{render(){let t=document.createElement("input");t.type="date";let e=this.field;if(e.min&&(t.min=e.min),e.max&&(t.max=e.max),this.value){let a=this.value instanceof Date?this.value.toISOString().split("T")[0]:String(this.value);t.value=a}return this.applyCommonProps(t),t.addEventListener("change",a=>{let r=a.target;this.onChange(r.value||null)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var G=class extends g{render(){let t=document.createElement("input");t.type="file";let e=this.field;return e.accept&&(t.accept=e.accept),e.multiple&&(t.multiple=!0),this.applyCommonProps(t),t.addEventListener("change",a=>{let r=a.target;r.files&&(e.multiple?this.onChange(Array.from(r.files)):this.onChange(r.files[0]||null))}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var K=class extends g{render(){let t=document.createElement("div");t.className="easy-form-quantity-container";let e=this.field,a=e.min??0,r=e.max??void 0,o=e.step??1,s=this.value??a,i=document.createElement("div");i.className="easy-form-quantity-wrapper";let n=document.createElement("button");n.type="button",n.className="easy-form-quantity-btn easy-form-quantity-decrement",n.textContent="\u2212",n.setAttribute("aria-label","Decrementar"),s<=a&&(n.disabled=!0,n.classList.add("disabled"));let l=document.createElement("input");l.type="number",l.value=String(s),l.min=String(a),r!==void 0&&(l.max=String(r)),l.step=String(o),l.className="easy-form-quantity-input",this.applyCommonProps(l);let d=document.createElement("button");d.type="button",d.className="easy-form-quantity-btn easy-form-quantity-increment",d.textContent="+",d.setAttribute("aria-label","Incrementar"),r!==void 0&&s>=r&&(d.disabled=!0,d.classList.add("disabled")),n.addEventListener("click",()=>{let p=Math.max(a,Number(l.value)-o);l.value=String(p),this.onChange(p),m()}),d.addEventListener("click",()=>{let p=r!==void 0?Math.min(r,Number(l.value)+o):Number(l.value)+o;l.value=String(p),this.onChange(p),m()}),l.addEventListener("input",p=>{let u=p.target,h=Number(u.value);isNaN(h)&&(h=a),h<a&&(h=a),r!==void 0&&h>r&&(h=r),u.value=String(h),this.onChange(h),m()}),l.addEventListener("blur",()=>{this.onBlur()});let m=()=>{let p=Number(l.value);n.disabled=p<=a,n.classList.toggle("disabled",p<=a),r!==void 0?(d.disabled=p>=r,d.classList.toggle("disabled",p>=r)):(d.disabled=!1,d.classList.remove("disabled"))};return i.appendChild(n),i.appendChild(l),i.appendChild(d),t.appendChild(i),this.createFieldContainer(t)}};var Z=class extends g{constructor(){super(...arguments);this.openAccordion=null}render(){let e=document.createElement("div");e.className="easy-form-accordion-select-container";let a=this.field,r=this.value??null;return a.options.forEach((o,s)=>{let i=typeof o=="string"?o:o.value,n=typeof o=="string"?o:o.label,l=typeof o=="object"&&"description"in o&&o.description?o.description:void 0,d=document.createElement("div");d.className="easy-form-accordion-item",d.setAttribute("data-value",String(i)),(r===i||Array.isArray(r)&&r.includes(i))&&(d.classList.add("selected"),a.multiple||(this.openAccordion=String(i)));let m=document.createElement("div");m.className="easy-form-accordion-header",m.setAttribute("role","button"),m.setAttribute("tabindex","0"),m.setAttribute("aria-expanded","false");let p=document.createElement("div");p.className="easy-form-accordion-header-content";let u=document.createElement("div");u.className="easy-form-accordion-indicator",a.multiple?(u.classList.add("checkbox"),Array.isArray(r)&&r.includes(i)&&u.classList.add("checked")):(u.classList.add("radio"),r===i&&u.classList.add("checked"));let h=document.createElement("span");h.className="easy-form-accordion-label",h.textContent=n;let b=document.createElement("span");b.className="easy-form-accordion-arrow",b.textContent="\u25BC",p.appendChild(u),p.appendChild(h),m.appendChild(p),m.appendChild(b);let f=document.createElement("div");if(f.className="easy-form-accordion-content",l){let v=document.createElement("p");v.className="easy-form-accordion-description",v.textContent=l,f.appendChild(v)}if(typeof o=="object"&&"content"in o&&o.content){let v=document.createElement("div");v.className="easy-form-accordion-custom-content",typeof o.content=="string"?v.innerHTML=o.content:o.content instanceof HTMLElement&&v.appendChild(o.content),f.appendChild(v)}d.appendChild(m),d.appendChild(f);let y=()=>{let v=d.classList.contains("open");a.multiple||e.querySelectorAll(".easy-form-accordion-item").forEach(C=>{if(C!==d){C.classList.remove("open");let k=C.querySelector(".easy-form-accordion-header"),x=C.querySelector(".easy-form-accordion-content"),w=C.querySelector(".easy-form-accordion-arrow");k&&k.setAttribute("aria-expanded","false"),x&&(x.style.maxHeight=null),w&&(w.style.transform="rotate(0deg)")}}),v?(d.classList.remove("open"),m.setAttribute("aria-expanded","false"),f.style.maxHeight=null,b.style.transform="rotate(0deg)",this.openAccordion=null):(d.classList.add("open"),m.setAttribute("aria-expanded","true"),f.style.maxHeight=f.scrollHeight+"px",b.style.transform="rotate(180deg)",this.openAccordion=String(i))},E=()=>{if(a.multiple){let v=Array.isArray(r)?[...r]:[],C=v.indexOf(i);C>-1?(v.splice(C,1),d.classList.remove("selected"),u.classList.remove("checked")):(v.push(i),d.classList.add("selected"),u.classList.add("checked")),this.onChange(v.length>0?v:null)}else e.querySelectorAll(".easy-form-accordion-item").forEach(v=>{v.classList.remove("selected");let C=v.querySelector(".easy-form-accordion-indicator");C&&C.classList.remove("checked")}),d.classList.add("selected"),u.classList.add("checked"),this.onChange(i)};m.addEventListener("click",v=>{v.stopPropagation(),E(),y()}),m.addEventListener("keydown",v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),E(),y())}),(r===i||Array.isArray(r)&&r.includes(i))&&(!a.multiple||a.autoExpand)&&setTimeout(()=>{d.classList.add("open"),m.setAttribute("aria-expanded","true"),f.style.maxHeight=f.scrollHeight+"px",b.style.transform="rotate(180deg)"},0),e.appendChild(d)}),this.createFieldContainer(e)}};var J=class extends g{render(){let t=document.createElement("div");t.className="easy-form-image-grid-container";let e=this.field,a=this.value??null,r=e.columns??3,o=e.imageSize??"medium";return t.style.gridTemplateColumns=`repeat(${r}, 1fr)`,t.style.gap=e.gap??"1rem",e.options.forEach(s=>{let i=typeof s=="string"?s:s.value,n=typeof s=="string"?s:s.label,l=typeof s=="object"&&"image"in s&&s.image?s.image:void 0,d=typeof s=="object"&&"description"in s&&s.description?s.description:void 0,m=document.createElement("div");m.className=`easy-form-image-grid-item easy-form-image-grid-${o}`,m.setAttribute("data-value",String(i)),m.setAttribute("role","button"),m.setAttribute("tabindex","0"),m.setAttribute("aria-label",n),(a===i||Array.isArray(a)&&a.includes(i))&&m.classList.add("selected");let p=document.createElement("div");if(p.className="easy-form-image-grid-image-container",l){let f=document.createElement("img");f.src=l,f.alt=n,f.className="easy-form-image-grid-image",p.appendChild(f)}else{let f=document.createElement("div");f.className="easy-form-image-grid-placeholder",f.textContent=n.charAt(0).toUpperCase(),p.appendChild(f)}let u=document.createElement("div");u.className="easy-form-image-grid-indicator",e.multiple?(u.classList.add("checkbox"),Array.isArray(a)&&a.includes(i)&&(u.classList.add("checked"),u.innerHTML="\u2713")):(u.classList.add("radio"),a===i&&(u.classList.add("checked"),u.innerHTML="\u25CF")),p.appendChild(u);let h=document.createElement("div");if(h.className="easy-form-image-grid-label",h.textContent=n,d){let f=document.createElement("div");f.className="easy-form-image-grid-description",f.textContent=d,m.appendChild(f)}m.appendChild(p),m.appendChild(h);let b=()=>{if(e.multiple){let f=Array.isArray(a)?[...a]:[],y=f.indexOf(i);y>-1?(f.splice(y,1),m.classList.remove("selected"),u.classList.remove("checked"),u.innerHTML=""):(f.push(i),m.classList.add("selected"),u.classList.add("checked"),u.innerHTML="\u2713"),this.onChange(f.length>0?f:null)}else t.querySelectorAll(".easy-form-image-grid-item").forEach(f=>{f.classList.remove("selected");let y=f.querySelector(".easy-form-image-grid-indicator");y&&(y.classList.remove("checked"),y.innerHTML="")}),m.classList.add("selected"),u.classList.add("checked"),u.innerHTML="\u25CF",this.onChange(i)};m.addEventListener("click",b),m.addEventListener("keydown",f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),b())}),m.addEventListener("blur",()=>{this.onBlur()}),t.appendChild(m)}),this.createFieldContainer(t)}};var Q=class extends g{constructor(){super(...arguments);this.inputs=[]}render(){let e=document.createElement("div");e.className="easy-form-otp-container";let r=this.field.length??6,o=this.value??"",s=String(o).padStart(r,"").slice(0,r);for(let i=0;i<r;i++){let n=document.createElement("input");n.type="text",n.inputMode="numeric",n.maxLength=1,n.className="easy-form-otp-input",n.setAttribute("aria-label",`C\xF3digo d\xEDgito ${i+1}`),s[i]&&(n.value=s[i]),this.applyCommonProps(n),n.id=`${this.getFieldId()}-${i}`;let l=i;n.addEventListener("input",d=>{let m=d.target,p=m.value.replace(/[^0-9]/g,"");m.value=p,p&&l<r-1&&this.inputs[l+1].focus(),this.updateOTPValue()}),n.addEventListener("keydown",d=>{let m=d.target;d.key==="Backspace"&&!m.value&&l>0&&(this.inputs[l-1].focus(),this.inputs[l-1].value="",this.updateOTPValue()),d.key==="ArrowLeft"&&l>0&&(d.preventDefault(),this.inputs[l-1].focus()),d.key==="ArrowRight"&&l<r-1&&(d.preventDefault(),this.inputs[l+1].focus())}),n.addEventListener("paste",d=>{d.preventDefault();let p=(d.clipboardData||window.clipboardData).getData("text").replace(/[^0-9]/g,"").slice(0,r);for(let h=0;h<p.length&&l+h<r;h++)this.inputs[l+h].value=p[h];let u=Math.min(l+p.length,r-1);this.inputs[u].focus(),this.updateOTPValue()}),n.addEventListener("focus",d=>{d.target.select()}),n.addEventListener("blur",()=>{this.onBlur()}),this.inputs.push(n),e.appendChild(n)}return this.createFieldContainer(e)}updateOTPValue(){let e=this.inputs.map(o=>o.value).join(""),a=this.field,r=e.length===this.inputs.length?e:null;a.numeric&&r?this.onChange(Number(r)):this.onChange(r)}};var _e=6;function X(c){return c?'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/></svg>':'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>'}var ee=class extends g{constructor(){super(...arguments);this.inputs=[];this.visible=!1}get passwordField(){return this.field}render(){let e=this.passwordField,a=!!e.characterSeparated,r=a?typeof e.characterSeparated=="number"?e.characterSeparated:_e:0;return a?this.createFieldContainer(this.renderSeparated(r)):this.createFieldContainer(this.renderSingle())}renderSingle(){let a=!!this.passwordField.showToggle,r=document.createElement("input");if(r.type="password",r.value=this.value??"",r.id=this.getFieldId(),this.applyCommonProps(r),this.field.placeholder&&(r.placeholder=this.field.placeholder),r.addEventListener("input",i=>{this.onChange(i.target.value)}),r.addEventListener("blur",()=>this.onBlur()),!a)return r;let o=document.createElement("div");o.className="easy-form-password-inner",r.classList.add("easy-form-password-input"),o.appendChild(r);let s=document.createElement("button");return s.type="button",s.className="easy-form-password-toggle",s.setAttribute("aria-label","Mostrar contrase\xF1a"),s.innerHTML=X(!1),s.addEventListener("click",()=>{this.visible=!this.visible,r.type=this.visible?"text":"password",s.setAttribute("aria-label",this.visible?"Ocultar contrase\xF1a":"Mostrar contrase\xF1a"),s.innerHTML=X(this.visible)}),o.appendChild(s),o}renderSeparated(e){let r=!!this.passwordField.showToggle,o=this.value??"",s=String(o).slice(0,e),i=document.createElement("div");i.className="easy-form-password-separated";for(let n=0;n<e;n++){let l=document.createElement("input");l.type="password",l.maxLength=1,l.className="easy-form-password-separated-input",l.setAttribute("aria-label",`Car\xE1cter ${n+1} de ${e}`),s[n]&&(l.value=s[n]),this.applyCommonProps(l),l.id=n===0?this.getFieldId():`${this.getFieldId()}-${n}`,n>0&&l.removeAttribute("name");let d=n;l.addEventListener("input",m=>{m.target.value&&d<e-1&&this.inputs[d+1].focus(),this.updateSeparatedValue()}),l.addEventListener("keydown",m=>{m.key==="Backspace"&&!m.target.value&&d>0&&(this.inputs[d-1].focus(),this.inputs[d-1].value="",this.updateSeparatedValue()),m.key==="ArrowLeft"&&d>0&&(m.preventDefault(),this.inputs[d-1].focus()),m.key==="ArrowRight"&&d<e-1&&(m.preventDefault(),this.inputs[d+1].focus())}),l.addEventListener("paste",m=>{m.preventDefault();let u=((m.clipboardData||window.clipboardData)?.getData("text")||"").slice(0,e-d).split("");for(let b=0;b<u.length&&d+b<e;b++)this.inputs[d+b].value=u[b];let h=Math.min(d+u.length,e-1);this.inputs[h].focus(),this.updateSeparatedValue()}),l.addEventListener("focus",m=>m.target.select()),l.addEventListener("blur",()=>this.onBlur()),this.inputs.push(l),i.appendChild(l)}if(r){let n=document.createElement("div");n.className="easy-form-password-separated-toggle";let l=document.createElement("button");l.type="button",l.className="easy-form-password-toggle",l.setAttribute("aria-label","Mostrar contrase\xF1a"),l.innerHTML=X(!1),l.addEventListener("click",()=>{this.visible=!this.visible;let d=this.visible?"text":"password";this.inputs.forEach(m=>{m.type=d}),l.setAttribute("aria-label",this.visible?"Ocultar contrase\xF1a":"Mostrar contrase\xF1a"),l.innerHTML=X(this.visible)}),n.appendChild(l),i.appendChild(n)}return i}updateSeparatedValue(){let e=this.inputs.map(a=>a.value).join("");this.onChange(e||null)}};var te=class extends g{render(){let t=this.field,e=t.accept??"",a=t.multiple??!1,r=document.createElement("div");r.className="easy-form-file-drop",r.setAttribute("tabindex","0");let o=document.createElement("input");o.type="file",o.className="easy-form-file-drop-input",o.style.display="none",e&&(o.accept=e),a&&(o.multiple=!0);let s=document.createElement("span");s.className="easy-form-file-drop-label",s.textContent="Arrastra archivos aqu\xED o haz clic para seleccionar",r.appendChild(s),r.appendChild(o);let i=document.createElement("div");i.className="easy-form-file-drop-list";let n=d=>{let m=d?Array.isArray(d)?d.map(p=>p.name):[d.name]:[];if(i.innerHTML="",m.length===0){i.style.display="none";return}i.style.display="block",m.forEach(p=>{let u=document.createElement("div");u.className="easy-form-file-drop-item",u.textContent=p,i.appendChild(u)})};n(this.value);let l=d=>{if(!d||d.length===0)return;let m=a?Array.from(d):d[0];this.onChange(m),this.onBlur(),n(m)};return r.addEventListener("click",()=>{o.click()}),o.addEventListener("change",d=>{let m=d.target;l(m.files),m.value=""}),r.addEventListener("dragover",d=>{d.preventDefault(),d.stopPropagation(),r.classList.add("easy-form-file-drop-over")}),r.addEventListener("dragleave",d=>{d.preventDefault(),d.stopPropagation(),r.classList.remove("easy-form-file-drop-over")}),r.addEventListener("drop",d=>{d.preventDefault(),d.stopPropagation(),r.classList.remove("easy-form-file-drop-over"),l(d.dataTransfer?.files??null)}),r.appendChild(i),this.createFieldContainer(r)}};var Ye="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",re=class extends g{constructor(){super(...arguments);this.mapInstance=null;this.markerInstance=null}render(){let e=this.field,a=e.center??{lat:0,lng:0},r=e.zoom??13,o=this.value,s=typeof o=="object"&&o?.lat!=null?o.lat:a.lat,i=typeof o=="object"&&o?.lng!=null?o.lng:a.lng,n=document.createElement("div");n.className="easy-form-map";let l=document.createElement("div");l.className="easy-form-map-inputs";let d=document.createElement("input");d.type="number",d.step="any",d.placeholder="Latitud",d.value=String(s),d.className="easy-form-map-lat";let m=document.createElement("input");m.type="number",m.step="any",m.placeholder="Longitud",m.value=String(i),m.className="easy-form-map-lng";let p=()=>{let E=parseFloat(d.value),v=parseFloat(m.value);!isNaN(E)&&!isNaN(v)&&(this.onChange({lat:E,lng:v}),this.syncMarkerPosition(E,v)),this.onBlur()};d.addEventListener("change",p),m.addEventListener("change",p),l.appendChild(d),l.appendChild(m),n.appendChild(l);let u=document.createElement("div");u.className="easy-form-map-container",n.appendChild(u);let h="easy-form-leaflet-css",b=!1,f=document.createElement("link");return f.id=h,f.rel="stylesheet",f.href=Ye,f.onload=()=>{b=!0},n.insertBefore(f,n.firstChild),(async()=>{if(typeof window>"u")return;u.style.height="300px",u.style.width="100%",u.style.position="relative",u.style.overflow="hidden",u.style.display="block",await new Promise(x=>{let w=()=>{b&&u.offsetWidth>0&&u.offsetHeight>0?x(void 0):requestAnimationFrame(w)};w()}),await new Promise(x=>setTimeout(x,50));let E;try{E=await import("leaflet")}catch{u.innerHTML=`
|
|
2176
|
+
`}var xe={phone:{pattern:"(999) 999-9999",placeholder:"_"},"phone-us":{pattern:"(999) 999-9999",placeholder:"_"},"phone-international":{pattern:"+99 999 999 9999",placeholder:"_"},date:{pattern:"99/99/9999",placeholder:"_"},"date-us":{pattern:"99/99/9999",placeholder:"_"},"date-eu":{pattern:"99-99-9999",placeholder:"_"},"credit-card":{pattern:"9999 9999 9999 9999",placeholder:"_"},ssn:{pattern:"999-99-9999",placeholder:"_"},"zip-code":{pattern:"99999",placeholder:"_"},currency:{pattern:"$999,999.99",placeholder:"_",transform:c=>{let t=c.replace(/[^\d.]/g,"");return(parseFloat(t)||0).toFixed(2)}},percentage:{pattern:"999%",placeholder:"_",transform:c=>c.replace(/[^\d]/g,"")},time:{pattern:"99:99",placeholder:"_"},datetime:{pattern:"99/99/9999 99:99",placeholder:"_"}};function ue(c){return xe[c]}var D="El valor contiene caracteres o patrones no permitidos",We=[/\b(union|select|insert|update|delete|drop|exec|execute|declare)\s+(all\s+)?(select|from|into|table)/i,/\b(or|and)\s+['"]?\d+['"]?\s*=\s*['"]?\d+/i,/;\s*(drop|delete|truncate|alter)\s+/i,/--\s*$/,/\/\*[\s\S]*\*\//,/'\s*or\s+'1'\s*=\s*'1/i,/"\s*or\s+"1"\s*=\s*"1/i,/\bexec\s*\(/i,/\bxp_\w+/i,/<script\b[\s\S]*?>[\s\S]*?<\/script>/i,/<script\b/i,/javascript\s*:/i,/vbscript\s*:/i,/on\w+\s*=\s*["'][^"']*["']/i,/on\w+\s*=\s*[^\s>]+/i,/<iframe\b/i,/<object\b/i,/<embed\b/i,/\beval\s*\(/i,/document\.(cookie|write|location)/i,/window\.(location|open|eval)/i,/[;&|]\s*(ls|cat|rm|wget|curl|nc|bash|sh|python|perl)\s/i,/\$\s*\([^)]+\)/,/`[^`]+`/,/\|\s*\w+/,/\$\s*where\b/i,/\$\s*gt\b|\$\s*ne\b|\$\s*regex\b/i,/\{\{[^}]*\}\}/,/\$\{[^}]*\}/];function we(c){if(typeof c!="string"||c.length===0||c.trim().length===0)return!1;for(let e of We)if(e.test(c))return!0;return!1}function I(c){return c==null?!0:typeof c=="string"?!we(c):Array.isArray(c)?c.every(t=>I(t)):typeof c=="object"?Object.values(c).every(t=>I(t)):!0}var N=class{constructor(t){this.attempts=0;this.lockedUntil=null;this.unlockCheckInterval=null;this.maxAttempts=Math.max(1,t.maxAttempts),this.blockDurationMs=(t.blockDurationMinutes??5)*60*1e3,this.storageKey=t.storageKey,this.onLocked=t.onLocked,this.onUnlocked=t.onUnlocked,this.storageKey&&typeof sessionStorage<"u"&&this.loadFromStorage()}loadFromStorage(){if(!(!this.storageKey||typeof sessionStorage>"u"))try{let t=sessionStorage.getItem(this.storageKey);if(t){let e=JSON.parse(t);this.attempts=e.attempts??0,this.lockedUntil=e.lockedUntil??null,this.checkExpiration()}}catch{}}saveToStorage(){if(!(!this.storageKey||typeof sessionStorage>"u"))try{let t={attempts:this.attempts,lockedUntil:this.lockedUntil??void 0};sessionStorage.setItem(this.storageKey,JSON.stringify(t))}catch{}}checkExpiration(){return this.lockedUntil===null?!1:Date.now()>=this.lockedUntil?(this.reset(),this.onUnlocked?.(),!0):!1}startUnlockCheck(){this.unlockCheckInterval||(this.unlockCheckInterval=setInterval(()=>{this.checkExpiration()&&this.stopUnlockCheck()},1e3))}stopUnlockCheck(){this.unlockCheckInterval&&(clearInterval(this.unlockCheckInterval),this.unlockCheckInterval=null)}incrementAttempts(){this.attempts++,this.attempts>=this.maxAttempts?(this.lockedUntil=Date.now()+this.blockDurationMs,this.saveToStorage(),this.onLocked?.(this.blockDurationMs),this.startUnlockCheck()):this.saveToStorage()}isLocked(){return this.checkExpiration()?!1:this.lockedUntil!==null&&Date.now()<this.lockedUntil}getRemainingBlockTimeMs(){return this.checkExpiration()||this.lockedUntil===null?0:Math.max(0,this.lockedUntil-Date.now())}reset(){this.attempts=0,this.lockedUntil=null,this.stopUnlockCheck(),this.saveToStorage()}getAttempts(){return this.attempts}};function M(c){return c==null?"":typeof c=="boolean"?c?"true":"false":typeof c=="object"?JSON.stringify(c):String(c)}function F(c){if(!c)return null;try{return JSON.parse(c)}catch{return c}}function ut(c="ef"){return`${c}-${Math.random().toString(36).substr(2,9)}`}function A(c,t){return t.split(".").reduce((e,a)=>e?.[a],c)}function T(c,t,e){let a=t.split("."),r=a.pop(),o=a.reduce((s,i)=>((!s[i]||typeof s[i]!="object")&&(s[i]={}),s[i]),c);o[r]=e}function ke(c){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(c)}function ft(c){return c.replace(/[^a-zA-Z0-9-_]/g,"-")}var q=class{async validateField(t,e){return this.validateFieldWithValidations(t,e,t.validations||[])}async validateFieldWithValidations(t,e,a){let r=[];if(!a||a.length===0)return r;for(let o of a){let s=await this.validateValue(o,e);s.isValid||r.push(s.message||this.getDefaultMessage(o))}return r}async validateValue(t,e){switch(t.type){case"required":return this.validateRequired(e);case"email":return this.validateEmail(e);case"minLength":return this.validateMinLength(e,t.value);case"maxLength":return this.validateMaxLength(e,t.value);case"min":return this.validateMin(e,t.value);case"max":return this.validateMax(e,t.value);case"pattern":return this.validatePattern(e,t.value);case"custom":return await this.validateCustom(e,t);case"noInjection":return this.validateNoInjection(e,t);default:return{isValid:!0}}}validateRequired(t){let e=t!=null&&t!==""&&!(Array.isArray(t)&&t.length===0);return{isValid:e,message:e?void 0:"Este campo es requerido"}}validateEmail(t){if(!t)return{isValid:!0};let e=typeof t=="string"&&ke(t);return{isValid:e,message:e?void 0:"Debe ser un email v\xE1lido"}}validateMinLength(t,e){if(!t)return{isValid:!0};let r=String(t).length>=e;return{isValid:r,message:r?void 0:`Debe tener al menos ${e} caracteres`}}validateMaxLength(t,e){if(!t)return{isValid:!0};let r=String(t).length<=e;return{isValid:r,message:r?void 0:`Debe tener m\xE1ximo ${e} caracteres`}}validateMin(t,e){if(t==null||t==="")return{isValid:!0};let a=Number(t),r=!isNaN(a)&&a>=e;return{isValid:r,message:r?void 0:`Debe ser mayor o igual a ${e}`}}validateMax(t,e){if(t==null||t==="")return{isValid:!0};let a=Number(t),r=!isNaN(a)&&a<=e;return{isValid:r,message:r?void 0:`Debe ser menor o igual a ${e}`}}validatePattern(t,e){if(!t)return{isValid:!0};let a;if(e instanceof RegExp)a=e;else if(typeof e=="string")try{a=new RegExp(e)}catch{return console.warn("Invalid regex pattern:",e),{isValid:!0}}else return console.warn("Pattern validation expects string or RegExp, got:",typeof e,e),{isValid:!0};let r=a.test(String(t));return{isValid:r,message:r?void 0:"El formato no es v\xE1lido"}}validateNoInjection(t,e){if(t==null||t==="")return{isValid:!0};let a=I(t);return{isValid:a,message:a?void 0:e.message||D}}async validateCustom(t,e){try{let a=await e.validator(t);return{isValid:!!a,message:a?void 0:e.message||"Validaci\xF3n fallida"}}catch{return{isValid:!1,message:e.message||"Error en la validaci\xF3n"}}}getDefaultMessage(t){switch(t.type){case"required":return"Este campo es requerido";case"email":return"Debe ser un email v\xE1lido";case"minLength":return`Debe tener al menos ${t.value} caracteres`;case"maxLength":return`Debe tener m\xE1ximo ${t.value} caracteres`;case"min":return`Debe ser mayor o igual a ${t.value}`;case"max":return`Debe ser menor o igual a ${t.value}`;case"pattern":return"El formato no es v\xE1lido";case"custom":return"Validaci\xF3n fallida";case"noInjection":return D;default:return"Campo inv\xE1lido"}}shouldValidateField(t,e){if(t.hidden||t.disabled)return!1;if(t.dependencies)for(let[a,r]of Object.entries(t.dependencies)){if(!r||!r.field)continue;let o=e[r.field],s=!1;switch(r.operator){case"equals":s=o===r.value;break;case"notEquals":s=o!==r.value;break;case"contains":s=String(o).includes(String(r.value));break;case"notContains":s=!String(o).includes(String(r.value));break;case"greaterThan":s=Number(o)>Number(r.value);break;case"lessThan":s=Number(o)<Number(r.value);break;case"greaterThanOrEqual":s=Number(o)>=Number(r.value);break;case"lessThanOrEqual":s=Number(o)<=Number(r.value);break;case"in":s=Array.isArray(r.value)?r.value.includes(o):!1;break;case"notIn":s=Array.isArray(r.value)?!r.value.includes(o):!0;break;case"isEmpty":s=!o||o===""||Array.isArray(o)&&o.length===0;break;case"isNotEmpty":s=o&&o!==""&&!(Array.isArray(o)&&o.length===0);break;default:s=!0}if((a==="hide"||a==="disable")&&(s=!s),!s)return!1}return!0}async validateForm(t,e){let a={};for(let r of t){if(!this.shouldValidateField(r,e))continue;let o=e[r.name],s=await this.validateField(r,o);s.length>0&&(a[r.name]=s)}return a}};var V=class{evaluateCondition(t,e){let a=this.getFieldValue(t.field,e);return this.compareValues(a,t.operator,t.value)}evaluateConditions(t,e,a="and"){let r=Array.isArray(t)?t:[t];return r.length===0?!0:a==="and"?r.every(o=>this.evaluateCondition(o,e)):r.some(o=>this.evaluateCondition(o,e))}evaluateDependencies(t,e){let a=!0,r=!0,o=!1;if(t.show&&(a=this.evaluateConditions(t.show,e)),t.hide){let s=this.evaluateConditions(t.hide,e);a=a&&!s}if(t.enable&&(r=this.evaluateConditions(t.enable,e)),t.disable){let s=this.evaluateConditions(t.disable,e);r=r&&!s}if(t.required&&(o=this.evaluateConditions(t.required,e)),t.optional){let s=this.evaluateConditions(t.optional,e);o=o&&!s}return{visible:a,enabled:r,required:o}}getFieldValue(t,e){let a=t.split("."),r=e;for(let o of a){if(r==null)return null;r=r[o]}return r}compareValues(t,e,a){switch(e){case"equals":return this.deepEqual(t,a);case"notEquals":return!this.deepEqual(t,a);case"contains":return Array.isArray(t)?t.includes(a):typeof t=="string"?t.includes(String(a)):!1;case"notContains":return!this.compareValues(t,"contains",a);case"greaterThan":return this.toNumber(t)>this.toNumber(a);case"lessThan":return this.toNumber(t)<this.toNumber(a);case"greaterThanOrEqual":return this.toNumber(t)>=this.toNumber(a);case"lessThanOrEqual":return this.toNumber(t)<=this.toNumber(a);case"in":return Array.isArray(a)?a.includes(t):!1;case"notIn":return!this.compareValues(t,"in",a);case"isEmpty":return t==null||t===""||Array.isArray(t)&&t.length===0;case"isNotEmpty":return!this.compareValues(t,"isEmpty",a);case"regex":try{return(typeof a=="string"?new RegExp(a):a).test(String(t||""))}catch{return!1}default:return!1}}deepEqual(t,e){if(t===e)return!0;if(t===null||e===null||t===void 0||e===void 0)return t===e;if(typeof t!=typeof e)return!1;if(Array.isArray(t)&&Array.isArray(e))return t.length!==e.length?!1:t.every((a,r)=>this.deepEqual(a,e[r]));if(typeof t=="object"){let a=Object.keys(t),r=Object.keys(e);return a.length!==r.length?!1:a.every(o=>this.deepEqual(t[o],e[o]))}return!1}toNumber(t){if(typeof t=="number")return t;if(typeof t=="string"){let e=parseFloat(t);return isNaN(e)?0:e}return 0}};var P=class{constructor(){this.wizardState=null;this.schema=null;this.dependencyCache=new Map;this.fieldDependencies=new Map;this.parser=new z,this.validator=new q,this.conditionEngine=new V,this.state=this.createInitialState()}createInitialState(){return{values:{},errors:{},touched:{},isValid:!0,isSubmitting:!1}}initializeSchema(t,e){this.schema=this.parser.parse(t),this.initializeValues(e),this.initializeWizard(),this.buildDependencyMap()}extractAllFields(t){let e=[];for(let a of t)e.push(a),a.type==="group"&&"fields"in a&&e.push(...this.extractAllFields(a.fields)),a.type==="row"&&"fields"in a&&e.push(...this.extractAllFields(a.fields));return e}getArrayItemOnlyFieldNames(t){let e=new Set(t.map(r=>r.name)),a=new Set;for(let r of t)if(r.type==="array"&&"itemSchema"in r&&r.itemSchema?.fields)for(let o of r.itemSchema.fields)e.has(o.name)||a.add(o.name);return a}findFieldPath(t,e,a=""){for(let r of e){let o=a?`${a}.${r.name}`:r.name;if(r.name===t)return o;if(r.type==="group"&&"fields"in r){let s=this.findFieldPath(t,r.fields,o);if(s)return s}if(r.type==="row"&&"fields"in r){let s=this.findFieldPath(t,r.fields,o);if(s)return s}}return null}buildDependencyMap(){if(this.fieldDependencies.clear(),this.dependencyCache.clear(),!this.schema)return;let t=this.schema.isWizard?this.schema.steps.flatMap(a=>a.fields):this.schema.fields||[],e=this.extractAllFields(t);for(let a of e){if(!a.dependencies)continue;let r=this.extractObservedFields(a.dependencies);for(let o of r)this.fieldDependencies.has(o)||this.fieldDependencies.set(o,new Set),this.fieldDependencies.get(o).add(a.name)}}extractObservedFields(t){let e=new Set,a=o=>{o&&o.field&&e.add(o.field)},r=o=>{Array.isArray(o)?o.forEach(a):o&&a(o)};return t.show&&r(t.show),t.hide&&r(t.hide),t.enable&&r(t.enable),t.disable&&r(t.disable),t.required&&r(t.required),t.optional&&r(t.optional),e}initializeValues(t){if(!this.schema)return;let e=this.schema.isWizard?this.schema.steps.flatMap(i=>i.fields):this.schema.fields||[],a=this.extractAllFields(e),r={...this.state.values},o={};if(t)for(let i in t){let n=t[i];n!=null&&T(o,i,n)}for(let i of a){let n=A(o,i.name);if(n!=null)continue;let l=A(r,i.name);l!=null?T(o,i.name,l):this.initializeFieldValue(i,o)}let s=this.getArrayItemOnlyFieldNames(e);for(let i in r)s.has(i)||i in o||(o[i]=r[i]);for(let i of e)if(i.type==="array"&&"minItems"in i&&"itemSchema"in i){let n=i,l=n.minItems??0;if(l>=1&&n.itemSchema?.fields?.length){let d=A(o,i.name);if(Array.isArray(d)&&d.length<l){let m=[...d];for(let p=d.length;p<l;p++){let u={};for(let h of n.itemSchema.fields)this.initializeFieldValue(h,u);m.push(u)}T(o,i.name,m)}}}for(let i of s)i in o&&delete o[i];this.state.values=o}initializeFieldValue(t,e){if(t.defaultValue!==void 0)e[t.name]=t.defaultValue;else switch(t.type){case"checkbox":case"switch":e[t.name]=t.checked||!1;break;case"select":"multiple"in t&&t.multiple?e[t.name]=[]:e[t.name]=null;break;case"array":{let a=t,r=a.minItems??0,o=a.itemSchema?.fields;if(r>=1&&o?.length){let s=[];for(let i=0;i<r;i++){let n={};for(let l of o)this.initializeFieldValue(l,n);s.push(n)}e[t.name]=s}else e[t.name]=[];break}case"group":if(e[t.name]={},"fields"in t)for(let a of t.fields)this.initializeFieldValue(a,e[t.name]);break;case"colorpicker":e[t.name]=t.defaultValue??"#000000";break;default:e[t.name]=null}}initializeWizard(){if(!this.schema||!this.schema.isWizard){this.wizardState=null;return}this.wizardState={currentStep:0,totalSteps:this.schema.steps.length,completedSteps:[]}}getState(){return{...this.state}}getWizardState(){return this.wizardState?{...this.wizardState}:null}getValue(t){return A(this.state.values,t)}createDefaultArrayItem(t){let a=t.itemSchema?.fields;if(!a?.length)return{};let r={};for(let o of a)this.initializeFieldValue(o,r);return r}async setValue(t,e){T(this.state.values,t,e),this.state.touched[t]=!0,this.invalidateDependencyCache(t),this.state.touched[t]&&this.schema&&await this.validateField(t);let a=this.fieldDependencies.get(t);if(a)for(let r of a)await this.validateField(r);this.updateValidity()}invalidateDependencyCache(t){let e=this.fieldDependencies.get(t);if(e)for(let a of e)this.dependencyCache.delete(a)}setValueWithoutValidation(t,e){T(this.state.values,t,e),this.invalidateDependencyCache(t)}async validateField(t){if(!this.schema)return;let e=this.schema.isWizard?this.schema.steps.flatMap(n=>n.fields):this.schema.fields||[],r=this.extractAllFields(e).find(n=>n.name===t);if(!r)return;if(!this.getFieldVisibility(t)){delete this.state.errors[t];return}let o=this.getValue(t),s=this.getActiveValidations(r),i=await this.validator.validateFieldWithValidations(r,o,s);i.length>0?this.state.errors[t]=i:delete this.state.errors[t]}getActiveValidations(t){let e=[...t.validations||[]],a=["text","email","password","textarea"],r=t.skipInjectionValidation??t.props?.skipInjectionValidation;a.includes(t.type)&&!r&&!e.some(i=>i.type==="noInjection")&&(e=[{type:"noInjection"},...e]);let o=this.getFieldRequired(t.name),s=e.some(i=>i.type==="required");if(o&&!s?e=[{type:"required"},...e]:!o&&s&&(e=e.filter(i=>i.type!=="required")),t.conditionalValidations)for(let i of t.conditionalValidations)this.conditionEngine.evaluateConditions(i.condition,this.state.values)&&(e=[...e,...i.validations]);return e}async validateForm(){if(!this.schema)return{};let t=this.schema.isWizard?this.schema.steps.flatMap(r=>r.fields):this.schema.fields||[],e=this.extractAllFields(t),a=await this.validator.validateForm(e,this.state.values);return this.state.errors=a,this.updateValidity(),a}updateValidity(){this.state.isValid=Object.keys(this.state.errors).length===0}setTouched(t){this.state.touched[t]=!0}getErrors(t){return this.state.errors[t]||[]}getAllErrors(){return{...this.state.errors}}reset(){this.state=this.createInitialState(),this.schema&&(this.initializeValues(),this.initializeWizard())}nextStep(){return this.wizardState&&this.wizardState.currentStep<this.wizardState.totalSteps-1?(this.wizardState.currentStep++,!0):!1}previousStep(){return this.wizardState&&this.wizardState.currentStep>0?(this.wizardState.currentStep--,!0):!1}goToStep(t){return this.wizardState&&t>=0&&t<this.wizardState.totalSteps?(this.wizardState.currentStep=t,!0):!1}completeStep(t){this.wizardState&&(this.wizardState.completedSteps.includes(t)||this.wizardState.completedSteps.push(t))}setSubmitting(t){this.state.isSubmitting=t}getCurrentStepFields(){return!this.schema||!this.schema.isWizard||!this.wizardState?this.schema?.fields||[]:this.schema.steps[this.wizardState.currentStep].fields}getFieldVisibility(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.visible;if(!this.schema)return!0;let a=this.schema.isWizard?this.schema.steps.flatMap(d=>d.fields):this.schema.fields||[],r=this.extractAllFields(a),o=r.find(d=>this.findFieldPath(d.name,a)===t||d.name===t);if(o||(o=r.find(d=>d.name===t)),!o||!o.dependencies)return!o?.hidden;let s=this.findFieldPath(o.name,a)||o.name,i=s.includes(".")?s.split(".").slice(0,-1).join("."):"",n={...this.state.values};if(i&&o.dependencies){let d=A(this.state.values,i);if(d&&typeof d=="object"){let m=(u,h="")=>{let b={};for(let[f,y]of Object.entries(u)){let E=h?`${h}.${f}`:f;y&&typeof y=="object"&&!Array.isArray(y)&&y!==null?Object.assign(b,m(y,E)):b[E]=y}return b},p=m(d);n={...this.state.values,...p}}}let l=this.conditionEngine.evaluateDependencies(o.dependencies,n);return this.dependencyCache.set(t,l),l.visible&&!o.hidden}getFieldEnabled(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.enabled;if(!this.schema)return!0;let a=this.schema.isWizard?this.schema.steps.flatMap(i=>i.fields):this.schema.fields||[],o=this.extractAllFields(a).find(i=>i.name===t);if(!o)return!0;if(o.disabled)return!1;if(!o.dependencies)return!0;let s=this.conditionEngine.evaluateDependencies(o.dependencies,this.state.values);return this.dependencyCache.set(t,s),s.enabled}getFieldRequired(t){let e=this.dependencyCache.get(t);if(e!==void 0)return e.required;if(!this.schema)return!1;let a=this.schema.isWizard?this.schema.steps.flatMap(n=>n.fields):this.schema.fields||[],o=this.extractAllFields(a).find(n=>n.name===t);if(!o)return!1;let s=o.validations?.some(n=>n.type==="required")||!1;if(!o.dependencies)return s;let i=this.conditionEngine.evaluateDependencies(o.dependencies,this.state.values);return this.dependencyCache.set(t,i),i.required||s}getDependentFields(t){return Array.from(this.fieldDependencies.get(t)||[])}};var g=class{constructor(t,e,a,r,o){this.field=t,this.value=e,this.error=a,this.onChange=r,this.onBlur=o}createInputWithSlots(t){let e=this.field.leadingIcon,a=this.field.trailingIcon;if(!e&&!a)return t;let r=document.createElement("div");if(r.className="easy-form-input-wrapper",e&&this.isSlotContentValid(e)){let s=this.renderSlotContent(e);s.className="easy-form-input-slot easy-form-input-slot-leading",r.appendChild(s)}let o=document.createElement("div");if(o.className="easy-form-input-core",o.appendChild(t),r.appendChild(o),a&&this.isSlotContentValid(a)){let s=this.renderSlotContent(a);s.className="easy-form-input-slot easy-form-input-slot-trailing",r.appendChild(s)}return r}isSlotContentValid(t){return t.type?t.type==="image"?!!t.src:t.type==="html"?!!t.html:!1:!1}renderSlotContent(t){let e=document.createElement("span");if(e.className="easy-form-input-slot-content",t.type==="image"&&t.src){let a=document.createElement("img");a.src=t.src,a.alt=t.alt??"",a.setAttribute("aria-hidden","true"),e.appendChild(a)}else t.type==="html"&&t.html&&(e.innerHTML=t.html);return e}createFieldContainer(t){let e=document.createElement("div"),r=Array.from(t.classList).filter(l=>l.startsWith("easy-form-")&&l!=="easy-form-field"&&(l.includes("-container")||l.includes("-wrapper"))),o=this.field.labelPosition??"up",s=this.createInputWithSlots(t);if(r.length>0?e.className=`easy-form-field easy-form-label-${o} ${r.join(" ")}`:e.className=`easy-form-field easy-form-label-${o}`,o==="none"&&this.field.label){let l=s.querySelector("input, textarea, select")||s;l instanceof HTMLElement&&l.setAttribute("aria-label",this.field.label)}let n=(()=>{if(!this.field.label||o==="none")return null;let l=document.createElement("label");if(l.className="easy-form-label",l.setAttribute("for",this.getFieldId()),l.textContent=this.field.label,this.field.validations?.some(d=>d.type==="required")){let d=document.createElement("span");d.className="easy-form-required",d.textContent=" *",l.appendChild(d)}return l})();if(o==="up")n&&e.appendChild(n),e.appendChild(s);else if(o==="down")e.appendChild(s),n&&e.appendChild(n);else if(o==="left"){let l=document.createElement("div");l.className="easy-form-field-inner easy-form-field-inner-horizontal",n&&l.appendChild(n),l.appendChild(s),e.appendChild(l)}else if(o==="right"){let l=document.createElement("div");l.className="easy-form-field-inner easy-form-field-inner-horizontal",l.appendChild(s),n&&l.appendChild(n),e.appendChild(l)}else e.appendChild(s);if(this.field.description){let l=document.createElement("p");l.className="easy-form-description",l.textContent=this.field.description,e.appendChild(l)}if(this.error){let l=document.createElement("p");l.className="easy-form-error",l.textContent=this.error,e.appendChild(l)}return e}getFieldId(){return`easy-form-${this.field.name}`}applyCommonProps(t){if(t.id=this.getFieldId(),t.setAttribute("name",this.field.name),this.field.disabled&&(t.setAttribute("disabled","true"),t.classList.add("easy-form-input-disabled")),this.field.hidden&&(t.style.display="none",t.classList.add("easy-form-field-hidden")),this.error&&t.classList.add("easy-form-input-error"),this.field.props)for(let[e,a]of Object.entries(this.field.props))(e.startsWith("data-")||e.startsWith("aria-"))&&t.setAttribute(e,String(a))}};function Ee(c){let t=[];for(let e=0;e<c.length;e++){let a=c[e];switch(a){case"9":t.push({type:"digit",char:"9",editable:!0});break;case"a":case"A":t.push({type:"letter",char:a,editable:!0});break;case"*":t.push({type:"any",char:"*",editable:!0});break;default:t.push({type:"literal",char:a,editable:!1});break}}return t}function R(c,t){let e="",a=0;for(let r of t){if(!r.editable){e+=r.char;continue}if(a>=c.length)break;let o=c[a];if(!(r.type==="digit"&&!/\d/.test(o))){{if(r.type==="letter"&&!/[a-zA-Z]/.test(o))continue;if(r.type!=="any"){if(r.type!=="any"&&r.type!=="digit"&&r.type!=="letter")continue}}e+=o,a++}}return e}function fe(c,t){if(!c)return"";let e="",a=0;for(let r=0;r<c.length&&a<t.length;r++){let o=c[r],s=t[a];if(s.editable)s.type==="digit"&&/\d/.test(o)||s.type==="letter"&&/[a-zA-Z]/.test(o)||s.type==="any"?(e+=o,a++):(a++,r--);else if(o===s.char)a++;else if(a<t.length-1){let i=t[a+1];i&&i.editable&&(i.type==="digit"&&/\d/.test(o)||i.type==="letter"&&/[a-zA-Z]/.test(o)||i.type==="any")?(e+=o,a+=2):a++}else break}return e}function H(c,t,e="forward"){if(e==="forward"){for(let a=c+1;a<t.length;a++)if(t[a].editable)return a;return t.length}else{for(let a=c-1;a>=0;a--)if(t[a].editable)return a;return 0}}function Ce(c,t="_"){return c.map(e=>e.editable?t:e.char).join("")}function Se(c,t,e,a){let r=0;for(let s=0;s<Math.min(e,c.length);s++){let i=s;i<a.length&&a[i].editable&&r++}let o=0;for(let s=0;s<t.length&&s<a.length;s++)if(a[s].editable&&(o++,o>r))return s+1;return H(Math.min(e,t.length-1),a,"forward")}var L=class{constructor(){this.tokenCache=new Map}getCustomMask(t){return t.custom?t.custom:t.type?ue(t.type):null}getTokens(t){let e=this.getCustomMask(t);if(!e)return null;let a=e.pattern;if(this.tokenCache.has(a))return this.tokenCache.get(a);let r=Ee(e.pattern);return this.tokenCache.set(a,r),r}applyMask(t,e){let a=this.getTokens(e);if(!a)return t;let r=this.getCustomMask(e),o=a.filter(l=>l.editable),s=new Set(o.map(l=>l.type)),i="";for(let l of t)(s.has("any")||s.has("digit")&&/\d/.test(l)||s.has("letter")&&/[a-zA-Z]/.test(l))&&(i+=l);let n=R(i,a);return r.transform&&(n=r.transform(n),n=R(n,a)),n}removeMask(t,e){let a=this.getTokens(e);return a?fe(t,a):t}getMaskPlaceholder(t){let e=this.getTokens(t);if(!e)return"";let a=this.getCustomMask(t);return Ce(e,a.placeholder||"_")}canInsertChar(t,e,a){let r=this.getTokens(a);if(!r||e>=r.length)return!1;let o=r[e];if(!o.editable)return!1;switch(o.type){case"digit":return/\d/.test(t);case"letter":return/[a-zA-Z]/.test(t);case"any":return!0;default:return!1}}processInput(t,e,a,r){let o=this.getTokens(a);if(!o)return{value:t,cursorPosition:t.length};let s=fe(t,o),i=R(s,o),n=this.getCustomMask(a);n.transform&&(i=n.transform(i),i=R(i,o));let l=Se(e,i,r,o);return{value:i,cursorPosition:Math.min(l,i.length)}}processKeyInput(t,e,a,r,o=!1){let s=this.getTokens(r);if(!s)return{value:e,cursorPosition:a};if(o){if(a===0)return{value:e,cursorPosition:0};let i=H(a-1,s,"backward"),n=e.substring(0,i),l=e.substring(a),d=n+l,m=this.removeMask(d,r),p=this.applyMask(m,r),u=Math.max(0,i-1),h=H(u,s,"forward");return{value:p,cursorPosition:h}}if(t.length===1&&this.canInsertChar(t,a,r)){let i=e.substring(0,a),n=e.substring(a),l=i+t+n;return this.processInput(l,e,r,a)}return{value:e,cursorPosition:a}}};var $=class extends g{constructor(e,a,r,o,s){super(e,a,r,o,s);this.maskEngine=null;this.previousValue="";e.mask&&(this.maskEngine=new L)}render(){let e=document.createElement("input");e.type=this.field.type==="email"?"email":this.field.type==="password"?"password":"text";let a=this.value??"";if(this.maskEngine&&this.field.mask&&(a&&(a=this.maskEngine.applyMask(String(a),this.field.mask)),this.previousValue=a),e.value=a,this.applyCommonProps(e),this.field.placeholder)e.placeholder=this.field.placeholder;else if(this.maskEngine&&this.field.mask){let r=this.maskEngine.getMaskPlaceholder(this.field.mask);r&&(e.placeholder=r)}return this.maskEngine&&this.field.mask?(e.addEventListener("input",r=>{let o=r.target,s=o.selectionStart||0,i=o.value,n=this.maskEngine.processInput(i,this.previousValue,this.field.mask,s);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=this.field.mask.keepFormat?n.value:this.maskEngine.removeMask(n.value,this.field.mask);this.onChange(l)}),e.addEventListener("keydown",r=>{let o=r.target,s=o.selectionStart||0;if(r.key==="Backspace"||r.key==="Delete"){r.preventDefault();let i=r.key==="Backspace",n=this.maskEngine.processKeyInput("",o.value,s,this.field.mask,i);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=this.field.mask.keepFormat?n.value:this.maskEngine.removeMask(n.value,this.field.mask);this.onChange(l)}}),e.addEventListener("paste",r=>{r.preventDefault();let o=(r.clipboardData||window.clipboardData).getData("text");if(o){let s=r.target,i=s.selectionStart||0,n=s.value.substring(0,i),l=s.value.substring(i),d=n+o+l,m=this.maskEngine.processInput(d,this.previousValue,this.field.mask,i);s.value=m.value,this.previousValue=m.value,setTimeout(()=>{s.setSelectionRange(m.cursorPosition,m.cursorPosition)},0);let p=this.field.mask.keepFormat?m.value:this.maskEngine.removeMask(m.value,this.field.mask);this.onChange(p)}})):e.addEventListener("input",r=>{let o=r.target;this.onChange(o.value)}),e.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(e)}};var B=class extends g{constructor(e,a,r,o,s){super(e,a,r,o,s);this.maskEngine=null;this.previousValue="";e.mask&&(this.maskEngine=new L)}render(){let e=document.createElement("input");if(this.maskEngine&&this.field.mask){e.type="text";let r=this.value??"";r!==null&&r!==""&&(this.field.mask.type==="currency"?r=this.maskEngine.applyMask(String(r),this.field.mask):this.field.mask.type==="percentage"&&(r=this.maskEngine.applyMask(String(r),this.field.mask))),this.previousValue=r,e.value=r}else e.type="number",e.value=this.value??"";let a=this.field;if(!this.maskEngine&&e.type==="number"&&(a.min!==void 0&&(e.min=String(a.min)),a.max!==void 0&&(e.max=String(a.max)),a.step!==void 0&&(e.step=String(a.step))),this.applyCommonProps(e),this.field.placeholder)e.placeholder=this.field.placeholder;else if(this.maskEngine&&this.field.mask){let r=this.maskEngine.getMaskPlaceholder(this.field.mask);r&&(e.placeholder=r)}return this.maskEngine&&this.field.mask?(e.addEventListener("input",r=>{let o=r.target,s=o.selectionStart||0,i=o.value,n=this.maskEngine.processInput(i,this.previousValue,this.field.mask,s);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=null;if(this.field.mask.type==="currency"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d):null}this.onChange(l)}),e.addEventListener("keydown",r=>{let o=r.target,s=o.selectionStart||0;if(r.key==="Backspace"||r.key==="Delete"){r.preventDefault();let i=r.key==="Backspace",n=this.maskEngine.processKeyInput("",o.value,s,this.field.mask,i);o.value=n.value,this.previousValue=n.value,setTimeout(()=>{o.setSelectionRange(n.cursorPosition,n.cursorPosition)},0);let l=null;if(this.field.mask.type==="currency"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let d=this.maskEngine.removeMask(n.value,this.field.mask);l=d?parseFloat(d):null}this.onChange(l)}}),e.addEventListener("paste",r=>{r.preventDefault();let o=(r.clipboardData||window.clipboardData).getData("text");if(o){let s=r.target,i=s.selectionStart||0,n=s.value.substring(0,i),l=s.value.substring(i),d=n+o+l,m=this.maskEngine.processInput(d,this.previousValue,this.field.mask,i);s.value=m.value,this.previousValue=m.value,setTimeout(()=>{s.setSelectionRange(m.cursorPosition,m.cursorPosition)},0);let p=null;if(this.field.mask.type==="currency"){let u=this.maskEngine.removeMask(m.value,this.field.mask);p=u?parseFloat(u.replace(/[^\d.]/g,"")):null}else if(this.field.mask.type==="percentage"){let u=this.maskEngine.removeMask(m.value,this.field.mask);p=u?parseFloat(u):null}this.onChange(p)}})):e.addEventListener("input",r=>{let o=r.target,s=o.value===""?null:Number(o.value);this.onChange(s)}),e.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(e)}};var O=class extends g{render(){let t=document.createElement("textarea");t.value=this.value??"",t.placeholder=this.field.placeholder||"";let e=this.field;return e.rows&&(t.rows=e.rows),e.cols&&(t.cols=e.cols),this.applyCommonProps(t),t.addEventListener("input",a=>{let r=a.target;this.onChange(r.value)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var j=class extends g{render(){let t=document.createElement("select"),e=this.field;if(e.multiple&&(t.multiple=!0),!e.multiple){let r=document.createElement("option");r.value="",r.textContent=e.placeholder||"Selecciona una opci\xF3n",r.setAttribute("data-placeholder",""),r.disabled=!0,t.appendChild(r)}for(let r of e.options){let o=document.createElement("option");typeof r=="string"?(o.value=r,o.textContent=r):(o.value=String(r.value),o.textContent=r.label),t.appendChild(o)}if(e.multiple&&Array.isArray(this.value))for(let r of t.options)r.selected=this.value.includes(r.value);else t.value=this.value??"";this.applyCommonProps(t);let a=()=>{!t.value?t.classList.add("easy-form-select-placeholder"):t.classList.remove("easy-form-select-placeholder")};return a(),t.addEventListener("change",r=>{let o=r.target;if(a(),e.multiple){let s=Array.from(o.selectedOptions).map(i=>i.value);this.onChange(s)}else this.onChange(o.value||null)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var W=class extends g{render(){let t=document.createElement("input");t.type="checkbox",t.checked=!!this.value,this.applyCommonProps(t),t.addEventListener("change",r=>{let o=r.target;this.onChange(o.checked)}),t.addEventListener("blur",()=>{this.onBlur()});let e=document.createElement("div");e.className="easy-form-field";let a=document.createElement("label");if(a.className="easy-form-label-checkbox",a.setAttribute("for",this.getFieldId()),a.appendChild(t),this.field.label){let r=document.createTextNode(this.field.label);a.appendChild(r)}if(e.appendChild(a),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,e.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,e.appendChild(r)}return e}};var _=class extends g{render(){let t=document.createElement("div");if(t.className="easy-form-field",this.field.label){let r=document.createElement("label");if(r.className="easy-form-label",r.textContent=this.field.label,this.field.validations?.some(o=>o.type==="required")){let o=document.createElement("span");o.className="easy-form-required",o.textContent=" *",r.appendChild(o)}t.appendChild(r)}let e=document.createElement("div");e.className="easy-form-radio-group";let a=this.field;for(let r of a.options){let o=typeof r=="string"?r:r.value,s=typeof r=="string"?r:r.label,i=document.createElement("div");i.className="easy-form-radio-option";let n=document.createElement("input");n.type="radio",n.name=this.field.name,n.id=`${this.getFieldId()}-${o}`,n.value=String(o),n.checked=String(this.value)===String(o),this.field.disabled&&(n.disabled=!0);let l=document.createElement("label");l.setAttribute("for",n.id),l.textContent=s,l.className="easy-form-radio-label",n.addEventListener("change",()=>{this.onChange(o)}),n.addEventListener("blur",()=>{this.onBlur()}),i.appendChild(n),i.appendChild(l),e.appendChild(i)}if(t.appendChild(e),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,t.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,t.appendChild(r)}return t}};var Y=class extends g{render(){let t=document.createElement("input");t.type="checkbox",t.className="easy-form-switch",t.checked=!!this.value,this.applyCommonProps(t),t.addEventListener("change",r=>{let o=r.target;this.onChange(o.checked)}),t.addEventListener("blur",()=>{this.onBlur()});let e=document.createElement("div");e.className="easy-form-field";let a=document.createElement("label");if(a.className="easy-form-label-switch",a.setAttribute("for",this.getFieldId()),this.field.label){let r=document.createTextNode(this.field.label);a.appendChild(r)}if(a.appendChild(t),e.appendChild(a),this.field.description){let r=document.createElement("p");r.className="easy-form-description",r.textContent=this.field.description,e.appendChild(r)}if(this.error){let r=document.createElement("p");r.className="easy-form-error",r.textContent=this.error,e.appendChild(r)}return e}};var U=class extends g{render(){let t=document.createElement("input");t.type="date";let e=this.field;if(e.min&&(t.min=e.min),e.max&&(t.max=e.max),this.value){let a=this.value instanceof Date?this.value.toISOString().split("T")[0]:String(this.value);t.value=a}return this.applyCommonProps(t),t.addEventListener("change",a=>{let r=a.target;this.onChange(r.value||null)}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var G=class extends g{render(){let t=document.createElement("input");t.type="file";let e=this.field;return e.accept&&(t.accept=e.accept),e.multiple&&(t.multiple=!0),this.applyCommonProps(t),t.addEventListener("change",a=>{let r=a.target;r.files&&(e.multiple?this.onChange(Array.from(r.files)):this.onChange(r.files[0]||null))}),t.addEventListener("blur",()=>{this.onBlur()}),this.createFieldContainer(t)}};var K=class extends g{render(){let t=document.createElement("div");t.className="easy-form-quantity-container";let e=this.field,a=e.min??0,r=e.max??void 0,o=e.step??1,s=this.value??a,i=document.createElement("div");i.className="easy-form-quantity-wrapper";let n=document.createElement("button");n.type="button",n.className="easy-form-quantity-btn easy-form-quantity-decrement",n.textContent="\u2212",n.setAttribute("aria-label","Decrementar"),s<=a&&(n.disabled=!0,n.classList.add("disabled"));let l=document.createElement("input");l.type="number",l.value=String(s),l.min=String(a),r!==void 0&&(l.max=String(r)),l.step=String(o),l.className="easy-form-quantity-input",this.applyCommonProps(l);let d=document.createElement("button");d.type="button",d.className="easy-form-quantity-btn easy-form-quantity-increment",d.textContent="+",d.setAttribute("aria-label","Incrementar"),r!==void 0&&s>=r&&(d.disabled=!0,d.classList.add("disabled")),n.addEventListener("click",()=>{let p=Math.max(a,Number(l.value)-o);l.value=String(p),this.onChange(p),m()}),d.addEventListener("click",()=>{let p=r!==void 0?Math.min(r,Number(l.value)+o):Number(l.value)+o;l.value=String(p),this.onChange(p),m()}),l.addEventListener("input",p=>{let u=p.target,h=Number(u.value);isNaN(h)&&(h=a),h<a&&(h=a),r!==void 0&&h>r&&(h=r),u.value=String(h),this.onChange(h),m()}),l.addEventListener("blur",()=>{this.onBlur()});let m=()=>{let p=Number(l.value);n.disabled=p<=a,n.classList.toggle("disabled",p<=a),r!==void 0?(d.disabled=p>=r,d.classList.toggle("disabled",p>=r)):(d.disabled=!1,d.classList.remove("disabled"))};return i.appendChild(n),i.appendChild(l),i.appendChild(d),t.appendChild(i),this.createFieldContainer(t)}};var Z=class extends g{constructor(){super(...arguments);this.openAccordion=null}render(){let e=document.createElement("div");e.className="easy-form-accordion-select-container";let a=this.field,r=this.value??null;return a.options.forEach((o,s)=>{let i=typeof o=="string"?o:o.value,n=typeof o=="string"?o:o.label,l=typeof o=="object"&&"description"in o&&o.description?o.description:void 0,d=document.createElement("div");d.className="easy-form-accordion-item",d.setAttribute("data-value",String(i)),(r===i||Array.isArray(r)&&r.includes(i))&&(d.classList.add("selected"),a.multiple||(this.openAccordion=String(i)));let m=document.createElement("div");m.className="easy-form-accordion-header",m.setAttribute("role","button"),m.setAttribute("tabindex","0"),m.setAttribute("aria-expanded","false");let p=document.createElement("div");p.className="easy-form-accordion-header-content";let u=document.createElement("div");u.className="easy-form-accordion-indicator",a.multiple?(u.classList.add("checkbox"),Array.isArray(r)&&r.includes(i)&&u.classList.add("checked")):(u.classList.add("radio"),r===i&&u.classList.add("checked"));let h=document.createElement("span");h.className="easy-form-accordion-label",h.textContent=n;let b=document.createElement("span");b.className="easy-form-accordion-arrow",b.textContent="\u25BC",p.appendChild(u),p.appendChild(h),m.appendChild(p),m.appendChild(b);let f=document.createElement("div");if(f.className="easy-form-accordion-content",l){let v=document.createElement("p");v.className="easy-form-accordion-description",v.textContent=l,f.appendChild(v)}if(typeof o=="object"&&"content"in o&&o.content){let v=document.createElement("div");v.className="easy-form-accordion-custom-content",typeof o.content=="string"?v.innerHTML=o.content:o.content instanceof HTMLElement&&v.appendChild(o.content),f.appendChild(v)}d.appendChild(m),d.appendChild(f);let y=()=>{let v=d.classList.contains("open");a.multiple||e.querySelectorAll(".easy-form-accordion-item").forEach(C=>{if(C!==d){C.classList.remove("open");let k=C.querySelector(".easy-form-accordion-header"),x=C.querySelector(".easy-form-accordion-content"),w=C.querySelector(".easy-form-accordion-arrow");k&&k.setAttribute("aria-expanded","false"),x&&(x.style.maxHeight=null),w&&(w.style.transform="rotate(0deg)")}}),v?(d.classList.remove("open"),m.setAttribute("aria-expanded","false"),f.style.maxHeight=null,b.style.transform="rotate(0deg)",this.openAccordion=null):(d.classList.add("open"),m.setAttribute("aria-expanded","true"),f.style.maxHeight=f.scrollHeight+"px",b.style.transform="rotate(180deg)",this.openAccordion=String(i))},E=()=>{if(a.multiple){let v=Array.isArray(r)?[...r]:[],C=v.indexOf(i);C>-1?(v.splice(C,1),d.classList.remove("selected"),u.classList.remove("checked")):(v.push(i),d.classList.add("selected"),u.classList.add("checked")),this.onChange(v.length>0?v:null)}else e.querySelectorAll(".easy-form-accordion-item").forEach(v=>{v.classList.remove("selected");let C=v.querySelector(".easy-form-accordion-indicator");C&&C.classList.remove("checked")}),d.classList.add("selected"),u.classList.add("checked"),this.onChange(i)};m.addEventListener("click",v=>{v.stopPropagation(),E(),y()}),m.addEventListener("keydown",v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),E(),y())}),(r===i||Array.isArray(r)&&r.includes(i))&&(!a.multiple||a.autoExpand)&&setTimeout(()=>{d.classList.add("open"),m.setAttribute("aria-expanded","true"),f.style.maxHeight=f.scrollHeight+"px",b.style.transform="rotate(180deg)"},0),e.appendChild(d)}),this.createFieldContainer(e)}};var J=class extends g{render(){let t=document.createElement("div");t.className="easy-form-image-grid-container";let e=this.field,a=this.value??null,r=e.columns??3,o=e.imageSize??"medium";return t.style.gridTemplateColumns=`repeat(${r}, 1fr)`,t.style.gap=e.gap??"1rem",e.options.forEach(s=>{let i=typeof s=="string"?s:s.value,n=typeof s=="string"?s:s.label,l=typeof s=="object"&&"image"in s&&s.image?s.image:void 0,d=typeof s=="object"&&"description"in s&&s.description?s.description:void 0,m=document.createElement("div");m.className=`easy-form-image-grid-item easy-form-image-grid-${o}`,m.setAttribute("data-value",String(i)),m.setAttribute("role","button"),m.setAttribute("tabindex","0"),m.setAttribute("aria-label",n),(a===i||Array.isArray(a)&&a.includes(i))&&m.classList.add("selected");let p=document.createElement("div");if(p.className="easy-form-image-grid-image-container",l){let f=document.createElement("img");f.src=l,f.alt=n,f.className="easy-form-image-grid-image",p.appendChild(f)}else{let f=document.createElement("div");f.className="easy-form-image-grid-placeholder",f.textContent=n.charAt(0).toUpperCase(),p.appendChild(f)}let u=document.createElement("div");u.className="easy-form-image-grid-indicator",e.multiple?(u.classList.add("checkbox"),Array.isArray(a)&&a.includes(i)&&(u.classList.add("checked"),u.innerHTML="\u2713")):(u.classList.add("radio"),a===i&&(u.classList.add("checked"),u.innerHTML="\u25CF")),p.appendChild(u);let h=document.createElement("div");if(h.className="easy-form-image-grid-label",h.textContent=n,d){let f=document.createElement("div");f.className="easy-form-image-grid-description",f.textContent=d,m.appendChild(f)}m.appendChild(p),m.appendChild(h);let b=()=>{if(e.multiple){let f=Array.isArray(a)?[...a]:[],y=f.indexOf(i);y>-1?(f.splice(y,1),m.classList.remove("selected"),u.classList.remove("checked"),u.innerHTML=""):(f.push(i),m.classList.add("selected"),u.classList.add("checked"),u.innerHTML="\u2713"),this.onChange(f.length>0?f:null)}else t.querySelectorAll(".easy-form-image-grid-item").forEach(f=>{f.classList.remove("selected");let y=f.querySelector(".easy-form-image-grid-indicator");y&&(y.classList.remove("checked"),y.innerHTML="")}),m.classList.add("selected"),u.classList.add("checked"),u.innerHTML="\u25CF",this.onChange(i)};m.addEventListener("click",b),m.addEventListener("keydown",f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),b())}),m.addEventListener("blur",()=>{this.onBlur()}),t.appendChild(m)}),this.createFieldContainer(t)}};var Q=class extends g{constructor(){super(...arguments);this.inputs=[]}render(){let e=document.createElement("div");e.className="easy-form-otp-container";let r=this.field.length??6,o=this.value??"",s=String(o).padStart(r,"").slice(0,r);for(let i=0;i<r;i++){let n=document.createElement("input");n.type="text",n.inputMode="numeric",n.maxLength=1,n.className="easy-form-otp-input",n.setAttribute("aria-label",`C\xF3digo d\xEDgito ${i+1}`),s[i]&&(n.value=s[i]),this.applyCommonProps(n),n.id=`${this.getFieldId()}-${i}`;let l=i;n.addEventListener("input",d=>{let m=d.target,p=m.value.replace(/[^0-9]/g,"");m.value=p,p&&l<r-1&&this.inputs[l+1].focus(),this.updateOTPValue()}),n.addEventListener("keydown",d=>{let m=d.target;d.key==="Backspace"&&!m.value&&l>0&&(this.inputs[l-1].focus(),this.inputs[l-1].value="",this.updateOTPValue()),d.key==="ArrowLeft"&&l>0&&(d.preventDefault(),this.inputs[l-1].focus()),d.key==="ArrowRight"&&l<r-1&&(d.preventDefault(),this.inputs[l+1].focus())}),n.addEventListener("paste",d=>{d.preventDefault();let p=(d.clipboardData||window.clipboardData).getData("text").replace(/[^0-9]/g,"").slice(0,r);for(let h=0;h<p.length&&l+h<r;h++)this.inputs[l+h].value=p[h];let u=Math.min(l+p.length,r-1);this.inputs[u].focus(),this.updateOTPValue()}),n.addEventListener("focus",d=>{d.target.select()}),n.addEventListener("blur",()=>{this.onBlur()}),this.inputs.push(n),e.appendChild(n)}return this.createFieldContainer(e)}updateOTPValue(){let e=this.inputs.map(o=>o.value).join(""),a=this.field,r=e.length===this.inputs.length?e:null;a.numeric&&r?this.onChange(Number(r)):this.onChange(r)}};var _e=6;function X(c){return c?'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/></svg>':'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>'}var ee=class extends g{constructor(){super(...arguments);this.inputs=[];this.visible=!1}get passwordField(){return this.field}render(){let e=this.passwordField,a=!!e.characterSeparated,r=a?typeof e.characterSeparated=="number"?e.characterSeparated:_e:0;return a?this.createFieldContainer(this.renderSeparated(r)):this.createFieldContainer(this.renderSingle())}renderSingle(){let a=!!this.passwordField.showToggle,r=document.createElement("input");if(r.type="password",r.value=this.value??"",r.id=this.getFieldId(),this.applyCommonProps(r),this.field.placeholder&&(r.placeholder=this.field.placeholder),r.addEventListener("input",i=>{this.onChange(i.target.value)}),r.addEventListener("blur",()=>this.onBlur()),!a)return r;let o=document.createElement("div");o.className="easy-form-password-inner",r.classList.add("easy-form-password-input"),o.appendChild(r);let s=document.createElement("button");return s.type="button",s.className="easy-form-password-toggle",s.setAttribute("aria-label","Mostrar contrase\xF1a"),s.innerHTML=X(!1),s.addEventListener("click",()=>{this.visible=!this.visible,r.type=this.visible?"text":"password",s.setAttribute("aria-label",this.visible?"Ocultar contrase\xF1a":"Mostrar contrase\xF1a"),s.innerHTML=X(this.visible)}),o.appendChild(s),o}renderSeparated(e){let r=!!this.passwordField.showToggle,o=this.value??"",s=String(o).slice(0,e),i=document.createElement("div");i.className="easy-form-password-separated";for(let n=0;n<e;n++){let l=document.createElement("input");l.type="password",l.maxLength=1,l.className="easy-form-password-separated-input",l.setAttribute("aria-label",`Car\xE1cter ${n+1} de ${e}`),s[n]&&(l.value=s[n]),this.applyCommonProps(l),l.id=n===0?this.getFieldId():`${this.getFieldId()}-${n}`,n>0&&l.removeAttribute("name");let d=n;l.addEventListener("input",m=>{m.target.value&&d<e-1&&this.inputs[d+1].focus(),this.updateSeparatedValue()}),l.addEventListener("keydown",m=>{m.key==="Backspace"&&!m.target.value&&d>0&&(this.inputs[d-1].focus(),this.inputs[d-1].value="",this.updateSeparatedValue()),m.key==="ArrowLeft"&&d>0&&(m.preventDefault(),this.inputs[d-1].focus()),m.key==="ArrowRight"&&d<e-1&&(m.preventDefault(),this.inputs[d+1].focus())}),l.addEventListener("paste",m=>{m.preventDefault();let u=((m.clipboardData||window.clipboardData)?.getData("text")||"").slice(0,e-d).split("");for(let b=0;b<u.length&&d+b<e;b++)this.inputs[d+b].value=u[b];let h=Math.min(d+u.length,e-1);this.inputs[h].focus(),this.updateSeparatedValue()}),l.addEventListener("focus",m=>m.target.select()),l.addEventListener("blur",()=>this.onBlur()),this.inputs.push(l),i.appendChild(l)}if(r){let n=document.createElement("div");n.className="easy-form-password-separated-toggle";let l=document.createElement("button");l.type="button",l.className="easy-form-password-toggle",l.setAttribute("aria-label","Mostrar contrase\xF1a"),l.innerHTML=X(!1),l.addEventListener("click",()=>{this.visible=!this.visible;let d=this.visible?"text":"password";this.inputs.forEach(m=>{m.type=d}),l.setAttribute("aria-label",this.visible?"Ocultar contrase\xF1a":"Mostrar contrase\xF1a"),l.innerHTML=X(this.visible)}),n.appendChild(l),i.appendChild(n)}return i}updateSeparatedValue(){let e=this.inputs.map(a=>a.value).join("");this.onChange(e||null)}};var te=class extends g{render(){let t=this.field,e=t.accept??"",a=t.multiple??!1,r=document.createElement("div");r.className="easy-form-file-drop",r.setAttribute("tabindex","0");let o=document.createElement("input");o.type="file",o.className="easy-form-file-drop-input",o.style.display="none",e&&(o.accept=e),a&&(o.multiple=!0);let s=document.createElement("span");s.className="easy-form-file-drop-label",s.textContent="Arrastra archivos aqu\xED o haz clic para seleccionar",r.appendChild(s),r.appendChild(o);let i=document.createElement("div");i.className="easy-form-file-drop-list";let n=d=>{let m=d?Array.isArray(d)?d.map(p=>p.name):[d.name]:[];if(i.innerHTML="",m.length===0){i.style.display="none";return}i.style.display="block",m.forEach(p=>{let u=document.createElement("div");u.className="easy-form-file-drop-item",u.textContent=p,i.appendChild(u)})};n(this.value);let l=d=>{if(!d||d.length===0)return;let m=a?Array.from(d):d[0];this.onChange(m),this.onBlur(),n(m)};return r.addEventListener("click",()=>{o.click()}),o.addEventListener("change",d=>{let m=d.target;l(m.files),m.value=""}),r.addEventListener("dragover",d=>{d.preventDefault(),d.stopPropagation(),r.classList.add("easy-form-file-drop-over")}),r.addEventListener("dragleave",d=>{d.preventDefault(),d.stopPropagation(),r.classList.remove("easy-form-file-drop-over")}),r.addEventListener("drop",d=>{d.preventDefault(),d.stopPropagation(),r.classList.remove("easy-form-file-drop-over"),l(d.dataTransfer?.files??null)}),r.appendChild(i),this.createFieldContainer(r)}};var Ye="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",re=class extends g{constructor(){super(...arguments);this.mapInstance=null;this.markerInstance=null}render(){let e=this.field,a=e.center??{lat:0,lng:0},r=e.zoom??13,o=this.value,s=typeof o=="object"&&o?.lat!=null?o.lat:a.lat,i=typeof o=="object"&&o?.lng!=null?o.lng:a.lng,n=document.createElement("div");n.className="easy-form-map";let l=document.createElement("div");l.className="easy-form-map-inputs";let d=document.createElement("input");d.type="number",d.step="any",d.placeholder="Latitud",d.value=String(s),d.className="easy-form-map-lat";let m=document.createElement("input");m.type="number",m.step="any",m.placeholder="Longitud",m.value=String(i),m.className="easy-form-map-lng";let p=()=>{let E=parseFloat(d.value),v=parseFloat(m.value);!isNaN(E)&&!isNaN(v)&&(this.onChange({lat:E,lng:v}),this.syncMarkerPosition(E,v)),this.onBlur()};d.addEventListener("change",p),m.addEventListener("change",p),l.appendChild(d),l.appendChild(m),n.appendChild(l);let u=document.createElement("div");u.className="easy-form-map-container",n.appendChild(u);let h="easy-form-leaflet-css",b=!1,f=document.createElement("link");return f.id=h,f.rel="stylesheet",f.href=Ye,f.onload=()=>{b=!0},n.insertBefore(f,n.firstChild),(async()=>{if(typeof window>"u")return;u.style.height="300px",u.style.width="100%",u.style.position="relative",u.style.overflow="hidden",u.style.display="block",await new Promise(x=>{let w=()=>{b&&u.offsetWidth>0&&u.offsetHeight>0?x(void 0):requestAnimationFrame(w)};w()}),await new Promise(x=>setTimeout(x,50));let E;try{E=await import("leaflet")}catch{u.innerHTML=`
|
|
2177
2177
|
<div style="padding:2rem;text-align:center;color:#666;font-size:0.875rem;background:#f9f9f9;border-radius:4px;">
|
|
2178
2178
|
<strong>Campo map requiere Leaflet</strong><br><br>
|
|
2179
2179
|
Instala e importa Leaflet para usar el mapa interactivo:<br>
|
|
@@ -2181,5 +2181,5 @@ var z=class{parse(t){if(!t)throw new Error("Schema es requerido");if(!t.fields&&
|
|
|
2181
2181
|
En tu app: <code>import 'leaflet'</code> y <code>import 'leaflet/dist/leaflet.css'</code><br>
|
|
2182
2182
|
<a href="https://easyforms.dev/docs/tipos-campos#map" target="_blank" rel="noopener" style="color:var(--easy-form-primary,#007bff);">Ver documentaci\xF3n</a>
|
|
2183
2183
|
</div>
|
|
2184
|
-
`;return}delete E.Icon.Default.prototype._getIconUrl,E.Icon.Default.mergeOptions({iconRetinaUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png",iconUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png",shadowUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png"}),this.mapInstance=E.map(u,{preferCanvas:!1,zoomControl:!0}).setView([s,i],r);let v=E.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',maxZoom:19}).addTo(this.mapInstance);this.mapInstance.invalidateSize(),v.on("load",()=>{this.mapInstance&&this.mapInstance.invalidateSize()});let C=()=>{this.mapInstance&&this.mapInstance.invalidateSize()};setTimeout(C,100),setTimeout(C,300),setTimeout(C,500),new IntersectionObserver(x=>{x.forEach(w=>{w.isIntersecting&&this.mapInstance&&setTimeout(()=>{this.mapInstance?.invalidateSize()},100)})}).observe(u),this.markerInstance=E.marker([s,i],{draggable:!0}).addTo(this.mapInstance).on("dragend",()=>{let x=this.markerInstance.getLatLng();d.value=String(Number(x.lat.toFixed(6))),m.value=String(Number(x.lng.toFixed(6))),this.onChange({lat:x.lat,lng:x.lng}),this.onBlur()}),this.mapInstance.on("click",x=>{let{lat:w,lng:S}=x.latlng;this.markerInstance.setLatLng([w,S]),d.value=String(Number(w.toFixed(6))),m.value=String(Number(S.toFixed(6))),this.onChange({lat:w,lng:S}),this.onBlur()})})(),this.createFieldContainer(n)}syncMarkerPosition(e,a){this.mapInstance&&this.markerInstance&&(this.markerInstance.setLatLng([e,a]),this.mapInstance.setView([e,a]),setTimeout(()=>{this.mapInstance?.invalidateSize()},50))}};var Fe=c=>`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="${c?"currentColor":"none"}" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" role="img" aria-hidden="true"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>`,ae=class extends g{render(){let t=this.field,e=t.max??5,a=t.half??!1,r=this.value!=null?Number(this.value):0,o=document.createElement("div");o.className="easy-form-rating",o.setAttribute("role","slider"),o.setAttribute("aria-valuemin","0"),o.setAttribute("aria-valuemax",String(e)),o.setAttribute("aria-valuenow",String(r)),o.setAttribute("aria-label",this.field.label||"Rating"),o.setAttribute("tabindex","0");let s=document.createElement("div");s.className="easy-form-rating-stars";for(let i=1;i<=e;i++){let n=document.createElement("button");n.type="button";let l=r>=i||a&&r>=i-.5;n.className=l?"easy-form-rating-star easy-form-rating-star-filled":"easy-form-rating-star",n.innerHTML=Fe(l),n.setAttribute("aria-label",`${i} de ${e}`),n.addEventListener("click",d=>{d.preventDefault();let m=d.target.closest("button")?.getBoundingClientRect(),p=i;if(a&&m){let u=m.left+m.width/2;p=d.clientX<u?i-.5:i}this.onChange(p),this.onBlur(),this.rerenderStars(o,e,p,a),o.setAttribute("aria-valuenow",String(p))}),s.appendChild(n)}return o.appendChild(s),o.addEventListener("keydown",i=>{let n=Number(o.getAttribute("aria-valuenow"))||0,l=n;i.key==="ArrowRight"||i.key==="ArrowUp"?(i.preventDefault(),l=Math.min(e,a?n+.5:n+1),this.onChange(l)):(i.key==="ArrowLeft"||i.key==="ArrowDown")&&(i.preventDefault(),l=Math.max(0,a?n-.5:n-1),this.onChange(l)),l!==n&&(this.rerenderStars(o,e,l,a),o.setAttribute("aria-valuenow",String(l)))}),this.createFieldContainer(o)}rerenderStars(t,e,a,r){t.querySelectorAll(".easy-form-rating-star").forEach((s,i)=>{let n=i+1,l=a>=n||r&&a>=n-.5;s.className=l?"easy-form-rating-star easy-form-rating-star-filled":"easy-form-rating-star",s.innerHTML=Fe(l)})}};var oe=class extends g{render(){let t=this.field,e=t.min??0,a=t.max??100,r=t.step??1,o=t.showValue??!1,s=document.createElement("input");s.type="range",s.min=String(e),s.max=String(a),s.step=String(r),s.value=this.value!=null?String(this.value):String(e),s.setAttribute("aria-valuemin",String(e)),s.setAttribute("aria-valuemax",String(a)),s.setAttribute("aria-valuenow",s.value),this.applyCommonProps(s),s.addEventListener("input",n=>{let l=n.target,d=r>=1?parseInt(l.value,10):parseFloat(l.value);this.onChange(isNaN(d)?e:d),i&&(i.textContent=l.value),s.setAttribute("aria-valuenow",l.value)}),s.addEventListener("change",()=>{this.onBlur()});let i=null;if(o){i=document.createElement("span"),i.className="easy-form-slider-value",i.textContent=s.value;let n=document.createElement("div");return n.className="easy-form-slider-wrapper",n.appendChild(s),n.appendChild(i),this.createFieldContainer(n)}return this.createFieldContainer(s)}};var Ue=/^#?([0-9A-Fa-f]{6})$/;function he(c){let t=c.match(Ue);return t?`#${t[1].toLowerCase()}`:/^[0-9A-Fa-f]{6}$/.test(c)?`#${c.toLowerCase()}`:"#000000"}var se=class extends g{render(){let e=this.field.defaultValue??"#000000",a=this.value!=null&&typeof this.value=="string"?he(this.value):e,r=document.createElement("div");r.className="easy-form-color-wrapper";let o=document.createElement("input");o.type="color",o.value=a,o.setAttribute("value",a),o.setAttribute("aria-label",this.field.label||"Color"),o.id=`${this.getFieldId()}-picker`,this.field.disabled&&o.setAttribute("disabled","true");let s=document.createElement("input");s.type="text",s.value=a,s.setAttribute("aria-label",`${this.field.label||"Color"} (hex)`),s.placeholder="#000000",s.className="easy-form-color-text",this.applyCommonProps(s);let i=()=>{let l=o.value||"#000000",d=he(l);s.value=d,this.onChange(d)},n=()=>{let l=s.value.trim(),d=l.startsWith("#")?l:`#${l}`;if(/^#[0-9A-Fa-f]{6}$/.test(d)){let m=he(d);o.value=m,this.onChange(m)}};return o.addEventListener("input",i),o.addEventListener("change",()=>{i(),this.onBlur()}),s.addEventListener("input",n),s.addEventListener("blur",()=>{n(),this.onBlur()}),r.appendChild(o),r.appendChild(s),this.createFieldContainer(r)}};function be(c,t,e,a,r){switch(c.type){case"text":case"email":return new $(c,t,e,a,r).render();case"password":return new ee(c,t,e,a,r).render();case"number":return new B(c,t,e,a,r).render();case"textarea":return new O(c,t,e,a,r).render();case"select":return new j(c,t,e,a,r).render();case"checkbox":return new W(c,t,e,a,r).render();case"radio":return new _(c,t,e,a,r).render();case"switch":return new Y(c,t,e,a,r).render();case"date":return new U(c,t,e,a,r).render();case"file":return new G(c,t,e,a,r).render();case"file-drop":return new te(c,t,e,a,r).render();case"map":return new re(c,t,e,a,r).render();case"rating":return new ae(c,t,e,a,r).render();case"slider":return new oe(c,t,e,a,r).render();case"colorpicker":return new se(c,t,e,a,r).render();case"quantity":return new K(c,t,e,a,r).render();case"accordion-select":return new Z(c,t,e,a,r).render();case"image-grid-select":return new J(c,t,e,a,r).render();case"otp":return new Q(c,t,e,a,r).render();default:let o=document.createElement("div");return o.textContent=`Tipo de campo no soportado: ${c.type}`,o}}var Le=new Map;function Me(c,t){Le.set(c,t)}function ge(c){for(let[t,e]of Object.entries(c))Me(t,e)}function ie(c){return Le.get(c)}var Ge={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"password",name:"password",label:"Password",placeholder:"Enter your password",validations:[{type:"required",message:"Password is required"},{type:"minLength",value:6,message:"Password must be at least 6 characters"}]},{type:"checkbox",name:"rememberMe",label:"Remember me",defaultValue:!1}]},Ke={fields:[{type:"text",name:"name",label:"Full Name",placeholder:"Enter your full name",validations:[{type:"required",message:"Name is required"},{type:"minLength",value:2,message:"Name must be at least 2 characters"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"password",name:"password",label:"Password",placeholder:"Create a password",validations:[{type:"required",message:"Password is required"},{type:"minLength",value:8,message:"Password must be at least 8 characters"}]},{type:"password",name:"confirmPassword",label:"Confirm Password",placeholder:"Confirm your password",validations:[{type:"required",message:"Please confirm your password"},{type:"custom",validator:c=>typeof c=="string"&&c.length>=8,message:"Password must be at least 8 characters"}]}]},Ze={fields:[{type:"otp",name:"code",label:"Verification Code",validations:[{type:"required",message:"Verification code is required"}]}]},Je={fields:[{type:"text",name:"name",label:"Name",placeholder:"Enter your name",validations:[{type:"required",message:"Name is required"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"text",name:"subject",label:"Subject",placeholder:"Enter the subject",validations:[{type:"required",message:"Subject is required"}]},{type:"textarea",name:"message",label:"Message",placeholder:"Enter your message",rows:5,validations:[{type:"required",message:"Message is required"},{type:"minLength",value:10,message:"Message must be at least 10 characters"}]}]},Qe={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email address",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]}]},Xe={fields:[{type:"password",name:"currentPassword",label:"Current Password",placeholder:"Enter your current password",validations:[{type:"required",message:"Current password is required"}]},{type:"password",name:"newPassword",label:"New Password",placeholder:"Enter your new password",validations:[{type:"required",message:"New password is required"},{type:"minLength",value:8,message:"Password must be at least 8 characters"}]},{type:"password",name:"confirmPassword",label:"Confirm New Password",placeholder:"Confirm your new password",validations:[{type:"required",message:"Please confirm your new password"},{type:"custom",validator:c=>typeof c=="string"&&c.length>=8,message:"Password must be at least 8 characters"}]}]},et={fields:[{type:"text",name:"name",label:"Full Name",placeholder:"Enter your full name",validations:[{type:"required",message:"Name is required"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"text",name:"phone",label:"Phone",placeholder:"Enter your phone number",mask:{type:"phone"}},{type:"textarea",name:"bio",label:"Bio",placeholder:"Tell us about yourself",rows:4},{type:"file",name:"avatar",label:"Profile Picture",accept:"image/*"}]},tt={fields:[{type:"group",name:"billingAddress",label:"Billing Address",fields:[{type:"text",name:"street",label:"Street Address",placeholder:"Enter street address",validations:[{type:"required",message:"Street address is required"}]},{type:"row",name:"cityState",fields:[{type:"text",name:"city",label:"City",placeholder:"City",validations:[{type:"required",message:"City is required"}]},{type:"text",name:"state",label:"State",placeholder:"State",validations:[{type:"required",message:"State is required"}]}]},{type:"text",name:"zipCode",label:"ZIP Code",placeholder:"ZIP Code",validations:[{type:"required",message:"ZIP code is required"}]}]},{type:"select",name:"paymentMethod",label:"Payment Method",options:[{label:"Credit Card",value:"credit-card"},{label:"Debit Card",value:"debit-card"},{label:"PayPal",value:"paypal"},{label:"Bank Transfer",value:"bank-transfer"}],validations:[{type:"required",message:"Payment method is required"}]},{type:"select",name:"shipping",label:"Shipping Method",options:[{label:"Standard (5-7 days)",value:"standard"},{label:"Express (2-3 days)",value:"express"},{label:"Overnight",value:"overnight"}],validations:[{type:"required",message:"Shipping method is required"}]}]},rt={fields:[{type:"select",name:"rating",label:"Rating",options:[{label:"1 - Poor",value:1},{label:"2 - Fair",value:2},{label:"3 - Good",value:3},{label:"4 - Very Good",value:4},{label:"5 - Excellent",value:5}],validations:[{type:"required",message:"Rating is required"}]},{type:"textarea",name:"comment",label:"Comment",placeholder:"Share your feedback",rows:5,validations:[{type:"required",message:"Comment is required"}]},{type:"email",name:"email",label:"Email (optional)",placeholder:"Enter your email if you want a response"}]},at={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"checkbox",name:"weeklyNewsletter",label:"Weekly Newsletter",defaultValue:!0},{type:"checkbox",name:"productUpdates",label:"Product Updates",defaultValue:!1},{type:"checkbox",name:"promotions",label:"Promotions and Special Offers",defaultValue:!1}]},ot={fields:[{type:"date",name:"date",label:"Date",validations:[{type:"required",message:"Date is required"}]},{type:"text",name:"time",label:"Time",placeholder:"HH:MM",mask:{type:"time"},validations:[{type:"required",message:"Time is required"}]},{type:"number",name:"guests",label:"Number of Guests",placeholder:"Enter number of guests",min:1,max:20,validations:[{type:"required",message:"Number of guests is required"},{type:"min",value:1,message:"At least 1 guest is required"}]},{type:"textarea",name:"specialRequests",label:"Special Requests",placeholder:"Any special requests or dietary restrictions?",rows:4}]},st={fields:[{type:"select",name:"rating",label:"Rating",options:[{label:"1 Star",value:1},{label:"2 Stars",value:2},{label:"3 Stars",value:3},{label:"4 Stars",value:4},{label:"5 Stars",value:5}],validations:[{type:"required",message:"Rating is required"}]},{type:"text",name:"title",label:"Review Title",placeholder:"Give your review a title",validations:[{type:"required",message:"Review title is required"},{type:"minLength",value:5,message:"Title must be at least 5 characters"}]},{type:"textarea",name:"comment",label:"Your Review",placeholder:"Share your experience",rows:6,validations:[{type:"required",message:"Review comment is required"},{type:"minLength",value:20,message:"Review must be at least 20 characters"}]}]},ne={login:Ge,register:Ke,otp:Ze,contact:Je,"password-reset":Qe,"password-change":Xe,profile:et,checkout:tt,feedback:rt,subscription:at,booking:ot,review:st};function le(c){return c in ne?ne[c]:null}function it(){return Object.keys(ne)}function ye(c,t){let e=le(c);if(!e)throw new Error(`Template "${c}" not found`);let a=e.fields||[],r=e.steps;if(r&&r.length>0){let o=r[r.length-1];return{...e,steps:[...r.slice(0,-1),{...o,fields:[...o.fields,...t]}]}}return{...e,fields:[...a,...t]}}var nt=typeof HTMLElement<"u"?HTMLElement:class{},de=class extends nt{constructor(){if(typeof HTMLElement>"u")throw new Error("EasyForm can only be used in a browser environment");super();this.customComponents={};this.isRendering=!1;this.attemptsLock=null;this.lockCountdownInterval=null;this.slotTemplates=null;this.skipPreserveValuesOnNextRender=!1;this.dependencyRenderTimeout=null;this.stateManager=new V,this.shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["schema","template","template-extend","theme","colors","initialData","loading","disabled","max-attempts","block-duration-minutes","attempts-storage-key","submit-button","label-position","show-completed-indicator","form-direction"]}get schema(){let e=this.getAttribute("schema");return e?this.getAttribute("template")?(console.warn('EasyForm: Cannot use both "schema" and "template" attributes. "template" will be ignored.'),F(e)):F(e):null}set schema(e){e&&this.getAttribute("template")&&(console.warn('EasyForm: Setting "schema" will remove "template" attribute.'),this.removeAttribute("template"),this.removeAttribute("template-extend")),e?this.setAttribute("schema",M(e)):this.removeAttribute("schema")}get template(){let e=this.getAttribute("template");return e?(this.getAttribute("schema")&&console.warn('EasyForm: Cannot use both "template" and "schema" attributes. "schema" will be ignored.'),e):null}set template(e){e&&this.getAttribute("schema")&&(console.warn('EasyForm: Setting "template" will remove "schema" attribute.'),this.removeAttribute("schema")),e?this.setAttribute("template",e):(this.removeAttribute("template"),this.removeAttribute("template-extend"))}get templateExtend(){let e=this.getAttribute("template-extend");return e?F(e):null}set templateExtend(e){e?this.setAttribute("template-extend",M(e)):this.removeAttribute("template-extend")}get maxAttempts(){let e=this.getAttribute("max-attempts");if(!e)return null;let a=parseInt(e,10);return isNaN(a)?null:a}set maxAttempts(e){e!=null&&e>=1?this.setAttribute("max-attempts",String(e)):this.removeAttribute("max-attempts")}get blockDurationMinutes(){let e=this.getAttribute("block-duration-minutes");if(!e)return null;let a=parseInt(e,10);return isNaN(a)?null:a}set blockDurationMinutes(e){e!=null&&e>=1?this.setAttribute("block-duration-minutes",String(e)):this.removeAttribute("block-duration-minutes")}get attemptsStorageKey(){return this.getAttribute("attempts-storage-key")}set attemptsStorageKey(e){e?this.setAttribute("attempts-storage-key",e):this.removeAttribute("attempts-storage-key")}get submitButton(){let e=this.getAttribute("submit-button");if(e)try{return F(e)}catch{return null}return null}set submitButton(e){e&&typeof e=="object"?this.setAttribute("submit-button",M(e)):this.removeAttribute("submit-button")}getSubmitButtonConfig(e){let a=this.submitButton,o={...e?.submitButton,...a};return{visible:o.visible??!0,text:o.text??"Enviar",width:o.width??"auto",align:o.align??"left"}}connectedCallback(){this.setupAttemptsLock(),this.setupStyles(),this.render()}attributeChangedCallback(e,a,r){if(e==="schema"&&r!==a&&(this.getAttribute("template")&&(console.warn('EasyForm: "schema" and "template" cannot be used together. Removing "template".'),this.removeAttribute("template"),this.removeAttribute("template-extend")),this.handleSchemaChange()),e==="template"&&r!==a&&(this.getAttribute("schema")&&(console.warn('EasyForm: "template" and "schema" cannot be used together. Removing "schema".'),this.removeAttribute("schema")),this.handleSchemaChange()),e==="template-extend"&&r!==a&&this.handleSchemaChange(),e==="initialData"&&r!==a&&this.handleSchemaChange(),(e==="theme"||e==="colors")&&r!==a&&this.setupStyles(),e==="loading"&&r!==a){let o=this.shadow.querySelector("form");this.updateLoadingOverlay(o||void 0),o&&o.querySelectorAll("input, textarea, select, button").forEach(i=>{i instanceof HTMLElement&&"disabled"in i&&(i.disabled=this.loading)})}e==="disabled"&&r!==a&&this.render(),(e==="label-position"||e==="form-direction"||e==="show-completed-indicator")&&r!==a&&this.render(),(e==="max-attempts"||e==="block-duration-minutes"||e==="attempts-storage-key")&&r!==a&&(this.setupAttemptsLock(),this.updateLockOverlay()),e==="submit-button"&&r!==a&&this.render()}setupAttemptsLock(){let e=this.maxAttempts;if(e==null||e<1){this.attemptsLock=null;return}this.attemptsLock=new N({maxAttempts:e,blockDurationMinutes:this.blockDurationMinutes??5,storageKey:this.attemptsStorageKey??void 0,onLocked:()=>{this.updateLockOverlay()},onUnlocked:()=>{this.stopLockCountdown(),this.updateLockOverlay(),this.render()}})}handleSchemaChange(){let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,e){let r=this.initialData;this.stateManager.initializeSchema(e,r||void 0),this.render()}}getSchemaFromTemplate(e){let a=le(e);if(!a)return console.error(`EasyForm: Template "${e}" not found`),null;let r=this.templateExtend;return r&&r.length>0?ye(e,r):a}async render(){if(!this.isRendering){this.isRendering=!0;try{let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,!e){let k=this.shadow.querySelector("form");k&&k.parentNode===this.shadow&&k.remove();return}let r=this.skipPreserveValuesOnNextRender,o=r?{}:this.preserveCurrentValues();this.skipPreserveValuesOnNextRender=!1;let s=this.stateManager.getWizardState();if(o&&Object.keys(o).length>0)for(let[k,x]of Object.entries(o))this.stateManager.setValueWithoutValidation(k,x);let i=this.initialData,n=s!==null,l=e.steps&&e.steps.length>0;if(!r&&(!s||!n||!l||s&&e.steps&&s.totalSteps!==e.steps.length)&&(this.stateManager.initializeSchema(e,i||void 0),n&&l&&s)){let k=this.stateManager.getWizardState();if(k&&s.totalSteps===k.totalSteps){s.currentStep>=0&&s.currentStep<k.totalSteps&&this.stateManager.goToStep(s.currentStep);for(let x of s.completedSteps)x>=0&&x<k.totalSteps&&this.stateManager.completeStep(x)}}let m=this.stateManager.getWizardState(),p=document.createElement("form");p.addEventListener("submit",k=>this.handleSubmit(k)),(this.disabled||this.loading)&&p.classList.add("easy-form-disabled");let u=this.getAttribute("form-direction"),h=e.direction??(u==="vertical"||u==="horizontal"?u:"vertical");p.classList.add(`easy-form-direction-${h}`);let b=this.getAttribute("show-completed-indicator"),f=e.completedIndicator??(b!==null&&b!=="false"),y=typeof f=="object"&&f?.position?f.position:"top";if(m)this.renderWizard(p,e);else{this.renderFields(p,e.fields||[]);let k=this.getSubmitButtonConfig(e);if(k.visible){let x=document.createElement("div");x.className="easy-form-submit-wrapper",x.style.textAlign=k.align;let w=document.createElement("button");w.type="submit",w.textContent=k.text,w.className="easy-form-submit",w.style.width=k.width,(this.disabled||this.loading)&&(w.disabled=!0),x.appendChild(w),p.appendChild(x)}}let E=null;if(f){let{completed:k,total:x}=this.getCompletedRequiredProgress(e),w=document.createElement("div");w.className="easy-form-completed-indicator",w.setAttribute("role","progressbar"),w.setAttribute("aria-valuenow",String(k)),w.setAttribute("aria-valuemin","0"),w.setAttribute("aria-valuemax",String(x)),w.setAttribute("aria-label",`Campos obligatorios completados: ${k} de ${x}`);let S=document.createElement("div");S.className="easy-form-completed-track";let me=document.createElement("div");me.className="easy-form-completed-fill",me.style.width=x>0?`${k/x*100}%`:"0%",S.appendChild(me),w.appendChild(S),E=document.createElement("div"),E.className="easy-form-wrapper",y==="top"?(E.appendChild(w),E.appendChild(p)):(E.appendChild(p),E.appendChild(w))}let v=this.shadow.querySelector("form");if(v&&v.parentNode===this.shadow&&v!==p)try{v.remove()}catch(k){console.warn("Error al eliminar formulario anterior:",k)}let C=this.shadow.querySelector(".easy-form-wrapper");C&&C.remove(),this.shadow.appendChild(E||p),this.loading&&this.updateLoadingOverlay(p),this.updateLockOverlay(p)}finally{this.isRendering=!1}}}updateLockOverlay(e){let a=this.shadow.querySelector(".easy-form-lock-overlay");if(a&&a.remove(),this.stopLockCountdown(),!this.attemptsLock?.isLocked())return;let r=e||this.shadow.querySelector("form");if(!r)return;let o=document.createElement("div");o.className="easy-form-lock-overlay";let s=document.createElement("div");s.className="easy-form-lock-message",s.setAttribute("role","alert");let i=()=>{let n=this.attemptsLock.getRemainingBlockTimeMs();if(n<=0){this.stopLockCountdown();return}let l=Math.floor(n/6e4),d=Math.floor(n%6e4/1e3),m=l>0?`${l} min ${d} s`:`${d} segundos`;s.textContent=`Demasiados intentos. Intenta de nuevo en ${m}.`};i(),o.appendChild(s),r.appendChild(o),this.lockCountdownInterval=setInterval(i,1e3)}stopLockCountdown(){this.lockCountdownInterval&&(clearInterval(this.lockCountdownInterval),this.lockCountdownInterval=null)}updateLoadingOverlay(e){let a=this.shadow.querySelector(".easy-form-loading-overlay");if(a&&a.remove(),this.loading){let r=e||this.shadow.querySelector("form");if(r){let o=document.createElement("div");o.className="easy-form-loading-overlay";let s=document.createElement("div");s.className="easy-form-loading-spinner",o.appendChild(s),r.appendChild(o)}}}preserveCurrentValues(){let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,!e)return{};let r=this.shadow.querySelector("form"),o={};if(!r)return o;let s=r.querySelectorAll("input, textarea, select");for(let i of s){let n=i.getAttribute("name");if(!n||!(this.findFieldInSchema(e,n)!==null))continue;let d;if(i instanceof HTMLInputElement)if(i.type==="checkbox")d=i.checked;else if(i.type==="radio")if(i.checked)d=i.value;else continue;else i.type==="number"?d=i.value===""?null:Number(i.value):d=i.value;else i instanceof HTMLTextAreaElement?d=i.value:i instanceof HTMLSelectElement&&(i.multiple?d=Array.from(i.selectedOptions).map(m=>m.value):d=i.value||null);d!==void 0&&(o[n]=d===""?null:d)}return o}initializeSlotTemplates(){if(this.slotTemplates!==null)return;let e=[];for(let a of Array.from(this.children))a instanceof HTMLElement&&e.push(a);if(e.length===0){this.slotTemplates=[];return}this.slotTemplates=e.map(a=>{let r=a.hasAttribute("row")?a.getAttribute("row"):null,o=r!=null&&r!==""?Number(r):NaN,s=Number.isFinite(o)?o:null;return{template:a.cloneNode(!0),row:s}})}getSlotClonesByRow(e){this.initializeSlotTemplates();let a=new Map;if(!this.slotTemplates||this.slotTemplates.length===0)return a;for(let{template:r,row:o}of this.slotTemplates){let s=typeof o=="number"?o:-1;Number.isFinite(s)||(s=-1),(s<0||s>=e)&&(s=-1);let i=r.cloneNode(!0),n=a.get(s)??[];n.push(i),a.set(s,n)}return a}applySlotDisabledState(e){if(!this.disabled&&!this.loading)return;e.classList.add("easy-form-slot-disabled"),e.querySelectorAll("input, textarea, select, button").forEach(r=>{"disabled"in r&&(r.disabled=!0)})}renderFields(e,a){if(a.length===0){let n=this.getSlotClonesByRow(0).get(-1);if(n&&n.length>0)for(let l of n)this.applySlotDisabledState(l),e.appendChild(l);return}let r=a.length,o=this.getSlotClonesByRow(r);for(let i=0;i<a.length;i++){let n=o.get(i);if(n&&n.length>0){for(let m of n)this.applySlotDisabledState(m),e.appendChild(m);o.delete(i)}let l=a[i],d=this.renderField(l);d&&e.appendChild(d)}let s=o.get(-1);if(s&&s.length>0)for(let i of s)this.applySlotDisabledState(i),e.appendChild(i)}renderField(e){let a=this.stateManager.getFieldVisibility(e.name),r=this.stateManager.getFieldEnabled(e.name);if(e.type==="group"){let f=this.renderGroup(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="row"){let f=this.renderRow(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="array"){let f=this.renderArray(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="custom"){let f=this.renderCustom(e);return f&&(a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled")),f}let o=this.stateManager.getValue(e.name),s=this.stateManager.getErrors(e.name),i=s.length>0?s[0]:void 0,n=this.disabled||this.loading,l=this.getAttribute("label-position"),d=["up","down","left","right","none"],m=e.labelPosition??(l&&d.includes(l)?l:"up"),p={...e,disabled:n||!r||e.disabled,labelPosition:m},u=ie(e.type);if(u){let f=u({field:p,value:o,error:i,onChange:y=>this.handleFieldChange(e.name,y),onBlur:()=>this.handleFieldBlur(e.name)});return f&&!a&&(f.style.display="none",f.classList.add("easy-form-field-hidden")),f}let h=be(p,o,i,f=>this.handleFieldChange(e.name,f),()=>this.handleFieldBlur(e.name)),b=h.querySelector(".easy-form-field")||h;return b instanceof HTMLElement&&b.setAttribute("data-field-name",e.name),a||(h.style.display="none",h.classList.add("easy-form-field-hidden")),h}renderGroup(e){let a=e,r=a.direction??"vertical",o=a.collapsible===!0,s=a.defaultOpen!==!1,i=document.createElement("div");if(i.className=`easy-form-group easy-form-direction-${r}`,e.name&&i.setAttribute("data-field-name",e.name),o){i.classList.add("easy-form-group-collapsible"),s||i.classList.add("easy-form-group-collapsed");let n=document.createElement("button");n.type="button",n.className="easy-form-group-header",n.setAttribute("aria-expanded",String(s));let l=`easy-form-group-${(e.name||"group").replace(/[^a-z0-9]/gi,"-")}-content`;n.setAttribute("aria-controls",l);let d=document.createElement("span");d.textContent=e.label||"Grupo";let m=document.createElement("span");m.className="easy-form-group-chevron",m.setAttribute("aria-hidden","true"),m.textContent="\u25BC",n.appendChild(d),n.appendChild(m),i.appendChild(n);let p=document.createElement("div");if(p.id=l,p.className="easy-form-group-content","fields"in e&&e.fields)for(let h of e.fields){let b=h.name.startsWith(e.name+".")?h.name:`${e.name}.${h.name}`,f={...h,name:b},y=this.renderField(f);y&&p.appendChild(y)}i.appendChild(p);let u=h=>{h?p.style.maxHeight=p.scrollHeight+"px":p.style.maxHeight="0"};s?requestAnimationFrame(()=>u(!0)):p.style.maxHeight="0",n.addEventListener("click",()=>{i.classList.contains("easy-form-group-collapsed")?(i.classList.remove("easy-form-group-collapsed"),n.setAttribute("aria-expanded","true"),u(!0)):(p.style.maxHeight=p.scrollHeight+"px",requestAnimationFrame(()=>{i.classList.add("easy-form-group-collapsed"),n.setAttribute("aria-expanded","false"),u(!1)}))})}else{if(e.label){let n=document.createElement("h3");n.className="easy-form-group-label",n.textContent=e.label,i.appendChild(n)}if("fields"in e&&e.fields)for(let n of e.fields){let l=n.name.startsWith(e.name+".")?n.name:`${e.name}.${n.name}`,d={...n,name:l},m=this.renderField(d);m&&i.appendChild(m)}}return i}renderRow(e){let a=document.createElement("div");a.className="easy-form-row";let r=e;if(a.style.display="flex",a.style.flexWrap="wrap",a.style.alignItems=r.align||"stretch",r.gap!==void 0){let o=typeof r.gap=="number"?`${r.gap}px`:r.gap;a.style.gap=o}else a.style.gap="1rem";if("fields"in e&&e.fields)for(let o of e.fields){let s=this.renderField(o);if(s){let i=document.createElement("div");i.style.flex="1",i.style.minWidth="0",i.appendChild(s),a.appendChild(i)}}return a}renderArray(e){let a=document.createElement("div");if(a.className="easy-form-array",a.setAttribute("data-field-name",e.name),e.label){let m=document.createElement("label");m.className="easy-form-label",m.textContent=e.label,a.appendChild(m)}let r=this.stateManager.getValue(e.name)||[],o=e,s=o.minItems??0,i=o.maxItems??1/0,n=document.createElement("div");n.className="easy-form-array-items";for(let m=0;m<r.length;m++){let p=document.createElement("div");if(p.className="easy-form-array-item",o.itemSchema?.fields)for(let b of o.itemSchema.fields){let f={...b,name:`${e.name}.${m}.${b.name}`},y=this.renderField(f);y&&p.appendChild(y)}let u=document.createElement("button");u.type="button",u.textContent="Eliminar",u.className="easy-form-array-remove";let h=r.length<=s;this.disabled||this.loading||h?u.disabled=!0:u.addEventListener("click",()=>{let b=[...r];b.splice(m,1),this.handleFieldChange(e.name,b)}),p.appendChild(u),n.appendChild(p)}a.appendChild(n);let l=document.createElement("button");l.type="button",l.textContent="Agregar",l.className="easy-form-array-add";let d=r.length>=i;return this.disabled||this.loading||d?l.disabled=!0:l.addEventListener("click",()=>{let m=this.stateManager.createDefaultArrayItem(e),p=[...r,m];this.handleFieldChange(e.name,p)}),a.appendChild(l),a}renderCustom(e){let a=ie("custom");if(!a){let i=document.createElement("div");return i.textContent=`Componente custom no registrado para: ${e.name}`,i}let r=this.stateManager.getValue(e.name),o=this.stateManager.getErrors(e.name),s=o.length>0?o[0]:void 0;return a({field:e,value:r,error:s,onChange:i=>this.handleFieldChange(e.name,i),onBlur:()=>this.handleFieldBlur(e.name)})}getCompletedRequiredProgress(e){let a=d=>{let m=[];for(let p of d)if(p.type==="array"&&"itemSchema"in p&&p.itemSchema?.fields){let u=this.stateManager.getValue(p.name),h=Array.isArray(u)?u.length:0;for(let b=0;b<h;b++)for(let f of p.itemSchema.fields)m.push({...f,name:`${p.name}.${b}.${f.name}`})}else(p.type==="group"||p.type==="row")&&"fields"in p&&p.fields?m.push(...a(p.fields)):m.push(p);return m},r=e.steps?this.stateManager.getCurrentStepFields()||[]:e.fields||[],i=a(r).filter(d=>d.validations?.some(m=>m.type==="required")).filter(d=>this.stateManager.getFieldVisibility(d.name)),n=i.length;return{completed:i.filter(d=>{if(this.stateManager.getErrors(d.name).length>0)return!1;let p=this.stateManager.getValue(d.name);return!(p==null||typeof p=="string"&&p.trim()===""||Array.isArray(p)&&p.length===0&&d.type==="array")}).length,total:n}}renderWizard(e,a){let r=this.stateManager.getWizardState();if(!r)return;let o=document.createElement("div");o.className="easy-form-wizard";let s=document.createElement("div");if(s.className="easy-form-wizard-steps",a?.steps)for(let m=0;m<a.steps.length;m++){let p=document.createElement("div");p.className="easy-form-wizard-step",m===r.currentStep&&p.classList.add("active"),r.completedSteps.includes(m)&&p.classList.add("completed"),p.textContent=a.steps[m].title,s.appendChild(p)}o.appendChild(s);let i=document.createElement("div");i.className="easy-form-wizard-fields";let n=this.stateManager.getCurrentStepFields();this.renderFields(i,n),o.appendChild(i);let l=document.createElement("div");if(l.className="easy-form-wizard-nav",r.currentStep>0){let m=document.createElement("button");m.type="button",m.textContent="Anterior",m.className="easy-form-wizard-prev",this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",()=>{this.stateManager.getWizardState()&&this.stateManager.previousStep()&&(this.render(),this.emitStepChange())}),l.appendChild(m)}if(r.currentStep<r.totalSteps-1){let m=document.createElement("button");m.type="button",m.textContent="Siguiente",m.className="easy-form-wizard-next",this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",async()=>{let p=this.stateManager.getWizardState();if(!p)return;let u=this.stateManager.getCurrentStepFields();for(let y of u)this.stateManager.getFieldVisibility(y.name)&&await this.stateManager.validateField(y.name);let h=this.stateManager.getAllErrors(),b={};for(let y of u)h[y.name]&&h[y.name].length>0&&(b[y.name]=h[y.name]);Object.keys(b).length>0?this.emitError(b):(this.stateManager.completeStep(p.currentStep),this.stateManager.nextStep()&&(this.render(),this.emitStepChange()))}),l.appendChild(m)}let d=this.getSubmitButtonConfig(a);if(r.currentStep===r.totalSteps-1&&d.visible){let m=document.createElement("button");m.type="button",m.textContent=d.text,m.className="easy-form-wizard-next",m.style.width=d.width,this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",async()=>{let p=this.stateManager.getCurrentStepFields();for(let f of p)this.stateManager.getFieldVisibility(f.name)&&await this.stateManager.validateField(f.name);let u=this.stateManager.getAllErrors(),h={};for(let f of p)u[f.name]&&u[f.name].length>0&&(h[f.name]=u[f.name]);Object.keys(h).length>0?this.emitError(h):await this.handleSubmit(new Event("submit"))}),l.appendChild(m)}o.appendChild(l),e.appendChild(o)}async handleFieldChange(e,a){await this.stateManager.setValue(e,a);let r=this.schema;if(r){let i=this.findFieldInSchema(r,e);i?.type==="array"&&(this.rerenderArrayField(i)||(this.skipPreserveValuesOnNextRender=!0,requestAnimationFrame(()=>this.render())))}let o=this.stateManager.getDependentFields(e);o.length>0&&(this.dependencyRenderTimeout&&clearTimeout(this.dependencyRenderTimeout),this.dependencyRenderTimeout=setTimeout(()=>{this.renderDependentFields(o),this.emitDependencyChange(e,o)},10));let s=new CustomEvent("change",{detail:{field:e,value:a,values:this.stateManager.getState().values},bubbles:!0,composed:!0});this.dispatchEvent(s)}rerenderArrayField(e){let a=this.shadow.querySelector(`[data-field-name="${e.name}"].easy-form-array`);if(!a?.parentNode)return!1;let r=this.renderArray(e);return a.parentNode.replaceChild(r,a),!0}renderDependentFields(e){let a=this.shadow.querySelector("form");if(!a)return;let r=this.schema;if(r)for(let o of e){let s=a.querySelector(`.easy-form-field[name="${o}"], [data-field-name="${o}"]`)?.closest(".easy-form-field")??a.querySelector(`[data-field-name="${o}"]`);if(s){let i=this.findFieldInSchema(r,o);if(!i)continue;let n=this.renderField(i);n&&s.parentNode&&s.parentNode.replaceChild(n,s)}}}emitDependencyChange(e,a){let r=new CustomEvent("dependencyChange",{detail:{changedField:e,affectedFields:a},bubbles:!0,composed:!0});this.dispatchEvent(r)}async handleFieldBlur(e){this.stateManager.setTouched(e),await this.stateManager.validateField(e),this.updateSingleField(e)}updateSingleField(e){let a=this.schema;if(!a||!this.findFieldInSchema(a,e))return;let o=this.stateManager.getErrors(e),s=o.length>0?o[0]:void 0,i=this.shadow.querySelector(`[name="${e}"]`)?.closest(".easy-form-field");if(!i)return;let n=i.querySelector(".easy-form-error");if(s){if(n)n.textContent=s;else{let d=document.createElement("p");d.className="easy-form-error",d.textContent=s,i.appendChild(d)}i.querySelector("input, textarea, select")?.classList.add("easy-form-input-error")}else n?.remove(),i.querySelector("input, textarea, select")?.classList.remove("easy-form-input-error")}findFieldInSchema(e,a){let r=e.fields||[],o=a.indexOf(".");if(o>0){let s=a.slice(0,o),i=a.slice(o+1),n=r.find(l=>l.name===s);if(!n)return null;if((n.type==="group"||n.type==="row")&&"fields"in n&&n.fields){let l=this.findFieldInSchema({fields:n.fields},i);return l?{...l,name:a}:null}return null}for(let s of r){if(s.name===a)return s;if(s.type==="group"&&"fields"in s){let i=this.findFieldInSchema({fields:s.fields},a);if(i)return i}if(s.type==="row"&&"fields"in s){let i=this.findFieldInSchema({fields:s.fields},a);if(i)return i}}return null}async handleSubmit(e){if(e.preventDefault(),this.attemptsLock?.isLocked())return;let a=await this.stateManager.validateForm(),r=this.stateManager.getState();if(Object.keys(a).length>0){this.emitError(a),this.render();return}let o=new CustomEvent("submit",{detail:{values:r.values,isValid:!0,errors:{}},bubbles:!0,composed:!0});this.dispatchEvent(o)}emitError(e){let a=new CustomEvent("error",{detail:{errors:e},bubbles:!0,composed:!0});this.dispatchEvent(a)}emitStepChange(){let e=this.stateManager.getWizardState();if(!e)return;let a=new CustomEvent("stepChange",{detail:{currentStep:e.currentStep,previousStep:e.currentStep>0?e.currentStep-1:e.currentStep,totalSteps:e.totalSteps},bubbles:!0,composed:!0});this.dispatchEvent(a)}registerComponents(e){this.customComponents={...this.customComponents,...e},ge(e)}reset(){this.stateManager.reset(),this.render()}incrementAttempts(){this.attemptsLock?.incrementAttempts(),this.attemptsLock?.isLocked()&&this.updateLockOverlay()}resetAttempts(){this.attemptsLock?.reset(),this.stopLockCountdown(),this.updateLockOverlay(),this.render()}isLocked(){return this.attemptsLock?.isLocked()??!1}getRemainingBlockTimeMs(){return this.attemptsLock?.getRemainingBlockTimeMs()??0}requestSubmit(){let e=this.shadow.querySelector("form");e&&typeof e.requestSubmit=="function"&&e.requestSubmit()}clear(){let e=this.schema,a=this.template,r=null;a?r=this.getSchemaFromTemplate(a):r=e,r&&(this.stateManager.initializeSchema(r,{}),this.render())}getValues(){return this.stateManager.getState().values}getValue(e){return this.stateManager.getValue(e)}async setValue(e,a){await this.stateManager.setValue(e,a),this.render()}async setValues(e){for(let[a,r]of Object.entries(e))await this.stateManager.setValue(a,r);this.render()}async validate(){let e=await this.stateManager.validateForm();return this.render(),Object.keys(e).length>0&&this.emitError(e),e}async validateField(e){return await this.stateManager.validateField(e),this.updateSingleField(e),this.stateManager.getErrors(e)}getErrors(){return this.stateManager.getAllErrors()}getFieldErrors(e){return this.stateManager.getErrors(e)}isValid(){return this.stateManager.getState().isValid}get theme(){let e=this.getAttribute("theme");return e&&["plano","tradicional","material","rounded-shadow","lines","shadcn","chakra","mantine","glass","bordered","minimal","efc"].includes(e)?e:"plano"}set theme(e){e?this.setAttribute("theme",e):this.removeAttribute("theme")}get colors(){let e=this.getAttribute("colors");return e?F(e):null}set colors(e){e?this.setAttribute("colors",M(e)):this.removeAttribute("colors")}get initialData(){let e=this.getAttribute("initialData");return e?F(e):null}set initialData(e){e?this.setAttribute("initialData",M(e)):this.removeAttribute("initialData")}get loading(){return this.hasAttribute("loading")}set loading(e){e?this.setAttribute("loading",""):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}setupStyles(){let e=this.shadow.querySelector("style");e&&e.remove();let a=this.theme,r=ce(this.colors||void 0),o=pe(a,r),s=document.createElement("style");s.textContent=o,this.shadow.firstChild?this.shadow.insertBefore(s,this.shadow.firstChild):this.shadow.appendChild(s)}};typeof window<"u"&&typeof customElements<"u"&&!customElements.get("easy-form")&&customElements.define("easy-form",de);export{N as AttemptsLock,P as ConditionEngine,de as EasyForm,D as INJECTION_VALIDATION_MESSAGE,L as MaskEngine,xe as PREDEFINED_MASKS,z as SchemaParser,V as StateManager,q as ValidationEngine,M as attributeValue,we as containsInjection,be as createInput,ye as extendTemplate,ut as generateId,it as getAvailableTemplates,ce as getColors,ie as getCustomComponent,A as getNestedValue,ue as getPredefinedMask,le as getTemplate,pe as getThemeStyles,I as isSafeFromInjection,ke as isValidEmail,F as parseAttributeValue,Me as registerComponent,ge as registerComponents,ft as sanitizeId,T as setNestedValue,ne as templates};
|
|
2184
|
+
`;return}delete E.Icon.Default.prototype._getIconUrl,E.Icon.Default.mergeOptions({iconRetinaUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png",iconUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png",shadowUrl:"https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png"}),this.mapInstance=E.map(u,{preferCanvas:!1,zoomControl:!0}).setView([s,i],r);let v=E.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',maxZoom:19}).addTo(this.mapInstance);this.mapInstance.invalidateSize(),v.on("load",()=>{this.mapInstance&&this.mapInstance.invalidateSize()});let C=()=>{this.mapInstance&&this.mapInstance.invalidateSize()};setTimeout(C,100),setTimeout(C,300),setTimeout(C,500),new IntersectionObserver(x=>{x.forEach(w=>{w.isIntersecting&&this.mapInstance&&setTimeout(()=>{this.mapInstance?.invalidateSize()},100)})}).observe(u),this.markerInstance=E.marker([s,i],{draggable:!0}).addTo(this.mapInstance).on("dragend",()=>{let x=this.markerInstance.getLatLng();d.value=String(Number(x.lat.toFixed(6))),m.value=String(Number(x.lng.toFixed(6))),this.onChange({lat:x.lat,lng:x.lng}),this.onBlur()}),this.mapInstance.on("click",x=>{let{lat:w,lng:S}=x.latlng;this.markerInstance.setLatLng([w,S]),d.value=String(Number(w.toFixed(6))),m.value=String(Number(S.toFixed(6))),this.onChange({lat:w,lng:S}),this.onBlur()})})(),this.createFieldContainer(n)}syncMarkerPosition(e,a){this.mapInstance&&this.markerInstance&&(this.markerInstance.setLatLng([e,a]),this.mapInstance.setView([e,a]),setTimeout(()=>{this.mapInstance?.invalidateSize()},50))}};var Fe=c=>`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="${c?"currentColor":"none"}" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" role="img" aria-hidden="true"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>`,ae=class extends g{render(){let t=this.field,e=t.max??5,a=t.half??!1,r=this.value!=null?Number(this.value):0,o=document.createElement("div");o.className="easy-form-rating",o.setAttribute("role","slider"),o.setAttribute("aria-valuemin","0"),o.setAttribute("aria-valuemax",String(e)),o.setAttribute("aria-valuenow",String(r)),o.setAttribute("aria-label",this.field.label||"Rating"),o.setAttribute("tabindex","0");let s=document.createElement("div");s.className="easy-form-rating-stars";for(let i=1;i<=e;i++){let n=document.createElement("button");n.type="button";let l=r>=i||a&&r>=i-.5;n.className=l?"easy-form-rating-star easy-form-rating-star-filled":"easy-form-rating-star",n.innerHTML=Fe(l),n.setAttribute("aria-label",`${i} de ${e}`),n.addEventListener("click",d=>{d.preventDefault();let m=d.target.closest("button")?.getBoundingClientRect(),p=i;if(a&&m){let u=m.left+m.width/2;p=d.clientX<u?i-.5:i}this.onChange(p),this.onBlur(),this.rerenderStars(o,e,p,a),o.setAttribute("aria-valuenow",String(p))}),s.appendChild(n)}return o.appendChild(s),o.addEventListener("keydown",i=>{let n=Number(o.getAttribute("aria-valuenow"))||0,l=n;i.key==="ArrowRight"||i.key==="ArrowUp"?(i.preventDefault(),l=Math.min(e,a?n+.5:n+1),this.onChange(l)):(i.key==="ArrowLeft"||i.key==="ArrowDown")&&(i.preventDefault(),l=Math.max(0,a?n-.5:n-1),this.onChange(l)),l!==n&&(this.rerenderStars(o,e,l,a),o.setAttribute("aria-valuenow",String(l)))}),this.createFieldContainer(o)}rerenderStars(t,e,a,r){t.querySelectorAll(".easy-form-rating-star").forEach((s,i)=>{let n=i+1,l=a>=n||r&&a>=n-.5;s.className=l?"easy-form-rating-star easy-form-rating-star-filled":"easy-form-rating-star",s.innerHTML=Fe(l)})}};var oe=class extends g{render(){let t=this.field,e=t.min??0,a=t.max??100,r=t.step??1,o=t.showValue??!1,s=document.createElement("input");s.type="range",s.min=String(e),s.max=String(a),s.step=String(r),s.value=this.value!=null?String(this.value):String(e),s.setAttribute("aria-valuemin",String(e)),s.setAttribute("aria-valuemax",String(a)),s.setAttribute("aria-valuenow",s.value),this.applyCommonProps(s),s.addEventListener("input",n=>{let l=n.target,d=r>=1?parseInt(l.value,10):parseFloat(l.value);this.onChange(isNaN(d)?e:d),i&&(i.textContent=l.value),s.setAttribute("aria-valuenow",l.value)}),s.addEventListener("change",()=>{this.onBlur()});let i=null;if(o){i=document.createElement("span"),i.className="easy-form-slider-value",i.textContent=s.value;let n=document.createElement("div");return n.className="easy-form-slider-wrapper",n.appendChild(s),n.appendChild(i),this.createFieldContainer(n)}return this.createFieldContainer(s)}};var Ue=/^#?([0-9A-Fa-f]{6})$/;function he(c){let t=c.match(Ue);return t?`#${t[1].toLowerCase()}`:/^[0-9A-Fa-f]{6}$/.test(c)?`#${c.toLowerCase()}`:"#000000"}var se=class extends g{render(){let e=this.field.defaultValue??"#000000",a=this.value!=null&&typeof this.value=="string"?he(this.value):e,r=document.createElement("div");r.className="easy-form-color-wrapper";let o=document.createElement("input");o.type="color",o.value=a,o.setAttribute("value",a),o.setAttribute("aria-label",this.field.label||"Color"),o.id=`${this.getFieldId()}-picker`,this.field.disabled&&o.setAttribute("disabled","true");let s=document.createElement("input");s.type="text",s.value=a,s.setAttribute("aria-label",`${this.field.label||"Color"} (hex)`),s.placeholder="#000000",s.className="easy-form-color-text",this.applyCommonProps(s);let i=()=>{let l=o.value||"#000000",d=he(l);s.value=d,this.onChange(d)},n=()=>{let l=s.value.trim(),d=l.startsWith("#")?l:`#${l}`;if(/^#[0-9A-Fa-f]{6}$/.test(d)){let m=he(d);o.value=m,this.onChange(m)}};return o.addEventListener("input",i),o.addEventListener("change",()=>{i(),this.onBlur()}),s.addEventListener("input",n),s.addEventListener("blur",()=>{n(),this.onBlur()}),r.appendChild(o),r.appendChild(s),this.createFieldContainer(r)}};function be(c,t,e,a,r){switch(c.type){case"text":case"email":return new $(c,t,e,a,r).render();case"password":return new ee(c,t,e,a,r).render();case"number":return new B(c,t,e,a,r).render();case"textarea":return new O(c,t,e,a,r).render();case"select":return new j(c,t,e,a,r).render();case"checkbox":return new W(c,t,e,a,r).render();case"radio":return new _(c,t,e,a,r).render();case"switch":return new Y(c,t,e,a,r).render();case"date":return new U(c,t,e,a,r).render();case"file":return new G(c,t,e,a,r).render();case"file-drop":return new te(c,t,e,a,r).render();case"map":return new re(c,t,e,a,r).render();case"rating":return new ae(c,t,e,a,r).render();case"slider":return new oe(c,t,e,a,r).render();case"colorpicker":return new se(c,t,e,a,r).render();case"quantity":return new K(c,t,e,a,r).render();case"accordion-select":return new Z(c,t,e,a,r).render();case"image-grid-select":return new J(c,t,e,a,r).render();case"otp":return new Q(c,t,e,a,r).render();default:let o=document.createElement("div");return o.textContent=`Tipo de campo no soportado: ${c.type}`,o}}var Le=new Map;function Me(c,t){Le.set(c,t)}function ge(c){for(let[t,e]of Object.entries(c))Me(t,e)}function ie(c){return Le.get(c)}var Ge={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"password",name:"password",label:"Password",placeholder:"Enter your password",validations:[{type:"required",message:"Password is required"},{type:"minLength",value:6,message:"Password must be at least 6 characters"}]},{type:"checkbox",name:"rememberMe",label:"Remember me",defaultValue:!1}]},Ke={fields:[{type:"text",name:"name",label:"Full Name",placeholder:"Enter your full name",validations:[{type:"required",message:"Name is required"},{type:"minLength",value:2,message:"Name must be at least 2 characters"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"password",name:"password",label:"Password",placeholder:"Create a password",validations:[{type:"required",message:"Password is required"},{type:"minLength",value:8,message:"Password must be at least 8 characters"}]},{type:"password",name:"confirmPassword",label:"Confirm Password",placeholder:"Confirm your password",validations:[{type:"required",message:"Please confirm your password"},{type:"custom",validator:c=>typeof c=="string"&&c.length>=8,message:"Password must be at least 8 characters"}]}]},Ze={fields:[{type:"otp",name:"code",label:"Verification Code",validations:[{type:"required",message:"Verification code is required"}]}]},Je={fields:[{type:"text",name:"name",label:"Name",placeholder:"Enter your name",validations:[{type:"required",message:"Name is required"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"text",name:"subject",label:"Subject",placeholder:"Enter the subject",validations:[{type:"required",message:"Subject is required"}]},{type:"textarea",name:"message",label:"Message",placeholder:"Enter your message",rows:5,validations:[{type:"required",message:"Message is required"},{type:"minLength",value:10,message:"Message must be at least 10 characters"}]}]},Qe={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email address",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]}]},Xe={fields:[{type:"password",name:"currentPassword",label:"Current Password",placeholder:"Enter your current password",validations:[{type:"required",message:"Current password is required"}]},{type:"password",name:"newPassword",label:"New Password",placeholder:"Enter your new password",validations:[{type:"required",message:"New password is required"},{type:"minLength",value:8,message:"Password must be at least 8 characters"}]},{type:"password",name:"confirmPassword",label:"Confirm New Password",placeholder:"Confirm your new password",validations:[{type:"required",message:"Please confirm your new password"},{type:"custom",validator:c=>typeof c=="string"&&c.length>=8,message:"Password must be at least 8 characters"}]}]},et={fields:[{type:"text",name:"name",label:"Full Name",placeholder:"Enter your full name",validations:[{type:"required",message:"Name is required"}]},{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"text",name:"phone",label:"Phone",placeholder:"Enter your phone number",mask:{type:"phone"}},{type:"textarea",name:"bio",label:"Bio",placeholder:"Tell us about yourself",rows:4},{type:"file",name:"avatar",label:"Profile Picture",accept:"image/*"}]},tt={fields:[{type:"group",name:"billingAddress",label:"Billing Address",fields:[{type:"text",name:"street",label:"Street Address",placeholder:"Enter street address",validations:[{type:"required",message:"Street address is required"}]},{type:"row",name:"cityState",fields:[{type:"text",name:"city",label:"City",placeholder:"City",validations:[{type:"required",message:"City is required"}]},{type:"text",name:"state",label:"State",placeholder:"State",validations:[{type:"required",message:"State is required"}]}]},{type:"text",name:"zipCode",label:"ZIP Code",placeholder:"ZIP Code",validations:[{type:"required",message:"ZIP code is required"}]}]},{type:"select",name:"paymentMethod",label:"Payment Method",options:[{label:"Credit Card",value:"credit-card"},{label:"Debit Card",value:"debit-card"},{label:"PayPal",value:"paypal"},{label:"Bank Transfer",value:"bank-transfer"}],validations:[{type:"required",message:"Payment method is required"}]},{type:"select",name:"shipping",label:"Shipping Method",options:[{label:"Standard (5-7 days)",value:"standard"},{label:"Express (2-3 days)",value:"express"},{label:"Overnight",value:"overnight"}],validations:[{type:"required",message:"Shipping method is required"}]}]},rt={fields:[{type:"select",name:"rating",label:"Rating",options:[{label:"1 - Poor",value:1},{label:"2 - Fair",value:2},{label:"3 - Good",value:3},{label:"4 - Very Good",value:4},{label:"5 - Excellent",value:5}],validations:[{type:"required",message:"Rating is required"}]},{type:"textarea",name:"comment",label:"Comment",placeholder:"Share your feedback",rows:5,validations:[{type:"required",message:"Comment is required"}]},{type:"email",name:"email",label:"Email (optional)",placeholder:"Enter your email if you want a response"}]},at={fields:[{type:"email",name:"email",label:"Email",placeholder:"Enter your email",validations:[{type:"required",message:"Email is required"},{type:"email",message:"Please enter a valid email"}]},{type:"checkbox",name:"weeklyNewsletter",label:"Weekly Newsletter",defaultValue:!0},{type:"checkbox",name:"productUpdates",label:"Product Updates",defaultValue:!1},{type:"checkbox",name:"promotions",label:"Promotions and Special Offers",defaultValue:!1}]},ot={fields:[{type:"date",name:"date",label:"Date",validations:[{type:"required",message:"Date is required"}]},{type:"text",name:"time",label:"Time",placeholder:"HH:MM",mask:{type:"time"},validations:[{type:"required",message:"Time is required"}]},{type:"number",name:"guests",label:"Number of Guests",placeholder:"Enter number of guests",min:1,max:20,validations:[{type:"required",message:"Number of guests is required"},{type:"min",value:1,message:"At least 1 guest is required"}]},{type:"textarea",name:"specialRequests",label:"Special Requests",placeholder:"Any special requests or dietary restrictions?",rows:4}]},st={fields:[{type:"select",name:"rating",label:"Rating",options:[{label:"1 Star",value:1},{label:"2 Stars",value:2},{label:"3 Stars",value:3},{label:"4 Stars",value:4},{label:"5 Stars",value:5}],validations:[{type:"required",message:"Rating is required"}]},{type:"text",name:"title",label:"Review Title",placeholder:"Give your review a title",validations:[{type:"required",message:"Review title is required"},{type:"minLength",value:5,message:"Title must be at least 5 characters"}]},{type:"textarea",name:"comment",label:"Your Review",placeholder:"Share your experience",rows:6,validations:[{type:"required",message:"Review comment is required"},{type:"minLength",value:20,message:"Review must be at least 20 characters"}]}]},ne={login:Ge,register:Ke,otp:Ze,contact:Je,"password-reset":Qe,"password-change":Xe,profile:et,checkout:tt,feedback:rt,subscription:at,booking:ot,review:st};function le(c){return c in ne?ne[c]:null}function it(){return Object.keys(ne)}function ye(c,t){let e=le(c);if(!e)throw new Error(`Template "${c}" not found`);let a=e.fields||[],r=e.steps;if(r&&r.length>0){let o=r[r.length-1];return{...e,steps:[...r.slice(0,-1),{...o,fields:[...o.fields,...t]}]}}return{...e,fields:[...a,...t]}}var nt=typeof HTMLElement<"u"?HTMLElement:class{},de=class extends nt{constructor(){if(typeof HTMLElement>"u")throw new Error("EasyForm can only be used in a browser environment");super();this.customComponents={};this.isRendering=!1;this.attemptsLock=null;this.lockCountdownInterval=null;this.slotTemplates=null;this.skipPreserveValuesOnNextRender=!1;this.dependencyRenderTimeout=null;this.stateManager=new P,this.shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["schema","template","template-extend","theme","colors","initialData","loading","disabled","max-attempts","block-duration-minutes","attempts-storage-key","submit-button","label-position","show-completed-indicator","form-direction"]}get schema(){let e=this.getAttribute("schema");return e?this.getAttribute("template")?(console.warn('EasyForm: Cannot use both "schema" and "template" attributes. "template" will be ignored.'),F(e)):F(e):null}set schema(e){e&&this.getAttribute("template")&&(console.warn('EasyForm: Setting "schema" will remove "template" attribute.'),this.removeAttribute("template"),this.removeAttribute("template-extend")),e?this.setAttribute("schema",M(e)):this.removeAttribute("schema")}get template(){let e=this.getAttribute("template");return e?(this.getAttribute("schema")&&console.warn('EasyForm: Cannot use both "template" and "schema" attributes. "schema" will be ignored.'),e):null}set template(e){e&&this.getAttribute("schema")&&(console.warn('EasyForm: Setting "template" will remove "schema" attribute.'),this.removeAttribute("schema")),e?this.setAttribute("template",e):(this.removeAttribute("template"),this.removeAttribute("template-extend"))}get templateExtend(){let e=this.getAttribute("template-extend");return e?F(e):null}set templateExtend(e){e?this.setAttribute("template-extend",M(e)):this.removeAttribute("template-extend")}get maxAttempts(){let e=this.getAttribute("max-attempts");if(!e)return null;let a=parseInt(e,10);return isNaN(a)?null:a}set maxAttempts(e){e!=null&&e>=1?this.setAttribute("max-attempts",String(e)):this.removeAttribute("max-attempts")}get blockDurationMinutes(){let e=this.getAttribute("block-duration-minutes");if(!e)return null;let a=parseInt(e,10);return isNaN(a)?null:a}set blockDurationMinutes(e){e!=null&&e>=1?this.setAttribute("block-duration-minutes",String(e)):this.removeAttribute("block-duration-minutes")}get attemptsStorageKey(){return this.getAttribute("attempts-storage-key")}set attemptsStorageKey(e){e?this.setAttribute("attempts-storage-key",e):this.removeAttribute("attempts-storage-key")}get submitButton(){let e=this.getAttribute("submit-button");if(e)try{return F(e)}catch{return null}return null}set submitButton(e){e&&typeof e=="object"?this.setAttribute("submit-button",M(e)):this.removeAttribute("submit-button")}getSubmitButtonConfig(e){let a=this.submitButton,o={...e?.submitButton,...a};return{visible:o.visible??!0,text:o.text??"Enviar",width:o.width??"auto",align:o.align??"left"}}connectedCallback(){this.setupAttemptsLock(),this.setupStyles(),this.render()}attributeChangedCallback(e,a,r){if(e==="schema"&&r!==a&&(this.getAttribute("template")&&(console.warn('EasyForm: "schema" and "template" cannot be used together. Removing "template".'),this.removeAttribute("template"),this.removeAttribute("template-extend")),this.handleSchemaChange()),e==="template"&&r!==a&&(this.getAttribute("schema")&&(console.warn('EasyForm: "template" and "schema" cannot be used together. Removing "schema".'),this.removeAttribute("schema")),this.handleSchemaChange()),e==="template-extend"&&r!==a&&this.handleSchemaChange(),e==="initialData"&&r!==a&&this.handleSchemaChange(),(e==="theme"||e==="colors")&&r!==a&&this.setupStyles(),e==="loading"&&r!==a){let o=this.shadow.querySelector("form");this.updateLoadingOverlay(o||void 0),o&&o.querySelectorAll("input, textarea, select, button").forEach(i=>{i instanceof HTMLElement&&"disabled"in i&&(i.disabled=this.loading)})}e==="disabled"&&r!==a&&this.render(),(e==="label-position"||e==="form-direction"||e==="show-completed-indicator")&&r!==a&&this.render(),(e==="max-attempts"||e==="block-duration-minutes"||e==="attempts-storage-key")&&r!==a&&(this.setupAttemptsLock(),this.updateLockOverlay()),e==="submit-button"&&r!==a&&this.render()}setupAttemptsLock(){let e=this.maxAttempts;if(e==null||e<1){this.attemptsLock=null;return}this.attemptsLock=new N({maxAttempts:e,blockDurationMinutes:this.blockDurationMinutes??5,storageKey:this.attemptsStorageKey??void 0,onLocked:()=>{this.updateLockOverlay()},onUnlocked:()=>{this.stopLockCountdown(),this.updateLockOverlay(),this.render()}})}handleSchemaChange(){let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,e){let r=this.initialData;this.stateManager.initializeSchema(e,r||void 0),this.render()}}getSchemaFromTemplate(e){let a=le(e);if(!a)return console.error(`EasyForm: Template "${e}" not found`),null;let r=this.templateExtend;return r&&r.length>0?ye(e,r):a}async render(){if(!this.isRendering){this.isRendering=!0;try{let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,!e){let k=this.shadow.querySelector("form");k&&k.parentNode===this.shadow&&k.remove();return}let r=this.skipPreserveValuesOnNextRender,o=r?{}:this.preserveCurrentValues();this.skipPreserveValuesOnNextRender=!1;let s=this.stateManager.getWizardState();if(o&&Object.keys(o).length>0)for(let[k,x]of Object.entries(o))this.stateManager.setValueWithoutValidation(k,x);let i=this.initialData,n=s!==null,l=e.steps&&e.steps.length>0;if(!r&&(!s||!n||!l||s&&e.steps&&s.totalSteps!==e.steps.length)&&(this.stateManager.initializeSchema(e,i||void 0),n&&l&&s)){let k=this.stateManager.getWizardState();if(k&&s.totalSteps===k.totalSteps){s.currentStep>=0&&s.currentStep<k.totalSteps&&this.stateManager.goToStep(s.currentStep);for(let x of s.completedSteps)x>=0&&x<k.totalSteps&&this.stateManager.completeStep(x)}}let m=this.stateManager.getWizardState(),p=document.createElement("form");p.addEventListener("submit",k=>this.handleSubmit(k)),(this.disabled||this.loading)&&p.classList.add("easy-form-disabled");let u=this.getAttribute("form-direction"),h=e.direction??(u==="vertical"||u==="horizontal"?u:"vertical");p.classList.add(`easy-form-direction-${h}`);let b=this.getAttribute("show-completed-indicator"),f=e.completedIndicator??(b!==null&&b!=="false"),y=typeof f=="object"&&f?.position?f.position:"top";if(m)this.renderWizard(p,e);else{this.renderFields(p,e.fields||[]);let k=this.getSubmitButtonConfig(e);if(k.visible){let x=document.createElement("div");x.className="easy-form-submit-wrapper",x.style.textAlign=k.align;let w=document.createElement("button");w.type="submit",w.textContent=k.text,w.className="easy-form-submit",w.style.width=k.width,(this.disabled||this.loading)&&(w.disabled=!0),x.appendChild(w),p.appendChild(x)}}let E=null;if(f){let{completed:k,total:x}=this.getCompletedRequiredProgress(e),w=document.createElement("div");w.className="easy-form-completed-indicator",w.setAttribute("role","progressbar"),w.setAttribute("aria-valuenow",String(k)),w.setAttribute("aria-valuemin","0"),w.setAttribute("aria-valuemax",String(x)),w.setAttribute("aria-label",`Campos obligatorios completados: ${k} de ${x}`);let S=document.createElement("div");S.className="easy-form-completed-track";let me=document.createElement("div");me.className="easy-form-completed-fill",me.style.width=x>0?`${k/x*100}%`:"0%",S.appendChild(me),w.appendChild(S),E=document.createElement("div"),E.className="easy-form-wrapper",y==="top"?(E.appendChild(w),E.appendChild(p)):(E.appendChild(p),E.appendChild(w))}let v=this.shadow.querySelector("form");if(v&&v.parentNode===this.shadow&&v!==p)try{v.remove()}catch(k){console.warn("Error al eliminar formulario anterior:",k)}let C=this.shadow.querySelector(".easy-form-wrapper");C&&C.remove(),this.shadow.appendChild(E||p),this.loading&&this.updateLoadingOverlay(p),this.updateLockOverlay(p)}finally{this.isRendering=!1}}}updateLockOverlay(e){let a=this.shadow.querySelector(".easy-form-lock-overlay");if(a&&a.remove(),this.stopLockCountdown(),!this.attemptsLock?.isLocked())return;let r=e||this.shadow.querySelector("form");if(!r)return;let o=document.createElement("div");o.className="easy-form-lock-overlay";let s=document.createElement("div");s.className="easy-form-lock-message",s.setAttribute("role","alert");let i=()=>{let n=this.attemptsLock.getRemainingBlockTimeMs();if(n<=0){this.stopLockCountdown();return}let l=Math.floor(n/6e4),d=Math.floor(n%6e4/1e3),m=l>0?`${l} min ${d} s`:`${d} segundos`;s.textContent=`Demasiados intentos. Intenta de nuevo en ${m}.`};i(),o.appendChild(s),r.appendChild(o),this.lockCountdownInterval=setInterval(i,1e3)}stopLockCountdown(){this.lockCountdownInterval&&(clearInterval(this.lockCountdownInterval),this.lockCountdownInterval=null)}updateLoadingOverlay(e){let a=this.shadow.querySelector(".easy-form-loading-overlay");if(a&&a.remove(),this.loading){let r=e||this.shadow.querySelector("form");if(r){let o=document.createElement("div");o.className="easy-form-loading-overlay";let s=document.createElement("div");s.className="easy-form-loading-spinner",o.appendChild(s),r.appendChild(o)}}}preserveCurrentValues(){let e=null,a=this.template;if(a?e=this.getSchemaFromTemplate(a):e=this.schema,!e)return{};let r=this.shadow.querySelector("form"),o={};if(!r)return o;let s=r.querySelectorAll("input, textarea, select");for(let i of s){let n=i.getAttribute("name");if(!n||!(this.findFieldInSchema(e,n)!==null))continue;let d;if(i instanceof HTMLInputElement)if(i.type==="checkbox")d=i.checked;else if(i.type==="radio")if(i.checked)d=i.value;else continue;else i.type==="number"?d=i.value===""?null:Number(i.value):d=i.value;else i instanceof HTMLTextAreaElement?d=i.value:i instanceof HTMLSelectElement&&(i.multiple?d=Array.from(i.selectedOptions).map(m=>m.value):d=i.value||null);d!==void 0&&(o[n]=d===""?null:d)}return o}initializeSlotTemplates(){if(this.slotTemplates!==null)return;let e=[];for(let a of Array.from(this.children))a instanceof HTMLElement&&e.push(a);if(e.length===0){this.slotTemplates=[];return}this.slotTemplates=e.map(a=>{let r=a.hasAttribute("row")?a.getAttribute("row"):null,o=r!=null&&r!==""?Number(r):NaN,s=Number.isFinite(o)?o:null;return{template:a.cloneNode(!0),row:s}})}getSlotClonesByRow(e){this.initializeSlotTemplates();let a=new Map;if(!this.slotTemplates||this.slotTemplates.length===0)return a;for(let{template:r,row:o}of this.slotTemplates){let s=typeof o=="number"?o:-1;Number.isFinite(s)||(s=-1),(s<0||s>=e)&&(s=-1);let i=r.cloneNode(!0),n=a.get(s)??[];n.push(i),a.set(s,n)}return a}applySlotDisabledState(e){if(!this.disabled&&!this.loading)return;e.classList.add("easy-form-slot-disabled"),e.querySelectorAll("input, textarea, select, button").forEach(r=>{"disabled"in r&&(r.disabled=!0)})}renderFields(e,a){if(a.length===0){let n=this.getSlotClonesByRow(0).get(-1);if(n&&n.length>0)for(let l of n)this.applySlotDisabledState(l),e.appendChild(l);return}let r=a.length,o=this.getSlotClonesByRow(r);for(let i=0;i<a.length;i++){let n=o.get(i);if(n&&n.length>0){for(let m of n)this.applySlotDisabledState(m),e.appendChild(m);o.delete(i)}let l=a[i],d=this.renderField(l);d&&e.appendChild(d)}let s=o.get(-1);if(s&&s.length>0)for(let i of s)this.applySlotDisabledState(i),e.appendChild(i)}renderField(e){let a=this.stateManager.getFieldVisibility(e.name),r=this.stateManager.getFieldEnabled(e.name);if(e.type==="group"){let f=this.renderGroup(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="row"){let f=this.renderRow(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="array"){let f=this.renderArray(e);return a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled"),f}if(e.type==="custom"){let f=this.renderCustom(e);return f&&(a||(f.style.display="none",f.classList.add("easy-form-field-hidden")),r||f.classList.add("easy-form-field-disabled")),f}let o=this.stateManager.getValue(e.name),s=this.stateManager.getErrors(e.name),i=s.length>0?s[0]:void 0,n=this.disabled||this.loading,l=this.getAttribute("label-position"),d=["up","down","left","right","none"],m=e.labelPosition??(l&&d.includes(l)?l:"up"),p={...e,disabled:n||!r||e.disabled,labelPosition:m},u=ie(e.type);if(u){let f=u({field:p,value:o,error:i,onChange:y=>this.handleFieldChange(e.name,y),onBlur:()=>this.handleFieldBlur(e.name)});return f&&!a&&(f.style.display="none",f.classList.add("easy-form-field-hidden")),f}let h=be(p,o,i,f=>this.handleFieldChange(e.name,f),()=>this.handleFieldBlur(e.name)),b=h.querySelector(".easy-form-field")||h;return b instanceof HTMLElement&&b.setAttribute("data-field-name",e.name),a||(h.style.display="none",h.classList.add("easy-form-field-hidden")),h}renderGroup(e){let a=e,r=a.direction??"vertical",o=a.collapsible===!0,s=a.defaultOpen!==!1,i=document.createElement("div");if(i.className=`easy-form-group easy-form-direction-${r}`,e.name&&i.setAttribute("data-field-name",e.name),o){i.classList.add("easy-form-group-collapsible"),s||i.classList.add("easy-form-group-collapsed");let n=document.createElement("button");n.type="button",n.className="easy-form-group-header",n.setAttribute("aria-expanded",String(s));let l=`easy-form-group-${(e.name||"group").replace(/[^a-z0-9]/gi,"-")}-content`;n.setAttribute("aria-controls",l);let d=document.createElement("span");d.textContent=e.label||"Grupo";let m=document.createElement("span");m.className="easy-form-group-chevron",m.setAttribute("aria-hidden","true"),m.textContent="\u25BC",n.appendChild(d),n.appendChild(m),i.appendChild(n);let p=document.createElement("div");if(p.id=l,p.className="easy-form-group-content","fields"in e&&e.fields)for(let h of e.fields){let b=h.name.startsWith(e.name+".")?h.name:`${e.name}.${h.name}`,f={...h,name:b},y=this.renderField(f);y&&p.appendChild(y)}i.appendChild(p);let u=h=>{h?p.style.maxHeight=p.scrollHeight+"px":p.style.maxHeight="0"};s?requestAnimationFrame(()=>u(!0)):p.style.maxHeight="0",n.addEventListener("click",()=>{i.classList.contains("easy-form-group-collapsed")?(i.classList.remove("easy-form-group-collapsed"),n.setAttribute("aria-expanded","true"),u(!0)):(p.style.maxHeight=p.scrollHeight+"px",requestAnimationFrame(()=>{i.classList.add("easy-form-group-collapsed"),n.setAttribute("aria-expanded","false"),u(!1)}))})}else{if(e.label){let n=document.createElement("h3");n.className="easy-form-group-label",n.textContent=e.label,i.appendChild(n)}if("fields"in e&&e.fields)for(let n of e.fields){let l=n.name.startsWith(e.name+".")?n.name:`${e.name}.${n.name}`,d={...n,name:l},m=this.renderField(d);m&&i.appendChild(m)}}return i}renderRow(e){let a=document.createElement("div");a.className="easy-form-row";let r=e;if(a.style.display="flex",a.style.flexWrap="wrap",a.style.alignItems=r.align||"stretch",r.gap!==void 0){let o=typeof r.gap=="number"?`${r.gap}px`:r.gap;a.style.gap=o}else a.style.gap="1rem";if("fields"in e&&e.fields)for(let o of e.fields){let s=this.renderField(o);if(s){let i=document.createElement("div");i.style.flex="1",i.style.minWidth="0",i.appendChild(s),a.appendChild(i)}}return a}renderArray(e){let a=document.createElement("div");if(a.className="easy-form-array",a.setAttribute("data-field-name",e.name),e.label){let m=document.createElement("label");m.className="easy-form-label",m.textContent=e.label,a.appendChild(m)}let r=this.stateManager.getValue(e.name)||[],o=e,s=o.minItems??0,i=o.maxItems??1/0,n=document.createElement("div");n.className="easy-form-array-items";for(let m=0;m<r.length;m++){let p=document.createElement("div");if(p.className="easy-form-array-item",o.itemSchema?.fields)for(let b of o.itemSchema.fields){let f={...b,name:`${e.name}.${m}.${b.name}`},y=this.renderField(f);y&&p.appendChild(y)}let u=document.createElement("button");u.type="button",u.textContent="Eliminar",u.className="easy-form-array-remove";let h=r.length<=s;this.disabled||this.loading||h?u.disabled=!0:u.addEventListener("click",()=>{let b=[...r];b.splice(m,1),this.handleFieldChange(e.name,b)}),p.appendChild(u),n.appendChild(p)}a.appendChild(n);let l=document.createElement("button");l.type="button",l.textContent="Agregar",l.className="easy-form-array-add";let d=r.length>=i;return this.disabled||this.loading||d?l.disabled=!0:l.addEventListener("click",()=>{let m=this.stateManager.createDefaultArrayItem(e),p=[...r,m];this.handleFieldChange(e.name,p)}),a.appendChild(l),a}renderCustom(e){let a=ie("custom");if(!a){let i=document.createElement("div");return i.textContent=`Componente custom no registrado para: ${e.name}`,i}let r=this.stateManager.getValue(e.name),o=this.stateManager.getErrors(e.name),s=o.length>0?o[0]:void 0;return a({field:e,value:r,error:s,onChange:i=>this.handleFieldChange(e.name,i),onBlur:()=>this.handleFieldBlur(e.name)})}getCompletedRequiredProgress(e){let a=d=>{let m=[];for(let p of d)if(p.type==="array"&&"itemSchema"in p&&p.itemSchema?.fields){let u=this.stateManager.getValue(p.name),h=Array.isArray(u)?u.length:0;for(let b=0;b<h;b++)for(let f of p.itemSchema.fields)m.push({...f,name:`${p.name}.${b}.${f.name}`})}else(p.type==="group"||p.type==="row")&&"fields"in p&&p.fields?m.push(...a(p.fields)):m.push(p);return m},r=e.steps?this.stateManager.getCurrentStepFields()||[]:e.fields||[],i=a(r).filter(d=>d.validations?.some(m=>m.type==="required")).filter(d=>this.stateManager.getFieldVisibility(d.name)),n=i.length;return{completed:i.filter(d=>{if(this.stateManager.getErrors(d.name).length>0)return!1;let p=this.stateManager.getValue(d.name);return!(p==null||typeof p=="string"&&p.trim()===""||Array.isArray(p)&&p.length===0&&d.type==="array")}).length,total:n}}renderWizard(e,a){let r=this.stateManager.getWizardState();if(!r)return;let o=document.createElement("div");o.className="easy-form-wizard";let s=document.createElement("div");if(s.className="easy-form-wizard-steps",a?.steps)for(let m=0;m<a.steps.length;m++){let p=document.createElement("div");p.className="easy-form-wizard-step",m===r.currentStep&&p.classList.add("active"),r.completedSteps.includes(m)&&p.classList.add("completed"),p.textContent=a.steps[m].title,s.appendChild(p)}o.appendChild(s);let i=document.createElement("div");i.className="easy-form-wizard-fields";let n=this.stateManager.getCurrentStepFields();this.renderFields(i,n),o.appendChild(i);let l=document.createElement("div");if(l.className="easy-form-wizard-nav",r.currentStep>0){let m=document.createElement("button");m.type="button",m.textContent="Anterior",m.className="easy-form-wizard-prev",this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",()=>{this.stateManager.getWizardState()&&this.stateManager.previousStep()&&(this.render(),this.emitStepChange())}),l.appendChild(m)}if(r.currentStep<r.totalSteps-1){let m=document.createElement("button");m.type="button",m.textContent="Siguiente",m.className="easy-form-wizard-next",this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",async()=>{let p=this.stateManager.getWizardState();if(!p)return;let u=this.stateManager.getCurrentStepFields();for(let y of u)this.stateManager.getFieldVisibility(y.name)&&await this.stateManager.validateField(y.name);let h=this.stateManager.getAllErrors(),b={};for(let y of u)h[y.name]&&h[y.name].length>0&&(b[y.name]=h[y.name]);Object.keys(b).length>0?this.emitError(b):(this.stateManager.completeStep(p.currentStep),this.stateManager.nextStep()&&(this.render(),this.emitStepChange()))}),l.appendChild(m)}let d=this.getSubmitButtonConfig(a);if(r.currentStep===r.totalSteps-1&&d.visible){let m=document.createElement("button");m.type="button",m.textContent=d.text,m.className="easy-form-wizard-next",m.style.width=d.width,this.disabled||this.loading?m.disabled=!0:m.addEventListener("click",async()=>{let p=this.stateManager.getCurrentStepFields();for(let f of p)this.stateManager.getFieldVisibility(f.name)&&await this.stateManager.validateField(f.name);let u=this.stateManager.getAllErrors(),h={};for(let f of p)u[f.name]&&u[f.name].length>0&&(h[f.name]=u[f.name]);Object.keys(h).length>0?this.emitError(h):await this.handleSubmit(new Event("submit"))}),l.appendChild(m)}o.appendChild(l),e.appendChild(o)}async handleFieldChange(e,a){await this.stateManager.setValue(e,a);let r=this.schema;if(r){let i=this.findFieldInSchema(r,e);i?.type==="array"&&(this.rerenderArrayField(i)||(this.skipPreserveValuesOnNextRender=!0,requestAnimationFrame(()=>this.render())))}let o=this.stateManager.getDependentFields(e);o.length>0&&(this.dependencyRenderTimeout&&clearTimeout(this.dependencyRenderTimeout),this.dependencyRenderTimeout=setTimeout(()=>{this.renderDependentFields(o),this.emitDependencyChange(e,o)},10));let s=new CustomEvent("change",{detail:{field:e,value:a,values:this.stateManager.getState().values},bubbles:!0,composed:!0});this.dispatchEvent(s)}rerenderArrayField(e){let a=this.shadow.querySelector(`[data-field-name="${e.name}"].easy-form-array`);if(!a?.parentNode)return!1;let r=this.renderArray(e);return a.parentNode.replaceChild(r,a),!0}renderDependentFields(e){let a=this.shadow.querySelector("form");if(!a)return;let r=this.schema;if(r)for(let o of e){let s=a.querySelector(`.easy-form-field[name="${o}"], [data-field-name="${o}"]`)?.closest(".easy-form-field")??a.querySelector(`[data-field-name="${o}"]`);if(s){let i=this.findFieldInSchema(r,o);if(!i)continue;let n=this.renderField(i);n&&s.parentNode&&s.parentNode.replaceChild(n,s)}}}emitDependencyChange(e,a){let r=new CustomEvent("dependencyChange",{detail:{changedField:e,affectedFields:a},bubbles:!0,composed:!0});this.dispatchEvent(r)}async handleFieldBlur(e){this.stateManager.setTouched(e),await this.stateManager.validateField(e),this.updateSingleField(e)}updateSingleField(e){let a=this.schema;if(!a||!this.findFieldInSchema(a,e))return;let o=this.stateManager.getErrors(e),s=o.length>0?o[0]:void 0,i=this.shadow.querySelector(`[name="${e}"]`)?.closest(".easy-form-field");if(!i)return;let n=i.querySelector(".easy-form-error");if(s){if(n)n.textContent=s;else{let d=document.createElement("p");d.className="easy-form-error",d.textContent=s,i.appendChild(d)}i.querySelector("input, textarea, select")?.classList.add("easy-form-input-error")}else n?.remove(),i.querySelector("input, textarea, select")?.classList.remove("easy-form-input-error")}findFieldInSchema(e,a){let r=e.fields||[],o=a.indexOf(".");if(o>0){let s=a.slice(0,o),i=a.slice(o+1),n=r.find(l=>l.name===s);if(!n)return null;if((n.type==="group"||n.type==="row")&&"fields"in n&&n.fields){let l=this.findFieldInSchema({fields:n.fields},i);return l?{...l,name:a}:null}return null}for(let s of r){if(s.name===a)return s;if(s.type==="group"&&"fields"in s){let i=this.findFieldInSchema({fields:s.fields},a);if(i)return i}if(s.type==="row"&&"fields"in s){let i=this.findFieldInSchema({fields:s.fields},a);if(i)return i}}return null}async handleSubmit(e){if(e.preventDefault(),this.attemptsLock?.isLocked())return;let a=await this.stateManager.validateForm(),r=this.stateManager.getState();if(Object.keys(a).length>0){this.emitError(a),this.render();return}let o=new CustomEvent("submit",{detail:{values:r.values,isValid:!0,errors:{}},bubbles:!0,composed:!0});this.dispatchEvent(o)}emitError(e){let a=new CustomEvent("error",{detail:{errors:e},bubbles:!0,composed:!0});this.dispatchEvent(a)}emitStepChange(){let e=this.stateManager.getWizardState();if(!e)return;let a=new CustomEvent("stepChange",{detail:{currentStep:e.currentStep,previousStep:e.currentStep>0?e.currentStep-1:e.currentStep,totalSteps:e.totalSteps},bubbles:!0,composed:!0});this.dispatchEvent(a)}registerComponents(e){this.customComponents={...this.customComponents,...e},ge(e)}reset(){this.stateManager.reset(),this.render()}incrementAttempts(){this.attemptsLock?.incrementAttempts(),this.attemptsLock?.isLocked()&&this.updateLockOverlay()}resetAttempts(){this.attemptsLock?.reset(),this.stopLockCountdown(),this.updateLockOverlay(),this.render()}isLocked(){return this.attemptsLock?.isLocked()??!1}getRemainingBlockTimeMs(){return this.attemptsLock?.getRemainingBlockTimeMs()??0}requestSubmit(){let e=this.shadow.querySelector("form");e&&typeof e.requestSubmit=="function"&&e.requestSubmit()}clear(){let e=this.schema,a=this.template,r=null;a?r=this.getSchemaFromTemplate(a):r=e,r&&(this.stateManager.initializeSchema(r,{}),this.render())}getValues(){return this.stateManager.getState().values}getValue(e){return this.stateManager.getValue(e)}async setValue(e,a){await this.stateManager.setValue(e,a),this.render()}async setValues(e){for(let[a,r]of Object.entries(e))await this.stateManager.setValue(a,r);this.render()}async validate(){let e=await this.stateManager.validateForm();return this.render(),Object.keys(e).length>0&&this.emitError(e),e}async validateField(e){return await this.stateManager.validateField(e),this.updateSingleField(e),this.stateManager.getErrors(e)}getErrors(){return this.stateManager.getAllErrors()}getFieldErrors(e){return this.stateManager.getErrors(e)}isValid(){return this.stateManager.getState().isValid}get theme(){let e=this.getAttribute("theme");return e&&["plano","tradicional","material","rounded-shadow","lines","shadcn","chakra","mantine","glass","bordered","minimal","efc"].includes(e)?e:"plano"}set theme(e){e?this.setAttribute("theme",e):this.removeAttribute("theme")}get colors(){let e=this.getAttribute("colors");return e?F(e):null}set colors(e){e?this.setAttribute("colors",M(e)):this.removeAttribute("colors")}get initialData(){let e=this.getAttribute("initialData");return e?F(e):null}set initialData(e){e?this.setAttribute("initialData",M(e)):this.removeAttribute("initialData")}get loading(){return this.hasAttribute("loading")}set loading(e){e?this.setAttribute("loading",""):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}setupStyles(){let e=this.shadow.querySelector("style");e&&e.remove();let a=this.theme,r=ce(this.colors||void 0),o=pe(a,r),s=document.createElement("style");s.textContent=o,this.shadow.firstChild?this.shadow.insertBefore(s,this.shadow.firstChild):this.shadow.appendChild(s)}};typeof window<"u"&&typeof customElements<"u"&&!customElements.get("easy-form")&&customElements.define("easy-form",de);export{N as AttemptsLock,V as ConditionEngine,de as EasyForm,D as INJECTION_VALIDATION_MESSAGE,L as MaskEngine,xe as PREDEFINED_MASKS,z as SchemaParser,P as StateManager,q as ValidationEngine,M as attributeValue,we as containsInjection,be as createInput,ye as extendTemplate,ut as generateId,it as getAvailableTemplates,ce as getColors,ie as getCustomComponent,A as getNestedValue,ue as getPredefinedMask,le as getTemplate,pe as getThemeStyles,I as isSafeFromInjection,ke as isValidEmail,F as parseAttributeValue,Me as registerComponent,ge as registerComponents,ft as sanitizeId,T as setNestedValue,ne as templates};
|
|
2185
2185
|
//# sourceMappingURL=index.js.map
|