@dmitryvim/form-builder 0.2.11 → 0.2.13

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.
@@ -1,5 +1,15 @@
1
- var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||e.maxLength!==null)&&(e.minLength!==null&&e.maxLength!==null?t.push(`length=${e.minLength}-${e.maxLength} characters`):e.maxLength!==null?t.push(`max=${e.maxLength} characters`):e.minLength!==null&&t.push(`min=${e.minLength} characters`))}function ke(e,t){(e.min!==null||e.max!==null)&&(e.min!==null&&e.max!==null?t.push(`range=${e.min}-${e.max}`):e.max!==null?t.push(`max=${e.max}`):e.min!==null&&t.push(`min=${e.min}`))}function Se(e,t){e.maxSizeMB&&t.push(`max_size=${e.maxSizeMB}MB`)}function Le(e,t){var n;(n=e.accept)!=null&&n.extensions&&t.push(`formats=${e.accept.extensions.map(o=>o.toUpperCase()).join(",")}`)}function Fe(e,t){var n;e.pattern&&!e.pattern.includes("\u0410-\u042F")?t.push("plain text only"):(n=e.pattern)!=null&&n.includes("\u0410-\u042F")&&t.push("text with punctuation")}function S(e){const t=[];return t.push(e.required?"required":"optional"),we(e,t),ke(e,t),Se(e,t),Le(e,t),Fe(e,t),t.join(" \u2022 ")}function O(e){const t=[];if(!e||typeof e!="object")return t.push("Schema must be an object"),t;if(!Array.isArray(e.elements))return t.push("Schema missing elements array"),t;if("columns"in e&&e.columns!==void 0){const o=e.columns,a=[1,2,3,4];(!Number.isInteger(o)||!a.includes(o))&&t.push(`schema.columns must be 1, 2, 3, or 4 (got ${o})`)}if("prefillHints"in e&&e.prefillHints){const o=e.prefillHints;Array.isArray(o)&&o.forEach((a,r)=>{if((!a.label||typeof a.label!="string")&&t.push(`schema.prefillHints[${r}] must have a 'label' property of type string`),!a.values||typeof a.values!="object")t.push(`schema.prefillHints[${r}] must have a 'values' property of type object`);else for(const l in a.values)e.elements.some(s=>s.key===l)||t.push(`schema.prefillHints[${r}] references non-existent field "${l}"`)})}function n(o,a){o.forEach((r,l)=>{const s=`${a}[${l}]`;if(r.type||t.push(`${s}: missing type`),r.key||t.push(`${s}: missing key`),r.enableIf){const i=r.enableIf;(!i.key||typeof i.key!="string")&&t.push(`${s}: enableIf must have a 'key' property of type string`),"equals"in i||t.push(`${s}: enableIf must have at least one operator (equals, etc.)`)}if(r.type==="group"&&"elements"in r&&r.elements&&n(r.elements,`${s}.elements`),r.type==="container"&&r.elements){if("columns"in r&&r.columns!==void 0){const i=r.columns,d=[1,2,3,4];(!Number.isInteger(i)||!d.includes(i))&&t.push(`${s}: columns must be 1, 2, 3, or 4 (got ${i})`)}if("prefillHints"in r&&r.prefillHints){const i=r.prefillHints;Array.isArray(i)&&i.forEach((d,u)=>{if((!d.label||typeof d.label!="string")&&t.push(`${s}: prefillHints[${u}] must have a 'label' property of type string`),!d.values||typeof d.values!="object")t.push(`${s}: prefillHints[${u}] must have a 'values' property of type object`);else for(const c in d.values)r.elements.some(p=>p.key===c)||t.push(`container "${r.key}": prefillHints[${u}] references non-existent field "${c}"`)})}n(r.elements,`${s}.elements`)}if(r.type==="select"&&r.options){const i=r.default;i!=null&&i!==""&&(r.options.some(d=>d.value===i)||t.push(`${s}: default "${i}" not in options`))}})}return Array.isArray(e.elements)&&n(e.elements,"elements"),t}function z(e){return e&&typeof e=="object"&&e.constructor===Object}function q(e,t){return e?`${e}.${t}`:t}function H(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function I(e,t){if(!e||typeof e!="object")return;const n=t.match(/[^.[\]]+|\[\d+\]/g);if(!n||n.length===0)return;let o=e;for(const a of n){if(o==null)return;if(a.startsWith("[")&&a.endsWith("]")){const r=parseInt(a.slice(1,-1),10);if(!Array.isArray(o)||isNaN(r))return;o=o[r]}else o=o[a]}return o}function A(e,t,n){var o;if(!e||!e.key)throw new Error("Invalid enableIf condition: must have a 'key' property");const a=(o=e.scope)!=null?o:"relative";let r;if(a==="relative")r=n!=null?n:t;else if(a==="absolute")r=t;else throw new Error(`Invalid enableIf scope: must be "relative" or "absolute" (got "${a}")`);const l=I(r,e.key);if("equals"in e)return Ne(l,e.equals);throw new Error("Invalid enableIf condition: no recognized operator (equals, etc.)")}function Ne(e,t){if(e===t)return!0;if(e==null||t==null)return e===t;if(typeof e!=typeof t)return!1;if(typeof e=="object"&&typeof t=="object")try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){if(n instanceof TypeError&&(n.message.includes("circular")||n.message.includes("cyclic")))return console.warn("deepEqual: Circular reference detected in enableIf comparison, using reference equality"),e===t;throw n}return e===t}function qe(e,t,n,o){const a=t.state,r=document.createElement("input");if(r.type="text",r.className="w-full rounded-lg",r.style.cssText=`
1
+ var FormBuilder=(function(N){"use strict";function $(e,t,n){const o=t.config.locale||"en",a=t.config.translations[o],l=t.config.translations.en;let r=(a==null?void 0:a[e])||(l==null?void 0:l[e])||e;if(n)for(const[i,s]of Object.entries(n))r=r.replace(new RegExp(`\\{${i}\\}`,"g"),String(s));return r}function Se(e,t,n){(e.minLength!=null||e.maxLength!=null)&&(e.minLength!=null&&e.maxLength!=null?t.push($("hintLengthRange",n,{min:e.minLength,max:e.maxLength})):e.maxLength!=null?t.push($("hintMaxLength",n,{max:e.maxLength})):e.minLength!=null&&t.push($("hintMinLength",n,{min:e.minLength})))}function Fe(e,t,n){(e.min!=null||e.max!=null)&&(e.min!=null&&e.max!=null?t.push($("hintValueRange",n,{min:e.min,max:e.max})):e.max!=null?t.push($("hintMaxValue",n,{max:e.max})):e.min!=null&&t.push($("hintMinValue",n,{min:e.min})))}function Ne(e,t,n){e.maxSizeMB&&t.push($("hintMaxSize",n,{size:e.maxSizeMB}))}function Ae(e,t,n){var o;(o=e.accept)!=null&&o.extensions&&t.push($("hintFormats",n,{formats:e.accept.extensions.map(a=>a.toUpperCase()).join(",")}))}function Te(e,t,n){e.pattern&&t.push($("hintPattern",n,{pattern:e.pattern}))}function F(e,t){const n=[];return Se(e,n,t),e.type!=="slider"&&Fe(e,n,t),Ne(e,n,t),Ae(e,n,t),Te(e,n,t),n.join(" \u2022 ")}function U(e){const t=[];if(!e||typeof e!="object")return t.push("Schema must be an object"),t;if(!Array.isArray(e.elements))return t.push("Schema missing elements array"),t;if("columns"in e&&e.columns!==void 0){const o=e.columns,a=[1,2,3,4];(!Number.isInteger(o)||!a.includes(o))&&t.push(`schema.columns must be 1, 2, 3, or 4 (got ${o})`)}if("prefillHints"in e&&e.prefillHints){const o=e.prefillHints;Array.isArray(o)&&o.forEach((a,l)=>{if((!a.label||typeof a.label!="string")&&t.push(`schema.prefillHints[${l}] must have a 'label' property of type string`),!a.values||typeof a.values!="object")t.push(`schema.prefillHints[${l}] must have a 'values' property of type object`);else for(const r in a.values)e.elements.some(i=>i.key===r)||t.push(`schema.prefillHints[${l}] references non-existent field "${r}"`)})}function n(o,a){o.forEach((l,r)=>{const i=`${a}[${r}]`;if(l.type||t.push(`${i}: missing type`),l.key||t.push(`${i}: missing key`),l.enableIf){const s=l.enableIf;(!s.key||typeof s.key!="string")&&t.push(`${i}: enableIf must have a 'key' property of type string`),"equals"in s||t.push(`${i}: enableIf must have at least one operator (equals, etc.)`)}if(l.type==="group"&&"elements"in l&&l.elements&&n(l.elements,`${i}.elements`),l.type==="container"&&l.elements){if("columns"in l&&l.columns!==void 0){const s=l.columns,u=[1,2,3,4];(!Number.isInteger(s)||!u.includes(s))&&t.push(`${i}: columns must be 1, 2, 3, or 4 (got ${s})`)}if("prefillHints"in l&&l.prefillHints){const s=l.prefillHints;Array.isArray(s)&&s.forEach((u,p)=>{if((!u.label||typeof u.label!="string")&&t.push(`${i}: prefillHints[${p}] must have a 'label' property of type string`),!u.values||typeof u.values!="object")t.push(`${i}: prefillHints[${p}] must have a 'values' property of type object`);else for(const c in u.values)l.elements.some(h=>h.key===c)||t.push(`container "${l.key}": prefillHints[${p}] references non-existent field "${c}"`)})}n(l.elements,`${i}.elements`)}if(l.type==="select"&&l.options){const s=l.default;s!=null&&s!==""&&(l.options.some(u=>u.value===s)||t.push(`${i}: default "${s}" not in options`))}})}return Array.isArray(e.elements)&&n(e.elements,"elements"),t}function B(e){return e&&typeof e=="object"&&e.constructor===Object}function L(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function A(e,t){return e?`${e}.${t}`:t}function M(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function z(e,t){if(!e||typeof e!="object")return;const n=t.match(/[^.[\]]+|\[\d+\]/g);if(!n||n.length===0)return;let o=e;for(const a of n){if(o==null)return;if(a.startsWith("[")&&a.endsWith("]")){const l=parseInt(a.slice(1,-1),10);if(!Array.isArray(o)||isNaN(l))return;o=o[l]}else o=o[a]}return o}function T(e,t,n){var o;if(!e||!e.key)throw new Error("Invalid enableIf condition: must have a 'key' property");const a=(o=e.scope)!=null?o:"relative";let l;if(a==="relative")l=n!=null?n:t;else if(a==="absolute")l=t;else throw new Error(`Invalid enableIf scope: must be "relative" or "absolute" (got "${a}")`);const r=z(l,e.key);if("equals"in e)return qe(r,e.equals);throw new Error("Invalid enableIf condition: no recognized operator (equals, etc.)")}function qe(e,t){if(e===t)return!0;if(e==null||t==null)return e===t;if(typeof e!=typeof t)return!1;if(typeof e=="object"&&typeof t=="object")try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){if(n instanceof TypeError&&(n.message.includes("circular")||n.message.includes("cyclic")))return console.warn("deepEqual: Circular reference detected in enableIf comparison, using reference equality"),e===t;throw n}return e===t}function I(e,t,n=!1){const o=document.createElement("span");o.className="char-counter",o.style.cssText=`
2
+ position: absolute;
3
+ ${n?"bottom: 8px":"top: 50%; transform: translateY(-50%)"};
4
+ right: 10px;
5
+ font-size: var(--fb-font-size-small);
6
+ color: var(--fb-text-secondary-color);
7
+ pointer-events: none;
8
+ background: var(--fb-background-color);
9
+ padding: 0 4px;
10
+ `;const a=()=>{const l=t.value.length,r=e.minLength,i=e.maxLength;if(r==null&&i==null){o.textContent="";return}l===0||r!=null&&l<r?(r!=null&&i!=null?o.textContent=`${r}-${i}`:i!=null?o.textContent=`\u2264${i}`:r!=null&&(o.textContent=`\u2265${r}`),o.style.color="var(--fb-text-secondary-color)"):i!=null&&l>i?(o.textContent=`${l}/${i}`,o.style.color="var(--fb-error-color)"):(i!=null?o.textContent=`${l}/${i}`:o.textContent=`${l}`,o.style.color="var(--fb-text-secondary-color)")};return t.addEventListener("input",a),a(),o}function Me(e,t,n,o){const a=t.state,l=document.createElement("div");l.style.cssText="position: relative;";const r=document.createElement("input");if(r.type="text",r.className="w-full rounded-lg",r.style.cssText=`
2
11
  padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
12
+ padding-right: 60px;
3
13
  border: var(--fb-border-width) solid var(--fb-border-color);
4
14
  border-radius: var(--fb-border-radius);
5
15
  background-color: ${a.config.readonly?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
@@ -7,84 +17,111 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
7
17
  font-size: var(--fb-font-size);
8
18
  font-family: var(--fb-font-family);
9
19
  transition: all var(--fb-transition-duration) ease-in-out;
10
- `,r.name=o,r.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,a.config.readonly||(r.addEventListener("focus",()=>{r.style.borderColor="var(--fb-border-focus-color)",r.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",r.style.outlineOffset="0"}),r.addEventListener("blur",()=>{r.style.borderColor="var(--fb-border-color)",r.style.outline="none"}),r.addEventListener("mouseenter",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-hover-color)")}),r.addEventListener("mouseleave",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-color)")})),!a.config.readonly&&t.instance){const s=()=>{const i=r.value===""?null:r.value;t.instance.triggerOnChange(o,i)};r.addEventListener("blur",s),r.addEventListener("input",s)}n.appendChild(r);const l=document.createElement("p");l.className="mt-1",l.style.cssText=`
11
- font-size: var(--fb-font-size-small);
12
- color: var(--fb-text-secondary-color);
13
- `,l.textContent=S(e),n.appendChild(l)}function Ae(e,t,n,o){var a,r;const l=t.state,s=t.prefill[e.key]||[],i=Array.isArray(s)?[...s]:[],d=(a=e.minCount)!=null?a:1,u=(r=e.maxCount)!=null?r:1/0;for(;i.length<d;)i.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function p(){c.querySelectorAll(".multiple-text-item").forEach((x,g)=>{const y=x.querySelector("input");y&&(y.name=`${o}[${g}]`)})}function v(x="",g=-1){const y=document.createElement("div");y.className="multiple-text-item flex items-center gap-2";const m=document.createElement("input");if(m.type="text",m.className="flex-1",m.style.cssText=`
20
+ width: 100%;
21
+ box-sizing: border-box;
22
+ `,r.name=o,r.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,a.config.readonly||(r.addEventListener("focus",()=>{r.style.borderColor="var(--fb-border-focus-color)",r.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",r.style.outlineOffset="0"}),r.addEventListener("blur",()=>{r.style.borderColor="var(--fb-border-color)",r.style.outline="none"}),r.addEventListener("mouseenter",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-hover-color)")}),r.addEventListener("mouseleave",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-color)")})),!a.config.readonly&&t.instance){const i=()=>{const s=r.value===""?null:r.value;t.instance.triggerOnChange(o,s)};r.addEventListener("blur",i),r.addEventListener("input",i)}if(l.appendChild(r),!a.config.readonly&&(e.minLength!=null||e.maxLength!=null)){const i=I(e,r,!1);l.appendChild(i)}n.appendChild(l)}function He(e,t,n,o){var a,l;const r=t.state,i=t.prefill[e.key]||[],s=Array.isArray(i)?[...i]:[],u=(a=e.minCount)!=null?a:1,p=(l=e.maxCount)!=null?l:1/0;for(;s.length<u;)s.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function h(){c.querySelectorAll(".multiple-text-item").forEach((d,b)=>{const y=d.querySelector("input");y&&(y.name=`${o}[${b}]`)})}function f(d="",b=-1){const y=document.createElement("div");y.className="multiple-text-item flex items-center gap-2";const C=document.createElement("div");C.style.cssText="position: relative; flex: 1;";const x=document.createElement("input");if(x.type="text",x.style.cssText=`
14
23
  padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
24
+ padding-right: 60px;
15
25
  border: var(--fb-border-width) solid var(--fb-border-color);
16
26
  border-radius: var(--fb-border-radius);
17
- background-color: ${l.config.readonly?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
27
+ background-color: ${r.config.readonly?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
18
28
  color: var(--fb-text-color);
19
29
  font-size: var(--fb-font-size);
20
30
  font-family: var(--fb-font-family);
21
31
  transition: all var(--fb-transition-duration) ease-in-out;
22
- `,m.placeholder=e.placeholder||"Enter text",m.value=x,m.readOnly=l.config.readonly,l.config.readonly||(m.addEventListener("focus",()=>{m.style.borderColor="var(--fb-border-focus-color)",m.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",m.style.outlineOffset="0"}),m.addEventListener("blur",()=>{m.style.borderColor="var(--fb-border-color)",m.style.outline="none"}),m.addEventListener("mouseenter",()=>{document.activeElement!==m&&(m.style.borderColor="var(--fb-border-hover-color)")}),m.addEventListener("mouseleave",()=>{document.activeElement!==m&&(m.style.borderColor="var(--fb-border-color)")})),!l.config.readonly&&t.instance){const C=()=>{const E=m.value===""?null:m.value;t.instance.triggerOnChange(m.name,E)};m.addEventListener("blur",C),m.addEventListener("input",C)}return y.appendChild(m),g===-1?c.appendChild(y):c.insertBefore(y,c.children[g]),p(),y}function f(){if(l.config.readonly)return;const x=c.querySelectorAll(".multiple-text-item"),g=x.length;x.forEach(y=>{let m=y.querySelector(".remove-item-btn");m||(m=document.createElement("button"),m.type="button",m.className="remove-item-btn px-2 py-1 rounded",m.style.cssText=`
32
+ width: 100%;
33
+ box-sizing: border-box;
34
+ `,x.placeholder=e.placeholder||$("placeholderText",r),x.value=d,x.readOnly=r.config.readonly,r.config.readonly||(x.addEventListener("focus",()=>{x.style.borderColor="var(--fb-border-focus-color)",x.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",x.style.outlineOffset="0"}),x.addEventListener("blur",()=>{x.style.borderColor="var(--fb-border-color)",x.style.outline="none"}),x.addEventListener("mouseenter",()=>{document.activeElement!==x&&(x.style.borderColor="var(--fb-border-hover-color)")}),x.addEventListener("mouseleave",()=>{document.activeElement!==x&&(x.style.borderColor="var(--fb-border-color)")})),!r.config.readonly&&t.instance){const w=()=>{const S=x.value===""?null:x.value;t.instance.triggerOnChange(x.name,S)};x.addEventListener("blur",w),x.addEventListener("input",w)}if(C.appendChild(x),!r.config.readonly&&(e.minLength!=null||e.maxLength!=null)){const w=I(e,x,!1);C.appendChild(w)}return y.appendChild(C),b===-1?c.appendChild(y):c.insertBefore(y,c.children[b]),h(),y}function m(){if(r.config.readonly)return;const d=c.querySelectorAll(".multiple-text-item"),b=d.length;d.forEach(y=>{let C=y.querySelector(".remove-item-btn");C||(C=document.createElement("button"),C.type="button",C.className="remove-item-btn px-2 py-1 rounded",C.style.cssText=`
23
35
  color: var(--fb-error-color);
24
36
  background-color: transparent;
25
37
  transition: background-color var(--fb-transition-duration);
26
- `,m.innerHTML="\u2715",m.addEventListener("mouseenter",()=>{m.style.backgroundColor="var(--fb-background-hover-color)"}),m.addEventListener("mouseleave",()=>{m.style.backgroundColor="transparent"}),m.onclick=()=>{const E=Array.from(c.children).indexOf(y);c.children.length>d&&(i.splice(E,1),y.remove(),p(),h(),f())},y.appendChild(m));const C=g<=d;m.disabled=C,m.style.opacity=C?"0.5":"1",m.style.pointerEvents=C?"none":"auto"})}function h(){const x=n.querySelector(".add-text-btn");if(x&&x.remove(),!l.config.readonly&&i.length<u){const g=document.createElement("button");g.type="button",g.className="add-text-btn mt-2 px-3 py-1 rounded",g.style.cssText=`
27
- color: var(--fb-primary-color);
28
- border: var(--fb-border-width) solid var(--fb-primary-color);
29
- background-color: transparent;
30
- font-size: var(--fb-font-size);
31
- transition: all var(--fb-transition-duration);
32
- `,g.textContent="+",g.addEventListener("mouseenter",()=>{g.style.backgroundColor="var(--fb-background-hover-color)"}),g.addEventListener("mouseleave",()=>{g.style.backgroundColor="transparent"}),g.onclick=()=>{i.push(e.default||""),v(e.default||""),h(),f()},n.appendChild(g)}}i.forEach(x=>v(x)),h(),f();const b=document.createElement("p");b.className="mt-1",b.style.cssText=`
33
- font-size: var(--fb-font-size-small);
34
- color: var(--fb-text-secondary-color);
35
- `,b.textContent=S(e),n.appendChild(b)}function Z(e,t,n){var o,a,r;const l=[],{scopeRoot:s,skipValidation:i}=n,d=(c,p)=>{var v,f;if(!c)return;const h=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let b=document.getElementById(h);p?(c.classList.add("invalid"),c.title=p,b||(b=document.createElement("div"),b.id=h,b.className="error-message",b.style.cssText=`
38
+ `,C.innerHTML="\u2715",C.addEventListener("mouseenter",()=>{C.style.backgroundColor="var(--fb-background-hover-color)"}),C.addEventListener("mouseleave",()=>{C.style.backgroundColor="transparent"}),C.onclick=()=>{const w=Array.from(c.children).indexOf(y);c.children.length>u&&(s.splice(w,1),y.remove(),h(),E(),m())},y.appendChild(C));const x=b<=u;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let v=null,g=null;if(!r.config.readonly){v=document.createElement("div"),v.className="flex items-center gap-3 mt-2";const d=document.createElement("button");d.type="button",d.className="add-text-btn px-3 py-1 rounded",d.style.cssText=`
39
+ color: var(--fb-primary-color);
40
+ border: var(--fb-border-width) solid var(--fb-primary-color);
41
+ background-color: transparent;
42
+ font-size: var(--fb-font-size);
43
+ transition: all var(--fb-transition-duration);
44
+ `,d.textContent="+",d.addEventListener("mouseenter",()=>{d.style.backgroundColor="var(--fb-background-hover-color)"}),d.addEventListener("mouseleave",()=>{d.style.backgroundColor="transparent"}),d.onclick=()=>{s.push(e.default||""),f(e.default||""),E(),m()},g=document.createElement("span"),g.className="text-sm text-gray-500",v.appendChild(d),v.appendChild(g),n.appendChild(v)}function E(){if(!v||!g)return;const d=v.querySelector(".add-text-btn");if(d){const b=s.length>=p;d.disabled=b,d.style.opacity=b?"0.5":"1",d.style.pointerEvents=b?"none":"auto"}g.textContent=`${s.length}/${p===1/0?"\u221E":p}`}s.forEach(d=>f(d)),E(),m()}function K(e,t,n){var o,a,l;const r=[],{scopeRoot:i,skipValidation:s}=n,u=(c,h)=>{var f,m;if(!c)return;const v=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(v);h?(c.classList.add("invalid"),c.title=h,g||(g=document.createElement("div"),g.id=v,g.className="error-message",g.style.cssText=`
36
45
  color: var(--fb-error-color);
37
46
  font-size: var(--fb-font-size-small);
38
47
  margin-top: 0.25rem;
39
- `,c.nextSibling?(v=c.parentNode)==null||v.insertBefore(b,c.nextSibling):(f=c.parentNode)==null||f.appendChild(b)),b.textContent=p,b.style.display="block"):(c.classList.remove("invalid"),c.title="",b&&b.remove())},u=(c,p,v)=>{let f=!1;if(!i&&p){if(e.minLength!==void 0&&e.minLength!==null&&p.length<e.minLength)l.push(`${v}: minLength=${e.minLength}`),d(c,`minLength=${e.minLength}`),f=!0;else if(e.maxLength!==void 0&&e.maxLength!==null&&p.length>e.maxLength)l.push(`${v}: maxLength=${e.maxLength}`),d(c,`maxLength=${e.maxLength}`),f=!0;else if(e.pattern)try{new RegExp(e.pattern).test(p)||(l.push(`${v}: pattern mismatch`),d(c,"pattern mismatch"),f=!0)}catch(h){l.push(`${v}: invalid pattern`),d(c,"invalid pattern"),f=!0}}f||d(c,null)};if(e.multiple){const c=s.querySelectorAll(`[name^="${t}["]`),p=[],v=[];if(c.forEach((f,h)=>{var b;const x=(b=f==null?void 0:f.value)!=null?b:"";v.push(x),p.push(x===""?null:x),u(f,x,`${t}[${h}]`)}),!i){const f=(o=e.minCount)!=null?o:1,h=(a=e.maxCount)!=null?a:1/0,b=v.filter(x=>x.trim()!=="");e.required&&b.length===0&&l.push(`${t}: required`),b.length<f&&l.push(`${t}: minimum ${f} items required`),b.length>h&&l.push(`${t}: maximum ${h} items allowed`)}return{value:p,errors:l}}else{const c=s.querySelector(`[name$="${t}"]`),p=(r=c==null?void 0:c.value)!=null?r:"";return!i&&e.required&&p===""?(l.push(`${t}: required`),d(c,"required"),{value:null,errors:l}):(c&&u(c,p,t),{value:p===""?null:p,errors:l})}}function Q(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateTextField: Expected array for multiple field "${t}", got ${typeof n}`);return}const r=a.querySelectorAll(`[name^="${t}["]`);r.forEach((l,s)=>{s<n.length&&(l.value=n[s]!=null?String(n[s]):"",l.classList.remove("invalid"),l.title="")}),n.length!==r.length&&console.warn(`updateTextField: Multiple field "${t}" has ${r.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const r=a.querySelector(`[name="${t}"]`);r&&(r.value=n!=null?String(n):"",r.classList.remove("invalid"),r.title="")}}function Te(e,t,n,o){const a=t.state,r=document.createElement("textarea");if(r.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",r.name=o,r.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",r.rows=e.rows||4,r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,!a.config.readonly&&t.instance){const s=()=>{const i=r.value===""?null:r.value;t.instance.triggerOnChange(o,i)};r.addEventListener("blur",s),r.addEventListener("input",s)}n.appendChild(r);const l=document.createElement("p");l.className="text-xs text-gray-500 mt-1",l.textContent=S(e),n.appendChild(l)}function He(e,t,n,o){var a,r;const l=t.state,s=t.prefill[e.key]||[],i=Array.isArray(s)?[...s]:[],d=(a=e.minCount)!=null?a:1,u=(r=e.maxCount)!=null?r:1/0;for(;i.length<d;)i.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function p(){c.querySelectorAll(".multiple-textarea-item").forEach((x,g)=>{const y=x.querySelector("textarea");y&&(y.name=`${o}[${g}]`)})}function v(x="",g=-1){const y=document.createElement("div");y.className="multiple-textarea-item";const m=document.createElement("textarea");if(m.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",m.placeholder=e.placeholder||"Enter text",m.rows=e.rows||4,m.value=x,m.readOnly=l.config.readonly,!l.config.readonly&&t.instance){const C=()=>{const E=m.value===""?null:m.value;t.instance.triggerOnChange(m.name,E)};m.addEventListener("blur",C),m.addEventListener("input",C)}return y.appendChild(m),g===-1?c.appendChild(y):c.insertBefore(y,c.children[g]),p(),y}function f(){if(l.config.readonly)return;const x=c.querySelectorAll(".multiple-textarea-item"),g=x.length;x.forEach(y=>{let m=y.querySelector(".remove-item-btn");m||(m=document.createElement("button"),m.type="button",m.className="remove-item-btn mt-1 px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm",m.innerHTML="\u2715",m.onclick=()=>{const E=Array.from(c.children).indexOf(y);c.children.length>d&&(i.splice(E,1),y.remove(),p(),h(),f())},y.appendChild(m));const C=g<=d;m.disabled=C,m.style.opacity=C?"0.5":"1",m.style.pointerEvents=C?"none":"auto"})}function h(){const x=n.querySelector(".add-textarea-btn");if(x&&x.remove(),!l.config.readonly&&i.length<u){const g=document.createElement("button");g.type="button",g.className="add-textarea-btn mt-2 px-3 py-1 text-blue-600 border border-blue-300 rounded hover:bg-blue-50 text-sm",g.textContent="+",g.onclick=()=>{i.push(e.default||""),v(e.default||""),h(),f()},n.appendChild(g)}}i.forEach(x=>v(x)),h(),f();const b=document.createElement("p");b.className="text-xs text-gray-500 mt-1",b.textContent=S(e),n.appendChild(b)}function Me(e,t,n){return Z(e,t,n)}function ze(e,t,n,o){Q(e,t,n,o)}function Ie(e,t,n,o){const a=t.state,r=document.createElement("input");if(r.type="number",r.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",r.name=o,r.placeholder=e.placeholder||"0",e.min!==void 0&&(r.min=e.min.toString()),e.max!==void 0&&(r.max=e.max.toString()),e.step!==void 0&&(r.step=e.step.toString()),r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,!a.config.readonly&&t.instance){const s=()=>{const i=r.value?parseFloat(r.value):null;t.instance.triggerOnChange(o,i)};r.addEventListener("blur",s),r.addEventListener("input",s)}n.appendChild(r);const l=document.createElement("p");l.className="text-xs text-gray-500 mt-1",l.textContent=S(e),n.appendChild(l)}function Be(e,t,n,o){var a,r;const l=t.state,s=t.prefill[e.key]||[],i=Array.isArray(s)?[...s]:[],d=(a=e.minCount)!=null?a:1,u=(r=e.maxCount)!=null?r:1/0;for(;i.length<d;)i.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function p(){c.querySelectorAll(".multiple-number-item").forEach((x,g)=>{const y=x.querySelector("input");y&&(y.name=`${o}[${g}]`)})}function v(x="",g=-1){const y=document.createElement("div");y.className="multiple-number-item flex items-center gap-2";const m=document.createElement("input");if(m.type="number",m.className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",m.placeholder=e.placeholder||"0",e.min!==void 0&&(m.min=e.min.toString()),e.max!==void 0&&(m.max=e.max.toString()),e.step!==void 0&&(m.step=e.step.toString()),m.value=x.toString(),m.readOnly=l.config.readonly,!l.config.readonly&&t.instance){const C=()=>{const E=m.value?parseFloat(m.value):null;t.instance.triggerOnChange(m.name,E)};m.addEventListener("blur",C),m.addEventListener("input",C)}return y.appendChild(m),g===-1?c.appendChild(y):c.insertBefore(y,c.children[g]),p(),y}function f(){if(l.config.readonly)return;const x=c.querySelectorAll(".multiple-number-item"),g=x.length;x.forEach(y=>{let m=y.querySelector(".remove-item-btn");m||(m=document.createElement("button"),m.type="button",m.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",m.innerHTML="\u2715",m.onclick=()=>{const E=Array.from(c.children).indexOf(y);c.children.length>d&&(i.splice(E,1),y.remove(),p(),h(),f())},y.appendChild(m));const C=g<=d;m.disabled=C,m.style.opacity=C?"0.5":"1",m.style.pointerEvents=C?"none":"auto"})}function h(){const x=n.querySelector(".add-number-btn");if(x&&x.remove(),!l.config.readonly&&i.length<u){const g=document.createElement("button");g.type="button",g.className="add-number-btn mt-2 px-3 py-1 text-blue-600 border border-blue-300 rounded hover:bg-blue-50 text-sm",g.textContent="+",g.onclick=()=>{i.push(e.default||""),v(e.default||""),h(),f()},n.appendChild(g)}}i.forEach(x=>v(x)),h(),f();const b=document.createElement("p");b.className="text-xs text-gray-500 mt-1",b.textContent=S(e),n.appendChild(b)}function je(e,t,n){var o,a,r,l,s;const i=[],{scopeRoot:d,skipValidation:u}=n,c=(v,f)=>{var h,b;if(!v)return;const x=`error-${v.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(x);f?(v.classList.add("invalid"),v.title=f,g||(g=document.createElement("div"),g.id=x,g.className="error-message",g.style.cssText=`
48
+ `,c.nextSibling?(f=c.parentNode)==null||f.insertBefore(g,c.nextSibling):(m=c.parentNode)==null||m.appendChild(g)),g.textContent=h,g.style.display="block"):(c.classList.remove("invalid"),c.title="",g&&g.remove())},p=(c,h,f)=>{let m=!1;const{state:v}=n;if(!s&&h){if(e.minLength!==void 0&&e.minLength!==null&&h.length<e.minLength){const g=$("minLength",v,{min:e.minLength});r.push(`${f}: ${g}`),u(c,g),m=!0}else if(e.maxLength!==void 0&&e.maxLength!==null&&h.length>e.maxLength){const g=$("maxLength",v,{max:e.maxLength});r.push(`${f}: ${g}`),u(c,g),m=!0}else if(e.pattern)try{if(!new RegExp(e.pattern).test(h)){const g=$("patternMismatch",v);r.push(`${f}: ${g}`),u(c,g),m=!0}}catch(g){const E=$("invalidPattern",v);r.push(`${f}: ${E}`),u(c,E),m=!0}}m||u(c,null)};if(e.multiple){const c=i.querySelectorAll(`[name^="${t}["]`),h=[],f=[];if(c.forEach((m,v)=>{var g;const E=(g=m==null?void 0:m.value)!=null?g:"";f.push(E),h.push(E===""?null:E),p(m,E,`${t}[${v}]`)}),!s){const{state:m}=n,v=(o=e.minCount)!=null?o:1,g=(a=e.maxCount)!=null?a:1/0,E=f.filter(d=>d.trim()!=="");e.required&&E.length===0&&r.push(`${t}: ${$("required",m)}`),E.length<v&&r.push(`${t}: ${$("minItems",m,{min:v})}`),E.length>g&&r.push(`${t}: ${$("maxItems",m,{max:g})}`)}return{value:h,errors:r}}else{const c=i.querySelector(`[name$="${t}"]`),h=(l=c==null?void 0:c.value)!=null?l:"";if(!s&&e.required&&h===""){const f=$("required",n.state);return r.push(`${t}: ${f}`),u(c,f),{value:null,errors:r}}return c&&p(c,h,t),{value:h===""?null:h,errors:r}}}function ee(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateTextField: Expected array for multiple field "${t}", got ${typeof n}`);return}const l=a.querySelectorAll(`[name^="${t}["]`);l.forEach((r,i)=>{i<n.length&&(r.value=n[i]!=null?String(n[i]):"",r.classList.remove("invalid"),r.title="")}),n.length!==l.length&&console.warn(`updateTextField: Multiple field "${t}" has ${l.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const l=a.querySelector(`[name="${t}"]`);l&&(l.value=n!=null?String(n):"",l.classList.remove("invalid"),l.title="")}}function Be(e,t,n,o){const a=t.state,l=document.createElement("div");l.style.cssText="position: relative;";const r=document.createElement("textarea");if(r.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",r.style.cssText="padding-bottom: 24px;",r.name=o,r.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",r.rows=e.rows||4,r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,!a.config.readonly&&t.instance){const i=()=>{const s=r.value===""?null:r.value;t.instance.triggerOnChange(o,s)};r.addEventListener("blur",i),r.addEventListener("input",i)}if(l.appendChild(r),!a.config.readonly&&(e.minLength!=null||e.maxLength!=null)){const i=I(e,r,!0);l.appendChild(i)}n.appendChild(l)}function ze(e,t,n,o){var a,l;const r=t.state,i=t.prefill[e.key]||[],s=Array.isArray(i)?[...i]:[],u=(a=e.minCount)!=null?a:1,p=(l=e.maxCount)!=null?l:1/0;for(;s.length<u;)s.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function h(){c.querySelectorAll(".multiple-textarea-item").forEach((d,b)=>{const y=d.querySelector("textarea");y&&(y.name=`${o}[${b}]`)})}function f(d="",b=-1){const y=document.createElement("div");y.className="multiple-textarea-item";const C=document.createElement("div");C.style.cssText="position: relative;";const x=document.createElement("textarea");if(x.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",x.style.cssText="padding-bottom: 24px;",x.placeholder=e.placeholder||$("placeholderText",r),x.rows=e.rows||4,x.value=d,x.readOnly=r.config.readonly,!r.config.readonly&&t.instance){const w=()=>{const S=x.value===""?null:x.value;t.instance.triggerOnChange(x.name,S)};x.addEventListener("blur",w),x.addEventListener("input",w)}if(C.appendChild(x),!r.config.readonly&&(e.minLength!=null||e.maxLength!=null)){const w=I(e,x,!0);C.appendChild(w)}return y.appendChild(C),b===-1?c.appendChild(y):c.insertBefore(y,c.children[b]),h(),y}function m(){if(r.config.readonly)return;const d=c.querySelectorAll(".multiple-textarea-item"),b=d.length;d.forEach(y=>{let C=y.querySelector(".remove-item-btn");C||(C=document.createElement("button"),C.type="button",C.className="remove-item-btn mt-1 px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm",C.innerHTML="\u2715",C.onclick=()=>{const w=Array.from(c.children).indexOf(y);c.children.length>u&&(s.splice(w,1),y.remove(),h(),E(),m())},y.appendChild(C));const x=b<=u;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let v=null,g=null;if(!r.config.readonly){v=document.createElement("div"),v.className="flex items-center gap-3 mt-2";const d=document.createElement("button");d.type="button",d.className="add-textarea-btn px-3 py-1 rounded",d.style.cssText=`
49
+ color: var(--fb-primary-color);
50
+ border: var(--fb-border-width) solid var(--fb-primary-color);
51
+ background-color: transparent;
52
+ font-size: var(--fb-font-size);
53
+ transition: all var(--fb-transition-duration);
54
+ `,d.textContent="+",d.addEventListener("mouseenter",()=>{d.style.backgroundColor="var(--fb-background-hover-color)"}),d.addEventListener("mouseleave",()=>{d.style.backgroundColor="transparent"}),d.onclick=()=>{s.push(e.default||""),f(e.default||""),E(),m()},g=document.createElement("span"),g.className="text-sm text-gray-500",v.appendChild(d),v.appendChild(g),n.appendChild(v)}function E(){if(!v||!g)return;const d=v.querySelector(".add-textarea-btn");if(d){const b=s.length>=p;d.disabled=b,d.style.opacity=b?"0.5":"1",d.style.pointerEvents=b?"none":"auto"}g.textContent=`${s.length}/${p===1/0?"\u221E":p}`}s.forEach(d=>f(d)),E(),m()}function Ie(e,t,n){return K(e,t,n)}function Re(e,t,n,o){ee(e,t,n,o)}function te(e,t){const n=document.createElement("span");n.className="number-counter",n.style.cssText=`
55
+ position: absolute;
56
+ top: 50%;
57
+ transform: translateY(-50%);
58
+ right: 10px;
59
+ font-size: var(--fb-font-size-small);
60
+ color: var(--fb-text-secondary-color);
61
+ pointer-events: none;
62
+ background: var(--fb-background-color);
63
+ padding: 0 4px;
64
+ `;const o=()=>{const a=t.value?parseFloat(t.value):null,l=e.min,r=e.max;if(l==null&&r==null){n.textContent="";return}a==null||l!=null&&a<l?(l!=null&&r!=null?n.textContent=`${l}-${r}`:r!=null?n.textContent=`\u2264${r}`:l!=null&&(n.textContent=`\u2265${l}`),n.style.color="var(--fb-text-secondary-color)"):r!=null&&a>r?(n.textContent=`${a}/${r}`,n.style.color="var(--fb-error-color)"):(r!=null?n.textContent=`${a}/${r}`:n.textContent=`${a}`,n.style.color="var(--fb-text-secondary-color)")};return t.addEventListener("input",o),o(),n}function De(e,t,n,o){const a=t.state,l=document.createElement("div");l.style.cssText="position: relative;";const r=document.createElement("input");if(r.type="number",r.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",r.style.cssText="padding-right: 60px; width: 100%; box-sizing: border-box;",r.name=o,r.placeholder=e.placeholder||"0",e.min!==void 0&&(r.min=e.min.toString()),e.max!==void 0&&(r.max=e.max.toString()),e.step!==void 0&&(r.step=e.step.toString()),r.value=t.prefill[e.key]||e.default||"",r.readOnly=a.config.readonly,!a.config.readonly&&t.instance){const i=()=>{const s=r.value?parseFloat(r.value):null;t.instance.triggerOnChange(o,s)};r.addEventListener("blur",i),r.addEventListener("input",i)}if(l.appendChild(r),!a.config.readonly&&(e.min!=null||e.max!=null)){const i=te(e,r);l.appendChild(i)}n.appendChild(l)}function je(e,t,n,o){var a,l;const r=t.state,i=t.prefill[e.key]||[],s=Array.isArray(i)?[...i]:[],u=(a=e.minCount)!=null?a:1,p=(l=e.maxCount)!=null?l:1/0;for(;s.length<u;)s.push(e.default||"");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function h(){c.querySelectorAll(".multiple-number-item").forEach((d,b)=>{const y=d.querySelector("input");y&&(y.name=`${o}[${b}]`)})}function f(d="",b=-1){const y=document.createElement("div");y.className="multiple-number-item flex items-center gap-2";const C=document.createElement("div");C.style.cssText="position: relative; flex: 1;";const x=document.createElement("input");if(x.type="number",x.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",x.style.cssText="padding-right: 60px; width: 100%; box-sizing: border-box;",x.placeholder=e.placeholder||"0",e.min!==void 0&&(x.min=e.min.toString()),e.max!==void 0&&(x.max=e.max.toString()),e.step!==void 0&&(x.step=e.step.toString()),x.value=d.toString(),x.readOnly=r.config.readonly,!r.config.readonly&&t.instance){const w=()=>{const S=x.value?parseFloat(x.value):null;t.instance.triggerOnChange(x.name,S)};x.addEventListener("blur",w),x.addEventListener("input",w)}if(C.appendChild(x),!r.config.readonly&&(e.min!=null||e.max!=null)){const w=te(e,x);C.appendChild(w)}return y.appendChild(C),b===-1?c.appendChild(y):c.insertBefore(y,c.children[b]),h(),y}function m(){if(r.config.readonly)return;const d=c.querySelectorAll(".multiple-number-item"),b=d.length;d.forEach(y=>{let C=y.querySelector(".remove-item-btn");C||(C=document.createElement("button"),C.type="button",C.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",C.innerHTML="\u2715",C.onclick=()=>{const w=Array.from(c.children).indexOf(y);c.children.length>u&&(s.splice(w,1),y.remove(),h(),E(),m())},y.appendChild(C));const x=b<=u;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let v=null,g=null;if(!r.config.readonly){v=document.createElement("div"),v.className="flex items-center gap-3 mt-2";const d=document.createElement("button");d.type="button",d.className="add-number-btn px-3 py-1 rounded",d.style.cssText=`
65
+ color: var(--fb-primary-color);
66
+ border: var(--fb-border-width) solid var(--fb-primary-color);
67
+ background-color: transparent;
68
+ font-size: var(--fb-font-size);
69
+ transition: all var(--fb-transition-duration);
70
+ `,d.textContent="+",d.addEventListener("mouseenter",()=>{d.style.backgroundColor="var(--fb-background-hover-color)"}),d.addEventListener("mouseleave",()=>{d.style.backgroundColor="transparent"}),d.onclick=()=>{s.push(e.default||""),f(e.default||""),E(),m()},g=document.createElement("span"),g.className="text-sm text-gray-500",v.appendChild(d),v.appendChild(g),n.appendChild(v)}function E(){if(!v||!g)return;const d=v.querySelector(".add-number-btn");if(d){const b=s.length>=p;d.disabled=b,d.style.opacity=b?"0.5":"1",d.style.pointerEvents=b?"none":"auto"}g.textContent=`${s.length}/${p===1/0?"\u221E":p}`}s.forEach(d=>f(d)),E(),m()}function Oe(e,t,n){var o,a,l,r,i;const s=[],{scopeRoot:u,skipValidation:p}=n,c=(f,m)=>{var v,g;if(!f)return;const E=`error-${f.getAttribute("name")||Math.random().toString(36).substring(7)}`;let d=document.getElementById(E);m?(f.classList.add("invalid"),f.title=m,d||(d=document.createElement("div"),d.id=E,d.className="error-message",d.style.cssText=`
40
71
  color: var(--fb-error-color);
41
72
  font-size: var(--fb-font-size-small);
42
73
  margin-top: 0.25rem;
43
- `,v.nextSibling?(h=v.parentNode)==null||h.insertBefore(g,v.nextSibling):(b=v.parentNode)==null||b.appendChild(g)),g.textContent=f,g.style.display="block"):(v.classList.remove("invalid"),v.title="",g&&g.remove())},p=(v,f,h)=>{let b=!1;!u&&e.min!==void 0&&e.min!==null&&f<e.min?(i.push(`${h}: < min=${e.min}`),c(v,`< min=${e.min}`),b=!0):!u&&e.max!==void 0&&e.max!==null&&f>e.max&&(i.push(`${h}: > max=${e.max}`),c(v,`> max=${e.max}`),b=!0),b||c(v,null)};if(e.multiple){const v=d.querySelectorAll(`[name^="${t}["]`),f=[];if(v.forEach((h,b)=>{var x,g,y;const m=(x=h==null?void 0:h.value)!=null?x:"";if(m===""){f.push(null),c(h,null);return}const C=parseFloat(m);if(!u&&!Number.isFinite(C)){i.push(`${t}[${b}]: not a number`),c(h,"not a number"),f.push(null);return}p(h,C,`${t}[${b}]`);const E=Number.isInteger((g=e.decimals)!=null?g:0)&&(y=e.decimals)!=null?y:0;f.push(Number(C.toFixed(E)))}),!u){const h=(o=e.minCount)!=null?o:1,b=(a=e.maxCount)!=null?a:1/0,x=f.filter(g=>g!==null);e.required&&x.length===0&&i.push(`${t}: required`),x.length<h&&i.push(`${t}: minimum ${h} items required`),x.length>b&&i.push(`${t}: maximum ${b} items allowed`)}return{value:f,errors:i}}else{const v=d.querySelector(`[name$="${t}"]`),f=(r=v==null?void 0:v.value)!=null?r:"";if(!u&&e.required&&f==="")return i.push(`${t}: required`),c(v,"required"),{value:null,errors:i};if(f==="")return c(v,null),{value:null,errors:i};const h=parseFloat(f);if(!u&&!Number.isFinite(h))return i.push(`${t}: not a number`),c(v,"not a number"),{value:null,errors:i};p(v,h,t);const b=Number.isInteger((l=e.decimals)!=null?l:0)&&(s=e.decimals)!=null?s:0;return{value:Number(h.toFixed(b)),errors:i}}}function Re(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateNumberField: Expected array for multiple field "${t}", got ${typeof n}`);return}const r=a.querySelectorAll(`[name^="${t}["]`);r.forEach((l,s)=>{s<n.length&&(l.value=n[s]!=null?String(n[s]):"",l.classList.remove("invalid"),l.title="")}),n.length!==r.length&&console.warn(`updateNumberField: Multiple field "${t}" has ${r.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const r=a.querySelector(`[name="${t}"]`);r&&(r.value=n!=null?String(n):"",r.classList.remove("invalid"),r.title="")}}function De(e,t,n,o){const a=t.state,r=document.createElement("select");if(r.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",r.name=o,r.disabled=a.config.readonly,(e.options||[]).forEach(s=>{const i=document.createElement("option");i.value=s.value,i.textContent=s.label,(t.prefill[e.key]||e.default)===s.value&&(i.selected=!0),r.appendChild(i)}),!a.config.readonly&&t.instance){const s=()=>{t.instance.triggerOnChange(o,r.value)};r.addEventListener("change",s)}n.appendChild(r);const l=document.createElement("p");l.className="text-xs text-gray-500 mt-1",l.textContent=S(e),n.appendChild(l)}function Oe(e,t,n,o){var a,r,l,s;const i=t.state,d=t.prefill[e.key]||[],u=Array.isArray(d)?[...d]:[],c=(a=e.minCount)!=null?a:1,p=(r=e.maxCount)!=null?r:1/0;for(;u.length<c;)u.push(e.default||((s=(l=e.options)==null?void 0:l[0])==null?void 0:s.value)||"");const v=document.createElement("div");v.className="space-y-2",n.appendChild(v);function f(){v.querySelectorAll(".multiple-select-item").forEach((y,m)=>{const C=y.querySelector("select");C&&(C.name=`${o}[${m}]`)})}function h(y="",m=-1){const C=document.createElement("div");C.className="multiple-select-item flex items-center gap-2";const E=document.createElement("select");if(E.className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",E.disabled=i.config.readonly,(e.options||[]).forEach($=>{const w=document.createElement("option");w.value=$.value,w.textContent=$.label,y===$.value&&(w.selected=!0),E.appendChild(w)}),!i.config.readonly&&t.instance){const $=()=>{t.instance.triggerOnChange(E.name,E.value)};E.addEventListener("change",$)}return C.appendChild(E),m===-1?v.appendChild(C):v.insertBefore(C,v.children[m]),f(),C}function b(){if(i.config.readonly)return;const y=v.querySelectorAll(".multiple-select-item"),m=y.length;y.forEach(C=>{let E=C.querySelector(".remove-item-btn");E||(E=document.createElement("button"),E.type="button",E.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",E.innerHTML="\u2715",E.onclick=()=>{const w=Array.from(v.children).indexOf(C);v.children.length>c&&(u.splice(w,1),C.remove(),f(),x(),b())},C.appendChild(E));const $=m<=c;E.disabled=$,E.style.opacity=$?"0.5":"1",E.style.pointerEvents=$?"none":"auto"})}function x(){const y=n.querySelector(".add-select-btn");if(y&&y.remove(),!i.config.readonly&&u.length<p){const m=document.createElement("button");m.type="button",m.className="add-select-btn mt-2 px-3 py-1 text-blue-600 border border-blue-300 rounded hover:bg-blue-50 text-sm",m.textContent="+",m.onclick=()=>{var C,E;const $=e.default||((E=(C=e.options)==null?void 0:C[0])==null?void 0:E.value)||"";u.push($),h($),x(),b()},n.appendChild(m)}}u.forEach(y=>h(y)),x(),b();const g=document.createElement("p");g.className="text-xs text-gray-500 mt-1",g.textContent=S(e),n.appendChild(g)}function Ue(e,t,n){var o;const a=[],{scopeRoot:r,skipValidation:l}=n,s=(d,u)=>{var c,p;if(!d)return;const v=`error-${d.getAttribute("name")||Math.random().toString(36).substring(7)}`;let f=document.getElementById(v);u?(d.classList.add("invalid"),d.title=u,f||(f=document.createElement("div"),f.id=v,f.className="error-message",f.style.cssText=`
74
+ `,f.nextSibling?(v=f.parentNode)==null||v.insertBefore(d,f.nextSibling):(g=f.parentNode)==null||g.appendChild(d)),d.textContent=m,d.style.display="block"):(f.classList.remove("invalid"),f.title="",d&&d.remove())},h=(f,m,v)=>{let g=!1;const{state:E}=n;if(!p&&e.min!==void 0&&e.min!==null&&m<e.min){const d=$("minValue",E,{min:e.min});s.push(`${v}: ${d}`),c(f,d),g=!0}else if(!p&&e.max!==void 0&&e.max!==null&&m>e.max){const d=$("maxValue",E,{max:e.max});s.push(`${v}: ${d}`),c(f,d),g=!0}g||c(f,null)};if(e.multiple){const f=u.querySelectorAll(`[name^="${t}["]`),m=[];if(f.forEach((v,g)=>{var E,d,b;const y=(E=v==null?void 0:v.value)!=null?E:"";if(y===""){m.push(null),c(v,null);return}const C=parseFloat(y);if(!p&&!Number.isFinite(C)){const w=$("notANumber",n.state);s.push(`${t}[${g}]: ${w}`),c(v,w),m.push(null);return}h(v,C,`${t}[${g}]`);const x=Number.isInteger((d=e.decimals)!=null?d:0)&&(b=e.decimals)!=null?b:0;m.push(Number(C.toFixed(x)))}),!p){const{state:v}=n,g=(o=e.minCount)!=null?o:1,E=(a=e.maxCount)!=null?a:1/0,d=m.filter(b=>b!==null);e.required&&d.length===0&&s.push(`${t}: ${$("required",v)}`),d.length<g&&s.push(`${t}: ${$("minItems",v,{min:g})}`),d.length>E&&s.push(`${t}: ${$("maxItems",v,{max:E})}`)}return{value:m,errors:s}}else{const f=u.querySelector(`[name$="${t}"]`),m=(l=f==null?void 0:f.value)!=null?l:"",{state:v}=n;if(!p&&e.required&&m===""){const d=$("required",v);return s.push(`${t}: ${d}`),c(f,d),{value:null,errors:s}}if(m==="")return c(f,null),{value:null,errors:s};const g=parseFloat(m);if(!p&&!Number.isFinite(g)){const d=$("notANumber",v);return s.push(`${t}: ${d}`),c(f,d),{value:null,errors:s}}h(f,g,t);const E=Number.isInteger((r=e.decimals)!=null?r:0)&&(i=e.decimals)!=null?i:0;return{value:Number(g.toFixed(E)),errors:s}}}function Ue(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateNumberField: Expected array for multiple field "${t}", got ${typeof n}`);return}const l=a.querySelectorAll(`[name^="${t}["]`);l.forEach((r,i)=>{i<n.length&&(r.value=n[i]!=null?String(n[i]):"",r.classList.remove("invalid"),r.title="")}),n.length!==l.length&&console.warn(`updateNumberField: Multiple field "${t}" has ${l.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const l=a.querySelector(`[name="${t}"]`);l&&(l.value=n!=null?String(n):"",l.classList.remove("invalid"),l.title="")}}function Pe(e,t,n,o){const a=t.state,l=document.createElement("select");if(l.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",l.name=o,l.disabled=a.config.readonly,(e.options||[]).forEach(r=>{const i=document.createElement("option");i.value=r.value,i.textContent=r.label,(t.prefill[e.key]||e.default)===r.value&&(i.selected=!0),l.appendChild(i)}),!a.config.readonly&&t.instance){const r=()=>{t.instance.triggerOnChange(o,l.value)};l.addEventListener("change",r)}if(n.appendChild(l),!a.config.readonly){const r=document.createElement("p");r.className="text-xs text-gray-500 mt-1",r.textContent=F(e,a),n.appendChild(r)}}function Ve(e,t,n,o){var a,l,r,i;const s=t.state,u=t.prefill[e.key]||[],p=Array.isArray(u)?[...u]:[],c=(a=e.minCount)!=null?a:1,h=(l=e.maxCount)!=null?l:1/0;for(;p.length<c;)p.push(e.default||((i=(r=e.options)==null?void 0:r[0])==null?void 0:i.value)||"");const f=document.createElement("div");f.className="space-y-2",n.appendChild(f);function m(){f.querySelectorAll(".multiple-select-item").forEach((y,C)=>{const x=y.querySelector("select");x&&(x.name=`${o}[${C}]`)})}function v(y="",C=-1){const x=document.createElement("div");x.className="multiple-select-item flex items-center gap-2";const w=document.createElement("select");if(w.className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",w.disabled=s.config.readonly,(e.options||[]).forEach(S=>{const k=document.createElement("option");k.value=S.value,k.textContent=S.label,y===S.value&&(k.selected=!0),w.appendChild(k)}),!s.config.readonly&&t.instance){const S=()=>{t.instance.triggerOnChange(w.name,w.value)};w.addEventListener("change",S)}return x.appendChild(w),C===-1?f.appendChild(x):f.insertBefore(x,f.children[C]),m(),x}function g(){if(s.config.readonly)return;const y=f.querySelectorAll(".multiple-select-item"),C=y.length;y.forEach(x=>{let w=x.querySelector(".remove-item-btn");w||(w=document.createElement("button"),w.type="button",w.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",w.innerHTML="\u2715",w.onclick=()=>{const k=Array.from(f.children).indexOf(x);f.children.length>c&&(p.splice(k,1),x.remove(),m(),b(),g())},x.appendChild(w));const S=C<=c;w.disabled=S,w.style.opacity=S?"0.5":"1",w.style.pointerEvents=S?"none":"auto"})}let E=null,d=null;if(!s.config.readonly){E=document.createElement("div"),E.className="flex items-center gap-3 mt-2";const y=document.createElement("button");y.type="button",y.className="add-select-btn px-3 py-1 rounded",y.style.cssText=`
75
+ color: var(--fb-primary-color);
76
+ border: var(--fb-border-width) solid var(--fb-primary-color);
77
+ background-color: transparent;
78
+ font-size: var(--fb-font-size);
79
+ transition: all var(--fb-transition-duration);
80
+ `,y.textContent="+",y.addEventListener("mouseenter",()=>{y.style.backgroundColor="var(--fb-background-hover-color)"}),y.addEventListener("mouseleave",()=>{y.style.backgroundColor="transparent"}),y.onclick=()=>{var C,x;const w=e.default||((x=(C=e.options)==null?void 0:C[0])==null?void 0:x.value)||"";p.push(w),v(w),b(),g()},d=document.createElement("span"),d.className="text-sm text-gray-500",E.appendChild(y),E.appendChild(d),n.appendChild(E)}function b(){if(!E||!d)return;const y=E.querySelector(".add-select-btn");if(y){const C=p.length>=h;y.disabled=C,y.style.opacity=C?"0.5":"1",y.style.pointerEvents=C?"none":"auto"}d.textContent=`${p.length}/${h===1/0?"\u221E":h}`}if(p.forEach(y=>v(y)),b(),g(),!s.config.readonly){const y=document.createElement("p");y.className="text-xs text-gray-500 mt-1",y.textContent=F(e,s),n.appendChild(y)}}function _e(e,t,n){var o;const a=[],{scopeRoot:l,skipValidation:r}=n,i=(u,p)=>{var c,h;if(!u)return;const f=`error-${u.getAttribute("name")||Math.random().toString(36).substring(7)}`;let m=document.getElementById(f);p?(u.classList.add("invalid"),u.title=p,m||(m=document.createElement("div"),m.id=f,m.className="error-message",m.style.cssText=`
44
81
  color: var(--fb-error-color);
45
82
  font-size: var(--fb-font-size-small);
46
83
  margin-top: 0.25rem;
47
- `,d.nextSibling?(c=d.parentNode)==null||c.insertBefore(f,d.nextSibling):(p=d.parentNode)==null||p.appendChild(f)),f.textContent=u,f.style.display="block"):(d.classList.remove("invalid"),d.title="",f&&f.remove())},i=(d,u,c,p)=>{var v,f;if(l)return;const h=u.filter(p),b="minCount"in c&&(v=c.minCount)!=null?v:1,x="maxCount"in c&&(f=c.maxCount)!=null?f:1/0;c.required&&h.length===0&&a.push(`${d}: required`),h.length<b&&a.push(`${d}: minimum ${b} items required`),h.length>x&&a.push(`${d}: maximum ${x} items allowed`)};if("multiple"in e&&e.multiple){const d=r.querySelectorAll(`[name^="${t}["]`),u=[];return d.forEach(c=>{var p;const v=(p=c==null?void 0:c.value)!=null?p:"";u.push(v),s(c,null)}),i(t,u,e,c=>c!==""),{value:u,errors:a}}else{const d=r.querySelector(`[name$="${t}"]`),u=(o=d==null?void 0:d.value)!=null?o:"";return!l&&e.required&&u===""?(a.push(`${t}: required`),s(d,"required"),{value:null,errors:a}):(s(d,null),{value:u===""?null:u,errors:a})}}function Pe(e,t,n,o){const{scopeRoot:a}=o;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateSelectField: Expected array for multiple field "${t}", got ${typeof n}`);return}const r=a.querySelectorAll(`[name^="${t}["]`);r.forEach((l,s)=>{s<n.length&&(l.value=n[s]!=null?String(n[s]):"",l.querySelectorAll("option").forEach(i=>{i.selected=i.value===String(n[s])}),l.classList.remove("invalid"),l.title="")}),n.length!==r.length&&console.warn(`updateSelectField: Multiple field "${t}" has ${r.length} selects but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const r=a.querySelector(`[name="${t}"]`);r&&(r.value=n!=null?String(n):"",r.querySelectorAll("option").forEach(l=>{l.selected=l.value===String(n)}),r.classList.remove("invalid"),r.title="")}}function L(e,t){const n=t.config.locale||"en";return(t.config.translations[n]||t.config.translations.en)[e]||e}function Ve(e,t,n){const o=document.createElement("img");o.className="w-full h-full object-contain",o.alt=n||"Preview";const a=new FileReader;a.onload=r=>{var l;o.src=((l=r.target)==null?void 0:l.result)||""},a.readAsDataURL(t),e.appendChild(o)}function _e(e,t,n,o,a,r){const l=URL.createObjectURL(t);e.onclick=null;const s=e.cloneNode(!1);return e.parentNode&&e.parentNode.replaceChild(s,e),s.innerHTML=`
84
+ `,u.nextSibling?(c=u.parentNode)==null||c.insertBefore(m,u.nextSibling):(h=u.parentNode)==null||h.appendChild(m)),m.textContent=p,m.style.display="block"):(u.classList.remove("invalid"),u.title="",m&&m.remove())},s=(u,p,c,h)=>{var f,m;if(r)return;const{state:v}=n,g=p.filter(h),E="minCount"in c&&(f=c.minCount)!=null?f:1,d="maxCount"in c&&(m=c.maxCount)!=null?m:1/0;c.required&&g.length===0&&a.push(`${u}: ${$("required",v)}`),g.length<E&&a.push(`${u}: ${$("minItems",v,{min:E})}`),g.length>d&&a.push(`${u}: ${$("maxItems",v,{max:d})}`)};if("multiple"in e&&e.multiple){const u=l.querySelectorAll(`[name^="${t}["]`),p=[];return u.forEach(c=>{var h;const f=(h=c==null?void 0:c.value)!=null?h:"";p.push(f),i(c,null)}),s(t,p,e,c=>c!==""),{value:p,errors:a}}else{const u=l.querySelector(`[name$="${t}"]`),p=(o=u==null?void 0:u.value)!=null?o:"";if(!r&&e.required&&p===""){const c=$("required",n.state);return a.push(`${t}: ${c}`),i(u,c),{value:null,errors:a}}else i(u,null);return{value:p===""?null:p,errors:a}}}function We(e,t,n,o){const{scopeRoot:a}=o;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateSelectField: Expected array for multiple field "${t}", got ${typeof n}`);return}const l=a.querySelectorAll(`[name^="${t}["]`);l.forEach((r,i)=>{i<n.length&&(r.value=n[i]!=null?String(n[i]):"",r.querySelectorAll("option").forEach(s=>{s.selected=s.value===String(n[i])}),r.classList.remove("invalid"),r.title="")}),n.length!==l.length&&console.warn(`updateSelectField: Multiple field "${t}" has ${l.length} selects but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const l=a.querySelector(`[name="${t}"]`);l&&(l.value=n!=null?String(n):"",l.querySelectorAll("option").forEach(r=>{r.selected=r.value===String(n)}),l.classList.remove("invalid"),l.title="")}}function Je(e,t,n,o){const a=document.createElement("img");a.className="w-full h-full object-contain",a.alt=n||$("previewAlt",o);const l=new FileReader;l.onload=r=>{var i;a.src=((i=r.target)==null?void 0:i.result)||""},l.readAsDataURL(t),e.appendChild(a)}function Ye(e,t,n,o,a,l){const r=URL.createObjectURL(t);e.onclick=null;const i=e.cloneNode(!1);return e.parentNode&&e.parentNode.replaceChild(i,e),i.innerHTML=`
48
85
  <div class="relative group h-full">
49
86
  <video class="w-full h-full object-contain" controls preload="auto" muted>
50
- <source src="${l}" type="${n}">
51
- Your browser does not support the video tag.
87
+ <source src="${r}" type="${n}">
88
+ ${L($("videoNotSupported",a))}
52
89
  </video>
53
90
  <div class="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity z-10 flex gap-1">
54
91
  <button class="bg-red-600 bg-opacity-75 hover:bg-opacity-90 text-white p-1 rounded text-xs delete-file-btn">
55
- ${L("removeElement",a)}
92
+ ${L($("removeElement",a))}
56
93
  </button>
57
94
  <button class="bg-gray-800 bg-opacity-75 hover:bg-opacity-90 text-white p-1 rounded text-xs change-file-btn">
58
- Change
95
+ ${L($("changeButton",a))}
59
96
  </button>
60
97
  </div>
61
98
  </div>
62
- `,We(s,o,a,r),s}function We(e,t,n,o){const a=e.querySelector(".change-file-btn");a&&(a.onclick=l=>{l.stopPropagation(),o!=null&&o.picker&&o.picker.click()});const r=e.querySelector(".delete-file-btn");r&&(r.onclick=l=>{l.stopPropagation(),Je(e,t,n,o)})}function Je(e,t,n,o){var a;n.resourceIndex.delete(t);const r=(a=e.parentElement)==null?void 0:a.querySelector('input[type="hidden"]');r&&(r.value=""),o!=null&&o.fileUploadHandler&&(e.onclick=o.fileUploadHandler),o!=null&&o.dragHandler&&V(e,o.dragHandler),e.innerHTML=`
99
+ `,Ge(i,o,a,l),i}function Ge(e,t,n,o){const a=e.querySelector(".change-file-btn");a&&(a.onclick=r=>{r.stopPropagation(),o!=null&&o.picker&&o.picker.click()});const l=e.querySelector(".delete-file-btn");l&&(l.onclick=r=>{r.stopPropagation(),Xe(e,t,n,o)})}function Xe(e,t,n,o){var a;n.resourceIndex.delete(t);const l=(a=e.parentElement)==null?void 0:a.querySelector('input[type="hidden"]');l&&(l.value=""),o!=null&&o.fileUploadHandler&&(e.onclick=o.fileUploadHandler),o!=null&&o.dragHandler&&_(e,o.dragHandler),e.innerHTML=`
63
100
  <div class="flex flex-col items-center justify-center h-full text-gray-400">
64
101
  <svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
65
102
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
66
103
  </svg>
67
- <div class="text-sm text-center">${L("clickDragText",n)}</div>
104
+ <div class="text-sm text-center">${L($("clickDragText",n))}</div>
68
105
  </div>
69
- `}function Ye(e,t,n){const o=document.createElement("video");o.className="w-full h-full object-contain",o.controls=!0,o.preload="metadata",o.muted=!0;const a=document.createElement("source");a.src=t,a.type=n,o.appendChild(a),o.appendChild(document.createTextNode("Your browser does not support the video tag.")),e.appendChild(o)}function Ge(e,t,n){Ke(e,n,()=>{var o;n.resourceIndex.delete(t);const a=(o=e.parentElement)==null?void 0:o.querySelector('input[type="hidden"]');a&&(a.value=""),e.innerHTML=`
106
+ `}function Ze(e,t,n,o){const a=document.createElement("video");a.className="w-full h-full object-contain",a.controls=!0,a.preload="metadata",a.muted=!0;const l=document.createElement("source");l.src=t,l.type=n,a.appendChild(l),a.appendChild(document.createTextNode($("videoNotSupported",o))),e.appendChild(a)}function Qe(e,t,n){nt(e,n,()=>{var o;n.resourceIndex.delete(t);const a=(o=e.parentElement)==null?void 0:o.querySelector('input[type="hidden"]');a&&(a.value=""),e.innerHTML=`
70
107
  <div class="flex flex-col items-center justify-center h-full text-gray-400">
71
108
  <svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
72
109
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
73
110
  </svg>
74
- <div class="text-sm text-center">${L("clickDragText",n)}</div>
111
+ <div class="text-sm text-center">${L($("clickDragText",n))}</div>
75
112
  </div>
76
- `})}async function Xe(e,t,n,o,a,r,l){!t.file||!(t.file instanceof File)||(t.type&&t.type.startsWith("image/")?Ve(e,t.file,n):t.type&&t.type.startsWith("video/")?e=_e(e,t.file,t.type,o,r,l):e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400"><div class="text-2xl mb-2">\u{1F4C1}</div><div class="text-sm">${n}</div></div>`,!a&&!(t.type&&t.type.startsWith("video/"))&&Ge(e,o,r))}async function Ze(e,t,n,o,a){if(!a.config.getThumbnail){P(e,a);return}try{const r=await a.config.getThumbnail(t);if(r)if(H(e),o&&o.type&&o.type.startsWith("video/"))Ye(e,r,o.type);else{const l=document.createElement("img");l.className="w-full h-full object-contain",l.alt=n||"Preview",l.src=r,e.appendChild(l)}else P(e,a)}catch(r){console.error("Failed to get thumbnail:",r),e.innerHTML=`
113
+ `})}async function Ke(e,t,n,o,a,l,r){!t.file||!(t.file instanceof File)||(t.type&&t.type.startsWith("image/")?Je(e,t.file,n,l):t.type&&t.type.startsWith("video/")?e=Ye(e,t.file,t.type,o,l,r):e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400"><div class="text-2xl mb-2">\u{1F4C1}</div><div class="text-sm">${L(n)}</div></div>`,!a&&!(t.type&&t.type.startsWith("video/"))&&Qe(e,o,l))}async function et(e,t,n,o,a){if(!a.config.getThumbnail){V(e,a);return}try{const l=await a.config.getThumbnail(t);if(l)if(M(e),o&&o.type&&o.type.startsWith("video/"))Ze(e,l,o.type,a);else{const r=document.createElement("img");r.className="w-full h-full object-contain",r.alt=n||$("previewAlt",a),r.src=l,e.appendChild(r)}else V(e,a)}catch(l){console.error("Failed to get thumbnail:",l),e.innerHTML=`
77
114
  <div class="flex flex-col items-center justify-center h-full text-gray-400">
78
115
  <svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
79
116
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
80
117
  </svg>
81
- <div class="text-sm text-center">${n||"Preview unavailable"}</div>
118
+ <div class="text-sm text-center">${L(n||$("previewUnavailable",a))}</div>
82
119
  </div>
83
- `}}async function K(e,t,n,o={}){const{fileName:a="",isReadonly:r=!1,deps:l=null}=o;if(!r&&l&&(!l.picker||!l.fileUploadHandler||!l.dragHandler))throw new Error("renderFilePreview: missing deps {picker, fileUploadHandler, dragHandler}");H(e),r&&e.classList.add("cursor-pointer");const s=n.resourceIndex.get(t);s&&s.file&&s.file instanceof File?await Xe(e,s,a,t,r,n,l):await Ze(e,t,a,s,n)}async function U(e,t,n){var o,a;const r=t.resourceIndex.get(e),l=(r==null?void 0:r.name)||e.split("/").pop()||"file",s=l.toLowerCase().match(/\.psd$/),i=document.createElement("div");i.className=s?"space-y-2":"space-y-3";const d=document.createElement("div");s?d.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity flex items-center p-3 max-w-sm":d.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity";const u=!s&&(((o=r==null?void 0:r.type)==null?void 0:o.startsWith("image/"))||l.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/)),c=((a=r==null?void 0:r.type)==null?void 0:a.startsWith("video/"))||l.toLowerCase().match(/\.(mp4|webm|avi|mov)$/);if(u)if(t.config.getThumbnail)try{const f=await t.config.getThumbnail(e);f?d.innerHTML=`<img src="${f}" alt="${l}" class="w-full h-auto">`:d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${l}</div></div></div>`}catch(f){console.warn("getThumbnail failed for",e,f),d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${l}</div></div></div>`}else d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${l}</div></div></div>`;else if(c)if(t.config.getThumbnail)try{const f=await t.config.getThumbnail(e);f?d.innerHTML=`
120
+ `}}async function ne(e,t,n,o={}){const{fileName:a="",isReadonly:l=!1,deps:r=null}=o;if(!l&&r&&(!r.picker||!r.fileUploadHandler||!r.dragHandler))throw new Error("renderFilePreview: missing deps {picker, fileUploadHandler, dragHandler}");M(e),l&&e.classList.add("cursor-pointer");const i=n.resourceIndex.get(t);i&&i.file&&i.file instanceof File?await Ke(e,i,a,t,l,n,r):await et(e,t,a,i,n)}async function P(e,t,n){var o,a;const l=t.resourceIndex.get(e),r=(l==null?void 0:l.name)||e.split("/").pop()||"file",i=r.toLowerCase().match(/\.psd$/),s=document.createElement("div");s.className=i?"space-y-2":"space-y-3";const u=document.createElement("div");i?u.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity flex items-center p-3 max-w-sm":u.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity";const p=!i&&(((o=l==null?void 0:l.type)==null?void 0:o.startsWith("image/"))||r.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/)),c=((a=l==null?void 0:l.type)==null?void 0:a.startsWith("video/"))||r.toLowerCase().match(/\.(mp4|webm|avi|mov)$/);if(p)if(t.config.getThumbnail)try{const m=await t.config.getThumbnail(e);m?u.innerHTML=`<img src="${m}" alt="${L(r)}" class="w-full h-auto">`:u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${L(r)}</div></div></div>`}catch(m){console.warn("getThumbnail failed for",e,m),u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${L(r)}</div></div></div>`}else u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F5BC}\uFE0F</div><div class="text-sm">${L(r)}</div></div></div>`;else if(c)if(t.config.getThumbnail)try{const m=await t.config.getThumbnail(e);m?u.innerHTML=`
84
121
  <div class="relative group">
