@dmitryvim/form-builder 0.2.24 → 0.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -11
- package/dist/browser/formbuilder.min.js +122 -122
- package/dist/browser/formbuilder.v0.2.26.min.js +606 -0
- package/dist/cjs/index.cjs +263 -151
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +259 -151
- package/dist/esm/index.js.map +1 -1
- package/dist/form-builder.js +122 -122
- package/dist/types/types/schema.d.ts +2 -0
- package/dist/types/utils/helpers.d.ts +6 -0
- package/package.json +1 -1
- package/dist/browser/formbuilder.v0.2.24.min.js +0 -606
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
var FormBuilder=(function(Ee){"use strict";function $(e,t,n){const r=t.config.locale||"en",o=t.config.translations[r],a=t.config.translations.en;let l=(o==null?void 0:o[e])||(a==null?void 0:a[e])||e;if(n)for(const[i,c]of Object.entries(n))l=l.replace(new RegExp(`\\{${i}\\}`,"g"),String(c));return l}function mn(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 hn(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 vn(e,t,n){e.maxSizeMB&&t.push($("hintMaxSize",n,{size:e.maxSizeMB}))}function gn(e,t,n){var r;(r=e.accept)!=null&&r.extensions&&t.push($("hintFormats",n,{formats:e.accept.extensions.map(o=>o.toUpperCase()).join(",")}))}function bn(e,t,n){e.pattern&&t.push($("hintPattern",n,{pattern:e.pattern}))}function be(e,t){const n=[];return mn(e,n,t),e.type!=="slider"&&hn(e,n,t),vn(e,n,t),gn(e,n,t),bn(e,n,t),n.join(" \u2022 ")}function tt(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 i in a.values)e.elements.some(c=>c.key===i)||t.push(`schema.prefillHints[${l}] references non-existent field "${i}"`)})}function n(o,a){var l,i;const c=new Set;for(const s of o)if(s.type==="richinput"&&s.flatOutput){const f=s,d=(l=f.textKey)!=null?l:"text",p=(i=f.filesKey)!=null?i:"files";for(const u of o)u!==s&&(u.key===d&&t.push(`${a}: RichInput "${s.key}" flatOutput textKey "${d}" collides with element key "${u.key}"`),u.key===p&&t.push(`${a}: RichInput "${s.key}" flatOutput filesKey "${p}" collides with element key "${u.key}"`));c.has(d)&&t.push(`${a}: RichInput "${s.key}" flatOutput textKey "${d}" collides with another flatOutput key`),c.has(p)&&t.push(`${a}: RichInput "${s.key}" flatOutput filesKey "${p}" collides with another flatOutput key`),c.add(d),c.add(p)}else c.has(s.key)&&t.push(`${a}: Element key "${s.key}" collides with a flatOutput richinput key`),c.add(s.key)}function r(o,a){o.forEach((l,i)=>{const c=`${a}[${i}]`;if(l.type||t.push(`${c}: missing type`),l.key||t.push(`${c}: missing key`),l.enableIf){const s=l.enableIf;(!s.key||typeof s.key!="string")&&t.push(`${c}: enableIf must have a 'key' property of type string`),"equals"in s||t.push(`${c}: enableIf must have at least one operator (equals, etc.)`)}if(l.type==="group"&&"elements"in l&&l.elements&&r(l.elements,`${c}.elements`),l.type==="container"&&l.elements){if("columns"in l&&l.columns!==void 0){const s=l.columns,f=[1,2,3,4];(!Number.isInteger(s)||!f.includes(s))&&t.push(`${c}: 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((f,d)=>{if((!f.label||typeof f.label!="string")&&t.push(`${c}: prefillHints[${d}] must have a 'label' property of type string`),!f.values||typeof f.values!="object")t.push(`${c}: prefillHints[${d}] must have a 'values' property of type object`);else for(const p in f.values)l.elements.some(u=>u.key===p)||t.push(`container "${l.key}": prefillHints[${d}] references non-existent field "${p}"`)})}r(l.elements,`${c}.elements`),n(l.elements,`${c}.elements`)}if(l.type==="select"&&l.options){const s=l.default;s!=null&&s!==""&&(l.options.some(f=>f.value===s)||t.push(`${c}: default "${s}" not in options`))}})}return Array.isArray(e.elements)&&(r(e.elements,"elements"),n(e.elements,"elements")),t}function le(e,t,n){return e.readonly===!0||t.config.readonly===!0||(n==null?void 0:n.inheritedReadonly)===!0}function Oe(e){return e&&typeof e=="object"&&e.constructor===Object}function J(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function ye(e,t){return e?`${e}.${t}`:t}function ve(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function yn(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function xt(e){return e==null?"":typeof e=="object"?JSON.stringify(e):String(e)}function Et(e){if(e==="")return null;try{return JSON.parse(e)}catch(t){return e}}function ze(e,t){const n=document.createElement("input");return n.type="hidden",n.name=e,n.setAttribute("data-hidden-field","true"),n.value=xt(t),n}function nt(e,t){if(!e||typeof e!="object")return;const n=t.match(/[^.[\]]+|\[\d+\]/g);if(!n||n.length===0)return;let r=e;for(const o of n){if(r==null)return;if(o.startsWith("[")&&o.endsWith("]")){const a=parseInt(o.slice(1,-1),10);if(!Array.isArray(r)||isNaN(a))return;r=r[a]}else r=r[o]}return r}function Te(e,t,n){var r;if(!e||!e.key)throw new Error("Invalid enableIf condition: must have a 'key' property");const o=(r=e.scope)!=null?r:"relative";let a;if(o==="relative")a=n!=null?n:t;else if(o==="absolute")a=t;else throw new Error(`Invalid enableIf scope: must be "relative" or "absolute" (got "${o}")`);const l=nt(a,e.key);if("equals"in e)return xn(l,e.equals);throw new Error("Invalid enableIf condition: no recognized operator (equals, etc.)")}function xn(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 Ie(e,t,n=!1){const r=document.createElement("span");r.className="char-counter",r.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 o=()=>{const a=t.value.length,l=e.minLength,i=e.maxLength;if(l==null&&i==null){r.textContent="";return}a===0||l!=null&&a<l?(l!=null&&i!=null?r.textContent=`${l}-${i}`:i!=null?r.textContent=`\u2264${i}`:l!=null&&(r.textContent=`\u2265${l}`),r.style.color="var(--fb-text-secondary-color)"):i!=null&&a>i?(r.textContent=`${a}/${i}`,r.style.color="var(--fb-error-color)"):(i!=null?r.textContent=`${a}/${i}`:r.textContent=`${a}`,r.style.color="var(--fb-text-secondary-color)")};return t.addEventListener("input",o),o(),r}function En(e,t,n,r){const o=t.state,a=le(e,o,t),l=document.createElement("div");l.style.cssText="position: relative;";const i=document.createElement("input");if(i.type="text",i.className="w-full rounded-lg",i.style.cssText=`
|
|
11
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
12
|
+
padding-right: 60px;
|
|
13
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
14
|
+
border-radius: var(--fb-border-radius);
|
|
15
|
+
background-color: ${a?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
|
|
16
|
+
color: var(--fb-text-color);
|
|
17
|
+
font-size: var(--fb-font-size);
|
|
18
|
+
font-family: var(--fb-font-family);
|
|
19
|
+
transition: all var(--fb-transition-duration) ease-in-out;
|
|
20
|
+
width: 100%;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
`,i.name=r,i.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",i.value=t.prefill[e.key]||e.default||"",i.readOnly=a,a||(i.addEventListener("focus",()=>{i.style.borderColor="var(--fb-border-focus-color)",i.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",i.style.outlineOffset="0"}),i.addEventListener("blur",()=>{i.style.borderColor="var(--fb-border-color)",i.style.outline="none"}),i.addEventListener("mouseenter",()=>{document.activeElement!==i&&(i.style.borderColor="var(--fb-border-hover-color)")}),i.addEventListener("mouseleave",()=>{document.activeElement!==i&&(i.style.borderColor="var(--fb-border-color)")})),!a&&t.instance){const c=()=>{const s=i.value===""?null:i.value;t.instance.triggerOnChange(r,s)};i.addEventListener("blur",c),i.addEventListener("input",c)}if(l.appendChild(i),!a&&(e.minLength!=null||e.maxLength!=null)){const c=Ie(e,i,!1);l.appendChild(c)}n.appendChild(l)}function Cn(e,t,n,r){var o,a;const l=t.state,i=le(e,l,t),c=t.prefill[e.key]||[],s=Array.isArray(c)?[...c]:[],f=(o=e.minCount)!=null?o:1,d=(a=e.maxCount)!=null?a:1/0;for(;s.length<f;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function u(){p.querySelectorAll(".multiple-text-item").forEach((b,y)=>{const w=b.querySelector("input");w&&(w.name=`${r}[${y}]`)})}function m(b="",y=-1){const w=document.createElement("div");w.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=`
|
|
23
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
24
|
+
padding-right: 60px;
|
|
25
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
26
|
+
border-radius: var(--fb-border-radius);
|
|
27
|
+
background-color: ${i?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
|
|
28
|
+
color: var(--fb-text-color);
|
|
29
|
+
font-size: var(--fb-font-size);
|
|
30
|
+
font-family: var(--fb-font-family);
|
|
31
|
+
transition: all var(--fb-transition-duration) ease-in-out;
|
|
32
|
+
width: 100%;
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
`,x.placeholder=e.placeholder||$("placeholderText",l),x.value=b,x.readOnly=i,i||(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)")})),!i&&t.instance){const k=()=>{const z=x.value===""?null:x.value;t.instance.triggerOnChange(x.name,z)};x.addEventListener("blur",k),x.addEventListener("input",k)}if(C.appendChild(x),!i&&(e.minLength!=null||e.maxLength!=null)){const k=Ie(e,x,!1);C.appendChild(k)}return w.appendChild(C),y===-1?p.appendChild(w):p.insertBefore(w,p.children[y]),u(),w}function v(){if(i)return;const b=p.querySelectorAll(".multiple-text-item"),y=b.length;b.forEach(w=>{let C=w.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=`
|
|
35
|
+
color: var(--fb-error-color);
|
|
36
|
+
background-color: transparent;
|
|
37
|
+
transition: background-color var(--fb-transition-duration);
|
|
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 k=Array.from(p.children).indexOf(w);p.children.length>f&&(s.splice(k,1),w.remove(),u(),h(),v())},w.appendChild(C));const x=y<=f;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let g=null,E=null;if(!i){g=document.createElement("div"),g.className="flex items-center gap-3 mt-2";const b=document.createElement("button");b.type="button",b.className="add-text-btn px-3 py-1 rounded",b.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
|
+
`,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),v()},E=document.createElement("span"),E.className="text-sm text-gray-500",g.appendChild(b),g.appendChild(E),n.appendChild(g)}function h(){if(!g||!E)return;const b=g.querySelector(".add-text-btn");if(b){const y=s.length>=d;b.disabled=y,b.style.opacity=y?"0.5":"1",b.style.pointerEvents=y?"none":"auto"}E.textContent=`${s.length}/${d===1/0?"\u221E":d}`}s.forEach(b=>m(b)),h(),v()}function Ct(e,t,n){var r,o,a;const l=[],{scopeRoot:i,skipValidation:c}=n,s=(d,p)=>{var u,m;if(!d)return;const v=`error-${d.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(v);p?(d.classList.add("invalid"),d.title=p,g||(g=document.createElement("div"),g.id=v,g.className="error-message",g.style.cssText=`
|
|
45
|
+
color: var(--fb-error-color);
|
|
46
|
+
font-size: var(--fb-font-size-small);
|
|
47
|
+
margin-top: 0.25rem;
|
|
48
|
+
`,d.nextSibling?(u=d.parentNode)==null||u.insertBefore(g,d.nextSibling):(m=d.parentNode)==null||m.appendChild(g)),g.textContent=p,g.style.display="block"):(d.classList.remove("invalid"),d.title="",g&&g.remove())},f=(d,p,u)=>{let m=!1;const{state:v}=n;if(!c&&p){if(e.minLength!==void 0&&e.minLength!==null&&p.length<e.minLength){const g=$("minLength",v,{min:e.minLength});l.push(`${u}: ${g}`),s(d,g),m=!0}else if(e.maxLength!==void 0&&e.maxLength!==null&&p.length>e.maxLength){const g=$("maxLength",v,{max:e.maxLength});l.push(`${u}: ${g}`),s(d,g),m=!0}else if(e.pattern)try{if(!new RegExp(e.pattern).test(p)){const g=$("patternMismatch",v);l.push(`${u}: ${g}`),s(d,g),m=!0}}catch(g){const E=$("invalidPattern",v);l.push(`${u}: ${E}`),s(d,E),m=!0}}m||s(d,null)};if(e.multiple){const d=i.querySelectorAll(`[name^="${t}["]`),p=[],u=[];if(d.forEach((m,v)=>{var g;const E=(g=m==null?void 0:m.value)!=null?g:"";u.push(E),p.push(E===""?null:E),f(m,E,`${t}[${v}]`)}),!c){const{state:m}=n,v=(r=e.minCount)!=null?r:1,g=(o=e.maxCount)!=null?o:1/0,E=u.filter(h=>h.trim()!=="");e.required&&E.length===0&&l.push(`${t}: ${$("required",m)}`),E.length<v&&l.push(`${t}: ${$("minItems",m,{min:v})}`),E.length>g&&l.push(`${t}: ${$("maxItems",m,{max:g})}`)}return{value:p,errors:l}}else{const d=i.querySelector(`[name$="${t}"]`),p=(a=d==null?void 0:d.value)!=null?a:"";if(!c&&e.required&&p===""){const u=$("required",n.state);return l.push(`${t}: ${u}`),s(d,u),{value:null,errors:l}}return d&&f(d,p,t),{value:p===""?null:p,errors:l}}}function wt(e,t,n,r){const{scopeRoot:o}=r;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateTextField: Expected array for multiple field "${t}", got ${typeof n}`);return}const a=o.querySelectorAll(`[name^="${t}["]`);a.forEach((l,i)=>{i<n.length&&(l.value=n[i]!=null?String(n[i]):"",l.classList.remove("invalid"),l.title="")}),n.length!==a.length&&console.warn(`updateTextField: Multiple field "${t}" has ${a.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const a=o.querySelector(`[name="${t}"]`);a&&(a.value=n!=null?String(n):"",a.classList.remove("invalid"),a.title="")}}function kt(e){e.style.overflow="hidden",e.style.resize="none";const t=(e.value.match(/\n/g)||[]).length+1;e.rows=Math.max(1,t);const n=()=>{e.isConnected&&(e.style.height="0",e.style.height=`${e.scrollHeight}px`)};e.addEventListener("input",n),setTimeout(()=>{e.isConnected&&n()},0)}function wn(e,t,n,r){const o=t.state,a=le(e,o,t),l=document.createElement("div");l.style.cssText="position: relative;";const i=document.createElement("textarea");if(i.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",i.style.cssText="padding-bottom: 24px;",i.name=r,i.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",i.rows=e.rows||4,i.value=t.prefill[e.key]||e.default||"",i.readOnly=a,!a&&t.instance){const c=()=>{const s=i.value===""?null:i.value;t.instance.triggerOnChange(r,s)};i.addEventListener("blur",c),i.addEventListener("input",c)}if((e.autoExpand||a)&&kt(i),l.appendChild(i),!a&&(e.minLength!=null||e.maxLength!=null)){const c=Ie(e,i,!0);l.appendChild(c)}n.appendChild(l)}function kn(e,t,n,r){var o,a;const l=t.state,i=le(e,l,t),c=t.prefill[e.key]||[],s=Array.isArray(c)?[...c]:[],f=(o=e.minCount)!=null?o:1,d=(a=e.maxCount)!=null?a:1/0;for(;s.length<f;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function u(){p.querySelectorAll(".multiple-textarea-item").forEach((b,y)=>{const w=b.querySelector("textarea");w&&(w.name=`${r}[${y}]`)})}function m(b="",y=-1){const w=document.createElement("div");w.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",l),x.rows=e.rows||4,x.value=b,x.readOnly=i,!i&&t.instance){const k=()=>{const z=x.value===""?null:x.value;t.instance.triggerOnChange(x.name,z)};x.addEventListener("blur",k),x.addEventListener("input",k)}if((e.autoExpand||i)&&kt(x),C.appendChild(x),!i&&(e.minLength!=null||e.maxLength!=null)){const k=Ie(e,x,!0);C.appendChild(k)}return w.appendChild(C),y===-1?p.appendChild(w):p.insertBefore(w,p.children[y]),u(),w}function v(){if(i)return;const b=p.querySelectorAll(".multiple-textarea-item"),y=b.length;b.forEach(w=>{let C=w.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 k=Array.from(p.children).indexOf(w);p.children.length>f&&(s.splice(k,1),w.remove(),u(),h(),v())},w.appendChild(C));const x=y<=f;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let g=null,E=null;if(!i){g=document.createElement("div"),g.className="flex items-center gap-3 mt-2";const b=document.createElement("button");b.type="button",b.className="add-textarea-btn px-3 py-1 rounded",b.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
|
+
`,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),v()},E=document.createElement("span"),E.className="text-sm text-gray-500",g.appendChild(b),g.appendChild(E),n.appendChild(g)}function h(){if(!g||!E)return;const b=g.querySelector(".add-textarea-btn");if(b){const y=s.length>=d;b.disabled=y,b.style.opacity=y?"0.5":"1",b.style.pointerEvents=y?"none":"auto"}E.textContent=`${s.length}/${d===1/0?"\u221E":d}`}s.forEach(b=>m(b)),h(),v()}function $n(e,t,n){return Ct(e,t,n)}function Ln(e,t,n,r){wt(e,t,n,r);const{scopeRoot:o,state:a}=r;if(e.autoExpand||le(e,a))if(e.multiple)o.querySelectorAll(`textarea[name^="${t}["]`).forEach(l=>{l.dispatchEvent(new Event("input"))});else{const l=o.querySelector(`textarea[name="${t}"]`);l&&l.dispatchEvent(new Event("input"))}}function $t(e,t){const n=document.createElement("span");n.className="number-range-hint",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 r=e.min,o=e.max;let a="";r!=null&&o!=null?a=`${r} \u2013 ${o}`:o!=null?a=`\u2264${o}`:r!=null&&(a=`\u2265${r}`),n.textContent=a;const l=()=>{const i=t.value?parseFloat(t.value):null;if(i!=null){const c=r!=null&&i<r,s=o!=null&&i>o;n.style.color=c||s?"var(--fb-error-color)":"var(--fb-text-secondary-color)"}else n.style.color="var(--fb-text-secondary-color)"};return t.addEventListener("input",l),l(),n}function Sn(e,t,n,r){const o=t.state,a=le(e,o,t),l=document.createElement("div");l.style.cssText="position: relative;";const i=document.createElement("input");if(i.type="number",i.className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",i.style.cssText="padding-right: 60px; width: 100%; box-sizing: border-box;",i.name=r,i.placeholder=e.placeholder||"0",e.min!==void 0&&(i.min=e.min.toString()),e.max!==void 0&&(i.max=e.max.toString()),e.step!==void 0&&(i.step=e.step.toString()),i.value=t.prefill[e.key]||e.default||"",i.readOnly=a,!a&&t.instance){const c=()=>{const s=i.value?parseFloat(i.value):null;t.instance.triggerOnChange(r,s)};i.addEventListener("blur",c),i.addEventListener("input",c)}if(l.appendChild(i),!a&&(e.min!=null||e.max!=null)){const c=$t(e,i);l.appendChild(c)}n.appendChild(l)}function Tn(e,t,n,r){var o,a;const l=t.state,i=le(e,l,t),c=t.prefill[e.key]||[],s=Array.isArray(c)?[...c]:[],f=(o=e.minCount)!=null?o:1,d=(a=e.maxCount)!=null?a:1/0;for(;s.length<f;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function u(){p.querySelectorAll(".multiple-number-item").forEach((b,y)=>{const w=b.querySelector("input");w&&(w.name=`${r}[${y}]`)})}function m(b="",y=-1){const w=document.createElement("div");w.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=b.toString(),x.readOnly=i,!i&&t.instance){const k=()=>{const z=x.value?parseFloat(x.value):null;t.instance.triggerOnChange(x.name,z)};x.addEventListener("blur",k),x.addEventListener("input",k)}if(C.appendChild(x),!i&&(e.min!=null||e.max!=null)){const k=$t(e,x);C.appendChild(k)}return w.appendChild(C),y===-1?p.appendChild(w):p.insertBefore(w,p.children[y]),u(),w}function v(){if(i)return;const b=p.querySelectorAll(".multiple-number-item"),y=b.length;b.forEach(w=>{let C=w.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 k=Array.from(p.children).indexOf(w);p.children.length>f&&(s.splice(k,1),w.remove(),u(),h(),v())},w.appendChild(C));const x=y<=f;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let g=null,E=null;if(!i){g=document.createElement("div"),g.className="flex items-center gap-3 mt-2";const b=document.createElement("button");b.type="button",b.className="add-number-btn px-3 py-1 rounded",b.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
|
+
`,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),v()},E=document.createElement("span"),E.className="text-sm text-gray-500",g.appendChild(b),g.appendChild(E),n.appendChild(g)}function h(){if(!g||!E)return;const b=g.querySelector(".add-number-btn");if(b){const y=s.length>=d;b.disabled=y,b.style.opacity=y?"0.5":"1",b.style.pointerEvents=y?"none":"auto"}E.textContent=`${s.length}/${d===1/0?"\u221E":d}`}s.forEach(b=>m(b)),h(),v()}function An(e,t,n){var r,o,a,l,i;const c=[],{scopeRoot:s,skipValidation:f}=n,d=(u,m)=>{var v,g;if(!u)return;const E=`error-${u.getAttribute("name")||Math.random().toString(36).substring(7)}`;let h=document.getElementById(E);m?(u.classList.add("invalid"),u.title=m,h||(h=document.createElement("div"),h.id=E,h.className="error-message",h.style.cssText=`
|
|
71
|
+
color: var(--fb-error-color);
|
|
72
|
+
font-size: var(--fb-font-size-small);
|
|
73
|
+
margin-top: 0.25rem;
|
|
74
|
+
`,u.nextSibling?(v=u.parentNode)==null||v.insertBefore(h,u.nextSibling):(g=u.parentNode)==null||g.appendChild(h)),h.textContent=m,h.style.display="block"):(u.classList.remove("invalid"),u.title="",h&&h.remove())},p=(u,m,v)=>{let g=!1;const{state:E}=n;if(!f&&e.min!==void 0&&e.min!==null&&m<e.min){const h=$("minValue",E,{min:e.min});c.push(`${v}: ${h}`),d(u,h),g=!0}else if(!f&&e.max!==void 0&&e.max!==null&&m>e.max){const h=$("maxValue",E,{max:e.max});c.push(`${v}: ${h}`),d(u,h),g=!0}g||d(u,null)};if(e.multiple){const u=s.querySelectorAll(`[name^="${t}["]`),m=[];if(u.forEach((v,g)=>{var E,h,b;const y=(E=v==null?void 0:v.value)!=null?E:"";if(y===""){m.push(null),d(v,null);return}const w=parseFloat(y);if(!f&&!Number.isFinite(w)){const x=$("notANumber",n.state);c.push(`${t}[${g}]: ${x}`),d(v,x),m.push(null);return}p(v,w,`${t}[${g}]`);const C=Number.isInteger((h=e.decimals)!=null?h:0)&&(b=e.decimals)!=null?b:0;m.push(Number(w.toFixed(C)))}),!f){const{state:v}=n,g=(r=e.minCount)!=null?r:1,E=(o=e.maxCount)!=null?o:1/0,h=m.filter(b=>b!==null);e.required&&h.length===0&&c.push(`${t}: ${$("required",v)}`),h.length<g&&c.push(`${t}: ${$("minItems",v,{min:g})}`),h.length>E&&c.push(`${t}: ${$("maxItems",v,{max:E})}`)}return{value:m,errors:c}}else{const u=s.querySelector(`[name$="${t}"]`),m=(a=u==null?void 0:u.value)!=null?a:"",{state:v}=n;if(!f&&e.required&&m===""){const h=$("required",v);return c.push(`${t}: ${h}`),d(u,h),{value:null,errors:c}}if(m==="")return d(u,null),{value:null,errors:c};const g=parseFloat(m);if(!f&&!Number.isFinite(g)){const h=$("notANumber",v);return c.push(`${t}: ${h}`),d(u,h),{value:null,errors:c}}p(u,g,t);const E=Number.isInteger((l=e.decimals)!=null?l:0)&&(i=e.decimals)!=null?i:0;return{value:Number(g.toFixed(E)),errors:c}}}function Fn(e,t,n,r){const{scopeRoot:o}=r;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateNumberField: Expected array for multiple field "${t}", got ${typeof n}`);return}const a=o.querySelectorAll(`[name^="${t}["]`);a.forEach((l,i)=>{i<n.length&&(l.value=n[i]!=null?String(n[i]):"",l.classList.remove("invalid"),l.title="")}),n.length!==a.length&&console.warn(`updateNumberField: Multiple field "${t}" has ${a.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const a=o.querySelector(`[name="${t}"]`);a&&(a.value=n!=null?String(n):"",a.classList.remove("invalid"),a.title="")}}function Nn(e,t,n,r){const o=t.state,a=le(e,o,t),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=r,l.disabled=a,(e.options||[]).forEach(i=>{const c=document.createElement("option");c.value=i.value,c.textContent=i.label,(t.prefill[e.key]||e.default)===i.value&&(c.selected=!0),l.appendChild(c)}),!a&&t.instance){const i=()=>{t.instance.triggerOnChange(r,l.value)};l.addEventListener("change",i)}if(n.appendChild(l),!a){const i=document.createElement("p");i.className="text-xs text-gray-500 mt-1",i.textContent=be(e,o),n.appendChild(i)}}function Mn(e,t,n,r){var o,a,l,i;const c=t.state,s=le(e,c,t),f=t.prefill[e.key]||[],d=Array.isArray(f)?[...f]:[],p=(o=e.minCount)!=null?o:1,u=(a=e.maxCount)!=null?a:1/0;for(;d.length<p;)d.push(e.default||((i=(l=e.options)==null?void 0:l[0])==null?void 0:i.value)||"");const m=document.createElement("div");m.className="space-y-2",n.appendChild(m);function v(){m.querySelectorAll(".multiple-select-item").forEach((w,C)=>{const x=w.querySelector("select");x&&(x.name=`${r}[${C}]`)})}function g(w="",C=-1){const x=document.createElement("div");x.className="multiple-select-item flex items-center gap-2";const k=document.createElement("select");if(k.className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",k.disabled=s,(e.options||[]).forEach(z=>{const W=document.createElement("option");W.value=z.value,W.textContent=z.label,w===z.value&&(W.selected=!0),k.appendChild(W)}),!s&&t.instance){const z=()=>{t.instance.triggerOnChange(k.name,k.value)};k.addEventListener("change",z)}return x.appendChild(k),C===-1?m.appendChild(x):m.insertBefore(x,m.children[C]),v(),x}function E(){if(s)return;const w=m.querySelectorAll(".multiple-select-item"),C=w.length;w.forEach(x=>{let k=x.querySelector(".remove-item-btn");k||(k=document.createElement("button"),k.type="button",k.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",k.innerHTML="\u2715",k.onclick=()=>{const W=Array.from(m.children).indexOf(x);m.children.length>p&&(d.splice(W,1),x.remove(),v(),y(),E())},x.appendChild(k));const z=C<=p;k.disabled=z,k.style.opacity=z?"0.5":"1",k.style.pointerEvents=z?"none":"auto"})}let h=null,b=null;if(!s){h=document.createElement("div"),h.className="flex items-center gap-3 mt-2";const w=document.createElement("button");w.type="button",w.className="add-select-btn px-3 py-1 rounded",w.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
|
+
`,w.textContent="+",w.addEventListener("mouseenter",()=>{w.style.backgroundColor="var(--fb-background-hover-color)"}),w.addEventListener("mouseleave",()=>{w.style.backgroundColor="transparent"}),w.onclick=()=>{var C,x;const k=e.default||((x=(C=e.options)==null?void 0:C[0])==null?void 0:x.value)||"";d.push(k),g(k),y(),E()},b=document.createElement("span"),b.className="text-sm text-gray-500",h.appendChild(w),h.appendChild(b),n.appendChild(h)}function y(){if(!h||!b)return;const w=h.querySelector(".add-select-btn");if(w){const C=d.length>=u;w.disabled=C,w.style.opacity=C?"0.5":"1",w.style.pointerEvents=C?"none":"auto"}b.textContent=`${d.length}/${u===1/0?"\u221E":u}`}if(d.forEach(w=>g(w)),y(),E(),!s){const w=document.createElement("p");w.className="text-xs text-gray-500 mt-1",w.textContent=be(e,c),n.appendChild(w)}}function qn(e,t,n){var r;const o=[],{scopeRoot:a,skipValidation:l}=n,i=(s,f)=>{var d,p;if(!s)return;const u=`error-${s.getAttribute("name")||Math.random().toString(36).substring(7)}`;let m=document.getElementById(u);f?(s.classList.add("invalid"),s.title=f,m||(m=document.createElement("div"),m.id=u,m.className="error-message",m.style.cssText=`
|
|
81
|
+
color: var(--fb-error-color);
|
|
82
|
+
font-size: var(--fb-font-size-small);
|
|
83
|
+
margin-top: 0.25rem;
|
|
84
|
+
`,s.nextSibling?(d=s.parentNode)==null||d.insertBefore(m,s.nextSibling):(p=s.parentNode)==null||p.appendChild(m)),m.textContent=f,m.style.display="block"):(s.classList.remove("invalid"),s.title="",m&&m.remove())},c=(s,f,d,p)=>{var u,m;if(l)return;const{state:v}=n,g=f.filter(p),E="minCount"in d&&(u=d.minCount)!=null?u:1,h="maxCount"in d&&(m=d.maxCount)!=null?m:1/0;d.required&&g.length===0&&o.push(`${s}: ${$("required",v)}`),g.length<E&&o.push(`${s}: ${$("minItems",v,{min:E})}`),g.length>h&&o.push(`${s}: ${$("maxItems",v,{max:h})}`)};if("multiple"in e&&e.multiple){const s=a.querySelectorAll(`[name^="${t}["]`),f=[];return s.forEach(d=>{var p;const u=(p=d==null?void 0:d.value)!=null?p:"";f.push(u),i(d,null)}),c(t,f,e,d=>d!==""),{value:f,errors:o}}else{const s=a.querySelector(`[name$="${t}"]`),f=(r=s==null?void 0:s.value)!=null?r:"";if(!l&&e.required&&f===""){const d=$("required",n.state);return o.push(`${t}: ${d}`),i(s,d),{value:null,errors:o}}else i(s,null);return{value:f===""?null:f,errors:o}}}function zn(e,t,n,r){const{scopeRoot:o}=r;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateSelectField: Expected array for multiple field "${t}", got ${typeof n}`);return}const a=o.querySelectorAll(`[name^="${t}["]`);a.forEach((l,i)=>{i<n.length&&(l.value=n[i]!=null?String(n[i]):"",l.querySelectorAll("option").forEach(c=>{c.selected=c.value===String(n[i])}),l.classList.remove("invalid"),l.title="")}),n.length!==a.length&&console.warn(`updateSelectField: Multiple field "${t}" has ${a.length} selects but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const a=o.querySelector(`[name="${t}"]`);a&&(a.value=n!=null?String(n):"",a.querySelectorAll("option").forEach(l=>{l.selected=l.value===String(n)}),a.classList.remove("invalid"),a.title="")}}function Ue(e){e.style.backgroundColor="var(--fb-primary-color)",e.style.color="#ffffff",e.style.borderColor="var(--fb-primary-color)"}function Pe(e){e.style.backgroundColor="transparent",e.style.color="var(--fb-text-color)",e.style.borderColor="var(--fb-border-color)"}function Lt(e,t,n,r,o){const a=e.options||[],l=document.createElement("div");l.className="fb-switcher-group",l.style.cssText=`
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
flex-direction: row;
|
|
87
|
+
flex-wrap: nowrap;
|
|
88
|
+
`;const i=[];return a.forEach((c,s)=>{const f=document.createElement("button");f.type="button",f.className="fb-switcher-btn",f.dataset.value=c.value,f.textContent=c.label,f.style.cssText=`
|
|
89
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
90
|
+
font-size: var(--fb-font-size);
|
|
91
|
+
border-width: var(--fb-border-width);
|
|
92
|
+
border-style: solid;
|
|
93
|
+
cursor: ${r?"default":"pointer"};
|
|
94
|
+
transition: background-color var(--fb-transition-duration), color var(--fb-transition-duration), border-color var(--fb-transition-duration);
|
|
95
|
+
white-space: nowrap;
|
|
96
|
+
line-height: 1.25;
|
|
97
|
+
outline: none;
|
|
98
|
+
`,a.length===1?f.style.borderRadius="var(--fb-border-radius)":s===0?(f.style.borderRadius="var(--fb-border-radius) 0 0 var(--fb-border-radius)",f.style.borderRightWidth="0"):s===a.length-1?f.style.borderRadius="0 var(--fb-border-radius) var(--fb-border-radius) 0":(f.style.borderRadius="0",f.style.borderRightWidth="0"),c.value===t?Ue(f):Pe(f),r||(f.addEventListener("click",()=>{n.value=c.value,i.forEach(d=>{d.dataset.value===c.value?Ue(d):Pe(d)}),o&&o(c.value)}),f.addEventListener("mouseenter",()=>{n.value!==c.value&&(f.style.backgroundColor="var(--fb-background-hover-color)")}),f.addEventListener("mouseleave",()=>{n.value!==c.value&&(f.style.backgroundColor="transparent")})),i.push(f),l.appendChild(f)}),l}function In(e,t,n,r){var o,a;const l=t.state,i=String((a=(o=t.prefill[e.key])!=null?o:e.default)!=null?a:""),c=document.createElement("input");c.type="hidden",c.name=r,c.value=i;const s=le(e,l,t),f=!s&&t.instance?p=>{t.instance.triggerOnChange(r,p)}:null,d=Lt(e,i,c,s,f);if(n.appendChild(c),n.appendChild(d),!s){const p=document.createElement("p");p.className="text-xs text-gray-500 mt-1",p.textContent=be(e,l),n.appendChild(p)}}function Hn(e,t,n,r){var o,a,l,i;const c=t.state,s=t.prefill[e.key]||[],f=Array.isArray(s)?[...s]:[],d=(o=e.minCount)!=null?o:1,p=(a=e.maxCount)!=null?a:1/0;for(;f.length<d;)f.push(e.default||((i=(l=e.options)==null?void 0:l[0])==null?void 0:i.value)||"");const u=le(e,c,t),m=document.createElement("div");m.className="space-y-2",n.appendChild(m);function v(){m.querySelectorAll(".multiple-switcher-item").forEach((w,C)=>{const x=w.querySelector("input[type=hidden]");x&&(x.name=`${r}[${C}]`)})}function g(w="",C=-1){const x=C===-1?m.children.length:C,k=`${r}[${x}]`,z=document.createElement("div");z.className="multiple-switcher-item flex items-center gap-2";const W=document.createElement("input");W.type="hidden",W.name=k,W.value=w,z.appendChild(W);const H=!u&&t.instance?Q=>{t.instance.triggerOnChange(W.name,Q)}:null,Z=Lt(e,w,W,u,H);return z.appendChild(Z),C===-1?m.appendChild(z):m.insertBefore(z,m.children[C]),v(),z}function E(){if(u)return;const w=m.querySelectorAll(".multiple-switcher-item"),C=w.length;w.forEach(x=>{let k=x.querySelector(".remove-item-btn");k||(k=document.createElement("button"),k.type="button",k.className="remove-item-btn px-2 py-1 rounded",k.style.cssText=`
|
|
99
|
+
color: var(--fb-error-color);
|
|
100
|
+
background-color: transparent;
|
|
101
|
+
transition: background-color var(--fb-transition-duration);
|
|
102
|
+
`,k.innerHTML="\u2715",k.addEventListener("mouseenter",()=>{k.style.backgroundColor="var(--fb-background-hover-color)"}),k.addEventListener("mouseleave",()=>{k.style.backgroundColor="transparent"}),k.onclick=()=>{const W=Array.from(m.children).indexOf(x);m.children.length>d&&(f.splice(W,1),x.remove(),v(),y(),E())},x.appendChild(k));const z=C<=d;k.disabled=z,k.style.opacity=z?"0.5":"1",k.style.pointerEvents=z?"none":"auto"})}let h=null,b=null;if(!u){h=document.createElement("div"),h.className="flex items-center gap-3 mt-2";const w=document.createElement("button");w.type="button",w.className="add-switcher-btn px-3 py-1 rounded",w.style.cssText=`
|
|
103
|
+
color: var(--fb-primary-color);
|
|
104
|
+
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
105
|
+
background-color: transparent;
|
|
106
|
+
font-size: var(--fb-font-size);
|
|
107
|
+
transition: all var(--fb-transition-duration);
|
|
108
|
+
`,w.textContent="+",w.addEventListener("mouseenter",()=>{w.style.backgroundColor="var(--fb-background-hover-color)"}),w.addEventListener("mouseleave",()=>{w.style.backgroundColor="transparent"}),w.onclick=()=>{var C,x;const k=e.default||((x=(C=e.options)==null?void 0:C[0])==null?void 0:x.value)||"";f.push(k),g(k),y(),E()},b=document.createElement("span"),b.className="text-sm text-gray-500",h.appendChild(w),h.appendChild(b),n.appendChild(h)}function y(){if(!h||!b)return;const w=h.querySelector(".add-switcher-btn");if(w){const C=f.length>=p;w.disabled=C,w.style.opacity=C?"0.5":"1",w.style.pointerEvents=C?"none":"auto"}b.textContent=`${f.length}/${p===1/0?"\u221E":p}`}if(f.forEach(w=>g(w)),y(),E(),!u){const w=document.createElement("p");w.className="text-xs text-gray-500 mt-1",w.textContent=be(e,c),n.appendChild(w)}}function Rn(e,t,n){var r;const o=[],{scopeRoot:a,skipValidation:l}=n,i=(f,d)=>{var p,u;if(!f)return;const m=`error-${f.getAttribute("name")||Math.random().toString(36).substring(7)}`;let v=document.getElementById(m);d?(f.classList.add("invalid"),f.title=d,v||(v=document.createElement("div"),v.id=m,v.className="error-message",v.style.cssText=`
|
|
109
|
+
color: var(--fb-error-color);
|
|
110
|
+
font-size: var(--fb-font-size-small);
|
|
111
|
+
margin-top: 0.25rem;
|
|
112
|
+
`,f.nextSibling?(p=f.parentNode)==null||p.insertBefore(v,f.nextSibling):(u=f.parentNode)==null||u.appendChild(v)),v.textContent=d,v.style.display="block"):(f.classList.remove("invalid"),f.title="",v&&v.remove())},c=(f,d,p,u)=>{var m,v;if(l)return;const{state:g}=n,E=d.filter(u),h="minCount"in p&&(m=p.minCount)!=null?m:1,b="maxCount"in p&&(v=p.maxCount)!=null?v:1/0;p.required&&E.length===0&&o.push(`${f}: ${$("required",g)}`),E.length<h&&o.push(`${f}: ${$("minItems",g,{min:h})}`),E.length>b&&o.push(`${f}: ${$("maxItems",g,{max:b})}`)},s=new Set("options"in e?e.options.map(f=>f.value):[]);if("multiple"in e&&e.multiple){const f=a.querySelectorAll(`input[type="hidden"][name^="${t}["]`),d=[];return f.forEach(p=>{var u;const m=(u=p==null?void 0:p.value)!=null?u:"";if(d.push(m),!l&&m!==""&&!s.has(m)){const v=$("invalidOption",n.state);i(p,v),o.push(`${t}: ${v}`)}else i(p,null)}),c(t,d,e,p=>p!==""),{value:d,errors:o}}else{const f=a.querySelector(`input[type="hidden"][name$="${t}"]`),d=(r=f==null?void 0:f.value)!=null?r:"";if(!l&&e.required&&d===""){const p=$("required",n.state);return o.push(`${t}: ${p}`),i(f,p),{value:null,errors:o}}if(!l&&d!==""&&!s.has(d)){const p=$("invalidOption",n.state);return o.push(`${t}: ${p}`),i(f,p),{value:null,errors:o}}return i(f,null),{value:d===""?null:d,errors:o}}}function Bn(e,t,n,r){var o;const{scopeRoot:a}=r;if("multiple"in e&&e.multiple){if(!Array.isArray(n)){console.warn(`updateSwitcherField: Expected array for multiple field "${t}", got ${typeof n}`);return}const l=a.querySelectorAll(`input[type="hidden"][name^="${t}["]`);l.forEach((i,c)=>{var s;if(c<n.length){const f=n[c]!=null?String(n[c]):"";i.value=f;const d=(s=i.parentElement)==null?void 0:s.querySelector(".fb-switcher-group");d&&d.querySelectorAll(".fb-switcher-btn").forEach(p=>{p.dataset.value===f?Ue(p):Pe(p)}),i.classList.remove("invalid"),i.title=""}}),n.length!==l.length&&console.warn(`updateSwitcherField: Multiple field "${t}" has ${l.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const l=a.querySelector(`input[type="hidden"][name="${t}"]`);if(l){const i=n!=null?String(n):"";l.value=i;const c=(o=l.parentElement)==null?void 0:o.querySelector(".fb-switcher-group");c&&c.querySelectorAll(".fb-switcher-btn").forEach(s=>{s.dataset.value===i?Ue(s):Pe(s)}),l.classList.remove("invalid"),l.title=""}}}function He(e){return e?typeof e=="object"&&Array.isArray(e.extensions)?e.extensions.map(t=>t.toLowerCase()):typeof e=="string"?e.split(",").map(t=>t.trim()).filter(t=>t.startsWith(".")).map(t=>t.substring(1).toLowerCase()):[]:[]}function $e(e,t){var n;if(t.length===0)return!0;const r=((n=e.split(".").pop())==null?void 0:n.toLowerCase())||"";return t.includes(r)}function Ae(e,t){return t===1/0?!0:e.size<=t*1024*1024}function Dn(e,t,n,r){const o=document.createElement("img");o.className="w-full h-full object-contain",o.alt=n||$("previewAlt",r);const a=new FileReader;a.onload=l=>{var i;o.src=((i=l.target)==null?void 0:i.result)||""},a.readAsDataURL(t),e.appendChild(o)}function jn(e,t,n,r,o,a){const l=URL.createObjectURL(t);e.onclick=null;const i=e.cloneNode(!1);return e.parentNode&&e.parentNode.replaceChild(i,e),i.innerHTML=`
|
|
113
|
+
<div class="relative group h-full">
|
|
114
|
+
<video class="w-full h-full object-contain" controls preload="auto" muted src="${l}">
|
|
115
|
+
${J($("videoNotSupported",o))}
|
|
116
|
+
</video>
|
|
117
|
+
<div class="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity z-10 flex gap-1">
|
|
118
|
+
<button class="bg-red-600 bg-opacity-75 hover:bg-opacity-90 text-white p-1 rounded text-xs delete-file-btn">
|
|
119
|
+
${J($("removeElement",o))}
|
|
120
|
+
</button>
|
|
121
|
+
<button class="bg-gray-800 bg-opacity-75 hover:bg-opacity-90 text-white p-1 rounded text-xs change-file-btn">
|
|
122
|
+
${J($("changeButton",o))}
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
`,On(i,r,o,a),i}function On(e,t,n,r){const o=e.querySelector(".change-file-btn");o&&(o.onclick=l=>{l.stopPropagation(),r!=null&&r.picker&&r.picker.click()});const a=e.querySelector(".delete-file-btn");a&&(a.onclick=l=>{l.stopPropagation(),Un(e,t,n,r)})}function Un(e,t,n,r){var o;n.resourceIndex.delete(t);const a=(o=e.parentElement)==null?void 0:o.querySelector('input[type="hidden"]');a&&(a.value=""),r!=null&&r.fileUploadHandler&&(e.onclick=r.fileUploadHandler),r!=null&&r.dragHandler&&at(e,r.dragHandler),e.innerHTML=`
|
|
127
|
+
<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
128
|
+
<svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
|
|
129
|
+
<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"/>
|
|
130
|
+
</svg>
|
|
131
|
+
<div class="text-sm text-center">${J($("clickDragText",n))}</div>
|
|
132
|
+
</div>
|
|
133
|
+
`}function Pn(e,t,n,r){const o=document.createElement("video");o.className="w-full h-full object-contain",o.controls=!0,o.preload="metadata",o.muted=!0,o.src=t,o.appendChild(document.createTextNode($("videoNotSupported",r))),e.appendChild(o)}function St(e,t,n){_n(e,n,()=>{var r;n.resourceIndex.delete(t);const o=(r=e.parentElement)==null?void 0:r.querySelector('input[type="hidden"]');o&&(o.value=""),e.innerHTML=`
|
|
134
|
+
<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
135
|
+
<svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
|
|
136
|
+
<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"/>
|
|
137
|
+
</svg>
|
|
138
|
+
<div class="text-sm text-center">${J($("clickDragText",n))}</div>
|
|
139
|
+
</div>
|
|
140
|
+
`})}async function Vn(e,t,n,r,o,a,l){!t.file||!(t.file instanceof File)||(t.type&&t.type.startsWith("image/")?Dn(e,t.file,n,a):t.type&&t.type.startsWith("video/")?e=jn(e,t.file,t.type,r,a,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">${J(n)}</div></div>`,!o&&!(t.type&&t.type.startsWith("video/"))&&St(e,r,a))}async function Kn(e,t,n,r,o){if(!o.config.getThumbnail){ot(e,o);return}try{const a=await o.config.getThumbnail(t);if(a)if(ve(e),r&&r.type&&r.type.startsWith("video/"))Pn(e,a,r.type,o);else{const l=document.createElement("img");l.className="w-full h-full object-contain",l.alt=n||$("previewAlt",o),l.src=a,e.appendChild(l)}else ot(e,o)}catch(a){console.error("Failed to get thumbnail:",a),e.innerHTML=`
|
|
141
|
+
<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
142
|
+
<svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
|
|
143
|
+
<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"/>
|
|
144
|
+
</svg>
|
|
145
|
+
<div class="text-sm text-center">${J(n||$("previewUnavailable",o))}</div>
|
|
146
|
+
</div>
|
|
147
|
+
`}}async function Tt(e,t,n,r={}){var o;const{fileName:a="",isReadonly:l=!1,deps:i=null}=r;if(!l&&i&&(!i.picker||!i.fileUploadHandler||!i.dragHandler))throw new Error("renderFilePreview: missing deps {picker, fileUploadHandler, dragHandler}");ve(e),l&&e.classList.add("cursor-pointer");const c=n.resourceIndex.get(t);if(c&&c.file&&c.file instanceof File)await Vn(e,c,a,t,l,n,i);else{await Kn(e,t,a,c,n);const s=(o=c==null?void 0:c.type)==null?void 0:o.startsWith("video/");!l&&!s&&St(e,t,n)}}async function rt(e,t,n){var r,o;const a=t.resourceIndex.get(e),l=(a==null?void 0:a.name)||e.split("/").pop()||"file",i=l.toLowerCase().match(/\.psd$/),c=document.createElement("div");c.className=i?"space-y-2":"space-y-3";const s=document.createElement("div");i?s.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity flex items-center p-3 max-w-sm":s.className="bg-gray-100 rounded-lg overflow-hidden cursor-pointer hover:opacity-90 transition-opacity";const f=!i&&(((r=a==null?void 0:a.type)==null?void 0:r.startsWith("image/"))||l.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/)),d=((o=a==null?void 0:a.type)==null?void 0:o.startsWith("video/"))||l.toLowerCase().match(/\.(mp4|webm|avi|mov)$/);if(f)if(t.config.getThumbnail)try{const m=await t.config.getThumbnail(e);m?s.innerHTML=`<img src="${m}" alt="${J(l)}" class="w-full h-auto">`:s.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">${J(l)}</div></div></div>`}catch(m){console.warn("getThumbnail failed for",e,m),s.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">${J(l)}</div></div></div>`}else s.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">${J(l)}</div></div></div>`;else if(d)if(t.config.getThumbnail)try{const m=await t.config.getThumbnail(e);m?s.innerHTML=`
|
|
148
|
+
<div class="relative group">
|
|
149
|
+
<video class="w-full h-auto" controls preload="auto" muted src="${m}">
|
|
150
|
+
${J($("videoNotSupported",t))}
|
|
151
|
+
</video>
|
|
152
|
+
<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">
|
|
153
|
+
<div class="bg-white bg-opacity-90 rounded-full p-3">
|
|
154
|
+
<svg class="w-8 h-8 text-gray-800" fill="currentColor" viewBox="0 0 24 24">
|
|
155
|
+
<path d="M8 5v14l11-7z"/>
|
|
156
|
+
</svg>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
`:s.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">${J(l)}</div></div></div>`}catch(m){console.warn("getThumbnail failed for video",e,m),s.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">${J(l)}</div></div></div>`}else s.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">${J(l)}</div></div></div>`;else{const m=i?"\u{1F3A8}":"\u{1F4C1}",v=i?"PSD File":"Document";i?s.innerHTML=`
|
|
161
|
+
<div class="flex items-center space-x-3">
|
|
162
|
+
<div class="text-3xl text-gray-400">${m}</div>
|
|
163
|
+
<div class="flex-1 min-w-0">
|
|
164
|
+
<div class="text-sm font-medium text-gray-900 truncate">${J(l)}</div>
|
|
165
|
+
<div class="text-xs text-gray-500">${v}</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
`:s.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">${J(l)}</div><div class="text-xs text-gray-500 mt-1">${v}</div></div></div>`}const p=document.createElement("p");p.className=i?"hidden":"text-sm font-medium text-gray-900 text-center",p.textContent=l;const u=document.createElement("button");return u.className="w-full px-3 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",u.textContent=$("downloadButton",t),u.onclick=m=>{m.preventDefault(),m.stopPropagation(),t.config.downloadFile?t.config.downloadFile(e,l):Jn(e,l,t)},c.appendChild(s),c.appendChild(p),c.appendChild(u),c}function At(e,t,n,r,o,a){ve(e);const l=()=>{const p=[$("clickDragTextMultiple",n)];return o&&p.push(o),a&&p.push(a),p.join(" \u2022 ")},i=!e.classList.contains("grid");if((!t||t.length===0)&&i){const p=document.createElement("div");p.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 h=e.parentElement;for(;h&&!h.classList.contains("space-y-2");)h=h.parentElement;!h&&e.classList.contains("space-y-2")&&(h=e);const b=h==null?void 0:h.querySelector('input[type="file"]');b&&b.click()},p.appendChild(v)}const u=document.createElement("div");u.className="text-center text-xs text-gray-500 mt-2",u.textContent=l(),e.appendChild(p),e.appendChild(u);return}const c=document.createElement("div");c.className="files-list grid grid-cols-4 gap-3";const s=t?t.length:0,f=(Math.floor(s/4)+1)*4;for(let p=0;p<f;p++){const u=document.createElement("div");if(t&&p<t.length){const m=t[p],v=n.resourceIndex.get(m);if(u.className="resource-pill aspect-square bg-gray-100 rounded-lg overflow-hidden relative group border border-gray-300",u.dataset.resourceId=m,Wn(u,m,v,n).catch(g=>{console.error("Failed to render thumbnail:",g),u.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
169
|
+
<div class="text-2xl mb-1">\u{1F4C1}</div>
|
|
170
|
+
<div class="text-xs">${J($("previewError",n))}</div>
|
|
171
|
+
</div>`}),r){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=h=>{h.stopPropagation(),r(m)},g.appendChild(E),u.appendChild(g)}}else u.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",u.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>',u.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()};c.appendChild(u)}e.appendChild(c);const d=document.createElement("div");d.className="text-center text-xs text-gray-500 mt-2",d.textContent=l(),e.appendChild(d)}function Ft(e,t,n="w-12 h-12"){e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
172
|
+
<svg class="${J(n)} text-red-400" fill="currentColor" viewBox="0 0 24 24">
|
|
173
|
+
<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"/>
|
|
174
|
+
</svg>
|
|
175
|
+
<div class="text-xs mt-1 text-red-600">${J($("previewError",t))}</div>
|
|
176
|
+
</div>`}async function Wn(e,t,n,r){var o,a;if(n&&(o=n.type)!=null&&o.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 i=new FileReader;i.onload=c=>{var s;l.src=((s=c.target)==null?void 0:s.result)||""},i.readAsDataURL(n.file),e.appendChild(l)}else if(r.config.getThumbnail)try{const l=await r.config.getThumbnail(t);if(l){const i=document.createElement("img");i.className="w-full h-full object-contain",i.alt=n.name,i.src=l,e.appendChild(i)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
177
|
+
<svg class="w-12 h-12" fill="currentColor" viewBox="0 0 24 24">
|
|
178
|
+
<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"/>
|
|
179
|
+
</svg>
|
|
180
|
+
</div>`}catch(l){const i=l instanceof Error?l:new Error(String(l));r.config.onThumbnailError&&r.config.onThumbnailError(i,t),Ft(e,r)}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
181
|
+
<svg class="w-12 h-12" fill="currentColor" viewBox="0 0 24 24">
|
|
182
|
+
<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"/>
|
|
183
|
+
</svg>
|
|
184
|
+
</div>`;else if(n&&(a=n.type)!=null&&a.startsWith("video/"))if(n.file&&n.file instanceof File){const l=URL.createObjectURL(n.file);e.innerHTML=`
|
|
185
|
+
<div class="relative group h-full w-full">
|
|
186
|
+
<video class="w-full h-full object-contain" preload="metadata" muted src="${l}">
|
|
187
|
+
</video>
|
|
188
|
+
<div class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center">
|
|
189
|
+
<div class="bg-white bg-opacity-90 rounded-full p-1">
|
|
190
|
+
<svg class="w-4 h-4 text-gray-800" fill="currentColor" viewBox="0 0 24 24">
|
|
191
|
+
<path d="M8 5v14l11-7z"/>
|
|
192
|
+
</svg>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
`}else if(r.config.getThumbnail)try{const l=await r.config.getThumbnail(t);l?e.innerHTML=`
|
|
197
|
+
<div class="relative group h-full w-full">
|
|
198
|
+
<video class="w-full h-full object-contain" preload="metadata" muted src="${l}">
|
|
199
|
+
</video>
|
|
200
|
+
<div class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center">
|
|
201
|
+
<div class="bg-white bg-opacity-90 rounded-full p-1">
|
|
202
|
+
<svg class="w-4 h-4 text-gray-800" fill="currentColor" viewBox="0 0 24 24">
|
|
203
|
+
<path d="M8 5v14l11-7z"/>
|
|
204
|
+
</svg>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
`:e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
209
|
+
<svg class="w-8 h-8" fill="currentColor" viewBox="0 0 24 24">
|
|
210
|
+
<path d="M8 5v14l11-7z"/>
|
|
211
|
+
</svg>
|
|
212
|
+
<div class="text-xs mt-1">${J((n==null?void 0:n.name)||"Video")}</div>
|
|
213
|
+
</div>`}catch(l){const i=l instanceof Error?l:new Error(String(l));r.config.onThumbnailError&&r.config.onThumbnailError(i,t),Ft(e,r,"w-8 h-8")}else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
214
|
+
<svg class="w-8 h-8" fill="currentColor" viewBox="0 0 24 24">
|
|
215
|
+
<path d="M8 5v14l11-7z"/>
|
|
216
|
+
</svg>
|
|
217
|
+
<div class="text-xs mt-1">${J((n==null?void 0:n.name)||"Video")}</div>
|
|
218
|
+
</div>`;else e.innerHTML=`<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
219
|
+
<div class="text-2xl mb-1">\u{1F4C1}</div>
|
|
220
|
+
<div class="text-xs">${J((n==null?void 0:n.name)||"File")}</div>
|
|
221
|
+
</div>`}function ot(e,t,n){const r=n?`<div class="text-xs text-gray-500 mt-1">${J(n)}</div>`:"";e.innerHTML=`
|
|
222
|
+
<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
223
|
+
<svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
|
|
224
|
+
<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"/>
|
|
225
|
+
</svg>
|
|
226
|
+
<div class="text-sm text-center">${J($("clickDragText",t))}</div>
|
|
227
|
+
${r}
|
|
228
|
+
</div>
|
|
229
|
+
`}function Ve(e,t){var n,r;const o=(n=e.closest(".space-y-2"))==null?void 0:n.querySelector(".file-error-message");o&&o.remove();const a=document.createElement("div");a.className="file-error-message error-message",a.style.cssText=`
|
|
230
|
+
color: var(--fb-error-color);
|
|
231
|
+
font-size: var(--fb-font-size-small);
|
|
232
|
+
margin-top: 0.25rem;
|
|
233
|
+
`,a.textContent=t,(r=e.closest(".space-y-2"))==null||r.appendChild(a)}function lt(e){var t;const n=(t=e.closest(".space-y-2"))==null?void 0:t.querySelector(".file-error-message");n&&n.remove()}async function Nt(e,t,n,r,o=null,a,l=[],i=1/0){var c,s;if(!$e(e.name,l)){const p=l.join(", ");Ve(t,$("invalidFileExtension",r,{name:e.name,formats:p}));return}if(!Ae(e,i)){Ve(t,$("fileTooLarge",r,{name:e.name,maxSize:i}));return}lt(t);let f;if(r.config.uploadFile)try{if(f=await r.config.uploadFile(e),typeof f!="string")throw new Error("Upload handler must return a string resource ID")}catch(p){const u=p instanceof Error?p:new Error(String(p));throw r.config.onUploadError&&r.config.onUploadError(u,e),new Error(`File upload failed: ${u.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()");r.resourceIndex.set(f,{name:e.name,type:e.type,size:e.size,uploadedAt:new Date,file:e});let d=(c=t.parentElement)==null?void 0:c.querySelector('input[type="hidden"]');d||(d=document.createElement("input"),d.type="hidden",d.name=n,(s=t.parentElement)==null||s.appendChild(d)),d.value=f,Tt(t,f,r,{fileName:e.name,isReadonly:!1,deps:o}).catch(console.error),a&&!r.config.readonly&&a.triggerOnChange(n,f)}function at(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 r;n.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50"),(r=n.dataTransfer)!=null&&r.files&&t(n.dataTransfer.files)})}function _n(e,t,n){const r=e.querySelector(".delete-overlay");r&&r.remove();const o=document.createElement("div");o.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 a=document.createElement("button");a.className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700 transition-colors",a.textContent=$("removeElement",t),a.onclick=l=>{l.stopPropagation(),n()},o.appendChild(a),e.appendChild(o)}async function Mt(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 r=n instanceof Error?n:new Error(String(n));throw t.config.onUploadError&&t.config.onUploadError(r,e),new Error(`File upload failed: ${r.message}`)}else throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()")}async function Jn(e,t,n){try{let r=null;if(n.config.getDownloadUrl?r=n.config.getDownloadUrl(e):n.config.getThumbnail&&(r=await n.config.getThumbnail(e)),r){const o=r.startsWith("http")?r:new URL(r,window.location.href).href,a=await fetch(o);if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);const l=await a.blob();Yn(l,t)}else throw new Error("No download URL available for resource")}catch(r){const o=r instanceof Error?r:new Error(String(r));throw n.config.onDownloadError&&n.config.onDownloadError(o,e,t),console.error(`File download failed for ${t}:`,o),o}}function Yn(e,t){try{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>{URL.revokeObjectURL(n)},100)}catch(n){throw new Error(`Blob download failed: ${n.message}`)}}function qt(e,t){e.length>0&&e.forEach(n=>{var r;if(!t.resourceIndex.has(n)){const o=n.split("/").pop()||"file",a=(r=o.split(".").pop())==null?void 0:r.toLowerCase();let l="application/octet-stream";a&&(["jpg","jpeg","png","gif","webp"].includes(a)?l=`image/${a==="jpg"?"jpeg":a}`:["mp4","webm","mov","avi"].includes(a)&&(l=`video/${a==="mov"?"quicktime":a}`)),t.resourceIndex.set(n,{name:o,type:l,size:0,uploadedAt:new Date,file:void 0})}})}function Xn(e,t,n,r,o,a){var l;if(!o.resourceIndex.has(e)){const c=e.split("/").pop()||"file",s=(l=c.split(".").pop())==null?void 0:l.toLowerCase();let f="application/octet-stream";s&&(["jpg","jpeg","png","gif","webp"].includes(s)?f=`image/${s==="jpg"?"jpeg":s}`:["mp4","webm","mov","avi"].includes(s)&&(f=`video/${s==="mov"?"quicktime":s}`)),o.resourceIndex.set(e,{name:c,type:f,size:0,uploadedAt:new Date,file:void 0})}Tt(t,e,o,{fileName:e,isReadonly:!1,deps:a}).catch(console.error);const i=document.createElement("input");i.type="hidden",i.name=n,i.value=e,r.appendChild(i)}function zt(e,t,n,r,o,a,l){at(e,async i=>{const c=Array.from(i),s=c.filter(E=>!$e(E.name,o.allowedExtensions)),f=c.filter(E=>$e(E.name,o.allowedExtensions)),d=f.filter(E=>!Ae(E,o.maxSize)),p=f.filter(E=>Ae(E,o.maxSize)),u=o.maxCount===1/0?p.length:Math.max(0,o.maxCount-t.length),m=p.slice(0,u),v=p.length-m.length,g=[];if(s.length>0){const E=o.allowedExtensions.join(", "),h=s.map(b=>b.name).join(", ");g.push($("invalidFileExtension",n,{name:h,formats:E}))}if(d.length>0){const E=d.map(h=>h.name).join(", ");g.push($("fileTooLarge",n,{name:E,maxSize:o.maxSize}))}v>0&&g.push($("filesLimitExceeded",n,{skipped:v,max:o.maxCount})),g.length>0?Ve(e,g.join(" \u2022 ")):lt(e);for(const E of m){const h=await Mt(E,n);n.resourceIndex.set(h,{name:E.name,type:E.type,size:E.size,uploadedAt:new Date,file:void 0}),t.push(h)}r(),l&&a&&!n.config.readonly&&l.triggerOnChange(a,t)})}function It(e,t,n,r,o,a,l){e.onchange=async()=>{if(e.files){const i=Array.from(e.files),c=i.filter(E=>!$e(E.name,o.allowedExtensions)),s=i.filter(E=>$e(E.name,o.allowedExtensions)),f=s.filter(E=>!Ae(E,o.maxSize)),d=s.filter(E=>Ae(E,o.maxSize)),p=o.maxCount===1/0?d.length:Math.max(0,o.maxCount-t.length),u=d.slice(0,p),m=d.length-u.length,v=[];if(c.length>0){const E=o.allowedExtensions.join(", "),h=c.map(b=>b.name).join(", ");v.push($("invalidFileExtension",n,{name:h,formats:E}))}if(f.length>0){const E=f.map(h=>h.name).join(", ");v.push($("fileTooLarge",n,{name:E,maxSize:o.maxSize}))}m>0&&v.push($("filesLimitExceeded",n,{skipped:m,max:o.maxCount}));const g=e.closest(".space-y-2")||e.parentElement;v.length>0&&g?Ve(g,v.join(" \u2022 ")):g&<(g);for(const E of u){const h=await Mt(E,n);n.resourceIndex.set(h,{name:E.name,type:E.type,size:E.size,uploadedAt:new Date,file:void 0}),t.push(h)}}r(),e.value="",l&&a&&!n.config.readonly&&l.triggerOnChange(a,t)}}function Gn(e,t,n,r){var o,a;const l=t.state;if(le(e,l,t)){const i=t.prefill[e.key],c=typeof i=="string"?i:"";if(c){const s=document.createElement("input");s.type="hidden",s.name=r,s.value=c,n.appendChild(s),rt(c,l).then(f=>{n.appendChild(f)}).catch(f=>{console.error("Failed to render file preview:",f);const d=document.createElement("div");d.className="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500",d.innerHTML=`<div class="text-center">${J($("previewUnavailable",l))}</div>`,n.appendChild(d)})}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">${J($("noFileSelected",l))}</div>`,n.appendChild(s)}}else{const i=document.createElement("div");i.className="space-y-2";const c=document.createElement("input");c.type="file",c.name=r,c.style.display="none",e.accept&&(c.accept=typeof e.accept=="string"?e.accept:((o=e.accept.extensions)==null?void 0:o.map(v=>`.${v}`).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 f=t.prefill[e.key],d=He(e.accept),p=(a=e.maxSize)!=null?a:1/0,u=()=>c.click(),m=v=>{if(v.length>0){const g={picker:c,fileUploadHandler:u,dragHandler:m};Nt(v[0],s,r,l,g,t.instance,d,p)}};if(f)Xn(f,s,r,i,l,{picker:c,fileUploadHandler:u,dragHandler:m});else{const v=be(e,l);ot(s,l,v)}s.onclick=u,at(s,m),c.onchange=()=>{if(c.files&&c.files.length>0){const v={picker:c,fileUploadHandler:u,dragHandler:m};Nt(c.files[0],s,r,l,v,t.instance,d,p)}},i.appendChild(s),i.appendChild(c),n.appendChild(i)}}function Zn(e,t,n,r){var o,a;const l=t.state;if(le(e,l,t)){const i=t.prefill[e.key],c=Array.isArray(i)?i:[],s=document.createElement("div");s.className="space-y-2",s.dataset.filesWrapper=r;const f=document.createElement("div");f.className="files-list",c.forEach(p=>{const u=document.createElement("div");u.className="resource-pill",u.dataset.resourceId=p,f.appendChild(u)}),s.appendChild(f),n.appendChild(s);const d=document.createElement("div");d.className="space-y-4",c.length>0?c.forEach(p=>{rt(p,l).then(u=>{d.appendChild(u)}).catch(u=>{console.error("Failed to render file preview:",u)})}):d.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${J($("noFilesSelected",l))}</div></div>`,n.appendChild(d)}else{let i=function(){At(d,p,l,v=>{const g=p.indexOf(v);g>-1&&p.splice(g,1),i()},u)};const c=document.createElement("div");c.className="space-y-2",c.dataset.filesWrapper=r;const s=document.createElement("input");s.type="file",s.name=r,s.multiple=!0,s.style.display="none",e.accept&&(s.accept=typeof e.accept=="string"?e.accept:((o=e.accept.extensions)==null?void 0:o.map(v=>`.${v}`).join(","))||"");const f=document.createElement("div");f.className="border-2 border-dashed border-gray-300 rounded-lg p-3 hover:border-gray-400 transition-colors";const d=document.createElement("div");d.className="files-list";const p=t.prefill[e.key]||[];qt(p,l);const u=be(e,l),m={maxCount:1/0,allowedExtensions:He(e.accept),maxSize:(a=e.maxSize)!=null?a:1/0};i(),zt(f,p,l,i,m,r,t.instance),It(s,p,l,i,m,r,t.instance),f.appendChild(d),c.appendChild(f),c.appendChild(s),n.appendChild(c)}}function Qn(e,t,n,r){var o,a,l,i;const c=t.state,s=(o=e.minCount)!=null?o:0,f=(a=e.maxCount)!=null?a:1/0;if(le(e,c,t)){const d=t.prefill[e.key],p=Array.isArray(d)?d:[],u=document.createElement("div");u.className="space-y-2",u.dataset.filesWrapper=r;const m=document.createElement("div");m.className="files-list",p.forEach(g=>{const E=document.createElement("div");E.className="resource-pill",E.dataset.resourceId=g,m.appendChild(E)}),u.appendChild(m),n.appendChild(u);const v=document.createElement("div");v.className="space-y-4",p.length>0?p.forEach(g=>{rt(g,c).then(E=>{v.appendChild(E)}).catch(E=>{console.error("Failed to render file preview:",E)})}):v.innerHTML=`<div class="aspect-video bg-gray-100 rounded-lg flex items-center justify-center text-gray-500"><div class="text-center">${J($("noFilesSelected",c))}</div></div>`,n.appendChild(v)}else{const d=document.createElement("div");d.className="space-y-2",d.dataset.filesWrapper=r;const p=document.createElement("input");p.type="file",p.name=r,p.multiple=!0,p.style.display="none",e.accept&&(p.accept=typeof e.accept=="string"?e.accept:((l=e.accept.extensions)==null?void 0:l.map(b=>`.${b}`).join(","))||"");const u=document.createElement("div");u.className="files-list space-y-2",d.appendChild(p),d.appendChild(u);const m=Array.isArray(t.prefill[e.key])?[...t.prefill[e.key]]:[];qt(m,c);const v=be(e,c),g={maxCount:f,allowedExtensions:He(e.accept),maxSize:(i=e.maxSize)!=null?i:1/0},E=()=>{const b=m.length===1?$("fileCountSingle",c,{count:m.length}):$("fileCountPlural",c,{count:m.length}),y=s>0||f<1/0?` ${$("fileCountRange",c,{min:s,max:f})}`:"";return b+y},h=()=>{At(u,m,c,b=>{m.splice(m.indexOf(b),1),h()},v,E())};zt(u,m,c,h,g,r,t.instance),It(p,m,c,h,g,r,t.instance),h(),n.appendChild(d)}}function Ht(e,t,n){var r;const o=[],{scopeRoot:a,skipValidation:l,path:i}=n,c=e.type==="files"||"multiple"in e&&!!e.multiple,s=(p,u,m)=>{var v,g;if(l)return;const{state:E}=n,h="minCount"in m&&(v=m.minCount)!=null?v:0,b="maxCount"in m&&(g=m.maxCount)!=null?g:1/0;m.required&&u.length===0&&o.push(`${p}: ${$("required",E)}`),u.length<h&&o.push(`${p}: ${$("minFiles",E,{min:h})}`),u.length>b&&o.push(`${p}: ${$("maxFiles",E,{max:b})}`)},f=(p,u,m)=>{var v;if(l)return;const{state:g}=n,E="accept"in m?m.accept:void 0,h=He(E);if(h.length===0)return;const b=h.join(", ");for(const y of u){const w=g.resourceIndex.get(y),C=(v=w==null?void 0:w.name)!=null?v:y;$e(C,h)||o.push(`${p}: ${$("invalidFileExtension",g,{name:C,formats:b})}`)}},d=(p,u,m)=>{var v;if(l)return;const{state:g}=n,E="maxSize"in m&&(v=m.maxSize)!=null?v:1/0;if(E!==1/0)for(const h of u){const b=g.resourceIndex.get(h);b&&b.size>E*1024*1024&&o.push(`${p}: ${$("fileTooLarge",g,{name:b.name,maxSize:E})}`)}};if(c){const p=ye(i,t),u=a.querySelector(`[data-files-wrapper="${p}"]`),m=(u==null?void 0:u.querySelector(".files-list"))||null,v=[];return m&&m.querySelectorAll(".resource-pill").forEach(g=>{const E=g.dataset.resourceId;E&&v.push(E)}),s(t,v,e),f(t,v,e),d(t,v,e),{value:v,errors:o}}else{const p=a.querySelector(`input[name$="${t}"][type="hidden"]`),u=(r=p==null?void 0:p.value)!=null?r:"";return!l&&e.required&&u===""?(o.push(`${t}: ${$("required",n.state)}`),{value:null,errors:o}):(!l&&u!==""&&(f(t,[u],e),d(t,[u],e)),{value:u||null,errors:o})}}function Rt(e,t,n,r){var o;const{scopeRoot:a,state:l}=r;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 c;if(i&&typeof i=="string"&&!l.resourceIndex.has(i)){const s=i.split("/").pop()||"file",f=(c=s.split(".").pop())==null?void 0:c.toLowerCase();let d="application/octet-stream";f&&(["jpg","jpeg","png","gif","webp"].includes(f)?d=`image/${f==="jpg"?"jpeg":f}`:["mp4","webm","mov","avi"].includes(f)&&(d=`video/${f==="mov"?"quicktime":f}`)),l.resourceIndex.set(i,{name:s,type:d,size:0,uploadedAt:new Date,file:void 0})}}),console.info(`updateFileField: Multiple file field "${t}" updated. Preview update requires re-render.`)}else{const i=a.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(!l.resourceIndex.has(n)){const c=n.split("/").pop()||"file",s=(o=c.split(".").pop())==null?void 0:o.toLowerCase();let f="application/octet-stream";s&&(["jpg","jpeg","png","gif","webp"].includes(s)?f=`image/${s==="jpg"?"jpeg":s}`:["mp4","webm","mov","avi"].includes(s)&&(f=`video/${s==="mov"?"quicktime":s}`)),l.resourceIndex.set(n,{name:c,type:f,size:0,uploadedAt:new Date,file:void 0})}console.info(`updateFileField: File field "${t}" updated. Preview update requires re-render.`)}}}function Fe(e){return e?e.toUpperCase():"#000000"}function it(e){return/^#[0-9A-F]{6}$/i.test(e)||/^#[0-9A-F]{3}$/i.test(e)}function Bt(e){if(/^#[0-9A-F]{3}$/i.test(e)){const t=e[1],n=e[2],r=e[3];return`#${t}${t}${n}${n}${r}${r}`.toUpperCase()}return e.toUpperCase()}function Dt(e){const t=document.createElement("div");t.className="flex items-center gap-2";const n=Fe(e),r=document.createElement("div");r.style.cssText=`
|
|
234
|
+
width: 32px;
|
|
235
|
+
height: 32px;
|
|
236
|
+
border-radius: var(--fb-border-radius);
|
|
237
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
238
|
+
background-color: ${n};
|
|
239
|
+
`;const o=document.createElement("span");return o.style.cssText=`
|
|
240
|
+
font-size: var(--fb-font-size);
|
|
241
|
+
color: var(--fb-text-color);
|
|
242
|
+
font-family: var(--fb-font-family-mono, monospace);
|
|
243
|
+
`,o.textContent=n,t.appendChild(r),t.appendChild(o),t}function jt(e,t,n){const r=Fe(e),o=document.createElement("div");o.className="colour-picker-wrapper",o.style.cssText=`
|
|
244
|
+
display: flex;
|
|
245
|
+
align-items: center;
|
|
246
|
+
gap: 8px;
|
|
247
|
+
`;const a=document.createElement("div");a.className="colour-swatch",a.style.cssText=`
|
|
248
|
+
width: 40px;
|
|
249
|
+
height: 40px;
|
|
250
|
+
border-radius: var(--fb-border-radius);
|
|
251
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
252
|
+
background-color: ${r};
|
|
253
|
+
cursor: pointer;
|
|
254
|
+
transition: border-color var(--fb-transition-duration) ease-in-out;
|
|
255
|
+
flex-shrink: 0;
|
|
256
|
+
`;const l=document.createElement("input");l.type="text",l.className="colour-hex-input",l.name=t,l.value=r,l.placeholder="#000000",l.style.cssText=`
|
|
257
|
+
width: 100px;
|
|
258
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
259
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
260
|
+
border-radius: var(--fb-border-radius);
|
|
261
|
+
background-color: var(--fb-background-color);
|
|
262
|
+
color: var(--fb-text-color);
|
|
263
|
+
font-size: var(--fb-font-size);
|
|
264
|
+
font-family: var(--fb-font-family-mono, monospace);
|
|
265
|
+
transition: all var(--fb-transition-duration) ease-in-out;
|
|
266
|
+
`;const i=document.createElement("input");return i.type="color",i.className="colour-picker-hidden",i.value=r.toLowerCase(),i.style.cssText=`
|
|
267
|
+
position: absolute;
|
|
268
|
+
opacity: 0;
|
|
269
|
+
pointer-events: none;
|
|
270
|
+
`,l.addEventListener("input",()=>{const c=l.value.trim();if(it(c)){const s=Bt(c);a.style.backgroundColor=s,i.value=s.toLowerCase(),l.classList.remove("invalid"),n.instance&&n.instance.triggerOnChange(t,s)}else l.classList.add("invalid")}),l.addEventListener("blur",()=>{const c=l.value.trim();if(it(c)){const s=Bt(c);l.value=s,a.style.backgroundColor=s,i.value=s.toLowerCase(),l.classList.remove("invalid")}}),i.addEventListener("change",()=>{const c=Fe(i.value);l.value=c,a.style.backgroundColor=c,n.instance&&n.instance.triggerOnChange(t,c)}),a.addEventListener("click",()=>{i.click()}),a.addEventListener("mouseenter",()=>{a.style.borderColor="var(--fb-border-hover-color)"}),a.addEventListener("mouseleave",()=>{a.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)")}),o.appendChild(a),o.appendChild(l),o.appendChild(i),o}function er(e,t,n,r){const o=t.state,a=le(e,o,t),l=t.prefill[e.key]||e.default||"#000000";if(a){const i=Dt(l);n.appendChild(i)}else{const i=jt(l,r,t);n.appendChild(i)}if(!a){const i=document.createElement("p");i.className="mt-1",i.style.cssText=`
|
|
271
|
+
font-size: var(--fb-font-size-small);
|
|
272
|
+
color: var(--fb-text-secondary-color);
|
|
273
|
+
`,i.textContent=be(e,o),n.appendChild(i)}}function tr(e,t,n,r){var o,a;const l=t.state,i=le(e,l,t),c=t.prefill[e.key]||[],s=Array.isArray(c)?[...c]:[],f=(o=e.minCount)!=null?o:1,d=(a=e.maxCount)!=null?a:1/0;for(;s.length<f;)s.push(e.default||"#000000");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function u(){p.querySelectorAll(".multiple-colour-item").forEach((b,y)=>{const w=b.querySelector("input");w&&(w.name=`${r}[${y}]`)})}function m(b="#000000",y=-1){const w=document.createElement("div");if(w.className="multiple-colour-item flex items-center gap-2",i){const C=Dt(b);for(;C.firstChild;)w.appendChild(C.firstChild)}else{const C=`${r}[${p.children.length}]`,x=jt(b,C,t);x.style.flex="1",w.appendChild(x)}return y===-1?p.appendChild(w):p.insertBefore(w,p.children[y]),u(),w}function v(){if(i)return;const b=p.querySelectorAll(".multiple-colour-item"),y=b.length;b.forEach(w=>{let C=w.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=`
|
|
274
|
+
color: var(--fb-error-color);
|
|
275
|
+
background-color: transparent;
|
|
276
|
+
transition: background-color var(--fb-transition-duration);
|
|
277
|
+
`,C.innerHTML="\u2715",C.addEventListener("mouseenter",()=>{C.style.backgroundColor="var(--fb-background-hover-color)"}),C.addEventListener("mouseleave",()=>{C.style.backgroundColor="transparent"}),C.onclick=()=>{const k=Array.from(p.children).indexOf(w);p.children.length>f&&(s.splice(k,1),w.remove(),u(),h(),v())},w.appendChild(C));const x=y<=f;C.disabled=x,C.style.opacity=x?"0.5":"1",C.style.pointerEvents=x?"none":"auto"})}let g=null,E=null;if(!i){g=document.createElement("div"),g.className="flex items-center gap-3 mt-2";const b=document.createElement("button");b.type="button",b.className="add-colour-btn px-3 py-1 rounded",b.style.cssText=`
|
|
278
|
+
color: var(--fb-primary-color);
|
|
279
|
+
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
280
|
+
background-color: transparent;
|
|
281
|
+
font-size: var(--fb-font-size);
|
|
282
|
+
transition: all var(--fb-transition-duration);
|
|
283
|
+
`,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{const y=e.default||"#000000";s.push(y),m(y),h(),v()},E=document.createElement("span"),E.className="text-sm text-gray-500",g.appendChild(b),g.appendChild(E),n.appendChild(g)}function h(){if(!g||!E)return;const b=g.querySelector(".add-colour-btn");if(b){const y=s.length>=d;b.disabled=y,b.style.opacity=y?"0.5":"1",b.style.pointerEvents=y?"none":"auto"}E.textContent=`${s.length}/${d===1/0?"\u221E":d}`}if(s.forEach(b=>m(b)),h(),v(),!i){const b=document.createElement("p");b.className="mt-1",b.style.cssText=`
|
|
284
|
+
font-size: var(--fb-font-size-small);
|
|
285
|
+
color: var(--fb-text-secondary-color);
|
|
286
|
+
`,b.textContent=be(e,l),n.appendChild(b)}}function nr(e,t,n){var r,o,a;const l=[],{scopeRoot:i,skipValidation:c}=n,s=(d,p)=>{var u,m;if(!d)return;const v=`error-${d.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(v);p?(d.classList.add("invalid"),d.title=p,g||(g=document.createElement("div"),g.id=v,g.className="error-message",g.style.cssText=`
|
|
287
|
+
color: var(--fb-error-color);
|
|
288
|
+
font-size: var(--fb-font-size-small);
|
|
289
|
+
margin-top: 0.25rem;
|
|
290
|
+
`,d.nextSibling?(u=d.parentNode)==null||u.insertBefore(g,d.nextSibling):(m=d.parentNode)==null||m.appendChild(g)),g.textContent=p,g.style.display="block"):(d.classList.remove("invalid"),d.title="",g&&g.remove())},f=(d,p,u)=>{const{state:m}=n;if(!p){if(!c&&e.required){const g=$("required",m);return l.push(`${u}: ${g}`),s(d,g),""}return s(d,null),""}const v=Fe(p);if(!c&&!it(v)){const g=$("invalidHexColour",m);return l.push(`${u}: ${g}`),s(d,g),p}return s(d,null),v};if(e.multiple){const d=i.querySelectorAll(`[name^="${t}["].colour-hex-input`),p=[];if(d.forEach((u,m)=>{var v;const g=(v=u==null?void 0:u.value)!=null?v:"",E=f(u,g,`${t}[${m}]`);p.push(E)}),!c){const{state:u}=n,m=(r=e.minCount)!=null?r:1,v=(o=e.maxCount)!=null?o:1/0,g=p.filter(E=>E!=="");e.required&&g.length===0&&l.push(`${t}: ${$("required",u)}`),g.length<m&&l.push(`${t}: ${$("minItems",u,{min:m})}`),g.length>v&&l.push(`${t}: ${$("maxItems",u,{max:v})}`)}return{value:p,errors:l}}else{const d=i.querySelector(`[name="${t}"].colour-hex-input`),p=(a=d==null?void 0:d.value)!=null?a:"";if(!c&&e.required&&p===""){const u=$("required",n.state);return l.push(`${t}: ${u}`),s(d,u),{value:"",errors:l}}return{value:f(d,p,t),errors:l}}}function rr(e,t,n,r){const{scopeRoot:o}=r;if(e.multiple){if(!Array.isArray(n)){console.warn(`updateColourField: Expected array for multiple field "${t}", got ${typeof n}`);return}const a=o.querySelectorAll(`[name^="${t}["].colour-hex-input`);a.forEach((l,i)=>{if(i<n.length){const c=Fe(n[i]);l.value=c,l.classList.remove("invalid"),l.title="";const s=l.closest(".colour-picker-wrapper");if(s){const f=s.querySelector(".colour-swatch"),d=s.querySelector(".colour-picker-hidden");f&&(f.style.backgroundColor=c),d&&(d.value=c.toLowerCase())}}}),n.length!==a.length&&console.warn(`updateColourField: Multiple field "${t}" has ${a.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const a=o.querySelector(`[name="${t}"].colour-hex-input`);if(a){const l=Fe(n);a.value=l,a.classList.remove("invalid"),a.title="";const i=a.closest(".colour-picker-wrapper");if(i){const c=i.querySelector(".colour-swatch"),s=i.querySelector(".colour-picker-hidden");c&&(c.style.backgroundColor=l),s&&(s.value=l.toLowerCase())}}}}function Ot(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const r=Math.log(t),o=Math.log(n);return Math.exp(r+e*(o-r))}function st(e,t,n){if(t<=0)throw new Error("Exponential scale requires min > 0");const r=Math.log(t),o=Math.log(n);return(Math.log(e)-r)/(o-r)}function Ke(e,t){return Math.round(e/t)*t}function Ut(e,t,n,r,o){var a;const l=document.createElement("div");l.className="slider-container";const i=document.createElement("div");i.className="flex items-start gap-3";const c=document.createElement("div");c.className="flex-1";const s=document.createElement("input");s.type="range",s.name=t,s.className="slider-input w-full",s.disabled=o;const f=n.scale||"linear",d=n.min,p=n.max,u=(a=n.step)!=null?a:1;if(f==="exponential"){if(d<=0)throw new Error(`Slider "${n.key}": exponential scale requires min > 0 (got ${d})`);s.min="0",s.max="1000",s.step="1";const h=st(e,d,p);s.value=(h*1e3).toString()}else s.min=d.toString(),s.max=p.toString(),s.step=u.toString(),s.value=e.toString();s.style.cssText=`
|
|
291
|
+
height: 6px;
|
|
292
|
+
border-radius: 3px;
|
|
293
|
+
background: linear-gradient(
|
|
294
|
+
to right,
|
|
295
|
+
var(--fb-primary-color) 0%,
|
|
296
|
+
var(--fb-primary-color) ${(e-d)/(p-d)*100}%,
|
|
297
|
+
var(--fb-border-color) ${(e-d)/(p-d)*100}%,
|
|
298
|
+
var(--fb-border-color) 100%
|
|
299
|
+
);
|
|
300
|
+
outline: none;
|
|
301
|
+
transition: background 0.1s ease-in-out;
|
|
302
|
+
cursor: ${o?"not-allowed":"pointer"};
|
|
303
|
+
opacity: ${o?"0.6":"1"};
|
|
304
|
+
`,c.appendChild(s);const m=document.createElement("div");m.className="flex justify-between",m.style.cssText=`
|
|
305
|
+
font-size: var(--fb-font-size-small);
|
|
306
|
+
color: var(--fb-text-secondary-color);
|
|
307
|
+
margin-top: 4px;
|
|
308
|
+
`;const v=document.createElement("span");v.textContent=d.toString();const g=document.createElement("span");g.textContent=p.toString(),m.appendChild(v),m.appendChild(g),c.appendChild(m);const E=document.createElement("span");if(E.className="slider-value",E.style.cssText=`
|
|
309
|
+
min-width: 60px;
|
|
310
|
+
text-align: right;
|
|
311
|
+
font-size: var(--fb-font-size);
|
|
312
|
+
color: var(--fb-text-color);
|
|
313
|
+
font-family: var(--fb-font-family-mono, monospace);
|
|
314
|
+
font-weight: 500;
|
|
315
|
+
padding-top: 2px;
|
|
316
|
+
`,E.textContent=e.toFixed(u<1?2:0),i.appendChild(c),i.appendChild(E),l.appendChild(i),!o){const h=()=>{let b;if(f==="exponential"){const w=parseFloat(s.value)/1e3;b=Ot(w,d,p),b=Ke(b,u),b=Math.max(d,Math.min(p,b))}else b=parseFloat(s.value),b=Ke(b,u);E.textContent=b.toFixed(u<1?2:0);const y=(b-d)/(p-d)*100;s.style.background=`linear-gradient(
|
|
317
|
+
to right,
|
|
318
|
+
var(--fb-primary-color) 0%,
|
|
319
|
+
var(--fb-primary-color) ${y}%,
|
|
320
|
+
var(--fb-border-color) ${y}%,
|
|
321
|
+
var(--fb-border-color) 100%
|
|
322
|
+
)`,r.instance&&r.instance.triggerOnChange(t,b)};s.addEventListener("input",h),s.addEventListener("change",h)}return l}function or(e,t,n,r){var o;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 a=t.state,l=le(e,a,t),i=e.default!==void 0?e.default:(e.min+e.max)/2,c=(o=t.prefill[e.key])!=null?o:i,s=Ut(c,r,e,t,l);if(n.appendChild(s),!l){const f=document.createElement("p");f.className="mt-1",f.style.cssText=`
|
|
323
|
+
font-size: var(--fb-font-size-small);
|
|
324
|
+
color: var(--fb-text-secondary-color);
|
|
325
|
+
`,f.textContent=be(e,a),n.appendChild(f)}}function lr(e,t,n,r){var o,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,i=le(e,l,t),c=t.prefill[e.key]||[],s=Array.isArray(c)?[...c]:[],f=(o=e.minCount)!=null?o:1,d=(a=e.maxCount)!=null?a:1/0,p=e.default!==void 0?e.default:(e.min+e.max)/2;for(;s.length<f;)s.push(p);const u=document.createElement("div");u.className="space-y-3",n.appendChild(u);function m(){u.querySelectorAll(".multiple-slider-item").forEach((y,w)=>{const C=y.querySelector("input[type=range]");C&&C.setAttribute("name",`${r}[${w}]`)})}function v(y=p,w=-1){const C=document.createElement("div");C.className="multiple-slider-item flex items-start gap-2";const x=`${r}[${u.children.length}]`,k=Ut(y,x,e,t,i);return k.style.flex="1",C.appendChild(k),w===-1?u.appendChild(C):u.insertBefore(C,u.children[w]),m(),C}function g(){if(i)return;const y=u.querySelectorAll(".multiple-slider-item"),w=y.length;y.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=`
|
|
326
|
+
color: var(--fb-error-color);
|
|
327
|
+
background-color: transparent;
|
|
328
|
+
transition: background-color var(--fb-transition-duration);
|
|
329
|
+
margin-top: 8px;
|
|
330
|
+
`,x.innerHTML="\u2715",x.addEventListener("mouseenter",()=>{x.style.backgroundColor="var(--fb-background-hover-color)"}),x.addEventListener("mouseleave",()=>{x.style.backgroundColor="transparent"}),x.onclick=()=>{const z=Array.from(u.children).indexOf(C);u.children.length>f&&(s.splice(z,1),C.remove(),m(),b(),g())},C.appendChild(x));const k=w<=f;x.disabled=k,x.style.opacity=k?"0.5":"1",x.style.pointerEvents=k?"none":"auto"})}let E=null,h=null;if(!i){E=document.createElement("div"),E.className="flex items-center gap-3 mt-2";const y=document.createElement("button");y.type="button",y.className="add-slider-btn px-3 py-1 rounded",y.style.cssText=`
|
|
331
|
+
color: var(--fb-primary-color);
|
|
332
|
+
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
333
|
+
background-color: transparent;
|
|
334
|
+
font-size: var(--fb-font-size);
|
|
335
|
+
transition: all var(--fb-transition-duration);
|
|
336
|
+
`,y.textContent="+",y.addEventListener("mouseenter",()=>{y.style.backgroundColor="var(--fb-background-hover-color)"}),y.addEventListener("mouseleave",()=>{y.style.backgroundColor="transparent"}),y.onclick=()=>{s.push(p),v(p),b(),g()},h=document.createElement("span"),h.className="text-sm text-gray-500",E.appendChild(y),E.appendChild(h),n.appendChild(E)}function b(){if(!E||!h)return;const y=E.querySelector(".add-slider-btn");if(y){const w=s.length>=d;y.disabled=w,y.style.opacity=w?"0.5":"1",y.style.pointerEvents=w?"none":"auto"}h.textContent=`${s.length}/${d===1/0?"\u221E":d}`}if(s.forEach(y=>v(y)),b(),g(),!i){const y=document.createElement("p");y.className="mt-1",y.style.cssText=`
|
|
337
|
+
font-size: var(--fb-font-size-small);
|
|
338
|
+
color: var(--fb-text-secondary-color);
|
|
339
|
+
`,y.textContent=be(e,l),n.appendChild(y)}}function ar(e,t,n){var r,o,a;const l=[],{scopeRoot:i,skipValidation:c}=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 s=e.min,f=e.max,d=(r=e.step)!=null?r:1,p=e.scale||"linear",u=(v,g)=>{var E,h;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=`
|
|
340
|
+
color: var(--fb-error-color);
|
|
341
|
+
font-size: var(--fb-font-size-small);
|
|
342
|
+
margin-top: 0.25rem;
|
|
343
|
+
`;const w=v.closest(".slider-container");w&&w.nextSibling?(E=w.parentNode)==null||E.insertBefore(y,w.nextSibling):w&&((h=w.parentNode)==null||h.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,h=v.value;if(!h){if(!c&&e.required){const y=$("required",E);return l.push(`${g}: ${y}`),u(v,y),null}return u(v,null),null}let b;if(p==="exponential"){const y=parseFloat(h)/1e3;b=Ot(y,s,f),b=Ke(b,d)}else b=parseFloat(h),b=Ke(b,d);if(!c){if(b<s){const y=$("minValue",E,{min:s});return l.push(`${g}: ${y}`),u(v,y),b}if(b>f){const y=$("maxValue",E,{max:f});return l.push(`${g}: ${y}`),u(v,y),b}}return u(v,null),b};if(e.multiple){const v=i.querySelectorAll(`input[type="range"][name^="${t}["]`),g=[];if(v.forEach((E,h)=>{const b=m(E,`${t}[${h}]`);g.push(b)}),!c){const{state:E}=n,h=(o=e.minCount)!=null?o:1,b=(a=e.maxCount)!=null?a:1/0,y=g.filter(w=>w!==null);e.required&&y.length===0&&l.push(`${t}: ${$("required",E)}`),y.length<h&&l.push(`${t}: ${$("minItems",E,{min:h})}`),y.length>b&&l.push(`${t}: ${$("maxItems",E,{max:b})}`)}return{value:g,errors:l}}else{const v=i.querySelector(`input[type="range"][name="${t}"]`);return v?{value:m(v,t),errors:l}:(!c&&e.required&&l.push(`${t}: ${$("required",n.state)}`),{value:null,errors:l})}}function ir(e,t,n,r){var o;const{scopeRoot:a}=r,l=e.min,i=e.max,c=(o=e.step)!=null?o:1,s=e.scale||"linear";if(e.multiple){if(!Array.isArray(n)){console.warn(`updateSliderField: Expected array for multiple field "${t}", got ${typeof n}`);return}const f=a.querySelectorAll(`input[type="range"][name^="${t}["]`);f.forEach((d,p)=>{if(p<n.length&&n[p]!==null){const u=Number(n[p]);if(s==="exponential"){const v=st(u,l,i);d.value=(v*1e3).toString()}else d.value=u.toString();const m=d.closest(".slider-container");if(m){const v=m.querySelector(".slider-value");v&&(v.textContent=u.toFixed(c<1?2:0));const g=(u-l)/(i-l)*100;d.style.background=`linear-gradient(
|
|
344
|
+
to right,
|
|
345
|
+
var(--fb-primary-color) 0%,
|
|
346
|
+
var(--fb-primary-color) ${g}%,
|
|
347
|
+
var(--fb-border-color) ${g}%,
|
|
348
|
+
var(--fb-border-color) 100%
|
|
349
|
+
)`}d.classList.remove("invalid"),d.title=""}}),n.length!==f.length&&console.warn(`updateSliderField: Multiple field "${t}" has ${f.length} sliders but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const f=a.querySelector(`input[type="range"][name="${t}"]`);if(f&&n!==null&&n!==void 0){const d=Number(n);if(s==="exponential"){const u=st(d,l,i);f.value=(u*1e3).toString()}else f.value=d.toString();const p=f.closest(".slider-container");if(p){const u=p.querySelector(".slider-value");u&&(u.textContent=d.toFixed(c<1?2:0));const m=(d-l)/(i-l)*100;f.style.background=`linear-gradient(
|
|
350
|
+
to right,
|
|
351
|
+
var(--fb-primary-color) 0%,
|
|
352
|
+
var(--fb-primary-color) ${m}%,
|
|
353
|
+
var(--fb-border-color) ${m}%,
|
|
354
|
+
var(--fb-border-color) 100%
|
|
355
|
+
)`}f.classList.remove("invalid"),f.title=""}}}function Pt(e){const t={};for(const n of e)"default"in n&&n.default!==void 0&&(t[n.key]=n.default);return t}function Vt(e,t){return{...t,...e}}function ct(e){const t={};return e.querySelectorAll("input, select, textarea").forEach(n=>{const r=n.getAttribute("name");r&&!r.includes("[")&&!r.includes(".")&&(n instanceof HTMLSelectElement?t[r]=n.value:n instanceof HTMLInputElement?n.type==="checkbox"?t[r]=n.checked:n.type==="radio"?n.checked&&(t[r]=n.value):t[r]=n.value:n instanceof HTMLTextAreaElement&&(t[r]=n.value))}),t}let ut=null;function sr(e){ut=e}function We(e,t){if(!ut)throw new Error("renderElement not initialized. Import from components/index.ts");return ut(e,t)}function Kt(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((r,o)=>{const a=document.createElement("button");a.type="button",a.className="fb-prefill-hint",a.textContent=r.label,a.setAttribute("data-hint-values",JSON.stringify(r.values)),a.setAttribute("data-container-key",t),a.setAttribute("data-hint-index",String(o)),n.appendChild(a)}),n}function Wt(e,t,n,r){var o,a;const l=document.createElement("div");l.className="border border-gray-200 rounded-lg p-4 bg-gray-50",l.setAttribute("data-container",r);const i=document.createElement("div"),c=e.columns||1;c===1?i.className="space-y-4":i.className=`grid grid-cols-${c} gap-4`;const s=le(e,t.state,t);if(!s){const m=Kt(e,r);m&&l.appendChild(m)}const f=Pt(e.elements),d=((o=t.prefill)==null?void 0:o[e.key])||{},p=Vt(d,f),u={path:ye(t.path,e.key),prefill:p,formData:(a=t.formData)!=null?a:t.prefill,state:t.state,inheritedReadonly:s||t.inheritedReadonly};e.elements.forEach(m=>{var v,g;if(m.hidden||m.type==="hidden"){const E=(g=(v=d[m.key])!=null?v:m.default)!=null?g:null;i.appendChild(ze(ye(u.path,m.key),E))}else i.appendChild(We(m,u))}),l.appendChild(i),n.appendChild(l)}function _t(e,t,n,r){var o,a,l,i;const c=t.state,s=le(e,c,t),f=s||t.inheritedReadonly,d=document.createElement("div");d.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 u=document.createElement("div");if(u.className="space-y-4",!s){const C=Kt(e,e.key);C&&d.appendChild(C)}const m=(o=e.minCount)!=null?o:0,v=(a=e.maxCount)!=null?a:1/0,g=Array.isArray((l=t.prefill)==null?void 0:l[e.key])?t.prefill[e.key]:null,E=Pt(e.elements),h=()=>u.querySelectorAll(":scope > .containerItem").length,b=()=>{const C=document.createElement("button");return C.type="button",C.className="add-container-btn px-3 py-1 rounded",C.style.cssText=`
|
|
356
|
+
color: var(--fb-primary-color);
|
|
357
|
+
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
358
|
+
background-color: transparent;
|
|
359
|
+
font-size: var(--fb-font-size);
|
|
360
|
+
transition: all var(--fb-transition-duration);
|
|
361
|
+
`,C.textContent="+",C.addEventListener("mouseenter",()=>{C.style.backgroundColor="var(--fb-background-hover-color)"}),C.addEventListener("mouseleave",()=>{C.style.backgroundColor="transparent"}),C.onclick=()=>{if(h()<v){const x=h(),k=c.formRoot?ct(c.formRoot):{},z={state:t.state,path:ye(t.path,`${e.key}[${x}]`),prefill:E,formData:k,inheritedReadonly:f},W=document.createElement("div");W.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",W.setAttribute("data-container-item",`${e.key}[${x}]`);const H=document.createElement("div"),Z=e.columns||1;if(Z===1?H.className="space-y-4":H.className=`grid grid-cols-${Z} gap-4`,e.elements.forEach(Q=>{var oe;Q.hidden||Q.type==="hidden"?H.appendChild(ze(ye(z.path,Q.key),(oe=Q.default)!=null?oe:null)):H.appendChild(We(Q,z))}),W.appendChild(H),!s){const Q=document.createElement("button");Q.type="button",Q.className="absolute top-2 right-2 px-2 py-1 rounded",Q.style.cssText=`
|
|
362
|
+
color: var(--fb-error-color);
|
|
363
|
+
background-color: transparent;
|
|
364
|
+
transition: background-color var(--fb-transition-duration);
|
|
365
|
+
`,Q.textContent="\u2715",Q.addEventListener("mouseenter",()=>{Q.style.backgroundColor="var(--fb-background-hover-color)"}),Q.addEventListener("mouseleave",()=>{Q.style.backgroundColor="transparent"}),Q.onclick=()=>w(W),W.style.position="relative",W.appendChild(Q)}u.appendChild(W),y()}},C},y=()=>{const C=h(),x=d.querySelector(".add-container-btn");x&&(x.disabled=C>=v,x.style.opacity=C>=v?"0.5":"1",x.style.pointerEvents=C>=v?"none":"auto"),p.textContent=`${C}/${v===1/0?"\u221E":v}`},w=C=>{C.remove(),y()};if(g&&Array.isArray(g)&&g.forEach((C,x)=>{var k;const z=Vt(C||{},E),W={state:t.state,path:ye(t.path,`${e.key}[${x}]`),prefill:z,formData:(k=t.formData)!=null?k:t.prefill,inheritedReadonly:f},H=document.createElement("div");H.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",H.setAttribute("data-container-item",`${e.key}[${x}]`);const Z=document.createElement("div"),Q=e.columns||1;if(Q===1?Z.className="space-y-4":Z.className=`grid grid-cols-${Q} gap-4`,e.elements.forEach(oe=>{var Le,pe;if(oe.hidden||oe.type==="hidden"){const we=(pe=(Le=C==null?void 0:C[oe.key])!=null?Le:oe.default)!=null?pe:null;Z.appendChild(ze(ye(W.path,oe.key),we))}else Z.appendChild(We(oe,W))}),H.appendChild(Z),!s){const oe=document.createElement("button");oe.type="button",oe.className="absolute top-2 right-2 px-2 py-1 rounded",oe.style.cssText=`
|
|
366
|
+
color: var(--fb-error-color);
|
|
367
|
+
background-color: transparent;
|
|
368
|
+
transition: background-color var(--fb-transition-duration);
|
|
369
|
+
`,oe.textContent="\u2715",oe.addEventListener("mouseenter",()=>{oe.style.backgroundColor="var(--fb-background-hover-color)"}),oe.addEventListener("mouseleave",()=>{oe.style.backgroundColor="transparent"}),oe.onclick=()=>w(H),H.style.position="relative",H.appendChild(oe)}u.appendChild(H)}),!s)for(;h()<m;){const C=h(),x={state:t.state,path:ye(t.path,`${e.key}[${C}]`),prefill:E,formData:(i=t.formData)!=null?i:t.prefill,inheritedReadonly:f},k=document.createElement("div");k.className="containerItem border border-gray-300 rounded-lg p-4 bg-white",k.setAttribute("data-container-item",`${e.key}[${C}]`);const z=document.createElement("div"),W=e.columns||1;W===1?z.className="space-y-4":z.className=`grid grid-cols-${W} gap-4`,e.elements.forEach(Z=>{var Q;Z.hidden||Z.type==="hidden"?z.appendChild(ze(ye(x.path,Z.key),(Q=Z.default)!=null?Q:null)):z.appendChild(We(Z,x))}),k.appendChild(z);const H=document.createElement("button");H.type="button",H.className="absolute top-2 right-2 px-2 py-1 rounded",H.style.cssText=`
|
|
370
|
+
color: var(--fb-error-color);
|
|
371
|
+
background-color: transparent;
|
|
372
|
+
transition: background-color var(--fb-transition-duration);
|
|
373
|
+
`,H.textContent="\u2715",H.addEventListener("mouseenter",()=>{H.style.backgroundColor="var(--fb-background-hover-color)"}),H.addEventListener("mouseleave",()=>{H.style.backgroundColor="transparent"}),H.onclick=()=>{h()>m&&w(k)},k.style.position="relative",k.appendChild(H),u.appendChild(k)}if(d.appendChild(u),!s){const C=document.createElement("div");C.className="flex items-center gap-3 mt-2",C.appendChild(b()),C.appendChild(p),d.appendChild(C)}y(),n.appendChild(d)}let dt=null;function cr(e){dt=e}function Jt(e,t,n){if(!dt)throw new Error("validateElement not initialized. Should be set from FormBuilderInstance");return dt(e,t,n)}function Yt(e,t,n){const r=[],{scopeRoot:o,skipValidation:a,path:l}=n;if(!("elements"in e))return{value:null,errors:r};const i=(c,s,f)=>{var d,p;if(a)return;const{state:u}=n,m="minCount"in f&&(d=f.minCount)!=null?d:0,v="maxCount"in f&&(p=f.maxCount)!=null?p:1/0;f.required&&s.length===0&&r.push(`${c}: ${$("required",u)}`),s.length<m&&r.push(`${c}: ${$("minItems",u,{min:m})}`),s.length>v&&r.push(`${c}: ${$("maxItems",u,{max:v})}`)};if("multiple"in e&&e.multiple){const c=[],s=o.querySelectorAll("[data-container-item]");return Array.from(s).filter(f=>{const d=f.getAttribute("data-container-item")||"";if(!d.startsWith(`${t}[`))return!1;const p=d.slice(t.length);return/^\[\d+\]$/.test(p)}).forEach(f=>{const d={},p=(f.getAttribute("data-container-item")||"").match(/\[(\d+)\]$/),u=p?parseInt(p[1],10):0;e.elements.forEach(m=>{var v;if(m.enableIf)try{const h=(v=n.instance)!=null&&v.getState().formRoot?ct(n.instance.getState().formRoot):{};if(!Te(m.enableIf,h,d))return}catch(h){console.error(`Error evaluating enableIf for field "${m.key}" in container "${t}[${u}]":`,h)}const g=`${t}[${u}].${m.key}`,E=Jt({...m,key:g},{path:l},f);E.spread&&E.value!==null&&typeof E.value=="object"?Object.assign(d,E.value):d[m.key]=E.value}),c.push(d)}),i(t,c,e),{value:c,errors:r}}else{const c={},s=o.querySelector(`[data-container="${t}"]`)||o;return e.elements.forEach(f=>{var d;if(f.enableIf)try{const p=(d=n.instance)!=null&&d.getState().formRoot?ct(n.instance.getState().formRoot):{};if(!Te(f.enableIf,p,c))return}catch(p){console.error(`Error evaluating enableIf for field "${f.key}" in container "${t}":`,p)}{const p=`${t}.${f.key}`,u=Jt({...f,key:p},{path:l},s);u.spread&&u.value!==null&&typeof u.value=="object"?Object.assign(c,u.value):c[f.key]=u.value}}),{value:c,errors:r}}}function Xt(e,t,n,r){const{instance:o,scopeRoot:a}=r;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,c)=>{Oe(i)&&e.elements.forEach(s=>{var f,d;const p=`${t}[${c}].${s.key}`;if(s.type==="richinput"&&s.flatOutput){const u=s,m=(f=u.textKey)!=null?f:"text",v=(d=u.filesKey)!=null?d:"files",g=i,E={};m in g&&(E[m]=g[m]),v in g&&(E[v]=g[v]),Object.keys(E).length>0&&o.updateField(p,E)}else{const u=i[s.key];u!==void 0&&o.updateField(p,u)}})});const l=a.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(!Oe(n)){console.warn(`updateContainerField: Expected object for container field "${t}", got ${typeof n}`);return}e.elements.forEach(l=>{var i,c;const s=`${t}.${l.key}`;if(l.type==="richinput"&&l.flatOutput){const f=l,d=(i=f.textKey)!=null?i:"text",p=(c=f.filesKey)!=null?c:"files",u=n,m={};d in u&&(m[d]=u[d]),p in u&&(m[p]=u[p]),Object.keys(m).length>0&&o.updateField(s,m)}else{const f=n[l.key];f!==void 0&&o.updateField(s,f)}})}}function ur(e,t,n,r){var o,a;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&&Oe(e.repeat)),minCount:(o=e.repeat)==null?void 0:o.min,maxCount:(a=e.repeat)==null?void 0:a.max};l.multiple?_t(l,t,n):Wt(l,t,n,r)}function Gt(e){var t,n;const r=e;return{type:"container",key:r.key,label:r.label,description:r.description,hint:r.hint,required:r.required,hidden:r.hidden,default:r.default,actions:r.actions,elements:r.elements,multiple:!!(r.repeat&&Oe(r.repeat)),minCount:(t=r.repeat)==null?void 0:t.min,maxCount:(n=r.repeat)==null?void 0:n.max}}function dr(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 r=Gt(e);return Yt(r,t,n)}function pr(e,t,n,r){typeof console!="undefined"&&console.warn&&console.warn(`[Form Builder] The "group" field type is deprecated. Please use type: "container" instead. Field path: "${t}"`);const o=Gt(e);return Xt(o,t,n,r)}function fr(e){return e!==null&&typeof e=="object"&&"row"in e&&"col"in e&&"rowspan"in e&&"colspan"in e}function mr(e){if(e===null||typeof e!="object")return!1;const t=e;return typeof t.top=="number"&&typeof t.left=="number"&&typeof t.bottom=="number"&&typeof t.right=="number"}function hr(e){return fr(e)?{top:e.row,left:e.col,bottom:e.row+e.rowspan-1,right:e.col+e.colspan-1}:mr(e)?e:null}function Ne(e){return e.map(hr).filter(t=>t!==null)}function Zt(e,t){return Array.from({length:e},()=>Array.from({length:t},()=>""))}function pt(e,t,n){for(let r=0;r<e.length;r++){const o=e[r];if(o.top<0||o.left<0||o.bottom>=t||o.right>=n||o.top>o.bottom||o.left>o.right)return`Merge ${r} out of bounds`;for(let a=r+1;a<e.length;a++){const l=e[a];if(o.top<=l.bottom&&o.bottom>=l.top&&o.left<=l.right&&o.right>=l.left)return`Merges ${r} and ${a} overlap`}}return null}function Qt(e,t,n){for(const r of n){if(r.top===e&&r.left===t)return null;if(e>=r.top&&e<=r.bottom&&t>=r.left&&t<=r.right)return r}return null}function _e(e,t,n){var r;return(r=n.find(o=>o.top===e&&o.left===t))!=null?r:null}function Ce(e){var t;if(!e.anchor)return null;const n=(t=e.focus)!=null?t:e.anchor;return{r1:Math.min(e.anchor.row,n.row),c1:Math.min(e.anchor.col,n.col),r2:Math.max(e.anchor.row,n.row),c2:Math.max(e.anchor.col,n.col)}}function Me(e){const t=document.createElement("button");return t.type="button",t.textContent=e.label,t.title=e.title,t.style.cssText=`
|
|
374
|
+
position: absolute;
|
|
375
|
+
width: ${e.size}px;
|
|
376
|
+
height: ${e.size}px;
|
|
377
|
+
border-radius: 50%;
|
|
378
|
+
border: none;
|
|
379
|
+
background: ${e.color};
|
|
380
|
+
color: ${e.textColor};
|
|
381
|
+
font-size: ${Math.floor(e.size*.6)}px;
|
|
382
|
+
line-height: ${e.size}px;
|
|
383
|
+
text-align: center;
|
|
384
|
+
cursor: pointer;
|
|
385
|
+
z-index: 10;
|
|
386
|
+
padding: 0;
|
|
387
|
+
display: flex;
|
|
388
|
+
align-items: center;
|
|
389
|
+
justify-content: center;
|
|
390
|
+
box-shadow: 0 1px 4px rgba(0,0,0,0.2);
|
|
391
|
+
transition: transform 0.1s, opacity 0.1s;
|
|
392
|
+
pointer-events: all;
|
|
393
|
+
`,t.addEventListener("mouseenter",()=>{t.style.transform="scale(1.15)"}),t.addEventListener("mouseleave",()=>{t.style.transform="scale(1)"}),t.addEventListener("click",n=>{n.stopPropagation(),e.onClick(n)}),t}function vr(e,t){const{cells:n,merges:r=[]}=e;if(n.length===0)return;const o=n[0].length,a=document.createElement("table");a.style.cssText=`
|
|
394
|
+
width: 100%;
|
|
395
|
+
border-collapse: collapse;
|
|
396
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
397
|
+
border-radius: var(--fb-border-radius);
|
|
398
|
+
font-size: var(--fb-font-size);
|
|
399
|
+
font-family: var(--fb-font-family);
|
|
400
|
+
color: var(--fb-text-color);
|
|
401
|
+
`,n.forEach((i,c)=>{var s,f;const d=(c===0?a.createTHead():(s=a.tBodies[0])!=null?s:a.createTBody()).insertRow();for(let p=0;p<o;p++){if(Qt(c,p,r))continue;const u=_e(c,p,r),m=document.createElement(c===0?"th":"td");if(u){const v=u.bottom-u.top+1,g=u.right-u.left+1;v>1&&(m.rowSpan=v),g>1&&(m.colSpan=g)}m.textContent=(f=i[p])!=null?f:"",m.style.cssText=`
|
|
402
|
+
padding: 6px 10px;
|
|
403
|
+
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
404
|
+
text-align: left;
|
|
405
|
+
vertical-align: top;
|
|
406
|
+
${c===0?"background-color: var(--fb-background-hover-color); font-weight: 600;":""}
|
|
407
|
+
`,d.appendChild(m)}});const l=document.createElement("div");l.style.cssText="overflow-x: auto; max-width: 100%;",l.appendChild(a),t.appendChild(l)}function gr(e,t,n,r,o,a){if(e.contentEditable==="true")return;e.contentEditable="true",e.focus();const l=document.createRange(),i=window.getSelection();l.selectNodeContents(e),l.collapse(!1),i==null||i.removeAllRanges(),i==null||i.addRange(l);function c(){var d;e.contentEditable="inherit";const p=r();p[t]&&(p[t][n]=(d=e.textContent)!=null?d:""),o()}function s(d){var p,u,m,v;const g=r(),E=(u=(p=g[0])==null?void 0:p.length)!=null?u:0;if(d.key==="Escape"){e.contentEditable="inherit",e.textContent=(v=(m=g[t])==null?void 0:m[n])!=null?v:"",e.removeEventListener("keydown",s),e.removeEventListener("blur",f);return}if(d.key==="Enter"&&!d.shiftKey){d.preventDefault(),d.stopPropagation(),c(),e.removeEventListener("keydown",s),e.removeEventListener("blur",f);const h=t+1<g.length?t+1:t;a(h,n);return}if(d.key==="Tab"){d.preventDefault(),d.stopPropagation(),c(),e.removeEventListener("keydown",s),e.removeEventListener("blur",f);let h=t,b=d.shiftKey?n-1:n+1;b<0&&(b=E-1,h=Math.max(0,t-1)),b>=E&&(b=0,h=Math.min(g.length-1,t+1)),a(h,b)}}function f(){e.contentEditable==="true"&&(c(),e.removeEventListener("keydown",s),e.removeEventListener("blur",f))}e.addEventListener("keydown",s),e.addEventListener("blur",f)}function br(){if(document.getElementById("fb-spin-keyframes"))return;const e=document.createElement("style");e.id="fb-spin-keyframes",e.textContent="@keyframes fb-spin { to { transform: rotate(360deg); } }",document.head.appendChild(e)}function yr(e,t){br();const n=document.createElement("div");n.className="fb-table-loading-overlay",n.style.cssText=`
|
|
408
|
+
position: absolute; top: 0; left: 0; right: 0; bottom: 0;
|
|
409
|
+
background: rgba(255,255,255,0.8); display: flex;
|
|
410
|
+
align-items: center; justify-content: center; flex-direction: column;
|
|
411
|
+
gap: 8px; z-index: 100;
|
|
412
|
+
`;const r=document.createElement("div");r.style.cssText=`
|
|
413
|
+
width: 24px; height: 24px; border: 3px solid var(--fb-border-color, #ccc);
|
|
414
|
+
border-top-color: var(--fb-primary-color, #0066cc); border-radius: 50%;
|
|
415
|
+
animation: fb-spin 0.8s linear infinite;
|
|
416
|
+
`;const o=document.createElement("span");return o.textContent=t,o.style.cssText="font-size: var(--fb-font-size-small, 12px); color: var(--fb-text-color, #333);",n.appendChild(r),n.appendChild(o),e.appendChild(n),n}function xr(e,t,n,r,o){var a,l,i,c,s,f,d,p;const u=r.state,m=r.instance,v=e.mergeAllowed!==!1,g=(l=(a=e.fieldNames)==null?void 0:a.cells)!=null?l:"cells",E=(c=(i=e.fieldNames)==null?void 0:i.merges)!=null?c:"merges",h=t.cells.length>0?t.cells.map(A=>[...A]):Zt((s=e.rows)!=null?s:3,(f=e.columns)!=null?f:3);let b=t.merges?[...t.merges]:[];const y={anchor:null,focus:null,dragging:!1},w=document.createElement("input");w.type="hidden",w.name=n,w.value=JSON.stringify({[g]:h,[E]:b}),o.appendChild(w);function C(){w.value=JSON.stringify({[g]:h,[E]:b}),m&&m.triggerOnChange(n,{[g]:h,[E]:b})}w._applyExternalUpdate=A=>{h.length=0,A.cells.forEach(T=>h.push([...T])),b.length=0,A.merges&&A.merges.forEach(T=>b.push({...T})),y.anchor=null,y.focus=null,C(),N()};const x=document.createElement("div");x.style.cssText="position: relative; padding: 20px 20px 20px 24px; overflow-x: auto; max-width: 100%;";const k=document.createElement("table");k.style.cssText=`
|
|
417
|
+
border-collapse: collapse;
|
|
418
|
+
font-size: var(--fb-font-size);
|
|
419
|
+
font-family: var(--fb-font-family);
|
|
420
|
+
color: var(--fb-text-color);
|
|
421
|
+
table-layout: fixed;
|
|
422
|
+
`,x.appendChild(k);const z=(p=(d=e.importAccept)==null?void 0:d.map(A=>`.${A.toLowerCase()}`))!=null?p:[];async function W(A){var T,S,B;if(!u.config.parseTableFile)return;if(z.length>0){const F=A.name.toLowerCase().replace(/^.*(\.[^.]+)$/,"$1");if(!z.includes(F))return}const D=yr(x,$("tableImporting",u));try{const F=await u.config.parseTableFile(A),ee=F.cells,O=(T=F.merges)!=null?T:[];if(O.length>0){const U=pt(O,ee.length,(B=(S=ee[0])==null?void 0:S.length)!=null?B:0);if(U)throw new Error(U)}h.length=0,ee.forEach(U=>h.push([...U])),b.length=0,O.forEach(U=>b.push({...U})),y.anchor=null,y.focus=null,C(),N()}catch(F){const ee=F instanceof Error?F.message:String(F);console.error($("tableImportError",u).replace("{error}",ee))}finally{D.remove()}}if(e.importAccept&&u.config.parseTableFile){const A=document.createElement("button");A.type="button",A.title=$("tableImportFile",u),A.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48"/></svg>',A.style.cssText=`
|
|
423
|
+
position: absolute; top: 2px; left: 2px;
|
|
424
|
+
width: 20px; height: 20px;
|
|
425
|
+
padding: 0;
|
|
426
|
+
display: flex; align-items: center; justify-content: center;
|
|
427
|
+
color: var(--fb-text-color, #999);
|
|
428
|
+
border: none;
|
|
429
|
+
background: transparent;
|
|
430
|
+
cursor: pointer;
|
|
431
|
+
z-index: 2;
|
|
432
|
+
`,A.addEventListener("mouseenter",()=>{A.style.color="var(--fb-primary-color, #0066cc)"}),A.addEventListener("mouseleave",()=>{A.style.color="var(--fb-text-color, #999)"});const T=document.createElement("input");T.type="file",T.accept=z.join(","),T.style.display="none",x.appendChild(T),A.addEventListener("click",()=>{T.click()}),T.addEventListener("change",()=>{var B;const D=(B=T.files)==null?void 0:B[0];D&&W(D),T.value=""}),x.appendChild(A);let S=0;x.addEventListener("dragenter",B=>{B.preventDefault(),S++,S===1&&(x.style.outline="2px dashed var(--fb-primary-color, #0066cc)",x.style.outlineOffset="-2px")}),x.addEventListener("dragover",B=>{B.preventDefault(),B.dataTransfer&&(B.dataTransfer.dropEffect="copy")}),x.addEventListener("dragleave",B=>{B.preventDefault(),S--,S<=0&&(S=0,x.style.outline="",x.style.outlineOffset="")}),x.addEventListener("drop",B=>{var D,F;B.preventDefault(),S=0,x.style.outline="",x.style.outlineOffset="";const ee=(F=(D=B.dataTransfer)==null?void 0:D.files)==null?void 0:F[0];ee&&W(ee)})}o.appendChild(x);const H=document.createElement("div");H.style.cssText=`
|
|
433
|
+
position: fixed;
|
|
434
|
+
display: none;
|
|
435
|
+
background: white;
|
|
436
|
+
border: 1px solid var(--fb-border-color);
|
|
437
|
+
border-radius: var(--fb-border-radius);
|
|
438
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
|
|
439
|
+
padding: 4px;
|
|
440
|
+
z-index: 1000;
|
|
441
|
+
gap: 4px;
|
|
442
|
+
flex-direction: column;
|
|
443
|
+
`,o.appendChild(H);function Z(A,T){const S=document.createElement("button");return S.type="button",S.textContent=A,S.style.cssText=`
|
|
444
|
+
padding: 4px 10px;
|
|
445
|
+
font-size: var(--fb-font-size-small);
|
|
446
|
+
color: var(--fb-text-color);
|
|
447
|
+
border: 1px solid var(--fb-border-color);
|
|
448
|
+
border-radius: var(--fb-border-radius);
|
|
449
|
+
background: transparent;
|
|
450
|
+
cursor: pointer;
|
|
451
|
+
white-space: nowrap;
|
|
452
|
+
text-align: left;
|
|
453
|
+
`,S.addEventListener("mouseenter",()=>{S.style.background="var(--fb-background-hover-color)"}),S.addEventListener("mouseleave",()=>{S.style.background="transparent"}),S.addEventListener("click",()=>{oe(),T()}),S}function Q(A,T){if(!v)return;H.innerHTML="",H.style.display="flex";const S=Ce(y),B=S&&(S.r1!==S.r2||S.c1!==S.c2),D=y.anchor&&_e(y.anchor.row,y.anchor.col,b);if(B&&H.appendChild(Z($("tableMergeCells",u),q)),D&&H.appendChild(Z($("tableSplitCell",u),M)),!H.firstChild){oe();return}const F=140,ee=H.children.length*32+8,O=window.innerWidth,U=window.innerHeight,V=A+F>O?A-F:A,Y=T+ee>U?T-ee:T;H.style.left=`${V}px`,H.style.top=`${Y}px`}function oe(){H.style.display="none"}const Le=new AbortController;document.addEventListener("mousedown",A=>{if(!o.isConnected){Le.abort();return}H.contains(A.target)||oe()},{signal:Le.signal});function pe(){const A=Ce(y);k.querySelectorAll("td[data-row]").forEach(T=>{const S=parseInt(T.getAttribute("data-row")||"0",10),B=parseInt(T.getAttribute("data-col")||"0",10),D=y.anchor!==null&&y.anchor.row===S&&y.anchor.col===B,F=A!==null&&S>=A.r1&&S<=A.r2&&B>=A.c1&&B<=A.c2;T.style.outline=D?"2px solid var(--fb-primary-color, #0066cc)":"",T.style.outlineOffset=D?"-2px":"",S===0?T.style.backgroundColor="var(--fb-background-hover-color)":T.style.backgroundColor=F&&!D?"rgba(0,102,204,0.08)":""})}function we(A,T){y.anchor={row:A,col:T},y.focus=null,pe(),k.focus()}function Be(A,T){const S=k.querySelector(`td[data-row="${A}"][data-col="${T}"]`);if(!S)return;const B=S.querySelector("span");B&&(y.anchor={row:A,col:T},y.focus=null,pe(),gr(B,A,T,()=>h,C,we))}function xe(A){var T;const S=h.length>0?h[0].length:(T=e.columns)!=null?T:3,B=Array(S).fill(""),D=A!==void 0?A+1:h.length;h.splice(D,0,B),b=b.map(F=>F.top>=D?{...F,top:F.top+1,bottom:F.bottom+1}:F.top<D&&F.bottom>=D?{...F,bottom:F.bottom+1}:F),C(),N()}function et(A){if(h.length<=1)return;const T=A!==void 0?A:y.anchor?y.anchor.row:h.length-1;b=b.map(S=>S.top===T&&S.bottom===T?null:S.top===T?{...S,bottom:S.bottom-1}:S.bottom===T?{...S,bottom:S.bottom-1}:S.top<T&&S.bottom>T?{...S,bottom:S.bottom-1}:S.top>T?{...S,top:S.top-1,bottom:S.bottom-1}:S).filter(S=>S!==null),h.splice(T,1),y.anchor&&y.anchor.row>=h.length&&(y.anchor={row:h.length-1,col:y.anchor.col}),C(),N()}function De(A){var T,S;const B=A!==void 0?A+1:(S=(T=h[0])==null?void 0:T.length)!=null?S:0;h.forEach(D=>D.splice(B,0,"")),b=b.map(D=>D.left>=B?{...D,left:D.left+1,right:D.right+1}:D.left<B&&D.right>=B?{...D,right:D.right+1}:D),C(),N()}function L(A){if(h.length===0||h[0].length<=1)return;const T=A!==void 0?A:y.anchor?y.anchor.col:h[0].length-1;b=b.map(S=>S.left===T&&S.right===T?null:S.left===T?{...S,right:S.right-1}:S.right===T?{...S,right:S.right-1}:S.left<T&&S.right>T?{...S,right:S.right-1}:S.left>T?{...S,left:S.left-1,right:S.right-1}:S).filter(S=>S!==null),h.forEach(S=>S.splice(T,1)),y.anchor&&y.anchor.col>=h[0].length&&(y.anchor={row:y.anchor.row,col:h[0].length-1}),C(),N()}function q(){var A,T;if(!v)return;const S=Ce(y);if(!S)return;const{r1:B,c1:D,r2:F,c2:ee}=S;if(B===F&&D===ee)return;b=b.filter(j=>!(j.top<=F&&j.bottom>=B&&j.left<=ee&&j.right>=D));const O=h[B][D];for(let j=B;j<=F;j++)for(let X=D;X<=ee;X++)(j!==B||X!==D)&&(h[j][X]="");h[B][D]=O;const U={top:B,left:D,bottom:F,right:ee},V=[...b,U],Y=pt(V,h.length,(T=(A=h[0])==null?void 0:A.length)!=null?T:0);if(Y){console.warn("Merge validation failed:",Y);return}b.push(U),y.anchor={row:B,col:D},y.focus=null,C(),N()}function M(){if(!v||!y.anchor)return;const{row:A,col:T}=y.anchor,S=b.findIndex(B=>B.top===A&&B.left===T);S!==-1&&(b.splice(S,1),y.focus=null,C(),N())}function N(){var A,T;k.innerHTML="";const S=h.length,B=S>0?h[0].length:0,D=Ce(y);for(let F=0;F<S;F++){const ee=(F===0?(A=k.tHead)!=null?A:k.createTHead():(T=k.tBodies[0])!=null?T:k.createTBody()).insertRow();for(let O=0;O<B;O++){if(Qt(F,O,b))continue;const U=_e(F,O,b),V=document.createElement("td");if(V.setAttribute("data-row",String(F)),V.setAttribute("data-col",String(O)),U){const G=U.bottom-U.top+1,K=U.right-U.left+1;G>1&&(V.rowSpan=G),K>1&&(V.colSpan=K)}const Y=D!==null&&F>=D.r1&&F<=D.r2&&O>=D.c1&&O<=D.c2,j=y.anchor!==null&&y.anchor.row===F&&y.anchor.col===O;V.style.cssText=["border: var(--fb-border-width) solid var(--fb-border-color);","padding: 4px 8px;","min-width: 80px;","vertical-align: top;","cursor: text;","position: relative;",F===0?"background-color: var(--fb-background-hover-color); font-weight: 600;":"",Y&&!j?"background-color: rgba(0,102,204,0.08);":"",j?"outline: 2px solid var(--fb-primary-color, #0066cc); outline-offset: -2px;":""].join(" ");const X=document.createElement("span");X.textContent=h[F][O],X.style.cssText="display: block; min-height: 1.4em; white-space: pre-wrap; word-break: break-word; outline: none;",V.appendChild(X);const _=F,re=O;V.addEventListener("mousedown",G=>{if(G.target.tagName!=="BUTTON"&&G.target.contentEditable!=="true"){if(G.button===2){const K=Ce(y);if(K&&_>=K.r1&&_<=K.r2&&re>=K.c1&&re<=K.c2)return}G.shiftKey&&y.anchor?(G.preventDefault(),y.focus={row:_,col:re},y.dragging=!1,pe()):(y.anchor={row:_,col:re},y.focus=null,y.dragging=!0,pe())}}),V.addEventListener("mouseup",G=>{if(G.target.tagName!=="BUTTON"&&y.dragging){y.dragging=!1;const K=Ce(y);(!K||K.r1===K.r2&&K.c1===K.c2)&&Be(_,re)}}),V.addEventListener("mousemove",G=>{if(y.dragging&&G.buttons===1){const K=y.anchor;K&&(K.row!==_||K.col!==re)&&(y.focus={row:_,col:re},pe())}}),V.addEventListener("contextmenu",G=>{if(!v)return;const K=Ce(y),ue=K&&(K.r1!==K.r2||K.c1!==K.c2),ce=y.anchor&&_e(y.anchor.row,y.anchor.col,b);(ue||ce)&&(G.preventDefault(),Q(G.clientX,G.clientY))}),ee.appendChild(V)}}fe(),k.setAttribute("tabindex","0"),k.onkeydown=F=>{var ee,O;if(k.querySelector("[contenteditable='true']"))return;const U=y.anchor;if(!U)return;const V=h.length,Y=V>0?h[0].length:0,j={ArrowUp:[-1,0],ArrowDown:[1,0],ArrowLeft:[0,-1],ArrowRight:[0,1]};if(j[F.key]){F.preventDefault();const[X,_]=j[F.key],re=Math.max(0,Math.min(V-1,U.row+X)),G=Math.max(0,Math.min(Y-1,U.col+_));F.shiftKey?(y.focus={row:re,col:G},pe()):we(re,G);return}if(F.key==="Enter"){F.preventDefault(),Be(U.row,U.col);return}if(F.key==="Tab"){F.preventDefault();const X=(O=(ee=h[0])==null?void 0:ee.length)!=null?O:0;let _=U.row,re=F.shiftKey?U.col-1:U.col+1;re<0&&(re=X-1,_=Math.max(0,_-1)),re>=X&&(re=0,_=Math.min(h.length-1,_+1)),we(_,re);return}if(v&&F.key==="m"&&F.ctrlKey&&!F.shiftKey){F.preventDefault(),q();return}v&&F.key==="M"&&F.ctrlKey&&F.shiftKey&&(F.preventDefault(),M())},k.oncopy=F=>{var ee,O,U,V;const Y=Ce(y);if(!Y)return;F.preventDefault();const{r1:j,c1:X,r2:_,c2:re}=Y,G=[],K=[];for(let P=j;P<=_;P++){const se=[],me=[];for(let he=X;he<=re;he++){const ge=(O=(ee=h[P])==null?void 0:ee[he])!=null?O:"";se.push(ge);const Se=ge.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");me.push(`<td>${Se}</td>`)}G.push(se.join(" ")),K.push(`<tr>${me.join("")}</tr>`)}const ue=G.join(`
|
|
454
|
+
`),ce=`<table>${K.join("")}</table>`;(U=F.clipboardData)==null||U.setData("text/plain",ue),(V=F.clipboardData)==null||V.setData("text/html",ce)},k.onpaste=F=>{var ee,O,U,V,Y,j,X,_,re;const G=y.anchor;if(!G)return;const K=(O=(ee=F.clipboardData)==null?void 0:ee.getData("text/plain"))!=null?O:"",ue=K.includes(" ")||K.split(/\r?\n/).filter(de=>de).length>1,ce=k.querySelector("[contenteditable='true']");if(ce&&!ue)return;if(F.preventDefault(),ce){ce.contentEditable="inherit";const de=parseInt((V=(U=ce.closest("td"))==null?void 0:U.getAttribute("data-row"))!=null?V:"0",10),ke=parseInt((j=(Y=ce.closest("td"))==null?void 0:Y.getAttribute("data-col"))!=null?j:"0",10);h[de]&&(h[de][ke]=(X=ce.textContent)!=null?X:"")}if(!K.trim())return;const P=K.split(/\r?\n/).map(de=>de.split(" "));P.length>1&&P[P.length-1].length===1&&P[P.length-1][0]===""&&P.pop();const se=G.row,me=G.col,he=se+P.length;for(;h.length<he;)h.push(Array((re=(_=h[0])==null?void 0:_.length)!=null?re:1).fill(""));const ge=Math.max(...P.map(de=>de.length)),Se=me+ge;if(h[0]&&Se>h[0].length){const de=Se-h[0].length;h.forEach(ke=>{for(let je=0;je<de;je++)ke.push("")})}for(let de=0;de<P.length;de++)for(let ke=0;ke<P[de].length;ke++){const je=se+de,Zr=me+ke;h[je]&&(h[je][Zr]=P[de][ke])}C(),N()}}const I=Me({label:"+",title:$("tableAddColumn",u),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=I.dataset.afterCol)!=null?A:"0",10);De(T)}});I.style.position="absolute",I.style.display="none",x.appendChild(I);const R=Me({label:"+",title:$("tableAddRow",u),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=R.dataset.afterRow)!=null?A:"0",10);xe(T)}});R.style.position="absolute",R.style.display="none",x.appendChild(R);let te=[],ne=[];const ie=Me({label:"+",title:$("tableAddColumn",u),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>De()});ie.style.position="absolute",ie.style.display="none",x.appendChild(ie);const ae=Me({label:"+",title:$("tableAddRow",u),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>xe()});ae.style.position="absolute",ae.style.display="none",x.appendChild(ae);function fe(){var A,T;te.forEach(O=>O.remove()),te=[],ne.forEach(O=>O.remove()),ne=[];const S=h.length>0?h[0].length:0,B=h.length;if(S>1){const O=Array.from(k.querySelectorAll("thead td[data-col]"));for(const U of O){const V=parseInt((A=U.getAttribute("data-col"))!=null?A:"0",10),Y=Me({label:"\xD7",title:$("tableRemoveColumn",u),size:16,color:"var(--fb-error-color, #dc3545)",textColor:"white",onClick:()=>L(V)});Y.setAttribute("data-action","remove-col"),Y.setAttribute("data-col",String(V)),Y.style.position="absolute",Y.style.display="none",x.appendChild(Y),te.push(Y)}}if(B>1){const O=[...k.tHead?Array.from(k.tHead.rows):[],...k.tBodies[0]?Array.from(k.tBodies[0].rows):[]].filter(U=>U.querySelector("td[data-row]"));for(const U of O){const V=U.querySelector("td[data-row]");if(!V)continue;const Y=parseInt((T=V.getAttribute("data-row"))!=null?T:"0",10),j=Me({label:"\xD7",title:$("tableRemoveRow",u),size:16,color:"var(--fb-error-color, #dc3545)",textColor:"white",onClick:()=>et(Y)});j.setAttribute("data-action","remove-row"),j.setAttribute("data-row",String(Y)),j.style.position="absolute",j.style.display="none",x.appendChild(j),ne.push(j)}}function D(O,U,V,Y,j){var X;const _=j?Array.from(k.querySelectorAll("thead td[data-col]")):[];let re=-1,G=1/0,K=-1,ue=-1,ce=1/0;for(let P=0;P<_.length;P++){const se=_[P].getBoundingClientRect(),me=(se.left+se.right)/2,he=Math.abs(O-me);he<G&&(G=he,re=P);const ge=Math.abs(O-se.right);ge<ce&&ge<20&&(ce=ge,K=se.right-U.left+Y,ue=parseInt((X=_[P].getAttribute("data-col"))!=null?X:"0",10))}te.forEach((P,se)=>{if(!j||se!==re){P.style.display="none";return}const me=_[se].getBoundingClientRect(),he=(me.left+me.right)/2-U.left+Y;P.style.left=`${he-8}px`,P.style.top="2px",P.style.display="flex"}),j&&ue>=0?(I.style.display="flex",I.style.left=`${K-10}px`,I.style.top=`${V.top-U.top-10}px`,I.dataset.afterCol=String(ue)):I.style.display="none"}function F(O,U,V,Y,j){var X;const _=[];if(j){if(k.tHead)for(const P of Array.from(k.tHead.rows))P.querySelector("td[data-row]")&&_.push(P);if(k.tBodies[0])for(const P of Array.from(k.tBodies[0].rows))P.querySelector("td[data-row]")&&_.push(P)}let re=-1,G=1/0,K=-1,ue=-1,ce=1/0;for(let P=0;P<_.length;P++){const se=_[P].getBoundingClientRect(),me=(se.top+se.bottom)/2,he=Math.abs(O-me);he<G&&(G=he,re=P);const ge=Math.abs(O-se.bottom);if(ge<ce&&ge<14){ce=ge,K=se.bottom-U.top;const Se=_[P].querySelector("td[data-row]");ue=parseInt((X=Se==null?void 0:Se.getAttribute("data-row"))!=null?X:"0",10)}}ne.forEach((P,se)=>{if(!j||se!==re){P.style.display="none";return}const me=_[se].getBoundingClientRect(),he=(me.top+me.bottom)/2-U.top;P.style.left="4px",P.style.top=`${he-8}px`,P.style.display="flex"}),j&&ue>=0?(R.style.display="flex",R.style.top=`${K-10}px`,R.style.left=`${V.left-U.left+Y-10}px`,R.dataset.afterRow=String(ue)):R.style.display="none"}let ee=!1;x.onmousemove=O=>{const U=O.target;if(U.tagName==="BUTTON"&&U.parentElement===x||ee)return;ee=!0;const V=O.clientX,Y=O.clientY;requestAnimationFrame(()=>{ee=!1;const j=x.getBoundingClientRect(),X=k.getBoundingClientRect(),_=x.scrollLeft,re=Y>=j.top&&Y<X.top+4,G=V>=j.left&&V<X.left+4,K=Math.min(X.right,j.right),ue=V>K-20&&V<=j.right,ce=Y>X.bottom-4&&Y<=j.bottom+20;if(D(V,j,X,_,re),F(Y,j,X,_,G),ie.style.display=ue?"flex":"none",ue&&(ie.style.left=`${j.right-j.left+_-20}px`,ie.style.top=`${(X.top+X.bottom)/2-j.top-10}px`),ae.style.display=ce?"flex":"none",ce){const P=(j.left+j.right)/2-j.left+_;ae.style.left=`${P-10}px`,ae.style.top=`${X.bottom-j.top-10}px`}})},x.onmouseleave=()=>{te.forEach(O=>{O.style.display="none"}),ne.forEach(O=>{O.style.display="none"}),I.style.display="none",R.style.display="none",ie.style.display="none",ae.style.display="none"}}N()}function Er(e){var t,n;return{cells:Zt((t=e.rows)!=null?t:3,(n=e.columns)!=null?n:3),merges:[]}}function ft(e){return e!==null&&typeof e=="object"&&"cells"in e&&Array.isArray(e.cells)}function mt(e,t){return e!==null&&typeof e=="object"&&t in e&&Array.isArray(e[t])}function Cr(e,t,n,r){var o,a,l,i;const c=t.state,s=le(e,c,t),f=t.prefill[e.key],d=(a=(o=e.fieldNames)==null?void 0:o.cells)!=null?a:"cells",p=(i=(l=e.fieldNames)==null?void 0:l.merges)!=null?i:"merges";let u;if(ft(f))u={cells:f.cells,merges:f.merges?Ne(f.merges):[]};else if(f&&mt(f,d)){const m=f[p];u={cells:f[d],merges:m?Ne(m):[]}}else if(ft(e.default))u={cells:e.default.cells,merges:e.default.merges?Ne(e.default.merges):[]};else if(e.default&&mt(e.default,d)){const m=e.default[p];u={cells:e.default[d],merges:m?Ne(m):[]}}else u=Er(e);if(u.merges&&u.merges.length>0){const m=u.cells.length,v=m>0?u.cells[0].length:0,g=pt(u.merges,m,v);g&&(console.warn(`Table "${e.key}": invalid prefill merges stripped (${g})`),u={...u,merges:[]})}s?vr(u,n):xr(e,u,r,t,n)}function wr(e,t,n){var r,o;const{scopeRoot:a,skipValidation:l}=n,i=[],c=(o=(r=e.fieldNames)==null?void 0:r.cells)!=null?o:"cells",s=a.querySelector(`[name="${t}"]`);if(!s)return{value:null,errors:i};let f=null;try{f=JSON.parse(s.value)}catch(d){return i.push(`${t}: invalid table data`),{value:null,errors:i}}if(!l&&e.required){const d=f[c];d!=null&&d.some(p=>p.some(u=>u.trim()!==""))||i.push(`${t}: ${$("required",n.state)}`)}return{value:f,errors:i}}function kr(e,t,n,r){var o,a,l,i;const{scopeRoot:c}=r,s=(a=(o=e.fieldNames)==null?void 0:o.cells)!=null?a:"cells",f=(i=(l=e.fieldNames)==null?void 0:l.merges)!=null?i:"merges",d=c.querySelector(`[name="${t}"]`);if(!d){console.warn(`updateTableField: no hidden input found for "${t}". Re-render to reflect new data.`);return}let p=null;if(ft(n))p={cells:n.cells,merges:n.merges?Ne(n.merges):[]};else if(n&&mt(n,s)){const u=n[f];p={cells:n[s],merges:u?Ne(u):[]}}p&&d._applyExternalUpdate?d._applyExternalUpdate(p):d.value=JSON.stringify(n)}function $r(e,t){e.style.overflow="hidden",e.style.resize="none";const n=(e.value.match(/\n/g)||[]).length+1;e.rows=Math.max(3,n);const r=()=>{e.isConnected&&(e.style.height="0",e.style.height=`${e.scrollHeight}px`,t&&(t.style.height=`${e.scrollHeight}px`))};e.addEventListener("input",r),setTimeout(()=>{e.isConnected&&r()},0)}function ht(e,t){var n,r,o,a;const l=new Map,i=new Map;for(const c of e){const s=t.resourceIndex.get(c),f=(n=s==null?void 0:s.name)!=null?n:c;i.set(f,((r=i.get(f))!=null?r:0)+1)}for(const c of e){const s=t.resourceIndex.get(c),f=(o=s==null?void 0:s.name)!=null?o:c;((a=i.get(f))!=null?a:1)>1&&s?l.set(c,`${f} (${yn(s.size)})`):l.set(c,f)}return l}function vt(e){return e?e.type.startsWith("image/"):!1}function en(e,t){const n=ht(e,t),r=new Map;for(const o of e){const a=n.get(o);a&&r.set(a,o)}return r}function gt(e){return/\s/.test(e)||e.includes('"')?`@"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:`@${e}`}function Je(e){const t=[],n=e.length;let r=0;for(;r<n;)if(e[r]==="@"){if(r>0&&!/\s/.test(e[r-1])){r++;continue}const o=r;if(r++,r<n&&e[r]==='"'){r++;let a="";for(;r<n&&e[r]!=='"';)e[r]==="\\"&&r+1<n?(a+=e[r+1],r+=2):(a+=e[r],r++);r<n&&e[r]==='"'&&(r++,(r>=n||/\s/.test(e[r]))&&t.push({start:o,end:r,raw:e.slice(o,r),name:a}))}else if(r<n&&!/\s/.test(e[r])){const a=r;for(;r<n&&!/\s/.test(e[r]);)r++;const l=e.slice(a,r);t.push({start:o,end:r,raw:e.slice(o,r),name:l})}}else r++;return t}function Lr(e,t){if(t.size===0)return[];const n=Je(e),r=[];for(const o of n){const a=t.get(o.name);a&&r.push({start:o.start,end:o.end,name:o.name,rid:a})}return r}function Sr(e,t){const n=Lr(e,t);if(n.length===0)return e;let r="",o=0;for(const a of n)r+=e.slice(o,a.start),r+=`@${a.rid}`,o=a.end;return r+=e.slice(o),r}function tn(e,t,n){const r=ht(t,n),o=new Map;for(const c of t){const s=r.get(c);s&&o.set(c,s)}const a=Je(e);if(a.length===0)return e;let l="",i=0;for(const c of a){l+=e.slice(i,c.start);const s=o.get(c.name);s?l+=gt(s):l+=c.raw,i=c.end}return l+=e.slice(i),l}function nn(e,t,n,r){if(ve(e),n!=null&&n.file&&vt(n)){const o=document.createElement("img");o.alt=n.name,o.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;";const a=new FileReader;a.onload=l=>{var i;o.src=((i=l.target)==null?void 0:i.result)||""},a.readAsDataURL(n.file),e.appendChild(o)}else if(r.config.getThumbnail){r.config.getThumbnail(t).then(a=>{var l;if(!a||!e.isConnected)return;const i=document.createElement("img");i.alt=(l=n==null?void 0:n.name)!=null?l:t,i.src=a,i.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;",ve(e),e.appendChild(i)}).catch(a=>{var l,i;(i=(l=r.config).onThumbnailError)==null||i.call(l,a,t)});const o=document.createElement("div");o.style.cssText="width: 100%; height: 100%; background: var(--fb-background-hover-color, #f3f4f6); display: flex; align-items: center; justify-content: center;",o.innerHTML='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>',e.appendChild(o)}else{const o=document.createElement("div");if(o.style.cssText="width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 2px; box-sizing: border-box;",o.innerHTML='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>',n!=null&&n.name){const a=document.createElement("span");a.style.cssText="font-size: 9px; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 44px; color: var(--fb-text-color, #111827);",a.textContent=n.name,o.appendChild(a)}e.appendChild(o)}}function rn(e,t,n,r){if(ve(e),n!=null&&n.file&&vt(n)){const o=document.createElement("img");o.alt=n.name,o.style.cssText="max-width: 120px; max-height: 120px; object-fit: contain; display: block;";const a=new FileReader;a.onload=l=>{var i;o.src=((i=l.target)==null?void 0:i.result)||""},a.readAsDataURL(n.file),e.appendChild(o)}else r.config.getThumbnail&&r.config.getThumbnail(t).then(o=>{var a;if(!o||!e.isConnected)return;const l=document.createElement("img");l.alt=(a=n==null?void 0:n.name)!=null?a:t,l.src=o,l.style.cssText="max-width: 120px; max-height: 120px; object-fit: contain; display: block;",ve(e),e.appendChild(l)}).catch(o=>{var a,l;(l=(a=r.config).onThumbnailError)==null||l.call(a,o,t)})}function on(e,t){const n=t.getBoundingClientRect(),r=e.getBoundingClientRect(),o=Math.max(4,Math.min(n.left+n.width/2-r.width/2,window.innerWidth-r.width-4)),a=n.top-r.height-8,l=n.bottom+8,i=a>=4?a:l;e.style.left=`${o}px`,e.style.top=`${Math.max(4,i)}px`}function ln(e,t,n){const r=n.resourceIndex.get(t),o=document.createElement("div");o.className="fb-richinput-portal-tooltip fb-richinput-mention-tooltip",o.style.cssText=`
|
|
455
|
+
position: fixed;
|
|
456
|
+
z-index: 99999;
|
|
457
|
+
background: #fff;
|
|
458
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
459
|
+
border-radius: 8px;
|
|
460
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
|
461
|
+
padding: 4px;
|
|
462
|
+
pointer-events: none;
|
|
463
|
+
min-width: 60px;
|
|
464
|
+
max-width: 140px;
|
|
465
|
+
`;const a=document.createElement("div");return a.style.cssText="min-height: 60px; max-height: 120px; display: flex; align-items: center; justify-content: center;",rn(a,t,r,n),o.appendChild(a),document.body.appendChild(o),on(o,e),o}function an(e,t){var n,r;const{rid:o,state:a,isReadonly:l,onMention:i,onRemove:c}=t,s=a.resourceIndex.get(o),f=(n=s==null?void 0:s.name)!=null?n:o,d=document.createElement("div");d.className="fb-richinput-portal-tooltip fb-richinput-file-tooltip",d.style.cssText=`
|
|
466
|
+
position: fixed;
|
|
467
|
+
z-index: 99999;
|
|
468
|
+
background: #fff;
|
|
469
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
470
|
+
border-radius: 8px;
|
|
471
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
|
472
|
+
padding: 4px;
|
|
473
|
+
pointer-events: auto;
|
|
474
|
+
min-width: 80px;
|
|
475
|
+
max-width: 260px;
|
|
476
|
+
`;const p=document.createElement("div");p.style.cssText="min-height: 60px; max-height: 120px; display: flex; align-items: center; justify-content: center;",rn(p,o,s,a),d.appendChild(p);const u=document.createElement("div");u.style.cssText="padding: 4px 6px 2px; font-size: 12px; color: var(--fb-text-color, #111827); word-break: break-word; border-top: 1px solid var(--fb-border-color, #d1d5db);",u.textContent=f,d.appendChild(u);const m=document.createElement("div");m.style.cssText="display: flex; align-items: center; gap: 2px; padding: 3px 4px 2px; border-top: 1px solid var(--fb-border-color, #d1d5db); justify-content: center;";const v="background: none; border: none; cursor: pointer; padding: 3px 5px; border-radius: 4px; color: var(--fb-text-muted-color, #6b7280); display: flex; align-items: center; transition: background 0.1s, color 0.1s;",g=h=>{h.style.background="var(--fb-background-hover-color, #f3f4f6)",h.style.color="var(--fb-text-color, #111827)"},E=h=>{h.style.background="none",h.style.color="var(--fb-text-muted-color, #6b7280)"};if(!l&&i){const h=document.createElement("button");h.type="button",h.title="Mention",h.style.cssText=v,h.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="4"/><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"/></svg>',h.addEventListener("mouseenter",()=>g(h)),h.addEventListener("mouseleave",()=>E(h)),h.addEventListener("click",b=>{b.stopPropagation(),i(),d.remove()}),m.appendChild(h)}if(a.config.downloadFile){const h=document.createElement("button");h.type="button",h.title="Download",h.style.cssText=v,h.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',h.addEventListener("mouseenter",()=>g(h)),h.addEventListener("mouseleave",()=>E(h)),h.addEventListener("click",b=>{var y,w;b.stopPropagation(),(w=(y=a.config).downloadFile)==null||w.call(y,o,f)}),m.appendChild(h)}if((r=a.config.getDownloadUrl)!=null?r:a.config.getThumbnail){const h=document.createElement("button");h.type="button",h.title="Open in new window",h.style.cssText=v,h.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>',h.addEventListener("mouseenter",()=>g(h)),h.addEventListener("mouseleave",()=>E(h)),h.addEventListener("click",b=>{var y,w,C,x;if(b.stopPropagation(),a.config.getDownloadUrl){const k=a.config.getDownloadUrl(o);k?window.open(k,"_blank"):(w=(y=a.config).getThumbnail)==null||w.call(y,o).then(z=>{z&&window.open(z,"_blank")}).catch(()=>{})}else(x=(C=a.config).getThumbnail)==null||x.call(C,o).then(k=>{k&&window.open(k,"_blank")}).catch(()=>{})}),m.appendChild(h)}if(!l&&c){const h=document.createElement("button");h.type="button",h.title="Remove",h.style.cssText=v,h.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>',h.addEventListener("mouseenter",()=>{h.style.background="var(--fb-background-hover-color, #f3f4f6)",h.style.color="var(--fb-error-color, #ef4444)"}),h.addEventListener("mouseleave",()=>E(h)),h.addEventListener("click",b=>{b.stopPropagation(),d.remove(),c()}),m.appendChild(h)}return m.children.length>0&&d.appendChild(m),document.body.appendChild(d),on(d,e),d}function sn(){return{element:null,hideTimer:null}}function Ye(e,t=150){e.hideTimer===null&&(e.hideTimer=setTimeout(()=>{e.hideTimer=null,e.element&&(e.element.remove(),e.element=null)},t))}function Xe(e){e.hideTimer!==null&&(clearTimeout(e.hideTimer),e.hideTimer=null)}function qe(e){return e&&e.remove(),null}function Tr(e){var t;const n=(t=e.selectionStart)!=null?t:0,r=e.value.slice(0,n);for(let o=r.length-1;o>=0;o--)if(r[o]==="@"){if(o===0||/\s/.test(r[o-1])){let a=r.slice(o+1);return a.startsWith('"')&&(a=a.slice(1)),{query:a,pos:o}}return null}return null}function cn(e,t,n){const r=e.toLowerCase();return t.filter(o=>{var a;return((a=n.get(o))!=null?a:o).toLowerCase().includes(r)})}const Ge="font-size: var(--fb-font-size, 14px); font-family: var(--fb-font-family, inherit); line-height: 1.6;",un="padding: 12px 52px 12px 14px;";function Ar(e,t,n,r,o){var a;const l=t.state,i=[...o.files],c={open:!1,query:"",triggerPos:-1,selectedIndex:0},s=new AbortController,f=document.createElement("input");f.type="hidden",f.name=r;function d(){var L,q;const M=x.value,N=en(i,l),I=M?Sr(M,N):null,R=(L=e.textKey)!=null?L:"text",te=(q=e.filesKey)!=null?q:"files";return{[R]:M===""?null:I,[te]:[...i]}}function p(){f.value=JSON.stringify(d())}const u=document.createElement("div");u.className="fb-richinput-wrapper",u.style.cssText=`
|
|
477
|
+
position: relative;
|
|
478
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
479
|
+
border-radius: 16px;
|
|
480
|
+
background: var(--fb-background-color, #f9fafb);
|
|
481
|
+
transition: box-shadow 0.15s, border-color 0.15s;
|
|
482
|
+
`,u.addEventListener("focusin",()=>{u.style.borderColor="var(--fb-primary-color, #0066cc)",u.style.boxShadow="0 0 0 2px color-mix(in srgb, var(--fb-primary-color, #0066cc) 25%, transparent)"}),u.addEventListener("focusout",()=>{u.style.borderColor="var(--fb-border-color, #d1d5db)",u.style.boxShadow="none"});const m=document.createElement("div");m.className="fb-richinput-error",m.style.cssText="display: none; color: var(--fb-error-color, #ef4444); font-size: var(--fb-font-size-small, 12px); padding: 4px 14px 8px;";let v=null;function g(L){m.textContent=L,m.style.display="block",v&&clearTimeout(v),v=setTimeout(()=>{m.style.display="none",m.textContent="",v=null},5e3)}function E(L){var q;const M=He(e.accept);if(!$e(L.name,M)){const I=M.join(", ");return g($("invalidFileExtension",l,{name:L.name,formats:I})),!1}const N=(q=e.maxSize)!=null?q:1/0;return Ae(L,N)?!0:(g($("fileTooLarge",l,{name:L.name,maxSize:N})),!1)}let h=0;u.addEventListener("dragenter",L=>{L.preventDefault(),h++,u.style.borderColor="var(--fb-primary-color, #0066cc)",u.style.boxShadow="0 0 0 2px color-mix(in srgb, var(--fb-primary-color, #0066cc) 25%, transparent)"}),u.addEventListener("dragover",L=>{L.preventDefault()}),u.addEventListener("dragleave",L=>{L.preventDefault(),h--,h<=0&&(h=0,u.style.borderColor="var(--fb-border-color, #d1d5db)",u.style.boxShadow="none")}),u.addEventListener("drop",L=>{var q,M;L.preventDefault(),h=0,u.style.borderColor="var(--fb-border-color, #d1d5db)",u.style.boxShadow="none";const N=(q=L.dataTransfer)==null?void 0:q.files;if(!N||!l.config.uploadFile)return;const I=(M=e.maxFiles)!=null?M:1/0;for(let R=0;R<N.length;R++){if(i.length>=I){g($("filesLimitExceeded",l,{skipped:N.length-R,max:I}));break}E(N[R])&&et(N[R])}});const b=document.createElement("div");b.className="fb-richinput-files",b.style.cssText="display: none; flex-wrap: wrap; gap: 6px; padding: 10px 14px 0; align-items: center;";const y=document.createElement("input");y.type="file",y.multiple=!0,y.style.display="none",e.accept&&(typeof e.accept=="string"?y.accept=e.accept:y.accept=e.accept.extensions.map(L=>L.startsWith(".")?L:`.${L}`).join(","));const w=document.createElement("div");w.style.cssText="position: relative;";const C=document.createElement("div");C.className="fb-richinput-backdrop",C.style.cssText=`
|
|
483
|
+
position: absolute;
|
|
484
|
+
top: 0; left: 0; right: 0; bottom: 0;
|
|
485
|
+
${un}
|
|
486
|
+
${Ge}
|
|
487
|
+
white-space: pre-wrap;
|
|
488
|
+
word-break: break-word;
|
|
489
|
+
color: transparent;
|
|
490
|
+
pointer-events: none;
|
|
491
|
+
overflow: hidden;
|
|
492
|
+
border-radius: inherit;
|
|
493
|
+
box-sizing: border-box;
|
|
494
|
+
z-index: 2;
|
|
495
|
+
`;const x=document.createElement("textarea");x.name=`${r}__text`,x.placeholder=e.placeholder||$("richinputPlaceholder",l);const k=(a=o.text)!=null?a:"";x.value=k?tn(k,i,l):"",x.style.cssText=`
|
|
496
|
+
width: 100%;
|
|
497
|
+
${un}
|
|
498
|
+
${Ge}
|
|
499
|
+
background: transparent;
|
|
500
|
+
border: none;
|
|
501
|
+
outline: none;
|
|
502
|
+
resize: none;
|
|
503
|
+
color: var(--fb-text-color, #111827);
|
|
504
|
+
box-sizing: border-box;
|
|
505
|
+
position: relative;
|
|
506
|
+
z-index: 1;
|
|
507
|
+
caret-color: var(--fb-text-color, #111827);
|
|
508
|
+
`,$r(x,C),x.addEventListener("scroll",()=>{C.scrollTop=x.scrollTop});let z=null;C.addEventListener("mouseover",L=>{var q,M;const N=(M=(q=L.target).closest)==null?void 0:M.call(q,"mark");N!=null&&N.dataset.rid&&(z=qe(z),z=ln(N,N.dataset.rid,l))}),C.addEventListener("mouseout",L=>{var q,M,N;if(!((M=(q=L.target).closest)!=null&&M.call(q,"mark")))return;const I=L.relatedTarget;(N=I==null?void 0:I.closest)!=null&&N.call(I,"mark")||(z=qe(z))}),C.addEventListener("mousedown",L=>{var q,M;if(!((M=(q=L.target).closest)!=null&&M.call(q,"mark")))return;z=qe(z);const N=C.querySelectorAll("mark");N.forEach(R=>R.style.pointerEvents="none");const I=document.elementFromPoint(L.clientX,L.clientY);I&&I.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,clientX:L.clientX,clientY:L.clientY,button:L.button,buttons:L.buttons,detail:L.detail})),document.addEventListener("mouseup",()=>{N.forEach(R=>R.style.pointerEvents="auto")},{once:!0})});function W(){const L=x.value,q=en(i,l),M=Je(L);if(M.length===0){C.innerHTML=J(L)+`
|
|
509
|
+
`;return}let N="",I=0;for(const R of M){N+=J(L.slice(I,R.start));const te=q.get(R.name);te?N+=`<mark data-rid="${J(te)}" style="background: color-mix(in srgb, var(--fb-primary-color, #0066cc) 15%, transparent); color: transparent; border-radius: 8px; padding: 0; border: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--fb-primary-color, #0066cc) 15%, transparent), 0 0 0 3px color-mix(in srgb, var(--fb-primary-color, #0066cc) 30%, transparent); box-decoration-break: clone; -webkit-box-decoration-break: clone; pointer-events: auto; cursor: text;">${J(L.slice(R.start,R.end))}</mark>`:N+=`<mark style="color: transparent; background: none; padding: 0; border: none; text-decoration-line: underline; text-decoration-style: wavy; text-decoration-color: rgba(239, 68, 68, 0.45); text-underline-offset: 2px;">${J(L.slice(R.start,R.end))}</mark>`,I=R.end}N+=J(L.slice(I)),C.innerHTML=N+`
|
|
510
|
+
`}const H=document.createElement("button");H.type="button",H.title=$("richinputAttachFile",l),H.style.cssText=`
|
|
511
|
+
position: absolute;
|
|
512
|
+
right: 10px;
|
|
513
|
+
bottom: 10px;
|
|
514
|
+
z-index: 2;
|
|
515
|
+
width: 32px;
|
|
516
|
+
height: 32px;
|
|
517
|
+
border: none;
|
|
518
|
+
border-radius: 8px;
|
|
519
|
+
background: transparent;
|
|
520
|
+
cursor: pointer;
|
|
521
|
+
display: flex;
|
|
522
|
+
align-items: center;
|
|
523
|
+
justify-content: center;
|
|
524
|
+
color: var(--fb-text-muted-color, #9ca3af);
|
|
525
|
+
transition: color 0.15s, background 0.15s;
|
|
526
|
+
`,H.innerHTML='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></svg>',H.addEventListener("mouseenter",()=>{H.style.color="var(--fb-primary-color, #0066cc)",H.style.background="var(--fb-background-hover-color, #f3f4f6)"}),H.addEventListener("mouseleave",()=>{H.style.color="var(--fb-text-muted-color, #9ca3af)",H.style.background="transparent"}),H.addEventListener("click",()=>{var L;const q=(L=e.maxFiles)!=null?L:1/0;if(i.length>=q){g($("filesLimitExceeded",l,{skipped:1,max:q}));return}y.click()});const Z=document.createElement("div");Z.className="fb-richinput-dropdown",Z.style.cssText=`
|
|
527
|
+
display: none;
|
|
528
|
+
position: absolute;
|
|
529
|
+
bottom: 100%;
|
|
530
|
+
left: 0;
|
|
531
|
+
z-index: 1000;
|
|
532
|
+
background: #fff;
|
|
533
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
534
|
+
border-radius: var(--fb-border-radius, 6px);
|
|
535
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.12);
|
|
536
|
+
min-width: 180px;
|
|
537
|
+
max-width: 320px;
|
|
538
|
+
max-height: 200px;
|
|
539
|
+
overflow-y: auto;
|
|
540
|
+
margin-bottom: 4px;
|
|
541
|
+
${Ge}
|
|
542
|
+
`;function Q(){return ht(i,l)}function oe(L){ve(Z);const q=Q();if(L.length===0){Z.style.display="none",c.open=!1;return}L.forEach((M,N)=>{var I;const R=l.resourceIndex.get(M),te=document.createElement("div");te.className="fb-richinput-dropdown-item",te.dataset.rid=M,te.style.cssText=`
|
|
543
|
+
padding: 5px 10px;
|
|
544
|
+
cursor: pointer;
|
|
545
|
+
color: var(--fb-text-color, #111827);
|
|
546
|
+
background: ${N===c.selectedIndex?"var(--fb-background-hover-color, #f3f4f6)":"transparent"};
|
|
547
|
+
display: flex;
|
|
548
|
+
align-items: center;
|
|
549
|
+
gap: 8px;
|
|
550
|
+
`;const ne=document.createElement("div");if(ne.style.cssText="width: 24px; height: 24px; border-radius: 4px; overflow: hidden; flex-shrink: 0; background: var(--fb-background-hover-color, #f3f4f6); display: flex; align-items: center; justify-content: center;",R!=null&&R.file&&vt(R)){const ae=document.createElement("img");ae.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;";const fe=new FileReader;fe.onload=A=>{var T;ae.src=((T=A.target)==null?void 0:T.result)||""},fe.readAsDataURL(R.file),ne.appendChild(ae)}else l.config.getThumbnail&&l.config.getThumbnail(M).then(ae=>{if(!ae||!ne.isConnected)return;const fe=document.createElement("img");fe.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;",fe.src=ae,ve(ne),ne.appendChild(fe)}).catch(()=>{}),ne.innerHTML='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>';te.appendChild(ne);const ie=document.createElement("span");ie.style.cssText="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;",ie.textContent=(I=q.get(M))!=null?I:M,te.appendChild(ie),Z.appendChild(te)}),Z.onmousemove=M=>{var N,I,R;const te=(I=(N=M.target).closest)==null?void 0:I.call(N,".fb-richinput-dropdown-item");if(!te)return;const ne=L.indexOf((R=te.dataset.rid)!=null?R:"");ne===-1||ne===c.selectedIndex||(Z.querySelectorAll(".fb-richinput-dropdown-item").forEach((ie,ae)=>{ie.style.background=ae===ne?"var(--fb-background-hover-color, #f3f4f6)":"transparent"}),c.selectedIndex=ne)},Z.onmousedown=M=>{var N,I;M.preventDefault(),M.stopPropagation();const R=(I=(N=M.target).closest)==null?void 0:I.call(N,".fb-richinput-dropdown-item");R!=null&&R.dataset.rid&&we(R.dataset.rid)},Z.style.display="block",c.open=!0}function Le(){const L=Tr(x);if(!L){pe();return}c.query=L.query,c.triggerPos=L.pos,c.selectedIndex=0;const q=Q(),M=cn(L.query,i,q);oe(M)}function pe(){Z.style.display="none",c.open=!1}function we(L){var q,M,N,I;const R=(N=(M=Q().get(L))!=null?M:(q=l.resourceIndex.get(L))==null?void 0:q.name)!=null?N:L,te=(I=x.selectionStart)!=null?I:0,ne=x.value.slice(0,c.triggerPos),ie=x.value.slice(te),ae=`${gt(R)} `;x.value=`${ne}${ae}${ie}`;const fe=ne.length+ae.length;x.setSelectionRange(fe,fe),x.dispatchEvent(new Event("input")),pe()}x.addEventListener("input",()=>{var L;W(),p(),(L=t.instance)==null||L.triggerOnChange(r,d()),i.length>0?Le():pe()});function Be(){Z.querySelectorAll(".fb-richinput-dropdown-item").forEach((L,q)=>{L.style.background=q===c.selectedIndex?"var(--fb-background-hover-color, #f3f4f6)":"transparent"})}x.addEventListener("keydown",L=>{if(!c.open)return;const q=Q(),M=cn(c.query,i,q);L.key==="ArrowDown"?(L.preventDefault(),c.selectedIndex=Math.min(c.selectedIndex+1,M.length-1),Be()):L.key==="ArrowUp"?(L.preventDefault(),c.selectedIndex=Math.max(c.selectedIndex-1,0),Be()):L.key==="Enter"&&M.length>0?(L.preventDefault(),we(M[c.selectedIndex])):L.key==="Escape"&&pe()}),document.addEventListener("click",L=>{!u.contains(L.target)&&!Z.contains(L.target)&&pe()},{signal:s.signal});function xe(){if(ve(b),i.length===0){b.style.display="none";return}b.style.display="flex",i.forEach(L=>{const q=l.resourceIndex.get(L),M=document.createElement("div");M.className="fb-richinput-file-thumb",M.style.cssText=`
|
|
551
|
+
position: relative;
|
|
552
|
+
width: 48px;
|
|
553
|
+
height: 48px;
|
|
554
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
555
|
+
border-radius: 8px;
|
|
556
|
+
overflow: hidden;
|
|
557
|
+
flex-shrink: 0;
|
|
558
|
+
cursor: pointer;
|
|
559
|
+
background: #fff;
|
|
560
|
+
`;const N=document.createElement("div");N.style.cssText="width: 48px; height: 48px; border-radius: inherit; overflow: hidden;",nn(N,L,q,l),M.appendChild(N);const I=sn(),R=()=>{var ne,ie,ae;const fe=(ne=x.selectionStart)!=null?ne:x.value.length,A=(ae=(ie=Q().get(L))!=null?ie:q==null?void 0:q.name)!=null?ae:L,T=x.value.slice(0,fe),S=x.value.slice(fe),B=`${T.length>0&&!/[\s\n]$/.test(T)?`
|
|
561
|
+
`:""}${gt(A)} `;x.value=`${T}${B}${S}`;const D=fe+B.length;x.setSelectionRange(D,D),x.focus(),x.dispatchEvent(new Event("input"))},te=()=>{var ne;const ie=i.indexOf(L);ie!==-1&&i.splice(ie,1),xe(),W(),p(),(ne=t.instance)==null||ne.triggerOnChange(r,d())};M.addEventListener("mouseenter",()=>{Xe(I),I.element||(I.element=an(M,{rid:L,state:l,isReadonly:!1,onMention:R,onRemove:te}),I.element.addEventListener("mouseenter",()=>{Xe(I)}),I.element.addEventListener("mouseleave",()=>{Ye(I)}))}),M.addEventListener("mouseleave",()=>{Ye(I)}),b.appendChild(M)})}function et(L){if(!l.config.uploadFile)return;const q=`temp-${Date.now()}-${Math.random().toString(36).slice(2,6)}`;l.resourceIndex.set(q,{name:L.name,type:L.type,size:L.size,uploadedAt:new Date,file:L}),i.push(q),xe();const M=b.querySelectorAll(".fb-richinput-file-thumb"),N=M[M.length-1];N&&(N.style.opacity="0.5"),l.config.uploadFile(L).then(I=>{var R;const te=i.indexOf(q);te!==-1&&(i[te]=I),l.resourceIndex.delete(q),l.resourceIndex.set(I,{name:L.name,type:L.type,size:L.size,uploadedAt:new Date,file:L}),xe(),W(),p(),(R=t.instance)==null||R.triggerOnChange(r,d())}).catch(I=>{var R,te;const ne=i.indexOf(q);ne!==-1&&i.splice(ne,1),l.resourceIndex.delete(q),xe(),(te=(R=l.config).onUploadError)==null||te.call(R,I,L)})}if(y.addEventListener("change",()=>{var L;const q=y.files;if(!q||q.length===0)return;const M=(L=e.maxFiles)!=null?L:1/0;for(let N=0;N<q.length;N++){if(i.length>=M){g($("filesLimitExceeded",l,{skipped:q.length-N,max:M}));break}E(q[N])&&et(q[N])}y.value=""}),w.appendChild(C),w.appendChild(x),w.appendChild(H),w.appendChild(Z),u.appendChild(b),u.appendChild(w),u.appendChild(m),e.minLength!=null||e.maxLength!=null){const L=document.createElement("div");L.style.cssText="position: relative; padding: 2px 14px 6px; text-align: right;";const q=Ie(e,x,!1);q.style.cssText=`
|
|
562
|
+
position: static;
|
|
563
|
+
display: inline-block;
|
|
564
|
+
font-size: var(--fb-font-size-small);
|
|
565
|
+
color: var(--fb-text-secondary-color);
|
|
566
|
+
pointer-events: none;
|
|
567
|
+
`,L.appendChild(q),u.appendChild(L)}u.appendChild(f),u.appendChild(y),p(),W(),f._applyExternalUpdate=L=>{var q;const M=(q=L.text)!=null?q:"";x.value=M?tn(M,i,l):"",x.dispatchEvent(new Event("input")),i.length=0;for(const N of L.files)i.push(N);xe(),W(),p()},n.appendChild(u),xe();const De=new MutationObserver(()=>{u.isConnected||(s.abort(),z=qe(z),De.disconnect())});u.parentElement&&De.observe(u.parentElement,{childList:!0})}function Fr(e,t,n,r,o){var a,l;const i=t.state,{text:c,files:s}=o,f=new Map;for(const d of s){const p=i.resourceIndex.get(d);p!=null&&p.name&&f.set(d,p.name)}if(s.length>0){const d=document.createElement("div");d.style.cssText="display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 8px;",s.forEach(p=>{const u=i.resourceIndex.get(p),m=document.createElement("div");m.style.cssText=`
|
|
568
|
+
position: relative;
|
|
569
|
+
width: 48px; height: 48px;
|
|
570
|
+
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
571
|
+
border-radius: 8px;
|
|
572
|
+
overflow: hidden;
|
|
573
|
+
flex-shrink: 0;
|
|
574
|
+
background: #fff;
|
|
575
|
+
cursor: default;
|
|
576
|
+
`;const v=document.createElement("div");v.style.cssText="width: 48px; height: 48px; border-radius: inherit; overflow: hidden;",nn(v,p,u,i),m.appendChild(v);const g=sn();m.addEventListener("mouseenter",()=>{Xe(g),g.element||(g.element=an(m,{rid:p,state:i,isReadonly:!0}),g.element.addEventListener("mouseenter",()=>{Xe(g)}),g.element.addEventListener("mouseleave",()=>{Ye(g)}))}),m.addEventListener("mouseleave",()=>{Ye(g)}),d.appendChild(m)}),n.appendChild(d)}if(c){const d=document.createElement("div");d.style.cssText=`
|
|
577
|
+
${Ge}
|
|
578
|
+
color: var(--fb-text-color, #111827);
|
|
579
|
+
white-space: pre-wrap;
|
|
580
|
+
word-break: break-word;
|
|
581
|
+
`;const p=Je(c).filter(u=>f.has(u.name)||[...f.values()].includes(u.name));if(p.length===0)d.textContent=c;else{let u=0;for(const m of p){m.start>u&&d.appendChild(document.createTextNode(c.slice(u,m.start)));const v=document.createElement("span");v.style.cssText=`
|
|
582
|
+
display: inline;
|
|
583
|
+
background: color-mix(in srgb, var(--fb-primary-color, #0066cc) 15%, transparent);
|
|
584
|
+
color: var(--fb-primary-color, #0066cc);
|
|
585
|
+
border-radius: 8px;
|
|
586
|
+
padding: 1px 6px;
|
|
587
|
+
font-weight: 500;
|
|
588
|
+
cursor: default;
|
|
589
|
+
`;const g=f.has(m.name)?m.name:(a=[...f.entries()].find(([,h])=>h===m.name))==null?void 0:a[0],E=(l=f.get(m.name))!=null?l:m.name;if(v.textContent=`@${E}`,g){let h=null;const b=g;v.addEventListener("mouseenter",()=>{h=qe(h),h=ln(v,b,i)}),v.addEventListener("mouseleave",()=>{h=qe(h)})}d.appendChild(v),u=m.end}u<c.length&&d.appendChild(document.createTextNode(c.slice(u)))}n.appendChild(d)}if(!c&&s.length===0){const d=document.createElement("div");d.style.cssText="color: var(--fb-text-muted-color, #6b7280); font-size: var(--fb-font-size, 14px);",d.textContent="\u2014",n.appendChild(d)}}function Nr(e,t,n,r){var o,a,l,i;const c=t.state,s=le(e,c,t),f=(o=e.textKey)!=null?o:"text",d=(a=e.filesKey)!=null?a:"files";let p;if(e.flatOutput){const u=t.prefill[f],m=t.prefill[d];p={text:typeof u=="string"?u:null,files:Array.isArray(m)?m:[]}}else{const u=t.prefill[e.key];if(u&&typeof u=="object"&&!Array.isArray(u)){const m=u,v=(l=m[f])!=null?l:m.text,g=(i=m[d])!=null?i:m.files;p={text:typeof v=="string"?v:null,files:Array.isArray(g)?g:[]}}else typeof u=="string"?p={text:u||null,files:[]}:p={text:null,files:[]}}for(const u of p.files)c.resourceIndex.has(u)||c.resourceIndex.set(u,{name:u,type:"application/octet-stream",size:0,uploadedAt:new Date,file:void 0});if(s)Fr(e,t,n,r,p);else{if(!c.config.uploadFile)throw new Error(`RichInput field "${e.key}" requires uploadFile handler in config`);Ar(e,t,n,r,p)}}function Mr(e,t,n){var r,o;const{scopeRoot:a,state:l,skipValidation:i}=n,c=[],s=(r=e.textKey)!=null?r:"text",f=(o=e.filesKey)!=null?o:"files",d=a.querySelector(`[name="${t}"]`);if(!d)return{value:null,errors:c};let p={};try{const h=JSON.parse(d.value);if(h&&typeof h=="object"&&!Array.isArray(h))p=h;else return c.push(`${t}: invalid richinput data`),{value:null,errors:c}}catch(h){return c.push(`${t}: invalid richinput data`),{value:null,errors:c}}const u=p[s],m=p[f],v=u===null||typeof u=="string"?u:null,g=Array.isArray(m)?m:[],E={[s]:v!=null?v:null,[f]:g};if(!i){const h=!v||v.trim()==="",b=g.length===0;e.required&&h&&b&&c.push(`${t}: ${$("required",l)}`),!h&&v&&(e.minLength!=null&&v.length<e.minLength&&c.push(`${t}: ${$("minLength",l,{min:e.minLength})}`),e.maxLength!=null&&v.length>e.maxLength&&c.push(`${t}: ${$("maxLength",l,{max:e.maxLength})}`)),e.maxFiles!=null&&g.length>e.maxFiles&&c.push(`${t}: ${$("maxFiles",l,{max:e.maxFiles})}`)}return{value:E,errors:c,spread:!!e.flatOutput}}function qr(e,t,n,r){var o,a,l,i;const{scopeRoot:c}=r,s=c.querySelector(`[name="${t}"]`);if(!s){console.warn(`updateRichInputField: no hidden input found for "${t}". Re-render to reflect new data.`);return}let f=null;if(n&&typeof n=="object"&&!Array.isArray(n)){const d=n,p=(o=e.textKey)!=null?o:"text",u=(a=e.filesKey)!=null?a:"files",m=(l=d[p])!=null?l:d.text,v=(i=d[u])!=null?i:d.files;(m!==void 0||v!==void 0)&&(f={text:typeof m=="string"?m:null,files:Array.isArray(v)?v:[]})}f&&s._applyExternalUpdate?s._applyExternalUpdate(f):f&&(s.value=JSON.stringify(f))}function zr(e,t){const n=document.getElementById(e);if(!n)return;const r=!n.classList.contains("hidden");if(document.querySelectorAll('[id^="tooltip-"]').forEach(f=>{f.classList.add("hidden")}),r)return;const o=t.getBoundingClientRect(),a=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 i=n.getBoundingClientRect();n.classList.add("hidden"),n.style.visibility="visible";let c=o.left,s=o.bottom+5;c+i.width>a&&(c=o.right-i.width),s+i.height>l&&(s=o.top-i.height-5),c<10&&(c=10),s<10&&(s=o.bottom+5),n.style.left=`${c}px`,n.style.top=`${s}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,r=t.closest('[id^="tooltip-"]');!n&&!r&&document.querySelectorAll('[id^="tooltip-"]').forEach(o=>{o.classList.add("hidden")})});function Ir(e,t){var n,r,o;if(!e.enableIf)return!1;try{const a=(r=(n=t.formData)!=null?n:t.prefill)!=null?r:{},l=((o=e.enableIf.scope)!=null?o:"relative")==="relative"&&t.path?t.prefill:void 0;return!Te(e.enableIf,a,l)}catch(a){console.error(`Error evaluating enableIf for field "${e.key}":`,a)}return!1}function Hr(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 r=t.querySelector(`[name="${e}"]:checked`);return r?r.value:void 0}else return n.value}else if(n instanceof HTMLTextAreaElement)return n.value}}function Ze(e,t,n){var r,o;if(!t.enableIf)return;const a=n.state.formRoot;if(!a){console.error("Cannot re-evaluate enableIf: formRoot is null");return}const l=t.enableIf,i=(r=l.scope)!=null?r:"relative";let c={};const s={};if((!n.path||n.path===""?"absolute":i)==="relative"&&n.path){const f=n.path.match(/^(.+)\[(\d+)\]$/);if(f){const d=f[1],p=parseInt(f[2],10),u=a.querySelector(`[data-container-item="${d}[${p}]"]`);u&&u.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?s[E]=m.value:m instanceof HTMLInputElement?m.type==="checkbox"?s[E]=m.checked:m.type==="radio"?m.checked&&(s[E]=m.value):s[E]=m.value:m instanceof HTMLTextAreaElement&&(s[E]=m.value)}}})}}else{const f=l.key,d=Hr(f,a);d!==void 0?c[f]=d:c=(o=n.formData)!=null?o:n.prefill}try{Te(l,c,s)?(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(f){console.error(`Error re-evaluating enableIf for field "${t.key}":`,f)}}function Rr(e,t,n){var r;if(!t.enableIf)return;const o=n.state.formRoot;if(!o){console.error("Cannot setup enableIf listeners: formRoot is null");return}const a=t.enableIf,l=(r=a.scope)!=null?r:"relative",i=a.key;let c;l==="relative"&&n.path?c=`${n.path}.${i}`:c=i;const s=o.querySelector(`[name="${c}"]`);if(!s){const f=new MutationObserver(()=>{const d=o.querySelector(`[name="${c}"]`);d&&(d.addEventListener("change",()=>{Ze(e,t,n)}),d.addEventListener("input",()=>{Ze(e,t,n)}),f.disconnect())});f.observe(o,{childList:!0,subtree:!0});return}s.addEventListener("change",()=>{Ze(e,t,n)}),s.addEventListener("input",()=>{Ze(e,t,n)})}function Br(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 Dr(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)}`,r=document.createElement("div");return r.id=n,r.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",r.style.position="fixed",r.textContent=e.description||e.hint||"Field information",document.body.appendChild(r),t.onclick=o=>{o.preventDefault(),o.stopPropagation(),zr(n,t)},t}function jr(e){const t=document.createElement("div");t.className="flex items-center mb-2";const n=Br(e);if(t.appendChild(n),e.description||e.hint){const r=Dr(e);t.appendChild(r)}return t}function Or(e,t,n,r){const o="multiple"in e&&e.multiple;switch(e.type){case"text":o?Cn(e,t,n,r):En(e,t,n,r);break;case"textarea":o?kn(e,t,n,r):wn(e,t,n,r);break;case"number":o?Tn(e,t,n,r):Sn(e,t,n,r);break;case"select":o?Mn(e,t,n,r):Nn(e,t,n,r);break;case"switcher":o?Hn(e,t,n,r):In(e,t,n,r);break;case"file":o?Qn(e,t,n,r):Gn(e,t,n,r);break;case"files":Zn(e,t,n,r);break;case"colour":o?tr(e,t,n,r):er(e,t,n,r);break;case"slider":o?lr(e,t,n,r):or(e,t,n,r);break;case"group":ur(e,t,n,r);break;case"container":o?_t(e,t,n):Wt(e,t,n,r);break;case"table":Cr(e,t,n,r);break;case"richinput":Nr(e,t,n,r);break;default:{const a=document.createElement("div");a.className="text-red-500 text-sm",a.textContent=$("unsupportedFieldType",t.state,{type:e.type}),n.appendChild(a)}}}function bt(e,t){const n=Ir(e,t),r=document.createElement("div");r.className="mb-6 fb-field-wrapper",r.setAttribute("data-field-key",e.key);const o=jr(e);r.appendChild(o);const a=ye(t.path,e.key);return Or(e,t,r,a),n&&(r.style.display="none",r.classList.add("fb-field-wrapper-disabled"),r.setAttribute("data-conditionally-disabled","true")),Rr(r,e,t),r}sr(bt);const yt={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,parseTableFile:null,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",invalidFileExtension:'File "{name}" has unsupported format. Allowed: {formats}',fileTooLarge:'File "{name}" exceeds maximum size of {maxSize}MB',filesLimitExceeded:"{skipped} file(s) skipped: maximum {max} files allowed",unsupportedFieldType:"Unsupported field type: {type}",invalidOption:"Invalid option",tableAddRow:"Add row",tableAddColumn:"Add column",tableRemoveRow:"Remove row",tableRemoveColumn:"Remove column",tableMergeCells:"Merge cells (Ctrl+M)",tableSplitCell:"Split cell (Ctrl+Shift+M)",tableImportFile:"Import",tableImporting:"Importing...",tableImportError:"Import failed: {error}",richinputPlaceholder:"Type text...",richinputAttachFile:"Attach file",richinputMention:"Mention",richinputRemoveFile:"Remove"},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",invalidFileExtension:'\u0424\u0430\u0439\u043B "{name}" \u0438\u043C\u0435\u0435\u0442 \u043D\u0435\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442. \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435: {formats}',fileTooLarge:'\u0424\u0430\u0439\u043B "{name}" \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 {maxSize}\u041C\u0411',filesLimitExceeded:"{skipped} \u0444\u0430\u0439\u043B(\u043E\u0432) \u043F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u043E: \u043C\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}",invalidOption:"\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435",tableAddRow:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",tableAddColumn:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446",tableRemoveRow:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",tableRemoveColumn:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446",tableMergeCells:"\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0438 (Ctrl+M)",tableSplitCell:"\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0443 (Ctrl+Shift+M)",tableImportFile:"\u0418\u043C\u043F\u043E\u0440\u0442",tableImporting:"\u0418\u043C\u043F\u043E\u0440\u0442...",tableImportError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u0438\u043C\u043F\u043E\u0440\u0442\u0430: {error}",richinputPlaceholder:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442...",richinputAttachFile:"\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0444\u0430\u0439\u043B",richinputMention:"\u0423\u043F\u043E\u043C\u044F\u043D\u0443\u0442\u044C",richinputRemoveFile:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C"}},theme:{}};function Ur(e){const t={...yt.translations};if(e!=null&&e.translations)for(const[n,r]of Object.entries(e.translations))t[n]={...yt.translations[n]||{},...r};return{schema:null,formRoot:null,resourceIndex:new Map,externalActions:null,version:"1.0.0",config:{...yt,...e,translations:t},debounceTimer:null,prefill:{}}}function Pr(){const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,9);return`inst-${e}-${t}`}const Re={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 Vr(e){const t={...Re,...e},n=[];return Object.entries(t).forEach(([r,o])=>{const a=r.replace(/([A-Z])/g,"-$1").toLowerCase();n.push(` --fb-${a}: ${o};`)}),n.join(`
|
|
590
|
+
`)}function Kr(e,t){const n=Vr(t);let r=e.querySelector("style[data-fb-theme]");r||(r=document.createElement("style"),r.setAttribute("data-fb-theme","true"),e.appendChild(r)),r.textContent=`
|
|
591
|
+
[data-fb-root="true"] {
|
|
592
|
+
${n}
|
|
593
|
+
}
|
|
594
|
+
`}const Wr={default:Re,dark:{...Re,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:{...Re,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 dn(e,t=!1){e.style.cssText=`
|
|
595
|
+
background-color: var(--fb-action-bg-color);
|
|
596
|
+
color: var(--fb-action-text-color);
|
|
597
|
+
border: var(--fb-border-width) solid var(--fb-action-border-color);
|
|
598
|
+
padding: ${t?"0.5rem 1rem":"0.5rem 0.75rem"};
|
|
599
|
+
font-size: var(--fb-font-size);
|
|
600
|
+
font-weight: var(--fb-font-weight-medium);
|
|
601
|
+
border-radius: var(--fb-border-radius);
|
|
602
|
+
transition: all var(--fb-transition-duration);
|
|
603
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
604
|
+
`,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)"})}function _r(e,t,n){var r;const{scopeRoot:o}=n,a=o.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${t}"]`),l=(r=a==null?void 0:a.value)!=null?r:"";if(l===""){const i="default"in e?e.default:null;return{value:i!==void 0?i:null,errors:[]}}return{value:Et(l),errors:[]}}function Jr(e,t,n,r){const{scopeRoot:o}=r,a=o.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${t}"]`);a&&(a.value=xt(n))}const Yr={text:{validate:Ct,update:wt},textarea:{validate:$n,update:Ln},number:{validate:An,update:Fn},select:{validate:qn,update:zn},switcher:{validate:Rn,update:Bn},file:{validate:Ht,update:Rt},files:{validate:Ht,update:Rt},colour:{validate:nr,update:rr},slider:{validate:ar,update:ir},container:{validate:Yt,update:Xt},group:{validate:dr,update:pr},table:{validate:wr,update:kr},richinput:{validate:Mr,update:qr},hidden:{validate:_r,update:Jr}};function pn(e){return Yr[e]||null}function Xr(e,t,n){const r=pn(e.type);return r&&r.validate?r.validate(e,t,n):null}function Gr(e,t,n,r){const o=pn(e.type);return o&&o.update?(o.update(e,t,n,r),!0):!1}class Qe{constructor(t){this.instanceId=Pr(),this.state=Ur(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 r=this.validateForm(!0);this.reevaluateConditionalFields(),this.state.config.onChange&&this.state.config.onChange(r),this.state.config.onFieldChange&&t!==void 0&&n!==void 0&&this.state.config.onFieldChange(t,n,r),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(r=>r.value===t.value&&r.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 o=this.state.formRoot.querySelector(`[name="${t}"]`);if(o)return o;const a=[t,t.replace(/\[(\d+)\]/g,"[$1]"),t.replace(/\./g,"[")+"]".repeat((t.match(/\./g)||[]).length)];for(const l of a)if(o=this.state.formRoot.querySelector(`[name="${l}"]`),o)return o}const n=this.findSchemaElement(t);if(!n)return null;const r=this.state.formRoot.querySelectorAll(".fb-field-wrapper");for(const o of r){const a=n.label||n.key,l=o.querySelector("label");if(l&&(l.textContent===a||l.textContent===`${a}*`)){let i=o.querySelector(".field-placeholder");return i||(i=document.createElement("div"),i.className="field-placeholder",i.style.display="none",o.appendChild(i)),i}}return null}findSchemaElement(t){if(!this.state.schema||!this.state.schema.elements)return null;let n=this.state.schema.elements,r=null;const o=t.replace(/\[\d+\]/g,"").split(".").filter(Boolean);for(const a of o){if(r=n.find(l=>l.key===a)||null,!r)return null;"elements"in r&&r.elements&&(n=r.elements)}return r}resolveActionLabel(t,n,r,o=!1){if(r&&"actions"in r&&r.actions){const a=r.actions.find(l=>l.key===t);if(a&&a.label)return a.label}if(o&&this.state.schema&&"actions"in this.state.schema&&this.state.schema.actions){const a=this.state.schema.actions.find(l=>l.key===t);if(a&&a.label)return a.label}return n||t}renderFormLevelActions(t,n=[]){if(!this.state.formRoot)return;const r=this.state.formRoot.querySelector(".form-level-actions-container");r&&r.remove();const o=document.createElement("div");o.className="form-level-actions-container mt-6 pt-4 flex flex-wrap gap-3 justify-center",o.style.cssText=`
|
|
605
|
+
border-top: var(--fb-border-width) solid var(--fb-border-color);
|
|
606
|
+
`,t.forEach(a=>{const l=document.createElement("button");l.type="button",dn(l,!0);const i=n.includes(a),c=this.resolveActionLabel(a.key,a.label,null,i);l.textContent=c,l.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(a.value,a.key,null)}),o.appendChild(l)}),this.state.formRoot.appendChild(o)}renderExternalActions(){if(!this.state.externalActions||!Array.isArray(this.state.externalActions))return;const t=new Map,n=[],r=[];this.state.externalActions.forEach(a=>{!a.key||!a.value||(a.related_field?(t.has(a.related_field)||t.set(a.related_field,[]),t.get(a.related_field).push(a)):n.push(a))}),t.forEach((a,l)=>{const i=this.findFormElementByFieldPath(l);if(!i){console.warn(`External action: Could not find form element for field "${l}", treating as form-level actions`),r.push(...a);return}let c=i.closest(".fb-field-wrapper");if(c||(c=i.parentElement),!c){console.warn(`External action: Could not find wrapper for field "${l}"`);return}const s=c.querySelector(".external-actions-container");s&&s.remove();const f=document.createElement("div");f.className="external-actions-container mt-3 flex flex-wrap gap-2";const d=this.findSchemaElement(l);a.forEach(p=>{const u=document.createElement("button");u.type="button",dn(u,!1);const m=this.resolveActionLabel(p.key,p.label,d);u.textContent=m,u.addEventListener("click",v=>{v.preventDefault(),v.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(p.value,p.key,p.related_field)}),f.appendChild(u)}),c.appendChild(f)});const o=[...n,...r];o.length>0&&this.renderFormLevelActions(o,n)}handlePrefillHintClick(t){const n=t.target;if(!n.classList.contains("fb-prefill-hint"))return;t.preventDefault(),t.stopPropagation();const r=n.getAttribute("data-hint-values"),o=n.getAttribute("data-root-hint")==="true",a=n.getAttribute("data-container-key");if(!r||!o&&!a){console.warn("Prefill hint missing required data attributes");return}try{const l=JSON.parse(r);for(const i in l){const c=o?i:`${a}.${i}`,s=l[i];this.updateField(c,s)}}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(r=>{const o=document.createElement("button");o.type="button",o.className="fb-prefill-hint",r.icon?o.textContent=`${r.icon} ${r.label}`:o.textContent=r.label,o.setAttribute("data-hint-values",JSON.stringify(r.values)),o.setAttribute("data-root-hint","true"),n.appendChild(o)}),n}renderForm(t,n,r,o){const a=tt(n);if(a.length>0){console.error("Schema validation errors:",a);return}this.state.formRoot=t,this.state.schema=n,this.state.externalActions=o||null,this.state.prefill=r||{},ve(t),t.setAttribute("data-fb-root","true"),Kr(t,this.state.config.theme);const l=document.createElement("div");if(l.className="space-y-6",n.prefillHints&&!this.state.config.readonly){const s=this.createRootPrefillHints(n.prefillHints);l.appendChild(s)}const i=document.createElement("div"),c=n.columns||1;c===1?i.className="space-y-4":i.className=`grid grid-cols-${c} gap-4`,n.elements.forEach(s=>{var f,d;if(s.hidden||s.type==="hidden"){const u=(d=(f=r==null?void 0:r[s.key])!=null?f:s.default)!=null?d:null;i.appendChild(ze(s.key,u));return}const p=bt(s,{path:"",prefill:r||{},formData:r||{},state:this.state,instance:this});i.appendChild(p)}),l.appendChild(i),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=[],r={},o=(a,l,i=null)=>{const c=a.key,s={scopeRoot:i||this.state.formRoot,state:this.state,instance:this,path:l.path,skipValidation:t},f=Xr(a,c,s);return f!==null?(n.push(...f.errors),{value:f.value,spread:!!f.spread}):(console.warn(`Unknown field type "${a.type}" for key "${c}"`),{value:null,spread:!1})};return cr(o),this.state.schema.elements.forEach(a=>{var l;if(a.enableIf)try{if(!Te(a.enableIf,r))return}catch(i){console.error(`Error evaluating enableIf for field "${a.key}" during validation:`,i)}if(a.hidden||a.type==="hidden"){const i=this.state.formRoot.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${a.key}"]`),c=(l=i==null?void 0:i.value)!=null?l:"";c!==""?r[a.key]=Et(c):r[a.key]=a.default!==void 0?a.default:null}else{const i=o(a,{path:""});i.spread&&i.value!==null&&typeof i.value=="object"?Object.assign(r,i.value):r[a.key]=i.value}}),{valid:n.length===0,errors:n,data:r}}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,r=this.state.externalActions,o=this.buildHiddenFieldsData(t.elements);this.renderForm(n,t,o,r||void 0)}buildHiddenFieldsData(t){const n={};for(const r of t){const o=r.key;if(r.hidden&&r.default!==void 0&&(n[o]=r.default),r.type==="container"||r.type==="group"){const a=r,l=this.buildHiddenFieldsData(a.elements);Object.keys(l).length>0&&(o in n?typeof n[o]=="object"&&n[o]!==null&&!Array.isArray(n[o])&&(n[o]={...n[o],...l}):n[o]=l)}}return n}buildFlatKeyMap(t){var n,r;const o=new Map;for(const a of t)if(a.type==="richinput"&&a.flatOutput){const l=a,i=(n=l.textKey)!=null?n:"text",c=(r=l.filesKey)!=null?r:"files";o.set(i,{schemaKey:a.key,role:"text"}),o.set(c,{schemaKey:a.key,role:"files"})}return o}setFormData(t){if(!this.state.schema||!this.state.formRoot){console.warn("setFormData: Form not initialized. Call renderForm() first.");return}const n=this.buildFlatKeyMap(this.state.schema.elements),r=new Map;for(const o in t){const a=n.get(o);a?(r.has(a.schemaKey)||r.set(a.schemaKey,{}),r.get(a.schemaKey)[o]=t[o]):this.updateField(o,t[o])}for(const[o,a]of r)this.updateField(o,a)}updateField(t,n){if(!this.state.schema||!this.state.formRoot){console.warn("updateField: Form not initialized. Call renderForm() first.");return}const r=this.findSchemaElement(t);if(!r){console.warn(`updateField: Schema element not found for path "${t}"`);return}const o=this.findFormElementByFieldPath(t);if(!o){console.warn(`updateField: DOM element not found for path "${t}"`);return}this.updateFieldValue(o,r,t,n),this.reevaluateConditionalFields(),(this.state.config.onChange||this.state.config.onFieldChange)&&this.triggerOnChange(t,n)}updateFieldValue(t,n,r,o){const a={scopeRoot:this.state.formRoot,state:this.state,instance:this,path:""};Gr(n,r,o,a)||console.warn(`updateField: No updater found for field type "${n.type}" at path "${r}"`)}reevaluateConditionalFields(){if(!this.state.schema||!this.state.formRoot)return;const t=this.validateForm(!0).data,n=(r,o)=>{r.forEach(a=>{var l,i,c;const s=o?`${o}.${a.key}`:a.key;if(a.enableIf){let f=null;if(o){const d=o.match(/^(.+)\[(\d+)\]$/);if(d){const p=d[1],u=d[2],m=this.state.formRoot.querySelector(`[data-container-item="${p}[${u}]"]`);m&&(f=m.querySelector(`[data-field-key="${a.key}"]`))}else{const p=this.state.formRoot.querySelector(`[data-container="${o}"]`);p&&(f=p.querySelector(`[data-field-key="${a.key}"]`))}}else f=this.state.formRoot.querySelector(`[data-field-key="${a.key}"]`);if(f){const d=f;try{let p;((l=a.enableIf.scope)!=null?l:"relative")==="relative"&&o&&(p=nt(t,o));const u=Te(a.enableIf,t,p),m=d.getAttribute("data-conditionally-disabled")==="true";if(u&&m){const v=o?nt(t,o):t,g=bt(a,{path:o,prefill:v&&typeof v=="object"?v:{},formData:t,state:this.state,instance:this});(i=d.parentNode)==null||i.replaceChild(g,d)}else if(!u&&!m){const v=document.createElement("div");v.className="fb-field-wrapper-disabled",v.style.display="none",v.setAttribute("data-field-key",a.key),v.setAttribute("data-conditionally-disabled","true"),(c=d.parentNode)==null||c.replaceChild(v,d)}}catch(p){console.error(`Error re-evaluating enableIf for field "${a.key}" at path "${s}":`,p)}}}if((a.type==="container"||a.type==="group")&&"elements"in a&&a.elements){const f=t==null?void 0:t[a.key];if(Array.isArray(f)){const d=this.state.formRoot.querySelectorAll("[data-container-item]");Array.from(d).filter(p=>{const u=p.getAttribute("data-container-item")||"";if(!u.startsWith(`${s}[`))return!1;const m=u.slice(s.length);return/^\[\d+\]$/.test(m)}).forEach(p=>{const u=p.getAttribute("data-container-item")||"";n(a.elements,u)})}else n(a.elements,s)}})};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&&ve(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 fn(e){return new Qe(e)}return typeof window!="undefined"&&(window.FormBuilder=Qe,window.createFormBuilder=fn,window.validateSchema=tt),Ee.FormBuilderInstance=Qe,Ee.createFormBuilder=fn,Ee.default=Qe,Ee.defaultTheme=Re,Ee.exampleThemes=Wr,Ee.validateSchema=tt,Object.defineProperty(Ee,"__esModule",{value:!0}),Ee})({});
|