85
122
  <video class="w-full h-auto" controls preload="auto" muted>
86
- <source src="${f}" type="${(r==null?void 0:r.type)||"video/mp4"}">
87
- \u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043E.
123
+ <source src="${m}" type="${(l==null?void 0:l.type)||"video/mp4"}">
124
+ ${L($("videoNotSupported",t))}
88
125
  </video>
89
126
  <div class="absolute inset-0 bg-black bg-opacity-20 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center pointer-events-none">
90
127
  <div class="bg-white bg-opacity-90 rounded-full p-3">
@@ -94,34 +131,34 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
94
131
  </div>
95
132
  </div>
96
133
  </div>
97
- `:d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${l}</div></div></div>`}catch(f){console.warn("getThumbnail failed for video",e,f),d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${l}</div></div></div>`}else d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${l}</div></div></div>`;else{const f=s?"\u{1F3A8}":"\u{1F4C1}",h=s?"PSD File":"Document";s?d.innerHTML=`
134
+ `:u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${L(r)}</div></div></div>`}catch(m){console.warn("getThumbnail failed for video",e,m),u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${L(r)}</div></div></div>`}else u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">\u{1F3A5}</div><div class="text-sm">${L(r)}</div></div></div>`;else{const m=i?"\u{1F3A8}":"\u{1F4C1}",v=i?"PSD File":"Document";i?u.innerHTML=`
98
135
  <div class="flex items-center space-x-3">
99
- <div class="text-3xl text-gray-400">${f}</div>
136
+ <div class="text-3xl text-gray-400">${m}</div>
100
137
  <div class="flex-1 min-w-0">
101
- <div class="text-sm font-medium text-gray-900 truncate">${l}</div>
102
- <div class="text-xs text-gray-500">${h}</div>
138
+ <div class="text-sm font-medium text-gray-900 truncate">${L(r)}</div>
139
+ <div class="text-xs text-gray-500">${v}</div>
103
140
  </div>
104
141
  </div>
105
- `:d.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">${f}</div><div class="text-sm">${l}</div><div class="text-xs text-gray-500 mt-1">${h}</div></div></div>`}const p=document.createElement("p");p.className=s?"hidden":"text-sm font-medium text-gray-900 text-center",p.textContent=l;const v=document.createElement("button");return v.className="w-full px-3 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",v.textContent=L("downloadButton",t),v.onclick=f=>{f.preventDefault(),f.stopPropagation(),t.config.downloadFile?t.config.downloadFile(e,l):et(e,l,t)},i.appendChild(d),i.appendChild(p),i.appendChild(v),i}function ee(e,t,n,o){H(e);const a=!e.classList.contains("grid");if((!t||t.length===0)&&a){const s=document.createElement("div");s.className="grid grid-cols-4 gap-3 mb-3";for(let u=0;u<4;u++){const c=document.createElement("div");c.className="aspect-square bg-gray-100 border-2 border-dashed border-gray-300 rounded flex items-center justify-center cursor-pointer hover:border-gray-400 transition-colors";const p=document.createElementNS("http://www.w3.org/2000/svg","svg");p.setAttribute("class","w-12 h-12 text-gray-400"),p.setAttribute("fill","currentColor"),p.setAttribute("viewBox","0 0 24 24");const v=document.createElementNS("http://www.w3.org/2000/svg","path");v.setAttribute("d","M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"),p.appendChild(v),c.appendChild(p),c.onclick=()=>{let f=e.parentElement;for(;f&&!f.classList.contains("space-y-2");)f=f.parentElement;!f&&e.classList.contains("space-y-2")&&(f=e);const h=f==null?void 0:f.querySelector('input[type="file"]');h&&h.click()},s.appendChild(c)}const i=document.createElement("div");i.className="text-center text-xs text-gray-600";const d=document.createElement("span");d.className="underline cursor-pointer",d.textContent=L("uploadText",n),d.onclick=u=>{u.stopPropagation();let c=e.parentElement;for(;c&&!c.classList.contains("space-y-2");)c=c.parentElement;!c&&e.classList.contains("space-y-2")&&(c=e);const p=c==null?void 0:c.querySelector('input[type="file"]');p&&p.click()},i.appendChild(d),i.appendChild(document.createTextNode(` ${L("dragDropText",n)}`)),e.appendChild(s),e.appendChild(i);return}e.className="files-list grid grid-cols-4 gap-3 mt-2";const r=t?t.length:0,l=(Math.floor(r/4)+1)*4;for(let s=0;s<l;s++){const i=document.createElement("div");if(t&&s<t.length){const d=t[s],u=n.resourceIndex.get(d);if(i.className="resource-pill aspect-square bg-gray-100 rounded-lg overflow-hidden relative group border border-gray-300",i.dataset.resourceId=d,Qe(i,d,u,n).catch(c=>{console.error("Failed to render thumbnail:",c),i.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
142
+ `:u.innerHTML=`<div class="aspect-video flex items-center justify-center text-gray-400"><div class="text-center"><div class="text-4xl mb-2">${m}</div><div class="text-sm">${L(r)}</div><div class="text-xs text-gray-500 mt-1">${v}</div></div></div>`}const h=document.createElement("p");h.className=i?"hidden":"text-sm font-medium text-gray-900 text-center",h.textContent=r;const f=document.createElement("button");return f.className="w-full px-3 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",f.textContent=$("downloadButton",t),f.onclick=m=>{m.preventDefault(),m.stopPropagation(),t.config.downloadFile?t.config.downloadFile(e,r):rt(e,r,t)},s.appendChild(u),s.appendChild(h),s.appendChild(f),s}function re(e,t,n,o,a,l){M(e);const r=()=>{const h=[$("clickDragTextMultiple",n)];return a&&h.push(a),l&&h.push(l),h.join(" \u2022 ")},i=!e.classList.contains("grid");if((!t||t.length===0)&&i){const h=document.createElement("div");h.className="grid grid-cols-4 gap-3 mb-3";for(let m=0;m<4;m++){const v=document.createElement("div");v.className="aspect-square bg-gray-100 border-2 border-dashed border-gray-300 rounded flex items-center justify-center cursor-pointer hover:border-gray-400 transition-colors";const g=document.createElementNS("http://www.w3.org/2000/svg","svg");g.setAttribute("class","w-12 h-12 text-gray-400"),g.setAttribute("fill","currentColor"),g.setAttribute("viewBox","0 0 24 24");const E=document.createElementNS("http://www.w3.org/2000/svg","path");E.setAttribute("d","M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"),g.appendChild(E),v.appendChild(g),v.onclick=()=>{let d=e.parentElement;for(;d&&!d.classList.contains("space-y-2");)d=d.parentElement;!d&&e.classList.contains("space-y-2")&&(d=e);const b=d==null?void 0:d.querySelector('input[type="file"]');b&&b.click()},h.appendChild(v)}const f=document.createElement("div");f.className="text-center text-xs text-gray-500 mt-2",f.textContent=r(),e.appendChild(h),e.appendChild(f);return}const s=document.createElement("div");s.className="files-list grid grid-cols-4 gap-3";const u=t?t.length:0,p=(Math.floor(u/4)+1)*4;for(let h=0;h<p;h++){const f=document.createElement("div");if(t&&h<t.length){const m=t[h],v=n.resourceIndex.get(m);if(f.className="resource-pill aspect-square bg-gray-100 rounded-lg overflow-hidden relative group border border-gray-300",f.dataset.resourceId=m,tt(f,m,v,n).catch(g=>{console.error("Failed to render thumbnail:",g),f.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
106
143
  <div class="text-2xl mb-1">\u{1F4C1}</div>
107
- <div class="text-xs">Preview error</div>
108
- </div>`}),o){const c=document.createElement("div");c.className="absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center";const p=document.createElement("button");p.className="bg-red-600 text-white px-2 py-1 rounded text-xs",p.textContent=L("removeElement",n),p.onclick=v=>{v.stopPropagation(),o(d)},c.appendChild(p),i.appendChild(c)}}else i.className="aspect-square bg-gray-100 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center cursor-pointer hover:border-gray-400 transition-colors",i.innerHTML='<svg class="w-12 h-12 text-gray-400" fill="currentColor" viewBox="0 0 24 24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>',i.onclick=()=>{let d=e.parentElement;for(;d&&!d.classList.contains("space-y-2");)d=d.parentElement;!d&&e.classList.contains("space-y-2")&&(d=e);const u=d==null?void 0:d.querySelector('input[type="file"]');u&&u.click()};e.appendChild(i)}}function te(e,t="w-12 h-12"){e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
109
- <svg class="${t} text-red-400" fill="currentColor" viewBox="0 0 24 24">
144
+ <div class="text-xs">${L($("previewError",n))}</div>
145
+ </div>`}),o){const g=document.createElement("div");g.className="absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center";const E=document.createElement("button");E.className="bg-red-600 text-white px-2 py-1 rounded text-xs",E.textContent=$("removeElement",n),E.onclick=d=>{d.stopPropagation(),o(m)},g.appendChild(E),f.appendChild(g)}}else f.className="aspect-square bg-gray-100 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center cursor-pointer hover:border-gray-400 transition-colors",f.innerHTML='<svg class="w-12 h-12 text-gray-400" fill="currentColor" viewBox="0 0 24 24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>',f.onclick=()=>{let m=e.parentElement;for(;m&&!m.classList.contains("space-y-2");)m=m.parentElement;!m&&e.classList.contains("space-y-2")&&(m=e);const v=m==null?void 0:m.querySelector('input[type="file"]');v&&v.click()};s.appendChild(f)}e.appendChild(s);const c=document.createElement("div");c.className="text-center text-xs text-gray-500 mt-2",c.textContent=r(),e.appendChild(c)}function oe(e,t,n="w-12 h-12"){e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
146
+ <svg class="${L(n)} text-red-400" fill="currentColor" viewBox="0 0 24 24">
110
147
  <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
111
148
  </svg>
112
- <div class="text-xs mt-1 text-red-600">Preview error</div>
113
- </div>`}async function Qe(e,t,n,o){var a,r;if(n&&(a=n.type)!=null&&a.startsWith("image/"))if(n.file&&n.file instanceof File){const l=document.createElement("img");l.className="w-full h-full object-contain",l.alt=n.name;const s=new FileReader;s.onload=i=>{var d;l.src=((d=i.target)==null?void 0:d.result)||""},s.readAsDataURL(n.file),e.appendChild(l)}else if(o.config.getThumbnail)try{const l=await o.config.getThumbnail(t);if(l){const s=document.createElement("img");s.className="w-full h-full object-contain",s.alt=n.name,s.src=l,e.appendChild(s)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
149
+ <div class="text-xs mt-1 text-red-600">${L($("previewError",t))}</div>
150
+ </div>`}async function tt(e,t,n,o){var a,l;if(n&&(a=n.type)!=null&&a.startsWith("image/"))if(n.file&&n.file instanceof File){const r=document.createElement("img");r.className="w-full h-full object-contain",r.alt=n.name;const i=new FileReader;i.onload=s=>{var u;r.src=((u=s.target)==null?void 0:u.result)||""},i.readAsDataURL(n.file),e.appendChild(r)}else if(o.config.getThumbnail)try{const r=await o.config.getThumbnail(t);if(r){const i=document.createElement("img");i.className="w-full h-full object-contain",i.alt=n.name,i.src=r,e.appendChild(i)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
114
151
  <svg class="w-12 h-12" fill="currentColor" viewBox="0 0 24 24">
115
152
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
116
153
  </svg>
117
- </div>`}catch(l){const s=l instanceof Error?l:new Error(String(l));o.config.onThumbnailError&&o.config.onThumbnailError(s,t),te(e)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
154
+ </div>`}catch(r){const i=r instanceof Error?r:new Error(String(r));o.config.onThumbnailError&&o.config.onThumbnailError(i,t),oe(e,o)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
118
155
  <svg class="w-12 h-12" fill="currentColor" viewBox="0 0 24 24">
119
156
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
120
157
  </svg>
121
- </div>`;else if(n&&(r=n.type)!=null&&r.startsWith("video/"))if(n.file&&n.file instanceof File){const l=URL.createObjectURL(n.file);e.innerHTML=`
158
+ </div>`;else if(n&&(l=n.type)!=null&&l.startsWith("video/"))if(n.file&&n.file instanceof File){const r=URL.createObjectURL(n.file);e.innerHTML=`
122
159
  <div class="relative group h-full w-full">
123
160
  <video class="w-full h-full object-contain" preload="metadata" muted>
124
- <source src="${l}" type="${n.type}">
161
+ <source src="${r}" type="${n.type}">
125
162
  </video>
126
163
  <div class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center">
127
164
  <div class="bg-white bg-opacity-90 rounded-full p-1">
@@ -131,10 +168,10 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
131
168
  </div>
132
169
  </div>
133
170
  </div>
134
- `}else if(o.config.getThumbnail)try{const l=await o.config.getThumbnail(t);l?e.innerHTML=`
171
+ `}else if(o.config.getThumbnail)try{const r=await o.config.getThumbnail(t);r?e.innerHTML=`
135
172
  <div class="relative group h-full w-full">
136
173
  <video class="w-full h-full object-contain" preload="metadata" muted>
137
- <source src="${l}" type="${n.type}">
174
+ <source src="${r}" type="${n.type}">
138
175
  </video>
139
176
  <div class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center">
140
177
  <div class="bg-white bg-opacity-90 rounded-full p-1">
@@ -148,23 +185,24 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
148
185
  <svg class="w-8 h-8" fill="currentColor" viewBox="0 0 24 24">
149
186
  <path d="M8 5v14l11-7z"/>
150
187
  </svg>
151
- <div class="text-xs mt-1">${(n==null?void 0:n.name)||"Video"}</div>
152
- </div>`}catch(l){const s=l instanceof Error?l:new Error(String(l));o.config.onThumbnailError&&o.config.onThumbnailError(s,t),te(e,"w-8 h-8")}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
188
+ <div class="text-xs mt-1">${L((n==null?void 0:n.name)||"Video")}</div>
189
+ </div>`}catch(r){const i=r instanceof Error?r:new Error(String(r));o.config.onThumbnailError&&o.config.onThumbnailError(i,t),oe(e,o,"w-8 h-8")}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
153
190
  <svg class="w-8 h-8" fill="currentColor" viewBox="0 0 24 24">
154
191
  <path d="M8 5v14l11-7z"/>
155
192
  </svg>
156
- <div class="text-xs mt-1">${(n==null?void 0:n.name)||"Video"}</div>
193
+ <div class="text-xs mt-1">${L((n==null?void 0:n.name)||"Video")}</div>
157
194
  </div>`;else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
158
195
  <div class="text-2xl mb-1">\u{1F4C1}</div>
159
- <div class="text-xs">${(n==null?void 0:n.name)||"File"}</div>
160
- </div>`}function P(e,t){e.innerHTML=`
196
+ <div class="text-xs">${L((n==null?void 0:n.name)||"File")}</div>
197
+ </div>`}function V(e,t,n){const o=n?`<div class="text-xs text-gray-500 mt-1">${L(n)}</div>`:"";e.innerHTML=`
161
198
  <div class="flex flex-col items-center justify-center h-full text-gray-400">
162
199
  <svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
163
200
  <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
164
201
  </svg>
165
- <div class="text-sm text-center">${L("clickDragText",t)}</div>
202
+ <div class="text-sm text-center">${L($("clickDragText",t))}</div>
203
+ ${o}
166
204
  </div>
167
- `}async function ne(e,t,n,o,a=null,r){var l,s;let i;if(o.config.uploadFile)try{if(i=await o.config.uploadFile(e),typeof i!="string")throw new Error("Upload handler must return a string resource ID")}catch(u){const c=u instanceof Error?u:new Error(String(u));throw o.config.onUploadError&&o.config.onUploadError(c,e),new Error(`File upload failed: ${c.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()");o.resourceIndex.set(i,{name:e.name,type:e.type,size:e.size,uploadedAt:new Date,file:e});let d=(l=t.parentElement)==null?void 0:l.querySelector('input[type="hidden"]');d||(d=document.createElement("input"),d.type="hidden",d.name=n,(s=t.parentElement)==null||s.appendChild(d)),d.value=i,K(t,i,o,{fileName:e.name,isReadonly:!1,deps:a}).catch(console.error),r&&!o.config.readonly&&r.triggerOnChange(n,i)}function V(e,t){e.addEventListener("dragover",n=>{n.preventDefault(),e.classList.add("border-blue-500","bg-blue-50")}),e.addEventListener("dragleave",n=>{n.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50")}),e.addEventListener("drop",n=>{var o;n.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50"),(o=n.dataTransfer)!=null&&o.files&&t(n.dataTransfer.files)})}function Ke(e,t,n){const o=e.querySelector(".delete-overlay");o&&o.remove();const a=document.createElement("div");a.className="delete-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center";const r=document.createElement("button");r.className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700 transition-colors",r.textContent=L("removeElement",t),r.onclick=l=>{l.stopPropagation(),n()},a.appendChild(r),e.appendChild(a)}async function re(e,t){if(t.config.uploadFile)try{const n=await t.config.uploadFile(e);if(typeof n!="string")throw new Error("Upload handler must return a string resource ID");return n}catch(n){const o=n instanceof Error?n:new Error(String(n));throw t.config.onUploadError&&t.config.onUploadError(o,e),new Error(`File upload failed: ${o.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()")}async function et(e,t,n){try{let o=null;if(n.config.getDownloadUrl?o=n.config.getDownloadUrl(e):n.config.getThumbnail&&(o=await n.config.getThumbnail(e)),o){const a=o.startsWith("http")?o:new URL(o,window.location.href).href,r=await fetch(a);if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const l=await r.blob();tt(l,t)}else throw new Error("No download URL available for resource")}catch(o){const a=o instanceof Error?o:new Error(String(o));throw n.config.onDownloadError&&n.config.onDownloadError(a,e,t),console.error(`File download failed for ${t}:`,a),a}}function tt(e,t){try{const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=t,o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>{URL.revokeObjectURL(n)},100)}catch(n){throw new Error(`Blob download failed: ${n.message}`)}}function oe(e,t){e.length>0&&e.forEach(n=>{var o;if(!t.resourceIndex.has(n)){const a=n.split("/").pop()||"file",r=(o=a.split(".").pop())==null?void 0:o.toLowerCase();let l="application/octet-stream";r&&(["jpg","jpeg","png","gif","webp"].includes(r)?l=`image/${r==="jpg"?"jpeg":r}`:["mp4","webm","mov","avi"].includes(r)&&(l=`video/${r==="mov"?"quicktime":r}`)),t.resourceIndex.set(n,{name:a,type:l,size:0,uploadedAt:new Date,file:void 0})}})}function nt(e,t,n,o,a,r){var l;if(!a.resourceIndex.has(e)){const i=e.split("/").pop()||"file",d=(l=i.split(".").pop())==null?void 0:l.toLowerCase();let u="application/octet-stream";d&&(["jpg","jpeg","png","gif","webp"].includes(d)?u=`image/${d==="jpg"?"jpeg":d}`:["mp4","webm","mov","avi"].includes(d)&&(u=`video/${d==="mov"?"quicktime":d}`)),a.resourceIndex.set(e,{name:i,type:u,size:0,uploadedAt:new Date,file:void 0})}K(t,e,a,{fileName:e,isReadonly:!1,deps:r}).catch(console.error);const s=document.createElement("input");s.type="hidden",s.name=n,s.value=e,o.appendChild(s)}function le(e,t,n,o,a,r){V(e,async l=>{const s=Array.from(l);for(const i of s){const d=await re(i,n);n.resourceIndex.set(d,{name:i.name,type:i.type,size:i.size,uploadedAt:new Date,file:void 0}),t.push(d)}o(),r&&a&&!n.config.readonly&&r.triggerOnChange(a,t)})}function ae(e,t,n,o,a,r){e.onchange=async()=>{if(e.files)for(const l of Array.from(e.files)){const s=await re(l,n);n.resourceIndex.set(s,{name:l.name,type:l.type,size:l.size,uploadedAt:new Date,file:void 0}),t.push(s)}o(),e.value="",r&&a&&!n.config.readonly&&r.triggerOnChange(a,t)}}function rt(e,t,n,o){var a;const r=t.state;if(r.config.readonly){const l=t.prefill[e.key];if(l)U(l,r).then(s=>{n.appendChild(s)}).catch(s=>{console.error("Failed to render file preview:",s);const i=document.createElement("div");i.className="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500",i.innerHTML='<div class="text-center">Preview unavailable</div>',n.appendChild(i)});else{const s=document.createElement("div");s.className="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500",s.innerHTML=`<div class="text-center">${L("noFileSelected",r)}</div>`,n.appendChild(s)}}else{const l=document.createElement("div");l.className="space-y-2";const s=document.createElement("input");s.type="file",s.name=o,s.style.display="none",e.accept&&(s.accept=typeof e.accept=="string"?e.accept:((a=e.accept.extensions)==null?void 0:a.map(h=>`.${h}`).join(","))||"");const i=document.createElement("div");i.className="file-preview-container w-full aspect-square max-w-xs bg-gray-100 rounded-lg overflow-hidden relative group cursor-pointer";const d=t.prefill[e.key],u=()=>s.click(),c=h=>{if(h.length>0){const b={picker:s,fileUploadHandler:u,dragHandler:c};ne(h[0],i,o,r,b,t.instance)}};d?nt(d,i,o,l,r,{picker:s,fileUploadHandler:u,dragHandler:c}):P(i,r),i.onclick=u,V(i,c),s.onchange=()=>{if(s.files&&s.files.length>0){const h={picker:s,fileUploadHandler:u,dragHandler:c};ne(s.files[0],i,o,r,h,t.instance)}},l.appendChild(i),l.appendChild(s);const p=document.createElement("p");p.className="text-xs text-gray-600 mt-2 text-center",p.innerHTML=`<span class="underline cursor-pointer">${L("uploadText",r)}</span> ${L("dragDropTextSingle",r)}`;const v=p.querySelector("span");v&&(v.onclick=()=>s.click()),l.appendChild(p);const f=document.createElement("p");f.className="text-xs text-gray-500 mt-1 text-center",f.textContent=S(e),l.appendChild(f),n.appendChild(l)}}function ot(e,t,n,o){var a;const r=t.state;if(r.config.readonly){const l=document.createElement("div");l.className="space-y-4";const s=t.prefill[e.key]||[];s.length>0?s.forEach(i=>{U(i,r).then(d=>{l.appendChild(d)}).catch(d=>{console.error("Failed to render file preview:",d)})}):l.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${L("noFilesSelected",r)}</div></div>`,n.appendChild(l)}else{let l=function(){ee(u,c,r,v=>{const f=c.indexOf(v);f>-1&&c.splice(f,1),l()})};const s=document.createElement("div");s.className="space-y-2";const i=document.createElement("input");i.type="file",i.name=o,i.multiple=!0,i.style.display="none",e.accept&&(i.accept=typeof e.accept=="string"?e.accept:((a=e.accept.extensions)==null?void 0:a.map(v=>`.${v}`).join(","))||"");const d=document.createElement("div");d.className="border-2 border-dashed border-gray-300 rounded-lg p-3 hover:border-gray-400 transition-colors";const u=document.createElement("div");u.className="files-list";const c=t.prefill[e.key]||[];oe(c,r),l(),le(d,c,r,l,o,t.instance),ae(i,c,r,l,o,t.instance),d.appendChild(u),s.appendChild(d),s.appendChild(i);const p=document.createElement("p");p.className="text-xs text-gray-500 mt-1 text-center",p.textContent=S(e),s.appendChild(p),n.appendChild(s)}}function lt(e,t,n,o){var a,r,l;const s=t.state,i=(a=e.minCount)!=null?a:0,d=(r=e.maxCount)!=null?r:1/0;if(s.config.readonly){const u=document.createElement("div");u.className="space-y-4";const c=t.prefill[e.key]||[];c.length>0?c.forEach(p=>{U(p,s).then(v=>{u.appendChild(v)}).catch(v=>{console.error("Failed to render file preview:",v)})}):u.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${L("noFilesSelected",s)}</div></div>`,n.appendChild(u)}else{const u=document.createElement("div");u.className="space-y-2";const c=document.createElement("input");c.type="file",c.name=o,c.multiple=!0,c.style.display="none",e.accept&&(c.accept=typeof e.accept=="string"?e.accept:((l=e.accept.extensions)==null?void 0:l.map(h=>`.${h}`).join(","))||"");const p=document.createElement("div");p.className="files-list space-y-2",u.appendChild(c),u.appendChild(p);const v=Array.isArray(t.prefill[e.key])?[...t.prefill[e.key]]:[];oe(v,s);const f=()=>{ee(p,v,s,y=>{v.splice(v.indexOf(y),1),f()});const h=document.createElement("div");h.className="text-xs text-gray-500 mt-2 file-count-info";const b=`${v.length} file${v.length!==1?"s":""}`,x=i>0||d<1/0?` (${i}-${d} allowed)`:"";h.textContent=b+x;const g=u.querySelector(".file-count-info");g&&g.remove(),u.appendChild(h)};le(p,v,s,f,o,t.instance),ae(c,v,s,f,o,t.instance),f(),n.appendChild(u)}}function ie(e,t,n){var o;const a=[],{scopeRoot:r,skipValidation:l,path:s}=n,i=e.type==="files"||"multiple"in e&&!!e.multiple,d=(u,c,p)=>{var v,f;if(l)return;const h="minCount"in p&&(v=p.minCount)!=null?v:0,b="maxCount"in p&&(f=p.maxCount)!=null?f:1/0;p.required&&c.length===0&&a.push(`${u}: required`),c.length<h&&a.push(`${u}: minimum ${h} files required`),c.length>b&&a.push(`${u}: maximum ${b} files allowed`)};if(i){const u=q(s,t),c=r.querySelector(`input[type="file"][name="${u}"]`),p=c==null?void 0:c.closest(".space-y-2"),v=(p==null?void 0:p.querySelector(".files-list"))||null,f=[];return v&&v.querySelectorAll(".resource-pill").forEach(h=>{const b=h.dataset.resourceId;b&&f.push(b)}),d(t,f,e),{value:f,errors:a}}else{const u=r.querySelector(`input[name$="${t}"][type="hidden"]`),c=(o=u==null?void 0:u.value)!=null?o:"";return!l&&e.required&&c===""?(a.push(`${t}: required`),{value:null,errors:a}):{value:c||null,errors:a}}}function se(e,t,n,o){var a;const{scopeRoot:r,state:l}=o;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateFileField: Expected array for multiple file field "${t}", got ${typeof n}`);return}n.forEach(s=>{var i;if(s&&typeof s=="string"&&!l.resourceIndex.has(s)){const d=s.split("/").pop()||"file",u=(i=d.split(".").pop())==null?void 0:i.toLowerCase();let c="application/octet-stream";u&&(["jpg","jpeg","png","gif","webp"].includes(u)?c=`image/${u==="jpg"?"jpeg":u}`:["mp4","webm","mov","avi"].includes(u)&&(c=`video/${u==="mov"?"quicktime":u}`)),l.resourceIndex.set(s,{name:d,type:c,size:0,uploadedAt:new Date,file:void 0})}}),console.info(`updateFileField: Multiple file field "${t}" updated. Preview update requires re-render.`)}else{const s=r.querySelector(`input[name="${t}"][type="hidden"]`);if(!s){console.warn(`updateFileField: Hidden input not found for file field "${t}"`);return}if(s.value=n!=null?String(n):"",n&&typeof n=="string"){if(!l.resourceIndex.has(n)){const i=n.split("/").pop()||"file",d=(a=i.split(".").pop())==null?void 0:a.toLowerCase();let u="application/octet-stream";d&&(["jpg","jpeg","png","gif","webp"].includes(d)?u=`image/${d==="jpg"?"jpeg":d}`:["mp4","webm","mov","avi"].includes(d)&&(u=`video/${d==="mov"?"quicktime":d}`)),l.resourceIndex.set(n,{name:i,type:u,size:0,uploadedAt:new Date,file:void 0})}console.info(`updateFileField: File field "${t}" updated. Preview update requires re-render.`)}}}function T(e){return e?e.toUpperCase():"#000000"}function _(e){return/^#[0-9A-F]{6}$/i.test(e)||/^#[0-9A-F]{3}$/i.test(e)}function ce(e){if(/^#[0-9A-F]{3}$/i.test(e)){const t=e[1],n=e[2],o=e[3];return`#${t}${t}${n}${n}${o}${o}`.toUpperCase()}return e.toUpperCase()}function de(e){const t=document.createElement("div");t.className="flex items-center gap-2";const n=T(e),o=document.createElement("div");o.style.cssText=`
205
+ `}async function le(e,t,n,o,a=null,l){var r,i;let s;if(o.config.uploadFile)try{if(s=await o.config.uploadFile(e),typeof s!="string")throw new Error("Upload handler must return a string resource ID")}catch(p){const c=p instanceof Error?p:new Error(String(p));throw o.config.onUploadError&&o.config.onUploadError(c,e),new Error(`File upload failed: ${c.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()");o.resourceIndex.set(s,{name:e.name,type:e.type,size:e.size,uploadedAt:new Date,file:e});let u=(r=t.parentElement)==null?void 0:r.querySelector('input[type="hidden"]');u||(u=document.createElement("input"),u.type="hidden",u.name=n,(i=t.parentElement)==null||i.appendChild(u)),u.value=s,ne(t,s,o,{fileName:e.name,isReadonly:!1,deps:a}).catch(console.error),l&&!o.config.readonly&&l.triggerOnChange(n,s)}function _(e,t){e.addEventListener("dragover",n=>{n.preventDefault(),e.classList.add("border-blue-500","bg-blue-50")}),e.addEventListener("dragleave",n=>{n.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50")}),e.addEventListener("drop",n=>{var o;n.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50"),(o=n.dataTransfer)!=null&&o.files&&t(n.dataTransfer.files)})}function nt(e,t,n){const o=e.querySelector(".delete-overlay");o&&o.remove();const a=document.createElement("div");a.className="delete-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center";const l=document.createElement("button");l.className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700 transition-colors",l.textContent=$("removeElement",t),l.onclick=r=>{r.stopPropagation(),n()},a.appendChild(l),e.appendChild(a)}async function ae(e,t){if(t.config.uploadFile)try{const n=await t.config.uploadFile(e);if(typeof n!="string")throw new Error("Upload handler must return a string resource ID");return n}catch(n){const o=n instanceof Error?n:new Error(String(n));throw t.config.onUploadError&&t.config.onUploadError(o,e),new Error(`File upload failed: ${o.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()")}async function rt(e,t,n){try{let o=null;if(n.config.getDownloadUrl?o=n.config.getDownloadUrl(e):n.config.getThumbnail&&(o=await n.config.getThumbnail(e)),o){const a=o.startsWith("http")?o:new URL(o,window.location.href).href,l=await fetch(a);if(!l.ok)throw new Error(`HTTP error! status: ${l.status}`);const r=await l.blob();ot(r,t)}else throw new Error("No download URL available for resource")}catch(o){const a=o instanceof Error?o:new Error(String(o));throw n.config.onDownloadError&&n.config.onDownloadError(a,e,t),console.error(`File download failed for ${t}:`,a),a}}function ot(e,t){try{const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=t,o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>{URL.revokeObjectURL(n)},100)}catch(n){throw new Error(`Blob download failed: ${n.message}`)}}function ie(e,t){e.length>0&&e.forEach(n=>{var o;if(!t.resourceIndex.has(n)){const a=n.split("/").pop()||"file",l=(o=a.split(".").pop())==null?void 0:o.toLowerCase();let r="application/octet-stream";l&&(["jpg","jpeg","png","gif","webp"].includes(l)?r=`image/${l==="jpg"?"jpeg":l}`:["mp4","webm","mov","avi"].includes(l)&&(r=`video/${l==="mov"?"quicktime":l}`)),t.resourceIndex.set(n,{name:a,type:r,size:0,uploadedAt:new Date,file:void 0})}})}function lt(e,t,n,o,a,l){var r;if(!a.resourceIndex.has(e)){const s=e.split("/").pop()||"file",u=(r=s.split(".").pop())==null?void 0:r.toLowerCase();let p="application/octet-stream";u&&(["jpg","jpeg","png","gif","webp"].includes(u)?p=`image/${u==="jpg"?"jpeg":u}`:["mp4","webm","mov","avi"].includes(u)&&(p=`video/${u==="mov"?"quicktime":u}`)),a.resourceIndex.set(e,{name:s,type:p,size:0,uploadedAt:new Date,file:void 0})}ne(t,e,a,{fileName:e,isReadonly:!1,deps:l}).catch(console.error);const i=document.createElement("input");i.type="hidden",i.name=n,i.value=e,o.appendChild(i)}function se(e,t,n,o,a,l){_(e,async r=>{const i=Array.from(r);for(const s of i){const u=await ae(s,n);n.resourceIndex.set(u,{name:s.name,type:s.type,size:s.size,uploadedAt:new Date,file:void 0}),t.push(u)}o(),l&&a&&!n.config.readonly&&l.triggerOnChange(a,t)})}function ce(e,t,n,o,a,l){e.onchange=async()=>{if(e.files)for(const r of Array.from(e.files)){const i=await ae(r,n);n.resourceIndex.set(i,{name:r.name,type:r.type,size:r.size,uploadedAt:new Date,file:void 0}),t.push(i)}o(),e.value="",l&&a&&!n.config.readonly&&l.triggerOnChange(a,t)}}function at(e,t,n,o){var a;const l=t.state;if(l.config.readonly){const r=t.prefill[e.key];if(r)P(r,l).then(i=>{n.appendChild(i)}).catch(i=>{console.error("Failed to render file preview:",i);const s=document.createElement("div");s.className="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500",s.innerHTML=`<div class="text-center">${L($("previewUnavailable",l))}</div>`,n.appendChild(s)});else{const i=document.createElement("div");i.className="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500",i.innerHTML=`<div class="text-center">${L($("noFileSelected",l))}</div>`,n.appendChild(i)}}else{const r=document.createElement("div");r.className="space-y-2";const i=document.createElement("input");i.type="file",i.name=o,i.style.display="none",e.accept&&(i.accept=typeof e.accept=="string"?e.accept:((a=e.accept.extensions)==null?void 0:a.map(h=>`.${h}`).join(","))||"");const s=document.createElement("div");s.className="file-preview-container w-full aspect-square max-w-xs bg-gray-100 rounded-lg overflow-hidden relative group cursor-pointer";const u=t.prefill[e.key],p=()=>i.click(),c=h=>{if(h.length>0){const f={picker:i,fileUploadHandler:p,dragHandler:c};le(h[0],s,o,l,f,t.instance)}};if(u)lt(u,s,o,r,l,{picker:i,fileUploadHandler:p,dragHandler:c});else{const h=F(e,l);V(s,l,h)}s.onclick=p,_(s,c),i.onchange=()=>{if(i.files&&i.files.length>0){const h={picker:i,fileUploadHandler:p,dragHandler:c};le(i.files[0],s,o,l,h,t.instance)}},r.appendChild(s),r.appendChild(i),n.appendChild(r)}}function it(e,t,n,o){var a;const l=t.state;if(l.config.readonly){const r=document.createElement("div");r.className="space-y-4";const i=t.prefill[e.key]||[];i.length>0?i.forEach(s=>{P(s,l).then(u=>{r.appendChild(u)}).catch(u=>{console.error("Failed to render file preview:",u)})}):r.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${L($("noFilesSelected",l))}</div></div>`,n.appendChild(r)}else{let r=function(){re(p,c,l,f=>{const m=c.indexOf(f);m>-1&&c.splice(m,1),r()},h)};const i=document.createElement("div");i.className="space-y-2";const s=document.createElement("input");s.type="file",s.name=o,s.multiple=!0,s.style.display="none",e.accept&&(s.accept=typeof e.accept=="string"?e.accept:((a=e.accept.extensions)==null?void 0:a.map(f=>`.${f}`).join(","))||"");const u=document.createElement("div");u.className="border-2 border-dashed border-gray-300 rounded-lg p-3 hover:border-gray-400 transition-colors";const p=document.createElement("div");p.className="files-list";const c=t.prefill[e.key]||[];ie(c,l);const h=F(e,l);r(),se(u,c,l,r,o,t.instance),ce(s,c,l,r,o,t.instance),u.appendChild(p),i.appendChild(u),i.appendChild(s),n.appendChild(i)}}function st(e,t,n,o){var a,l,r;const i=t.state,s=(a=e.minCount)!=null?a:0,u=(l=e.maxCount)!=null?l:1/0;if(i.config.readonly){const p=document.createElement("div");p.className="space-y-4";const c=t.prefill[e.key]||[];c.length>0?c.forEach(h=>{P(h,i).then(f=>{p.appendChild(f)}).catch(f=>{console.error("Failed to render file preview:",f)})}):p.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${L($("noFilesSelected",i))}</div></div>`,n.appendChild(p)}else{const p=document.createElement("div");p.className="space-y-2";const c=document.createElement("input");c.type="file",c.name=o,c.multiple=!0,c.style.display="none",e.accept&&(c.accept=typeof e.accept=="string"?e.accept:((r=e.accept.extensions)==null?void 0:r.map(E=>`.${E}`).join(","))||"");const h=document.createElement("div");h.className="files-list space-y-2",p.appendChild(c),p.appendChild(h);const f=Array.isArray(t.prefill[e.key])?[...t.prefill[e.key]]:[];ie(f,i);const m=F(e,i),v=()=>{const E=f.length===1?$("fileCountSingle",i,{count:f.length}):$("fileCountPlural",i,{count:f.length}),d=s>0||u<1/0?` ${$("fileCountRange",i,{min:s,max:u})}`:"";return E+d},g=()=>{re(h,f,i,E=>{f.splice(f.indexOf(E),1),g()},m,v())};se(h,f,i,g,o,t.instance),ce(c,f,i,g,o,t.instance),g(),n.appendChild(p)}}function ue(e,t,n){var o;const a=[],{scopeRoot:l,skipValidation:r,path:i}=n,s=e.type==="files"||"multiple"in e&&!!e.multiple,u=(p,c,h)=>{var f,m;if(r)return;const{state:v}=n,g="minCount"in h&&(f=h.minCount)!=null?f:0,E="maxCount"in h&&(m=h.maxCount)!=null?m:1/0;h.required&&c.length===0&&a.push(`${p}: ${$("required",v)}`),c.length<g&&a.push(`${p}: ${$("minFiles",v,{min:g})}`),c.length>E&&a.push(`${p}: ${$("maxFiles",v,{max:E})}`)};if(s){const p=A(i,t),c=l.querySelector(`input[type="file"][name="${p}"]`),h=c==null?void 0:c.closest(".space-y-2"),f=(h==null?void 0:h.querySelector(".files-list"))||null,m=[];return f&&f.querySelectorAll(".resource-pill").forEach(v=>{const g=v.dataset.resourceId;g&&m.push(g)}),u(t,m,e),{value:m,errors:a}}else{const p=l.querySelector(`input[name$="${t}"][type="hidden"]`),c=(o=p==null?void 0:p.value)!=null?o:"";return!r&&e.required&&c===""?(a.push(`${t}: ${$("required",n.state)}`),{value:null,errors:a}):{value:c||null,errors:a}}}function de(e,t,n,o){var a;const{scopeRoot:l,state:r}=o;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateFileField: Expected array for multiple file field "${t}", got ${typeof n}`);return}n.forEach(i=>{var s;if(i&&typeof i=="string"&&!r.resourceIndex.has(i)){const u=i.split("/").pop()||"file",p=(s=u.split(".").pop())==null?void 0:s.toLowerCase();let c="application/octet-stream";p&&(["jpg","jpeg","png","gif","webp"].includes(p)?c=`image/${p==="jpg"?"jpeg":p}`:["mp4","webm","mov","avi"].includes(p)&&(c=`video/${p==="mov"?"quicktime":p}`)),r.resourceIndex.set(i,{name:u,type:c,size:0,uploadedAt:new Date,file:void 0})}}),console.info(`updateFileField: Multiple file field "${t}" updated. Preview update requires re-render.`)}else{const i=l.querySelector(`input[name="${t}"][type="hidden"]`);if(!i){console.warn(`updateFileField: Hidden input not found for file field "${t}"`);return}if(i.value=n!=null?String(n):"",n&&typeof n=="string"){if(!r.resourceIndex.has(n)){const s=n.split("/").pop()||"file",u=(a=s.split(".").pop())==null?void 0:a.toLowerCase();let p="application/octet-stream";u&&(["jpg","jpeg","png","gif","webp"].includes(u)?p=`image/${u==="jpg"?"jpeg":u}`:["mp4","webm","mov","avi"].includes(u)&&(p=`video/${u==="mov"?"quicktime":u}`)),r.resourceIndex.set(n,{name:s,type:p,size:0,uploadedAt:new Date,file:void 0})}console.info(`updateFileField: File field "${t}" updated. Preview update requires re-render.`)}}}function q(e){return e?e.toUpperCase():"#000000"}function W(e){return/^#[0-9A-F]{6}$/i.test(e)||/^#[0-9A-F]{3}$/i.test(e)}function pe(e){if(/^#[0-9A-F]{3}$/i.test(e)){const t=e[1],n=e[2],o=e[3];return`#${t}${t}${n}${n}${o}${o}`.toUpperCase()}return e.toUpperCase()}function fe(e){const t=document.createElement("div");t.className="flex items-center gap-2";const n=q(e),o=document.createElement("div");o.style.cssText=`
168
206
  width: 32px;
169
207
  height: 32px;
170
208
  border-radius: var(--fb-border-radius);
@@ -174,11 +212,11 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
174
212
  font-size: var(--fb-font-size);
175
213
  color: var(--fb-text-color);
176
214
  font-family: var(--fb-font-family-mono, monospace);
177
- `,a.textContent=n,t.appendChild(o),t.appendChild(a),t}function ue(e,t,n){const o=T(e),a=document.createElement("div");a.className="colour-picker-wrapper",a.style.cssText=`
215
+ `,a.textContent=n,t.appendChild(o),t.appendChild(a),t}function me(e,t,n){const o=q(e),a=document.createElement("div");a.className="colour-picker-wrapper",a.style.cssText=`
178
216
  display: flex;
179
217
  align-items: center;
180
218
  gap: 8px;
181
- `;const r=document.createElement("div");r.className="colour-swatch",r.style.cssText=`
219
+ `;const l=document.createElement("div");l.className="colour-swatch",l.style.cssText=`
182
220
  width: 40px;
183
221
  height: 40px;
184
222
  border-radius: var(--fb-border-radius);
@@ -187,7 +225,7 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
187
225
  cursor: pointer;
188
226
  transition: border-color var(--fb-transition-duration) ease-in-out;
189
227
  flex-shrink: 0;
190
- `;const l=document.createElement("input");l.type="text",l.className="colour-hex-input",l.name=t,l.value=o,l.placeholder="#000000",l.style.cssText=`
228
+ `;const r=document.createElement("input");r.type="text",r.className="colour-hex-input",r.name=t,r.value=o,r.placeholder="#000000",r.style.cssText=`
191
229
  width: 100px;
192
230
  padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
193
231
  border: var(--fb-border-width) solid var(--fb-border-color);
@@ -197,117 +235,119 @@ var FormBuilder=(function(F){"use strict";function we(e,t){(e.minLength!==null||
197
235
  font-size: var(--fb-font-size);
198
236
  font-family: var(--fb-font-family-mono, monospace);
199
237
  transition: all var(--fb-transition-duration) ease-in-out;
200
- `;const s=document.createElement("input");return s.type="color",s.className="colour-picker-hidden",s.value=o.toLowerCase(),s.style.cssText=`
238
+ `;const i=document.createElement("input");return i.type="color",i.className="colour-picker-hidden",i.value=o.toLowerCase(),i.style.cssText=`
201
239
  position: absolute;
202
240
  opacity: 0;
203
241
  pointer-events: none;
204
- `,l.addEventListener("input",()=>{const i=l.value.trim();if(_(i)){const d=ce(i);r.style.backgroundColor=d,s.value=d.toLowerCase(),l.classList.remove("invalid"),n.instance&&n.instance.triggerOnChange(t,d)}else l.classList.add("invalid")}),l.addEventListener("blur",()=>{const i=l.value.trim();if(_(i)){const d=ce(i);l.value=d,r.style.backgroundColor=d,s.value=d.toLowerCase(),l.classList.remove("invalid")}}),s.addEventListener("change",()=>{const i=T(s.value);l.value=i,r.style.backgroundColor=i,n.instance&&n.instance.triggerOnChange(t,i)}),r.addEventListener("click",()=>{s.click()}),r.addEventListener("mouseenter",()=>{r.style.borderColor="var(--fb-border-hover-color)"}),r.addEventListener("mouseleave",()=>{r.style.borderColor="var(--fb-border-color)"}),l.addEventListener("focus",()=>{l.style.borderColor="var(--fb-border-focus-color)",l.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",l.style.outlineOffset="0"}),l.addEventListener("blur",()=>{l.style.borderColor="var(--fb-border-color)",l.style.outline="none"}),l.addEventListener("mouseenter",()=>{document.activeElement!==l&&(l.style.borderColor="var(--fb-border-hover-color)")}),l.addEventListener("mouseleave",()=>{document.activeElement!==l&&(l.style.borderColor="var(--fb-border-color)")}),a.appendChild(r),a.appendChild(l),a.appendChild(s),a}function at(e,t,n,o){const a=t.state,r=t.prefill[e.key]||e.default||"#000000";if(a.config.readonly){const s=de(r);n.appendChild(s)}else{const s=ue(r,o,t);n.appendChild(s)}const l=document.createElement("p");l.className="mt-1",l.style.cssText=`
205
- font-size: var(--fb-font-size-small);
206
- color: var(--fb-text-secondary-color);
207
- `,l.textContent=S(e),n.appendChild(l)}function it(e,t,n,o){var a,r;const l=t.state,s=t.prefill[e.key]||[],i=Array.isArray(s)?[...s]:[],d=(a=e.minCount)!=null?a:1,u=(r=e.maxCount)!=null?r:1/0;for(;i.length<d;)i.push(e.default||"#000000");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function p(){c.querySelectorAll(".multiple-colour-item").forEach((x,g)=>{const y=x.querySelector("input");y&&(y.name=`${o}[${g}]`)})}function v(x="#000000",g=-1){const y=document.createElement("div");if(y.className="multiple-colour-item flex items-center gap-2",l.config.readonly){const m=de(x);for(;m.firstChild;)y.appendChild(m.firstChild)}else{const m=`${o}[${c.children.length}]`,C=ue(x,m,t);C.style.flex="1",y.appendChild(C)}return g===-1?c.appendChild(y):c.insertBefore(y,c.children[g]),p(),y}function f(){if(l.config.readonly)return;const x=c.querySelectorAll(".multiple-colour-item"),g=x.length;x.forEach(y=>{let m=y.querySelector(".remove-item-btn");m||(m=document.createElement("button"),m.type="button",m.className="remove-item-btn px-2 py-1 rounded",m.style.cssText=`
242
+ `,r.addEventListener("input",()=>{const s=r.value.trim();if(W(s)){const u=pe(s);l.style.backgroundColor=u,i.value=u.toLowerCase(),r.classList.remove("invalid"),n.instance&&n.instance.triggerOnChange(t,u)}else r.classList.add("invalid")}),r.addEventListener("blur",()=>{const s=r.value.trim();if(W(s)){const u=pe(s);r.value=u,l.style.backgroundColor=u,i.value=u.toLowerCase(),r.classList.remove("invalid")}}),i.addEventListener("change",()=>{const s=q(i.value);r.value=s,l.style.backgroundColor=s,n.instance&&n.instance.triggerOnChange(t,s)}),l.addEventListener("click",()=>{i.click()}),l.addEventListener("mouseenter",()=>{l.style.borderColor="var(--fb-border-hover-color)"}),l.addEventListener("mouseleave",()=>{l.style.borderColor="var(--fb-border-color)"}),r.addEventListener("focus",()=>{r.style.borderColor="var(--fb-border-focus-color)",r.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",r.style.outlineOffset="0"}),r.addEventListener("blur",()=>{r.style.borderColor="var(--fb-border-color)",r.style.outline="none"}),r.addEventListener("mouseenter",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-hover-color)")}),r.addEventListener("mouseleave",()=>{document.activeElement!==r&&(r.style.borderColor="var(--fb-border-color)")}),a.appendChild(l),a.appendChild(r),a.appendChild(i),a}function ct(e,t,n,o){const a=t.state,l=t.prefill[e.key]||e.default||"#000000";if(a.config.readonly){const r=fe(l);n.appendChild(r)}else{const r=me(l,o,t);n.appendChild(r)}if(!a.config.readonly){const r=document.createElement("p");r.className="mt-1",r.style.cssText=`
243
+ font-size: var(--fb-font-size-small);
244
+ color: var(--fb-text-secondary-color);
245
+ `,r.textContent=F(e,a),n.appendChild(r)}}function ut(e,t,n,o){var a,l;const r=t.state,i=t.prefill[e.key]||[],s=Array.isArray(i)?[...i]:[],u=(a=e.minCount)!=null?a:1,p=(l=e.maxCount)!=null?l:1/0;for(;s.length<u;)s.push(e.default||"#000000");const c=document.createElement("div");c.className="space-y-2",n.appendChild(c);function h(){c.querySelectorAll(".multiple-colour-item").forEach((d,b)=>{const y=d.querySelector("input");y&&(y.name=`${o}[${b}]`)})}function f(d="#000000",b=-1){const y=document.createElement("div");if(y.className="multiple-colour-item flex items-center gap-2",r.config.readonly){const C=fe(d);for(;C.firstChild;)y.appendChild(C.firstChild)}else{const C=`${o}[${c.children.length}]`,x=me(d,C,t);x.style.flex="1",y.appendChild(x)}return b===-1?c.appendChild(y):c.insertBefore(y,c.children[b]),h(),y}function m(){if(r.config.readonly)return;const d=c.querySelectorAll(".multiple-colour-item"),b=d.length;d.forEach(y=>{let C=y.querySelector(".remove-item-btn");C||(C=document.createElement("button"),C.type="button",C.className="remove-item-btn px-2 py-1 rounded",C.style.cssText=`
208
246
  color: var(--fb-error-color);
209
247
  background-color: transparent;
210
248
  transition: background-color var(--fb-transition-duration);
211
- `,m.innerHTML="\u2715",m.addEventListener("mouseenter",()=>{m.style.backgroundColor="var(--fb-background-hover-color)"}),m.addEventListener("mouseleave",()=>{m.style.backgroundColor="transparent"}),m.onclick=()=>{const E=Array.from(c.children).indexOf(y);c.children.length>d&&(i.splice(E,1),y.remove(),p(),h(),f())},y.appendChild(m));const C=g<=d;m.disabled=C,m.style.opacity=C?"0.5":"1",m.style.pointerEvents=C?"none":"auto"})}function h(){const x=n.querySelector(".add-colour-btn");if(x&&x.remove(),!l.config.readonly&&i.length<u){const g=document.createElement("button");g.type="button",g.className="add-colour-btn mt-2 px-3 py-1 rounded",g.style.cssText=`
212
- color: var(--fb-primary-color);
213
- border: var(--fb-border-width) solid var(--fb-primary-color);
214
- background-color: transparent;
215
- font-size: var(--fb-font-size);
216
- transition: all var(--fb-transition-duration);
217
- `,g.textContent="+",g.addEventListener("mouseenter",()=>{g.style.backgroundColor="var(--fb-background-hover-color)"}),g.addEventListener("mouseleave",()=>{g.style.backgroundColor="transparent"}),g.onclick=()=>{const y=e.default||"#000000";i.push(y),v(y),h(),f()},n.appendChild(g)}}i.forEach(x=>v(x)),h(),f();const b=document.createElement("p");b.className="mt-1",b.style.cssText=`
218
- font-size: var(--fb-font-size-small);
219
- color: var(--fb-text-secondary-color);
220
- `,b.textContent=S(e),n.appendChild(b)}function st(e,t,n){var o,a,r;const l=[],{scopeRoot:s,skipValidation:i}=n,d=(c,p)=>{var v,f;if(!c)return;const h=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let b=document.getElementById(h);p?(c.classList.add("invalid"),c.title=p,b||(b=document.createElement("div"),b.id=h,b.className="error-message",b.style.cssText=`
249
+ `,C.innerHTML="\u2715",C.addEventListener("mouseenter",()=>{C.style.backgroundColor="var(--fb-background-hover-color)"}),C.addEventListener("mouseleave",()=>{C.style.backgroundColor="transparent"}),C.onclick=()=>{const w=Array.from(c.children).indexOf(y);c.children.length>u&&(s.splice(w,1),y.remove(),h(),E(),m())},y.appendChild(C));const x=b<=u;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let v=null,g=null;if(!r.config.readonly){v=document.createElement("div"),v.className="flex items-center gap-3 mt-2";const d=document.createElement("button");d.type="button",d.className="add-colour-btn px-3 py-1 rounded",d.style.cssText=`
250
+ color: var(--fb-primary-color);
251
+ border: var(--fb-border-width) solid var(--fb-primary-color);
252
+ background-color: transparent;
253
+ font-size: var(--fb-font-size);
254
+ transition: all var(--fb-transition-duration);
255
+ `,d.textContent="+",d.addEventListener("mouseenter",()=>{d.style.backgroundColor="var(--fb-background-hover-color)"}),d.addEventListener("mouseleave",()=>{d.style.backgroundColor="transparent"}),d.onclick=()=>{const b=e.default||"#000000";s.push(b),f(b),E(),m()},g=document.createElement("span"),g.className="text-sm text-gray-500",v.appendChild(d),v.appendChild(g),n.appendChild(v)}function E(){if(!v||!g)return;const d=v.querySelector(".add-colour-btn");if(d){const b=s.length>=p;d.disabled=b,d.style.opacity=b?"0.5":"1",d.style.pointerEvents=b?"none":"auto"}g.textContent=`${s.length}/${p===1/0?"\u221E":p}`}if(s.forEach(d=>f(d)),E(),m(),!r.config.readonly){const d=document.createElement("p");d.className="mt-1",d.style.cssText=`
256
+ font-size: var(--fb-font-size-small);
257
+ color: var(--fb-text-secondary-color);
258
+ `,d.textContent=F(e,r),n.appendChild(d)}}function dt(e,t,n){var o,a,l;const r=[],{scopeRoot:i,skipValidation:s}=n,u=(c,h)=>{var f,m;if(!c)return;const v=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(v);h?(c.classList.add("invalid"),c.title=h,g||(g=document.createElement("div"),g.id=v,g.className="error-message",g.style.cssText=`
221
259
  color: var(--fb-error-color);
222
260
  font-size: var(--fb-font-size-small);
223
261
  margin-top: 0.25rem;
224
- `,c.nextSibling?(v=c.parentNode)==null||v.insertBefore(b,c.nextSibling):(f=c.parentNode)==null||f.appendChild(b)),b.textContent=p,b.style.display="block"):(c.classList.remove("invalid"),c.title="",b&&b.remove())},u=(c,p,v)=>{if(!p)return!i&&e.required?(l.push(`${v}: required`),d(c,"required"),""):(d(c,null),"");const f=T(p);return!i&&!_(f)?(l.push(`${v}: invalid hex colour format`),d(c,"invalid hex colour format"),p):(d(c,null),f)};if(e.multiple){const c=s.querySelectorAll(`[name^="${t}["].colour-hex-input`),p=[];if(c.forEach((v,f)=>{var h;const b=(h=v==null?void 0:v.value)!=null?h:"",x=u(v,b,`${t}[${f}]`);p.push(x)}),!i){const v=(o=e.minCount)!=null?o:1,f=(a=e.maxCount)!=null?a:1/0,h=p.filter(b=>b!=="");e.required&&h.length===0&&l.push(`${t}: required`),h.length<v&&l.push(`${t}: minimum ${v} items required`),h.length>f&&l.push(`${t}: maximum ${f} items allowed`)}return{value:p,errors:l}}else{const c=s.querySelector(`[name="${t}"].colour-hex-input`),p=(r=c==null?void 0:c.value)!=null?r:"";return!i&&e.required&&p===""?(l.push(`${t}: required`),d(c,"required"),{value:"",errors:l}):{value:u(c,p,t),errors:l}}}function ct(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateColourField: Expected array for multiple field "${t}", got ${typeof n}`);return}const r=a.querySelectorAll(`[name^="${t}["].colour-hex-input`);r.forEach((l,s)=>{if(s<n.length){const i=T(n[s]);l.value=i,l.classList.remove("invalid"),l.title="";const d=l.closest(".colour-picker-wrapper");if(d){const u=d.querySelector(".colour-swatch"),c=d.querySelector(".colour-picker-hidden");u&&(u.style.backgroundColor=i),c&&(c.value=i.toLowerCase())}}}),n.length!==r.length&&console.warn(`updateColourField: Multiple field "${t}" has ${r.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const r=a.querySelector(`[name="${t}"].colour-hex-input`);if(r){const l=T(n);r.value=l,r.classList.remove("invalid"),r.title="";const s=r.closest(".colour-picker-wrapper");if(s){const i=s.querySelector(".colour-swatch"),d=s.querySelector(".colour-picker-hidden");i&&(i.style.backgroundColor=l),d&&(d.value=l.toLowerCase())}}}}function fe(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const o=Math.log(t),a=Math.log(n);return Math.exp(o+e*(a-o))}function W(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const o=Math.log(t),a=Math.log(n);return(Math.log(e)-o)/(a-o)}function B(e,t){return Math.round(e/t)*t}function pe(e,t,n,o,a){var r;const l=document.createElement("div");l.className="slider-container space-y-2";const s=document.createElement("div");s.className="flex items-center gap-3";const i=document.createElement("input");i.type="range",i.name=t,i.className="slider-input flex-1",i.disabled=a;const d=n.scale||"linear",u=n.min,c=n.max,p=(r=n.step)!=null?r:1;if(d==="exponential"){if(u<=0)throw new Error(`Slider "${n.key}": exponential scale requires min > 0 (got ${u})`);i.min="0",i.max="1000",i.step="1";const x=W(e,u,c);i.value=(x*1e3).toString()}else i.min=u.toString(),i.max=c.toString(),i.step=p.toString(),i.value=e.toString();i.style.cssText=`
262
+ `,c.nextSibling?(f=c.parentNode)==null||f.insertBefore(g,c.nextSibling):(m=c.parentNode)==null||m.appendChild(g)),g.textContent=h,g.style.display="block"):(c.classList.remove("invalid"),c.title="",g&&g.remove())},p=(c,h,f)=>{const{state:m}=n;if(!h){if(!s&&e.required){const g=$("required",m);return r.push(`${f}: ${g}`),u(c,g),""}return u(c,null),""}const v=q(h);if(!s&&!W(v)){const g=$("invalidHexColour",m);return r.push(`${f}: ${g}`),u(c,g),h}return u(c,null),v};if(e.multiple){const c=i.querySelectorAll(`[name^="${t}["].colour-hex-input`),h=[];if(c.forEach((f,m)=>{var v;const g=(v=f==null?void 0:f.value)!=null?v:"",E=p(f,g,`${t}[${m}]`);h.push(E)}),!s){const{state:f}=n,m=(o=e.minCount)!=null?o:1,v=(a=e.maxCount)!=null?a:1/0,g=h.filter(E=>E!=="");e.required&&g.length===0&&r.push(`${t}: ${$("required",f)}`),g.length<m&&r.push(`${t}: ${$("minItems",f,{min:m})}`),g.length>v&&r.push(`${t}: ${$("maxItems",f,{max:v})}`)}return{value:h,errors:r}}else{const c=i.querySelector(`[name="${t}"].colour-hex-input`),h=(l=c==null?void 0:c.value)!=null?l:"";if(!s&&e.required&&h===""){const f=$("required",n.state);return r.push(`${t}: ${f}`),u(c,f),{value:"",errors:r}}return{value:p(c,h,t),errors:r}}}function pt(e,t,n,o){const{scopeRoot:a}=o;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateColourField: Expected array for multiple field "${t}", got ${typeof n}`);return}const l=a.querySelectorAll(`[name^="${t}["].colour-hex-input`);l.forEach((r,i)=>{if(i<n.length){const s=q(n[i]);r.value=s,r.classList.remove("invalid"),r.title="";const u=r.closest(".colour-picker-wrapper");if(u){const p=u.querySelector(".colour-swatch"),c=u.querySelector(".colour-picker-hidden");p&&(p.style.backgroundColor=s),c&&(c.value=s.toLowerCase())}}}),n.length!==l.length&&console.warn(`updateColourField: Multiple field "${t}" has ${l.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const l=a.querySelector(`[name="${t}"].colour-hex-input`);if(l){const r=q(n);l.value=r,l.classList.remove("invalid"),l.title="";const i=l.closest(".colour-picker-wrapper");if(i){const s=i.querySelector(".colour-swatch"),u=i.querySelector(".colour-picker-hidden");s&&(s.style.backgroundColor=r),u&&(u.value=r.toLowerCase())}}}}function he(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const o=Math.log(t),a=Math.log(n);return Math.exp(o+e*(a-o))}function J(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const o=Math.log(t),a=Math.log(n);return(Math.log(e)-o)/(a-o)}function R(e,t){return Math.round(e/t)*t}function ve(e,t,n,o,a){var l;const r=document.createElement("div");r.className="slider-container";const i=document.createElement("div");i.className="flex items-start gap-3";const s=document.createElement("div");s.className="flex-1";const u=document.createElement("input");u.type="range",u.name=t,u.className="slider-input w-full",u.disabled=a;const p=n.scale||"linear",c=n.min,h=n.max,f=(l=n.step)!=null?l:1;if(p==="exponential"){if(c<=0)throw new Error(`Slider "${n.key}": exponential scale requires min > 0 (got ${c})`);u.min="0",u.max="1000",u.step="1";const d=J(e,c,h);u.value=(d*1e3).toString()}else u.min=c.toString(),u.max=h.toString(),u.step=f.toString(),u.value=e.toString();u.style.cssText=`
225
263
  height: 6px;
226
264
  border-radius: 3px;
227
265
  background: linear-gradient(
228
266
  to right,
229
267
  var(--fb-primary-color) 0%,
230
- var(--fb-primary-color) ${(e-u)/(c-u)*100}%,
231
- var(--fb-border-color) ${(e-u)/(c-u)*100}%,
268
+ var(--fb-primary-color) ${(e-c)/(h-c)*100}%,
269
+ var(--fb-border-color) ${(e-c)/(h-c)*100}%,
232
270
  var(--fb-border-color) 100%
233
271
  );
234
272
  outline: none;
235
273
  transition: background 0.1s ease-in-out;
236
274
  cursor: ${a?"not-allowed":"pointer"};
237
275
  opacity: ${a?"0.6":"1"};
238
- `;const v=document.createElement("span");v.className="slider-value",v.style.cssText=`
276
+ `,s.appendChild(u);const m=document.createElement("div");m.className="flex justify-between",m.style.cssText=`
277
+ font-size: var(--fb-font-size-small);
278
+ color: var(--fb-text-secondary-color);
279
+ margin-top: 4px;
280
+ `;const v=document.createElement("span");v.textContent=c.toString();const g=document.createElement("span");g.textContent=h.toString(),m.appendChild(v),m.appendChild(g),s.appendChild(m);const E=document.createElement("span");if(E.className="slider-value",E.style.cssText=`
239
281
  min-width: 60px;
240
282
  text-align: right;
241
283
  font-size: var(--fb-font-size);
242
284
  color: var(--fb-text-color);
243
285
  font-family: var(--fb-font-family-mono, monospace);
244
286
  font-weight: 500;
245
- `,v.textContent=e.toFixed(p<1?2:0),s.appendChild(i),s.appendChild(v),l.appendChild(s);const f=document.createElement("div");f.className="flex justify-between",f.style.cssText=`
246
- font-size: var(--fb-font-size-small);
247
- color: var(--fb-text-secondary-color);
248
- `;const h=document.createElement("span");h.textContent=u.toString();const b=document.createElement("span");if(b.textContent=c.toString(),f.appendChild(h),f.appendChild(b),l.appendChild(f),!a){const x=()=>{let g;if(d==="exponential"){const m=parseFloat(i.value)/1e3;g=fe(m,u,c),g=B(g,p),g=Math.max(u,Math.min(c,g))}else g=parseFloat(i.value),g=B(g,p);v.textContent=g.toFixed(p<1?2:0);const y=(g-u)/(c-u)*100;i.style.background=`linear-gradient(
287
+ padding-top: 2px;
288
+ `,E.textContent=e.toFixed(f<1?2:0),i.appendChild(s),i.appendChild(E),r.appendChild(i),!a){const d=()=>{let b;if(p==="exponential"){const C=parseFloat(u.value)/1e3;b=he(C,c,h),b=R(b,f),b=Math.max(c,Math.min(h,b))}else b=parseFloat(u.value),b=R(b,f);E.textContent=b.toFixed(f<1?2:0);const y=(b-c)/(h-c)*100;u.style.background=`linear-gradient(
249
289
  to right,
250
290
  var(--fb-primary-color) 0%,
251
291
  var(--fb-primary-color) ${y}%,
252
292
  var(--fb-border-color) ${y}%,
253
293
  var(--fb-border-color) 100%
254
- )`,o.instance&&o.instance.triggerOnChange(t,g)};i.addEventListener("input",x),i.addEventListener("change",x)}return l}function dt(e,t,n,o){var a;if(e.min===void 0||e.min===null)throw new Error(`Slider field "${e.key}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider field "${e.key}" requires "max" property`);if(e.min>=e.max)throw new Error(`Slider field "${e.key}": min (${e.min}) must be less than max (${e.max})`);const r=t.state,l=e.default!==void 0?e.default:(e.min+e.max)/2,s=(a=t.prefill[e.key])!=null?a:l,i=pe(s,o,e,t,r.config.readonly);n.appendChild(i);const d=document.createElement("p");d.className="mt-1",d.style.cssText=`
255
- font-size: var(--fb-font-size-small);
256
- color: var(--fb-text-secondary-color);
257
- `,d.textContent=S(e),n.appendChild(d)}function ut(e,t,n,o){var a,r;if(e.min===void 0||e.min===null)throw new Error(`Slider field "${e.key}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider field "${e.key}" requires "max" property`);if(e.min>=e.max)throw new Error(`Slider field "${e.key}": min (${e.min}) must be less than max (${e.max})`);const l=t.state,s=t.prefill[e.key]||[],i=Array.isArray(s)?[...s]:[],d=(a=e.minCount)!=null?a:1,u=(r=e.maxCount)!=null?r:1/0,c=e.default!==void 0?e.default:(e.min+e.max)/2;for(;i.length<d;)i.push(c);const p=document.createElement("div");p.className="space-y-3",n.appendChild(p);function v(){p.querySelectorAll(".multiple-slider-item").forEach((g,y)=>{const m=g.querySelector("input[type=range]");m&&m.setAttribute("name",`${o}[${y}]`)})}function f(g=c,y=-1){const m=document.createElement("div");m.className="multiple-slider-item flex items-start gap-2";const C=`${o}[${p.children.length}]`,E=pe(g,C,e,t,l.config.readonly);return E.style.flex="1",m.appendChild(E),y===-1?p.appendChild(m):p.insertBefore(m,p.children[y]),v(),m}function h(){if(l.config.readonly)return;const g=p.querySelectorAll(".multiple-slider-item"),y=g.length;g.forEach(m=>{let C=m.querySelector(".remove-item-btn");C||(C=document.createElement("button"),C.type="button",C.className="remove-item-btn px-2 py-1 rounded",C.style.cssText=`
294
+ )`,o.instance&&o.instance.triggerOnChange(t,b)};u.addEventListener("input",d),u.addEventListener("change",d)}return r}function ft(e,t,n,o){var a;if(e.min===void 0||e.min===null)throw new Error(`Slider field "${e.key}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider field "${e.key}" requires "max" property`);if(e.min>=e.max)throw new Error(`Slider field "${e.key}": min (${e.min}) must be less than max (${e.max})`);const l=t.state,r=e.default!==void 0?e.default:(e.min+e.max)/2,i=(a=t.prefill[e.key])!=null?a:r,s=ve(i,o,e,t,l.config.readonly);if(n.appendChild(s),!l.config.readonly){const u=document.createElement("p");u.className="mt-1",u.style.cssText=`
295
+ font-size: var(--fb-font-size-small);
296
+ color: var(--fb-text-secondary-color);
297
+ `,u.textContent=F(e,l),n.appendChild(u)}}function mt(e,t,n,o){var a,l;if(e.min===void 0||e.min===null)throw new Error(`Slider field "${e.key}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider field "${e.key}" requires "max" property`);if(e.min>=e.max)throw new Error(`Slider field "${e.key}": min (${e.min}) must be less than max (${e.max})`);const r=t.state,i=t.prefill[e.key]||[],s=Array.isArray(i)?[...i]:[],u=(a=e.minCount)!=null?a:1,p=(l=e.maxCount)!=null?l:1/0,c=e.default!==void 0?e.default:(e.min+e.max)/2;for(;s.length<u;)s.push(c);const h=document.createElement("div");h.className="space-y-3",n.appendChild(h);function f(){h.querySelectorAll(".multiple-slider-item").forEach((b,y)=>{const C=b.querySelector("input[type=range]");C&&C.setAttribute("name",`${o}[${y}]`)})}function m(b=c,y=-1){const C=document.createElement("div");C.className="multiple-slider-item flex items-start gap-2";const x=`${o}[${h.children.length}]`,w=ve(b,x,e,t,r.config.readonly);return w.style.flex="1",C.appendChild(w),y===-1?h.appendChild(C):h.insertBefore(C,h.children[y]),f(),C}function v(){if(r.config.readonly)return;const b=h.querySelectorAll(".multiple-slider-item"),y=b.length;b.forEach(C=>{let x=C.querySelector(".remove-item-btn");x||(x=document.createElement("button"),x.type="button",x.className="remove-item-btn px-2 py-1 rounded",x.style.cssText=`
258
298
  color: var(--fb-error-color);
259
299
  background-color: transparent;
260
300
  transition: background-color var(--fb-transition-duration);
261
301
  margin-top: 8px;
262
- `,C.innerHTML="\u2715",C.addEventListener("mouseenter",()=>{C.style.backgroundColor="var(--fb-background-hover-color)"}),C.addEventListener("mouseleave",()=>{C.style.backgroundColor="transparent"}),C.onclick=()=>{const $=Array.from(p.children).indexOf(m);p.children.length>d&&(i.splice($,1),m.remove(),v(),b(),h())},m.appendChild(C));const E=y<=d;C.disabled=E,C.style.opacity=E?"0.5":"1",C.style.pointerEvents=E?"none":"auto"})}function b(){const g=n.querySelector(".add-slider-btn");if(g&&g.remove(),!l.config.readonly&&i.length<u){const y=document.createElement("button");y.type="button",y.className="add-slider-btn mt-2 px-3 py-1 rounded",y.style.cssText=`
263
- color: var(--fb-primary-color);
264
- border: var(--fb-border-width) solid var(--fb-primary-color);
265
- background-color: transparent;
266
- font-size: var(--fb-font-size);
267
- transition: all var(--fb-transition-duration);
268
- `,y.textContent="+",y.addEventListener("mouseenter",()=>{y.style.backgroundColor="var(--fb-background-hover-color)"}),y.addEventListener("mouseleave",()=>{y.style.backgroundColor="transparent"}),y.onclick=()=>{i.push(c),f(c),b(),h()},n.appendChild(y)}}i.forEach(g=>f(g)),b(),h();const x=document.createElement("p");x.className="mt-1",x.style.cssText=`
269
- font-size: var(--fb-font-size-small);
270
- color: var(--fb-text-secondary-color);
271
- `,x.textContent=S(e),n.appendChild(x)}function ft(e,t,n){var o,a,r;const l=[],{scopeRoot:s,skipValidation:i}=n;if(e.min===void 0||e.min===null)throw new Error(`Slider validation: field "${t}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider validation: field "${t}" requires "max" property`);const d=e.min,u=e.max,c=(o=e.step)!=null?o:1,p=e.scale||"linear",v=(h,b)=>{var x,g;if(!h)return;const y=`error-${h.getAttribute("name")||Math.random().toString(36).substring(7)}`;let m=document.getElementById(y);if(b){if(h.classList.add("invalid"),h.title=b,!m){m=document.createElement("div"),m.id=y,m.className="error-message",m.style.cssText=`
302
+ `,x.innerHTML="\u2715",x.addEventListener("mouseenter",()=>{x.style.backgroundColor="var(--fb-background-hover-color)"}),x.addEventListener("mouseleave",()=>{x.style.backgroundColor="transparent"}),x.onclick=()=>{const S=Array.from(h.children).indexOf(C);h.children.length>u&&(s.splice(S,1),C.remove(),f(),d(),v())},C.appendChild(x));const w=y<=u;x.disabled=w,x.style.opacity=w?"0.5":"1",x.style.pointerEvents=w?"none":"auto"})}let g=null,E=null;if(!r.config.readonly){g=document.createElement("div"),g.className="flex items-center gap-3 mt-2";const b=document.createElement("button");b.type="button",b.className="add-slider-btn px-3 py-1 rounded",b.style.cssText=`
303
+ color: var(--fb-primary-color);
304
+ border: var(--fb-border-width) solid var(--fb-primary-color);
305
+ background-color: transparent;
306
+ font-size: var(--fb-font-size);
307
+ transition: all var(--fb-transition-duration);
308
+ `,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{s.push(c),m(c),d(),v()},E=document.createElement("span"),E.className="text-sm text-gray-500",g.appendChild(b),g.appendChild(E),n.appendChild(g)}function d(){if(!g||!E)return;const b=g.querySelector(".add-slider-btn");if(b){const y=s.length>=p;b.disabled=y,b.style.opacity=y?"0.5":"1",b.style.pointerEvents=y?"none":"auto"}E.textContent=`${s.length}/${p===1/0?"\u221E":p}`}if(s.forEach(b=>m(b)),d(),v(),!r.config.readonly){const b=document.createElement("p");b.className="mt-1",b.style.cssText=`
309
+ font-size: var(--fb-font-size-small);
310
+ color: var(--fb-text-secondary-color);
311
+ `,b.textContent=F(e,r),n.appendChild(b)}}function ht(e,t,n){var o,a,l;const r=[],{scopeRoot:i,skipValidation:s}=n;if(e.min===void 0||e.min===null)throw new Error(`Slider validation: field "${t}" requires "min" property`);if(e.max===void 0||e.max===null)throw new Error(`Slider validation: field "${t}" requires "max" property`);const u=e.min,p=e.max,c=(o=e.step)!=null?o:1,h=e.scale||"linear",f=(v,g)=>{var E,d;if(!v)return;const b=`error-${v.getAttribute("name")||Math.random().toString(36).substring(7)}`;let y=document.getElementById(b);if(g){if(v.classList.add("invalid"),v.title=g,!y){y=document.createElement("div"),y.id=b,y.className="error-message",y.style.cssText=`
272
312
  color: var(--fb-error-color);
273
313
  font-size: var(--fb-font-size-small);
274
314
  margin-top: 0.25rem;
275
- `;const C=h.closest(".slider-container");C&&C.nextSibling?(x=C.parentNode)==null||x.insertBefore(m,C.nextSibling):C&&((g=C.parentNode)==null||g.appendChild(m))}m.textContent=b,m.style.display="block"}else h.classList.remove("invalid"),h.title="",m&&m.remove()},f=(h,b)=>{const x=h.value;if(!x)return!i&&e.required?(l.push(`${b}: required`),v(h,"required"),null):(v(h,null),null);let g;if(p==="exponential"){const y=parseFloat(x)/1e3;g=fe(y,d,u),g=B(g,c)}else g=parseFloat(x),g=B(g,c);if(!i){if(g<d)return l.push(`${b}: value ${g} < min ${d}`),v(h,`value must be >= ${d}`),g;if(g>u)return l.push(`${b}: value ${g} > max ${u}`),v(h,`value must be <= ${u}`),g}return v(h,null),g};if(e.multiple){const h=s.querySelectorAll(`input[type="range"][name^="${t}["]`),b=[];if(h.forEach((x,g)=>{const y=f(x,`${t}[${g}]`);b.push(y)}),!i){const x=(a=e.minCount)!=null?a:1,g=(r=e.maxCount)!=null?r:1/0,y=b.filter(m=>m!==null);e.required&&y.length===0&&l.push(`${t}: required`),y.length<x&&l.push(`${t}: minimum ${x} items required`),y.length>g&&l.push(`${t}: maximum ${g} items allowed`)}return{value:b,errors:l}}else{const h=s.querySelector(`input[type="range"][name="${t}"]`);return h?{value:f(h,t),errors:l}:(!i&&e.required&&l.push(`${t}: required`),{value:null,errors:l})}}function pt(e,t,n,o){var a;const{scopeRoot:r}=o,l=e.min,s=e.max,i=(a=e.step)!=null?a:1,d=e.scale||"linear";if(e.multiple){if(!Array.isArray(n)){console.warn(`updateSliderField: Expected array for multiple field "${t}", got ${typeof n}`);return}const u=r.querySelectorAll(`input[type="range"][name^="${t}["]`);u.forEach((c,p)=>{if(p<n.length&&n[p]!==null){const v=Number(n[p]);if(d==="exponential"){const h=W(v,l,s);c.value=(h*1e3).toString()}else c.value=v.toString();const f=c.closest(".slider-container");if(f){const h=f.querySelector(".slider-value");h&&(h.textContent=v.toFixed(i<1?2:0));const b=(v-l)/(s-l)*100;c.style.background=`linear-gradient(
315
+ `;const C=v.closest(".slider-container");C&&C.nextSibling?(E=C.parentNode)==null||E.insertBefore(y,C.nextSibling):C&&((d=C.parentNode)==null||d.appendChild(y))}y.textContent=g,y.style.display="block"}else v.classList.remove("invalid"),v.title="",y&&y.remove()},m=(v,g)=>{const{state:E}=n,d=v.value;if(!d){if(!s&&e.required){const y=$("required",E);return r.push(`${g}: ${y}`),f(v,y),null}return f(v,null),null}let b;if(h==="exponential"){const y=parseFloat(d)/1e3;b=he(y,u,p),b=R(b,c)}else b=parseFloat(d),b=R(b,c);if(!s){if(b<u){const y=$("minValue",E,{min:u});return r.push(`${g}: ${y}`),f(v,y),b}if(b>p){const y=$("maxValue",E,{max:p});return r.push(`${g}: ${y}`),f(v,y),b}}return f(v,null),b};if(e.multiple){const v=i.querySelectorAll(`input[type="range"][name^="${t}["]`),g=[];if(v.forEach((E,d)=>{const b=m(E,`${t}[${d}]`);g.push(b)}),!s){const{state:E}=n,d=(a=e.minCount)!=null?a:1,b=(l=e.maxCount)!=null?l:1/0,y=g.filter(C=>C!==null);e.required&&y.length===0&&r.push(`${t}: ${$("required",E)}`),y.length<d&&r.push(`${t}: ${$("minItems",E,{min:d})}`),y.length>b&&r.push(`${t}: ${$("maxItems",E,{max:b})}`)}return{value:g,errors:r}}else{const v=i.querySelector(`input[type="range"][name="${t}"]`);return v?{value:m(v,t),errors:r}:(!s&&e.required&&r.push(`${t}: ${$("required",n.state)}`),{value:null,errors:r})}}function vt(e,t,n,o){var a;const{scopeRoot:l}=o,r=e.min,i=e.max,s=(a=e.step)!=null?a:1,u=e.scale||"linear";if(e.multiple){if(!Array.isArray(n)){console.warn(`updateSliderField: Expected array for multiple field "${t}", got ${typeof n}`);return}const p=l.querySelectorAll(`input[type="range"][name^="${t}["]`);p.forEach((c,h)=>{if(h<n.length&&n[h]!==null){const f=Number(n[h]);if(u==="exponential"){const v=J(f,r,i);c.value=(v*1e3).toString()}else c.value=f.toString();const m=c.closest(".slider-container");if(m){const v=m.querySelector(".slider-value");v&&(v.textContent=f.toFixed(s<1?2:0));const g=(f-r)/(i-r)*100;c.style.background=`linear-gradient(
276
316
  to right,
277
317
  var(--fb-primary-color) 0%,
278
- var(--fb-primary-color) ${b}%,
279
- var(--fb-border-color) ${b}%,
318
+ var(--fb-primary-color) ${g}%,
319
+ var(--fb-border-color) ${g}%,
280
320
  var(--fb-border-color) 100%
281
- )`}c.classList.remove("invalid"),c.title=""}}),n.length!==u.length&&console.warn(`updateSliderField: Multiple field "${t}" has ${u.length} sliders but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const u=r.querySelector(`input[type="range"][name="${t}"]`);if(u&&n!==null&&n!==void 0){const c=Number(n);if(d==="exponential"){const v=W(c,l,s);u.value=(v*1e3).toString()}else u.value=c.toString();const p=u.closest(".slider-container");if(p){const v=p.querySelector(".slider-value");v&&(v.textContent=c.toFixed(i<1?2:0));const f=(c-l)/(s-l)*100;u.style.background=`linear-gradient(
321
+ )`}c.classList.remove("invalid"),c.title=""}}),n.length!==p.length&&console.warn(`updateSliderField: Multiple field "${t}" has ${p.length} sliders but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const p=l.querySelector(`input[type="range"][name="${t}"]`);if(p&&n!==null&&n!==void 0){const c=Number(n);if(u==="exponential"){const f=J(c,r,i);p.value=(f*1e3).toString()}else p.value=c.toString();const h=p.closest(".slider-container");if(h){const f=h.querySelector(".slider-value");f&&(f.textContent=c.toFixed(s<1?2:0));const m=(c-r)/(i-r)*100;p.style.background=`linear-gradient(
282
322
  to right,
283
323
  var(--fb-primary-color) 0%,
284
- var(--fb-primary-color) ${f}%,
285
- var(--fb-border-color) ${f}%,
324
+ var(--fb-primary-color) ${m}%,
325
+ var(--fb-border-color) ${m}%,
286
326
  var(--fb-border-color) 100%
287
- )`}u.classList.remove("invalid"),u.title=""}}}function J(e){const t={};return e.querySelectorAll("input, select, textarea").forEach(n=>{const o=n.getAttribute("name");o&&!o.includes("[")&&!o.includes(".")&&(n instanceof HTMLSelectElement?t[o]=n.value:n instanceof HTMLInputElement?n.type==="checkbox"?t[o]=n.checked:n.type==="radio"?n.checked&&(t[o]=n.value):t[o]=n.value:n instanceof HTMLTextAreaElement&&(t[o]=n.value))}),t}let Y=null;function mt(e){Y=e}function j(e,t){if(!Y)throw new Error("renderElement not initialized. Import from components/index.ts");return Y(e,t)}function me(e,t){if(!e.prefillHints||e.prefillHints.length===0)return null;const n=document.createElement("div");return n.className="fb-prefill-hints flex flex-wrap gap-2 mb-4",e.prefillHints.forEach((o,a)=>{const r=document.createElement("button");r.type="button",r.className="fb-prefill-hint",r.textContent=o.label,r.setAttribute("data-hint-values",JSON.stringify(o.values)),r.setAttribute("data-container-key",t),r.setAttribute("data-hint-index",String(a)),n.appendChild(r)}),n}function ve(e,t,n,o){var a,r;const l=document.createElement("div");l.className="border border-gray-200 rounded-lg p-4 bg-gray-50",l.setAttribute("data-container",o);const s=document.createElement("div");s.className="flex justify-between items-center mb-4";const i=document.createElement("div");i.className="flex-1";const d=document.createElement("div"),u=e.columns||1;if(u===1?d.className="space-y-4":d.className=`grid grid-cols-${u} gap-4`,l.appendChild(s),s.appendChild(i),!t.state.config.readonly){const p=me(e,o);p&&l.appendChild(p)}const c={path:q(t.path,e.key),prefill:((a=t.prefill)==null?void 0:a[e.key])||{},formData:(r=t.formData)!=null?r:t.prefill,state:t.state};e.elements.forEach(p=>{p.hidden||d.appendChild(j(p,c))}),l.appendChild(d),i.innerHTML=`<span>${e.label||e.key}</span>`,n.appendChild(l)}function he(e,t,n,o){var a,r,l,s;const i=t.state,d=document.createElement("div");d.className="border border-gray-200 rounded-lg p-4 bg-gray-50";const u=document.createElement("div");u.className="flex justify-between items-center mb-4";const c=document.createElement("div");c.className="flex-1";const p=document.createElement("div");if(p.className="space-y-4",d.appendChild(u),u.appendChild(c),!t.state.config.readonly){const y=me(e,e.key);y&&d.appendChild(y)}const v=(a=e.minCount)!=null?a:0,f=(r=e.maxCount)!=null?r:1/0,h=Array.isArray((l=t.prefill)==null?void 0:l[e.key])?t.prefill[e.key]:null,b=()=>p.querySelectorAll(":scope > .containerItem").length,x=()=>{const y=document.createElement("button");return y.type="button",y.className="add-container-btn mt-2 px-3 py-1 rounded",y.style.cssText=`
327
+ )`}p.classList.remove("invalid"),p.title=""}}}function Y(e){const t={};return e.querySelectorAll("input, select, textarea").forEach(n=>{const o=n.getAttribute("name");o&&!o.includes("[")&&!o.includes(".")&&(n instanceof HTMLSelectElement?t[o]=n.value:n instanceof HTMLInputElement?n.type==="checkbox"?t[o]=n.checked:n.type==="radio"?n.checked&&(t[o]=n.value):t[o]=n.value:n instanceof HTMLTextAreaElement&&(t[o]=n.value))}),t}let G=null;function gt(e){G=e}function D(e,t){if(!G)throw new Error("renderElement not initialized. Import from components/index.ts");return G(e,t)}function ge(e,t){if(!e.prefillHints||e.prefillHints.length===0)return null;const n=document.createElement("div");return n.className="fb-prefill-hints flex flex-wrap gap-2 mb-4",e.prefillHints.forEach((o,a)=>{const l=document.createElement("button");l.type="button",l.className="fb-prefill-hint",l.textContent=o.label,l.setAttribute("data-hint-values",JSON.stringify(o.values)),l.setAttribute("data-container-key",t),l.setAttribute("data-hint-index",String(a)),n.appendChild(l)}),n}function ye(e,t,n,o){var a,l;const r=document.createElement("div");r.className="border border-gray-200 rounded-lg p-4 bg-gray-50",r.setAttribute("data-container",o);const i=document.createElement("div"),s=e.columns||1;if(s===1?i.className="space-y-4":i.className=`grid grid-cols-${s} gap-4`,!t.state.config.readonly){const p=ge(e,o);p&&r.appendChild(p)}const u={path:A(t.path,e.key),prefill:((a=t.prefill)==null?void 0:a[e.key])||{},formData:(l=t.formData)!=null?l:t.prefill,state:t.state};e.elements.forEach(p=>{p.hidden||i.appendChild(D(p,u))}),r.appendChild(i),n.appendChild(r)}function be(e,t,n,o){var a,l,r,i;const s=t.state,u=document.createElement("div");u.className="border border-gray-200 rounded-lg p-4 bg-gray-50";const p=document.createElement("span");p.className="text-sm text-gray-500";const c=document.createElement("div");if(c.className="space-y-4",!t.state.config.readonly){const d=ge(e,e.key);d&&u.appendChild(d)}const h=(a=e.minCount)!=null?a:0,f=(l=e.maxCount)!=null?l:1/0,m=Array.isArray((r=t.prefill)==null?void 0:r[e.key])?t.prefill[e.key]:null,v=()=>c.querySelectorAll(":scope > .containerItem").length,g=()=>{const d=document.createElement("button");return d.type="button",d.className="add-container-btn px-3 py-1 rounded",d.style.cssText=`
288
328
  color: var(--fb-primary-color);
289
329
  border: var(--fb-border-width) solid var(--fb-primary-color);
290
330
  background-color: transparent;
291
331
  font-size: var(--fb-font-size);
292
332
  transition: all var(--fb-transition-duration);
293
- `,y.textContent="+",y.addEventListener("mouseenter",()=>{y.style.backgroundColor="var(--fb-background-hover-color)"}),y.addEventListener("mouseleave",()=>{y.style.backgroundColor="transparent"}),y.onclick=()=>{if(b()<f){const m=b(),C=i.formRoot?J(i.formRoot):{},E={state:t.state,path:q(t.path,`${e.key}[${m}]`),prefill:{},formData:C},$=document.createElement("div");$.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",$.setAttribute("data-container-item",`${e.key}[${m}]`);const w=document.createElement("div"),N=e.columns||1;if(N===1?w.className="space-y-4":w.className=`grid grid-cols-${N} gap-4`,e.elements.forEach(k=>{k.hidden||w.appendChild(j(k,E))}),$.appendChild(w),!i.config.readonly){const k=document.createElement("button");k.type="button",k.className="absolute top-2 right-2 px-2 py-1 rounded",k.style.cssText=`
333
+ `,d.textContent="+",d.addEventListener("mouseenter",()=>{d.style.backgroundColor="var(--fb-background-hover-color)"}),d.addEventListener("mouseleave",()=>{d.style.backgroundColor="transparent"}),d.onclick=()=>{if(v()<f){const b=v(),y=s.formRoot?Y(s.formRoot):{},C={state:t.state,path:A(t.path,`${e.key}[${b}]`),prefill:{},formData:y},x=document.createElement("div");x.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",x.setAttribute("data-container-item",`${e.key}[${b}]`);const w=document.createElement("div"),S=e.columns||1;if(S===1?w.className="space-y-4":w.className=`grid grid-cols-${S} gap-4`,e.elements.forEach(k=>{k.hidden||w.appendChild(D(k,C))}),x.appendChild(w),!s.config.readonly){const k=document.createElement("button");k.type="button",k.className="absolute top-2 right-2 px-2 py-1 rounded",k.style.cssText=`
294
334
  color: var(--fb-error-color);
295
335
  background-color: transparent;
296
336
  transition: background-color var(--fb-transition-duration);
297
- `,k.textContent="\u2715",k.addEventListener("mouseenter",()=>{k.style.backgroundColor="var(--fb-background-hover-color)"}),k.addEventListener("mouseleave",()=>{k.style.backgroundColor="transparent"}),k.onclick=()=>{$.remove(),g()},$.style.position="relative",$.appendChild(k)}p.appendChild($),g()}},y},g=()=>{const y=b(),m=d.querySelector(".add-container-btn");m&&(m.disabled=y>=f,m.style.opacity=y>=f?"0.5":"1",m.style.pointerEvents=y>=f?"none":"auto"),c.innerHTML=`<span>${e.label||e.key}</span> <span class="text-sm text-gray-500">(${y}/${f===1/0?"\u221E":f})</span>`};if(h&&Array.isArray(h)&&h.forEach((y,m)=>{var C;const E={state:t.state,path:q(t.path,`${e.key}[${m}]`),prefill:y||{},formData:(C=t.formData)!=null?C:t.prefill},$=document.createElement("div");$.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",$.setAttribute("data-container-item",`${e.key}[${m}]`);const w=document.createElement("div"),N=e.columns||1;if(N===1?w.className="space-y-4":w.className=`grid grid-cols-${N} gap-4`,e.elements.forEach(k=>{k.hidden||w.appendChild(j(k,E))}),$.appendChild(w),!i.config.readonly){const k=document.createElement("button");k.type="button",k.className="absolute top-2 right-2 px-2 py-1 rounded",k.style.cssText=`
337
+ `,k.textContent="\u2715",k.addEventListener("mouseenter",()=>{k.style.backgroundColor="var(--fb-background-hover-color)"}),k.addEventListener("mouseleave",()=>{k.style.backgroundColor="transparent"}),k.onclick=()=>{x.remove(),E()},x.style.position="relative",x.appendChild(k)}c.appendChild(x),E()}},d},E=()=>{const d=v(),b=u.querySelector(".add-container-btn");b&&(b.disabled=d>=f,b.style.opacity=d>=f?"0.5":"1",b.style.pointerEvents=d>=f?"none":"auto"),p.textContent=`${d}/${f===1/0?"\u221E":f}`};if(m&&Array.isArray(m)&&m.forEach((d,b)=>{var y;const C={state:t.state,path:A(t.path,`${e.key}[${b}]`),prefill:d||{},formData:(y=t.formData)!=null?y:t.prefill},x=document.createElement("div");x.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",x.setAttribute("data-container-item",`${e.key}[${b}]`);const w=document.createElement("div"),S=e.columns||1;if(S===1?w.className="space-y-4":w.className=`grid grid-cols-${S} gap-4`,e.elements.forEach(k=>{k.hidden||w.appendChild(D(k,C))}),x.appendChild(w),!s.config.readonly){const k=document.createElement("button");k.type="button",k.className="absolute top-2 right-2 px-2 py-1 rounded",k.style.cssText=`
298
338
  color: var(--fb-error-color);
299
339
  background-color: transparent;
300
340
  transition: background-color var(--fb-transition-duration);
301
- `,k.textContent="\u2715",k.addEventListener("mouseenter",()=>{k.style.backgroundColor="var(--fb-background-hover-color)"}),k.addEventListener("mouseleave",()=>{k.style.backgroundColor="transparent"}),k.onclick=()=>{$.remove(),g()},$.style.position="relative",$.appendChild(k)}p.appendChild($)}),!i.config.readonly)for(;b()<v;){const y=b(),m={state:t.state,path:q(t.path,`${e.key}[${y}]`),prefill:{},formData:(s=t.formData)!=null?s:t.prefill},C=document.createElement("div");C.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",C.setAttribute("data-container-item",`${e.key}[${y}]`);const E=document.createElement("div"),$=e.columns||1;$===1?E.className="space-y-4":E.className=`grid grid-cols-${$} gap-4`,e.elements.forEach(N=>{N.hidden||E.appendChild(j(N,m))}),C.appendChild(E);const w=document.createElement("button");w.type="button",w.className="absolute top-2 right-2 px-2 py-1 rounded",w.style.cssText=`
341
+ `,k.textContent="\u2715",k.addEventListener("mouseenter",()=>{k.style.backgroundColor="var(--fb-background-hover-color)"}),k.addEventListener("mouseleave",()=>{k.style.backgroundColor="transparent"}),k.onclick=()=>{x.remove(),E()},x.style.position="relative",x.appendChild(k)}c.appendChild(x)}),!s.config.readonly)for(;v()<h;){const d=v(),b={state:t.state,path:A(t.path,`${e.key}[${d}]`),prefill:{},formData:(i=t.formData)!=null?i:t.prefill},y=document.createElement("div");y.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",y.setAttribute("data-container-item",`${e.key}[${d}]`);const C=document.createElement("div"),x=e.columns||1;x===1?C.className="space-y-4":C.className=`grid grid-cols-${x} gap-4`,e.elements.forEach(S=>{S.hidden||C.appendChild(D(S,b))}),y.appendChild(C);const w=document.createElement("button");w.type="button",w.className="absolute top-2 right-2 px-2 py-1 rounded",w.style.cssText=`
302
342
  color: var(--fb-error-color);
303
343
  background-color: transparent;
304
344
  transition: background-color var(--fb-transition-duration);
305
- `,w.textContent="\u2715",w.addEventListener("mouseenter",()=>{w.style.backgroundColor="var(--fb-background-hover-color)"}),w.addEventListener("mouseleave",()=>{w.style.backgroundColor="transparent"}),w.onclick=()=>{b()>v&&(C.remove(),g())},C.style.position="relative",C.appendChild(w),p.appendChild(C)}d.appendChild(p),i.config.readonly||d.appendChild(x()),g(),n.appendChild(d)}let G=null;function vt(e){G=e}function ge(e,t,n){if(!G)throw new Error("validateElement not initialized. Should be set from FormBuilderInstance");return G(e,t,n)}function ye(e,t,n){const o=[],{scopeRoot:a,skipValidation:r,path:l}=n;if(!("elements"in e))return{value:null,errors:o};const s=(i,d,u)=>{var c,p;if(r)return;const v="minCount"in u&&(c=u.minCount)!=null?c:0,f="maxCount"in u&&(p=u.maxCount)!=null?p:1/0;u.required&&d.length===0&&o.push(`${i}: required`),d.length<v&&o.push(`${i}: minimum ${v} items required`),d.length>f&&o.push(`${i}: maximum ${f} items allowed`)};if("multiple"in e&&e.multiple){const i=[],d=a.querySelectorAll("[data-container-item]"),u=Array.from(d).filter(c=>{const p=c.getAttribute("data-container-item");return p==null?void 0:p.startsWith(`${t}[`)}).length;for(let c=0;c<u;c++){const p={},v=a.querySelector(`[data-container-item="${t}[${c}]"]`)||a;e.elements.forEach(f=>{var h;if(f.enableIf)try{const b=(h=n.instance)!=null&&h.getState().formRoot?J(n.instance.getState().formRoot):{};if(!A(f.enableIf,b,p))return}catch(b){console.error(`Error evaluating enableIf for field "${f.key}" in container "${t}[${c}]":`,b)}if(f.hidden||f.type==="hidden")p[f.key]=f.default!==void 0?f.default:null;else{const b=`${t}[${c}].${f.key}`;p[f.key]=ge({...f,key:b},{path:l},v)}}),i.push(p)}return s(t,i,e),{value:i,errors:o}}else{const i={},d=a.querySelector(`[data-container="${t}"]`)||a;return e.elements.forEach(u=>{var c;if(u.enableIf)try{const p=(c=n.instance)!=null&&c.getState().formRoot?J(n.instance.getState().formRoot):{};if(!A(u.enableIf,p,i))return}catch(p){console.error(`Error evaluating enableIf for field "${u.key}" in container "${t}":`,p)}if(u.hidden||u.type==="hidden")i[u.key]=u.default!==void 0?u.default:null;else{const p=`${t}.${u.key}`;i[u.key]=ge({...u,key:p},{path:l},d)}}),{value:i,errors:o}}}function be(e,t,n,o){const{instance:a,scopeRoot:r}=o;if("elements"in e)if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateContainerField: Expected array for multiple container field "${t}", got ${typeof n}`);return}n.forEach((s,i)=>{z(s)&&e.elements.forEach(d=>{const u=d.key,c=`${t}[${i}].${u}`,p=s[u];p!==void 0&&a.updateField(c,p)})});const l=r.querySelectorAll(`[data-container-item^="${t}["]`);n.length!==l.length&&console.warn(`updateContainerField: Multiple container field "${t}" item count mismatch. Consider re-rendering for add/remove.`)}else{if(!z(n)){console.warn(`updateContainerField: Expected object for container field "${t}", got ${typeof n}`);return}e.elements.forEach(l=>{const s=l.key,i=`${t}.${s}`,d=n[s];d!==void 0&&a.updateField(i,d)})}}function ht(e,t,n,o){var a,r;typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated and will be removed in a future version. Please use type: "container" with multiple: true instead. Field key: "${e.key}"`);const l={key:e.key,label:e.label,description:e.description,hint:e.hint,required:e.required,hidden:e.hidden,default:e.default,actions:e.actions,elements:e.elements,multiple:!!(e.repeat&&z(e.repeat)),minCount:(a=e.repeat)==null?void 0:a.min,maxCount:(r=e.repeat)==null?void 0:r.max};l.multiple?he(l,t,n):ve(l,t,n,o)}function xe(e){var t,n;const o=e;return{type:"container",key:o.key,label:o.label,description:o.description,hint:o.hint,required:o.required,hidden:o.hidden,default:o.default,actions:o.actions,elements:o.elements,multiple:!!(o.repeat&&z(o.repeat)),minCount:(t=o.repeat)==null?void 0:t.min,maxCount:(n=o.repeat)==null?void 0:n.max}}function gt(e,t,n){typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated. Please use type: "container" instead. Field key: "${t}"`);const o=xe(e);return ye(o,t,n)}function yt(e,t,n,o){typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated. Please use type: "container" instead. Field path: "${t}"`);const a=xe(e);return be(a,t,n,o)}function bt(e,t){const n=document.getElementById(e);if(!n)return;const o=!n.classList.contains("hidden");if(document.querySelectorAll('[id^="tooltip-"]').forEach(u=>{u.classList.add("hidden")}),o)return;const a=t.getBoundingClientRect(),r=window.innerWidth,l=window.innerHeight;n&&n.parentElement!==document.body&&document.body.appendChild(n),n.style.visibility="hidden",n.style.position="fixed",n.classList.remove("hidden");const s=n.getBoundingClientRect();n.classList.add("hidden"),n.style.visibility="visible";let i=a.left,d=a.bottom+5;i+s.width>r&&(i=a.right-s.width),d+s.height>l&&(d=a.top-s.height-5),i<10&&(i=10),d<10&&(d=a.bottom+5),n.style.left=`${i}px`,n.style.top=`${d}px`,n.classList.remove("hidden"),setTimeout(()=>{n.classList.add("hidden")},25e3)}typeof document!="undefined"&&document.addEventListener("click",e=>{const t=e.target,n=t.closest("button")&&t.closest("button").onclick,o=t.closest('[id^="tooltip-"]');!n&&!o&&document.querySelectorAll('[id^="tooltip-"]').forEach(a=>{a.classList.add("hidden")})});function xt(e,t){var n,o;if(!e.enableIf)return!1;try{const a=(o=(n=t.formData)!=null?n:t.prefill)!=null?o:{},r=t.path?I(a,t.path):void 0;return!A(e.enableIf,a,r)}catch(a){console.error(`Error evaluating enableIf for field "${e.key}":`,a)}return!1}function Ct(e,t){const n=t.querySelector(`[name="${e}"]`);if(n){if(n instanceof HTMLSelectElement)return n.value;if(n instanceof HTMLInputElement){if(n.type==="checkbox")return n.checked;if(n.type==="radio"){const o=t.querySelector(`[name="${e}"]:checked`);return o?o.value:void 0}else return n.value}else if(n instanceof HTMLTextAreaElement)return n.value}}function R(e,t,n){var o,a;if(!t.enableIf)return;const r=n.state.formRoot;if(!r){console.error("Cannot re-evaluate enableIf: formRoot is null");return}const l=t.enableIf,s=(o=l.scope)!=null?o:"relative";let i={};const d={};if((!n.path||n.path===""?"absolute":s)==="relative"&&n.path){const u=n.path.match(/^(.+)\[(\d+)\]$/);if(u){const c=u[1],p=parseInt(u[2],10),v=r.querySelector(`[data-container-item="${c}[${p}]"]`);v&&v.querySelectorAll("input, select, textarea").forEach(f=>{const h=f.getAttribute("name");if(h){const b=h.match(/\.([^.[\]]+)$/);if(b){const x=b[1];f instanceof HTMLSelectElement?d[x]=f.value:f instanceof HTMLInputElement?f.type==="checkbox"?d[x]=f.checked:f.type==="radio"?f.checked&&(d[x]=f.value):d[x]=f.value:f instanceof HTMLTextAreaElement&&(d[x]=f.value)}}})}}else{const u=l.key,c=Ct(u,r);c!==void 0?i[u]=c:i=(a=n.formData)!=null?a:n.prefill}try{A(l,i,d)?(e.style.display="",e.classList.remove("fb-field-wrapper-disabled"),e.removeAttribute("data-conditionally-disabled")):(e.style.display="none",e.classList.add("fb-field-wrapper-disabled"),e.setAttribute("data-conditionally-disabled","true"))}catch(u){console.error(`Error re-evaluating enableIf for field "${t.key}":`,u)}}function Et(e,t,n){var o;if(!t.enableIf)return;const a=n.state.formRoot;if(!a){console.error("Cannot setup enableIf listeners: formRoot is null");return}const r=t.enableIf,l=(o=r.scope)!=null?o:"relative",s=r.key;let i;l==="relative"&&n.path?i=`${n.path}.${s}`:i=s;const d=a.querySelector(`[name="${i}"]`);if(!d){const u=new MutationObserver(()=>{const c=a.querySelector(`[name="${i}"]`);c&&(c.addEventListener("change",()=>{R(e,t,n)}),c.addEventListener("input",()=>{R(e,t,n)}),u.disconnect())});u.observe(a,{childList:!0,subtree:!0});return}d.addEventListener("change",()=>{R(e,t,n)}),d.addEventListener("input",()=>{R(e,t,n)})}function $t(e){const t=document.createElement("label");if(t.className="text-sm font-medium text-gray-900",t.textContent=e.label||e.key,e.required){const n=document.createElement("span");n.className="text-red-500 ml-1",n.textContent="*",t.appendChild(n)}return t}function wt(e){const t=document.createElement("button");t.type="button",t.className="ml-2 text-gray-400 hover:text-gray-600",t.innerHTML='<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>';const n=`tooltip-${e.key}-${Math.random().toString(36).substr(2,9)}`,o=document.createElement("div");return o.id=n,o.className="hidden absolute z-50 bg-gray-200 text-gray-900 text-sm rounded-lg p-3 max-w-sm border border-gray-300 shadow-lg",o.style.position="fixed",o.textContent=e.description||e.hint||"Field information",document.body.appendChild(o),t.onclick=a=>{a.preventDefault(),a.stopPropagation(),bt(n,t)},t}function kt(e){const t=document.createElement("div");t.className="flex items-center mb-2";const n=$t(e);if(t.appendChild(n),e.description||e.hint){const o=wt(e);t.appendChild(o)}return t}function St(e,t,n,o){const a="multiple"in e&&e.multiple;switch(e.type){case"text":a?Ae(e,t,n,o):qe(e,t,n,o);break;case"textarea":a?He(e,t,n,o):Te(e,t,n,o);break;case"number":a?Be(e,t,n,o):Ie(e,t,n,o);break;case"select":a?Oe(e,t,n,o):De(e,t,n,o);break;case"file":a?lt(e,t,n,o):rt(e,t,n,o);break;case"files":ot(e,t,n,o);break;case"colour":a?it(e,t,n,o):at(e,t,n,o);break;case"slider":a?ut(e,t,n,o):dt(e,t,n,o);break;case"group":ht(e,t,n,o);break;case"container":a?he(e,t,n):ve(e,t,n,o);break;default:{const r=document.createElement("div");r.className="text-red-500 text-sm",r.textContent=`Unsupported field type: ${e.type}`,n.appendChild(r)}}}function X(e,t){const n=xt(e,t),o=document.createElement("div");o.className="mb-6 fb-field-wrapper",o.setAttribute("data-field-key",e.key);const a=kt(e);o.appendChild(a);const r=q(t.path,e.key);return St(e,t,o,r),n&&(o.style.display="none",o.classList.add("fb-field-wrapper-disabled"),o.setAttribute("data-conditionally-disabled","true")),Et(o,e,t),o}mt(X);const Lt={uploadFile:null,downloadFile:null,getThumbnail:null,getDownloadUrl:null,actionHandler:null,onChange:null,onFieldChange:null,onThumbnailError:null,onUploadError:null,onDownloadError:null,debounceMs:300,verboseErrors:!1,enableFilePreview:!0,maxPreviewSize:"200px",readonly:!1,locale:"en",translations:{en:{addElement:"Add Element",removeElement:"Remove",uploadText:"Upload",dragDropText:"or drag and drop files",dragDropTextSingle:"or drag and drop file",clickDragText:"Click or drag file",noFileSelected:"No file selected",noFilesSelected:"No files selected",downloadButton:"Download"},ru:{addElement:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442",removeElement:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",uploadText:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435",dragDropText:"\u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B",dragDropTextSingle:"\u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B",clickDragText:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B",noFileSelected:"\u0424\u0430\u0439\u043B \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D",noFilesSelected:"\u041D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432",downloadButton:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C"}},theme:{}};function Ft(e){return{schema:null,formRoot:null,resourceIndex:new Map,externalActions:null,version:"1.0.0",config:{...Lt,...e},debounceTimer:null}}function Nt(){const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,9);return`inst-${e}-${t}`}const M={primaryColor:"#3b82f6",primaryHoverColor:"#2563eb",errorColor:"#ef4444",errorHoverColor:"#dc2626",successColor:"#10b981",borderColor:"#d1d5db",borderHoverColor:"#9ca3af",borderFocusColor:"#3b82f6",backgroundColor:"#ffffff",backgroundHoverColor:"#f9fafb",backgroundReadonlyColor:"#f3f4f6",textColor:"#1f2937",textSecondaryColor:"#6b7280",textPlaceholderColor:"#9ca3af",textDisabledColor:"#d1d5db",buttonBgColor:"#3b82f6",buttonTextColor:"#ffffff",buttonBorderColor:"#2563eb",buttonHoverBgColor:"#2563eb",buttonHoverBorderColor:"#1d4ed8",actionBgColor:"#ffffff",actionTextColor:"#374151",actionBorderColor:"#e5e7eb",actionHoverBgColor:"#f9fafb",actionHoverBorderColor:"#d1d5db",fileUploadBgColor:"#f3f4f6",fileUploadBorderColor:"#d1d5db",fileUploadTextColor:"#9ca3af",fileUploadHoverBorderColor:"#3b82f6",inputPaddingX:"0.75rem",inputPaddingY:"0.5rem",borderRadius:"0.5rem",borderWidth:"1px",fontSize:"0.875rem",fontSizeSmall:"0.75rem",fontSizeExtraSmall:"0.625rem",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',fontWeightNormal:"400",fontWeightMedium:"500",focusRingWidth:"2px",focusRingColor:"#3b82f6",focusRingOpacity:"0.5",transitionDuration:"200ms"};function qt(e){const t={...M,...e},n=[];return Object.entries(t).forEach(([o,a])=>{const r=o.replace(/([A-Z])/g,"-$1").toLowerCase();n.push(` --fb-${r}: ${a};`)}),n.join(`
306
- `)}function At(e,t){const n=qt(t);let o=e.querySelector("style[data-fb-theme]");o||(o=document.createElement("style"),o.setAttribute("data-fb-theme","true"),e.appendChild(o)),o.textContent=`
345
+ `,w.textContent="\u2715",w.addEventListener("mouseenter",()=>{w.style.backgroundColor="var(--fb-background-hover-color)"}),w.addEventListener("mouseleave",()=>{w.style.backgroundColor="transparent"}),w.onclick=()=>{v()>h&&(y.remove(),E())},y.style.position="relative",y.appendChild(w),c.appendChild(y)}if(u.appendChild(c),!s.config.readonly){const d=document.createElement("div");d.className="flex items-center gap-3 mt-2",d.appendChild(g()),d.appendChild(p),u.appendChild(d)}E(),n.appendChild(u)}let X=null;function yt(e){X=e}function xe(e,t,n){if(!X)throw new Error("validateElement not initialized. Should be set from FormBuilderInstance");return X(e,t,n)}function Ce(e,t,n){const o=[],{scopeRoot:a,skipValidation:l,path:r}=n;if(!("elements"in e))return{value:null,errors:o};const i=(s,u,p)=>{var c,h;if(l)return;const{state:f}=n,m="minCount"in p&&(c=p.minCount)!=null?c:0,v="maxCount"in p&&(h=p.maxCount)!=null?h:1/0;p.required&&u.length===0&&o.push(`${s}: ${$("required",f)}`),u.length<m&&o.push(`${s}: ${$("minItems",f,{min:m})}`),u.length>v&&o.push(`${s}: ${$("maxItems",f,{max:v})}`)};if("multiple"in e&&e.multiple){const s=[],u=a.querySelectorAll("[data-container-item]"),p=Array.from(u).filter(c=>{const h=c.getAttribute("data-container-item");return h==null?void 0:h.startsWith(`${t}[`)}).length;for(let c=0;c<p;c++){const h={},f=a.querySelector(`[data-container-item="${t}[${c}]"]`)||a;e.elements.forEach(m=>{var v;if(m.enableIf)try{const g=(v=n.instance)!=null&&v.getState().formRoot?Y(n.instance.getState().formRoot):{};if(!T(m.enableIf,g,h))return}catch(g){console.error(`Error evaluating enableIf for field "${m.key}" in container "${t}[${c}]":`,g)}if(m.hidden||m.type==="hidden")h[m.key]=m.default!==void 0?m.default:null;else{const g=`${t}[${c}].${m.key}`;h[m.key]=xe({...m,key:g},{path:r},f)}}),s.push(h)}return i(t,s,e),{value:s,errors:o}}else{const s={},u=a.querySelector(`[data-container="${t}"]`)||a;return e.elements.forEach(p=>{var c;if(p.enableIf)try{const h=(c=n.instance)!=null&&c.getState().formRoot?Y(n.instance.getState().formRoot):{};if(!T(p.enableIf,h,s))return}catch(h){console.error(`Error evaluating enableIf for field "${p.key}" in container "${t}":`,h)}if(p.hidden||p.type==="hidden")s[p.key]=p.default!==void 0?p.default:null;else{const h=`${t}.${p.key}`;s[p.key]=xe({...p,key:h},{path:r},u)}}),{value:s,errors:o}}}function Ee(e,t,n,o){const{instance:a,scopeRoot:l}=o;if("elements"in e)if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateContainerField: Expected array for multiple container field "${t}", got ${typeof n}`);return}n.forEach((i,s)=>{B(i)&&e.elements.forEach(u=>{const p=u.key,c=`${t}[${s}].${p}`,h=i[p];h!==void 0&&a.updateField(c,h)})});const r=l.querySelectorAll(`[data-container-item^="${t}["]`);n.length!==r.length&&console.warn(`updateContainerField: Multiple container field "${t}" item count mismatch. Consider re-rendering for add/remove.`)}else{if(!B(n)){console.warn(`updateContainerField: Expected object for container field "${t}", got ${typeof n}`);return}e.elements.forEach(r=>{const i=r.key,s=`${t}.${i}`,u=n[i];u!==void 0&&a.updateField(s,u)})}}function bt(e,t,n,o){var a,l;typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated and will be removed in a future version. Please use type: "container" with multiple: true instead. Field key: "${e.key}"`);const r={key:e.key,label:e.label,description:e.description,hint:e.hint,required:e.required,hidden:e.hidden,default:e.default,actions:e.actions,elements:e.elements,multiple:!!(e.repeat&&B(e.repeat)),minCount:(a=e.repeat)==null?void 0:a.min,maxCount:(l=e.repeat)==null?void 0:l.max};r.multiple?be(r,t,n):ye(r,t,n,o)}function $e(e){var t,n;const o=e;return{type:"container",key:o.key,label:o.label,description:o.description,hint:o.hint,required:o.required,hidden:o.hidden,default:o.default,actions:o.actions,elements:o.elements,multiple:!!(o.repeat&&B(o.repeat)),minCount:(t=o.repeat)==null?void 0:t.min,maxCount:(n=o.repeat)==null?void 0:n.max}}function xt(e,t,n){typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated. Please use type: "container" instead. Field key: "${t}"`);const o=$e(e);return Ce(o,t,n)}function Ct(e,t,n,o){typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated. Please use type: "container" instead. Field path: "${t}"`);const a=$e(e);return Ee(a,t,n,o)}function Et(e,t){const n=document.getElementById(e);if(!n)return;const o=!n.classList.contains("hidden");if(document.querySelectorAll('[id^="tooltip-"]').forEach(p=>{p.classList.add("hidden")}),o)return;const a=t.getBoundingClientRect(),l=window.innerWidth,r=window.innerHeight;n&&n.parentElement!==document.body&&document.body.appendChild(n),n.style.visibility="hidden",n.style.position="fixed",n.classList.remove("hidden");const i=n.getBoundingClientRect();n.classList.add("hidden"),n.style.visibility="visible";let s=a.left,u=a.bottom+5;s+i.width>l&&(s=a.right-i.width),u+i.height>r&&(u=a.top-i.height-5),s<10&&(s=10),u<10&&(u=a.bottom+5),n.style.left=`${s}px`,n.style.top=`${u}px`,n.classList.remove("hidden"),setTimeout(()=>{n.classList.add("hidden")},25e3)}typeof document!="undefined"&&document.addEventListener("click",e=>{const t=e.target,n=t.closest("button")&&t.closest("button").onclick,o=t.closest('[id^="tooltip-"]');!n&&!o&&document.querySelectorAll('[id^="tooltip-"]').forEach(a=>{a.classList.add("hidden")})});function $t(e,t){var n,o;if(!e.enableIf)return!1;try{const a=(o=(n=t.formData)!=null?n:t.prefill)!=null?o:{},l=t.path?z(a,t.path):void 0;return!T(e.enableIf,a,l)}catch(a){console.error(`Error evaluating enableIf for field "${e.key}":`,a)}return!1}function wt(e,t){const n=t.querySelector(`[name="${e}"]`);if(n){if(n instanceof HTMLSelectElement)return n.value;if(n instanceof HTMLInputElement){if(n.type==="checkbox")return n.checked;if(n.type==="radio"){const o=t.querySelector(`[name="${e}"]:checked`);return o?o.value:void 0}else return n.value}else if(n instanceof HTMLTextAreaElement)return n.value}}function j(e,t,n){var o,a;if(!t.enableIf)return;const l=n.state.formRoot;if(!l){console.error("Cannot re-evaluate enableIf: formRoot is null");return}const r=t.enableIf,i=(o=r.scope)!=null?o:"relative";let s={};const u={};if((!n.path||n.path===""?"absolute":i)==="relative"&&n.path){const p=n.path.match(/^(.+)\[(\d+)\]$/);if(p){const c=p[1],h=parseInt(p[2],10),f=l.querySelector(`[data-container-item="${c}[${h}]"]`);f&&f.querySelectorAll("input, select, textarea").forEach(m=>{const v=m.getAttribute("name");if(v){const g=v.match(/\.([^.[\]]+)$/);if(g){const E=g[1];m instanceof HTMLSelectElement?u[E]=m.value:m instanceof HTMLInputElement?m.type==="checkbox"?u[E]=m.checked:m.type==="radio"?m.checked&&(u[E]=m.value):u[E]=m.value:m instanceof HTMLTextAreaElement&&(u[E]=m.value)}}})}}else{const p=r.key,c=wt(p,l);c!==void 0?s[p]=c:s=(a=n.formData)!=null?a:n.prefill}try{T(r,s,u)?(e.style.display="",e.classList.remove("fb-field-wrapper-disabled"),e.removeAttribute("data-conditionally-disabled")):(e.style.display="none",e.classList.add("fb-field-wrapper-disabled"),e.setAttribute("data-conditionally-disabled","true"))}catch(p){console.error(`Error re-evaluating enableIf for field "${t.key}":`,p)}}function kt(e,t,n){var o;if(!t.enableIf)return;const a=n.state.formRoot;if(!a){console.error("Cannot setup enableIf listeners: formRoot is null");return}const l=t.enableIf,r=(o=l.scope)!=null?o:"relative",i=l.key;let s;r==="relative"&&n.path?s=`${n.path}.${i}`:s=i;const u=a.querySelector(`[name="${s}"]`);if(!u){const p=new MutationObserver(()=>{const c=a.querySelector(`[name="${s}"]`);c&&(c.addEventListener("change",()=>{j(e,t,n)}),c.addEventListener("input",()=>{j(e,t,n)}),p.disconnect())});p.observe(a,{childList:!0,subtree:!0});return}u.addEventListener("change",()=>{j(e,t,n)}),u.addEventListener("input",()=>{j(e,t,n)})}function Lt(e){const t=document.createElement("label");if(t.className="text-sm font-medium text-gray-900",t.textContent=e.label||e.key,e.required){const n=document.createElement("span");n.className="text-red-500 ml-1",n.textContent="*",t.appendChild(n)}return t}function St(e){const t=document.createElement("button");t.type="button",t.className="ml-2 text-gray-400 hover:text-gray-600",t.innerHTML='<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>';const n=`tooltip-${e.key}-${Math.random().toString(36).substr(2,9)}`,o=document.createElement("div");return o.id=n,o.className="hidden absolute z-50 bg-gray-200 text-gray-900 text-sm rounded-lg p-3 max-w-sm border border-gray-300 shadow-lg",o.style.position="fixed",o.textContent=e.description||e.hint||"Field information",document.body.appendChild(o),t.onclick=a=>{a.preventDefault(),a.stopPropagation(),Et(n,t)},t}function Ft(e){const t=document.createElement("div");t.className="flex items-center mb-2";const n=Lt(e);if(t.appendChild(n),e.description||e.hint){const o=St(e);t.appendChild(o)}return t}function Nt(e,t,n,o){const a="multiple"in e&&e.multiple;switch(e.type){case"text":a?He(e,t,n,o):Me(e,t,n,o);break;case"textarea":a?ze(e,t,n,o):Be(e,t,n,o);break;case"number":a?je(e,t,n,o):De(e,t,n,o);break;case"select":a?Ve(e,t,n,o):Pe(e,t,n,o);break;case"file":a?st(e,t,n,o):at(e,t,n,o);break;case"files":it(e,t,n,o);break;case"colour":a?ut(e,t,n,o):ct(e,t,n,o);break;case"slider":a?mt(e,t,n,o):ft(e,t,n,o);break;case"group":bt(e,t,n,o);break;case"container":a?be(e,t,n):ye(e,t,n,o);break;default:{const l=document.createElement("div");l.className="text-red-500 text-sm",l.textContent=$("unsupportedFieldType",t.state,{type:e.type}),n.appendChild(l)}}}function Z(e,t){const n=$t(e,t),o=document.createElement("div");o.className="mb-6 fb-field-wrapper",o.setAttribute("data-field-key",e.key);const a=Ft(e);o.appendChild(a);const l=A(t.path,e.key);return Nt(e,t,o,l),n&&(o.style.display="none",o.classList.add("fb-field-wrapper-disabled"),o.setAttribute("data-conditionally-disabled","true")),kt(o,e,t),o}gt(Z);const Q={uploadFile:null,downloadFile:null,getThumbnail:null,getDownloadUrl:null,actionHandler:null,onChange:null,onFieldChange:null,onThumbnailError:null,onUploadError:null,onDownloadError:null,debounceMs:300,verboseErrors:!1,enableFilePreview:!0,maxPreviewSize:"200px",readonly:!1,locale:"en",translations:{en:{removeElement:"Remove",clickDragText:"Click or drag file",clickDragTextMultiple:"Click or drag files",noFileSelected:"No file selected",noFilesSelected:"No files selected",downloadButton:"Download",changeButton:"Change",placeholderText:"Enter text",previewAlt:"Preview",previewUnavailable:"Preview unavailable",previewError:"Preview error",videoNotSupported:"Your browser does not support the video tag.",hintLengthRange:"{min}-{max} chars",hintMaxLength:"\u2264{max} chars",hintMinLength:"\u2265{min} chars",hintValueRange:"{min}-{max}",hintMaxValue:"\u2264{max}",hintMinValue:"\u2265{min}",hintMaxSize:"\u2264{size}MB",hintFormats:"{formats}",hintRequired:"Required",hintOptional:"Optional",hintPattern:"Format: {pattern}",fileCountSingle:"{count} file",fileCountPlural:"{count} files",fileCountRange:"({min}-{max})",required:"Required",minItems:"Minimum {min} items required",maxItems:"Maximum {max} items allowed",minLength:"Minimum {min} characters",maxLength:"Maximum {max} characters",minValue:"Must be at least {min}",maxValue:"Must be at most {max}",patternMismatch:"Invalid format",invalidPattern:"Invalid pattern in schema",notANumber:"Must be a number",invalidHexColour:"Invalid hex color",minFiles:"Minimum {min} files required",maxFiles:"Maximum {max} files allowed",unsupportedFieldType:"Unsupported field type: {type}"},ru:{removeElement:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",clickDragText:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B",clickDragTextMultiple:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B",noFileSelected:"\u0424\u0430\u0439\u043B \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D",noFilesSelected:"\u041D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432",downloadButton:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C",changeButton:"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C",placeholderText:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",previewAlt:"\u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",previewUnavailable:"\u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D",previewError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430",videoNotSupported:"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043E.",hintLengthRange:"{min}-{max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",hintMaxLength:"\u2264{max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",hintMinLength:"\u2265{min} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",hintValueRange:"{min}-{max}",hintMaxValue:"\u2264{max}",hintMinValue:"\u2265{min}",hintMaxSize:"\u2264{size}\u041C\u0411",hintFormats:"{formats}",hintRequired:"\u041E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435",hintOptional:"\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435",hintPattern:"\u0424\u043E\u0440\u043C\u0430\u0442: {pattern}",fileCountSingle:"{count} \u0444\u0430\u0439\u043B",fileCountPlural:"{count} \u0444\u0430\u0439\u043B\u043E\u0432",fileCountRange:"({min}-{max})",required:"\u041E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u043F\u043E\u043B\u0435",minItems:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C {min} \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432",maxItems:"\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C {max} \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432",minLength:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C {min} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",maxLength:"\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",minValue:"\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 {min}",maxValue:"\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {max}",patternMismatch:"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442",invalidPattern:"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043F\u0430\u0442\u0442\u0435\u0440\u043D \u0432 \u0441\u0445\u0435\u043C\u0435",notANumber:"\u0414\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u0447\u0438\u0441\u043B\u043E\u043C",invalidHexColour:"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0446\u0432\u0435\u0442\u0430",minFiles:"\u041C\u0438\u043D\u0438\u043C\u0443\u043C {min} \u0444\u0430\u0439\u043B\u043E\u0432",maxFiles:"\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C {max} \u0444\u0430\u0439\u043B\u043E\u0432",unsupportedFieldType:"\u041D\u0435\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0439 \u0442\u0438\u043F \u043F\u043E\u043B\u044F: {type}"}},theme:{}};function At(e){const t={...Q.translations};if(e!=null&&e.translations)for(const[n,o]of Object.entries(e.translations))t[n]={...Q.translations[n]||{},...o};return{schema:null,formRoot:null,resourceIndex:new Map,externalActions:null,version:"1.0.0",config:{...Q,...e,translations:t},debounceTimer:null}}function Tt(){const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,9);return`inst-${e}-${t}`}const H={primaryColor:"#3b82f6",primaryHoverColor:"#2563eb",errorColor:"#ef4444",errorHoverColor:"#dc2626",successColor:"#10b981",borderColor:"#d1d5db",borderHoverColor:"#9ca3af",borderFocusColor:"#3b82f6",backgroundColor:"#ffffff",backgroundHoverColor:"#f9fafb",backgroundReadonlyColor:"#f3f4f6",textColor:"#1f2937",textSecondaryColor:"#6b7280",textPlaceholderColor:"#9ca3af",textDisabledColor:"#d1d5db",buttonBgColor:"#3b82f6",buttonTextColor:"#ffffff",buttonBorderColor:"#2563eb",buttonHoverBgColor:"#2563eb",buttonHoverBorderColor:"#1d4ed8",actionBgColor:"#ffffff",actionTextColor:"#374151",actionBorderColor:"#e5e7eb",actionHoverBgColor:"#f9fafb",actionHoverBorderColor:"#d1d5db",fileUploadBgColor:"#f3f4f6",fileUploadBorderColor:"#d1d5db",fileUploadTextColor:"#9ca3af",fileUploadHoverBorderColor:"#3b82f6",inputPaddingX:"0.75rem",inputPaddingY:"0.5rem",borderRadius:"0.5rem",borderWidth:"1px",fontSize:"0.875rem",fontSizeSmall:"0.75rem",fontSizeExtraSmall:"0.625rem",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',fontWeightNormal:"400",fontWeightMedium:"500",focusRingWidth:"2px",focusRingColor:"#3b82f6",focusRingOpacity:"0.5",transitionDuration:"200ms"};function qt(e){const t={...H,...e},n=[];return Object.entries(t).forEach(([o,a])=>{const l=o.replace(/([A-Z])/g,"-$1").toLowerCase();n.push(` --fb-${l}: ${a};`)}),n.join(`
346
+ `)}function Mt(e,t){const n=qt(t);let o=e.querySelector("style[data-fb-theme]");o||(o=document.createElement("style"),o.setAttribute("data-fb-theme","true"),e.appendChild(o)),o.textContent=`
307
347
  [data-fb-root="true"] {
308
348
  ${n}
309
349
  }
310
- `}const Tt={default:M,dark:{...M,primaryColor:"#60a5fa",primaryHoverColor:"#3b82f6",borderColor:"#4b5563",borderHoverColor:"#6b7280",borderFocusColor:"#60a5fa",backgroundColor:"#1f2937",backgroundHoverColor:"#374151",backgroundReadonlyColor:"#111827",textColor:"#f9fafb",textSecondaryColor:"#9ca3af",textPlaceholderColor:"#6b7280",fileUploadBgColor:"#374151",fileUploadBorderColor:"#4b5563",fileUploadTextColor:"#9ca3af"},klein:{...M,primaryColor:"#0066cc",primaryHoverColor:"#0052a3",errorColor:"#d32f2f",errorHoverColor:"#c62828",successColor:"#388e3c",borderColor:"#e0e0e0",borderHoverColor:"#bdbdbd",borderFocusColor:"#0066cc",borderRadius:"4px",fontSize:"16px",fontSizeSmall:"14px",fontFamily:'"Roboto", "Helvetica", "Arial", sans-serif'}};function Ce(e,t=!1){e.style.cssText=`
350
+ `}const Ht={default:H,dark:{...H,primaryColor:"#60a5fa",primaryHoverColor:"#3b82f6",borderColor:"#4b5563",borderHoverColor:"#6b7280",borderFocusColor:"#60a5fa",backgroundColor:"#1f2937",backgroundHoverColor:"#374151",backgroundReadonlyColor:"#111827",textColor:"#f9fafb",textSecondaryColor:"#9ca3af",textPlaceholderColor:"#6b7280",fileUploadBgColor:"#374151",fileUploadBorderColor:"#4b5563",fileUploadTextColor:"#9ca3af"},klein:{...H,primaryColor:"#0066cc",primaryHoverColor:"#0052a3",errorColor:"#d32f2f",errorHoverColor:"#c62828",successColor:"#388e3c",borderColor:"#e0e0e0",borderHoverColor:"#bdbdbd",borderFocusColor:"#0066cc",borderRadius:"4px",fontSize:"16px",fontSizeSmall:"14px",fontFamily:'"Roboto", "Helvetica", "Arial", sans-serif'}};function we(e,t=!1){e.style.cssText=`
311
351
  background-color: var(--fb-action-bg-color);
312
352
  color: var(--fb-action-text-color);
313
353
  border: var(--fb-border-width) solid var(--fb-action-border-color);
@@ -317,6 +357,6 @@ ${n}
317
357
  border-radius: var(--fb-border-radius);
318
358
  transition: all var(--fb-transition-duration);
319
359
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
320
- `,e.addEventListener("mouseenter",()=>{e.style.backgroundColor="var(--fb-action-hover-bg-color)",e.style.borderColor="var(--fb-action-hover-border-color)"}),e.addEventListener("mouseleave",()=>{e.style.backgroundColor="var(--fb-action-bg-color)",e.style.borderColor="var(--fb-action-border-color)"})}const Ht={text:{validate:Z,update:Q},textarea:{validate:Me,update:ze},number:{validate:je,update:Re},select:{validate:Ue,update:Pe},file:{validate:ie,update:se},files:{validate:ie,update:se},colour:{validate:st,update:ct},slider:{validate:ft,update:pt},container:{validate:ye,update:be},group:{validate:gt,update:yt}};function Ee(e){return Ht[e]||null}function Mt(e,t,n){const o=Ee(e.type);return o&&o.validate?o.validate(e,t,n):null}function zt(e,t,n,o){const a=Ee(e.type);return a&&a.update?(a.update(e,t,n,o),!0):!1}class D{constructor(t){this.instanceId=Nt(),this.state=Ft(t),this.state.config.verboseErrors&&(globalThis.__formBuilderInstances||(globalThis.__formBuilderInstances=new Set),globalThis.__formBuilderInstances.add(this.instanceId),globalThis.__formBuilderInstances.size>10&&console.warn(`[form-builder] ${globalThis.__formBuilderInstances.size} instances active. Possible memory leak - ensure you call destroy() when done.`))}getInstanceId(){return this.instanceId}getState(){return this.state}setFormRoot(t){this.state.formRoot=t}configure(t){Object.assign(this.state.config,t)}setUploadHandler(t){this.state.config.uploadFile=t}setDownloadHandler(t){this.state.config.downloadFile=t}setThumbnailHandler(t){this.state.config.getThumbnail=t}setActionHandler(t){this.state.config.actionHandler=t}setMode(t){this.state.config.readonly=t==="readonly"}setLocale(t){this.state.config.translations[t]&&(this.state.config.locale=t)}triggerOnChange(t,n){this.state.config.readonly||(this.state.debounceTimer!==null&&clearTimeout(this.state.debounceTimer),this.state.debounceTimer=setTimeout(()=>{const o=this.validateForm(!0);this.reevaluateConditionalFields(),this.state.config.onChange&&this.state.config.onChange(o),this.state.config.onFieldChange&&t!==void 0&&n!==void 0&&this.state.config.onFieldChange(t,n,o),this.state.debounceTimer=null},this.state.config.debounceMs))}registerAction(t){if(!t||!t.value)throw new Error("Action must have a value property");this.state.externalActions||(this.state.externalActions=[]);const n=this.state.externalActions.findIndex(o=>o.value===t.value&&o.related_field===t.related_field);n>=0?this.state.externalActions[n]=t:this.state.externalActions.push(t)}findFormElementByFieldPath(t){if(!this.state.formRoot)return null;if(!this.state.config.readonly){let a=this.state.formRoot.querySelector(`[name="${t}"]`);if(a)return a;const r=[t,t.replace(/\[(\d+)\]/g,"[$1]"),t.replace(/\./g,"[")+"]".repeat((t.match(/\./g)||[]).length)];for(const l of r)if(a=this.state.formRoot.querySelector(`[name="${l}"]`),a)return a}const n=this.findSchemaElement(t);if(!n)return null;const o=this.state.formRoot.querySelectorAll(".fb-field-wrapper");for(const a of o){const r=n.label||n.key,l=a.querySelector("label");if(l&&(l.textContent===r||l.textContent===`${r}*`)){let s=a.querySelector(".field-placeholder");return s||(s=document.createElement("div"),s.className="field-placeholder",s.style.display="none",a.appendChild(s)),s}}return null}findSchemaElement(t){if(!this.state.schema||!this.state.schema.elements)return null;let n=this.state.schema.elements,o=null;const a=t.replace(/\[\d+\]/g,"").split(".").filter(Boolean);for(const r of a){if(o=n.find(l=>l.key===r)||null,!o)return null;"elements"in o&&o.elements&&(n=o.elements)}return o}resolveActionLabel(t,n,o,a=!1){if(o&&"actions"in o&&o.actions){const r=o.actions.find(l=>l.key===t);if(r&&r.label)return r.label}if(a&&this.state.schema&&"actions"in this.state.schema&&this.state.schema.actions){const r=this.state.schema.actions.find(l=>l.key===t);if(r&&r.label)return r.label}return n||t}renderFormLevelActions(t,n=[]){if(!this.state.formRoot)return;const o=this.state.formRoot.querySelector(".form-level-actions-container");o&&o.remove();const a=document.createElement("div");a.className="form-level-actions-container mt-6 pt-4 flex flex-wrap gap-3 justify-center",a.style.cssText=`
360
+ `,e.addEventListener("mouseenter",()=>{e.style.backgroundColor="var(--fb-action-hover-bg-color)",e.style.borderColor="var(--fb-action-hover-border-color)"}),e.addEventListener("mouseleave",()=>{e.style.backgroundColor="var(--fb-action-bg-color)",e.style.borderColor="var(--fb-action-border-color)"})}const Bt={text:{validate:K,update:ee},textarea:{validate:Ie,update:Re},number:{validate:Oe,update:Ue},select:{validate:_e,update:We},file:{validate:ue,update:de},files:{validate:ue,update:de},colour:{validate:dt,update:pt},slider:{validate:ht,update:vt},container:{validate:Ce,update:Ee},group:{validate:xt,update:Ct}};function ke(e){return Bt[e]||null}function zt(e,t,n){const o=ke(e.type);return o&&o.validate?o.validate(e,t,n):null}function It(e,t,n,o){const a=ke(e.type);return a&&a.update?(a.update(e,t,n,o),!0):!1}class O{constructor(t){this.instanceId=Tt(),this.state=At(t),this.state.config.verboseErrors&&(globalThis.__formBuilderInstances||(globalThis.__formBuilderInstances=new Set),globalThis.__formBuilderInstances.add(this.instanceId),globalThis.__formBuilderInstances.size>10&&console.warn(`[form-builder] ${globalThis.__formBuilderInstances.size} instances active. Possible memory leak - ensure you call destroy() when done.`))}getInstanceId(){return this.instanceId}getState(){return this.state}setFormRoot(t){this.state.formRoot=t}configure(t){Object.assign(this.state.config,t)}setUploadHandler(t){this.state.config.uploadFile=t}setDownloadHandler(t){this.state.config.downloadFile=t}setThumbnailHandler(t){this.state.config.getThumbnail=t}setActionHandler(t){this.state.config.actionHandler=t}setMode(t){this.state.config.readonly=t==="readonly"}setLocale(t){this.state.config.translations[t]&&(this.state.config.locale=t)}triggerOnChange(t,n){this.state.config.readonly||(this.state.debounceTimer!==null&&clearTimeout(this.state.debounceTimer),this.state.debounceTimer=setTimeout(()=>{const o=this.validateForm(!0);this.reevaluateConditionalFields(),this.state.config.onChange&&this.state.config.onChange(o),this.state.config.onFieldChange&&t!==void 0&&n!==void 0&&this.state.config.onFieldChange(t,n,o),this.state.debounceTimer=null},this.state.config.debounceMs))}registerAction(t){if(!t||!t.value)throw new Error("Action must have a value property");this.state.externalActions||(this.state.externalActions=[]);const n=this.state.externalActions.findIndex(o=>o.value===t.value&&o.related_field===t.related_field);n>=0?this.state.externalActions[n]=t:this.state.externalActions.push(t)}findFormElementByFieldPath(t){if(!this.state.formRoot)return null;if(!this.state.config.readonly){let a=this.state.formRoot.querySelector(`[name="${t}"]`);if(a)return a;const l=[t,t.replace(/\[(\d+)\]/g,"[$1]"),t.replace(/\./g,"[")+"]".repeat((t.match(/\./g)||[]).length)];for(const r of l)if(a=this.state.formRoot.querySelector(`[name="${r}"]`),a)return a}const n=this.findSchemaElement(t);if(!n)return null;const o=this.state.formRoot.querySelectorAll(".fb-field-wrapper");for(const a of o){const l=n.label||n.key,r=a.querySelector("label");if(r&&(r.textContent===l||r.textContent===`${l}*`)){let i=a.querySelector(".field-placeholder");return i||(i=document.createElement("div"),i.className="field-placeholder",i.style.display="none",a.appendChild(i)),i}}return null}findSchemaElement(t){if(!this.state.schema||!this.state.schema.elements)return null;let n=this.state.schema.elements,o=null;const a=t.replace(/\[\d+\]/g,"").split(".").filter(Boolean);for(const l of a){if(o=n.find(r=>r.key===l)||null,!o)return null;"elements"in o&&o.elements&&(n=o.elements)}return o}resolveActionLabel(t,n,o,a=!1){if(o&&"actions"in o&&o.actions){const l=o.actions.find(r=>r.key===t);if(l&&l.label)return l.label}if(a&&this.state.schema&&"actions"in this.state.schema&&this.state.schema.actions){const l=this.state.schema.actions.find(r=>r.key===t);if(l&&l.label)return l.label}return n||t}renderFormLevelActions(t,n=[]){if(!this.state.formRoot)return;const o=this.state.formRoot.querySelector(".form-level-actions-container");o&&o.remove();const a=document.createElement("div");a.className="form-level-actions-container mt-6 pt-4 flex flex-wrap gap-3 justify-center",a.style.cssText=`
321
361
  border-top: var(--fb-border-width) solid var(--fb-border-color);
322
- `,t.forEach(r=>{const l=document.createElement("button");l.type="button",Ce(l,!0);const s=n.includes(r),i=this.resolveActionLabel(r.key,r.label,null,s);l.textContent=i,l.addEventListener("click",d=>{d.preventDefault(),d.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(r.value,r.key,null)}),a.appendChild(l)}),this.state.formRoot.appendChild(a)}renderExternalActions(){if(!this.state.externalActions||!Array.isArray(this.state.externalActions))return;const t=new Map,n=[],o=[];this.state.externalActions.forEach(r=>{!r.key||!r.value||(r.related_field?(t.has(r.related_field)||t.set(r.related_field,[]),t.get(r.related_field).push(r)):n.push(r))}),t.forEach((r,l)=>{const s=this.findFormElementByFieldPath(l);if(!s){console.warn(`External action: Could not find form element for field "${l}", treating as form-level actions`),o.push(...r);return}let i=s.closest(".fb-field-wrapper");if(i||(i=s.parentElement),!i){console.warn(`External action: Could not find wrapper for field "${l}"`);return}const d=i.querySelector(".external-actions-container");d&&d.remove();const u=document.createElement("div");u.className="external-actions-container mt-3 flex flex-wrap gap-2";const c=this.findSchemaElement(l);r.forEach(p=>{const v=document.createElement("button");v.type="button",Ce(v,!1);const f=this.resolveActionLabel(p.key,p.label,c);v.textContent=f,v.addEventListener("click",h=>{h.preventDefault(),h.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(p.value,p.key,p.related_field)}),u.appendChild(v)}),i.appendChild(u)});const a=[...n,...o];a.length>0&&this.renderFormLevelActions(a,n)}handlePrefillHintClick(t){const n=t.target;if(!n.classList.contains("fb-prefill-hint"))return;t.preventDefault(),t.stopPropagation();const o=n.getAttribute("data-hint-values"),a=n.getAttribute("data-root-hint")==="true",r=n.getAttribute("data-container-key");if(!o||!a&&!r){console.warn("Prefill hint missing required data attributes");return}try{const l=JSON.parse(o);for(const s in l){const i=a?s:`${r}.${s}`,d=l[s];this.updateField(i,d)}}catch(l){console.error("Error parsing prefill hint values:",l)}}createRootPrefillHints(t){const n=document.createElement("div");return n.className="fb-prefill-hints flex flex-wrap gap-2 mb-4",t.forEach(o=>{const a=document.createElement("button");a.type="button",a.className="fb-prefill-hint",o.icon?a.textContent=`${o.icon} ${o.label}`:a.textContent=o.label,a.setAttribute("data-hint-values",JSON.stringify(o.values)),a.setAttribute("data-root-hint","true"),n.appendChild(a)}),n}renderForm(t,n,o,a){const r=O(n);if(r.length>0){console.error("Schema validation errors:",r);return}this.state.formRoot=t,this.state.schema=n,this.state.externalActions=a||null,H(t),t.setAttribute("data-fb-root","true"),At(t,this.state.config.theme);const l=document.createElement("div");if(l.className="space-y-6",n.prefillHints&&!this.state.config.readonly){const d=this.createRootPrefillHints(n.prefillHints);l.appendChild(d)}const s=document.createElement("div"),i=n.columns||1;i===1?s.className="space-y-4":s.className=`grid grid-cols-${i} gap-4`,n.elements.forEach(d=>{if(d.hidden)return;const u=X(d,{path:"",prefill:o||{},formData:o||{},state:this.state,instance:this});s.appendChild(u)}),l.appendChild(s),t.appendChild(l),this.state.config.readonly||t.addEventListener("click",this.handlePrefillHintClick.bind(this)),this.state.config.readonly&&this.state.externalActions&&Array.isArray(this.state.externalActions)&&this.renderExternalActions()}validateForm(t=!1){if(!this.state.schema||!this.state.formRoot)return{valid:!0,errors:[],data:{}};const n=[],o={},a=(r,l,s=null)=>{const i=r.key,d={scopeRoot:s||this.state.formRoot,state:this.state,instance:this,path:l.path,skipValidation:t},u=Mt(r,i,d);return u!==null?(n.push(...u.errors),u.value):(console.warn(`Unknown field type "${r.type}" for key "${i}"`),null)};return vt(a),this.state.schema.elements.forEach(r=>{if(r.enableIf)try{if(!A(r.enableIf,o))return}catch(l){console.error(`Error evaluating enableIf for field "${r.key}" during validation:`,l)}r.hidden?o[r.key]=r.default!==void 0?r.default:null:o[r.key]=a(r,{path:""})}),{valid:n.length===0,errors:n,data:o}}getFormData(){return this.validateForm(!1)}submitForm(){const t=this.validateForm(!1);return t.valid&&typeof window!="undefined"&&window.parent&&window.parent.postMessage({type:"formSubmit",data:t.data,schema:this.state.schema},"*"),t}saveDraft(){const t=this.validateForm(!0);return typeof window!="undefined"&&window.parent&&window.parent.postMessage({type:"formDraft",data:t.data,schema:this.state.schema},"*"),t}clearForm(){if(!this.state.schema||!this.state.formRoot){console.warn("clearForm: Form not initialized. Call renderForm() first.");return}const t=this.state.schema,n=this.state.formRoot,o=this.state.externalActions,a=this.buildHiddenFieldsData(t.elements);this.renderForm(n,t,a,o||void 0)}buildHiddenFieldsData(t){const n={};for(const o of t){const a=o.key;if(o.hidden&&o.default!==void 0&&(n[a]=o.default),o.type==="container"||o.type==="group"){const r=o,l=this.buildHiddenFieldsData(r.elements);Object.keys(l).length>0&&(a in n?typeof n[a]=="object"&&n[a]!==null&&!Array.isArray(n[a])&&(n[a]={...n[a],...l}):n[a]=l)}}return n}setFormData(t){if(!this.state.schema||!this.state.formRoot){console.warn("setFormData: Form not initialized. Call renderForm() first.");return}for(const n in t)this.updateField(n,t[n])}updateField(t,n){if(!this.state.schema||!this.state.formRoot){console.warn("updateField: Form not initialized. Call renderForm() first.");return}const o=this.findSchemaElement(t);if(!o){console.warn(`updateField: Schema element not found for path "${t}"`);return}const a=this.findFormElementByFieldPath(t);if(!a){console.warn(`updateField: DOM element not found for path "${t}"`);return}this.updateFieldValue(a,o,t,n),this.reevaluateConditionalFields(),(this.state.config.onChange||this.state.config.onFieldChange)&&this.triggerOnChange(t,n)}updateFieldValue(t,n,o,a){const r={scopeRoot:this.state.formRoot,state:this.state,instance:this,path:""};zt(n,o,a,r)||console.warn(`updateField: No updater found for field type "${n.type}" at path "${o}"`)}reevaluateConditionalFields(){if(!this.state.schema||!this.state.formRoot)return;const t=this.validateForm(!0).data,n=(o,a)=>{o.forEach(r=>{var l,s,i;const d=a?`${a}.${r.key}`:r.key;if(r.enableIf){let u=null;if(a){const c=a.match(/^(.+)\[(\d+)\]$/);if(c){const p=c[1],v=c[2],f=this.state.formRoot.querySelector(`[data-container-item="${p}[${v}]"]`);f&&(u=f.querySelector(`[data-field-key="${r.key}"]`))}else{const p=this.state.formRoot.querySelector(`[data-container="${a}"]`);p&&(u=p.querySelector(`[data-field-key="${r.key}"]`))}}else u=this.state.formRoot.querySelector(`[data-field-key="${r.key}"]`);if(u){const c=u;try{let p;((l=r.enableIf.scope)!=null?l:"relative")==="relative"&&a&&(p=I(t,a));const v=A(r.enableIf,t,p),f=c.getAttribute("data-conditionally-disabled")==="true";if(v&&f){const h=a?I(t,a):t,b=X(r,{path:a,prefill:h&&typeof h=="object"?h:{},formData:t,state:this.state,instance:this});(s=c.parentNode)==null||s.replaceChild(b,c)}else if(!v&&!f){const h=document.createElement("div");h.className="fb-field-wrapper-disabled",h.style.display="none",h.setAttribute("data-field-key",r.key),h.setAttribute("data-conditionally-disabled","true"),(i=c.parentNode)==null||i.replaceChild(h,c)}}catch(p){console.error(`Error re-evaluating enableIf for field "${r.key}" at path "${d}":`,p)}}}if((r.type==="container"||r.type==="group")&&"elements"in r&&r.elements){const u=t==null?void 0:t[r.key];Array.isArray(u)?u.forEach((c,p)=>{n(r.elements,`${d}[${p}]`)}):n(r.elements,d)}})};n(this.state.schema.elements,"")}destroy(){var t;this.state.debounceTimer!==null&&(clearTimeout(this.state.debounceTimer),this.state.debounceTimer=null),this.state.resourceIndex.clear(),this.state.formRoot&&H(this.state.formRoot),this.state.formRoot=null,this.state.schema=null,this.state.externalActions=null,this.state.config.verboseErrors&&((t=globalThis.__formBuilderInstances)==null||t.delete(this.instanceId))}}function $e(e){return new D(e)}return typeof window!="undefined"&&(window.FormBuilder=D,window.createFormBuilder=$e,window.validateSchema=O),F.FormBuilderInstance=D,F.createFormBuilder=$e,F.default=D,F.defaultTheme=M,F.exampleThemes=Tt,F.validateSchema=O,Object.defineProperty(F,"__esModule",{value:!0}),F})({});
362
+ `,t.forEach(l=>{const r=document.createElement("button");r.type="button",we(r,!0);const i=n.includes(l),s=this.resolveActionLabel(l.key,l.label,null,i);r.textContent=s,r.addEventListener("click",u=>{u.preventDefault(),u.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(l.value,l.key,null)}),a.appendChild(r)}),this.state.formRoot.appendChild(a)}renderExternalActions(){if(!this.state.externalActions||!Array.isArray(this.state.externalActions))return;const t=new Map,n=[],o=[];this.state.externalActions.forEach(l=>{!l.key||!l.value||(l.related_field?(t.has(l.related_field)||t.set(l.related_field,[]),t.get(l.related_field).push(l)):n.push(l))}),t.forEach((l,r)=>{const i=this.findFormElementByFieldPath(r);if(!i){console.warn(`External action: Could not find form element for field "${r}", treating as form-level actions`),o.push(...l);return}let s=i.closest(".fb-field-wrapper");if(s||(s=i.parentElement),!s){console.warn(`External action: Could not find wrapper for field "${r}"`);return}const u=s.querySelector(".external-actions-container");u&&u.remove();const p=document.createElement("div");p.className="external-actions-container mt-3 flex flex-wrap gap-2";const c=this.findSchemaElement(r);l.forEach(h=>{const f=document.createElement("button");f.type="button",we(f,!1);const m=this.resolveActionLabel(h.key,h.label,c);f.textContent=m,f.addEventListener("click",v=>{v.preventDefault(),v.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(h.value,h.key,h.related_field)}),p.appendChild(f)}),s.appendChild(p)});const a=[...n,...o];a.length>0&&this.renderFormLevelActions(a,n)}handlePrefillHintClick(t){const n=t.target;if(!n.classList.contains("fb-prefill-hint"))return;t.preventDefault(),t.stopPropagation();const o=n.getAttribute("data-hint-values"),a=n.getAttribute("data-root-hint")==="true",l=n.getAttribute("data-container-key");if(!o||!a&&!l){console.warn("Prefill hint missing required data attributes");return}try{const r=JSON.parse(o);for(const i in r){const s=a?i:`${l}.${i}`,u=r[i];this.updateField(s,u)}}catch(r){console.error("Error parsing prefill hint values:",r)}}createRootPrefillHints(t){const n=document.createElement("div");return n.className="fb-prefill-hints flex flex-wrap gap-2 mb-4",t.forEach(o=>{const a=document.createElement("button");a.type="button",a.className="fb-prefill-hint",o.icon?a.textContent=`${o.icon} ${o.label}`:a.textContent=o.label,a.setAttribute("data-hint-values",JSON.stringify(o.values)),a.setAttribute("data-root-hint","true"),n.appendChild(a)}),n}renderForm(t,n,o,a){const l=U(n);if(l.length>0){console.error("Schema validation errors:",l);return}this.state.formRoot=t,this.state.schema=n,this.state.externalActions=a||null,M(t),t.setAttribute("data-fb-root","true"),Mt(t,this.state.config.theme);const r=document.createElement("div");if(r.className="space-y-6",n.prefillHints&&!this.state.config.readonly){const u=this.createRootPrefillHints(n.prefillHints);r.appendChild(u)}const i=document.createElement("div"),s=n.columns||1;s===1?i.className="space-y-4":i.className=`grid grid-cols-${s} gap-4`,n.elements.forEach(u=>{if(u.hidden)return;const p=Z(u,{path:"",prefill:o||{},formData:o||{},state:this.state,instance:this});i.appendChild(p)}),r.appendChild(i),t.appendChild(r),this.state.config.readonly||t.addEventListener("click",this.handlePrefillHintClick.bind(this)),this.state.config.readonly&&this.state.externalActions&&Array.isArray(this.state.externalActions)&&this.renderExternalActions()}validateForm(t=!1){if(!this.state.schema||!this.state.formRoot)return{valid:!0,errors:[],data:{}};const n=[],o={},a=(l,r,i=null)=>{const s=l.key,u={scopeRoot:i||this.state.formRoot,state:this.state,instance:this,path:r.path,skipValidation:t},p=zt(l,s,u);return p!==null?(n.push(...p.errors),p.value):(console.warn(`Unknown field type "${l.type}" for key "${s}"`),null)};return yt(a),this.state.schema.elements.forEach(l=>{if(l.enableIf)try{if(!T(l.enableIf,o))return}catch(r){console.error(`Error evaluating enableIf for field "${l.key}" during validation:`,r)}l.hidden?o[l.key]=l.default!==void 0?l.default:null:o[l.key]=a(l,{path:""})}),{valid:n.length===0,errors:n,data:o}}getFormData(){return this.validateForm(!1)}submitForm(){const t=this.validateForm(!1);return t.valid&&typeof window!="undefined"&&window.parent&&window.parent.postMessage({type:"formSubmit",data:t.data,schema:this.state.schema},"*"),t}saveDraft(){const t=this.validateForm(!0);return typeof window!="undefined"&&window.parent&&window.parent.postMessage({type:"formDraft",data:t.data,schema:this.state.schema},"*"),t}clearForm(){if(!this.state.schema||!this.state.formRoot){console.warn("clearForm: Form not initialized. Call renderForm() first.");return}const t=this.state.schema,n=this.state.formRoot,o=this.state.externalActions,a=this.buildHiddenFieldsData(t.elements);this.renderForm(n,t,a,o||void 0)}buildHiddenFieldsData(t){const n={};for(const o of t){const a=o.key;if(o.hidden&&o.default!==void 0&&(n[a]=o.default),o.type==="container"||o.type==="group"){const l=o,r=this.buildHiddenFieldsData(l.elements);Object.keys(r).length>0&&(a in n?typeof n[a]=="object"&&n[a]!==null&&!Array.isArray(n[a])&&(n[a]={...n[a],...r}):n[a]=r)}}return n}setFormData(t){if(!this.state.schema||!this.state.formRoot){console.warn("setFormData: Form not initialized. Call renderForm() first.");return}for(const n in t)this.updateField(n,t[n])}updateField(t,n){if(!this.state.schema||!this.state.formRoot){console.warn("updateField: Form not initialized. Call renderForm() first.");return}const o=this.findSchemaElement(t);if(!o){console.warn(`updateField: Schema element not found for path "${t}"`);return}const a=this.findFormElementByFieldPath(t);if(!a){console.warn(`updateField: DOM element not found for path "${t}"`);return}this.updateFieldValue(a,o,t,n),this.reevaluateConditionalFields(),(this.state.config.onChange||this.state.config.onFieldChange)&&this.triggerOnChange(t,n)}updateFieldValue(t,n,o,a){const l={scopeRoot:this.state.formRoot,state:this.state,instance:this,path:""};It(n,o,a,l)||console.warn(`updateField: No updater found for field type "${n.type}" at path "${o}"`)}reevaluateConditionalFields(){if(!this.state.schema||!this.state.formRoot)return;const t=this.validateForm(!0).data,n=(o,a)=>{o.forEach(l=>{var r,i,s;const u=a?`${a}.${l.key}`:l.key;if(l.enableIf){let p=null;if(a){const c=a.match(/^(.+)\[(\d+)\]$/);if(c){const h=c[1],f=c[2],m=this.state.formRoot.querySelector(`[data-container-item="${h}[${f}]"]`);m&&(p=m.querySelector(`[data-field-key="${l.key}"]`))}else{const h=this.state.formRoot.querySelector(`[data-container="${a}"]`);h&&(p=h.querySelector(`[data-field-key="${l.key}"]`))}}else p=this.state.formRoot.querySelector(`[data-field-key="${l.key}"]`);if(p){const c=p;try{let h;((r=l.enableIf.scope)!=null?r:"relative")==="relative"&&a&&(h=z(t,a));const f=T(l.enableIf,t,h),m=c.getAttribute("data-conditionally-disabled")==="true";if(f&&m){const v=a?z(t,a):t,g=Z(l,{path:a,prefill:v&&typeof v=="object"?v:{},formData:t,state:this.state,instance:this});(i=c.parentNode)==null||i.replaceChild(g,c)}else if(!f&&!m){const v=document.createElement("div");v.className="fb-field-wrapper-disabled",v.style.display="none",v.setAttribute("data-field-key",l.key),v.setAttribute("data-conditionally-disabled","true"),(s=c.parentNode)==null||s.replaceChild(v,c)}}catch(h){console.error(`Error re-evaluating enableIf for field "${l.key}" at path "${u}":`,h)}}}if((l.type==="container"||l.type==="group")&&"elements"in l&&l.elements){const p=t==null?void 0:t[l.key];Array.isArray(p)?p.forEach((c,h)=>{n(l.elements,`${u}[${h}]`)}):n(l.elements,u)}})};n(this.state.schema.elements,"")}destroy(){var t;this.state.debounceTimer!==null&&(clearTimeout(this.state.debounceTimer),this.state.debounceTimer=null),this.state.resourceIndex.clear(),this.state.formRoot&&M(this.state.formRoot),this.state.formRoot=null,this.state.schema=null,this.state.externalActions=null,this.state.config.verboseErrors&&((t=globalThis.__formBuilderInstances)==null||t.delete(this.instanceId))}}function Le(e){return new O(e)}return typeof window!="undefined"&&(window.FormBuilder=O,window.createFormBuilder=Le,window.validateSchema=U),N.FormBuilderInstance=O,N.createFormBuilder=Le,N.default=O,N.defaultTheme=H,N.exampleThemes=Ht,N.validateSchema=U,Object.defineProperty(N,"__esModule",{value:!0}),N})({});