@dmitryvim/form-builder 0.2.30 → 0.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/formbuilder.min.js +502 -387
- package/dist/browser/formbuilder.v0.2.32.min.js +1148 -0
- package/dist/cjs/index.cjs +1085 -703
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +1050 -677
- package/dist/esm/index.js.map +1 -1
- package/dist/form-builder.js +502 -387
- package/dist/types/components/file/dom.d.ts +4 -5
- package/dist/types/components/file/preview.d.ts +5 -0
- package/dist/types/components/file/render-edit.d.ts +8 -1
- package/dist/types/components/file/render-readonly.d.ts +4 -7
- package/dist/types/components/file/upload.d.ts +6 -0
- package/dist/types/types/config.d.ts +4 -0
- package/dist/types/types/schema.d.ts +8 -0
- package/package.json +1 -1
- package/dist/browser/formbuilder.v0.2.30.min.js +0 -1033
package/dist/form-builder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var FormBuilder=(function(
|
|
1
|
+
var FormBuilder=(function(ke){"use strict";function $(e,t,n){const r=t.config.locale||"en",o=t.config.translations[r],i=t.config.translations.en;let a=(o==null?void 0:o[e])||(i==null?void 0:i[e])||e;if(n)for(const[l,u]of Object.entries(n))a=a.replace(new RegExp(`\\{${l}\\}`,"g"),String(u));return a}function lr(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 ir(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 ar(e,t,n){var r;const o=(r=e.maxSize)!=null?r:e.maxSizeMB;o&&o!==1/0&&t.push($("hintMaxSize",n,{size:o}))}function sr(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 ur(e,t,n){e.pattern&&t.push($("hintPattern",n,{pattern:e.pattern}))}function Ee(e,t){const n=[];return lr(e,n,t),e.type!=="slider"&&ir(e,n,t),ar(e,n,t),sr(e,n,t),ur(e,n,t),n.join(" \u2022 ")}function mt(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 i=e.columns,a=[1,2,3,4];(!Number.isInteger(i)||!a.includes(i))&&t.push(`schema.columns must be 1, 2, 3, or 4 (got ${i})`)}if("prefillHints"in e&&e.prefillHints){const i=e.prefillHints;Array.isArray(i)&&i.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 u in a.values)e.elements.some(s=>s.key===u)||t.push(`schema.prefillHints[${l}] references non-existent field "${u}"`)})}function n(i,a,l){if("columns"in i&&i.columns!==void 0){const u=i.columns,s=[1,2,3,4];(!Number.isInteger(u)||!s.includes(u))&&l.push(`${a}: columns must be 1, 2, 3, or 4 (got ${u})`)}if("displayMode"in i&&i.displayMode!==void 0){const u=i.displayMode;u!=="stack"&&u!=="slides"&&l.push(`${a}: displayMode must be "stack" or "slides" (got ${JSON.stringify(u)})`)}}function r(i,a){var l,u;const s=new Set;for(const d of i)if(d.type==="richinput"&&d.flatOutput){const c=d,p=(l=c.textKey)!=null?l:"text",f=(u=c.filesKey)!=null?u:"files";for(const m of i)m!==d&&(m.key===p&&t.push(`${a}: RichInput "${d.key}" flatOutput textKey "${p}" collides with element key "${m.key}"`),m.key===f&&t.push(`${a}: RichInput "${d.key}" flatOutput filesKey "${f}" collides with element key "${m.key}"`));s.has(p)&&t.push(`${a}: RichInput "${d.key}" flatOutput textKey "${p}" collides with another flatOutput key`),s.has(f)&&t.push(`${a}: RichInput "${d.key}" flatOutput filesKey "${f}" collides with another flatOutput key`),s.add(p),s.add(f)}else d.key&&(s.has(d.key)&&t.push(`${a}: Element key "${d.key}" collides with a flatOutput richinput key`),s.add(d.key))}function o(i,a){i.forEach((l,u)=>{const s=`${a}[${u}]`;if(l.type||t.push(`${s}: missing type`),!l.key&&l.type!=="markdown"&&t.push(`${s}: missing key`),l.type==="markdown"){const d=l.content;typeof d!="string"&&t.push(`${s}: markdown element requires "content" to be a string (got ${d===null?"null":typeof d})`)}if(l.enableIf){const d=l.enableIf;(!d.key||typeof d.key!="string")&&t.push(`${s}: enableIf must have a 'key' property of type string`),"equals"in d||t.push(`${s}: enableIf must have at least one operator (equals, etc.)`)}if(l.type==="group"&&"elements"in l&&l.elements&&o(l.elements,`${s}.elements`),l.type==="container"&&l.elements){if(n(l,s,t),"prefillHints"in l&&l.prefillHints){const d=l.prefillHints;Array.isArray(d)&&d.forEach((c,p)=>{if((!c.label||typeof c.label!="string")&&t.push(`${s}: prefillHints[${p}] must have a 'label' property of type string`),!c.values||typeof c.values!="object")t.push(`${s}: prefillHints[${p}] must have a 'values' property of type object`);else for(const f in c.values)l.elements.some(m=>m.key===f)||t.push(`container "${l.key}": prefillHints[${p}] references non-existent field "${f}"`)})}o(l.elements,`${s}.elements`),r(l.elements,`${s}.elements`)}if(l.type==="select"&&l.options){const d=l.default;d!=null&&d!==""&&(l.options.some(c=>c.value===d)||t.push(`${s}: default "${d}" not in options`))}})}return Array.isArray(e.elements)&&(o(e.elements,"elements"),r(e.elements,"elements")),t}function oe(e,t,n){return e.readonly===!0||t.config.readonly===!0||(n==null?void 0:n.inheritedReadonly)===!0}function Ye(e){return e&&typeof e=="object"&&e.constructor===Object}function le(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function ht(e,t){if(e.key)return e.key;const n=t.syntheticElementIds.get(e);if(n!==void 0)return n;const r=`fb-synthetic-${t.syntheticElementIdCounter++}`;return t.syntheticElementIds.set(e,r),r}function ye(e,t){return e?`${e}.${t}`:t}function be(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function cr(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function jt(e){return e==null?"":typeof e=="object"?JSON.stringify(e):String(e)}function Ot(e){if(e==="")return null;try{return JSON.parse(e)}catch(t){return e}}function De(e,t){const n=document.createElement("input");return n.type="hidden",n.name=e,n.setAttribute("data-hidden-field","true"),n.value=jt(t),n}function bt(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 i=parseInt(o.slice(1,-1),10);if(!Array.isArray(r)||isNaN(i))return;r=r[i]}else r=r[o]}return r}function ze(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 i;if(o==="relative")i=n!=null?n:t;else if(o==="absolute")i=t;else throw new Error(`Invalid enableIf scope: must be "relative" or "absolute" (got "${o}")`);const a=bt(i,e.key);if("equals"in e)return dr(a,e.equals);throw new Error("Invalid enableIf condition: no recognized operator (equals, etc.)")}function dr(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 je(e,t,n=!1){const r=document.createElement("span");r.className="char-counter",r.style.cssText=`
|
|
2
2
|
position: absolute;
|
|
3
3
|
${n?"bottom: 8px":"top: 50%; transform: translateY(-50%)"};
|
|
4
4
|
right: 10px;
|
|
@@ -7,7 +7,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
7
7
|
pointer-events: none;
|
|
8
8
|
background: var(--fb-background-color);
|
|
9
9
|
padding: 0 4px;
|
|
10
|
-
`;const o=()=>{const i=t.value.length,
|
|
10
|
+
`;const o=()=>{const i=t.value.length,a=e.minLength,l=e.maxLength;if(a==null&&l==null){r.textContent="";return}i===0||a!=null&&i<a?(a!=null&&l!=null?r.textContent=`${a}-${l}`:l!=null?r.textContent=`\u2264${l}`:a!=null&&(r.textContent=`\u2265${a}`),r.style.color="var(--fb-text-secondary-color)"):l!=null&&i>l?(r.textContent=`${i}/${l}`,r.style.color="var(--fb-error-color)"):(l!=null?r.textContent=`${i}/${l}`:r.textContent=`${i}`,r.style.color="var(--fb-text-secondary-color)")};return t.addEventListener("input",o),o(),r}function fr(e,t,n,r){const o=t.state,i=oe(e,o,t),a=document.createElement("div");a.style.cssText="position: relative;";const l=document.createElement("input");if(l.type="text",l.className="w-full rounded-lg",l.style.cssText=`
|
|
11
11
|
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
12
12
|
padding-right: 60px;
|
|
13
13
|
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
@@ -19,39 +19,47 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
19
19
|
transition: all var(--fb-transition-duration) ease-in-out;
|
|
20
20
|
width: 100%;
|
|
21
21
|
box-sizing: border-box;
|
|
22
|
-
`,
|
|
22
|
+
`,l.name=r,l.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",l.value=t.prefill[e.key]||e.default||"",l.readOnly=i,i||(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)")})),!i&&t.instance){const u=()=>{const s=l.value===""?null:l.value;t.instance.triggerOnChange(r,s)};l.addEventListener("blur",u),l.addEventListener("input",u)}if(a.appendChild(l),!i&&(e.minLength!=null||e.maxLength!=null)){const u=je(e,l,!1);a.appendChild(u)}n.appendChild(a)}function pr(e,t,n,r){var o,i;const a=t.state,l=oe(e,a,t),u=t.prefill[e.key]||[],s=Array.isArray(u)?[...u]:[],d=(o=e.minCount)!=null?o:1,c=(i=e.maxCount)!=null?i:1/0;for(;s.length<d;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function f(){p.querySelectorAll(".multiple-text-item").forEach((v,x)=>{const E=v.querySelector("input");E&&(E.name=`${r}[${x}]`)})}function m(v="",x=-1){const E=document.createElement("div");E.className="multiple-text-item flex items-center gap-2";const k=document.createElement("div");k.style.cssText="position: relative; flex: 1;";const b=document.createElement("input");if(b.type="text",b.style.cssText=`
|
|
23
23
|
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
24
24
|
padding-right: 60px;
|
|
25
25
|
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
26
26
|
border-radius: var(--fb-border-radius);
|
|
27
|
-
background-color: ${
|
|
27
|
+
background-color: ${l?"var(--fb-background-readonly-color)":"var(--fb-background-color)"};
|
|
28
28
|
color: var(--fb-text-color);
|
|
29
29
|
font-size: var(--fb-font-size);
|
|
30
30
|
font-family: var(--fb-font-family);
|
|
31
31
|
transition: all var(--fb-transition-duration) ease-in-out;
|
|
32
32
|
width: 100%;
|
|
33
33
|
box-sizing: border-box;
|
|
34
|
-
`,
|
|
34
|
+
`,b.placeholder=e.placeholder||$("placeholderText",a),b.value=v,b.readOnly=l,l||(b.addEventListener("focus",()=>{b.style.borderColor="var(--fb-border-focus-color)",b.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",b.style.outlineOffset="0"}),b.addEventListener("blur",()=>{b.style.borderColor="var(--fb-border-color)",b.style.outline="none"}),b.addEventListener("mouseenter",()=>{document.activeElement!==b&&(b.style.borderColor="var(--fb-border-hover-color)")}),b.addEventListener("mouseleave",()=>{document.activeElement!==b&&(b.style.borderColor="var(--fb-border-color)")})),!l&&t.instance){const w=()=>{const F=b.value===""?null:b.value;t.instance.triggerOnChange(b.name,F)};b.addEventListener("blur",w),b.addEventListener("input",w)}if(k.appendChild(b),!l&&(e.minLength!=null||e.maxLength!=null)){const w=je(e,b,!1);k.appendChild(w)}return E.appendChild(k),x===-1?p.appendChild(E):p.insertBefore(E,p.children[x]),f(),E}function g(){if(l)return;const v=p.querySelectorAll(".multiple-text-item"),x=v.length;v.forEach(E=>{let k=E.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=`
|
|
35
35
|
color: var(--fb-error-color);
|
|
36
36
|
background-color: transparent;
|
|
37
37
|
transition: background-color var(--fb-transition-duration);
|
|
38
|
-
`,
|
|
38
|
+
`,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(p.children).indexOf(E);p.children.length>d&&(s.splice(w,1),E.remove(),f(),h(),g())},E.appendChild(k));const b=x<=d;k.disabled=b,k.style.opacity=b?"0.5":"1",k.style.pointerEvents=b?"none":"auto"})}let y=null,C=null;if(!l){y=document.createElement("div"),y.className="flex items-center gap-3 mt-2";const v=document.createElement("button");v.type="button",v.className="add-text-btn px-3 py-1 rounded",v.style.cssText=`
|
|
39
39
|
color: var(--fb-primary-color);
|
|
40
40
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
41
41
|
background-color: transparent;
|
|
42
42
|
font-size: var(--fb-font-size);
|
|
43
43
|
transition: all var(--fb-transition-duration);
|
|
44
|
-
`,
|
|
44
|
+
`,v.textContent="+",v.addEventListener("mouseenter",()=>{v.style.backgroundColor="var(--fb-background-hover-color)"}),v.addEventListener("mouseleave",()=>{v.style.backgroundColor="transparent"}),v.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),g()},C=document.createElement("span"),C.className="text-sm text-gray-500",y.appendChild(v),y.appendChild(C),n.appendChild(y)}function h(){if(!y||!C)return;const v=y.querySelector(".add-text-btn");if(v){const x=s.length>=c;v.disabled=x,v.style.opacity=x?"0.5":"1",v.style.pointerEvents=x?"none":"auto"}C.textContent=`${s.length}/${c===1/0?"\u221E":c}`}s.forEach(v=>m(v)),h(),g()}function Ut(e,t,n){var r,o,i;const a=[],{scopeRoot:l,skipValidation:u}=n,s=(c,p)=>{var f,m;if(!c)return;const g=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let y=document.getElementById(g);p?(c.classList.add("invalid"),c.title=p,y||(y=document.createElement("div"),y.id=g,y.className="error-message",y.style.cssText=`
|
|
45
45
|
color: var(--fb-error-color);
|
|
46
46
|
font-size: var(--fb-font-size-small);
|
|
47
47
|
margin-top: 0.25rem;
|
|
48
|
-
`,
|
|
48
|
+
`,c.nextSibling?(f=c.parentNode)==null||f.insertBefore(y,c.nextSibling):(m=c.parentNode)==null||m.appendChild(y)),y.textContent=p,y.style.display="block"):(c.classList.remove("invalid"),c.title="",y&&y.remove())},d=(c,p,f)=>{let m=!1;const{state:g}=n;if(!u&&p){if(e.minLength!==void 0&&e.minLength!==null&&p.length<e.minLength){const y=$("minLength",g,{min:e.minLength});a.push(`${f}: ${y}`),s(c,y),m=!0}else if(e.maxLength!==void 0&&e.maxLength!==null&&p.length>e.maxLength){const y=$("maxLength",g,{max:e.maxLength});a.push(`${f}: ${y}`),s(c,y),m=!0}else if(e.pattern)try{if(!new RegExp(e.pattern).test(p)){const y=$("patternMismatch",g);a.push(`${f}: ${y}`),s(c,y),m=!0}}catch(y){const C=$("invalidPattern",g);a.push(`${f}: ${C}`),s(c,C),m=!0}}m||s(c,null)};if(e.multiple){const c=l.querySelectorAll(`[name^="${t}["]`),p=[],f=[];if(c.forEach((m,g)=>{var y;const C=(y=m==null?void 0:m.value)!=null?y:"";f.push(C),p.push(C===""?null:C),d(m,C,`${t}[${g}]`)}),!u){const{state:m}=n,g=(r=e.minCount)!=null?r:1,y=(o=e.maxCount)!=null?o:1/0,C=f.filter(h=>h.trim()!=="");e.required&&C.length===0&&a.push(`${t}: ${$("required",m)}`),C.length<g&&a.push(`${t}: ${$("minItems",m,{min:g})}`),C.length>y&&a.push(`${t}: ${$("maxItems",m,{max:y})}`)}return{value:p,errors:a}}else{const c=l.querySelector(`[name$="${t}"]`),p=(i=c==null?void 0:c.value)!=null?i:"";if(!u&&e.required&&p===""){const f=$("required",n.state);return a.push(`${t}: ${f}`),s(c,f),{value:null,errors:a}}return c&&d(c,p,t),{value:p===""?null:p,errors:a}}}function Pt(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 i=o.querySelectorAll(`[name^="${t}["]`);i.forEach((a,l)=>{l<n.length&&(a.value=n[l]!=null?String(n[l]):"",a.classList.remove("invalid"),a.title="")}),n.length!==i.length&&console.warn(`updateTextField: Multiple field "${t}" has ${i.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const i=o.querySelector(`[name="${t}"]`);i&&(i.value=n!=null?String(n):"",i.classList.remove("invalid"),i.title="")}}function Wt(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 mr(e,t,n,r){const o=t.state,i=oe(e,o,t),a=document.createElement("div");a.style.cssText="position: relative;";const l=document.createElement("textarea");if(l.className="w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",l.style.cssText=`
|
|
49
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x) 24px var(--fb-input-padding-x);
|
|
50
|
+
font-size: var(--fb-font-size);
|
|
51
|
+
font-family: var(--fb-font-family);
|
|
52
|
+
`,l.name=r,l.placeholder=e.placeholder||"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442",l.rows=e.rows||4,l.value=t.prefill[e.key]||e.default||"",l.readOnly=i,!i&&t.instance){const u=()=>{const s=l.value===""?null:l.value;t.instance.triggerOnChange(r,s)};l.addEventListener("blur",u),l.addEventListener("input",u)}if((e.autoExpand||i)&&Wt(l),a.appendChild(l),!i&&(e.minLength!=null||e.maxLength!=null)){const u=je(e,l,!0);a.appendChild(u)}n.appendChild(a)}function hr(e,t,n,r){var o,i;const a=t.state,l=oe(e,a,t),u=t.prefill[e.key]||[],s=Array.isArray(u)?[...u]:[],d=(o=e.minCount)!=null?o:1,c=(i=e.maxCount)!=null?i:1/0;for(;s.length<d;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function f(){p.querySelectorAll(".multiple-textarea-item").forEach((v,x)=>{const E=v.querySelector("textarea");E&&(E.name=`${r}[${x}]`)})}function m(v="",x=-1){const E=document.createElement("div");E.className="multiple-textarea-item";const k=document.createElement("div");k.style.cssText="position: relative;";const b=document.createElement("textarea");if(b.className="w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 resize-none",b.style.cssText=`
|
|
53
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x) 24px var(--fb-input-padding-x);
|
|
54
|
+
font-size: var(--fb-font-size);
|
|
55
|
+
font-family: var(--fb-font-family);
|
|
56
|
+
`,b.placeholder=e.placeholder||$("placeholderText",a),b.rows=e.rows||4,b.value=v,b.readOnly=l,!l&&t.instance){const w=()=>{const F=b.value===""?null:b.value;t.instance.triggerOnChange(b.name,F)};b.addEventListener("blur",w),b.addEventListener("input",w)}if((e.autoExpand||l)&&Wt(b),k.appendChild(b),!l&&(e.minLength!=null||e.maxLength!=null)){const w=je(e,b,!0);k.appendChild(w)}return E.appendChild(k),x===-1?p.appendChild(E):p.insertBefore(E,p.children[x]),f(),E}function g(){if(l)return;const v=p.querySelectorAll(".multiple-textarea-item"),x=v.length;v.forEach(E=>{let k=E.querySelector(".remove-item-btn");k||(k=document.createElement("button"),k.type="button",k.className="remove-item-btn mt-1 px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm",k.innerHTML="\u2715",k.onclick=()=>{const w=Array.from(p.children).indexOf(E);p.children.length>d&&(s.splice(w,1),E.remove(),f(),h(),g())},E.appendChild(k));const b=x<=d;k.disabled=b,k.style.opacity=b?"0.5":"1",k.style.pointerEvents=b?"none":"auto"})}let y=null,C=null;if(!l){y=document.createElement("div"),y.className="flex items-center gap-3 mt-2";const v=document.createElement("button");v.type="button",v.className="add-textarea-btn px-3 py-1 rounded",v.style.cssText=`
|
|
49
57
|
color: var(--fb-primary-color);
|
|
50
58
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
51
59
|
background-color: transparent;
|
|
52
60
|
font-size: var(--fb-font-size);
|
|
53
61
|
transition: all var(--fb-transition-duration);
|
|
54
|
-
`,
|
|
62
|
+
`,v.textContent="+",v.addEventListener("mouseenter",()=>{v.style.backgroundColor="var(--fb-background-hover-color)"}),v.addEventListener("mouseleave",()=>{v.style.backgroundColor="transparent"}),v.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),g()},C=document.createElement("span"),C.className="text-sm text-gray-500",y.appendChild(v),y.appendChild(C),n.appendChild(y)}function h(){if(!y||!C)return;const v=y.querySelector(".add-textarea-btn");if(v){const x=s.length>=c;v.disabled=x,v.style.opacity=x?"0.5":"1",v.style.pointerEvents=x?"none":"auto"}C.textContent=`${s.length}/${c===1/0?"\u221E":c}`}s.forEach(v=>m(v)),h(),g()}function br(e,t,n){return Ut(e,t,n)}function vr(e,t,n,r){Pt(e,t,n,r);const{scopeRoot:o,state:i}=r;if(e.autoExpand||oe(e,i))if(e.multiple)o.querySelectorAll(`textarea[name^="${t}["]`).forEach(a=>{a.dispatchEvent(new Event("input"))});else{const a=o.querySelector(`textarea[name="${t}"]`);a&&a.dispatchEvent(new Event("input"))}}function Vt(e,t){const n=document.createElement("span");n.className="number-range-hint",n.style.cssText=`
|
|
55
63
|
position: absolute;
|
|
56
64
|
top: 50%;
|
|
57
65
|
transform: translateY(-50%);
|
|
@@ -61,31 +69,51 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
61
69
|
pointer-events: none;
|
|
62
70
|
background: var(--fb-background-color);
|
|
63
71
|
padding: 0 4px;
|
|
64
|
-
`;const r=e.min,o=e.max;let i="";r!=null&&o!=null?i=`${r} \u2013 ${o}`:o!=null?i=`\u2264${o}`:r!=null&&(i=`\u2265${r}`),n.textContent=i;const
|
|
72
|
+
`;const r=e.min,o=e.max;let i="";r!=null&&o!=null?i=`${r} \u2013 ${o}`:o!=null?i=`\u2264${o}`:r!=null&&(i=`\u2265${r}`),n.textContent=i;const a=()=>{const l=t.value?parseFloat(t.value):null;if(l!=null){const u=r!=null&&l<r,s=o!=null&&l>o;n.style.color=u||s?"var(--fb-error-color)":"var(--fb-text-secondary-color)"}else n.style.color="var(--fb-text-secondary-color)"};return t.addEventListener("input",a),a(),n}function gr(e,t,n,r){const o=t.state,i=oe(e,o,t),a=document.createElement("div");a.style.cssText="position: relative;";const l=document.createElement("input");if(l.type="number",l.className="w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",l.style.cssText=`
|
|
73
|
+
padding: var(--fb-input-padding-y) 60px var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
74
|
+
font-size: var(--fb-font-size);
|
|
75
|
+
font-family: var(--fb-font-family);
|
|
76
|
+
width: 100%;
|
|
77
|
+
box-sizing: border-box;
|
|
78
|
+
`,l.name=r,l.placeholder=e.placeholder||"0",e.min!==void 0&&(l.min=e.min.toString()),e.max!==void 0&&(l.max=e.max.toString()),e.step!==void 0&&(l.step=e.step.toString()),l.value=t.prefill[e.key]||e.default||"",l.readOnly=i,!i&&t.instance){const u=()=>{const s=l.value?parseFloat(l.value):null;t.instance.triggerOnChange(r,s)};l.addEventListener("blur",u),l.addEventListener("input",u)}if(a.appendChild(l),!i&&(e.min!=null||e.max!=null)){const u=Vt(e,l);a.appendChild(u)}n.appendChild(a)}function yr(e,t,n,r){var o,i;const a=t.state,l=oe(e,a,t),u=t.prefill[e.key]||[],s=Array.isArray(u)?[...u]:[],d=(o=e.minCount)!=null?o:1,c=(i=e.maxCount)!=null?i:1/0;for(;s.length<d;)s.push(e.default||"");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function f(){p.querySelectorAll(".multiple-number-item").forEach((v,x)=>{const E=v.querySelector("input");E&&(E.name=`${r}[${x}]`)})}function m(v="",x=-1){const E=document.createElement("div");E.className="multiple-number-item flex items-center gap-2";const k=document.createElement("div");k.style.cssText="position: relative; flex: 1;";const b=document.createElement("input");if(b.type="number",b.className="w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",b.style.cssText=`
|
|
79
|
+
padding: var(--fb-input-padding-y) 60px var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
80
|
+
font-size: var(--fb-font-size);
|
|
81
|
+
font-family: var(--fb-font-family);
|
|
82
|
+
width: 100%;
|
|
83
|
+
box-sizing: border-box;
|
|
84
|
+
`,b.placeholder=e.placeholder||"0",e.min!==void 0&&(b.min=e.min.toString()),e.max!==void 0&&(b.max=e.max.toString()),e.step!==void 0&&(b.step=e.step.toString()),b.value=v.toString(),b.readOnly=l,!l&&t.instance){const w=()=>{const F=b.value?parseFloat(b.value):null;t.instance.triggerOnChange(b.name,F)};b.addEventListener("blur",w),b.addEventListener("input",w)}if(k.appendChild(b),!l&&(e.min!=null||e.max!=null)){const w=Vt(e,b);k.appendChild(w)}return E.appendChild(k),x===-1?p.appendChild(E):p.insertBefore(E,p.children[x]),f(),E}function g(){if(l)return;const v=p.querySelectorAll(".multiple-number-item"),x=v.length;v.forEach(E=>{let k=E.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(p.children).indexOf(E);p.children.length>d&&(s.splice(w,1),E.remove(),f(),h(),g())},E.appendChild(k));const b=x<=d;k.disabled=b,k.style.opacity=b?"0.5":"1",k.style.pointerEvents=b?"none":"auto"})}let y=null,C=null;if(!l){y=document.createElement("div"),y.className="flex items-center gap-3 mt-2";const v=document.createElement("button");v.type="button",v.className="add-number-btn px-3 py-1 rounded",v.style.cssText=`
|
|
65
85
|
color: var(--fb-primary-color);
|
|
66
86
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
67
87
|
background-color: transparent;
|
|
68
88
|
font-size: var(--fb-font-size);
|
|
69
89
|
transition: all var(--fb-transition-duration);
|
|
70
|
-
`,
|
|
90
|
+
`,v.textContent="+",v.addEventListener("mouseenter",()=>{v.style.backgroundColor="var(--fb-background-hover-color)"}),v.addEventListener("mouseleave",()=>{v.style.backgroundColor="transparent"}),v.onclick=()=>{s.push(e.default||""),m(e.default||""),h(),g()},C=document.createElement("span"),C.className="text-sm text-gray-500",y.appendChild(v),y.appendChild(C),n.appendChild(y)}function h(){if(!y||!C)return;const v=y.querySelector(".add-number-btn");if(v){const x=s.length>=c;v.disabled=x,v.style.opacity=x?"0.5":"1",v.style.pointerEvents=x?"none":"auto"}C.textContent=`${s.length}/${c===1/0?"\u221E":c}`}s.forEach(v=>m(v)),h(),g()}function xr(e,t,n){var r,o,i,a,l;const u=[],{scopeRoot:s,skipValidation:d}=n,c=(f,m)=>{var g,y;if(!f)return;const C=`error-${f.getAttribute("name")||Math.random().toString(36).substring(7)}`;let h=document.getElementById(C);m?(f.classList.add("invalid"),f.title=m,h||(h=document.createElement("div"),h.id=C,h.className="error-message",h.style.cssText=`
|
|
71
91
|
color: var(--fb-error-color);
|
|
72
92
|
font-size: var(--fb-font-size-small);
|
|
73
93
|
margin-top: 0.25rem;
|
|
74
|
-
`,
|
|
94
|
+
`,f.nextSibling?(g=f.parentNode)==null||g.insertBefore(h,f.nextSibling):(y=f.parentNode)==null||y.appendChild(h)),h.textContent=m,h.style.display="block"):(f.classList.remove("invalid"),f.title="",h&&h.remove())},p=(f,m,g)=>{let y=!1;const{state:C}=n;if(!d&&e.min!==void 0&&e.min!==null&&m<e.min){const h=$("minValue",C,{min:e.min});u.push(`${g}: ${h}`),c(f,h),y=!0}else if(!d&&e.max!==void 0&&e.max!==null&&m>e.max){const h=$("maxValue",C,{max:e.max});u.push(`${g}: ${h}`),c(f,h),y=!0}y||c(f,null)};if(e.multiple){const f=s.querySelectorAll(`[name^="${t}["]`),m=[];if(f.forEach((g,y)=>{var C,h,v;const x=(C=g==null?void 0:g.value)!=null?C:"";if(x===""){m.push(null),c(g,null);return}const E=parseFloat(x);if(!d&&!Number.isFinite(E)){const b=$("notANumber",n.state);u.push(`${t}[${y}]: ${b}`),c(g,b),m.push(null);return}p(g,E,`${t}[${y}]`);const k=Number.isInteger((h=e.decimals)!=null?h:0)&&(v=e.decimals)!=null?v:0;m.push(Number(E.toFixed(k)))}),!d){const{state:g}=n,y=(r=e.minCount)!=null?r:1,C=(o=e.maxCount)!=null?o:1/0,h=m.filter(v=>v!==null);e.required&&h.length===0&&u.push(`${t}: ${$("required",g)}`),h.length<y&&u.push(`${t}: ${$("minItems",g,{min:y})}`),h.length>C&&u.push(`${t}: ${$("maxItems",g,{max:C})}`)}return{value:m,errors:u}}else{const f=s.querySelector(`[name$="${t}"]`),m=(i=f==null?void 0:f.value)!=null?i:"",{state:g}=n;if(!d&&e.required&&m===""){const h=$("required",g);return u.push(`${t}: ${h}`),c(f,h),{value:null,errors:u}}if(m==="")return c(f,null),{value:null,errors:u};const y=parseFloat(m);if(!d&&!Number.isFinite(y)){const h=$("notANumber",g);return u.push(`${t}: ${h}`),c(f,h),{value:null,errors:u}}p(f,y,t);const C=Number.isInteger((a=e.decimals)!=null?a:0)&&(l=e.decimals)!=null?l:0;return{value:Number(y.toFixed(C)),errors:u}}}function Er(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 i=o.querySelectorAll(`[name^="${t}["]`);i.forEach((a,l)=>{l<n.length&&(a.value=n[l]!=null?String(n[l]):"",a.classList.remove("invalid"),a.title="")}),n.length!==i.length&&console.warn(`updateNumberField: Multiple field "${t}" has ${i.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const i=o.querySelector(`[name="${t}"]`);i&&(i.value=n!=null?String(n):"",i.classList.remove("invalid"),i.title="")}}function Cr(e,t,n,r){const o=t.state,i=oe(e,o,t),a=document.createElement("select");if(a.className="w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",a.style.cssText=`
|
|
95
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
96
|
+
font-size: var(--fb-font-size);
|
|
97
|
+
font-family: var(--fb-font-family);
|
|
98
|
+
`,a.name=r,a.disabled=i,(e.options||[]).forEach(l=>{const u=document.createElement("option");u.value=l.value,u.textContent=l.label,(t.prefill[e.key]||e.default)===l.value&&(u.selected=!0),a.appendChild(u)}),!i&&t.instance){const l=()=>{t.instance.triggerOnChange(r,a.value)};a.addEventListener("change",l)}if(n.appendChild(a),!i){const l=document.createElement("p");l.className="text-xs text-gray-500 mt-1",l.textContent=Ee(e,o),n.appendChild(l)}}function wr(e,t,n,r){var o,i,a,l;const u=t.state,s=oe(e,u,t),d=t.prefill[e.key]||[],c=Array.isArray(d)?[...d]:[],p=(o=e.minCount)!=null?o:1,f=(i=e.maxCount)!=null?i:1/0;for(;c.length<p;)c.push(e.default||((l=(a=e.options)==null?void 0:a[0])==null?void 0:l.value)||"");const m=document.createElement("div");m.className="space-y-2",n.appendChild(m);function g(){m.querySelectorAll(".multiple-select-item").forEach((E,k)=>{const b=E.querySelector("select");b&&(b.name=`${r}[${k}]`)})}function y(E="",k=-1){const b=document.createElement("div");b.className="multiple-select-item flex items-center gap-2";const w=document.createElement("select");if(w.className="flex-1 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",w.style.cssText=`
|
|
99
|
+
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
100
|
+
font-size: var(--fb-font-size);
|
|
101
|
+
font-family: var(--fb-font-family);
|
|
102
|
+
`,w.disabled=s,(e.options||[]).forEach(F=>{const V=document.createElement("option");V.value=F.value,V.textContent=F.label,E===F.value&&(V.selected=!0),w.appendChild(V)}),!s&&t.instance){const F=()=>{t.instance.triggerOnChange(w.name,w.value)};w.addEventListener("change",F)}return b.appendChild(w),k===-1?m.appendChild(b):m.insertBefore(b,m.children[k]),g(),b}function C(){if(s)return;const E=m.querySelectorAll(".multiple-select-item"),k=E.length;E.forEach(b=>{let w=b.querySelector(".remove-item-btn");w||(w=document.createElement("button"),w.type="button",w.className="remove-item-btn px-2 py-1 text-red-600 hover:bg-red-50 rounded",w.innerHTML="\u2715",w.onclick=()=>{const V=Array.from(m.children).indexOf(b);m.children.length>p&&(c.splice(V,1),b.remove(),g(),x(),C())},b.appendChild(w));const F=k<=p;w.disabled=F,w.style.opacity=F?"0.5":"1",w.style.pointerEvents=F?"none":"auto"})}let h=null,v=null;if(!s){h=document.createElement("div"),h.className="flex items-center gap-3 mt-2";const E=document.createElement("button");E.type="button",E.className="add-select-btn px-3 py-1 rounded",E.style.cssText=`
|
|
75
103
|
color: var(--fb-primary-color);
|
|
76
104
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
77
105
|
background-color: transparent;
|
|
78
106
|
font-size: var(--fb-font-size);
|
|
79
107
|
transition: all var(--fb-transition-duration);
|
|
80
|
-
`,E.textContent="+",E.addEventListener("mouseenter",()=>{E.style.backgroundColor="var(--fb-background-hover-color)"}),E.addEventListener("mouseleave",()=>{E.style.backgroundColor="transparent"}),E.onclick=()=>{var
|
|
108
|
+
`,E.textContent="+",E.addEventListener("mouseenter",()=>{E.style.backgroundColor="var(--fb-background-hover-color)"}),E.addEventListener("mouseleave",()=>{E.style.backgroundColor="transparent"}),E.onclick=()=>{var k,b;const w=e.default||((b=(k=e.options)==null?void 0:k[0])==null?void 0:b.value)||"";c.push(w),y(w),x(),C()},v=document.createElement("span"),v.className="text-sm text-gray-500",h.appendChild(E),h.appendChild(v),n.appendChild(h)}function x(){if(!h||!v)return;const E=h.querySelector(".add-select-btn");if(E){const k=c.length>=f;E.disabled=k,E.style.opacity=k?"0.5":"1",E.style.pointerEvents=k?"none":"auto"}v.textContent=`${c.length}/${f===1/0?"\u221E":f}`}if(c.forEach(E=>y(E)),x(),C(),!s){const E=document.createElement("p");E.className="text-xs text-gray-500 mt-1",E.textContent=Ee(e,u),n.appendChild(E)}}function kr(e,t,n){var r;const o=[],{scopeRoot:i,skipValidation:a}=n,l=(s,d)=>{var c,p;if(!s)return;const f=`error-${s.getAttribute("name")||Math.random().toString(36).substring(7)}`;let m=document.getElementById(f);d?(s.classList.add("invalid"),s.title=d,m||(m=document.createElement("div"),m.id=f,m.className="error-message",m.style.cssText=`
|
|
81
109
|
color: var(--fb-error-color);
|
|
82
110
|
font-size: var(--fb-font-size-small);
|
|
83
111
|
margin-top: 0.25rem;
|
|
84
|
-
`,s.nextSibling?(
|
|
112
|
+
`,s.nextSibling?(c=s.parentNode)==null||c.insertBefore(m,s.nextSibling):(p=s.parentNode)==null||p.appendChild(m)),m.textContent=d,m.style.display="block"):(s.classList.remove("invalid"),s.title="",m&&m.remove())},u=(s,d,c,p)=>{var f,m;if(a)return;const{state:g}=n,y=d.filter(p),C="minCount"in c&&(f=c.minCount)!=null?f:1,h="maxCount"in c&&(m=c.maxCount)!=null?m:1/0;c.required&&y.length===0&&o.push(`${s}: ${$("required",g)}`),y.length<C&&o.push(`${s}: ${$("minItems",g,{min:C})}`),y.length>h&&o.push(`${s}: ${$("maxItems",g,{max:h})}`)};if("multiple"in e&&e.multiple){const s=i.querySelectorAll(`[name^="${t}["]`),d=[];return s.forEach(c=>{var p;const f=(p=c==null?void 0:c.value)!=null?p:"";d.push(f),l(c,null)}),u(t,d,e,c=>c!==""),{value:d,errors:o}}else{const s=i.querySelector(`[name$="${t}"]`),d=(r=s==null?void 0:s.value)!=null?r:"";if(!a&&e.required&&d===""){const c=$("required",n.state);return o.push(`${t}: ${c}`),l(s,c),{value:null,errors:o}}else l(s,null);return{value:d===""?null:d,errors:o}}}function $r(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 i=o.querySelectorAll(`[name^="${t}["]`);i.forEach((a,l)=>{l<n.length&&(a.value=n[l]!=null?String(n[l]):"",a.querySelectorAll("option").forEach(u=>{u.selected=u.value===String(n[l])}),a.classList.remove("invalid"),a.title="")}),n.length!==i.length&&console.warn(`updateSelectField: Multiple field "${t}" has ${i.length} selects but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const i=o.querySelector(`[name="${t}"]`);i&&(i.value=n!=null?String(n):"",i.querySelectorAll("option").forEach(a=>{a.selected=a.value===String(n)}),i.classList.remove("invalid"),i.title="")}}function Ge(e){e.style.backgroundColor="var(--fb-primary-color)",e.style.color="#ffffff",e.style.borderColor="var(--fb-primary-color)"}function Xe(e){e.style.backgroundColor="transparent",e.style.color="var(--fb-text-color)",e.style.borderColor="var(--fb-border-color)"}function _t(e,t,n,r,o){const i=e.options||[],a=document.createElement("div");a.className="fb-switcher-group",a.style.cssText=`
|
|
85
113
|
display: inline-flex;
|
|
86
114
|
flex-direction: row;
|
|
87
115
|
flex-wrap: nowrap;
|
|
88
|
-
`;const
|
|
116
|
+
`;const l=[];return i.forEach((u,s)=>{const d=document.createElement("button");d.type="button",d.className="fb-switcher-btn",d.dataset.value=u.value,d.textContent=u.label,d.style.cssText=`
|
|
89
117
|
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
90
118
|
font-size: var(--fb-font-size);
|
|
91
119
|
border-width: var(--fb-border-width);
|
|
@@ -95,24 +123,30 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
95
123
|
white-space: nowrap;
|
|
96
124
|
line-height: 1.25;
|
|
97
125
|
outline: none;
|
|
98
|
-
`,i.length===1?
|
|
126
|
+
`,i.length===1?d.style.borderRadius="var(--fb-border-radius)":s===0?(d.style.borderRadius="var(--fb-border-radius) 0 0 var(--fb-border-radius)",d.style.borderRightWidth="0"):s===i.length-1?d.style.borderRadius="0 var(--fb-border-radius) var(--fb-border-radius) 0":(d.style.borderRadius="0",d.style.borderRightWidth="0"),u.value===t?Ge(d):Xe(d),r||(d.addEventListener("click",()=>{n.value=u.value,l.forEach(c=>{c.dataset.value===u.value?Ge(c):Xe(c)}),o&&o(u.value)}),d.addEventListener("mouseenter",()=>{n.value!==u.value&&(d.style.backgroundColor="var(--fb-background-hover-color)")}),d.addEventListener("mouseleave",()=>{n.value!==u.value&&(d.style.backgroundColor="transparent")})),l.push(d),a.appendChild(d)}),a}function Lr(e,t,n,r){var o,i;const a=t.state,l=String((i=(o=t.prefill[e.key])!=null?o:e.default)!=null?i:""),u=document.createElement("input");u.type="hidden",u.name=r,u.value=l;const s=oe(e,a,t),d=!s&&t.instance?p=>{t.instance.triggerOnChange(r,p)}:null,c=_t(e,l,u,s,d);if(n.appendChild(u),n.appendChild(c),!s){const p=document.createElement("p");p.className="text-xs text-gray-500 mt-1",p.textContent=Ee(e,a),n.appendChild(p)}}function Sr(e,t,n,r){var o,i,a,l;const u=t.state,s=t.prefill[e.key]||[],d=Array.isArray(s)?[...s]:[],c=(o=e.minCount)!=null?o:1,p=(i=e.maxCount)!=null?i:1/0;for(;d.length<c;)d.push(e.default||((l=(a=e.options)==null?void 0:a[0])==null?void 0:l.value)||"");const f=oe(e,u,t),m=document.createElement("div");m.className="space-y-2",n.appendChild(m);function g(){m.querySelectorAll(".multiple-switcher-item").forEach((E,k)=>{const b=E.querySelector("input[type=hidden]");b&&(b.name=`${r}[${k}]`)})}function y(E="",k=-1){const b=k===-1?m.children.length:k,w=`${r}[${b}]`,F=document.createElement("div");F.className="multiple-switcher-item flex items-center gap-2";const V=document.createElement("input");V.type="hidden",V.name=w,V.value=E,F.appendChild(V);const R=!f&&t.instance?j=>{t.instance.triggerOnChange(V.name,j)}:null,D=_t(e,E,V,f,R);return F.appendChild(D),k===-1?m.appendChild(F):m.insertBefore(F,m.children[k]),g(),F}function C(){if(f)return;const E=m.querySelectorAll(".multiple-switcher-item"),k=E.length;E.forEach(b=>{let w=b.querySelector(".remove-item-btn");w||(w=document.createElement("button"),w.type="button",w.className="remove-item-btn px-2 py-1 rounded",w.style.cssText=`
|
|
99
127
|
color: var(--fb-error-color);
|
|
100
128
|
background-color: transparent;
|
|
101
129
|
transition: background-color var(--fb-transition-duration);
|
|
102
|
-
`,
|
|
130
|
+
`,w.innerHTML="\u2715",w.addEventListener("mouseenter",()=>{w.style.backgroundColor="var(--fb-background-hover-color)"}),w.addEventListener("mouseleave",()=>{w.style.backgroundColor="transparent"}),w.onclick=()=>{const V=Array.from(m.children).indexOf(b);m.children.length>c&&(d.splice(V,1),b.remove(),g(),x(),C())},b.appendChild(w));const F=k<=c;w.disabled=F,w.style.opacity=F?"0.5":"1",w.style.pointerEvents=F?"none":"auto"})}let h=null,v=null;if(!f){h=document.createElement("div"),h.className="flex items-center gap-3 mt-2";const E=document.createElement("button");E.type="button",E.className="add-switcher-btn px-3 py-1 rounded",E.style.cssText=`
|
|
103
131
|
color: var(--fb-primary-color);
|
|
104
132
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
105
133
|
background-color: transparent;
|
|
106
134
|
font-size: var(--fb-font-size);
|
|
107
135
|
transition: all var(--fb-transition-duration);
|
|
108
|
-
`,E.textContent="+",E.addEventListener("mouseenter",()=>{E.style.backgroundColor="var(--fb-background-hover-color)"}),E.addEventListener("mouseleave",()=>{E.style.backgroundColor="transparent"}),E.onclick=()=>{var
|
|
136
|
+
`,E.textContent="+",E.addEventListener("mouseenter",()=>{E.style.backgroundColor="var(--fb-background-hover-color)"}),E.addEventListener("mouseleave",()=>{E.style.backgroundColor="transparent"}),E.onclick=()=>{var k,b;const w=e.default||((b=(k=e.options)==null?void 0:k[0])==null?void 0:b.value)||"";d.push(w),y(w),x(),C()},v=document.createElement("span"),v.className="text-sm text-gray-500",h.appendChild(E),h.appendChild(v),n.appendChild(h)}function x(){if(!h||!v)return;const E=h.querySelector(".add-switcher-btn");if(E){const k=d.length>=p;E.disabled=k,E.style.opacity=k?"0.5":"1",E.style.pointerEvents=k?"none":"auto"}v.textContent=`${d.length}/${p===1/0?"\u221E":p}`}if(d.forEach(E=>y(E)),x(),C(),!f){const E=document.createElement("p");E.className="text-xs text-gray-500 mt-1",E.textContent=Ee(e,u),n.appendChild(E)}}function Tr(e,t,n){var r;const o=[],{scopeRoot:i,skipValidation:a}=n,l=(d,c)=>{var p,f;if(!d)return;const m=`error-${d.getAttribute("name")||Math.random().toString(36).substring(7)}`;let g=document.getElementById(m);c?(d.classList.add("invalid"),d.title=c,g||(g=document.createElement("div"),g.id=m,g.className="error-message",g.style.cssText=`
|
|
109
137
|
color: var(--fb-error-color);
|
|
110
138
|
font-size: var(--fb-font-size-small);
|
|
111
139
|
margin-top: 0.25rem;
|
|
112
|
-
`,
|
|
140
|
+
`,d.nextSibling?(p=d.parentNode)==null||p.insertBefore(g,d.nextSibling):(f=d.parentNode)==null||f.appendChild(g)),g.textContent=c,g.style.display="block"):(d.classList.remove("invalid"),d.title="",g&&g.remove())},u=(d,c,p,f)=>{var m,g;if(a)return;const{state:y}=n,C=c.filter(f),h="minCount"in p&&(m=p.minCount)!=null?m:1,v="maxCount"in p&&(g=p.maxCount)!=null?g:1/0;p.required&&C.length===0&&o.push(`${d}: ${$("required",y)}`),C.length<h&&o.push(`${d}: ${$("minItems",y,{min:h})}`),C.length>v&&o.push(`${d}: ${$("maxItems",y,{max:v})}`)},s=new Set("options"in e?e.options.map(d=>d.value):[]);if("multiple"in e&&e.multiple){const d=i.querySelectorAll(`input[type="hidden"][name^="${t}["]`),c=[];return d.forEach(p=>{var f;const m=(f=p==null?void 0:p.value)!=null?f:"";if(c.push(m),!a&&m!==""&&!s.has(m)){const g=$("invalidOption",n.state);l(p,g),o.push(`${t}: ${g}`)}else l(p,null)}),u(t,c,e,p=>p!==""),{value:c,errors:o}}else{const d=i.querySelector(`input[type="hidden"][name$="${t}"]`),c=(r=d==null?void 0:d.value)!=null?r:"";if(!a&&e.required&&c===""){const p=$("required",n.state);return o.push(`${t}: ${p}`),l(d,p),{value:null,errors:o}}if(!a&&c!==""&&!s.has(c)){const p=$("invalidOption",n.state);return o.push(`${t}: ${p}`),l(d,p),{value:null,errors:o}}return l(d,null),{value:c===""?null:c,errors:o}}}function Ar(e,t,n,r){var o;const{scopeRoot:i}=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 a=i.querySelectorAll(`input[type="hidden"][name^="${t}["]`);a.forEach((l,u)=>{var s;if(u<n.length){const d=n[u]!=null?String(n[u]):"";l.value=d;const c=(s=l.parentElement)==null?void 0:s.querySelector(".fb-switcher-group");c&&c.querySelectorAll(".fb-switcher-btn").forEach(p=>{p.dataset.value===d?Ge(p):Xe(p)}),l.classList.remove("invalid"),l.title=""}}),n.length!==a.length&&console.warn(`updateSwitcherField: Multiple field "${t}" has ${a.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const a=i.querySelector(`input[type="hidden"][name="${t}"]`);if(a){const l=n!=null?String(n):"";a.value=l;const u=(o=a.parentElement)==null?void 0:o.querySelector(".fb-switcher-group");u&&u.querySelectorAll(".fb-switcher-btn").forEach(s=>{s.dataset.value===l?Ge(s):Xe(s)}),a.classList.remove("invalid"),a.title=""}}}function $e(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 qe(e,t){var n,r;if(t.length===0)return!0;const o=(r=(n=e.split(".").pop())==null?void 0:n.toLowerCase())!=null?r:"";return t.includes(o)}function Kt(e,t){return t===1/0?!0:e<=t*1024*1024}function Ze(e,t){return Kt(e.size,t)}function Oe(e){return e?typeof e=="string"?[]:Array.isArray(e.mime)?e.mime.map(t=>t.toLowerCase()):[]:[]}function Ue(e,t){if(t.length===0)return!0;const n=e.toLowerCase();return t.some(r=>{if(r.endsWith("/*")){const o=r.slice(0,-1);return n.startsWith(o)}return n===r})}function Fr(e){var t;const n=(t=(e.split("/").pop()||"file").split(".").pop())==null?void 0:t.toLowerCase();if(n){if(["jpg","jpeg","png","gif","webp"].includes(n))return`image/${n==="jpg"?"jpeg":n}`;if(["mp4","webm","mov","avi"].includes(n))return`video/${n==="mov"?"quicktime":n}`}return"application/octet-stream"}function Qe(e,t){if(t.has(e))return;const n=e.split("/").pop()||"file";t.set(e,{name:n,type:Fr(e),size:0,uploadedAt:new Date,file:void 0,inferredFromExtension:!0})}function vt(e,t){for(const n of e)Qe(n,t)}const Jt="fb-file-styles";function xe(){if(typeof document=="undefined"||document.getElementById(Jt))return;const e=document.createElement("style");e.id=Jt,e.setAttribute("data-fb-file-styles","true"),e.textContent=`
|
|
113
141
|
@keyframes fb-spin { to { transform: rotate(360deg); } }
|
|
114
142
|
|
|
115
|
-
/*
|
|
143
|
+
/* \u2500\u2500\u2500 Checker background utility \u2500\u2500\u2500 */
|
|
144
|
+
/* Neutral diagonal-stripe background for image previews (never crops) */
|
|
145
|
+
.fb-checker {
|
|
146
|
+
background-image: repeating-linear-gradient(45deg, #fafafa 0 6px, #f3f4f6 6px 12px);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* \u2500\u2500\u2500 Spinner \u2500\u2500\u2500 */
|
|
116
150
|
.fb-spinner {
|
|
117
151
|
width: 36px;
|
|
118
152
|
height: 36px;
|
|
@@ -123,207 +157,271 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
123
157
|
flex-shrink: 0;
|
|
124
158
|
}
|
|
125
159
|
|
|
126
|
-
/*
|
|
127
|
-
.fb-tile {
|
|
128
|
-
width:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
160
|
+
/* \u2500\u2500\u2500 Wide single-file add tile (empty state) \u2500\u2500\u2500 */
|
|
161
|
+
.fb-wide-tile {
|
|
162
|
+
width: 100%;
|
|
163
|
+
border-radius: 0.75rem;
|
|
164
|
+
border: 1px dashed #60a5fa;
|
|
165
|
+
background: rgba(239,246,255,0.5);
|
|
166
|
+
display: flex;
|
|
132
167
|
overflow: hidden;
|
|
133
|
-
|
|
134
|
-
|
|
168
|
+
height: 180px;
|
|
169
|
+
transition: border-color 150ms, background 150ms, box-shadow 150ms;
|
|
170
|
+
cursor: pointer;
|
|
135
171
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
.fb-tile-resource {
|
|
139
|
-
border: 1px solid var(--fb-file-upload-border-color, #d1d5db);
|
|
172
|
+
.fb-wide-tile:hover {
|
|
173
|
+
background: #eff6ff;
|
|
140
174
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
175
|
+
.fb-wide-tile.fb-drag-over {
|
|
176
|
+
border-color: #3b82f6;
|
|
177
|
+
border-width: 2px;
|
|
178
|
+
background: #eff6ff;
|
|
179
|
+
box-shadow: 0 0 0 4px rgba(191,219,254,0.7);
|
|
145
180
|
}
|
|
146
181
|
|
|
147
|
-
/*
|
|
148
|
-
.fb-tile-
|
|
149
|
-
|
|
182
|
+
/* Upload zone inside wide tile */
|
|
183
|
+
.fb-wide-tile-upload {
|
|
184
|
+
flex: 1;
|
|
150
185
|
display: flex;
|
|
186
|
+
flex-direction: column;
|
|
151
187
|
align-items: center;
|
|
152
188
|
justify-content: center;
|
|
189
|
+
gap: 8px;
|
|
190
|
+
color: #2563eb;
|
|
191
|
+
padding: 16px;
|
|
192
|
+
transition: background 150ms;
|
|
153
193
|
cursor: pointer;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
border-color var(--fb-transition-duration, 200ms),
|
|
158
|
-
color var(--fb-transition-duration, 200ms);
|
|
194
|
+
background: transparent;
|
|
195
|
+
border: none;
|
|
196
|
+
font-family: inherit;
|
|
159
197
|
}
|
|
160
|
-
.fb-tile-
|
|
161
|
-
|
|
162
|
-
color: var(--fb-text-color, #1f2937);
|
|
198
|
+
.fb-wide-tile-upload:hover {
|
|
199
|
+
background: rgba(191,219,254,0.25);
|
|
163
200
|
}
|
|
164
201
|
|
|
165
|
-
/*
|
|
166
|
-
.fb-tile-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
padding: 2px 6px;
|
|
173
|
-
align-self: flex-end;
|
|
174
|
-
margin-bottom: 4px;
|
|
202
|
+
/* Vertical dashed divider between upload and library zones */
|
|
203
|
+
.fb-wide-tile-divider {
|
|
204
|
+
width: 1px;
|
|
205
|
+
margin: 16px 0;
|
|
206
|
+
border-left: 1px dashed rgba(96,165,250,0.5);
|
|
207
|
+
background: transparent;
|
|
208
|
+
flex-shrink: 0;
|
|
175
209
|
}
|
|
176
210
|
|
|
177
|
-
/*
|
|
178
|
-
.fb-
|
|
179
|
-
width:
|
|
180
|
-
|
|
181
|
-
border: 2px dashed var(--fb-file-upload-border-color, #d1d5db);
|
|
182
|
-
border-radius: var(--fb-border-radius, 0.5rem);
|
|
211
|
+
/* Library zone inside wide tile */
|
|
212
|
+
.fb-wide-tile-library {
|
|
213
|
+
width: 176px;
|
|
214
|
+
flex-shrink: 0;
|
|
183
215
|
display: flex;
|
|
184
216
|
flex-direction: column;
|
|
185
217
|
align-items: center;
|
|
186
218
|
justify-content: center;
|
|
187
|
-
gap:
|
|
219
|
+
gap: 8px;
|
|
220
|
+
color: #2563eb;
|
|
221
|
+
padding: 12px;
|
|
222
|
+
transition: background 150ms;
|
|
188
223
|
cursor: pointer;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
224
|
+
background: transparent;
|
|
225
|
+
border: none;
|
|
226
|
+
font-family: inherit;
|
|
192
227
|
}
|
|
193
|
-
.fb-
|
|
194
|
-
|
|
195
|
-
background: var(--fb-background-hover-color, #f9fafb);
|
|
228
|
+
.fb-wide-tile-library:hover {
|
|
229
|
+
background: rgba(191,219,254,0.25);
|
|
196
230
|
}
|
|
197
231
|
|
|
198
|
-
/*
|
|
199
|
-
.fb-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
max-height: 28px;
|
|
232
|
+
/* \u2500\u2500\u2500 Multi-file outer grid container \u2500\u2500\u2500 */
|
|
233
|
+
.fb-multi-outer {
|
|
234
|
+
border-radius: 0.75rem;
|
|
235
|
+
border: 1px dashed #cbd5e1;
|
|
236
|
+
background: rgba(248,250,252,0.4);
|
|
237
|
+
padding: 12px;
|
|
238
|
+
transition: border-color 150ms, background 150ms, box-shadow 150ms;
|
|
206
239
|
}
|
|
207
|
-
.fb-
|
|
208
|
-
|
|
209
|
-
color:
|
|
240
|
+
.fb-multi-outer.fb-drag-over {
|
|
241
|
+
border-width: 2px;
|
|
242
|
+
border-color: #3b82f6;
|
|
243
|
+
background: rgba(239,246,255,0.4);
|
|
244
|
+
box-shadow: 0 0 0 4px rgba(191,219,254,0.7);
|
|
210
245
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
246
|
+
|
|
247
|
+
/* With files present: white solid border */
|
|
248
|
+
.fb-multi-outer.fb-multi-has-files {
|
|
249
|
+
border-style: solid;
|
|
250
|
+
border-color: #e2e8f0;
|
|
251
|
+
background: #fff;
|
|
215
252
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
253
|
+
|
|
254
|
+
/* The CSS grid inside */
|
|
255
|
+
.fb-multi-grid {
|
|
256
|
+
display: grid;
|
|
257
|
+
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
258
|
+
gap: 10px;
|
|
220
259
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
260
|
+
|
|
261
|
+
/* \u2500\u2500\u2500 Multi square add-tile (combined upload + library) \u2500\u2500\u2500 */
|
|
262
|
+
.fb-multi-add-tile {
|
|
263
|
+
aspect-ratio: 1 / 1;
|
|
264
|
+
border-radius: 0.5rem;
|
|
265
|
+
border: 1px dashed #60a5fa;
|
|
266
|
+
background: rgba(239,246,255,0.5);
|
|
267
|
+
display: flex;
|
|
268
|
+
flex-direction: column;
|
|
269
|
+
overflow: hidden;
|
|
270
|
+
transition: background 150ms;
|
|
224
271
|
}
|
|
225
|
-
.fb-
|
|
226
|
-
|
|
227
|
-
|
|
272
|
+
.fb-multi-add-tile:hover {
|
|
273
|
+
background: #eff6ff;
|
|
274
|
+
}
|
|
275
|
+
.fb-multi-add-tile.fb-drag-over-tile {
|
|
276
|
+
border-width: 2px;
|
|
277
|
+
border-color: #3b82f6;
|
|
278
|
+
background: rgba(255,255,255,0.8);
|
|
228
279
|
}
|
|
229
280
|
|
|
230
|
-
/*
|
|
231
|
-
.fb-
|
|
232
|
-
|
|
233
|
-
inset: 0;
|
|
234
|
-
background: transparent;
|
|
235
|
-
transition: background var(--fb-transition-duration, 200ms);
|
|
236
|
-
display: flex;
|
|
237
|
-
align-items: flex-start;
|
|
238
|
-
justify-content: flex-end;
|
|
239
|
-
}
|
|
240
|
-
.fb-tile-resource:hover .fb-tile-overlay {
|
|
241
|
-
background: var(--fb-tile-hover-overlay-color, rgba(0,0,0,0.4));
|
|
242
|
-
}
|
|
243
|
-
.fb-tile-x-btn {
|
|
244
|
-
margin: 3px;
|
|
245
|
-
width: 18px;
|
|
246
|
-
height: 18px;
|
|
247
|
-
background: var(--fb-error-color, #ef4444);
|
|
248
|
-
color: var(--fb-file-bg-color, #fff);
|
|
249
|
-
border: none;
|
|
250
|
-
border-radius: 50%;
|
|
251
|
-
font-size: 11px;
|
|
252
|
-
line-height: 1;
|
|
253
|
-
cursor: pointer;
|
|
281
|
+
/* Upload half of add-tile */
|
|
282
|
+
.fb-multi-add-upload {
|
|
283
|
+
flex: 1;
|
|
254
284
|
display: flex;
|
|
285
|
+
flex-direction: column;
|
|
255
286
|
align-items: center;
|
|
256
287
|
justify-content: center;
|
|
257
|
-
|
|
258
|
-
|
|
288
|
+
gap: 4px;
|
|
289
|
+
color: #2563eb;
|
|
290
|
+
cursor: pointer;
|
|
291
|
+
background: transparent;
|
|
292
|
+
border: none;
|
|
293
|
+
font-family: inherit;
|
|
294
|
+
width: 100%;
|
|
295
|
+
transition: background 150ms;
|
|
259
296
|
}
|
|
260
|
-
.fb-
|
|
261
|
-
|
|
297
|
+
.fb-multi-add-upload:hover {
|
|
298
|
+
background: rgba(191,219,254,0.35);
|
|
262
299
|
}
|
|
263
300
|
|
|
264
|
-
/*
|
|
265
|
-
.fb-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
align-items: center;
|
|
270
|
-
justify-content: center;
|
|
271
|
-
background: var(--fb-tile-hover-overlay-color, rgba(0,0,0,0.25));
|
|
301
|
+
/* Horizontal dashed divider inside add-tile */
|
|
302
|
+
.fb-multi-add-divider {
|
|
303
|
+
border-top: 1px dashed rgba(96,165,250,0.5);
|
|
304
|
+
margin: 0;
|
|
305
|
+
flex-shrink: 0;
|
|
272
306
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
307
|
+
|
|
308
|
+
/* Library strip at bottom of add-tile */
|
|
309
|
+
.fb-multi-add-library {
|
|
310
|
+
padding: 6px 0;
|
|
276
311
|
display: flex;
|
|
277
312
|
align-items: center;
|
|
278
313
|
justify-content: center;
|
|
314
|
+
gap: 4px;
|
|
315
|
+
color: #2563eb;
|
|
316
|
+
font-size: 11px;
|
|
317
|
+
font-weight: 500;
|
|
318
|
+
cursor: pointer;
|
|
319
|
+
background: transparent;
|
|
320
|
+
border: none;
|
|
321
|
+
font-family: inherit;
|
|
322
|
+
width: 100%;
|
|
323
|
+
transition: background 150ms;
|
|
324
|
+
flex-shrink: 0;
|
|
325
|
+
}
|
|
326
|
+
.fb-multi-add-library:hover {
|
|
327
|
+
background: rgba(191,219,254,0.35);
|
|
279
328
|
}
|
|
280
329
|
|
|
281
|
-
/*
|
|
282
|
-
.fb-
|
|
330
|
+
/* \u2500\u2500\u2500 Capacity placeholder squares \u2500\u2500\u2500 */
|
|
331
|
+
.fb-multi-placeholder {
|
|
332
|
+
aspect-ratio: 1 / 1;
|
|
333
|
+
border-radius: 0.5rem;
|
|
334
|
+
border: 1px solid #e2e8f0;
|
|
335
|
+
}
|
|
336
|
+
.fb-multi-placeholder.fb-drag-over {
|
|
337
|
+
border-width: 2px;
|
|
338
|
+
border-style: dashed;
|
|
339
|
+
border-color: #93c5fd;
|
|
340
|
+
background: rgba(219,234,254,0.6);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* \u2500\u2500\u2500 Filled preview tile \u2500\u2500\u2500 */
|
|
344
|
+
.fb-preview-tile {
|
|
345
|
+
aspect-ratio: 1 / 1;
|
|
346
|
+
border-radius: 0.5rem;
|
|
347
|
+
border: 1px solid #e2e8f0;
|
|
348
|
+
overflow: hidden;
|
|
283
349
|
position: relative;
|
|
350
|
+
cursor: pointer;
|
|
351
|
+
}
|
|
352
|
+
.fb-preview-tile img {
|
|
284
353
|
width: 100%;
|
|
285
354
|
height: 100%;
|
|
355
|
+
object-fit: contain;
|
|
356
|
+
display: block;
|
|
286
357
|
}
|
|
287
358
|
|
|
288
|
-
/*
|
|
289
|
-
.fb-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
z-index: 10;
|
|
359
|
+
/* \u2500\u2500\u2500 Uploading placeholder tile \u2500\u2500\u2500 */
|
|
360
|
+
.fb-uploading-tile {
|
|
361
|
+
aspect-ratio: 1 / 1;
|
|
362
|
+
border-radius: 0.5rem;
|
|
363
|
+
border: 2px dashed #d1d5db;
|
|
294
364
|
display: flex;
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
365
|
+
flex-direction: column;
|
|
366
|
+
align-items: center;
|
|
367
|
+
justify-content: center;
|
|
368
|
+
gap: 6px;
|
|
369
|
+
padding: 6px;
|
|
299
370
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
371
|
+
|
|
372
|
+
/* \u2500\u2500\u2500 Meta line below multi grid \u2500\u2500\u2500 */
|
|
373
|
+
.fb-meta-line {
|
|
374
|
+
margin-top: 10px;
|
|
375
|
+
display: flex;
|
|
376
|
+
align-items: center;
|
|
377
|
+
justify-content: space-between;
|
|
378
|
+
gap: 8px;
|
|
379
|
+
flex-wrap: wrap;
|
|
303
380
|
}
|
|
304
|
-
.fb-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
line-height: 1.2;
|
|
381
|
+
.fb-meta-text {
|
|
382
|
+
font-size: 12px;
|
|
383
|
+
color: #94a3b8;
|
|
384
|
+
display: flex;
|
|
385
|
+
align-items: center;
|
|
386
|
+
gap: 8px;
|
|
387
|
+
flex-wrap: wrap;
|
|
312
388
|
}
|
|
313
|
-
.fb-
|
|
314
|
-
|
|
389
|
+
.fb-meta-dot {
|
|
390
|
+
width: 4px;
|
|
391
|
+
height: 4px;
|
|
392
|
+
border-radius: 50%;
|
|
393
|
+
background: #cbd5e1;
|
|
394
|
+
flex-shrink: 0;
|
|
315
395
|
}
|
|
316
|
-
.fb-
|
|
317
|
-
|
|
396
|
+
.fb-meta-mono {
|
|
397
|
+
font-family: ui-monospace, 'JetBrains Mono', monospace;
|
|
398
|
+
font-size: 11px;
|
|
399
|
+
letter-spacing: -0.02em;
|
|
318
400
|
}
|
|
319
|
-
.fb-
|
|
320
|
-
|
|
401
|
+
.fb-clear-all-btn {
|
|
402
|
+
font-size: 12px;
|
|
403
|
+
color: #94a3b8;
|
|
404
|
+
background: none;
|
|
405
|
+
border: none;
|
|
406
|
+
cursor: pointer;
|
|
407
|
+
padding: 0;
|
|
408
|
+
font-family: inherit;
|
|
409
|
+
transition: color 150ms;
|
|
410
|
+
white-space: nowrap;
|
|
411
|
+
flex-shrink: 0;
|
|
321
412
|
}
|
|
322
|
-
.fb-
|
|
323
|
-
|
|
413
|
+
.fb-clear-all-btn:hover {
|
|
414
|
+
color: #dc2626;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/* \u2500\u2500\u2500 Empty text (readonly) \u2500\u2500\u2500 */
|
|
418
|
+
.fb-tile-empty-text {
|
|
419
|
+
font-size: 11px;
|
|
420
|
+
color: var(--fb-text-secondary-color, #6b7280);
|
|
421
|
+
padding: 4px 0;
|
|
324
422
|
}
|
|
325
423
|
|
|
326
|
-
/* Tile action
|
|
424
|
+
/* \u2500\u2500\u2500 Tile action buttons (for zoom popup, compat) \u2500\u2500\u2500 */
|
|
327
425
|
.fb-tile-actions {
|
|
328
426
|
position: absolute;
|
|
329
427
|
top: 3px;
|
|
@@ -335,37 +433,35 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
335
433
|
transition: opacity var(--fb-transition-duration, 200ms);
|
|
336
434
|
z-index: 10;
|
|
337
435
|
}
|
|
338
|
-
.fb-tile
|
|
436
|
+
.fb-preview-tile:hover .fb-tile-actions {
|
|
339
437
|
opacity: 1;
|
|
340
438
|
}
|
|
341
439
|
.fb-tile-action-btn {
|
|
342
|
-
width:
|
|
343
|
-
height:
|
|
440
|
+
width: 24px;
|
|
441
|
+
height: 24px;
|
|
344
442
|
display: flex;
|
|
345
443
|
align-items: center;
|
|
346
444
|
justify-content: center;
|
|
347
|
-
border:
|
|
348
|
-
border-radius:
|
|
445
|
+
border: 1px solid rgba(15,23,42,0.08);
|
|
446
|
+
border-radius: 0.375rem;
|
|
349
447
|
cursor: pointer;
|
|
350
|
-
background: rgba(
|
|
351
|
-
color: #
|
|
448
|
+
background: rgba(255,255,255,0.92);
|
|
449
|
+
color: #374151;
|
|
352
450
|
padding: 0;
|
|
353
451
|
flex-shrink: 0;
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
452
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.06);
|
|
453
|
+
transition: background var(--fb-transition-duration, 200ms),
|
|
454
|
+
color var(--fb-transition-duration, 200ms);
|
|
357
455
|
}
|
|
358
456
|
.fb-tile-action-btn:hover {
|
|
359
|
-
background:
|
|
360
|
-
|
|
361
|
-
.fb-tile-action-remove {
|
|
362
|
-
background: rgba(220, 38, 38, 0.8);
|
|
457
|
+
background: #ffffff;
|
|
458
|
+
color: #0f172a;
|
|
363
459
|
}
|
|
364
460
|
.fb-tile-action-remove:hover {
|
|
365
|
-
|
|
461
|
+
color: #dc2626;
|
|
366
462
|
}
|
|
367
463
|
|
|
368
|
-
/*
|
|
464
|
+
/* Zoom popup action buttons always visible */
|
|
369
465
|
.fb-tile-zoom-preview .fb-tile-actions {
|
|
370
466
|
position: absolute;
|
|
371
467
|
top: 6px;
|
|
@@ -374,213 +470,232 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
374
470
|
z-index: 10000;
|
|
375
471
|
}
|
|
376
472
|
|
|
377
|
-
/*
|
|
378
|
-
.fb-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
473
|
+
/* \u2500\u2500\u2500 Hover zoom preview popup \u2500\u2500\u2500 */
|
|
474
|
+
.fb-tile-zoom-preview {
|
|
475
|
+
position: fixed;
|
|
476
|
+
z-index: 9999;
|
|
477
|
+
background: var(--fb-background-color, #fff);
|
|
478
|
+
border: 1px solid #e2e8f0;
|
|
479
|
+
border-radius: 0.5rem;
|
|
480
|
+
box-shadow: 0 4px 16px rgba(0,0,0,0.18);
|
|
481
|
+
padding: 4px;
|
|
482
|
+
width: 350px;
|
|
483
|
+
height: 350px;
|
|
484
|
+
pointer-events: none;
|
|
485
|
+
opacity: 0;
|
|
486
|
+
transition: opacity 150ms ease;
|
|
382
487
|
}
|
|
383
|
-
.fb-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
488
|
+
.fb-tile-zoom-preview.fb-tile-zoom-preview--visible {
|
|
489
|
+
opacity: 1;
|
|
490
|
+
}
|
|
491
|
+
.fb-tile-zoom-preview-img {
|
|
492
|
+
width: 100%;
|
|
493
|
+
height: 100%;
|
|
494
|
+
object-fit: contain;
|
|
495
|
+
display: block;
|
|
496
|
+
border-radius: calc(0.5rem - 2px);
|
|
387
497
|
}
|
|
388
498
|
|
|
389
|
-
/*
|
|
390
|
-
.fb-
|
|
391
|
-
height:
|
|
392
|
-
border:
|
|
393
|
-
border
|
|
499
|
+
/* \u2500\u2500\u2500 Single-file uploading state \u2500\u2500\u2500 */
|
|
500
|
+
.fb-single-uploading {
|
|
501
|
+
height: 180px;
|
|
502
|
+
border-radius: 0.75rem;
|
|
503
|
+
border: 1px dashed #60a5fa;
|
|
504
|
+
background: rgba(239,246,255,0.5);
|
|
394
505
|
display: flex;
|
|
395
506
|
flex-direction: column;
|
|
396
507
|
align-items: center;
|
|
397
508
|
justify-content: center;
|
|
398
|
-
gap:
|
|
399
|
-
cursor: pointer;
|
|
400
|
-
background: none;
|
|
401
|
-
padding: 0;
|
|
402
|
-
transition:
|
|
403
|
-
border-color var(--fb-transition-duration, 200ms),
|
|
404
|
-
background var(--fb-transition-duration, 200ms);
|
|
405
|
-
width: 100%;
|
|
509
|
+
gap: 8px;
|
|
406
510
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
511
|
+
|
|
512
|
+
/* \u2500\u2500\u2500 Video overlays \u2500\u2500\u2500 */
|
|
513
|
+
.fb-video-overlay {
|
|
514
|
+
position: absolute;
|
|
515
|
+
inset: 0;
|
|
516
|
+
display: flex;
|
|
517
|
+
align-items: center;
|
|
518
|
+
justify-content: center;
|
|
519
|
+
background: rgba(0,0,0,0.25);
|
|
412
520
|
}
|
|
413
|
-
.fb-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
521
|
+
.fb-play-btn {
|
|
522
|
+
background: rgba(255,255,255,0.9);
|
|
523
|
+
border-radius: 50%;
|
|
524
|
+
display: flex;
|
|
525
|
+
align-items: center;
|
|
526
|
+
justify-content: center;
|
|
417
527
|
}
|
|
418
|
-
.fb-
|
|
419
|
-
|
|
420
|
-
|
|
528
|
+
.fb-video-preview-wrap {
|
|
529
|
+
position: relative;
|
|
530
|
+
width: 100%;
|
|
531
|
+
height: 100%;
|
|
421
532
|
}
|
|
422
|
-
.fb-
|
|
533
|
+
.fb-video-btn-overlay {
|
|
534
|
+
position: absolute;
|
|
535
|
+
top: 8px;
|
|
536
|
+
right: 8px;
|
|
537
|
+
z-index: 10;
|
|
538
|
+
display: flex;
|
|
539
|
+
gap: 4px;
|
|
540
|
+
opacity: 0;
|
|
541
|
+
transition: opacity 150ms;
|
|
542
|
+
pointer-events: none;
|
|
543
|
+
}
|
|
544
|
+
.fb-video-preview-wrap:hover .fb-video-btn-overlay {
|
|
545
|
+
opacity: 1;
|
|
546
|
+
pointer-events: auto;
|
|
547
|
+
}
|
|
548
|
+
.fb-video-btn {
|
|
549
|
+
border: none;
|
|
550
|
+
border-radius: 4px;
|
|
423
551
|
font-size: 11px;
|
|
424
|
-
|
|
552
|
+
padding: 4px 8px;
|
|
553
|
+
cursor: pointer;
|
|
554
|
+
color: #fff;
|
|
555
|
+
line-height: 1.2;
|
|
425
556
|
}
|
|
557
|
+
.fb-video-btn-delete { background: rgba(220,38,38,0.85); }
|
|
558
|
+
.fb-video-btn-delete:hover { background: rgba(185,28,28,0.95); }
|
|
559
|
+
.fb-video-btn-change { background: rgba(31,41,55,0.85); }
|
|
560
|
+
.fb-video-btn-change:hover { background: rgba(17,24,39,0.95); }
|
|
426
561
|
|
|
427
|
-
/*
|
|
428
|
-
.fb-tile
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
justify-content: center;
|
|
433
|
-
cursor: pointer;
|
|
434
|
-
font-size: 24px;
|
|
435
|
-
color: var(--fb-file-upload-text-color, #9ca3af);
|
|
436
|
-
transition:
|
|
437
|
-
border-color var(--fb-transition-duration, 200ms),
|
|
438
|
-
color var(--fb-transition-duration, 200ms);
|
|
439
|
-
background: none;
|
|
440
|
-
padding: 0;
|
|
441
|
-
width: var(--fb-tile-size, 160px);
|
|
442
|
-
height: var(--fb-tile-size, 160px);
|
|
443
|
-
flex-shrink: 0;
|
|
444
|
-
position: relative;
|
|
562
|
+
/* \u2500\u2500\u2500 Readonly readonly tile \u2500\u2500\u2500 */
|
|
563
|
+
.fb-readonly-tile {
|
|
564
|
+
aspect-ratio: 1 / 1;
|
|
565
|
+
border-radius: 0.5rem;
|
|
566
|
+
border: 1px solid #e2e8f0;
|
|
445
567
|
overflow: hidden;
|
|
446
|
-
|
|
568
|
+
position: relative;
|
|
569
|
+
cursor: pointer;
|
|
447
570
|
}
|
|
448
|
-
.fb-tile
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
571
|
+
.fb-readonly-tile img {
|
|
572
|
+
width: 100%;
|
|
573
|
+
height: 100%;
|
|
574
|
+
object-fit: contain;
|
|
575
|
+
display: block;
|
|
453
576
|
}
|
|
454
|
-
|
|
455
|
-
/* Hover zoom preview popup for image tiles \u2014 appended to document.body (fixed) */
|
|
456
|
-
.fb-tile-zoom-preview {
|
|
457
|
-
position: fixed;
|
|
458
|
-
z-index: 9999;
|
|
459
|
-
background: var(--fb-background-color, #fff);
|
|
460
|
-
border: 1px solid var(--fb-file-upload-border-color, #d1d5db);
|
|
461
|
-
border-radius: var(--fb-border-radius, 0.5rem);
|
|
462
|
-
box-shadow: 0 4px 16px rgba(0,0,0,0.18);
|
|
463
|
-
padding: 4px;
|
|
464
|
-
width: 350px;
|
|
465
|
-
height: 350px;
|
|
466
|
-
pointer-events: none;
|
|
577
|
+
.fb-readonly-tile .fb-tile-actions {
|
|
467
578
|
opacity: 0;
|
|
468
|
-
transition: opacity 150ms ease;
|
|
469
579
|
}
|
|
470
|
-
.fb-tile
|
|
580
|
+
.fb-readonly-tile:hover .fb-tile-actions {
|
|
471
581
|
opacity: 1;
|
|
472
582
|
}
|
|
473
|
-
|
|
583
|
+
|
|
584
|
+
/* \u2500\u2500\u2500 Readonly single-file filled \u2500\u2500\u2500 */
|
|
585
|
+
.fb-single-readonly-filled {
|
|
586
|
+
position: relative;
|
|
587
|
+
border-radius: 0.75rem;
|
|
588
|
+
border: 1px solid #e2e8f0;
|
|
589
|
+
overflow: hidden;
|
|
590
|
+
height: 220px;
|
|
591
|
+
display: block;
|
|
592
|
+
cursor: pointer;
|
|
593
|
+
}
|
|
594
|
+
.fb-single-readonly-filled img {
|
|
474
595
|
width: 100%;
|
|
475
596
|
height: 100%;
|
|
476
597
|
object-fit: contain;
|
|
477
598
|
display: block;
|
|
478
|
-
background: var(--fb-file-upload-bg-color, #f3f4f6);
|
|
479
|
-
border-radius: calc(var(--fb-border-radius, 0.5rem) - 2px);
|
|
480
599
|
}
|
|
481
|
-
|
|
600
|
+
|
|
601
|
+
/* \u2500\u2500\u2500 Readonly multi grid \u2500\u2500\u2500 */
|
|
602
|
+
.fb-multi-readonly-grid {
|
|
603
|
+
display: grid;
|
|
604
|
+
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
605
|
+
gap: 10px;
|
|
606
|
+
}
|
|
607
|
+
`,document.head.appendChild(e)}function Yt(){xe();const e=document.createElement("div");return e.className="fb-tile",e}function Ce(e,t){var n,r;const o=(n=e.closest("[data-files-wrapper]"))==null?void 0:n.querySelector(".file-error-message");o&&o.remove();const i=document.createElement("div");i.className="file-error-message error-message",i.style.cssText=`
|
|
482
608
|
color: var(--fb-error-color);
|
|
483
609
|
font-size: var(--fb-font-size-small);
|
|
484
610
|
margin-top: 0.25rem;
|
|
485
|
-
`,i.textContent=t,(r=e.closest("
|
|
611
|
+
`,i.textContent=t,(r=e.closest("[data-files-wrapper]"))==null||r.appendChild(i)}function Pe(e){var t;const n=(t=e.closest("[data-files-wrapper]"))==null?void 0:t.querySelector(".file-error-message");n&&n.remove()}function Mr(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 i=document.createElement("button");i.className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700 transition-colors",i.textContent=$("removeElement",t),i.onclick=a=>{a.stopPropagation(),n()},o.appendChild(i),e.appendChild(o)}function Nr(e,t){xe();const n=Yt();n.classList.add("fb-tile-uploading"),n.className+=" fb-uploading-tile";const r=e.length>10?e.substring(0,8)+"\u2026":e;return n.innerHTML=`
|
|
486
612
|
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:6px;padding:4px;">
|
|
487
613
|
<div class="fb-spinner"></div>
|
|
488
|
-
<div class="fb-tile-label">${
|
|
489
|
-
<div class="fb-tile-uploading-text">${
|
|
490
|
-
</div>`,n}function
|
|
614
|
+
<div class="fb-tile-label">${le(r)}</div>
|
|
615
|
+
<div class="fb-tile-uploading-text">${le($("uploadingFile",t))}</div>
|
|
616
|
+
</div>`,n}function Gt(e){var t,n,r;const o=e.querySelector(".fb-multi-grid");if(o)return o;const i=e.querySelector(".fb-tiles-wrap");if(i)return i;(t=e.querySelector(".fb-file-dropzone"))==null||t.remove(),(n=e.querySelector(".fb-wide-tile"))==null||n.remove(),(r=e.querySelector(".fb-multi-outer"))==null||r.remove();const a=document.createElement("div");a.className="fb-tiles-wrap",a.style.cssText="display:flex;flex-wrap:wrap;gap:6px;align-items:flex-start;";const l=document.createElement("div");return l.className="fb-tile fb-tile-add",l.innerHTML="+",a.appendChild(l),e.appendChild(a),a}function gt(e,t,n){e.innerHTML=`
|
|
491
617
|
<div class="flex flex-col items-center justify-center h-full text-gray-400">
|
|
492
618
|
<svg class="w-6 h-6 mb-2" fill="currentColor" viewBox="0 0 24 24">
|
|
493
619
|
<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"/>
|
|
494
620
|
</svg>
|
|
495
|
-
<div class="text-sm text-center">${
|
|
496
|
-
|
|
621
|
+
<div class="text-sm text-center">${le($("clickDragText",t))}</div>
|
|
622
|
+
|
|
497
623
|
</div>
|
|
498
|
-
`}const
|
|
624
|
+
`}const Xt=new WeakMap;function et(e,t){const n=Xt.get(e);n&&(e.removeEventListener("dragover",n.dragover),e.removeEventListener("dragleave",n.dragleave),e.removeEventListener("drop",n.drop));const r=a=>{a.preventDefault(),e.classList.add("border-blue-500","bg-blue-50")},o=a=>{a.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50")},i=a=>{var l;a.preventDefault(),e.classList.remove("border-blue-500","bg-blue-50");const u=(l=a.dataTransfer)==null?void 0:l.files;u&&t(u)};e.addEventListener("dragover",r),e.addEventListener("dragleave",o),e.addEventListener("drop",i),Xt.set(e,{dragover:r,dragleave:o,drop:i})}const zr='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><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>',qr='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><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>',Ir='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6"/><path d="M14 11v6"/><path d="M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"/></svg>',Rr='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 18a4 4 0 000-8 6 6 0 00-11.5 2A4 4 0 006 20h11M12 12v7M12 12l-3 3M12 12l3 3"/></svg>',Hr='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 4h4v16H4z"/><path d="M10 4h4v16h-4z"/><path d="M16 5l3.5 1-3 14L13 19"/></svg>';function Br(e,t){return!!(e.config.downloadFile||e.config.getDownloadUrl||e.config.getThumbnail||t!=null&&t.file)}function Dr(e,t){return!!(e.config.getDownloadUrl||e.config.getThumbnail||t!=null&&t.file)}function yt(e){const{canRemove:t,removeHandler:n,state:r,resourceId:o,fileName:i,meta:a,replaceHandler:l,libraryHandler:u}=e,s=document.createElement("div");s.className="fb-tile-actions";const d=(c,p,f)=>{const m=document.createElement("button");return m.type="button",m.className=`fb-tile-action-btn ${f}`,m.innerHTML=c,m.title=p,m.setAttribute("aria-label",p),m.addEventListener("click",g=>{g.stopPropagation()}),m};if(l){const c=d(Rr,$("replaceFile",r),"fb-tile-action-replace");c.addEventListener("click",()=>l()),s.appendChild(c)}if(u){const c=d(Hr,$("fromLibrary",r),"fb-tile-action-library");c.addEventListener("click",()=>u()),s.appendChild(c)}if(Br(r,a)){const c=d(zr,$("downloadFile",r),"fb-tile-action-download");c.addEventListener("click",()=>{jr(o,i,r,a)}),s.appendChild(c)}if(Dr(r,a)){const c=d(qr,$("openInNewTab",r),"fb-tile-action-open");c.addEventListener("click",()=>{Or(o,r,a).catch(p=>{console.error("Open failed:",p)})}),s.appendChild(c)}if(t&&n){const c=d(Ir,$("removeElement",r),"fb-tile-action-remove");c.addEventListener("click",()=>{n()}),s.appendChild(c)}return s}const tt=new WeakMap;function xt(e){let t=tt.get(e);return t||(t=URL.createObjectURL(e),tt.set(e,t)),t}function nt(e){if(!e)return;const t=tt.get(e);t&&(URL.revokeObjectURL(t),tt.delete(e))}function jr(e,t,n,r){if(n.config.downloadFile){n.config.downloadFile(e,t);return}if((r==null?void 0:r.file)instanceof File){on(r.file,t||r.file.name);return}rn(e,t,n).catch(o=>{console.error("Download failed:",o)})}async function Or(e,t,n){let r=null;t.config.getDownloadUrl?r=t.config.getDownloadUrl(e):t.config.getThumbnail?r=await t.config.getThumbnail(e):(n==null?void 0:n.file)instanceof File&&(r=xt(n.file)),r&&window.open(r,"_blank")}let ve=null,Le=null,Fe=null,rt=null;function Ur(){if(!ve){ve=document.createElement("div"),ve.className="fb-tile-zoom-preview";const e=document.createElement("img");e.className="fb-tile-zoom-preview-img",ve.appendChild(e),ve.addEventListener("mouseenter",Qt),ve.addEventListener("mouseleave",Zt)}return ve}function Pr(e,t){const n=t.getBoundingClientRect(),r=350,o=6,i=8;let a;n.top-r-o>=i?a=n.top-r-o:n.bottom+o+r+i<=window.innerHeight?a=n.bottom+o:a=Math.max(i,Math.min(window.innerHeight-r-i,n.top));let l=n.left+n.width/2-r/2;l=Math.max(i,Math.min(window.innerWidth-r-i,l)),e.style.top=`${a}px`,e.style.left=`${l}px`}function Zt(){Fe!==null&&clearTimeout(Fe),Fe=setTimeout(()=>{Fe=null,en()},100)}function Qt(){Fe!==null&&(clearTimeout(Fe),Fe=null)}function en(){Le!==null&&(clearTimeout(Le),Le=null),ve&&ve.parentNode&&(ve.classList.remove("fb-tile-zoom-preview--visible"),ve.parentNode.removeChild(ve)),rt=null}function Et(e,t,n,r){e.dataset.zoomSrc=t,e.dataset.zoomAlt=n,e.addEventListener("mouseenter",()=>{Qt(),rt!==e&&en(),rt=e,Le=setTimeout(()=>{Le=null;const o=Ur(),i=o.querySelector(".fb-tile-actions");i&&i.remove();const a=o.querySelector(".fb-tile-zoom-preview-img");a.src=t,a.alt=n,r&&(o.appendChild(r.cloneNode(!0)),Wr(o.querySelector(".fb-tile-actions"),r)),o.style.pointerEvents="auto",Pr(o,e),document.body.appendChild(o),o.getBoundingClientRect(),o.classList.add("fb-tile-zoom-preview--visible")},200)}),e.addEventListener("mouseleave",()=>{Le!==null?(clearTimeout(Le),Le=null,rt=null):Zt()})}function Wr(e,t){const n=Array.from(t.querySelectorAll(".fb-tile-action-btn"));Array.from(e.querySelectorAll(".fb-tile-action-btn")).forEach((r,o)=>{const i=n[o];i&&r.addEventListener("click",a=>{a.stopPropagation(),i.click()})})}function Vr(e,t,n,r){const o=document.createElement("img");o.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",o.alt=n||$("previewAlt",r);const i=new FileReader;i.onload=a=>{var l;o.src=((l=a.target)==null?void 0:l.result)||""},i.readAsDataURL(t),e.appendChild(o)}function _r(e,t){e.onclick=null;const n=e.cloneNode(!1);return e.parentNode&&e.parentNode.replaceChild(n,e),n}function Kr(e,t,n,r,o,i){const a=URL.createObjectURL(t),l=_r(e);return l.innerHTML=`
|
|
499
625
|
<div class="fb-video-preview-wrap">
|
|
500
|
-
<video
|
|
501
|
-
${
|
|
626
|
+
<video style="width:100%;height:100%;object-fit:contain;" controls preload="auto" muted src="${a}">
|
|
627
|
+
${le($("videoNotSupported",o))}
|
|
502
628
|
</video>
|
|
503
629
|
<div class="fb-video-btn-overlay">
|
|
504
630
|
<button class="fb-video-btn fb-video-btn-delete delete-file-btn">
|
|
505
|
-
${
|
|
631
|
+
${le($("removeElement",o))}
|
|
506
632
|
</button>
|
|
507
633
|
<button class="fb-video-btn fb-video-btn-change change-file-btn">
|
|
508
|
-
${
|
|
634
|
+
${le($("changeButton",o))}
|
|
509
635
|
</button>
|
|
510
636
|
</div>
|
|
511
637
|
</div>
|
|
512
|
-
`,
|
|
513
|
-
<div
|
|
514
|
-
<svg
|
|
638
|
+
`,Jr(l,r,o,i),l}function Jr(e,t,n,r){const o=e.querySelector(".change-file-btn");o&&(o.onclick=a=>{var l;a.stopPropagation(),(l=r==null?void 0:r.picker)==null||l.click()});const i=e.querySelector(".delete-file-btn");i&&(i.onclick=a=>{a.stopPropagation(),Yr(e,t,n,r)})}function Yr(e,t,n,r){var o;n.resourceIndex.delete(t);const i=(o=e.parentElement)==null?void 0:o.querySelector('input[type="hidden"]');i&&(i.value=""),r!=null&&r.fileUploadHandler&&(e.onclick=r.fileUploadHandler),e.innerHTML=`
|
|
639
|
+
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--fb-text-secondary-color,#9ca3af);">
|
|
640
|
+
<svg style="width:1.5rem;height:1.5rem;margin-bottom:0.5rem;" fill="currentColor" viewBox="0 0 24 24">
|
|
515
641
|
<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"/>
|
|
516
642
|
</svg>
|
|
517
|
-
<div
|
|
643
|
+
<div style="font-size:0.875rem;text-align:center;">${le($("clickDragText",n))}</div>
|
|
518
644
|
</div>
|
|
519
|
-
`,r!=null&&r.setupDrop&&r.setupDrop(e)}function tn(e,t,n){
|
|
520
|
-
<div
|
|
521
|
-
<svg
|
|
645
|
+
`,r!=null&&r.setupDrop&&r.setupDrop(e)}function tn(e,t,n){Mr(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=`
|
|
646
|
+
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--fb-text-secondary-color,#9ca3af);">
|
|
647
|
+
<svg style="width:1.5rem;height:1.5rem;margin-bottom:0.5rem;" fill="currentColor" viewBox="0 0 24 24">
|
|
522
648
|
<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"/>
|
|
523
649
|
</svg>
|
|
524
|
-
<div
|
|
650
|
+
<div style="font-size:0.875rem;text-align:center;">${le($("clickDragText",n))}</div>
|
|
525
651
|
</div>
|
|
526
|
-
`})}async function
|
|
527
|
-
<div
|
|
528
|
-
<svg
|
|
652
|
+
`})}async function Gr(e,t,n,r,o,i,a){var l,u,s;!t.file||!(t.file instanceof File)||((l=t.type)!=null&&l.startsWith("image/")?Vr(e,t.file,n,i):(u=t.type)!=null&&u.startsWith("video/")?e=Kr(e,t.file,t.type,r,i,a):e.innerHTML=`<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--fb-text-secondary-color,#9ca3af);"><div style="font-size:36px;margin-bottom:0.5rem;">\u{1F4C1}</div><div style="font-size:0.875rem;">${le(n)}</div></div>`,!o&&!((s=t.type)!=null&&s.startsWith("video/"))&&tn(e,r,i))}function Xr(e,t,n){const r=document.createElement("video");r.style.cssText="width:100%;height:100%;object-fit:contain;",r.controls=!0,r.preload="metadata",r.muted=!0,r.src=t,r.appendChild(document.createTextNode($("videoNotSupported",n))),e.appendChild(r)}async function Zr(e,t,n,r,o){var i;if(!o.config.getThumbnail){gt(e,o);return}try{const a=await o.config.getThumbnail(t);if(a)if(be(e),(i=r==null?void 0:r.type)!=null&&i.startsWith("video/"))Xr(e,a,o);else{const l=document.createElement("img");l.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",l.alt=n||$("previewAlt",o),l.src=a,e.appendChild(l)}else gt(e,o)}catch(a){console.error("Failed to get thumbnail:",a),e.innerHTML=`
|
|
653
|
+
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--fb-text-secondary-color,#9ca3af);">
|
|
654
|
+
<svg style="width:1.5rem;height:1.5rem;margin-bottom:0.5rem;" fill="currentColor" viewBox="0 0 24 24">
|
|
529
655
|
<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"/>
|
|
530
656
|
</svg>
|
|
531
|
-
<div
|
|
657
|
+
<div style="font-size:0.875rem;text-align:center;">${le(n||$("previewUnavailable",o))}</div>
|
|
532
658
|
</div>
|
|
533
|
-
`}}async function
|
|
534
|
-
<img style="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);" alt="${
|
|
659
|
+
`}}async function Ct(e,t,n,r={}){var o;const{fileName:i="",isReadonly:a=!1,deps:l=null}=r;if(!a&&l&&(!l.picker||!l.fileUploadHandler||!l.dragHandler))throw new Error("renderFilePreview: missing deps {picker, fileUploadHandler, dragHandler}");be(e);const u=n.resourceIndex.get(t);if(u&&u.file&&u.file instanceof File)await Gr(e,u,i,t,a,n,l);else{await Zr(e,t,i,u,n);const s=(o=u==null?void 0:u.type)==null?void 0:o.startsWith("video/");!a&&!s&&tn(e,t,n)}}function Qr(e,t,n){var r;if(n)return n;if((r=t==null?void 0:t.name)!=null&&r.includes("."))return t.name;const o=e.includes("/")?e.split("/").pop():e;return o!=null&&o.includes(".")?o:""}async function wt(e,t,n,r={}){var o,i;const a=t.resourceIndex.get(e),l=Qr(e,a,n),{canRemove:u=!1,removeHandler:s=null}=r,d=((o=a==null?void 0:a.type)==null?void 0:o.startsWith("image/"))||!!l.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/),c=((i=a==null?void 0:a.type)==null?void 0:i.startsWith("video/"))||!!l.toLowerCase().match(/\.(mp4|webm|avi|mov)$/),p=Yt();p.classList.add("fb-tile-resource"),p.style.cursor="pointer",l&&(p.title=l);const f=(a==null?void 0:a.file)instanceof File?xt(a.file):null,m=async()=>t.config.getDownloadUrl?t.config.getDownloadUrl(e):t.config.getThumbnail?t.config.getThumbnail(e):f;p.onclick=async()=>{const h=await m();h?window.open(h,"_blank"):t.config.downloadFile?t.config.downloadFile(e,l):rn(e,l,t).catch(v=>{console.error("Download failed:",v)})};const g=yt({canRemove:u,removeHandler:s,state:t,resourceId:e,fileName:l,meta:a}),y=async()=>{if(t.config.getThumbnail)try{const h=await t.config.getThumbnail(e);if(h)return h}catch(h){}return f},C=()=>{p.innerHTML='<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F5BC}\uFE0F</div>',p.appendChild(g)};if(d){const h=await y();if(h){const v=document.createElement("img");v.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",v.alt=l,v.src=h,p.appendChild(v),p.appendChild(g),Et(p,h,l,g)}else C()}else if(c)if(t.config.getThumbnail)try{const h=await t.config.getThumbnail(e);h?(p.innerHTML=`
|
|
660
|
+
<img style="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);" alt="${le(l)}" src="${h}">
|
|
535
661
|
<div class="fb-video-overlay">
|
|
536
662
|
<div class="fb-play-btn" style="width:22px;height:22px;">
|
|
537
663
|
<svg width="10" height="12" viewBox="0 0 10 12" fill="currentColor"><path d="M0 0l10 6-10 6z"/></svg>
|
|
538
664
|
</div>
|
|
539
|
-
</div>`,
|
|
540
|
-
<svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor"><path d="M19 9h-4V3H9v6H5l7 7 7-7zm-7 9H5v2h14v-2h-7z"/></svg>`:"";
|
|
665
|
+
</div>`,p.appendChild(g)):(p.innerHTML='<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>',p.appendChild(g))}catch(h){p.innerHTML='<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>',p.appendChild(g)}else p.innerHTML='<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>',p.appendChild(g);else{if(t.config.getThumbnail)try{const v=await t.config.getThumbnail(e);if(v){const x=document.createElement("img");return x.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",x.alt=l||e,x.src=v,p.appendChild(x),p.appendChild(g),p}}catch(v){}const h=l?`<div class="fb-tile-label">${le(l.length>10?l.substring(0,8)+"\u2026":l)}</div>
|
|
666
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor"><path d="M19 9h-4V3H9v6H5l7 7 7-7zm-7 9H5v2h14v-2h-7z"/></svg>`:"";p.innerHTML=`
|
|
541
667
|
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:6px;gap:4px;">
|
|
542
668
|
<div style="font-size:36px;">\u{1F4C1}</div>
|
|
543
|
-
${
|
|
544
|
-
</div>`,
|
|
545
|
-
<video style="width:100%;height:100%;" preload="metadata" muted src="${
|
|
669
|
+
${h}
|
|
670
|
+
</div>`,p.appendChild(g)}return p}async function eo(e,t,n,r){var o,i,a;const l=n.resourceIndex.get(t),u=(i=(o=l==null?void 0:l.name)!=null?o:t.split("/").pop())!=null?i:"",s=(a=r.onRemove)!=null?a:null,d=await wt(t,n,u,{canRemove:!0,removeHandler:s});e.className="file-preview-container",e.removeAttribute("style"),be(e),e.appendChild(d)}async function nn(e,t,n,r,o){var i,a;if((i=n==null?void 0:n.type)!=null&&i.startsWith("image/")){if(n.file&&n.file instanceof File){const l=document.createElement("img");l.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",l.alt=n.name,l.src=xt(n.file),e.appendChild(l),Et(e,l.src,n.name,o!=null?o:null)}else if(r.config.getThumbnail)try{const l=await r.config.getThumbnail(t);if(l){const u=document.createElement("img");u.style.cssText="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);",u.alt=n.name,u.src=l,e.appendChild(u),Et(e,l,n.name,o!=null?o:null)}else e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F5BC}\uFE0F</div>'}catch(l){const u=l instanceof Error?l:new Error(String(l));r.config.onThumbnailError&&r.config.onThumbnailError(u,t),e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:16px;color:var(--fb-error-color,#ef4444);">\u2715</div>'}else e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F5BC}\uFE0F</div>';o&&e.appendChild(o)}else if((a=n==null?void 0:n.type)!=null&&a.startsWith("video/")){if(n.file&&n.file instanceof File){const l=URL.createObjectURL(n.file);e.innerHTML=`
|
|
671
|
+
<video style="width:100%;height:100%;" preload="metadata" muted src="${l}"></video>
|
|
546
672
|
<div class="fb-video-overlay">
|
|
547
673
|
<div class="fb-play-btn" style="width:20px;height:20px;">
|
|
548
674
|
<svg width="8" height="10" viewBox="0 0 8 10" fill="currentColor"><path d="M0 0l8 5-8 5z"/></svg>
|
|
549
675
|
</div>
|
|
550
|
-
</div>`}else if(r.config.getThumbnail)try{const
|
|
551
|
-
<img style="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);" alt="${
|
|
676
|
+
</div>`}else if(r.config.getThumbnail)try{const l=await r.config.getThumbnail(t);l?e.innerHTML=`
|
|
677
|
+
<img style="width:100%;height:100%;object-fit:contain;background:var(--fb-file-upload-bg-color,#f3f4f6);" alt="${le(n.name)}" src="${l}">
|
|
552
678
|
<div class="fb-video-overlay">
|
|
553
679
|
<div class="fb-play-btn" style="width:20px;height:20px;">
|
|
554
680
|
<svg width="8" height="10" viewBox="0 0 8 10" fill="currentColor"><path d="M0 0l8 5-8 5z"/></svg>
|
|
555
681
|
</div>
|
|
556
|
-
</div>`:e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>'}catch(
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
682
|
+
</div>`:e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>'}catch(l){const u=l instanceof Error?l:new Error(String(l));r.config.onThumbnailError&&r.config.onThumbnailError(u,t),e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:16px;color:var(--fb-error-color,#ef4444);">\u2715</div>'}else e.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;font-size:36px;">\u{1F3A5}</div>';o&&e.appendChild(o)}else to(e,t,n,o)}function to(e,t,n,r){var o,i;const a=(i=(o=n==null?void 0:n.name)!=null?o:t.split("/").pop())!=null?i:"";a&&(e.title=a);const l=a?`<div style="font-size:11px;line-height:1.2;text-align:center;color:var(--fb-text-secondary-color,#6b7280);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${le(a)}</div>`:"";e.innerHTML=`
|
|
683
|
+
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:6px;gap:4px;">
|
|
684
|
+
<div style="font-size:36px;">\u{1F4C1}</div>
|
|
685
|
+
${l}
|
|
686
|
+
</div>`,r&&e.appendChild(r)}async function rn(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,i=await fetch(o);if(!i.ok)throw new Error(`HTTP error! status: ${i.status}`);const a=await i.blob();on(a,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 on(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}`)}}async function ln(e,t){if(!t.config.uploadFile)throw new Error("No upload handler configured. Set uploadHandler via FormBuilder.setUploadHandler()");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}`)}}async function no(e){var t,n,r;const{file:o,container:i,fieldName:a,state:l,deps:u=null,instance:s=null,allowedExtensions:d=[],allowedMimes:c=[],maxSizeMB:p=1/0}=e;if(!qe(o.name,d)){const h=d.join(", ");Ce(i,$("invalidFileExtension",l,{name:o.name,formats:h}));return}if(!Ue(o.type,c)){const h=c.join(", ");Ce(i,$("invalidFileMime",l,{name:o.name,type:o.type,mimes:h}));return}if(!Ze(o,p)){Ce(i,$("fileTooLarge",l,{name:o.name,maxSize:p}));return}Pe(i);const f=(t=i.parentElement)==null?void 0:t.querySelector('input[type="hidden"]'),m=(f==null?void 0:f.value)||null;xe(),i.innerHTML=`
|
|
561
687
|
<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:6px;padding:6px;">
|
|
562
688
|
<div class="fb-spinner"></div>
|
|
563
|
-
<div style="font-size:11px;color:var(--fb-text-secondary-color,#6b7280);text-align:center;">${
|
|
564
|
-
</div>`;let f;try{f=await ln(r,l)}catch(m){throw rt(o,l),m}l.resourceIndex.set(f,{name:r.name,type:r.type,size:r.size,uploadedAt:new Date,file:r});let d=(t=o.parentElement)==null?void 0:t.querySelector('input[type="hidden"]');d||(d=document.createElement("input"),d.type="hidden",d.name=i,(n=o.parentElement)==null||n.appendChild(d)),d.value=f,!r.type.startsWith("video/")&&a?Ct(o,f,l,a).catch(console.error):nn(o,f,l,{fileName:r.name,isReadonly:!1,deps:a}).catch(console.error),c&&!l.config.readonly&&c.triggerOnChange(i,f)}function sn(e,t,n,r){const o=e.filter(m=>!Ne(m.name,n.allowedExtensions)),i=e.filter(m=>Ne(m.name,n.allowedExtensions)),l=i.filter(m=>!Oe(m.type,n.allowedMimes)),a=i.filter(m=>Oe(m.type,n.allowedMimes)),c=a.filter(m=>!Ze(m,n.maxSize)),s=a.filter(m=>Ze(m,n.maxSize)),p=n.maxCount===1/0?s.length:Math.max(0,n.maxCount-t),u=s.slice(0,p),f=s.length-u.length,d=[];if(o.length>0){const m=n.allowedExtensions.join(", "),v=o.map(y=>y.name).join(", ");d.push($("invalidFileExtension",r,{name:v,formats:m}))}if(l.length>0){const m=n.allowedMimes.join(", "),v=l.map(y=>y.name).join(", ");d.push($("invalidFileMime",r,{name:v,type:l.map(y=>y.type).join(", "),mimes:m}))}if(c.length>0){const m=c.map(v=>v.name).join(", ");d.push($("fileTooLarge",r,{name:m,maxSize:n.maxSize}))}return f>0&&d.push($("filesLimitExceeded",r,{skipped:f,max:n.maxCount})),{accepted:u,errorMessage:d.join(" \u2022 ")}}async function cn(e,t,n,r){await Promise.all(e.map(async o=>{const i=Mr(o.name,r);if(n){const l=zr(n),a=l.querySelector(".fb-tile-add");a?l.insertBefore(i,a):l.appendChild(i)}try{const l=await ln(o,r);r.resourceIndex.set(l,{name:o.name,type:o.type,size:o.size,uploadedAt:new Date,file:void 0}),t.push(l)}finally{i.remove()}}))}function un(e,t,n,r,o,i,l){Pe(e,async a=>{var c;const{accepted:s,errorMessage:p}=sn(Array.from(a),t.length,o,n);p?Ee(e,p):Ue(e);const u=(c=e.querySelector(".files-list"))!=null?c:e;await cn(s,t,u,n),r(),l&&i&&!n.config.readonly&&l.triggerOnChange(i,t)})}function dn(e,t,n,r,o,i,l){e.onchange=async()=>{if(!e.files)return;const a=e.closest(".space-y-2")||e.parentElement,{accepted:c,errorMessage:s}=sn(Array.from(e.files),t.length,o,n);s&&a?Ee(a,s):a&&Ue(a);const p=a==null?void 0:a.querySelector(".files-list");await cn(c,t,p!=null?p:null,n),r(),e.value="",l&&i&&!n.config.readonly&&l.triggerOnChange(i,t)}}function fn(e){var t,n;if(!e.accept)return;if(typeof e.accept=="string"){const a=ke(e.accept);return a.length>0?{extensions:a}:void 0}const r=(t=e.accept.extensions)!=null?t:[],o=(n=e.accept.mime)!=null?n:[],i=r.map(a=>a.toLowerCase());if(i.length===0&&o.length===0)return;const l={};return i.length>0&&(l.extensions=i),o.length>0&&(l.mime=o),l}function pn(e,t,n,r,o){if(!Ne(e.name,t)){const i=t.join(", ");return $("invalidFileExtension",o,{name:e.name,formats:i})}if(!Oe(e.type,n)){const i=n.join(", ");return $("invalidFileMime",o,{name:e.name,type:e.type,mimes:i})}return _t(e.size,r)?null:$("fileTooLarge",o,{name:e.name,maxSize:r})}function Qr(e){const t=e.dataset.resourceIds;if(!t)return[];try{const n=JSON.parse(t);return Array.isArray(n)?n:[]}catch(n){return[]}}function mn(e,t){var n;const r=t.resourceIndex.get(e.resourceId);t.resourceIndex.set(e.resourceId,{name:e.name,type:e.type,size:e.size,uploadedAt:(n=r==null?void 0:r.uploadedAt)!=null?n:new Date,file:r==null?void 0:r.file})}function hn(e,t){return e instanceof Error&&e.message?e.message:$("pickerError",t)}async function bn(e,t,n,r,o,i,l,a){var c;if(!e.config.pickExistingFiles)return;const s=ke(t.accept),p=Ie(t.accept),u=(c=t.maxSize)!=null?c:1/0,f=Qr(n),d=i===1/0?1/0:Math.max(0,i-f.length);let m;try{m=await e.config.pickExistingFiles({fieldPath:r,mode:"multiple",accept:fn(t),maxSizeMB:u===1/0?void 0:u,remainingSlots:d===1/0?void 0:d,selectedResourceIds:[...f]})}catch(E){Ee(n,hn(E,e));return}if(m.length===0)return;const v=new Set(f),y=new Set,C=m.filter(E=>v.has(E.resourceId)||y.has(E.resourceId)?!1:(y.add(E.resourceId),!0)).filter(E=>pn(E,s,p,u,e)===null),b=i===1/0?C.length:Math.max(0,i-o.length),h=C.slice(0,b),g=C.length-h.length;if(h.length!==0){Ue(n),g>0&&Ee(n,$("filesLimitExceeded",e,{skipped:g,max:i}));for(const E of h)mn(E,e),o.push(E.resourceId);n.dataset.resourceIds=JSON.stringify(o),l(),e.config.readonly||a.triggerOnChange(r,o)}}async function eo(e,t,n,r,o,i,l,a){var c;if(!e.config.pickExistingFiles)return;const s=ke(t.accept),p=Ie(t.accept),u=(c=t.maxSize)!=null?c:1/0;let f;try{f=await e.config.pickExistingFiles({fieldPath:i,mode:"single",accept:fn(t),maxSizeMB:u===1/0?void 0:u,selectedResourceIds:[]})}catch(y){Ee(n,hn(y,e));return}if(f.length===0)return;const d=f[0],m=pn(d,s,p,u,e);if(m!==null){Ee(n,m);return}Ue(n),mn(d,e);let v=r.querySelector('input[type="hidden"]');v||(v=document.createElement("input"),v.type="hidden",v.name=o,r.appendChild(v)),v.value=d.resourceId,await l(d.resourceId),e.config.readonly||a.triggerOnChange(i,d.resourceId)}function to(e,t,n,r,o,i){var l;Qe(e,o.resourceIndex);const a=o.resourceIndex.get(e);(l=a==null?void 0:a.type)!=null&&l.startsWith("video/")?nn(t,e,o,{fileName:e,isReadonly:!1,deps:i}).catch(console.error):Ct(t,e,o,i).catch(console.error);const c=document.createElement("input");c.type="hidden",c.name=n,c.value=e,r.appendChild(c)}const no=`<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" style="flex-shrink:0;color:var(--fb-file-upload-text-color,#9ca3af);">
|
|
565
|
-
|
|
566
|
-
</svg>`;function kt(e,t,n,r){const o=document.createElement("div");return o.className="fb-file-dropzone",o.innerHTML=`
|
|
567
|
-
${no}
|
|
568
|
-
<div class="fb-dropzone-primary-text">${oe(t)}</div>
|
|
569
|
-
${n?`<div class="fb-dropzone-hint-text">${oe(n)}</div>`:""}
|
|
570
|
-
`,o.onclick=r,o}function $t(e,t,n){const r=document.createElement("button");return r.type="button",r.className=e==="card"?"fb-file-library-card":"fb-tile fb-tile-add-library",e==="card"?r.innerHTML=`
|
|
571
|
-
<span class="fb-file-library-card-icon" aria-hidden="true">\u{1F4DA}</span>
|
|
572
|
-
<span class="fb-file-library-card-label">${oe($("fromLibrary",t))}</span>
|
|
573
|
-
<span class="fb-file-library-card-hint">${oe($("libraryHint",t))}</span>
|
|
574
|
-
`:(r.innerHTML='<span aria-hidden="true">\u{1F4DA}</span>',r.title=$("fromLibrary",t),r.setAttribute("aria-label",$("fromLibrary",t))),r.addEventListener("click",n),r}function vn(e){var t;const{container:n,rids:r,state:o,onRemove:i,hint:l,countInfo:a,maxCount:c,isReadonly:s=!1,onLibraryPick:p}=e;tt();const u=n.closest("[data-files-wrapper]");for(u&&(u.dataset.resourceIds=JSON.stringify(r!=null?r:[]));n.firstChild;)n.removeChild(n.firstChild);const f=r!=null?r:[],d=c!==void 0&&f.length>=c,m=!s&&typeof p=="function",v=()=>{const h=[];return l&&h.push(l),a&&h.push(a),h.join(" \u2022 ")},y=()=>{const h=Fr(n);h&&h.click()};if(f.length===0){if(s){const h=document.createElement("div");h.className="fb-tile-empty-text",h.textContent=$("noFilesSelected",o),n.appendChild(h)}else if(m){const h=document.createElement("div");h.className="fb-file-card-row";const g=kt(o,$("clickDragTextMultiple",o),v(),y),E=$t("card",o,p);h.appendChild(g),h.appendChild(E),n.appendChild(h)}else{const h=kt(o,$("clickDragTextMultiple",o),v(),y);n.appendChild(h)}return}const C=document.createElement("div");C.className="fb-tiles-wrap",C.style.cssText="display:flex;flex-wrap:wrap;gap:6px;align-items:flex-start;";for(const h of f){const g=o.resourceIndex.get(h),E=yt();E.classList.add("fb-tile-resource","resource-pill"),E.dataset.resourceId=h;const w=Xt({canRemove:!s&&i!==null,removeHandler:i?()=>i(h):null,state:o,resourceId:h,fileName:(t=g==null?void 0:g.name)!=null?t:""});Zr(E,h,g,o,w).catch(x=>{console.error("Failed to render tile:",x)}),C.appendChild(E)}if(!s&&!d){const h=document.createElement("div");if(h.className="fb-tile fb-tile-add",h.innerHTML="+",h.onclick=y,C.appendChild(h),m){const g=$t("tile",o,p);C.appendChild(g)}}else if(!s&&d){const h=document.createElement("div");h.className="fb-tile-counter",h.textContent=$("filesCounter",o,{count:f.length,max:c}),C.appendChild(h)}n.appendChild(C);const b=v();if(b){const h=document.createElement("div");h.className="fb-tile-hint",h.textContent=b,n.appendChild(h)}}function ro(e,t,n,r){var o,i,l,a,c;const s=t.state,p=document.createElement("div");p.className="space-y-2";const u=document.createElement("input");u.type="file",u.name=r,u.style.display="none",e.accept&&(u.accept=typeof e.accept=="string"?e.accept:[...(i=(o=e.accept.extensions)==null?void 0:o.map(g=>`.${g}`))!=null?i:[],...(l=e.accept.mime)!=null?l:[]].join(",")||"");const f=document.createElement("div");f.className="file-preview-container";const d=t.prefill[e.key],m=ke(e.accept),v=Ie(e.accept),y=(a=e.maxSize)!=null?a:1/0,C={fileUploadHandler(){u.click()},dragHandler(g){g.length>0&&an({file:g[0],container:f,fieldName:r,state:s,deps:b(),instance:t.instance,allowedExtensions:m,allowedMimes:v,maxSizeMB:y})},setupDrop(g){Pe(g,C.dragHandler)},restoreDropzone(){const g=be(e,s);f.className="file-preview-container w-full max-w-md bg-gray-100 rounded-lg overflow-hidden relative group cursor-pointer",f.style.height="128px",rt(f,s,g),f.onclick=C.fileUploadHandler,Pe(f,C.dragHandler)},onRemove(){var g;const E=p.querySelector('input[type="hidden"]'),w=E==null?void 0:E.value;w&&xt((g=s.resourceIndex.get(w))==null?void 0:g.file),E&&(E.value=""),h()}},b=()=>({picker:u,fileUploadHandler:C.fileUploadHandler,dragHandler:C.dragHandler,setupDrop:C.setupDrop,onRemove:C.onRemove}),h=()=>{if(s.config.pickExistingFiles&&!e.disableLibrary){for(f.className="file-preview-container",f.removeAttribute("style"),f.onclick=null;f.firstChild;)f.removeChild(f.firstChild);const g=document.createElement("div");g.className="fb-file-card-row",g.style.cssText="display:flex;gap:8px;align-items:stretch;";const E=be(e,s),w=kt(s,$("clickDragText",s),E,C.fileUploadHandler);w.style.cssText="flex:1;min-width:0;height:128px;",Pe(w,C.dragHandler);const x=$t("card",s,()=>{eo(s,e,f,p,r,r,async k=>{await Ct(f,k,s,b())},t.instance).catch(k=>{console.error("Library pick failed:",k)})});x.style.cssText="flex:1;min-width:0;",g.appendChild(w),g.appendChild(x),f.appendChild(g)}else C.restoreDropzone()};if(d){to(d,f,r,p,s,b());const g=s.resourceIndex.get(d);(c=g==null?void 0:g.type)!=null&&c.startsWith("video/")&&(f.onclick=C.fileUploadHandler,Pe(f,C.dragHandler))}else h();u.onchange=()=>{u.files&&u.files.length>0&&an({file:u.files[0],container:f,fieldName:r,state:s,deps:b(),instance:t.instance,allowedExtensions:m,allowedMimes:v,maxSizeMB:y})},p.appendChild(f),p.appendChild(u),n.appendChild(p)}function oo(e,t,n,r){var o,i,l,a;const c=t.state,s=document.createElement("div");s.className="space-y-2",s.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:[...(i=(o=e.accept.extensions)==null?void 0:o.map(b=>`.${b}`))!=null?i:[],...(l=e.accept.mime)!=null?l:[]].join(",")||"");const u=document.createElement("div");u.className="files-list-wrapper",u.style.cssText="border:2px dashed var(--fb-file-upload-border-color,#d1d5db);border-radius:var(--fb-border-radius,0.5rem);padding:8px;transition:border-color var(--fb-transition-duration,200ms),background var(--fb-transition-duration,200ms);";const f=document.createElement("div");f.className="files-list";const d=t.prefill[e.key]||[];et(d,c.resourceIndex),s.dataset.resourceIds=JSON.stringify(d);const m=be(e,c),v={maxCount:1/0,allowedExtensions:ke(e.accept),allowedMimes:Ie(e.accept),maxSize:(a=e.maxSize)!=null?a:1/0};u.appendChild(f),s.appendChild(p),s.appendChild(u),n.appendChild(s);const y=c.config.pickExistingFiles&&!e.disableLibrary?()=>{bn(c,e,s,r,d,1/0,C,t.instance).catch(b=>{console.error("Library pick failed:",b)})}:null;function C(){const b=le(e,c);vn({container:f,rids:d,state:c,onRemove:b?null:h=>{var g;xt((g=c.resourceIndex.get(h))==null?void 0:g.file);const E=d.indexOf(h);E>-1&&d.splice(E,1),C()},hint:m,isReadonly:b,onLibraryPick:b?null:y})}C(),un(u,d,c,C,v,r,t.instance),dn(p,d,c,C,v,r,t.instance)}function lo(e,t,n,r){var o,i,l,a,c,s;const p=t.state,u=(o=e.minCount)!=null?o:0,f=(i=e.maxCount)!=null?i:1/0,d=document.createElement("div");d.className="space-y-2",d.dataset.filesWrapper=r;const m=document.createElement("input");m.type="file",m.name=r,m.multiple=!0,m.style.display="none",e.accept&&(m.accept=typeof e.accept=="string"?e.accept:[...(a=(l=e.accept.extensions)==null?void 0:l.map(x=>`.${x}`))!=null?a:[],...(c=e.accept.mime)!=null?c:[]].join(",")||"");const v=document.createElement("div");v.className="files-list-wrapper",v.style.cssText="border:2px dashed var(--fb-file-upload-border-color,#d1d5db);border-radius:var(--fb-border-radius,0.5rem);padding:8px;transition:border-color var(--fb-transition-duration,200ms),background var(--fb-transition-duration,200ms);";const y=document.createElement("div");y.className="files-list",d.appendChild(m),d.appendChild(v),v.appendChild(y);const C=Array.isArray(t.prefill[e.key])?[...t.prefill[e.key]]:[];et(C,p.resourceIndex),d.dataset.resourceIds=JSON.stringify(C);const b=be(e,p),h={maxCount:f,allowedExtensions:ke(e.accept),allowedMimes:Ie(e.accept),maxSize:(s=e.maxSize)!=null?s:1/0},g=()=>{const x=C.length===1?$("fileCountSingle",p,{count:C.length}):$("fileCountPlural",p,{count:C.length}),k=u>0||f<1/0?` ${$("fileCountRange",p,{min:u,max:f})}`:"";return x+k},E=p.config.pickExistingFiles&&!e.disableLibrary?()=>{bn(p,e,d,r,C,f,w,t.instance).catch(x=>{console.error("Library pick failed:",x)})}:null,w=()=>{const x=le(e,p);vn({container:y,rids:C,state:p,onRemove:x?null:k=>{var I;xt((I=p.resourceIndex.get(k))==null?void 0:I.file),C.splice(C.indexOf(k),1),w()},hint:b,countInfo:g(),maxCount:f<1/0?f:void 0,isReadonly:x,onLibraryPick:x?null:E})};un(v,C,p,w,h,r,t.instance),dn(m,C,p,w,h,r,t.instance),w(),n.appendChild(d)}function io(e,t){const n=e.querySelector(`[data-files-wrapper="${t}"]`);if(!n)return[];const r=n.dataset.resourceIds;if(r===void 0)throw new Error(`readMultiFileResourceIds: [data-files-wrapper="${t}"] is missing data-resource-ids attribute. This is a render bug.`);const o=JSON.parse(r);if(!Array.isArray(o))throw new Error(`readMultiFileResourceIds: data-resource-ids on [data-files-wrapper="${t}"] is not a JSON array. Got: ${r}`);return o}function ao(e,t,n,r,o){var i,l;const a="minCount"in n&&(i=n.minCount)!=null?i:0,c="maxCount"in n&&(l=n.maxCount)!=null?l:1/0;n.required&&t.length===0&&o.push(`${e}: ${$("required",r)}`),t.length<a&&o.push(`${e}: ${$("minFiles",r,{min:a})}`),t.length>c&&o.push(`${e}: ${$("maxFiles",r,{max:c})}`)}function gn(e,t,n,r,o){var i,l;const a="accept"in n?n.accept:void 0,c=ke(a),s=Ie(a);if(c.length===0&&s.length===0)return;const p=c.join(", "),u=s.join(", ");for(const f of t){const d=r.resourceIndex.get(f),m=(i=d==null?void 0:d.name)!=null?i:f;if(c.length>0&&!Ne(m,c)){o.push(`${e}: ${$("invalidFileExtension",r,{name:m,formats:p})}`);continue}if(s.length>0&&!(d!=null&&d.inferredFromExtension)){const v=(l=d==null?void 0:d.type)!=null?l:"";Oe(v,s)||o.push(`${e}: ${$("invalidFileMime",r,{name:m,type:v,mimes:u})}`)}}}function yn(e,t,n,r,o){var i;const l="maxSize"in n&&(i=n.maxSize)!=null?i:1/0;if(l!==1/0)for(const a of t){const c=r.resourceIndex.get(a);c&&c.size>l*1024*1024&&o.push(`${e}: ${$("fileTooLarge",r,{name:c.name,maxSize:l})}`)}}function so(e,t,n){const{scopeRoot:r,skipValidation:o,path:i,state:l}=n,a=[],c=xe(i,t),s=io(r,c);return o||(ao(t,s,e,l,a),gn(t,s,e,l,a),yn(t,s,e,l,a)),{value:s,errors:a}}function co(e,t,n){var r;const{scopeRoot:o,skipValidation:i,state:l}=n,a=[],c=o.querySelector(`input[name$="${t}"][type="hidden"]`),s=(r=c==null?void 0:c.value)!=null?r:"";return!i&&e.required&&s===""?(a.push(`${t}: ${$("required",l)}`),{value:null,errors:a}):(!i&&s!==""&&(gn(t,[s],e,l,a),yn(t,[s],e,l,a)),{value:s||null,errors:a})}function xn(e,t,n){return e.type==="files"||"multiple"in e&&e.multiple?so(e,t,n):co(e,t,n)}function uo(e,t,n,r){const o=t.state,i=t.prefill[e.key],l=typeof i=="string"?i:"";if(l){et([l],o.resourceIndex);const a=document.createElement("input");a.type="hidden",a.name=r,a.value=l,n.appendChild(a),wt(l,o).then(c=>{n.appendChild(c)}).catch(c=>{console.error("Failed to render file preview:",c),n.appendChild(En(o))})}else n.appendChild(En(o))}function En(e){const t=document.createElement("div");return t.style.cssText=`
|
|
575
|
-
width:${nt};
|
|
576
|
-
height:${nt};
|
|
689
|
+
<div style="font-size:11px;color:var(--fb-text-secondary-color,#6b7280);text-align:center;">${le($("uploadingFile",l))}</div>
|
|
690
|
+
</div>`;let g;try{g=await ln(o,l)}catch(h){throw m&&u!=null&&u.onAfterUpload?u.onAfterUpload(i,m):u!=null&&u.onRemove?u.onRemove():gt(i,l),h}l.resourceIndex.set(g,{name:o.name,type:o.type,size:o.size,uploadedAt:new Date,file:o}),m&&m!==g&&nt((n=l.resourceIndex.get(m))==null?void 0:n.file);let y=f;y||(y=document.createElement("input"),y.type="hidden",y.name=a,(r=i.parentElement)==null||r.appendChild(y)),y.value=g;const C=o.type.startsWith("video/");!C&&u!=null&&u.onAfterUpload?u.onAfterUpload(i,g):!C&&u?eo(i,g,l,u).catch(console.error):Ct(i,g,l,{fileName:o.name,isReadonly:!1,deps:u}).catch(console.error),s&&!l.config.readonly&&s.triggerOnChange(a,g)}function an(e,t,n,r){const o=e.filter(m=>!qe(m.name,n.allowedExtensions)),i=e.filter(m=>qe(m.name,n.allowedExtensions)),a=i.filter(m=>!Ue(m.type,n.allowedMimes)),l=i.filter(m=>Ue(m.type,n.allowedMimes)),u=l.filter(m=>!Ze(m,n.maxSize)),s=l.filter(m=>Ze(m,n.maxSize)),d=n.maxCount===1/0?s.length:Math.max(0,n.maxCount-t),c=s.slice(0,d),p=s.length-c.length,f=[];if(o.length>0){const m=n.allowedExtensions.join(", "),g=o.map(y=>y.name).join(", ");f.push($("invalidFileExtension",r,{name:g,formats:m}))}if(a.length>0){const m=n.allowedMimes.join(", "),g=a.map(y=>y.name).join(", ");f.push($("invalidFileMime",r,{name:g,type:a.map(y=>y.type).join(", "),mimes:m}))}if(u.length>0){const m=u.map(g=>g.name).join(", ");f.push($("fileTooLarge",r,{name:m,maxSize:n.maxSize}))}return p>0&&f.push($("filesLimitExceeded",r,{skipped:p,max:n.maxCount})),{accepted:c,errorMessage:f.join(" \u2022 ")}}async function sn(e,t,n,r){var o;if(n){const i=Gt(n),a=(o=i.querySelector(".fb-multi-add-tile-js"))!=null?o:i.querySelector(".fb-tile-add");a&&(a.style.display="none")}await Promise.all(e.map(async i=>{const a=Nr(i.name,r);n&&Gt(n).appendChild(a);try{const l=await ln(i,r);r.resourceIndex.set(l,{name:i.name,type:i.type,size:i.size,uploadedAt:new Date,file:void 0}),t.push(l)}finally{a.remove()}}))}function ro(e,t,n,r,o,i,a){et(e,async l=>{var u;const{accepted:s,errorMessage:d}=an(Array.from(l),t.length,o,n);d?Ce(e,d):Pe(e);const c=(u=e.querySelector(".files-list"))!=null?u:e;await sn(s,t,c,n),r(),a&&i&&!n.config.readonly&&a.triggerOnChange(i,t)})}function oo(e,t,n,r,o,i,a){e.onchange=async()=>{if(!e.files)return;const l=e.closest("[data-files-wrapper]")||e.parentElement,{accepted:u,errorMessage:s}=an(Array.from(e.files),t.length,o,n);s&&l?Ce(l,s):l&&Pe(l);const d=l==null?void 0:l.querySelector(".files-list");await sn(u,t,d!=null?d:null,n),r(),e.value="",a&&i&&!n.config.readonly&&a.triggerOnChange(i,t)}}function un(e){var t,n;if(!e.accept)return;if(typeof e.accept=="string"){const l=$e(e.accept);return l.length>0?{extensions:l}:void 0}const r=(t=e.accept.extensions)!=null?t:[],o=(n=e.accept.mime)!=null?n:[],i=r.map(l=>l.toLowerCase());if(i.length===0&&o.length===0)return;const a={};return i.length>0&&(a.extensions=i),o.length>0&&(a.mime=o),a}function cn(e,t,n,r,o){if(!qe(e.name,t)){const i=t.join(", ");return $("invalidFileExtension",o,{name:e.name,formats:i})}if(!Ue(e.type,n)){const i=n.join(", ");return $("invalidFileMime",o,{name:e.name,type:e.type,mimes:i})}return Kt(e.size,r)?null:$("fileTooLarge",o,{name:e.name,maxSize:r})}function lo(e){const t=e.dataset.resourceIds;if(!t)return[];try{const n=JSON.parse(t);return Array.isArray(n)?n:[]}catch(n){return[]}}function dn(e,t){var n;const r=t.resourceIndex.get(e.resourceId);t.resourceIndex.set(e.resourceId,{name:e.name,type:e.type,size:e.size,uploadedAt:(n=r==null?void 0:r.uploadedAt)!=null?n:new Date,file:r==null?void 0:r.file})}function fn(e,t){return e instanceof Error&&e.message?e.message:$("pickerError",t)}async function io(e,t,n,r,o,i,a,l){var u;if(!e.config.pickExistingFiles)return;const s=$e(t.accept),d=Oe(t.accept),c=(u=t.maxSize)!=null?u:1/0,p=lo(n),f=i===1/0?1/0:Math.max(0,i-p.length);let m;try{m=await e.config.pickExistingFiles({fieldPath:r,mode:"multiple",accept:un(t),maxSizeMB:c===1/0?void 0:c,remainingSlots:f===1/0?void 0:f,selectedResourceIds:[...p]})}catch(E){Ce(n,fn(E,e));return}if(m.length===0)return;const g=new Set(p),y=new Set,C=m.filter(E=>g.has(E.resourceId)||y.has(E.resourceId)?!1:(y.add(E.resourceId),!0)).filter(E=>cn(E,s,d,c,e)===null),h=i===1/0?C.length:Math.max(0,i-o.length),v=C.slice(0,h),x=C.length-v.length;if(v.length!==0){Pe(n),x>0&&Ce(n,$("filesLimitExceeded",e,{skipped:x,max:i}));for(const E of v)dn(E,e),o.push(E.resourceId);n.dataset.resourceIds=JSON.stringify(o),a(),e.config.readonly||l.triggerOnChange(r,o)}}async function ao(e,t,n,r,o,i,a,l){var u,s;if(!e.config.pickExistingFiles)return;const d=$e(t.accept),c=Oe(t.accept),p=(u=t.maxSize)!=null?u:1/0;let f;try{f=await e.config.pickExistingFiles({fieldPath:i,mode:"single",accept:un(t),maxSizeMB:p===1/0?void 0:p,selectedResourceIds:[]})}catch(h){Ce(n,fn(h,e));return}if(f.length===0)return;const m=f[0],g=cn(m,d,c,p,e);if(g!==null){Ce(n,g);return}Pe(n),dn(m,e);let y=r.querySelector('input[type="hidden"]');y||(y=document.createElement("input"),y.type="hidden",y.name=o,r.appendChild(y));const C=y.value||null;C&&C!==m.resourceId&&nt((s=e.resourceIndex.get(C))==null?void 0:s.file),y.value=m.resourceId,await a(m.resourceId),e.config.readonly||l.triggerOnChange(i,m.resourceId)}const pn='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 18a4 4 0 000-8 6 6 0 00-11.5 2A4 4 0 006 20h11M12 12v7M12 12l-3 3M12 12l3 3"/></svg>',mn='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 4h4v16H4z"/><path d="M10 4h4v16h-4z"/><path d="M16 5l3.5 1-3 14L13 19"/></svg>';function so(e,t,n,r,o,i,a){var l;Qe(e,o.resourceIndex);const u=o.resourceIndex.get(e);(l=u==null?void 0:u.type)!=null&&l.startsWith("video/")?Ct(t,e,o,{fileName:e,isReadonly:!1,deps:i}).catch(console.error):kt(t,e,o,i,a);const s=document.createElement("input");s.type="hidden",s.name=n,s.value=e,r.appendChild(s)}function uo(e,t,n,r,o=!1,i=""){xe();const a=document.createElement("div");a.className=`fb-wide-tile${t?" fb-file-card-row":""}${o?" fb-drag-over":""}`;const l=document.createElement("button");l.type="button",l.className="fb-wide-tile-upload fb-file-dropzone";const u=document.createElement("span");u.style.cssText="width:36px;height:36px;display:block;flex-shrink:0;",u.innerHTML=pn,l.appendChild(u);const s=document.createElement("div");if(s.className="fb-wide-tile-label",s.style.cssText="font-size:14px;font-weight:600;",s.textContent=$(o?"dropToUpload":"clickDragText",e),l.appendChild(s),i){const d=document.createElement("div");d.style.cssText="font-size:11px;opacity:0.65;margin-top:2px;",d.textContent=i,l.appendChild(d)}if(l.onclick=d=>{d.stopPropagation(),n()},a.appendChild(l),t&&r){const d=document.createElement("div");d.className="fb-wide-tile-divider",a.appendChild(d);const c=document.createElement("button");c.type="button",c.className="fb-wide-tile-library fb-file-library-card";const p=document.createElement("span");p.style.cssText="width:28px;height:28px;display:block;flex-shrink:0;",p.innerHTML=mn,c.appendChild(p);const f=document.createElement("div");f.style.cssText="font-size:13px;font-weight:600;text-align:center;",f.textContent=$("fromLibrary",e),c.appendChild(f);const m=document.createElement("div");m.style.cssText="font-size:11px;opacity:0.75;text-align:center;",m.textContent=$("libraryHint",e),c.appendChild(m),c.onclick=g=>{g.stopPropagation(),r()},a.appendChild(c)}return hn(a,{onEnter:()=>{const d=a.querySelector(".fb-wide-tile-label");d&&(d.textContent=$("dropToUpload",e))},onLeave:()=>{const d=a.querySelector(".fb-wide-tile-label");d&&(d.textContent=$("clickDragText",e))},activeClass:"fb-drag-over"}),a}function hn(e,t){let n=0;e.addEventListener("dragover",r=>{r.preventDefault()}),e.addEventListener("dragenter",r=>{r.preventDefault(),n++,n===1&&(e.classList.add(t.activeClass),t.onEnter())}),e.addEventListener("dragleave",r=>{r.preventDefault(),n=Math.max(0,n-1),n===0&&(e.classList.remove(t.activeClass),t.onLeave())}),e.addEventListener("drop",()=>{n=0,e.classList.remove(t.activeClass),t.onLeave()})}function kt(e,t,n,r,o){var i,a;const l=n.resourceIndex.get(t);if((i=l==null?void 0:l.type)!=null&&i.startsWith("video/")){Ct(e,t,n,{fileName:(a=l==null?void 0:l.name)!=null?a:"",isReadonly:!1,deps:r}).catch(console.error);return}xe();const u=document.createElement("div");u.className="fb-multi-outer fb-multi-has-files";const s=document.createElement("div");s.className="fb-multi-grid fb-tiles-wrap",u.appendChild(s);const d=bn(t,n,!!r.onRemove,r.onRemove?()=>{var c;return(c=r.onRemove)==null?void 0:c.call(r)}:null,o);for(s.appendChild(d),e.className="file-preview-container",e.removeAttribute("style");e.firstChild;)e.removeChild(e.firstChild);e.appendChild(u)}function co(e,t,n,r,o=!1){const i=document.createElement("div");i.className=`fb-multi-add-tile fb-multi-add-tile-js${o?" fb-drag-over-tile":""}`;const a=document.createElement("button");a.type="button",a.className="fb-multi-add-upload fb-tile-add fb-file-dropzone";const l=document.createElement("span");l.style.cssText="width:28px;height:28px;display:block;flex-shrink:0;",l.innerHTML=pn,a.appendChild(l);const u=document.createElement("span");if(u.className="fb-multi-add-label",u.style.cssText="font-size:11px;font-weight:600;",u.textContent=$(o?"dropToUpload":"clickDragTextMultiple",e),a.appendChild(u),a.onclick=s=>{s.stopPropagation(),n()},i.appendChild(a),t&&r){const s=document.createElement("div");s.className="fb-multi-add-divider",i.appendChild(s);const d=document.createElement("button");d.type="button",d.className="fb-multi-add-library fb-tile-add-library fb-file-library-card",d.setAttribute("aria-label",$("fromLibrary",e));const c=document.createElement("span");c.style.cssText="width:14px;height:14px;display:block;flex-shrink:0;",c.innerHTML=mn,d.appendChild(c),d.appendChild(document.createTextNode($("fromLibrary",e))),d.onclick=p=>{p.stopPropagation(),r()},i.appendChild(d)}return i}function bn(e,t,n,r,o){var i,a,l;xe();const u=t.resourceIndex.get(e),s=document.createElement("div");s.className="fb-preview-tile fb-checker fb-tile-resource resource-pill",s.dataset.resourceId=e;const d=yt({canRemove:n&&r!==null,removeHandler:r,state:t,resourceId:e,fileName:(i=u==null?void 0:u.name)!=null?i:"",meta:u,replaceHandler:(a=o==null?void 0:o.replaceHandler)!=null?a:null,libraryHandler:(l=o==null?void 0:o.libraryHandler)!=null?l:null});return nn(s,e,u,t,d).catch(c=>{console.error("Failed to render tile:",c)}),s}function vn(e=!1){const t=document.createElement("div");return t.className=`fb-multi-placeholder fb-checker${e?" fb-drag-over":""}`,t}function fo(e,t,n,r,o,i){const a=document.createElement("div");a.className="fb-meta-line";const l=document.createElement("div");if(l.className="fb-meta-text",t.maxSize&&t.maxSize!==1/0){const d=document.createElement("span");d.textContent=$("hintMaxSize",e,{size:t.maxSize}),l.appendChild(d),l.appendChild(gn())}const u=$e(t.accept);if(u.length>0){const d=document.createElement("span");d.className="fb-meta-mono",d.textContent=u.map(c=>c.toUpperCase()).join(", "),l.appendChild(d),l.appendChild(gn())}const s=document.createElement("span");if(r<1/0)s.textContent=$("fileCountWithMax",e,{count:n,max:r});else{const d=n===1?"fileCountSingle":"fileCountPlural";s.textContent=$(d,e,{count:n})}if(l.appendChild(s),a.appendChild(l),o&&n>1){const d=document.createElement("button");d.type="button",d.className="fb-clear-all-btn",d.textContent=$("clearAll",e),d.onclick=c=>{c.stopPropagation(),window.confirm($("clearAll",e)+"?")&&i()},a.appendChild(d)}return a}function gn(){const e=document.createElement("span");return e.className="fb-meta-dot",e}const $t=new WeakMap;function po(e){var t;const{container:n,rids:r,state:o,onRemove:i,maxCount:a,isReadonly:l=!1,onLibraryPick:u,element:s,onClearAll:d,openPicker:c}=e;xe();const p=n.closest("[data-files-wrapper]");p&&(p.dataset.resourceIds=JSON.stringify(r!=null?r:[]));const f=$t.get(n);for(f&&(f.disconnect(),$t.delete(n));n.firstChild;)n.removeChild(n.firstChild);const m=r!=null?r:[],g=a!=null?a:1/0,y=g!==1/0&&m.length>=g,C=!l&&typeof u=="function",h=c!=null?c:(()=>{var b;const w=(b=n.closest("[data-files-wrapper]"))==null?void 0:b.querySelector('input[type="file"]');w&&w.click()});if(l){if(m.length===0){const b=document.createElement("div");b.className="fb-tile-empty-text",b.textContent=$("noFilesSelected",o),n.appendChild(b)}else{const b=document.createElement("div");b.className="fb-multi-readonly-grid",n.appendChild(b);for(const w of m){const F=o.resourceIndex.get(w),V=document.createElement("div");V.className="fb-readonly-tile fb-checker fb-tile fb-tile-resource",V.dataset.resourceId=w;const R=yt({canRemove:!1,removeHandler:null,state:o,resourceId:w,fileName:(t=F==null?void 0:F.name)!=null?t:"",meta:F});nn(V,w,F,o,R).catch(console.error),V.onclick=async()=>{var D;let j=null;o.config.getDownloadUrl?j=o.config.getDownloadUrl(w):o.config.getThumbnail?j=await o.config.getThumbnail(w):(F==null?void 0:F.file)instanceof File&&(j=URL.createObjectURL(F.file)),j?window.open(j,"_blank"):o.config.downloadFile&&o.config.downloadFile(w,(D=F==null?void 0:F.name)!=null?D:"")},b.appendChild(V)}}return}const v=document.createElement("div");v.className=`fb-multi-outer${m.length>0?" fb-multi-has-files":""}`;const x=document.createElement("div");x.className="fb-multi-grid fb-tiles-wrap",v.appendChild(x),n.appendChild(v);for(let b=0;b<m.length;b++){const w=m[b],F=bn(w,o,i!==null,i?()=>i(w):null);x.appendChild(F)}if(!y){const b=co(o,C,h,u!=null?u:null);x.appendChild(b)}const E=m.length+(y?0:1),k=()=>{const b=getComputedStyle(x).gridTemplateColumns,w=b?b.split(" ").filter(Boolean).length:0;if(!w)return;const F=E%w,V=F===0?0:w-F,R=g===1/0?V:Math.max(0,g-E),D=Math.min(V,R),j=x.querySelectorAll(".fb-multi-placeholder");if(j.length>D)for(let Y=j.length-1;Y>=D;Y--)j[Y].remove();else if(j.length<D)for(let Y=j.length;Y<D;Y++)x.appendChild(vn())};if((g===1/0||g>E)&&x.appendChild(vn()),requestAnimationFrame(k),typeof ResizeObserver!="undefined"){const b=new ResizeObserver(()=>k());b.observe(x),$t.set(n,b)}if(hn(v,{activeClass:"fb-drag-over",onEnter:()=>{x.querySelectorAll(".fb-multi-placeholder").forEach(w=>{w.classList.add("fb-drag-over")});const b=x.querySelector(".fb-multi-add-tile-js");if(b){b.classList.add("fb-drag-over-tile");const w=b.querySelector(".fb-multi-add-label");w&&(w.textContent=$("dropToUpload",o))}},onLeave:()=>{x.querySelectorAll(".fb-multi-placeholder").forEach(w=>{w.classList.remove("fb-drag-over")});const b=x.querySelector(".fb-multi-add-tile-js");if(b){b.classList.remove("fb-drag-over-tile");const w=b.querySelector(".fb-multi-add-label");w&&(w.textContent=$("clickDragTextMultiple",o))}}}),s){const b=fo(o,s,m.length,g,!!d,d!=null?d:(()=>{}));n.appendChild(b)}}function mo(e,t,n,r){var o,i;const a=t.state,l=document.createElement("div");l.className="space-y-2",l.dataset.filesWrapper=r;const u=document.createElement("input");u.type="file",u.name=r,u.style.display="none",u.accept=yn(e.accept);const s=document.createElement("div");s.className="file-preview-container";const d=t.prefill[e.key],c=$e(e.accept),p=Oe(e.accept),f=(o=e.maxSize)!=null?o:1/0,m={fileUploadHandler(){u.click()},dragHandler(h){h.length>0&&no({file:h[0],container:s,fieldName:r,state:a,deps:y(),instance:t.instance,allowedExtensions:c,allowedMimes:p,maxSizeMB:f})},setupDrop(h){et(h,m.dragHandler)},onRemove(){var h;const v=l.querySelector('input[type="hidden"]'),x=v==null?void 0:v.value;x&&nt((h=a.resourceIndex.get(x))==null?void 0:h.file),v&&(v.value=""),C()}},g=()=>{const h=!!(a.config.pickExistingFiles&&!e.disableLibrary);return{replaceHandler:a.config.uploadFile?()=>u.click():null,libraryHandler:h?()=>{ao(a,e,s,l,r,r,async v=>{kt(s,v,a,y(),g())},t.instance).catch(v=>{console.error("Library pick failed:",v)})}:null}},y=()=>({picker:u,fileUploadHandler:m.fileUploadHandler,dragHandler:m.dragHandler,setupDrop:m.setupDrop,onRemove:m.onRemove,onAfterUpload:(h,v)=>{kt(h,v,a,y(),g())}}),C=()=>{for(xe(),s.className="file-preview-container",s.removeAttribute("style");s.firstChild;)s.removeChild(s.firstChild);const h=g().libraryHandler,v=uo(a,h!==null,m.fileUploadHandler,h,!1,Ee(e,a));s.appendChild(v),et(s,m.dragHandler)};if(d){so(d,s,r,l,a,y(),g());const h=a.resourceIndex.get(d);(i=h==null?void 0:h.type)!=null&&i.startsWith("video/")&&et(s,m.dragHandler)}else C();u.onchange=()=>{u.files&&u.files.length>0&&m.dragHandler(u.files)},l.appendChild(s),l.appendChild(u),n.appendChild(l)}function yn(e){var t,n,r;return e?typeof e=="string"?e:[...(n=(t=e.extensions)==null?void 0:t.map(o=>`.${o}`))!=null?n:[],...(r=e.mime)!=null?r:[]].join(","):""}function xn(e,t,n,r,o){var i,a;const l=t.state,u=document.createElement("div");u.className="space-y-2",u.dataset.filesWrapper=r;const s=document.createElement("input");s.type="file",s.name=r,s.multiple=!0,s.style.display="none",s.accept=yn(e.accept);const d=document.createElement("div");d.className="files-list-wrapper";const c=document.createElement("div");c.className="files-list",u.appendChild(s),u.appendChild(d),d.appendChild(c);const p=Array.isArray(t.prefill[e.key])?[...t.prefill[e.key]]:[];vt(p,l.resourceIndex),u.dataset.resourceIds=JSON.stringify(p);const f={maxCount:o,allowedExtensions:$e(e.accept),allowedMimes:Oe(e.accept),maxSize:(a=(i=e.maxSize)!=null?i:e.maxSizeMB)!=null?a:1/0},m=()=>{s.click()},g=l.config.pickExistingFiles&&!e.disableLibrary?()=>{io(l,e,u,r,p,o,y,t.instance).catch(C=>{console.error("Library pick failed:",C)})}:null;function y(){const C=oe(e,l);po({container:c,rids:p,state:l,onRemove:C?null:h=>{var v;nt((v=l.resourceIndex.get(h))==null?void 0:v.file);const x=p.indexOf(h);x>-1&&p.splice(x,1),y()},maxCount:o<1/0?o:void 0,isReadonly:C,onLibraryPick:C?null:g,element:e,onClearAll:C?void 0:()=>{p.splice(0),y()},openPicker:m})}ro(d,p,l,y,f,r,t.instance),oo(s,p,l,y,f,r,t.instance),y(),n.appendChild(u)}function ho(e,t,n,r){xn(e,t,n,r,1/0)}function bo(e,t,n,r){var o;xn(e,t,n,r,(o=e.maxCount)!=null?o:1/0)}function vo(e,t){const n=e.querySelector(`[data-files-wrapper="${t}"]`);if(!n)return[];const r=n.dataset.resourceIds;if(r===void 0)throw new Error(`readMultiFileResourceIds: [data-files-wrapper="${t}"] is missing data-resource-ids attribute. This is a render bug.`);const o=JSON.parse(r);if(!Array.isArray(o))throw new Error(`readMultiFileResourceIds: data-resource-ids on [data-files-wrapper="${t}"] is not a JSON array. Got: ${r}`);return o}function go(e,t,n,r,o){var i,a;const l="minCount"in n&&(i=n.minCount)!=null?i:0,u="maxCount"in n&&(a=n.maxCount)!=null?a:1/0;n.required&&t.length===0&&o.push(`${e}: ${$("required",r)}`),t.length<l&&o.push(`${e}: ${$("minFiles",r,{min:l})}`),t.length>u&&o.push(`${e}: ${$("maxFiles",r,{max:u})}`)}function En(e,t,n,r,o){var i,a;const l="accept"in n?n.accept:void 0,u=$e(l),s=Oe(l);if(u.length===0&&s.length===0)return;const d=u.join(", "),c=s.join(", ");for(const p of t){const f=r.resourceIndex.get(p),m=(i=f==null?void 0:f.name)!=null?i:p;if(u.length>0&&!qe(m,u)){o.push(`${e}: ${$("invalidFileExtension",r,{name:m,formats:d})}`);continue}if(s.length>0&&!(f!=null&&f.inferredFromExtension)){const g=(a=f==null?void 0:f.type)!=null?a:"";Ue(g,s)||o.push(`${e}: ${$("invalidFileMime",r,{name:m,type:g,mimes:c})}`)}}}function Cn(e,t,n,r,o){var i;const a="maxSize"in n&&(i=n.maxSize)!=null?i:1/0;if(a!==1/0)for(const l of t){const u=r.resourceIndex.get(l);u&&u.size>a*1024*1024&&o.push(`${e}: ${$("fileTooLarge",r,{name:u.name,maxSize:a})}`)}}function yo(e,t,n){const{scopeRoot:r,skipValidation:o,path:i,state:a}=n,l=[],u=ye(i,t),s=vo(r,u);return o||(go(t,s,e,a,l),En(t,s,e,a,l),Cn(t,s,e,a,l)),{value:s,errors:l}}function xo(e,t,n){var r;const{scopeRoot:o,skipValidation:i,state:a}=n,l=[],u=o.querySelector(`input[name$="${t}"][type="hidden"]`),s=(r=u==null?void 0:u.value)!=null?r:"";return!i&&e.required&&s===""?(l.push(`${t}: ${$("required",a)}`),{value:null,errors:l}):(!i&&s!==""&&(En(t,[s],e,a,l),Cn(t,[s],e,a,l)),{value:s||null,errors:l})}function wn(e,t,n){return e.type==="files"||"multiple"in e&&e.multiple?yo(e,t,n):xo(e,t,n)}function Eo(e,t,n,r){const o=t.state,i=t.prefill[e.key],a=typeof i=="string"?i:"";if(a){vt([a],o.resourceIndex);const l=document.createElement("input");l.type="hidden",l.name=r,l.value=a,n.appendChild(l),wt(a,o).then(u=>{u.classList.add("fb-single-readonly-filled","fb-readonly-tile","fb-checker"),n.appendChild(u)}).catch(console.error)}else n.appendChild(Co(o))}function Co(e){xe();const t=document.createElement("div");return t.style.cssText=`
|
|
691
|
+
height: 220px;
|
|
577
692
|
display:flex;
|
|
578
693
|
align-items:center;
|
|
579
694
|
justify-content:center;
|
|
580
|
-
background:
|
|
581
|
-
border-radius:
|
|
582
|
-
border:1px solid
|
|
583
|
-
`,t.innerHTML=`<div style="font-size:11px;text-align:center;color:var(--fb-text-secondary-color,#6b7280);">${
|
|
695
|
+
background: repeating-linear-gradient(45deg, #fafafa 0 6px, #f3f4f6 6px 12px);
|
|
696
|
+
border-radius:0.75rem;
|
|
697
|
+
border:1px solid #e2e8f0;
|
|
698
|
+
`,t.innerHTML=`<div style="font-size:11px;text-align:center;color:var(--fb-text-secondary-color,#6b7280);">${le($("noFileSelected",e))}</div>`,t}function kn(e,t,n,r,o){vt(e,t.resourceIndex),xe();const i=document.createElement("div");if(i.dataset.filesWrapper=r,i.dataset.resourceIds=JSON.stringify(e),n.appendChild(i),e.length===0){const u=document.createElement("div");u.className="fb-tile-empty-text",u.textContent=$("noFilesSelected",t),i.appendChild(u);return}const a=document.createElement("div");a.className="fb-multi-readonly-grid",i.appendChild(a);const l=e.map(()=>{const u=document.createElement("div");return u.className="fb-readonly-tile fb-checker fb-tile",a.appendChild(u),u});for(let u=0;u<e.length;u++){const s=e[u],d=l[u],c=t.resourceIndex.get(s);wt(s,t,c==null?void 0:c.name).then(p=>{p.classList.add("fb-readonly-tile","fb-checker","fb-tile-resource"),p.dataset.resourceId=s,d.replaceWith(p)}).catch(()=>{const p=document.createElement("div");p.className="fb-readonly-tile fb-checker fb-tile fb-tile-resource",p.dataset.resourceId=s,d.replaceWith(p)})}}function wo(e,t,n,r){const o=t.prefill[e.key],i=Array.isArray(o)?o:[];kn(i,t.state,n,r)}function ko(e,t,n,r){const o=t.prefill[e.key],i=Array.isArray(o)?o:[];kn(i,t.state,n,r)}function $o(e,t,n,r){oe(e,t.state,t)?Eo(e,t,n,r):mo(e,t,n,r)}function Lo(e,t,n,r){oe(e,t.state,t)?wo(e,t,n,r):ho(e,t,n,r)}function So(e,t,n,r){oe(e,t.state,t)?ko(e,t,n,r):bo(e,t,n,r)}function $n(e,t,n,r){const{scopeRoot:o,state:i}=r;if(e.type==="files"||"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(l=>{l&&typeof l=="string"&&Qe(l,i.resourceIndex)});const a=o.querySelector(`[data-files-wrapper="${t}"]`);a?a.dataset.resourceIds=JSON.stringify(n):console.warn(`updateFileField: [data-files-wrapper="${t}"] not found in DOM; data-resource-ids not updated`)}else{const a=o.querySelector(`input[name="${t}"][type="hidden"]`);if(!a){console.warn(`updateFileField: Hidden input not found for file field "${t}"`);return}a.value=n!=null?String(n):"",n&&typeof n=="string"&&(Qe(n,i.resourceIndex),console.info(`updateFileField: File field "${t}" updated. Preview update requires re-render.`))}}function Ie(e){return e?e.toUpperCase():"#000000"}function Lt(e){return/^#[0-9A-F]{6}$/i.test(e)||/^#[0-9A-F]{3}$/i.test(e)}function Ln(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 Sn(e){const t=document.createElement("div");t.className="flex items-center gap-2";const n=Ie(e),r=document.createElement("div");r.style.cssText=`
|
|
584
699
|
width: 32px;
|
|
585
700
|
height: 32px;
|
|
586
701
|
border-radius: var(--fb-border-radius);
|
|
@@ -590,7 +705,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
590
705
|
font-size: var(--fb-font-size);
|
|
591
706
|
color: var(--fb-text-color);
|
|
592
707
|
font-family: var(--fb-font-family-mono, monospace);
|
|
593
|
-
`,o.textContent=n,t.appendChild(r),t.appendChild(o),t}function
|
|
708
|
+
`,o.textContent=n,t.appendChild(r),t.appendChild(o),t}function Tn(e,t,n){const r=Ie(e),o=document.createElement("div");o.className="colour-picker-wrapper",o.style.cssText=`
|
|
594
709
|
display: flex;
|
|
595
710
|
align-items: center;
|
|
596
711
|
gap: 8px;
|
|
@@ -603,7 +718,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
603
718
|
cursor: pointer;
|
|
604
719
|
transition: border-color var(--fb-transition-duration) ease-in-out;
|
|
605
720
|
flex-shrink: 0;
|
|
606
|
-
`;const
|
|
721
|
+
`;const a=document.createElement("input");a.type="text",a.className="colour-hex-input",a.name=t,a.value=r,a.placeholder="#000000",a.style.cssText=`
|
|
607
722
|
width: 100px;
|
|
608
723
|
padding: var(--fb-input-padding-y) var(--fb-input-padding-x);
|
|
609
724
|
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
@@ -613,49 +728,49 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
613
728
|
font-size: var(--fb-font-size);
|
|
614
729
|
font-family: var(--fb-font-family-mono, monospace);
|
|
615
730
|
transition: all var(--fb-transition-duration) ease-in-out;
|
|
616
|
-
`;const
|
|
731
|
+
`;const l=document.createElement("input");return l.type="color",l.className="colour-picker-hidden",l.value=r.toLowerCase(),l.style.cssText=`
|
|
617
732
|
position: absolute;
|
|
618
733
|
opacity: 0;
|
|
619
734
|
pointer-events: none;
|
|
620
|
-
`,
|
|
735
|
+
`,a.addEventListener("input",()=>{const u=a.value.trim();if(Lt(u)){const s=Ln(u);i.style.backgroundColor=s,l.value=s.toLowerCase(),a.classList.remove("invalid"),n.instance&&n.instance.triggerOnChange(t,s)}else a.classList.add("invalid")}),a.addEventListener("blur",()=>{const u=a.value.trim();if(Lt(u)){const s=Ln(u);a.value=s,i.style.backgroundColor=s,l.value=s.toLowerCase(),a.classList.remove("invalid")}}),l.addEventListener("change",()=>{const u=Ie(l.value);a.value=u,i.style.backgroundColor=u,n.instance&&n.instance.triggerOnChange(t,u)}),i.addEventListener("click",()=>{l.click()}),i.addEventListener("mouseenter",()=>{i.style.borderColor="var(--fb-border-hover-color)"}),i.addEventListener("mouseleave",()=>{i.style.borderColor="var(--fb-border-color)"}),a.addEventListener("focus",()=>{a.style.borderColor="var(--fb-border-focus-color)",a.style.outline="var(--fb-focus-ring-width) solid var(--fb-focus-ring-color)",a.style.outlineOffset="0"}),a.addEventListener("blur",()=>{a.style.borderColor="var(--fb-border-color)",a.style.outline="none"}),a.addEventListener("mouseenter",()=>{document.activeElement!==a&&(a.style.borderColor="var(--fb-border-hover-color)")}),a.addEventListener("mouseleave",()=>{document.activeElement!==a&&(a.style.borderColor="var(--fb-border-color)")}),o.appendChild(i),o.appendChild(a),o.appendChild(l),o}function To(e,t,n,r){const o=t.state,i=oe(e,o,t),a=t.prefill[e.key]||e.default||"#000000";if(i){const l=Sn(a);n.appendChild(l)}else{const l=Tn(a,r,t);n.appendChild(l)}if(!i){const l=document.createElement("p");l.className="mt-1",l.style.cssText=`
|
|
621
736
|
font-size: var(--fb-font-size-small);
|
|
622
737
|
color: var(--fb-text-secondary-color);
|
|
623
|
-
`,
|
|
738
|
+
`,l.textContent=Ee(e,o),n.appendChild(l)}}function Ao(e,t,n,r){var o,i;const a=t.state,l=oe(e,a,t),u=t.prefill[e.key]||[],s=Array.isArray(u)?[...u]:[],d=(o=e.minCount)!=null?o:1,c=(i=e.maxCount)!=null?i:1/0;for(;s.length<d;)s.push(e.default||"#000000");const p=document.createElement("div");p.className="space-y-2",n.appendChild(p);function f(){p.querySelectorAll(".multiple-colour-item").forEach((v,x)=>{const E=v.querySelector("input");E&&(E.name=`${r}[${x}]`)})}function m(v="#000000",x=-1){const E=document.createElement("div");if(E.className="multiple-colour-item flex items-center gap-2",l){const k=Sn(v);for(;k.firstChild;)E.appendChild(k.firstChild)}else{const k=`${r}[${p.children.length}]`,b=Tn(v,k,t);b.style.flex="1",E.appendChild(b)}return x===-1?p.appendChild(E):p.insertBefore(E,p.children[x]),f(),E}function g(){if(l)return;const v=p.querySelectorAll(".multiple-colour-item"),x=v.length;v.forEach(E=>{let k=E.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=`
|
|
624
739
|
color: var(--fb-error-color);
|
|
625
740
|
background-color: transparent;
|
|
626
741
|
transition: background-color var(--fb-transition-duration);
|
|
627
|
-
`,
|
|
742
|
+
`,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(p.children).indexOf(E);p.children.length>d&&(s.splice(w,1),E.remove(),f(),h(),g())},E.appendChild(k));const b=x<=d;k.disabled=b,k.style.opacity=b?"0.5":"1",k.style.pointerEvents=b?"none":"auto"})}let y=null,C=null;if(!l){y=document.createElement("div"),y.className="flex items-center gap-3 mt-2";const v=document.createElement("button");v.type="button",v.className="add-colour-btn px-3 py-1 rounded",v.style.cssText=`
|
|
628
743
|
color: var(--fb-primary-color);
|
|
629
744
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
630
745
|
background-color: transparent;
|
|
631
746
|
font-size: var(--fb-font-size);
|
|
632
747
|
transition: all var(--fb-transition-duration);
|
|
633
|
-
`,
|
|
748
|
+
`,v.textContent="+",v.addEventListener("mouseenter",()=>{v.style.backgroundColor="var(--fb-background-hover-color)"}),v.addEventListener("mouseleave",()=>{v.style.backgroundColor="transparent"}),v.onclick=()=>{const x=e.default||"#000000";s.push(x),m(x),h(),g()},C=document.createElement("span"),C.className="text-sm text-gray-500",y.appendChild(v),y.appendChild(C),n.appendChild(y)}function h(){if(!y||!C)return;const v=y.querySelector(".add-colour-btn");if(v){const x=s.length>=c;v.disabled=x,v.style.opacity=x?"0.5":"1",v.style.pointerEvents=x?"none":"auto"}C.textContent=`${s.length}/${c===1/0?"\u221E":c}`}if(s.forEach(v=>m(v)),h(),g(),!l){const v=document.createElement("p");v.className="mt-1",v.style.cssText=`
|
|
634
749
|
font-size: var(--fb-font-size-small);
|
|
635
750
|
color: var(--fb-text-secondary-color);
|
|
636
|
-
`,
|
|
751
|
+
`,v.textContent=Ee(e,a),n.appendChild(v)}}function Fo(e,t,n){var r,o,i;const a=[],{scopeRoot:l,skipValidation:u}=n,s=(c,p)=>{var f,m;if(!c)return;const g=`error-${c.getAttribute("name")||Math.random().toString(36).substring(7)}`;let y=document.getElementById(g);p?(c.classList.add("invalid"),c.title=p,y||(y=document.createElement("div"),y.id=g,y.className="error-message",y.style.cssText=`
|
|
637
752
|
color: var(--fb-error-color);
|
|
638
753
|
font-size: var(--fb-font-size-small);
|
|
639
754
|
margin-top: 0.25rem;
|
|
640
|
-
`,
|
|
755
|
+
`,c.nextSibling?(f=c.parentNode)==null||f.insertBefore(y,c.nextSibling):(m=c.parentNode)==null||m.appendChild(y)),y.textContent=p,y.style.display="block"):(c.classList.remove("invalid"),c.title="",y&&y.remove())},d=(c,p,f)=>{const{state:m}=n;if(!p){if(!u&&e.required){const y=$("required",m);return a.push(`${f}: ${y}`),s(c,y),""}return s(c,null),""}const g=Ie(p);if(!u&&!Lt(g)){const y=$("invalidHexColour",m);return a.push(`${f}: ${y}`),s(c,y),p}return s(c,null),g};if(e.multiple){const c=l.querySelectorAll(`[name^="${t}["].colour-hex-input`),p=[];if(c.forEach((f,m)=>{var g;const y=(g=f==null?void 0:f.value)!=null?g:"",C=d(f,y,`${t}[${m}]`);p.push(C)}),!u){const{state:f}=n,m=(r=e.minCount)!=null?r:1,g=(o=e.maxCount)!=null?o:1/0,y=p.filter(C=>C!=="");e.required&&y.length===0&&a.push(`${t}: ${$("required",f)}`),y.length<m&&a.push(`${t}: ${$("minItems",f,{min:m})}`),y.length>g&&a.push(`${t}: ${$("maxItems",f,{max:g})}`)}return{value:p,errors:a}}else{const c=l.querySelector(`[name="${t}"].colour-hex-input`),p=(i=c==null?void 0:c.value)!=null?i:"";if(!u&&e.required&&p===""){const f=$("required",n.state);return a.push(`${t}: ${f}`),s(c,f),{value:"",errors:a}}return{value:d(c,p,t),errors:a}}}function Mo(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 i=o.querySelectorAll(`[name^="${t}["].colour-hex-input`);i.forEach((a,l)=>{if(l<n.length){const u=Ie(n[l]);a.value=u,a.classList.remove("invalid"),a.title="";const s=a.closest(".colour-picker-wrapper");if(s){const d=s.querySelector(".colour-swatch"),c=s.querySelector(".colour-picker-hidden");d&&(d.style.backgroundColor=u),c&&(c.value=u.toLowerCase())}}}),n.length!==i.length&&console.warn(`updateColourField: Multiple field "${t}" has ${i.length} inputs but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const i=o.querySelector(`[name="${t}"].colour-hex-input`);if(i){const a=Ie(n);i.value=a,i.classList.remove("invalid"),i.title="";const l=i.closest(".colour-picker-wrapper");if(l){const u=l.querySelector(".colour-swatch"),s=l.querySelector(".colour-picker-hidden");u&&(u.style.backgroundColor=a),s&&(s.value=a.toLowerCase())}}}}function An(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 ot(e,t){return Math.round(e/t)*t}function Fn(e,t,n,r,o){var i;const a=document.createElement("div");a.className="slider-container";const l=document.createElement("div");l.className="flex items-start gap-3";const u=document.createElement("div");u.className="flex-1";const s=document.createElement("input");s.type="range",s.name=t,s.className="slider-input w-full",s.disabled=o;const d=n.scale||"linear",c=n.min,p=n.max,f=(i=n.step)!=null?i:1;if(d==="exponential"){if(c<=0)throw new Error(`Slider "${n.key}": exponential scale requires min > 0 (got ${c})`);s.min="0",s.max="1000",s.step="1";const h=St(e,c,p);s.value=(h*1e3).toString()}else s.min=c.toString(),s.max=p.toString(),s.step=f.toString(),s.value=e.toString();s.style.cssText=`
|
|
641
756
|
height: 6px;
|
|
642
757
|
border-radius: 3px;
|
|
643
758
|
background: linear-gradient(
|
|
644
759
|
to right,
|
|
645
760
|
var(--fb-primary-color) 0%,
|
|
646
|
-
var(--fb-primary-color) ${(e-
|
|
647
|
-
var(--fb-border-color) ${(e-
|
|
761
|
+
var(--fb-primary-color) ${(e-c)/(p-c)*100}%,
|
|
762
|
+
var(--fb-border-color) ${(e-c)/(p-c)*100}%,
|
|
648
763
|
var(--fb-border-color) 100%
|
|
649
764
|
);
|
|
650
765
|
outline: none;
|
|
651
766
|
transition: background 0.1s ease-in-out;
|
|
652
767
|
cursor: ${o?"not-allowed":"pointer"};
|
|
653
768
|
opacity: ${o?"0.6":"1"};
|
|
654
|
-
`,
|
|
769
|
+
`,u.appendChild(s);const m=document.createElement("div");m.className="flex justify-between",m.style.cssText=`
|
|
655
770
|
font-size: var(--fb-font-size-small);
|
|
656
771
|
color: var(--fb-text-secondary-color);
|
|
657
772
|
margin-top: 4px;
|
|
658
|
-
`;const
|
|
773
|
+
`;const g=document.createElement("span");g.textContent=c.toString();const y=document.createElement("span");y.textContent=p.toString(),m.appendChild(g),m.appendChild(y),u.appendChild(m);const C=document.createElement("span");if(C.className="slider-value",C.style.cssText=`
|
|
659
774
|
min-width: 60px;
|
|
660
775
|
text-align: right;
|
|
661
776
|
font-size: var(--fb-font-size);
|
|
@@ -663,64 +778,64 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
663
778
|
font-family: var(--fb-font-family-mono, monospace);
|
|
664
779
|
font-weight: 500;
|
|
665
780
|
padding-top: 2px;
|
|
666
|
-
`,C.textContent=e.toFixed(
|
|
781
|
+
`,C.textContent=e.toFixed(f<1?2:0),l.appendChild(u),l.appendChild(C),a.appendChild(l),!o){const h=()=>{let v;if(d==="exponential"){const E=parseFloat(s.value)/1e3;v=An(E,c,p),v=ot(v,f),v=Math.max(c,Math.min(p,v))}else v=parseFloat(s.value),v=ot(v,f);C.textContent=v.toFixed(f<1?2:0);const x=(v-c)/(p-c)*100;s.style.background=`linear-gradient(
|
|
667
782
|
to right,
|
|
668
783
|
var(--fb-primary-color) 0%,
|
|
669
|
-
var(--fb-primary-color) ${
|
|
670
|
-
var(--fb-border-color) ${
|
|
784
|
+
var(--fb-primary-color) ${x}%,
|
|
785
|
+
var(--fb-border-color) ${x}%,
|
|
671
786
|
var(--fb-border-color) 100%
|
|
672
|
-
)`,r.instance&&r.instance.triggerOnChange(t,
|
|
787
|
+
)`,r.instance&&r.instance.triggerOnChange(t,v)};s.addEventListener("input",h),s.addEventListener("change",h)}return a}function No(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 i=t.state,a=oe(e,i,t),l=e.default!==void 0?e.default:(e.min+e.max)/2,u=(o=t.prefill[e.key])!=null?o:l,s=Fn(u,r,e,t,a);if(n.appendChild(s),!a){const d=document.createElement("p");d.className="mt-1",d.style.cssText=`
|
|
673
788
|
font-size: var(--fb-font-size-small);
|
|
674
789
|
color: var(--fb-text-secondary-color);
|
|
675
|
-
`,
|
|
790
|
+
`,d.textContent=Ee(e,i),n.appendChild(d)}}function zo(e,t,n,r){var o,i;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=oe(e,a,t),u=t.prefill[e.key]||[],s=Array.isArray(u)?[...u]:[],d=(o=e.minCount)!=null?o:1,c=(i=e.maxCount)!=null?i:1/0,p=e.default!==void 0?e.default:(e.min+e.max)/2;for(;s.length<d;)s.push(p);const f=document.createElement("div");f.className="space-y-3",n.appendChild(f);function m(){f.querySelectorAll(".multiple-slider-item").forEach((x,E)=>{const k=x.querySelector("input[type=range]");k&&k.setAttribute("name",`${r}[${E}]`)})}function g(x=p,E=-1){const k=document.createElement("div");k.className="multiple-slider-item flex items-start gap-2";const b=`${r}[${f.children.length}]`,w=Fn(x,b,e,t,l);return w.style.flex="1",k.appendChild(w),E===-1?f.appendChild(k):f.insertBefore(k,f.children[E]),m(),k}function y(){if(l)return;const x=f.querySelectorAll(".multiple-slider-item"),E=x.length;x.forEach(k=>{let b=k.querySelector(".remove-item-btn");b||(b=document.createElement("button"),b.type="button",b.className="remove-item-btn px-2 py-1 rounded",b.style.cssText=`
|
|
676
791
|
color: var(--fb-error-color);
|
|
677
792
|
background-color: transparent;
|
|
678
793
|
transition: background-color var(--fb-transition-duration);
|
|
679
794
|
margin-top: 8px;
|
|
680
|
-
`,
|
|
795
|
+
`,b.innerHTML="\u2715",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{const F=Array.from(f.children).indexOf(k);f.children.length>d&&(s.splice(F,1),k.remove(),m(),v(),y())},k.appendChild(b));const w=E<=d;b.disabled=w,b.style.opacity=w?"0.5":"1",b.style.pointerEvents=w?"none":"auto"})}let C=null,h=null;if(!l){C=document.createElement("div"),C.className="flex items-center gap-3 mt-2";const x=document.createElement("button");x.type="button",x.className="add-slider-btn px-3 py-1 rounded",x.style.cssText=`
|
|
681
796
|
color: var(--fb-primary-color);
|
|
682
797
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
683
798
|
background-color: transparent;
|
|
684
799
|
font-size: var(--fb-font-size);
|
|
685
800
|
transition: all var(--fb-transition-duration);
|
|
686
|
-
`,
|
|
801
|
+
`,x.textContent="+",x.addEventListener("mouseenter",()=>{x.style.backgroundColor="var(--fb-background-hover-color)"}),x.addEventListener("mouseleave",()=>{x.style.backgroundColor="transparent"}),x.onclick=()=>{s.push(p),g(p),v(),y()},h=document.createElement("span"),h.className="text-sm text-gray-500",C.appendChild(x),C.appendChild(h),n.appendChild(C)}function v(){if(!C||!h)return;const x=C.querySelector(".add-slider-btn");if(x){const E=s.length>=c;x.disabled=E,x.style.opacity=E?"0.5":"1",x.style.pointerEvents=E?"none":"auto"}h.textContent=`${s.length}/${c===1/0?"\u221E":c}`}if(s.forEach(x=>g(x)),v(),y(),!l){const x=document.createElement("p");x.className="mt-1",x.style.cssText=`
|
|
687
802
|
font-size: var(--fb-font-size-small);
|
|
688
803
|
color: var(--fb-text-secondary-color);
|
|
689
|
-
`,
|
|
804
|
+
`,x.textContent=Ee(e,a),n.appendChild(x)}}function qo(e,t,n){var r,o,i;const a=[],{scopeRoot:l,skipValidation:u}=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,d=e.max,c=(r=e.step)!=null?r:1,p=e.scale||"linear",f=(g,y)=>{var C,h;if(!g)return;const v=`error-${g.getAttribute("name")||Math.random().toString(36).substring(7)}`;let x=document.getElementById(v);if(y){if(g.classList.add("invalid"),g.title=y,!x){x=document.createElement("div"),x.id=v,x.className="error-message",x.style.cssText=`
|
|
690
805
|
color: var(--fb-error-color);
|
|
691
806
|
font-size: var(--fb-font-size-small);
|
|
692
807
|
margin-top: 0.25rem;
|
|
693
|
-
`;const E=
|
|
808
|
+
`;const E=g.closest(".slider-container");E&&E.nextSibling?(C=E.parentNode)==null||C.insertBefore(x,E.nextSibling):E&&((h=E.parentNode)==null||h.appendChild(x))}x.textContent=y,x.style.display="block"}else g.classList.remove("invalid"),g.title="",x&&x.remove()},m=(g,y)=>{const{state:C}=n,h=g.value;if(!h){if(!u&&e.required){const x=$("required",C);return a.push(`${y}: ${x}`),f(g,x),null}return f(g,null),null}let v;if(p==="exponential"){const x=parseFloat(h)/1e3;v=An(x,s,d),v=ot(v,c)}else v=parseFloat(h),v=ot(v,c);if(!u){if(v<s){const x=$("minValue",C,{min:s});return a.push(`${y}: ${x}`),f(g,x),v}if(v>d){const x=$("maxValue",C,{max:d});return a.push(`${y}: ${x}`),f(g,x),v}}return f(g,null),v};if(e.multiple){const g=l.querySelectorAll(`input[type="range"][name^="${t}["]`),y=[];if(g.forEach((C,h)=>{const v=m(C,`${t}[${h}]`);y.push(v)}),!u){const{state:C}=n,h=(o=e.minCount)!=null?o:1,v=(i=e.maxCount)!=null?i:1/0,x=y.filter(E=>E!==null);e.required&&x.length===0&&a.push(`${t}: ${$("required",C)}`),x.length<h&&a.push(`${t}: ${$("minItems",C,{min:h})}`),x.length>v&&a.push(`${t}: ${$("maxItems",C,{max:v})}`)}return{value:y,errors:a}}else{const g=l.querySelector(`input[type="range"][name="${t}"]`);return g?{value:m(g,t),errors:a}:(!u&&e.required&&a.push(`${t}: ${$("required",n.state)}`),{value:null,errors:a})}}function Io(e,t,n,r){var o;const{scopeRoot:i}=r,a=e.min,l=e.max,u=(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 d=i.querySelectorAll(`input[type="range"][name^="${t}["]`);d.forEach((c,p)=>{if(p<n.length&&n[p]!==null){const f=Number(n[p]);if(s==="exponential"){const g=St(f,a,l);c.value=(g*1e3).toString()}else c.value=f.toString();const m=c.closest(".slider-container");if(m){const g=m.querySelector(".slider-value");g&&(g.textContent=f.toFixed(u<1?2:0));const y=(f-a)/(l-a)*100;c.style.background=`linear-gradient(
|
|
694
809
|
to right,
|
|
695
810
|
var(--fb-primary-color) 0%,
|
|
696
811
|
var(--fb-primary-color) ${y}%,
|
|
697
812
|
var(--fb-border-color) ${y}%,
|
|
698
813
|
var(--fb-border-color) 100%
|
|
699
|
-
)`}
|
|
814
|
+
)`}c.classList.remove("invalid"),c.title=""}}),n.length!==d.length&&console.warn(`updateSliderField: Multiple field "${t}" has ${d.length} sliders but received ${n.length} values. Consider re-rendering for add/remove.`)}else{const d=i.querySelector(`input[type="range"][name="${t}"]`);if(d&&n!==null&&n!==void 0){const c=Number(n);if(s==="exponential"){const f=St(c,a,l);d.value=(f*1e3).toString()}else d.value=c.toString();const p=d.closest(".slider-container");if(p){const f=p.querySelector(".slider-value");f&&(f.textContent=c.toFixed(u<1?2:0));const m=(c-a)/(l-a)*100;d.style.background=`linear-gradient(
|
|
700
815
|
to right,
|
|
701
816
|
var(--fb-primary-color) 0%,
|
|
702
817
|
var(--fb-primary-color) ${m}%,
|
|
703
818
|
var(--fb-border-color) ${m}%,
|
|
704
819
|
var(--fb-border-color) 100%
|
|
705
|
-
)`}
|
|
820
|
+
)`}d.classList.remove("invalid"),d.title=""}}}function Mn(e){const t={};for(const n of e)n.key&&"default"in n&&n.default!==void 0&&(t[n.key]=n.default);return t}function Nn(e,t){return{...t,...e}}function Tt(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 At=null;function Ro(e){At=e}function lt(e,t){if(!At)throw new Error("renderElement not initialized. Import from components/index.ts");return At(e,t)}function zn(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-2",e.prefillHints.forEach((r,o)=>{const i=document.createElement("button");i.type="button",i.className="fb-prefill-hint",i.textContent=r.label,i.setAttribute("data-hint-values",JSON.stringify(r.values)),i.setAttribute("data-container-key",t),i.setAttribute("data-hint-index",String(o)),n.appendChild(i)}),n}function qn(e,t,n,r){var o,i;const a=document.createElement("div");a.className="border border-gray-200 rounded-lg p-2 bg-gray-50",a.setAttribute("data-container",r);const l=document.createElement("div"),u=e.columns||1;u===1?l.className="space-y-2":l.className=`grid grid-cols-${u} gap-2`;const s=oe(e,t.state,t);if(!s){const m=zn(e,r);m&&a.appendChild(m)}const d=Mn(e.elements),c=((o=t.prefill)==null?void 0:o[e.key])||{},p=Nn(c,d),f={path:ye(t.path,e.key),prefill:p,formData:(i=t.formData)!=null?i:t.prefill,state:t.state,inheritedReadonly:s||t.inheritedReadonly};e.elements.forEach(m=>{var g,y;if(m.type!=="markdown"&&(m.hidden||m.type==="hidden")){const C=(y=(g=c[m.key])!=null?g:"default"in m?m.default:null)!=null?y:null;l.appendChild(De(ye(f.path,m.key),C))}else l.appendChild(lt(m,f))}),a.appendChild(l),n.appendChild(a)}function Ho(e,t){if(e)return"space-y-2";const n=t||1;return n===1?"space-y-2":`grid grid-cols-${n} gap-2`}function In(e,t,n,r){var o,i,a,l;const u=t.state,s=oe(e,u,t),d=s||t.inheritedReadonly,c=document.createElement("div");c.className="border border-gray-200 rounded-lg p-2 bg-gray-50";const p=document.createElement("span");p.className="text-sm text-gray-500";const f=document.createElement("div"),m=e.displayMode==="slides";if(m){f.className="fb-container-slides";const b=e.columns,w=typeof b=="number"&&b>0?`repeat(${b}, 1fr)`:"repeat(auto-fit, minmax(280px, 1fr))";f.style.cssText=`display:grid;grid-template-columns:${w};gap:8px;align-items:start;`}else f.className="space-y-2";if(!s){const b=zn(e,e.key);b&&c.appendChild(b)}const g=(o=e.minCount)!=null?o:0,y=(i=e.maxCount)!=null?i:1/0,C=Array.isArray((a=t.prefill)==null?void 0:a[e.key])?t.prefill[e.key]:null,h=Mn(e.elements),v=()=>f.querySelectorAll(":scope > .containerItem").length,x=()=>{const b=document.createElement("button");return b.type="button",b.className="add-container-btn px-3 py-1 rounded",b.style.cssText=`
|
|
706
821
|
color: var(--fb-primary-color);
|
|
707
822
|
border: var(--fb-border-width) solid var(--fb-primary-color);
|
|
708
823
|
background-color: transparent;
|
|
709
824
|
font-size: var(--fb-font-size);
|
|
710
825
|
transition: all var(--fb-transition-duration);
|
|
711
|
-
`,
|
|
826
|
+
`,b.textContent="+",b.addEventListener("mouseenter",()=>{b.style.backgroundColor="var(--fb-background-hover-color)"}),b.addEventListener("mouseleave",()=>{b.style.backgroundColor="transparent"}),b.onclick=()=>{if(v()<y){const w=v(),F=u.formRoot?Tt(u.formRoot):{},V={state:t.state,path:ye(t.path,`${e.key}[${w}]`),prefill:h,formData:F,inheritedReadonly:d},R=document.createElement("div");R.className="containerItem border border-gray-300 rounded-lg p-2 bg-white",R.setAttribute("data-container-item",`${e.key}[${w}]`);const D=document.createElement("div");if(D.className=Ho(m,e.columns),e.elements.forEach(j=>{var Y;j.type!=="markdown"&&(j.hidden||j.type==="hidden")?D.appendChild(De(ye(V.path,j.key),(Y="default"in j?j.default:null)!=null?Y:null)):D.appendChild(lt(j,V))}),R.appendChild(D),!s){const j=document.createElement("button");j.type="button",j.className="absolute top-2 right-2 px-2 py-1 rounded",j.style.cssText=`
|
|
712
827
|
color: var(--fb-error-color);
|
|
713
828
|
background-color: transparent;
|
|
714
829
|
transition: background-color var(--fb-transition-duration);
|
|
715
|
-
`,
|
|
830
|
+
`,j.textContent="\u2715",j.addEventListener("mouseenter",()=>{j.style.backgroundColor="var(--fb-background-hover-color)"}),j.addEventListener("mouseleave",()=>{j.style.backgroundColor="transparent"}),j.onclick=()=>k(R),R.style.position="relative",R.appendChild(j)}f.appendChild(R),E()}},b},E=()=>{const b=v(),w=c.querySelector(".add-container-btn");w&&(w.disabled=b>=y,w.style.opacity=b>=y?"0.5":"1",w.style.pointerEvents=b>=y?"none":"auto"),p.textContent=`${b}/${y===1/0?"\u221E":y}`},k=b=>{b.remove(),E()};if(C&&Array.isArray(C)&&C.forEach((b,w)=>{var F;const V=Nn(b||{},h),R={state:t.state,path:ye(t.path,`${e.key}[${w}]`),prefill:V,formData:(F=t.formData)!=null?F:t.prefill,inheritedReadonly:d},D=document.createElement("div");D.className="containerItem border border-gray-300 rounded-lg p-2 bg-white",D.setAttribute("data-container-item",`${e.key}[${w}]`);const j=document.createElement("div");if(m)j.className="space-y-2";else{const Y=e.columns||1;Y===1?j.className="space-y-2":j.className=`grid grid-cols-${Y} gap-2`}if(e.elements.forEach(Y=>{var Me,fe;if(Y.type!=="markdown"&&(Y.hidden||Y.type==="hidden")){const Te=(fe=(Me=b==null?void 0:b[Y.key])!=null?Me:"default"in Y?Y.default:null)!=null?fe:null;j.appendChild(De(ye(R.path,Y.key),Te))}else j.appendChild(lt(Y,R))}),D.appendChild(j),!s){const Y=document.createElement("button");Y.type="button",Y.className="absolute top-2 right-2 px-2 py-1 rounded",Y.style.cssText=`
|
|
716
831
|
color: var(--fb-error-color);
|
|
717
832
|
background-color: transparent;
|
|
718
833
|
transition: background-color var(--fb-transition-duration);
|
|
719
|
-
`,
|
|
834
|
+
`,Y.textContent="\u2715",Y.addEventListener("mouseenter",()=>{Y.style.backgroundColor="var(--fb-background-hover-color)"}),Y.addEventListener("mouseleave",()=>{Y.style.backgroundColor="transparent"}),Y.onclick=()=>k(D),D.style.position="relative",D.appendChild(Y)}f.appendChild(D)}),!s)for(;v()<g;){const b=v(),w={state:t.state,path:ye(t.path,`${e.key}[${b}]`),prefill:h,formData:(l=t.formData)!=null?l:t.prefill,inheritedReadonly:d},F=document.createElement("div");F.className="containerItem border border-gray-300 rounded-lg p-2 bg-white",F.setAttribute("data-container-item",`${e.key}[${b}]`);const V=document.createElement("div");if(m)V.className="space-y-2";else{const D=e.columns||1;D===1?V.className="space-y-2":V.className=`grid grid-cols-${D} gap-2`}e.elements.forEach(D=>{var j;D.type!=="markdown"&&(D.hidden||D.type==="hidden")?V.appendChild(De(ye(w.path,D.key),(j="default"in D?D.default:null)!=null?j:null)):V.appendChild(lt(D,w))}),F.appendChild(V);const R=document.createElement("button");R.type="button",R.className="absolute top-2 right-2 px-2 py-1 rounded",R.style.cssText=`
|
|
720
835
|
color: var(--fb-error-color);
|
|
721
836
|
background-color: transparent;
|
|
722
837
|
transition: background-color var(--fb-transition-duration);
|
|
723
|
-
`,R.textContent="\u2715",R.addEventListener("mouseenter",()=>{R.style.backgroundColor="var(--fb-background-hover-color)"}),R.addEventListener("mouseleave",()=>{R.style.backgroundColor="transparent"}),R.onclick=()=>{
|
|
838
|
+
`,R.textContent="\u2715",R.addEventListener("mouseenter",()=>{R.style.backgroundColor="var(--fb-background-hover-color)"}),R.addEventListener("mouseleave",()=>{R.style.backgroundColor="transparent"}),R.onclick=()=>{v()>g&&k(F)},F.style.position="relative",F.appendChild(R),f.appendChild(F)}if(c.appendChild(f),!s){const b=document.createElement("div");b.className="flex items-center gap-3 mt-2",b.appendChild(x()),b.appendChild(p),c.appendChild(b)}E(),n.appendChild(c)}let Ft=null;function Bo(e){Ft=e}function Rn(e,t,n){if(!Ft)throw new Error("validateElement not initialized. Should be set from FormBuilderInstance");return Ft(e,t,n)}function Hn(e,t,n){const r=[],{scopeRoot:o,skipValidation:i,path:a}=n;if(!("elements"in e))return{value:null,errors:r};const l=(u,s,d)=>{var c,p;if(i)return;const{state:f}=n,m="minCount"in d&&(c=d.minCount)!=null?c:0,g="maxCount"in d&&(p=d.maxCount)!=null?p:1/0;d.required&&s.length===0&&r.push(`${u}: ${$("required",f)}`),s.length<m&&r.push(`${u}: ${$("minItems",f,{min:m})}`),s.length>g&&r.push(`${u}: ${$("maxItems",f,{max:g})}`)};if("multiple"in e&&e.multiple){const u=[],s=o.querySelectorAll("[data-container-item]");return Array.from(s).filter(d=>{const c=d.getAttribute("data-container-item")||"";if(!c.startsWith(`${t}[`))return!1;const p=c.slice(t.length);return/^\[\d+\]$/.test(p)}).forEach(d=>{const c={},p=(d.getAttribute("data-container-item")||"").match(/\[(\d+)\]$/),f=p?parseInt(p[1],10):0;e.elements.forEach(m=>{var g;if(m.enableIf)try{const h=(g=n.instance)!=null&&g.getState().formRoot?Tt(n.instance.getState().formRoot):{};if(!ze(m.enableIf,h,c))return}catch(h){console.error(`Error evaluating enableIf for field "${m.key}" in container "${t}[${f}]":`,h)}const y=`${t}[${f}].${m.key}`,C=Rn({...m,key:y},{path:a},d);C.spread&&C.value!==null&&typeof C.value=="object"?Object.assign(c,C.value):c[m.key]=C.value}),u.push(c)}),l(t,u,e),{value:u,errors:r}}else{const u={},s=o.querySelector(`[data-container="${t}"]`)||o;return e.elements.forEach(d=>{var c;if(d.enableIf)try{const p=(c=n.instance)!=null&&c.getState().formRoot?Tt(n.instance.getState().formRoot):{};if(!ze(d.enableIf,p,u))return}catch(p){console.error(`Error evaluating enableIf for field "${d.key}" in container "${t}":`,p)}{const p=`${t}.${d.key}`,f=Rn({...d,key:p},{path:a},s);f.spread&&f.value!==null&&typeof f.value=="object"?Object.assign(u,f.value):u[d.key]=f.value}}),{value:u,errors:r}}}function Bn(e,t,n,r){const{instance:o,scopeRoot:i}=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((l,u)=>{Ye(l)&&e.elements.forEach(s=>{var d,c;if(s.type==="markdown"||!s.key)return;const p=`${t}[${u}].${s.key}`;if(s.type==="richinput"&&s.flatOutput){const f=s,m=(d=f.textKey)!=null?d:"text",g=(c=f.filesKey)!=null?c:"files",y=l,C={};m in y&&(C[m]=y[m]),g in y&&(C[g]=y[g]),Object.keys(C).length>0&&o.updateField(p,C)}else{const f=l[s.key];f!==void 0&&o.updateField(p,f)}})});const a=i.querySelectorAll(`[data-container-item^="${t}["]`);n.length!==a.length&&console.warn(`updateContainerField: Multiple container field "${t}" item count mismatch. Consider re-rendering for add/remove.`)}else{if(!Ye(n)){console.warn(`updateContainerField: Expected object for container field "${t}", got ${typeof n}`);return}e.elements.forEach(a=>{var l,u;if(a.type==="markdown"||!a.key)return;const s=`${t}.${a.key}`;if(a.type==="richinput"&&a.flatOutput){const d=a,c=(l=d.textKey)!=null?l:"text",p=(u=d.filesKey)!=null?u:"files",f=n,m={};c in f&&(m[c]=f[c]),p in f&&(m[p]=f[p]),Object.keys(m).length>0&&o.updateField(s,m)}else{const d=n[a.key];d!==void 0&&o.updateField(s,d)}})}}function Do(e,t,n,r){var o,i;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 a={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&&Ye(e.repeat)),minCount:(o=e.repeat)==null?void 0:o.min,maxCount:(i=e.repeat)==null?void 0:i.max};a.multiple?In(a,t,n):qn(a,t,n,r)}function Dn(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&&Ye(r.repeat)),minCount:(t=r.repeat)==null?void 0:t.min,maxCount:(n=r.repeat)==null?void 0:n.max}}function jo(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=Dn(e);return Hn(r,t,n)}function Oo(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=Dn(e);return Bn(o,t,n,r)}function Uo(e){return e!==null&&typeof e=="object"&&"row"in e&&"col"in e&&"rowspan"in e&&"colspan"in e}function Po(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 Wo(e){return Uo(e)?{top:e.row,left:e.col,bottom:e.row+e.rowspan-1,right:e.col+e.colspan-1}:Po(e)?e:null}function Re(e){return e.map(Wo).filter(t=>t!==null)}function jn(e,t){return Array.from({length:e},()=>Array.from({length:t},()=>""))}function Mt(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 i=r+1;i<e.length;i++){const a=e[i];if(o.top<=a.bottom&&o.bottom>=a.top&&o.left<=a.right&&o.right>=a.left)return`Merges ${r} and ${i} overlap`}}return null}function On(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 it(e,t,n){var r;return(r=n.find(o=>o.top===e&&o.left===t))!=null?r:null}function Se(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 He(e){const t=document.createElement("button");return t.type="button",t.textContent=e.label,t.title=e.title,t.style.cssText=`
|
|
724
839
|
position: absolute;
|
|
725
840
|
width: ${e.size}px;
|
|
726
841
|
height: ${e.size}px;
|
|
@@ -740,7 +855,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
740
855
|
box-shadow: 0 1px 4px rgba(0,0,0,0.2);
|
|
741
856
|
transition: transform 0.1s, opacity 0.1s;
|
|
742
857
|
pointer-events: all;
|
|
743
|
-
`,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
|
|
858
|
+
`,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 Vo(e,t){const{cells:n,merges:r=[]}=e;if(n.length===0)return;const o=n[0].length,i=document.createElement("table");i.style.cssText=`
|
|
744
859
|
width: 100%;
|
|
745
860
|
border-collapse: collapse;
|
|
746
861
|
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
@@ -748,13 +863,13 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
748
863
|
font-size: var(--fb-font-size);
|
|
749
864
|
font-family: var(--fb-font-family);
|
|
750
865
|
color: var(--fb-text-color);
|
|
751
|
-
`,n.forEach((
|
|
866
|
+
`,n.forEach((l,u)=>{var s,d;const c=(u===0?i.createTHead():(s=i.tBodies[0])!=null?s:i.createTBody()).insertRow();for(let p=0;p<o;p++){if(On(u,p,r))continue;const f=it(u,p,r),m=document.createElement(u===0?"th":"td");if(f){const g=f.bottom-f.top+1,y=f.right-f.left+1;g>1&&(m.rowSpan=g),y>1&&(m.colSpan=y)}m.textContent=(d=l[p])!=null?d:"",m.style.cssText=`
|
|
752
867
|
padding: 6px 10px;
|
|
753
868
|
border: var(--fb-border-width) solid var(--fb-border-color);
|
|
754
869
|
text-align: left;
|
|
755
870
|
vertical-align: top;
|
|
756
|
-
${
|
|
757
|
-
`,
|
|
871
|
+
${u===0?"background-color: var(--fb-background-hover-color); font-weight: 600;":""}
|
|
872
|
+
`,c.appendChild(m)}});const a=document.createElement("div");a.style.cssText="overflow-x: auto; max-width: 100%;",a.appendChild(i),t.appendChild(a)}function _o(e,t,n,r,o,i){if(e.contentEditable==="true")return;e.contentEditable="true",e.focus();const a=document.createRange(),l=window.getSelection();a.selectNodeContents(e),a.collapse(!1),l==null||l.removeAllRanges(),l==null||l.addRange(a);function u(){var c;e.contentEditable="inherit";const p=r();p[t]&&(p[t][n]=(c=e.textContent)!=null?c:""),o()}function s(c){var p,f,m,g;const y=r(),C=(f=(p=y[0])==null?void 0:p.length)!=null?f:0;if(c.key==="Escape"){e.contentEditable="inherit",e.textContent=(g=(m=y[t])==null?void 0:m[n])!=null?g:"",e.removeEventListener("keydown",s),e.removeEventListener("blur",d);return}if(c.key==="Enter"&&!c.shiftKey){c.preventDefault(),c.stopPropagation(),u(),e.removeEventListener("keydown",s),e.removeEventListener("blur",d);const h=t+1<y.length?t+1:t;i(h,n);return}if(c.key==="Tab"){c.preventDefault(),c.stopPropagation(),u(),e.removeEventListener("keydown",s),e.removeEventListener("blur",d);let h=t,v=c.shiftKey?n-1:n+1;v<0&&(v=C-1,h=Math.max(0,t-1)),v>=C&&(v=0,h=Math.min(y.length-1,t+1)),i(h,v)}}function d(){e.contentEditable==="true"&&(u(),e.removeEventListener("keydown",s),e.removeEventListener("blur",d))}e.addEventListener("keydown",s),e.addEventListener("blur",d)}function Ko(){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 Jo(e,t){Ko();const n=document.createElement("div");n.className="fb-table-loading-overlay",n.style.cssText=`
|
|
758
873
|
position: absolute; top: 0; left: 0; right: 0; bottom: 0;
|
|
759
874
|
background: rgba(255,255,255,0.8); display: flex;
|
|
760
875
|
align-items: center; justify-content: center; flex-direction: column;
|
|
@@ -763,13 +878,13 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
763
878
|
width: 24px; height: 24px; border: 3px solid var(--fb-border-color, #ccc);
|
|
764
879
|
border-top-color: var(--fb-primary-color, #0066cc); border-radius: 50%;
|
|
765
880
|
animation: fb-spin 0.8s linear infinite;
|
|
766
|
-
`;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
|
|
881
|
+
`;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 Yo(e,t,n,r,o){var i,a,l,u,s,d,c,p;const f=r.state,m=r.instance,g=e.mergeAllowed!==!1,y=(a=(i=e.fieldNames)==null?void 0:i.cells)!=null?a:"cells",C=(u=(l=e.fieldNames)==null?void 0:l.merges)!=null?u:"merges",h=t.cells.length>0?t.cells.map(A=>[...A]):jn((s=e.rows)!=null?s:3,(d=e.columns)!=null?d:3);let v=t.merges?[...t.merges]:[];const x={anchor:null,focus:null,dragging:!1},E=document.createElement("input");E.type="hidden",E.name=n,E.value=JSON.stringify({[y]:h,[C]:v}),o.appendChild(E);function k(){E.value=JSON.stringify({[y]:h,[C]:v}),m&&m.triggerOnChange(n,{[y]:h,[C]:v})}E._applyExternalUpdate=A=>{h.length=0,A.cells.forEach(T=>h.push([...T])),v.length=0,A.merges&&A.merges.forEach(T=>v.push({...T})),x.anchor=null,x.focus=null,k(),N()};const b=document.createElement("div");b.style.cssText="position: relative; padding: 20px 20px 20px 24px; overflow-x: auto; max-width: 100%;";const w=document.createElement("table");w.style.cssText=`
|
|
767
882
|
border-collapse: collapse;
|
|
768
883
|
font-size: var(--fb-font-size);
|
|
769
884
|
font-family: var(--fb-font-family);
|
|
770
885
|
color: var(--fb-text-color);
|
|
771
886
|
table-layout: fixed;
|
|
772
|
-
`,
|
|
887
|
+
`,b.appendChild(w);const F=(p=(c=e.importAccept)==null?void 0:c.map(A=>`.${A.toLowerCase()}`))!=null?p:[];async function V(A){var T,S,B;if(!f.config.parseTableFile)return;if(F.length>0){const M=A.name.toLowerCase().replace(/^.*(\.[^.]+)$/,"$1");if(!F.includes(M))return}const O=Jo(b,$("tableImporting",f));try{const M=await f.config.parseTableFile(A),ee=M.cells,P=(T=M.merges)!=null?T:[];if(P.length>0){const W=Mt(P,ee.length,(B=(S=ee[0])==null?void 0:S.length)!=null?B:0);if(W)throw new Error(W)}h.length=0,ee.forEach(W=>h.push([...W])),v.length=0,P.forEach(W=>v.push({...W})),x.anchor=null,x.focus=null,k(),N()}catch(M){const ee=M instanceof Error?M.message:String(M);console.error($("tableImportError",f).replace("{error}",ee))}finally{O.remove()}}if(e.importAccept&&f.config.parseTableFile){const A=document.createElement("button");A.type="button",A.title=$("tableImportFile",f),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=`
|
|
773
888
|
position: absolute; top: 2px; left: 2px;
|
|
774
889
|
width: 20px; height: 20px;
|
|
775
890
|
padding: 0;
|
|
@@ -779,7 +894,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
779
894
|
background: transparent;
|
|
780
895
|
cursor: pointer;
|
|
781
896
|
z-index: 2;
|
|
782
|
-
`,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=
|
|
897
|
+
`,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=F.join(","),T.style.display="none",b.appendChild(T),A.addEventListener("click",()=>{T.click()}),T.addEventListener("change",()=>{var B;const O=(B=T.files)==null?void 0:B[0];O&&V(O),T.value=""}),b.appendChild(A);let S=0;b.addEventListener("dragenter",B=>{B.preventDefault(),S++,S===1&&(b.style.outline="2px dashed var(--fb-primary-color, #0066cc)",b.style.outlineOffset="-2px")}),b.addEventListener("dragover",B=>{B.preventDefault(),B.dataTransfer&&(B.dataTransfer.dropEffect="copy")}),b.addEventListener("dragleave",B=>{B.preventDefault(),S--,S<=0&&(S=0,b.style.outline="",b.style.outlineOffset="")}),b.addEventListener("drop",B=>{var O,M;B.preventDefault(),S=0,b.style.outline="",b.style.outlineOffset="";const ee=(M=(O=B.dataTransfer)==null?void 0:O.files)==null?void 0:M[0];ee&&V(ee)})}o.appendChild(b);const R=document.createElement("div");R.style.cssText=`
|
|
783
898
|
position: fixed;
|
|
784
899
|
display: none;
|
|
785
900
|
background: white;
|
|
@@ -790,7 +905,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
790
905
|
z-index: 1000;
|
|
791
906
|
gap: 4px;
|
|
792
907
|
flex-direction: column;
|
|
793
|
-
`,o.appendChild(R);function
|
|
908
|
+
`,o.appendChild(R);function D(A,T){const S=document.createElement("button");return S.type="button",S.textContent=A,S.style.cssText=`
|
|
794
909
|
padding: 4px 10px;
|
|
795
910
|
font-size: var(--fb-font-size-small);
|
|
796
911
|
color: var(--fb-text-color);
|
|
@@ -800,8 +915,8 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
800
915
|
cursor: pointer;
|
|
801
916
|
white-space: nowrap;
|
|
802
917
|
text-align: left;
|
|
803
|
-
`,S.addEventListener("mouseenter",()=>{S.style.background="var(--fb-background-hover-color)"}),S.addEventListener("mouseleave",()=>{S.style.background="transparent"}),S.addEventListener("click",()=>{
|
|
804
|
-
`),ce=`<table>${W.join("")}</table>`;(U=F.clipboardData)==null||U.setData("text/plain",ue),(V=F.clipboardData)==null||V.setData("text/html",ce)},k.onpaste=F=>{var Q,O,U,V,Y,j,G,_,ne;const Z=g.anchor;if(!Z)return;const W=(O=(Q=F.clipboardData)==null?void 0:Q.getData("text/plain"))!=null?O:"",ue=W.includes(" ")||W.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),Te=parseInt((j=(Y=ce.closest("td"))==null?void 0:Y.getAttribute("data-col"))!=null?j:"0",10);b[de]&&(b[de][Te]=(G=ce.textContent)!=null?G:"")}if(!W.trim())return;const P=W.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=Z.row,me=Z.col,he=se+P.length;for(;b.length<he;)b.push(Array((ne=(_=b[0])==null?void 0:_.length)!=null?ne:1).fill(""));const ye=Math.max(...P.map(de=>de.length)),Me=me+ye;if(b[0]&&Me>b[0].length){const de=Me-b[0].length;b.forEach(Te=>{for(let Je=0;Je<de;Je++)Te.push("")})}for(let de=0;de<P.length;de++)for(let Te=0;Te<P[de].length;Te++){const Je=se+de,Cl=me+Te;b[Je]&&(b[Je][Cl]=P[de][Te])}w(),M()}}const q=He({label:"+",title:$("tableAddColumn",d),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=q.dataset.afterCol)!=null?A:"0",10);_e(T)}});q.style.position="absolute",q.style.display="none",x.appendChild(q);const H=He({label:"+",title:$("tableAddRow",d),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=H.dataset.afterRow)!=null?A:"0",10);we(T)}});H.style.position="absolute",H.style.display="none",x.appendChild(H);let ee=[],te=[];const ae=He({label:"+",title:$("tableAddColumn",d),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>_e()});ae.style.position="absolute",ae.style.display="none",x.appendChild(ae);const ie=He({label:"+",title:$("tableAddRow",d),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>we()});ie.style.position="absolute",ie.style.display="none",x.appendChild(ie);function pe(){var A,T;ee.forEach(O=>O.remove()),ee=[],te.forEach(O=>O.remove()),te=[];const S=b.length>0?b[0].length:0,B=b.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=He({label:"\xD7",title:$("tableRemoveColumn",d),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),ee.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=He({label:"\xD7",title:$("tableRemoveRow",d),size:16,color:"var(--fb-error-color, #dc3545)",textColor:"white",onClick:()=>ht(Y)});j.setAttribute("data-action","remove-row"),j.setAttribute("data-row",String(Y)),j.style.position="absolute",j.style.display="none",x.appendChild(j),te.push(j)}}function D(O,U,V,Y,j){var G;const _=j?Array.from(k.querySelectorAll("thead td[data-col]")):[];let ne=-1,Z=1/0,W=-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<Z&&(Z=he,ne=P);const ye=Math.abs(O-se.right);ye<ce&&ye<20&&(ce=ye,W=se.right-U.left+Y,ue=parseInt((G=_[P].getAttribute("data-col"))!=null?G:"0",10))}ee.forEach((P,se)=>{if(!j||se!==ne){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?(q.style.display="flex",q.style.left=`${W-10}px`,q.style.top=`${V.top-U.top-10}px`,q.dataset.afterCol=String(ue)):q.style.display="none"}function F(O,U,V,Y,j){var G;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 ne=-1,Z=1/0,W=-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<Z&&(Z=he,ne=P);const ye=Math.abs(O-se.bottom);if(ye<ce&&ye<14){ce=ye,W=se.bottom-U.top;const Me=_[P].querySelector("td[data-row]");ue=parseInt((G=Me==null?void 0:Me.getAttribute("data-row"))!=null?G:"0",10)}}te.forEach((P,se)=>{if(!j||se!==ne){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?(H.style.display="flex",H.style.top=`${W-10}px`,H.style.left=`${V.left-U.left+Y-10}px`,H.dataset.afterRow=String(ue)):H.style.display="none"}let Q=!1;x.onmousemove=O=>{const U=O.target;if(U.tagName==="BUTTON"&&U.parentElement===x||Q)return;Q=!0;const V=O.clientX,Y=O.clientY;requestAnimationFrame(()=>{Q=!1;const j=x.getBoundingClientRect(),G=k.getBoundingClientRect(),_=x.scrollLeft,ne=Y>=j.top&&Y<G.top+4,Z=V>=j.left&&V<G.left+4,W=Math.min(G.right,j.right),ue=V>W-20&&V<=j.right,ce=Y>G.bottom-4&&Y<=j.bottom+20;if(D(V,j,G,_,ne),F(Y,j,G,_,Z),ae.style.display=ue?"flex":"none",ue&&(ae.style.left=`${j.right-j.left+_-20}px`,ae.style.top=`${(G.top+G.bottom)/2-j.top-10}px`),ie.style.display=ce?"flex":"none",ce){const P=(j.left+j.right)/2-j.left+_;ie.style.left=`${P-10}px`,ie.style.top=`${G.bottom-j.top-10}px`}})},x.onmouseleave=()=>{ee.forEach(O=>{O.style.display="none"}),te.forEach(O=>{O.style.display="none"}),q.style.display="none",H.style.display="none",ae.style.display="none",ie.style.display="none"}}M()}function Bo(e){var t,n;return{cells:Bn((t=e.rows)!=null?t:3,(n=e.columns)!=null?n:3),merges:[]}}function zt(e){return e!==null&&typeof e=="object"&&"cells"in e&&Array.isArray(e.cells)}function Nt(e,t){return e!==null&&typeof e=="object"&&t in e&&Array.isArray(e[t])}function Do(e,t,n,r){var o,i,l,a;const c=t.state,s=le(e,c,t),p=t.prefill[e.key],u=(i=(o=e.fieldNames)==null?void 0:o.cells)!=null?i:"cells",f=(a=(l=e.fieldNames)==null?void 0:l.merges)!=null?a:"merges";let d;if(zt(p))d={cells:p.cells,merges:p.merges?Re(p.merges):[]};else if(p&&Nt(p,u)){const m=p[f];d={cells:p[u],merges:m?Re(m):[]}}else if(zt(e.default))d={cells:e.default.cells,merges:e.default.merges?Re(e.default.merges):[]};else if(e.default&&Nt(e.default,u)){const m=e.default[f];d={cells:e.default[u],merges:m?Re(m):[]}}else d=Bo(e);if(d.merges&&d.merges.length>0){const m=d.cells.length,v=m>0?d.cells[0].length:0,y=Mt(d.merges,m,v);y&&(console.warn(`Table "${e.key}": invalid prefill merges stripped (${y})`),d={...d,merges:[]})}s?No(d,n):Ho(e,d,r,t,n)}function jo(e,t,n){var r,o;const{scopeRoot:i,skipValidation:l}=n,a=[],c=(o=(r=e.fieldNames)==null?void 0:r.cells)!=null?o:"cells",s=i.querySelector(`[name="${t}"]`);if(!s)return{value:null,errors:a};let p=null;try{p=JSON.parse(s.value)}catch(u){return a.push(`${t}: invalid table data`),{value:null,errors:a}}if(!l&&e.required){const u=p[c];u!=null&&u.some(f=>f.some(d=>d.trim()!==""))||a.push(`${t}: ${$("required",n.state)}`)}return{value:p,errors:a}}function Oo(e,t,n,r){var o,i,l,a;const{scopeRoot:c}=r,s=(i=(o=e.fieldNames)==null?void 0:o.cells)!=null?i:"cells",p=(a=(l=e.fieldNames)==null?void 0:l.merges)!=null?a:"merges",u=c.querySelector(`[name="${t}"]`);if(!u){console.warn(`updateTableField: no hidden input found for "${t}". Re-render to reflect new data.`);return}let f=null;if(zt(n))f={cells:n.cells,merges:n.merges?Re(n.merges):[]};else if(n&&Nt(n,s)){const d=n[p];f={cells:n[s],merges:d?Re(d):[]}}f&&u._applyExternalUpdate?u._applyExternalUpdate(f):u.value=JSON.stringify(n)}function Uo(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 It(e,t){var n,r,o,i;const l=new Map,a=new Map;for(const c of e){const s=t.resourceIndex.get(c),p=(n=s==null?void 0:s.name)!=null?n:c;a.set(p,((r=a.get(p))!=null?r:0)+1)}for(const c of e){const s=t.resourceIndex.get(c),p=(o=s==null?void 0:s.name)!=null?o:c;((i=a.get(p))!=null?i:1)>1&&s?l.set(c,`${p} (${sr(s.size)})`):l.set(c,p)}return l}function qt(e){return e?e.type.startsWith("image/"):!1}function jn(e,t){const n=It(e,t),r=new Map;for(const o of e){const i=n.get(o);i&&r.set(i,o)}return r}function Rt(e){return/\s/.test(e)||e.includes('"')?`@"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:`@${e}`}function ct(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 i="";for(;r<n&&e[r]!=='"';)e[r]==="\\"&&r+1<n?(i+=e[r+1],r+=2):(i+=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:i}))}else if(r<n&&!/\s/.test(e[r])){const i=r;for(;r<n&&!/\s/.test(e[r]);)r++;const l=e.slice(i,r);t.push({start:o,end:r,raw:e.slice(o,r),name:l})}}else r++;return t}function Po(e,t){if(t.size===0)return[];const n=ct(e),r=[];for(const o of n){const i=t.get(o.name);i&&r.push({start:o.start,end:o.end,name:o.name,rid:i})}return r}function Vo(e,t){const n=Po(e,t);if(n.length===0)return e;let r="",o=0;for(const i of n)r+=e.slice(o,i.start),r+=`@${i.rid}`,o=i.end;return r+=e.slice(o),r}function On(e,t,n){const r=It(t,n),o=new Map;for(const c of t){const s=r.get(c);s&&o.set(c,s)}const i=ct(e);if(i.length===0)return e;let l="",a=0;for(const c of i){l+=e.slice(a,c.start);const s=o.get(c.name);s?l+=Rt(s):l+=c.raw,a=c.end}return l+=e.slice(a),l}function Un(e,t,n,r){if(ve(e),n!=null&&n.file&&qt(n)){const o=document.createElement("img");o.alt=n.name,o.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;";const i=new FileReader;i.onload=l=>{var a;o.src=((a=l.target)==null?void 0:a.result)||""},i.readAsDataURL(n.file),e.appendChild(o)}else if(r.config.getThumbnail){r.config.getThumbnail(t).then(i=>{var l;if(!i||!e.isConnected)return;const a=document.createElement("img");a.alt=(l=n==null?void 0:n.name)!=null?l:t,a.src=i,a.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;",ve(e),e.appendChild(a)}).catch(i=>{var l,a;(a=(l=r.config).onThumbnailError)==null||a.call(l,i,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 i=document.createElement("span");i.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);",i.textContent=n.name,o.appendChild(i)}e.appendChild(o)}}function Pn(e,t,n,r){if(ve(e),n!=null&&n.file&&qt(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 i=new FileReader;i.onload=l=>{var a;o.src=((a=l.target)==null?void 0:a.result)||""},i.readAsDataURL(n.file),e.appendChild(o)}else r.config.getThumbnail&&r.config.getThumbnail(t).then(o=>{var i;if(!o||!e.isConnected)return;const l=document.createElement("img");l.alt=(i=n==null?void 0:n.name)!=null?i: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 i,l;(l=(i=r.config).onThumbnailError)==null||l.call(i,o,t)})}function Vn(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)),i=n.top-r.height-8,l=n.bottom+8,a=i>=4?i:l;e.style.left=`${o}px`,e.style.top=`${Math.max(4,a)}px`}function Wn(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=`
|
|
918
|
+
`,S.addEventListener("mouseenter",()=>{S.style.background="var(--fb-background-hover-color)"}),S.addEventListener("mouseleave",()=>{S.style.background="transparent"}),S.addEventListener("click",()=>{Y(),T()}),S}function j(A,T){if(!g)return;R.innerHTML="",R.style.display="flex";const S=Se(x),B=S&&(S.r1!==S.r2||S.c1!==S.c2),O=x.anchor&&it(x.anchor.row,x.anchor.col,v);if(B&&R.appendChild(D($("tableMergeCells",f),q)),O&&R.appendChild(D($("tableSplitCell",f),z)),!R.firstChild){Y();return}const M=140,ee=R.children.length*32+8,P=window.innerWidth,W=window.innerHeight,K=A+M>P?A-M:A,X=T+ee>W?T-ee:T;R.style.left=`${K}px`,R.style.top=`${X}px`}function Y(){R.style.display="none"}const Me=new AbortController;document.addEventListener("mousedown",A=>{if(!o.isConnected){Me.abort();return}R.contains(A.target)||Y()},{signal:Me.signal});function fe(){const A=Se(x);w.querySelectorAll("td[data-row]").forEach(T=>{const S=parseInt(T.getAttribute("data-row")||"0",10),B=parseInt(T.getAttribute("data-col")||"0",10),O=x.anchor!==null&&x.anchor.row===S&&x.anchor.col===B,M=A!==null&&S>=A.r1&&S<=A.r2&&B>=A.c1&&B<=A.c2;T.style.outline=O?"2px solid var(--fb-primary-color, #0066cc)":"",T.style.outlineOffset=O?"-2px":"",S===0?T.style.backgroundColor="var(--fb-background-hover-color)":T.style.backgroundColor=M&&!O?"rgba(0,102,204,0.08)":""})}function Te(A,T){x.anchor={row:A,col:T},x.focus=null,fe(),w.focus()}function _e(A,T){const S=w.querySelector(`td[data-row="${A}"][data-col="${T}"]`);if(!S)return;const B=S.querySelector("span");B&&(x.anchor={row:A,col:T},x.focus=null,fe(),_o(B,A,T,()=>h,k,Te))}function we(A){var T;const S=h.length>0?h[0].length:(T=e.columns)!=null?T:3,B=Array(S).fill(""),O=A!==void 0?A+1:h.length;h.splice(O,0,B),v=v.map(M=>M.top>=O?{...M,top:M.top+1,bottom:M.bottom+1}:M.top<O&&M.bottom>=O?{...M,bottom:M.bottom+1}:M),k(),N()}function pt(A){if(h.length<=1)return;const T=A!==void 0?A:x.anchor?x.anchor.row:h.length-1;v=v.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),x.anchor&&x.anchor.row>=h.length&&(x.anchor={row:h.length-1,col:x.anchor.col}),k(),N()}function Ke(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(O=>O.splice(B,0,"")),v=v.map(O=>O.left>=B?{...O,left:O.left+1,right:O.right+1}:O.left<B&&O.right>=B?{...O,right:O.right+1}:O),k(),N()}function L(A){if(h.length===0||h[0].length<=1)return;const T=A!==void 0?A:x.anchor?x.anchor.col:h[0].length-1;v=v.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)),x.anchor&&x.anchor.col>=h[0].length&&(x.anchor={row:x.anchor.row,col:h[0].length-1}),k(),N()}function q(){var A,T;if(!g)return;const S=Se(x);if(!S)return;const{r1:B,c1:O,r2:M,c2:ee}=S;if(B===M&&O===ee)return;v=v.filter(U=>!(U.top<=M&&U.bottom>=B&&U.left<=ee&&U.right>=O));const P=h[B][O];for(let U=B;U<=M;U++)for(let Z=O;Z<=ee;Z++)(U!==B||Z!==O)&&(h[U][Z]="");h[B][O]=P;const W={top:B,left:O,bottom:M,right:ee},K=[...v,W],X=Mt(K,h.length,(T=(A=h[0])==null?void 0:A.length)!=null?T:0);if(X){console.warn("Merge validation failed:",X);return}v.push(W),x.anchor={row:B,col:O},x.focus=null,k(),N()}function z(){if(!g||!x.anchor)return;const{row:A,col:T}=x.anchor,S=v.findIndex(B=>B.top===A&&B.left===T);S!==-1&&(v.splice(S,1),x.focus=null,k(),N())}function N(){var A,T;w.innerHTML="";const S=h.length,B=S>0?h[0].length:0,O=Se(x);for(let M=0;M<S;M++){const ee=(M===0?(A=w.tHead)!=null?A:w.createTHead():(T=w.tBodies[0])!=null?T:w.createTBody()).insertRow();for(let P=0;P<B;P++){if(On(M,P,v))continue;const W=it(M,P,v),K=document.createElement("td");if(K.setAttribute("data-row",String(M)),K.setAttribute("data-col",String(P)),W){const Q=W.bottom-W.top+1,J=W.right-W.left+1;Q>1&&(K.rowSpan=Q),J>1&&(K.colSpan=J)}const X=O!==null&&M>=O.r1&&M<=O.r2&&P>=O.c1&&P<=O.c2,U=x.anchor!==null&&x.anchor.row===M&&x.anchor.col===P;K.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;",M===0?"background-color: var(--fb-background-hover-color); font-weight: 600;":"",X&&!U?"background-color: rgba(0,102,204,0.08);":"",U?"outline: 2px solid var(--fb-primary-color, #0066cc); outline-offset: -2px;":""].join(" ");const Z=document.createElement("span");Z.textContent=h[M][P],Z.style.cssText="display: block; min-height: 1.4em; white-space: pre-wrap; word-break: break-word; outline: none;",K.appendChild(Z);const G=M,re=P;K.addEventListener("mousedown",Q=>{if(Q.target.tagName!=="BUTTON"&&Q.target.contentEditable!=="true"){if(Q.button===2){const J=Se(x);if(J&&G>=J.r1&&G<=J.r2&&re>=J.c1&&re<=J.c2)return}Q.shiftKey&&x.anchor?(Q.preventDefault(),x.focus={row:G,col:re},x.dragging=!1,fe()):(x.anchor={row:G,col:re},x.focus=null,x.dragging=!0,fe())}}),K.addEventListener("mouseup",Q=>{if(Q.target.tagName!=="BUTTON"&&x.dragging){x.dragging=!1;const J=Se(x);(!J||J.r1===J.r2&&J.c1===J.c2)&&_e(G,re)}}),K.addEventListener("mousemove",Q=>{if(x.dragging&&Q.buttons===1){const J=x.anchor;J&&(J.row!==G||J.col!==re)&&(x.focus={row:G,col:re},fe())}}),K.addEventListener("contextmenu",Q=>{if(!g)return;const J=Se(x),ce=J&&(J.r1!==J.r2||J.c1!==J.c2),ue=x.anchor&&it(x.anchor.row,x.anchor.col,v);(ce||ue)&&(Q.preventDefault(),j(Q.clientX,Q.clientY))}),ee.appendChild(K)}}pe(),w.setAttribute("tabindex","0"),w.onkeydown=M=>{var ee,P;if(w.querySelector("[contenteditable='true']"))return;const W=x.anchor;if(!W)return;const K=h.length,X=K>0?h[0].length:0,U={ArrowUp:[-1,0],ArrowDown:[1,0],ArrowLeft:[0,-1],ArrowRight:[0,1]};if(U[M.key]){M.preventDefault();const[Z,G]=U[M.key],re=Math.max(0,Math.min(K-1,W.row+Z)),Q=Math.max(0,Math.min(X-1,W.col+G));M.shiftKey?(x.focus={row:re,col:Q},fe()):Te(re,Q);return}if(M.key==="Enter"){M.preventDefault(),_e(W.row,W.col);return}if(M.key==="Tab"){M.preventDefault();const Z=(P=(ee=h[0])==null?void 0:ee.length)!=null?P:0;let G=W.row,re=M.shiftKey?W.col-1:W.col+1;re<0&&(re=Z-1,G=Math.max(0,G-1)),re>=Z&&(re=0,G=Math.min(h.length-1,G+1)),Te(G,re);return}if(g&&M.key==="m"&&M.ctrlKey&&!M.shiftKey){M.preventDefault(),q();return}g&&M.key==="M"&&M.ctrlKey&&M.shiftKey&&(M.preventDefault(),z())},w.oncopy=M=>{var ee,P,W,K;const X=Se(x);if(!X)return;M.preventDefault();const{r1:U,c1:Z,r2:G,c2:re}=X,Q=[],J=[];for(let _=U;_<=G;_++){const se=[],me=[];for(let he=Z;he<=re;he++){const ge=(P=(ee=h[_])==null?void 0:ee[he])!=null?P:"";se.push(ge);const Ne=ge.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");me.push(`<td>${Ne}</td>`)}Q.push(se.join(" ")),J.push(`<tr>${me.join("")}</tr>`)}const ce=Q.join(`
|
|
919
|
+
`),ue=`<table>${J.join("")}</table>`;(W=M.clipboardData)==null||W.setData("text/plain",ce),(K=M.clipboardData)==null||K.setData("text/html",ue)},w.onpaste=M=>{var ee,P,W,K,X,U,Z,G,re;const Q=x.anchor;if(!Q)return;const J=(P=(ee=M.clipboardData)==null?void 0:ee.getData("text/plain"))!=null?P:"",ce=J.includes(" ")||J.split(/\r?\n/).filter(de=>de).length>1,ue=w.querySelector("[contenteditable='true']");if(ue&&!ce)return;if(M.preventDefault(),ue){ue.contentEditable="inherit";const de=parseInt((K=(W=ue.closest("td"))==null?void 0:W.getAttribute("data-row"))!=null?K:"0",10),Ae=parseInt((U=(X=ue.closest("td"))==null?void 0:X.getAttribute("data-col"))!=null?U:"0",10);h[de]&&(h[de][Ae]=(Z=ue.textContent)!=null?Z:"")}if(!J.trim())return;const _=J.split(/\r?\n/).map(de=>de.split(" "));_.length>1&&_[_.length-1].length===1&&_[_.length-1][0]===""&&_.pop();const se=Q.row,me=Q.col,he=se+_.length;for(;h.length<he;)h.push(Array((re=(G=h[0])==null?void 0:G.length)!=null?re:1).fill(""));const ge=Math.max(..._.map(de=>de.length)),Ne=me+ge;if(h[0]&&Ne>h[0].length){const de=Ne-h[0].length;h.forEach(Ae=>{for(let Je=0;Je<de;Je++)Ae.push("")})}for(let de=0;de<_.length;de++)for(let Ae=0;Ae<_[de].length;Ae++){const Je=se+de,Il=me+Ae;h[Je]&&(h[Je][Il]=_[de][Ae])}k(),N()}}const I=He({label:"+",title:$("tableAddColumn",f),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=I.dataset.afterCol)!=null?A:"0",10);Ke(T)}});I.style.position="absolute",I.style.display="none",b.appendChild(I);const H=He({label:"+",title:$("tableAddRow",f),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>{var A;const T=parseInt((A=H.dataset.afterRow)!=null?A:"0",10);we(T)}});H.style.position="absolute",H.style.display="none",b.appendChild(H);let te=[],ne=[];const ae=He({label:"+",title:$("tableAddColumn",f),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>Ke()});ae.style.position="absolute",ae.style.display="none",b.appendChild(ae);const ie=He({label:"+",title:$("tableAddRow",f),size:20,color:"var(--fb-primary-color, #0066cc)",textColor:"white",onClick:()=>we()});ie.style.position="absolute",ie.style.display="none",b.appendChild(ie);function pe(){var A,T;te.forEach(P=>P.remove()),te=[],ne.forEach(P=>P.remove()),ne=[];const S=h.length>0?h[0].length:0,B=h.length;if(S>1){const P=Array.from(w.querySelectorAll("thead td[data-col]"));for(const W of P){const K=parseInt((A=W.getAttribute("data-col"))!=null?A:"0",10),X=He({label:"\xD7",title:$("tableRemoveColumn",f),size:16,color:"var(--fb-error-color, #dc3545)",textColor:"white",onClick:()=>L(K)});X.setAttribute("data-action","remove-col"),X.setAttribute("data-col",String(K)),X.style.position="absolute",X.style.display="none",b.appendChild(X),te.push(X)}}if(B>1){const P=[...w.tHead?Array.from(w.tHead.rows):[],...w.tBodies[0]?Array.from(w.tBodies[0].rows):[]].filter(W=>W.querySelector("td[data-row]"));for(const W of P){const K=W.querySelector("td[data-row]");if(!K)continue;const X=parseInt((T=K.getAttribute("data-row"))!=null?T:"0",10),U=He({label:"\xD7",title:$("tableRemoveRow",f),size:16,color:"var(--fb-error-color, #dc3545)",textColor:"white",onClick:()=>pt(X)});U.setAttribute("data-action","remove-row"),U.setAttribute("data-row",String(X)),U.style.position="absolute",U.style.display="none",b.appendChild(U),ne.push(U)}}function O(P,W,K,X,U){var Z;const G=U?Array.from(w.querySelectorAll("thead td[data-col]")):[];let re=-1,Q=1/0,J=-1,ce=-1,ue=1/0;for(let _=0;_<G.length;_++){const se=G[_].getBoundingClientRect(),me=(se.left+se.right)/2,he=Math.abs(P-me);he<Q&&(Q=he,re=_);const ge=Math.abs(P-se.right);ge<ue&&ge<20&&(ue=ge,J=se.right-W.left+X,ce=parseInt((Z=G[_].getAttribute("data-col"))!=null?Z:"0",10))}te.forEach((_,se)=>{if(!U||se!==re){_.style.display="none";return}const me=G[se].getBoundingClientRect(),he=(me.left+me.right)/2-W.left+X;_.style.left=`${he-8}px`,_.style.top="2px",_.style.display="flex"}),U&&ce>=0?(I.style.display="flex",I.style.left=`${J-10}px`,I.style.top=`${K.top-W.top-10}px`,I.dataset.afterCol=String(ce)):I.style.display="none"}function M(P,W,K,X,U){var Z;const G=[];if(U){if(w.tHead)for(const _ of Array.from(w.tHead.rows))_.querySelector("td[data-row]")&&G.push(_);if(w.tBodies[0])for(const _ of Array.from(w.tBodies[0].rows))_.querySelector("td[data-row]")&&G.push(_)}let re=-1,Q=1/0,J=-1,ce=-1,ue=1/0;for(let _=0;_<G.length;_++){const se=G[_].getBoundingClientRect(),me=(se.top+se.bottom)/2,he=Math.abs(P-me);he<Q&&(Q=he,re=_);const ge=Math.abs(P-se.bottom);if(ge<ue&&ge<14){ue=ge,J=se.bottom-W.top;const Ne=G[_].querySelector("td[data-row]");ce=parseInt((Z=Ne==null?void 0:Ne.getAttribute("data-row"))!=null?Z:"0",10)}}ne.forEach((_,se)=>{if(!U||se!==re){_.style.display="none";return}const me=G[se].getBoundingClientRect(),he=(me.top+me.bottom)/2-W.top;_.style.left="4px",_.style.top=`${he-8}px`,_.style.display="flex"}),U&&ce>=0?(H.style.display="flex",H.style.top=`${J-10}px`,H.style.left=`${K.left-W.left+X-10}px`,H.dataset.afterRow=String(ce)):H.style.display="none"}let ee=!1;b.onmousemove=P=>{const W=P.target;if(W.tagName==="BUTTON"&&W.parentElement===b||ee)return;ee=!0;const K=P.clientX,X=P.clientY;requestAnimationFrame(()=>{ee=!1;const U=b.getBoundingClientRect(),Z=w.getBoundingClientRect(),G=b.scrollLeft,re=X>=U.top&&X<Z.top+4,Q=K>=U.left&&K<Z.left+4,J=Math.min(Z.right,U.right),ce=K>J-20&&K<=U.right,ue=X>Z.bottom-4&&X<=U.bottom+20;if(O(K,U,Z,G,re),M(X,U,Z,G,Q),ae.style.display=ce?"flex":"none",ce&&(ae.style.left=`${U.right-U.left+G-20}px`,ae.style.top=`${(Z.top+Z.bottom)/2-U.top-10}px`),ie.style.display=ue?"flex":"none",ue){const _=(U.left+U.right)/2-U.left+G;ie.style.left=`${_-10}px`,ie.style.top=`${Z.bottom-U.top-10}px`}})},b.onmouseleave=()=>{te.forEach(P=>{P.style.display="none"}),ne.forEach(P=>{P.style.display="none"}),I.style.display="none",H.style.display="none",ae.style.display="none",ie.style.display="none"}}N()}function Go(e){var t,n;return{cells:jn((t=e.rows)!=null?t:3,(n=e.columns)!=null?n:3),merges:[]}}function Nt(e){return e!==null&&typeof e=="object"&&"cells"in e&&Array.isArray(e.cells)}function zt(e,t){return e!==null&&typeof e=="object"&&t in e&&Array.isArray(e[t])}function Xo(e,t,n,r){var o,i,a,l;const u=t.state,s=oe(e,u,t),d=t.prefill[e.key],c=(i=(o=e.fieldNames)==null?void 0:o.cells)!=null?i:"cells",p=(l=(a=e.fieldNames)==null?void 0:a.merges)!=null?l:"merges";let f;if(Nt(d))f={cells:d.cells,merges:d.merges?Re(d.merges):[]};else if(d&&zt(d,c)){const m=d[p];f={cells:d[c],merges:m?Re(m):[]}}else if(Nt(e.default))f={cells:e.default.cells,merges:e.default.merges?Re(e.default.merges):[]};else if(e.default&&zt(e.default,c)){const m=e.default[p];f={cells:e.default[c],merges:m?Re(m):[]}}else f=Go(e);if(f.merges&&f.merges.length>0){const m=f.cells.length,g=m>0?f.cells[0].length:0,y=Mt(f.merges,m,g);y&&(console.warn(`Table "${e.key}": invalid prefill merges stripped (${y})`),f={...f,merges:[]})}s?Vo(f,n):Yo(e,f,r,t,n)}function Zo(e,t,n){var r,o;const{scopeRoot:i,skipValidation:a}=n,l=[],u=(o=(r=e.fieldNames)==null?void 0:r.cells)!=null?o:"cells",s=i.querySelector(`[name="${t}"]`);if(!s)return{value:null,errors:l};let d=null;try{d=JSON.parse(s.value)}catch(c){return l.push(`${t}: invalid table data`),{value:null,errors:l}}if(!a&&e.required){const c=d[u];c!=null&&c.some(p=>p.some(f=>f.trim()!==""))||l.push(`${t}: ${$("required",n.state)}`)}return{value:d,errors:l}}function Qo(e,t,n,r){var o,i,a,l;const{scopeRoot:u}=r,s=(i=(o=e.fieldNames)==null?void 0:o.cells)!=null?i:"cells",d=(l=(a=e.fieldNames)==null?void 0:a.merges)!=null?l:"merges",c=u.querySelector(`[name="${t}"]`);if(!c){console.warn(`updateTableField: no hidden input found for "${t}". Re-render to reflect new data.`);return}let p=null;if(Nt(n))p={cells:n.cells,merges:n.merges?Re(n.merges):[]};else if(n&&zt(n,s)){const f=n[d];p={cells:n[s],merges:f?Re(f):[]}}p&&c._applyExternalUpdate?c._applyExternalUpdate(p):c.value=JSON.stringify(n)}function el(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 qt(e,t){var n,r,o,i;const a=new Map,l=new Map;for(const u of e){const s=t.resourceIndex.get(u),d=(n=s==null?void 0:s.name)!=null?n:u;l.set(d,((r=l.get(d))!=null?r:0)+1)}for(const u of e){const s=t.resourceIndex.get(u),d=(o=s==null?void 0:s.name)!=null?o:u;((i=l.get(d))!=null?i:1)>1&&s?a.set(u,`${d} (${cr(s.size)})`):a.set(u,d)}return a}function It(e){return e?e.type.startsWith("image/"):!1}function Un(e,t){const n=qt(e,t),r=new Map;for(const o of e){const i=n.get(o);i&&r.set(i,o)}return r}function Rt(e){return/\s/.test(e)||e.includes('"')?`@"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:`@${e}`}function at(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 i="";for(;r<n&&e[r]!=='"';)e[r]==="\\"&&r+1<n?(i+=e[r+1],r+=2):(i+=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:i}))}else if(r<n&&!/\s/.test(e[r])){const i=r;for(;r<n&&!/\s/.test(e[r]);)r++;const a=e.slice(i,r);t.push({start:o,end:r,raw:e.slice(o,r),name:a})}}else r++;return t}function tl(e,t){if(t.size===0)return[];const n=at(e),r=[];for(const o of n){const i=t.get(o.name);i&&r.push({start:o.start,end:o.end,name:o.name,rid:i})}return r}function nl(e,t){const n=tl(e,t);if(n.length===0)return e;let r="",o=0;for(const i of n)r+=e.slice(o,i.start),r+=`@${i.rid}`,o=i.end;return r+=e.slice(o),r}function Pn(e,t,n){const r=qt(t,n),o=new Map;for(const u of t){const s=r.get(u);s&&o.set(u,s)}const i=at(e);if(i.length===0)return e;let a="",l=0;for(const u of i){a+=e.slice(l,u.start);const s=o.get(u.name);s?a+=Rt(s):a+=u.raw,l=u.end}return a+=e.slice(l),a}function Wn(e,t,n,r){if(be(e),n!=null&&n.file&&It(n)){const o=document.createElement("img");o.alt=n.name,o.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;";const i=new FileReader;i.onload=a=>{var l;o.src=((l=a.target)==null?void 0:l.result)||""},i.readAsDataURL(n.file),e.appendChild(o)}else if(r.config.getThumbnail){r.config.getThumbnail(t).then(i=>{var a;if(!i||!e.isConnected)return;const l=document.createElement("img");l.alt=(a=n==null?void 0:n.name)!=null?a:t,l.src=i,l.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;",be(e),e.appendChild(l)}).catch(i=>{var a,l;(l=(a=r.config).onThumbnailError)==null||l.call(a,i,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 i=document.createElement("span");i.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);",i.textContent=n.name,o.appendChild(i)}e.appendChild(o)}}function Vn(e,t,n,r){if(be(e),n!=null&&n.file&&It(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 i=new FileReader;i.onload=a=>{var l;o.src=((l=a.target)==null?void 0:l.result)||""},i.readAsDataURL(n.file),e.appendChild(o)}else r.config.getThumbnail&&r.config.getThumbnail(t).then(o=>{var i;if(!o||!e.isConnected)return;const a=document.createElement("img");a.alt=(i=n==null?void 0:n.name)!=null?i:t,a.src=o,a.style.cssText="max-width: 120px; max-height: 120px; object-fit: contain; display: block;",be(e),e.appendChild(a)}).catch(o=>{var i,a;(a=(i=r.config).onThumbnailError)==null||a.call(i,o,t)})}function _n(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)),i=n.top-r.height-8,a=n.bottom+8,l=i>=4?i:a;e.style.left=`${o}px`,e.style.top=`${Math.max(4,l)}px`}function Kn(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=`
|
|
805
920
|
position: fixed;
|
|
806
921
|
z-index: 99999;
|
|
807
922
|
background: #fff;
|
|
@@ -812,7 +927,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
812
927
|
pointer-events: none;
|
|
813
928
|
min-width: 60px;
|
|
814
929
|
max-width: 140px;
|
|
815
|
-
`;const i=document.createElement("div");return i.style.cssText="min-height: 60px; max-height: 120px; display: flex; align-items: center; justify-content: center;",
|
|
930
|
+
`;const i=document.createElement("div");return i.style.cssText="min-height: 60px; max-height: 120px; display: flex; align-items: center; justify-content: center;",Vn(i,t,r,n),o.appendChild(i),document.body.appendChild(o),_n(o,e),o}function Jn(e,t){var n,r;const{rid:o,state:i,isReadonly:a,onMention:l,onRemove:u}=t,s=i.resourceIndex.get(o),d=(n=s==null?void 0:s.name)!=null?n:o,c=document.createElement("div");c.className="fb-richinput-portal-tooltip fb-richinput-file-tooltip",c.style.cssText=`
|
|
816
931
|
position: fixed;
|
|
817
932
|
z-index: 99999;
|
|
818
933
|
background: #fff;
|
|
@@ -823,17 +938,17 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
823
938
|
pointer-events: auto;
|
|
824
939
|
min-width: 80px;
|
|
825
940
|
max-width: 260px;
|
|
826
|
-
`;const
|
|
941
|
+
`;const p=document.createElement("div");p.style.cssText="min-height: 60px; max-height: 120px; display: flex; align-items: center; justify-content: center;",Vn(p,o,s,i),c.appendChild(p);const f=document.createElement("div");f.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);",f.textContent=d,c.appendChild(f);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 g="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;",y=h=>{h.style.background="var(--fb-background-hover-color, #f3f4f6)",h.style.color="var(--fb-text-color, #111827)"},C=h=>{h.style.background="none",h.style.color="var(--fb-text-muted-color, #6b7280)"};if(!a&&l){const h=document.createElement("button");h.type="button",h.title="Mention",h.style.cssText=g,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",()=>y(h)),h.addEventListener("mouseleave",()=>C(h)),h.addEventListener("click",v=>{v.stopPropagation(),l(),c.remove()}),m.appendChild(h)}if(i.config.downloadFile){const h=document.createElement("button");h.type="button",h.title="Download",h.style.cssText=g,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",()=>y(h)),h.addEventListener("mouseleave",()=>C(h)),h.addEventListener("click",v=>{var x,E;v.stopPropagation(),(E=(x=i.config).downloadFile)==null||E.call(x,o,d)}),m.appendChild(h)}if((r=i.config.getDownloadUrl)!=null?r:i.config.getThumbnail){const h=document.createElement("button");h.type="button",h.title="Open in new window",h.style.cssText=g,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",()=>y(h)),h.addEventListener("mouseleave",()=>C(h)),h.addEventListener("click",v=>{var x,E,k,b;if(v.stopPropagation(),i.config.getDownloadUrl){const w=i.config.getDownloadUrl(o);w?window.open(w,"_blank"):(E=(x=i.config).getThumbnail)==null||E.call(x,o).then(F=>{F&&window.open(F,"_blank")}).catch(()=>{})}else(b=(k=i.config).getThumbnail)==null||b.call(k,o).then(w=>{w&&window.open(w,"_blank")}).catch(()=>{})}),m.appendChild(h)}if(!a&&u){const h=document.createElement("button");h.type="button",h.title="Remove",h.style.cssText=g,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",()=>C(h)),h.addEventListener("click",v=>{v.stopPropagation(),c.remove(),u()}),m.appendChild(h)}return m.children.length>0&&c.appendChild(m),document.body.appendChild(c),_n(c,e),c}function Yn(){return{element:null,hideTimer:null}}function st(e,t=150){e.hideTimer===null&&(e.hideTimer=setTimeout(()=>{e.hideTimer=null,e.element&&(e.element.remove(),e.element=null)},t))}function ut(e){e.hideTimer!==null&&(clearTimeout(e.hideTimer),e.hideTimer=null)}function Be(e){return e&&e.remove(),null}function rl(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 i=r.slice(o+1);return i.startsWith('"')&&(i=i.slice(1)),{query:i,pos:o}}return null}return null}function Gn(e,t,n){const r=e.toLowerCase();return t.filter(o=>{var i;return((i=n.get(o))!=null?i:o).toLowerCase().includes(r)})}const ct="font-size: var(--fb-font-size, 14px); font-family: var(--fb-font-family, inherit); line-height: 1.6;",Xn="padding: 8px 40px 8px 10px;";function ol(e,t,n,r,o){var i;const a=t.state,l=[...o.files],u={open:!1,query:"",triggerPos:-1,selectedIndex:0},s=new AbortController,d=document.createElement("input");d.type="hidden",d.name=r;function c(){var L,q;const z=b.value,N=Un(l,a),I=z?nl(z,N):null,H=(L=e.textKey)!=null?L:"text",te=(q=e.filesKey)!=null?q:"files";return{[H]:z===""?null:I,[te]:[...l]}}function p(){d.value=JSON.stringify(c())}const f=document.createElement("div");f.className="fb-richinput-wrapper",f.style.cssText=`
|
|
827
942
|
position: relative;
|
|
828
943
|
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
829
944
|
border-radius: 16px;
|
|
830
945
|
background: var(--fb-background-color, #f9fafb);
|
|
831
946
|
transition: box-shadow 0.15s, border-color 0.15s;
|
|
832
|
-
`,
|
|
947
|
+
`,f.addEventListener("focusin",()=>{f.style.borderColor="var(--fb-primary-color, #0066cc)",f.style.boxShadow="0 0 0 2px color-mix(in srgb, var(--fb-primary-color, #0066cc) 25%, transparent)"}),f.addEventListener("focusout",()=>{f.style.borderColor="var(--fb-border-color, #d1d5db)",f.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 10px 6px;";let g=null;function y(L){m.textContent=L,m.style.display="block",g&&clearTimeout(g),g=setTimeout(()=>{m.style.display="none",m.textContent="",g=null},5e3)}function C(L){var q;const z=$e(e.accept);if(!qe(L.name,z)){const I=z.join(", ");return y($("invalidFileExtension",a,{name:L.name,formats:I})),!1}const N=(q=e.maxSize)!=null?q:1/0;return Ze(L,N)?!0:(y($("fileTooLarge",a,{name:L.name,maxSize:N})),!1)}let h=0;f.addEventListener("dragenter",L=>{L.preventDefault(),h++,f.style.borderColor="var(--fb-primary-color, #0066cc)",f.style.boxShadow="0 0 0 2px color-mix(in srgb, var(--fb-primary-color, #0066cc) 25%, transparent)"}),f.addEventListener("dragover",L=>{L.preventDefault()}),f.addEventListener("dragleave",L=>{L.preventDefault(),h--,h<=0&&(h=0,f.style.borderColor="var(--fb-border-color, #d1d5db)",f.style.boxShadow="none")}),f.addEventListener("drop",L=>{var q,z;L.preventDefault(),h=0,f.style.borderColor="var(--fb-border-color, #d1d5db)",f.style.boxShadow="none";const N=(q=L.dataTransfer)==null?void 0:q.files;if(!N||!a.config.uploadFile)return;const I=(z=e.maxFiles)!=null?z:1/0;for(let H=0;H<N.length;H++){if(l.length>=I){y($("filesLimitExceeded",a,{skipped:N.length-H,max:I}));break}C(N[H])&&pt(N[H])}});const v=document.createElement("div");v.className="fb-richinput-files",v.style.cssText="display: none; flex-wrap: wrap; gap: 4px; padding: 6px 10px 0; align-items: center;";const x=document.createElement("input");x.type="file",x.multiple=!0,x.style.display="none",e.accept&&(typeof e.accept=="string"?x.accept=e.accept:x.accept=e.accept.extensions.map(L=>L.startsWith(".")?L:`.${L}`).join(","));const E=document.createElement("div");E.style.cssText="position: relative;";const k=document.createElement("div");k.className="fb-richinput-backdrop",k.style.cssText=`
|
|
833
948
|
position: absolute;
|
|
834
949
|
top: 0; left: 0; right: 0; bottom: 0;
|
|
835
|
-
${
|
|
836
|
-
${
|
|
950
|
+
${Xn}
|
|
951
|
+
${ct}
|
|
837
952
|
white-space: pre-wrap;
|
|
838
953
|
word-break: break-word;
|
|
839
954
|
color: transparent;
|
|
@@ -842,10 +957,10 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
842
957
|
border-radius: inherit;
|
|
843
958
|
box-sizing: border-box;
|
|
844
959
|
z-index: 2;
|
|
845
|
-
`;const
|
|
960
|
+
`;const b=document.createElement("textarea");b.name=`${r}__text`,b.placeholder=e.placeholder||$("richinputPlaceholder",a);const w=(i=o.text)!=null?i:"";b.value=w?Pn(w,l,a):"",b.style.cssText=`
|
|
846
961
|
width: 100%;
|
|
847
|
-
${
|
|
848
|
-
${
|
|
962
|
+
${Xn}
|
|
963
|
+
${ct}
|
|
849
964
|
background: transparent;
|
|
850
965
|
border: none;
|
|
851
966
|
outline: none;
|
|
@@ -855,17 +970,17 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
855
970
|
position: relative;
|
|
856
971
|
z-index: 1;
|
|
857
972
|
caret-color: var(--fb-text-color, #111827);
|
|
858
|
-
`,
|
|
859
|
-
`;return}let
|
|
860
|
-
`}const R=document.createElement("button");R.type="button",R.title=$("richinputAttachFile",
|
|
973
|
+
`,el(b,k),b.addEventListener("scroll",()=>{k.scrollTop=b.scrollTop});let F=null;k.addEventListener("mouseover",L=>{var q,z;const N=(z=(q=L.target).closest)==null?void 0:z.call(q,"mark");N!=null&&N.dataset.rid&&(F=Be(F),F=Kn(N,N.dataset.rid,a))}),k.addEventListener("mouseout",L=>{var q,z,N;if(!((z=(q=L.target).closest)!=null&&z.call(q,"mark")))return;const I=L.relatedTarget;(N=I==null?void 0:I.closest)!=null&&N.call(I,"mark")||(F=Be(F))}),k.addEventListener("mousedown",L=>{var q,z;if(!((z=(q=L.target).closest)!=null&&z.call(q,"mark")))return;F=Be(F);const N=k.querySelectorAll("mark");N.forEach(H=>H.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(H=>H.style.pointerEvents="auto")},{once:!0})});function V(){const L=b.value,q=Un(l,a),z=at(L);if(z.length===0){k.innerHTML=le(L)+`
|
|
974
|
+
`;return}let N="",I=0;for(const H of z){N+=le(L.slice(I,H.start));const te=q.get(H.name);te?N+=`<mark data-rid="${le(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;">${le(L.slice(H.start,H.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;">${le(L.slice(H.start,H.end))}</mark>`,I=H.end}N+=le(L.slice(I)),k.innerHTML=N+`
|
|
975
|
+
`}const R=document.createElement("button");R.type="button",R.title=$("richinputAttachFile",a),R.style.cssText=`
|
|
861
976
|
position: absolute;
|
|
862
|
-
right:
|
|
863
|
-
bottom:
|
|
977
|
+
right: 6px;
|
|
978
|
+
bottom: 6px;
|
|
864
979
|
z-index: 2;
|
|
865
|
-
width:
|
|
866
|
-
height:
|
|
980
|
+
width: 28px;
|
|
981
|
+
height: 28px;
|
|
867
982
|
border: none;
|
|
868
|
-
border-radius:
|
|
983
|
+
border-radius: 6px;
|
|
869
984
|
background: transparent;
|
|
870
985
|
cursor: pointer;
|
|
871
986
|
display: flex;
|
|
@@ -873,7 +988,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
873
988
|
justify-content: center;
|
|
874
989
|
color: var(--fb-text-muted-color, #9ca3af);
|
|
875
990
|
transition: color 0.15s, background 0.15s;
|
|
876
|
-
`,R.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>',R.addEventListener("mouseenter",()=>{R.style.color="var(--fb-primary-color, #0066cc)",R.style.background="var(--fb-background-hover-color, #f3f4f6)"}),R.addEventListener("mouseleave",()=>{R.style.color="var(--fb-text-muted-color, #9ca3af)",R.style.background="transparent"}),R.addEventListener("click",()=>{var L;const
|
|
991
|
+
`,R.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>',R.addEventListener("mouseenter",()=>{R.style.color="var(--fb-primary-color, #0066cc)",R.style.background="var(--fb-background-hover-color, #f3f4f6)"}),R.addEventListener("mouseleave",()=>{R.style.color="var(--fb-text-muted-color, #9ca3af)",R.style.background="transparent"}),R.addEventListener("click",()=>{var L;const q=(L=e.maxFiles)!=null?L:1/0;if(l.length>=q){y($("filesLimitExceeded",a,{skipped:1,max:q}));return}x.click()});const D=document.createElement("div");D.className="fb-richinput-dropdown",D.style.cssText=`
|
|
877
992
|
display: none;
|
|
878
993
|
position: absolute;
|
|
879
994
|
bottom: 100%;
|
|
@@ -888,16 +1003,16 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
888
1003
|
max-height: 200px;
|
|
889
1004
|
overflow-y: auto;
|
|
890
1005
|
margin-bottom: 4px;
|
|
891
|
-
${
|
|
892
|
-
`;function
|
|
1006
|
+
${ct}
|
|
1007
|
+
`;function j(){return qt(l,a)}function Y(L){be(D);const q=j();if(L.length===0){D.style.display="none",u.open=!1;return}L.forEach((z,N)=>{var I;const H=a.resourceIndex.get(z),te=document.createElement("div");te.className="fb-richinput-dropdown-item",te.dataset.rid=z,te.style.cssText=`
|
|
893
1008
|
padding: 5px 10px;
|
|
894
1009
|
cursor: pointer;
|
|
895
1010
|
color: var(--fb-text-color, #111827);
|
|
896
|
-
background: ${
|
|
1011
|
+
background: ${N===u.selectedIndex?"var(--fb-background-hover-color, #f3f4f6)":"transparent"};
|
|
897
1012
|
display: flex;
|
|
898
1013
|
align-items: center;
|
|
899
1014
|
gap: 8px;
|
|
900
|
-
`;const
|
|
1015
|
+
`;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;",H!=null&&H.file&&It(H)){const ie=document.createElement("img");ie.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;";const pe=new FileReader;pe.onload=A=>{var T;ie.src=((T=A.target)==null?void 0:T.result)||""},pe.readAsDataURL(H.file),ne.appendChild(ie)}else a.config.getThumbnail&&a.config.getThumbnail(z).then(ie=>{if(!ie||!ne.isConnected)return;const pe=document.createElement("img");pe.style.cssText="width: 100%; height: 100%; object-fit: cover; display: block;",pe.src=ie,be(ne),ne.appendChild(pe)}).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 ae=document.createElement("span");ae.style.cssText="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;",ae.textContent=(I=q.get(z))!=null?I:z,te.appendChild(ae),D.appendChild(te)}),D.onmousemove=z=>{var N,I,H;const te=(I=(N=z.target).closest)==null?void 0:I.call(N,".fb-richinput-dropdown-item");if(!te)return;const ne=L.indexOf((H=te.dataset.rid)!=null?H:"");ne===-1||ne===u.selectedIndex||(D.querySelectorAll(".fb-richinput-dropdown-item").forEach((ae,ie)=>{ae.style.background=ie===ne?"var(--fb-background-hover-color, #f3f4f6)":"transparent"}),u.selectedIndex=ne)},D.onmousedown=z=>{var N,I;z.preventDefault(),z.stopPropagation();const H=(I=(N=z.target).closest)==null?void 0:I.call(N,".fb-richinput-dropdown-item");H!=null&&H.dataset.rid&&Te(H.dataset.rid)},D.style.display="block",u.open=!0}function Me(){const L=rl(b);if(!L){fe();return}u.query=L.query,u.triggerPos=L.pos,u.selectedIndex=0;const q=j(),z=Gn(L.query,l,q);Y(z)}function fe(){D.style.display="none",u.open=!1}function Te(L){var q,z,N,I;const H=(N=(z=j().get(L))!=null?z:(q=a.resourceIndex.get(L))==null?void 0:q.name)!=null?N:L,te=(I=b.selectionStart)!=null?I:0,ne=b.value.slice(0,u.triggerPos),ae=b.value.slice(te),ie=`${Rt(H)} `;b.value=`${ne}${ie}${ae}`;const pe=ne.length+ie.length;b.setSelectionRange(pe,pe),b.dispatchEvent(new Event("input")),fe()}b.addEventListener("input",()=>{var L;V(),p(),(L=t.instance)==null||L.triggerOnChange(r,c()),l.length>0?Me():fe()});function _e(){D.querySelectorAll(".fb-richinput-dropdown-item").forEach((L,q)=>{L.style.background=q===u.selectedIndex?"var(--fb-background-hover-color, #f3f4f6)":"transparent"})}b.addEventListener("keydown",L=>{if(!u.open)return;const q=j(),z=Gn(u.query,l,q);L.key==="ArrowDown"?(L.preventDefault(),u.selectedIndex=Math.min(u.selectedIndex+1,z.length-1),_e()):L.key==="ArrowUp"?(L.preventDefault(),u.selectedIndex=Math.max(u.selectedIndex-1,0),_e()):L.key==="Enter"&&z.length>0?(L.preventDefault(),Te(z[u.selectedIndex])):L.key==="Escape"&&fe()}),document.addEventListener("click",L=>{!f.contains(L.target)&&!D.contains(L.target)&&fe()},{signal:s.signal});function we(){if(be(v),l.length===0){v.style.display="none";return}v.style.display="flex",l.forEach(L=>{const q=a.resourceIndex.get(L),z=document.createElement("div");z.className="fb-richinput-file-thumb",z.style.cssText=`
|
|
901
1016
|
position: relative;
|
|
902
1017
|
width: 48px;
|
|
903
1018
|
height: 48px;
|
|
@@ -907,14 +1022,14 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
907
1022
|
flex-shrink: 0;
|
|
908
1023
|
cursor: pointer;
|
|
909
1024
|
background: #fff;
|
|
910
|
-
`;const
|
|
911
|
-
`:""}${Rt(A)} `;
|
|
1025
|
+
`;const N=document.createElement("div");N.style.cssText="width: 48px; height: 48px; border-radius: inherit; overflow: hidden;",Wn(N,L,q,a),z.appendChild(N);const I=Yn(),H=()=>{var ne,ae,ie;const pe=(ne=b.selectionStart)!=null?ne:b.value.length,A=(ie=(ae=j().get(L))!=null?ae:q==null?void 0:q.name)!=null?ie:L,T=b.value.slice(0,pe),S=b.value.slice(pe),B=`${T.length>0&&!/[\s\n]$/.test(T)?`
|
|
1026
|
+
`:""}${Rt(A)} `;b.value=`${T}${B}${S}`;const O=pe+B.length;b.setSelectionRange(O,O),b.focus(),b.dispatchEvent(new Event("input"))},te=()=>{var ne;const ae=l.indexOf(L);ae!==-1&&l.splice(ae,1),we(),V(),p(),(ne=t.instance)==null||ne.triggerOnChange(r,c())};z.addEventListener("mouseenter",()=>{ut(I),I.element||(I.element=Jn(z,{rid:L,state:a,isReadonly:!1,onMention:H,onRemove:te}),I.element.addEventListener("mouseenter",()=>{ut(I)}),I.element.addEventListener("mouseleave",()=>{st(I)}))}),z.addEventListener("mouseleave",()=>{st(I)}),v.appendChild(z)})}function pt(L){if(!a.config.uploadFile)return;const q=`temp-${Date.now()}-${Math.random().toString(36).slice(2,6)}`;a.resourceIndex.set(q,{name:L.name,type:L.type,size:L.size,uploadedAt:new Date,file:L}),l.push(q),we();const z=v.querySelectorAll(".fb-richinput-file-thumb"),N=z[z.length-1];N&&(N.style.opacity="0.5"),a.config.uploadFile(L).then(I=>{var H;const te=l.indexOf(q);te!==-1&&(l[te]=I),a.resourceIndex.delete(q),a.resourceIndex.set(I,{name:L.name,type:L.type,size:L.size,uploadedAt:new Date,file:L}),we(),V(),p(),(H=t.instance)==null||H.triggerOnChange(r,c())}).catch(I=>{var H,te;const ne=l.indexOf(q);ne!==-1&&l.splice(ne,1),a.resourceIndex.delete(q),we(),(te=(H=a.config).onUploadError)==null||te.call(H,I,L)})}if(x.addEventListener("change",()=>{var L;const q=x.files;if(!q||q.length===0)return;const z=(L=e.maxFiles)!=null?L:1/0;for(let N=0;N<q.length;N++){if(l.length>=z){y($("filesLimitExceeded",a,{skipped:q.length-N,max:z}));break}C(q[N])&&pt(q[N])}x.value=""}),E.appendChild(k),E.appendChild(b),E.appendChild(R),E.appendChild(D),f.appendChild(v),f.appendChild(E),f.appendChild(m),e.minLength!=null||e.maxLength!=null){const L=document.createElement("div");L.style.cssText="position: relative; padding: 2px 10px 4px; text-align: right;";const q=je(e,b,!1);q.style.cssText=`
|
|
912
1027
|
position: static;
|
|
913
1028
|
display: inline-block;
|
|
914
1029
|
font-size: var(--fb-font-size-small);
|
|
915
1030
|
color: var(--fb-text-secondary-color);
|
|
916
1031
|
pointer-events: none;
|
|
917
|
-
`,L.appendChild(
|
|
1032
|
+
`,L.appendChild(q),f.appendChild(L)}f.appendChild(d),f.appendChild(x),p(),V(),d._applyExternalUpdate=L=>{var q;const z=(q=L.text)!=null?q:"";b.value=z?Pn(z,l,a):"",b.dispatchEvent(new Event("input")),l.length=0;for(const N of L.files)l.push(N);we(),V(),p()},n.appendChild(f),we();const Ke=new MutationObserver(()=>{f.isConnected||(s.abort(),F=Be(F),Ke.disconnect())});f.parentElement&&Ke.observe(f.parentElement,{childList:!0})}function ll(e,t,n,r,o){var i,a;const l=t.state,{text:u,files:s}=o,d=new Map;for(const c of s){const p=l.resourceIndex.get(c);p!=null&&p.name&&d.set(c,p.name)}if(s.length>0){const c=document.createElement("div");c.style.cssText="display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 8px;",s.forEach(p=>{const f=l.resourceIndex.get(p),m=document.createElement("div");m.style.cssText=`
|
|
918
1033
|
position: relative;
|
|
919
1034
|
width: 48px; height: 48px;
|
|
920
1035
|
border: 1px solid var(--fb-border-color, #d1d5db);
|
|
@@ -923,12 +1038,12 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
923
1038
|
flex-shrink: 0;
|
|
924
1039
|
background: #fff;
|
|
925
1040
|
cursor: default;
|
|
926
|
-
`;const
|
|
927
|
-
${
|
|
1041
|
+
`;const g=document.createElement("div");g.style.cssText="width: 48px; height: 48px; border-radius: inherit; overflow: hidden;",Wn(g,p,f,l),m.appendChild(g);const y=Yn();m.addEventListener("mouseenter",()=>{ut(y),y.element||(y.element=Jn(m,{rid:p,state:l,isReadonly:!0}),y.element.addEventListener("mouseenter",()=>{ut(y)}),y.element.addEventListener("mouseleave",()=>{st(y)}))}),m.addEventListener("mouseleave",()=>{st(y)}),c.appendChild(m)}),n.appendChild(c)}if(u){const c=document.createElement("div");c.style.cssText=`
|
|
1042
|
+
${ct}
|
|
928
1043
|
color: var(--fb-text-color, #111827);
|
|
929
1044
|
white-space: pre-wrap;
|
|
930
1045
|
word-break: break-word;
|
|
931
|
-
`;const
|
|
1046
|
+
`;const p=at(u).filter(f=>d.has(f.name)||[...d.values()].includes(f.name));if(p.length===0)c.textContent=u;else{let f=0;for(const m of p){m.start>f&&c.appendChild(document.createTextNode(u.slice(f,m.start)));const g=document.createElement("span");g.style.cssText=`
|
|
932
1047
|
display: inline;
|
|
933
1048
|
background: color-mix(in srgb, var(--fb-primary-color, #0066cc) 15%, transparent);
|
|
934
1049
|
color: var(--fb-primary-color, #0066cc);
|
|
@@ -936,7 +1051,7 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
936
1051
|
padding: 1px 6px;
|
|
937
1052
|
font-weight: 500;
|
|
938
1053
|
cursor: default;
|
|
939
|
-
`;const y=
|
|
1054
|
+
`;const y=d.has(m.name)?m.name:(i=[...d.entries()].find(([,h])=>h===m.name))==null?void 0:i[0],C=(a=d.get(m.name))!=null?a:m.name;if(g.textContent=`@${C}`,y){let h=null;const v=y;g.addEventListener("mouseenter",()=>{h=Be(h),h=Kn(g,v,l)}),g.addEventListener("mouseleave",()=>{h=Be(h)})}c.appendChild(g),f=m.end}f<u.length&&c.appendChild(document.createTextNode(u.slice(f)))}n.appendChild(c)}if(!u&&s.length===0){const c=document.createElement("div");c.style.cssText="color: var(--fb-text-muted-color, #6b7280); font-size: var(--fb-font-size, 14px);",c.textContent="\u2014",n.appendChild(c)}}function il(e,t,n,r){var o,i,a,l;const u=t.state,s=oe(e,u,t),d=(o=e.textKey)!=null?o:"text",c=(i=e.filesKey)!=null?i:"files";let p;if(e.flatOutput){const f=t.prefill[d],m=t.prefill[c];p={text:typeof f=="string"?f:null,files:Array.isArray(m)?m:[]}}else{const f=t.prefill[e.key];if(f&&typeof f=="object"&&!Array.isArray(f)){const m=f,g=(a=m[d])!=null?a:m.text,y=(l=m[c])!=null?l:m.files;p={text:typeof g=="string"?g:null,files:Array.isArray(y)?y:[]}}else typeof f=="string"?p={text:f||null,files:[]}:p={text:null,files:[]}}for(const f of p.files)u.resourceIndex.has(f)||u.resourceIndex.set(f,{name:f,type:"application/octet-stream",size:0,uploadedAt:new Date,file:void 0});if(s)ll(e,t,n,r,p);else{if(!u.config.uploadFile)throw new Error(`RichInput field "${e.key}" requires uploadFile handler in config`);ol(e,t,n,r,p)}}function al(e,t,n){var r,o;const{scopeRoot:i,state:a,skipValidation:l}=n,u=[],s=(r=e.textKey)!=null?r:"text",d=(o=e.filesKey)!=null?o:"files",c=i.querySelector(`[name="${t}"]`);if(!c)return{value:null,errors:u};let p={};try{const h=JSON.parse(c.value);if(h&&typeof h=="object"&&!Array.isArray(h))p=h;else return u.push(`${t}: invalid richinput data`),{value:null,errors:u}}catch(h){return u.push(`${t}: invalid richinput data`),{value:null,errors:u}}const f=p[s],m=p[d],g=f===null||typeof f=="string"?f:null,y=Array.isArray(m)?m:[],C={[s]:g!=null?g:null,[d]:y};if(!l){const h=!g||g.trim()==="",v=y.length===0;e.required&&h&&v&&u.push(`${t}: ${$("required",a)}`),!h&&g&&(e.minLength!=null&&g.length<e.minLength&&u.push(`${t}: ${$("minLength",a,{min:e.minLength})}`),e.maxLength!=null&&g.length>e.maxLength&&u.push(`${t}: ${$("maxLength",a,{max:e.maxLength})}`)),e.maxFiles!=null&&y.length>e.maxFiles&&u.push(`${t}: ${$("maxFiles",a,{max:e.maxFiles})}`)}return{value:C,errors:u,spread:!!e.flatOutput}}function sl(e,t,n,r){var o,i,a,l;const{scopeRoot:u}=r,s=u.querySelector(`[name="${t}"]`);if(!s){console.warn(`updateRichInputField: no hidden input found for "${t}". Re-render to reflect new data.`);return}let d=null;if(n&&typeof n=="object"&&!Array.isArray(n)){const c=n,p=(o=e.textKey)!=null?o:"text",f=(i=e.filesKey)!=null?i:"files",m=(a=c[p])!=null?a:c.text,g=(l=c[f])!=null?l:c.files;(m!==void 0||g!==void 0)&&(d={text:typeof m=="string"?m:null,files:Array.isArray(g)?g:[]})}d&&s._applyExternalUpdate?s._applyExternalUpdate(d):d&&(s.value=JSON.stringify(d))}const ul={"":["<em>","</em>"],_:["<strong>","</strong>"],"*":["<strong>","</strong>"],"~":["<s>","</s>"],"\n":["<br />"]," ":["<br />"],"-":["<hr />"]};function Zn(e){return e.replace(RegExp("^"+(e.match(/^(\t| )+/)||"")[0],"gm"),"")}function We(e){return(e+"").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Ht(e,t){const n=/((?:^|\n+)(?:\n---+|\*[ ]\*(?:[ ]\*)+)\n)|(?:^```[ ]*(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t|[ ]{2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|([ ]{2}\n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,r=[];let o="";const i=t||{};let a=0,l,u,s,d,c;function p(m){const g=ul[m[1]||""],y=r[r.length-1]===m;return g?g[1]?(y?r.pop():r.push(m),g[y?1:0]):g[0]:m}function f(){let m="";for(;r.length;)m+=p(r[r.length-1]);return m}for(e=e.replace(/^\[(.+?)\]:\s*(.+)$/gm,(m,g,y)=>(i[g.toLowerCase()]=y,"")).replace(/^\n+|\n+$/g,"");s=n.exec(e);)u=e.substring(a,s.index),a=n.lastIndex,l=s[0],u.match(/[^\\](\\\\)*\\$/)||((c=s[3]||s[4])?l='<pre class="code '+(s[4]?"poetry":s[2].toLowerCase())+'"><code'+(s[2]?` class="language-${s[2].toLowerCase()}"`:"")+">"+Zn(We(c).replace(/^\n+|\n+$/g,""))+"</code></pre>":(c=s[6])?(c.match(/\./)&&(s[5]=s[5].replace(/^\d+/gm,"")),d=Ht(Zn(s[5].replace(/^\s*[>*+.-]/gm,""))),c===">"?c="blockquote":(c=c.match(/\./)?"ol":"ul",d=d.replace(/^(.*)(\n|$)/gm,"<li>$1</li>")),l="<"+c+">"+d+"</"+c+">"):s[8]?l=`<img src="${We(s[8])}" alt="${We(s[7])}">`:s[10]?(o=o.replace("<a>",`<a href="${We(s[11]||i[u.toLowerCase()])}">`),l=f()+"</a>"):s[9]?l="<a>":s[12]||s[14]?(c="h"+(s[14]?s[14].length:s[13]>"="?1:2),l="<"+c+">"+Ht(s[12]||s[15],i)+"</"+c+">"):s[16]?l="<code>"+We(s[16])+"</code>":(s[17]||s[1])&&(l=p(s[17]||"--"))),o+=u,o+=l;return(o+e.substring(a)+f()).replace(/^\n+|\n+$/g,"")}const Qn="fb-markdown-styles";function cl(){if(typeof document=="undefined"||document.getElementById(Qn))return;const e=document.createElement("style");e.id=Qn,e.setAttribute("data-fb-markdown-styles","true"),e.textContent=`
|
|
940
1055
|
.fb-markdown {
|
|
941
1056
|
font-family: var(--fb-font-family, inherit);
|
|
942
1057
|
font-size: var(--fb-font-size, 1rem);
|
|
@@ -1013,12 +1128,12 @@ var FormBuilder=(function(Ce){"use strict";function $(e,t,n){const r=t.config.lo
|
|
|
1013
1128
|
.fb-markdown strong { font-weight: var(--fb-font-weight-medium, 600); }
|
|
1014
1129
|
.fb-markdown em { font-style: italic; }
|
|
1015
1130
|
.fb-markdown s { text-decoration: line-through; }
|
|
1016
|
-
`,document.head.appendChild(e)}const Qo=["javascript:","data:","vbscript:","blob:"],el=["javascript:","vbscript:","blob:"];function tl(e){return!!(el.some(t=>e.startsWith(t))||e.startsWith("data:")&&!e.startsWith("data:image/"))}function nl(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function rl(e){e.querySelectorAll("a[href]").forEach(t=>{var n;const r=((n=t.getAttribute("href"))!=null?n:"").trim().toLowerCase();Qo.some(o=>r.startsWith(o))&&t.setAttribute("href","#"),t.setAttribute("target","_blank"),t.setAttribute("rel","noopener noreferrer")}),e.querySelectorAll("img[src]").forEach(t=>{var n;const r=((n=t.getAttribute("src"))!=null?n:"").trim().toLowerCase();tl(r)&&t.setAttribute("src","")})}function ol(e,t,n){if(typeof e.content!="string")throw new Error(`renderMarkdown: markdown element${e.key?` "${e.key}"`:""} requires "content" to be a string (got ${e.content===null?"null":typeof e.content})`);Zo();const r=document.createElement("div");r.className="fb-markdown";const o=nl(e.content);return r.innerHTML=Ht(o),rl(r),n.appendChild(r),r}function ll(e,t,n){return{value:void 0,errors:[],skip:!0}}function il(e,t,n,r){}function al(e,t){const n=document.getElementById(e);if(!n)return;const r=!n.classList.contains("hidden");if(document.querySelectorAll('[id^="tooltip-"]').forEach(p=>{p.classList.add("hidden")}),r)return;const o=t.getBoundingClientRect(),i=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 a=n.getBoundingClientRect();n.classList.add("hidden"),n.style.visibility="visible";let c=o.left,s=o.bottom+5;c+a.width>i&&(c=o.right-a.width),s+a.height>l&&(s=o.top-a.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 Zn(e,t){var n,r,o;if(!e.enableIf)return!1;try{const i=(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!ze(e.enableIf,i,l)}catch(i){console.error(`Error evaluating enableIf for field "${e.key}":`,i)}return!1}function sl(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 pt(e,t,n){var r,o;if(!t.enableIf)return;const i=n.state.formRoot;if(!i){console.error("Cannot re-evaluate enableIf: formRoot is null");return}const l=t.enableIf,a=(r=l.scope)!=null?r:"relative";let c={};const s={};if((!n.path||n.path===""?"absolute":a)==="relative"&&n.path){const p=n.path.match(/^(.+)\[(\d+)\]$/);if(p){const u=p[1],f=parseInt(p[2],10),d=i.querySelector(`[data-container-item="${u}[${f}]"]`);d&&d.querySelectorAll("input, select, textarea").forEach(m=>{const v=m.getAttribute("name");if(v){const y=v.match(/\.([^.[\]]+)$/);if(y){const C=y[1];m instanceof HTMLSelectElement?s[C]=m.value:m instanceof HTMLInputElement?m.type==="checkbox"?s[C]=m.checked:m.type==="radio"?m.checked&&(s[C]=m.value):s[C]=m.value:m instanceof HTMLTextAreaElement&&(s[C]=m.value)}}})}}else{const p=l.key,u=sl(p,i);u!==void 0?c[p]=u:c=(o=n.formData)!=null?o:n.prefill}try{ze(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(p){console.error(`Error re-evaluating enableIf for field "${t.key}":`,p)}}function Qn(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 i=t.enableIf,l=(r=i.scope)!=null?r:"relative",a=i.key;let c;l==="relative"&&n.path?c=`${n.path}.${a}`:c=a;const s=o.querySelector(`[name="${c}"]`);if(!s){const p=new MutationObserver(()=>{const u=o.querySelector(`[name="${c}"]`);u&&(u.addEventListener("change",()=>{pt(e,t,n)}),u.addEventListener("input",()=>{pt(e,t,n)}),p.disconnect())});p.observe(o,{childList:!0,subtree:!0});return}s.addEventListener("change",()=>{pt(e,t,n)}),s.addEventListener("input",()=>{pt(e,t,n)})}function cl(e){var t,n;const r=document.createElement("label");if(r.className="text-sm font-medium text-gray-900",r.textContent=(n=(t=e.label)!=null?t:e.key)!=null?n:"",e.required){const o=document.createElement("span");o.className="text-red-500 ml-1",o.textContent="*",r.appendChild(o)}return r}function ul(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(),al(n,t)},t}function dl(e){const t=document.createElement("div");t.className="flex items-center mb-2";const n=cl(e);if(t.appendChild(n),e.description||e.hint){const r=ul(e);t.appendChild(r)}return t}function fl(e,t,n,r){const o="multiple"in e&&e.multiple;switch(e.type){case"text":o?dr(e,t,n,r):ur(e,t,n,r);break;case"textarea":o?pr(e,t,n,r):fr(e,t,n,r);break;case"number":o?vr(e,t,n,r):br(e,t,n,r);break;case"select":o?Er(e,t,n,r):xr(e,t,n,r);break;case"switcher":o?$r(e,t,n,r):kr(e,t,n,r);break;case"file":o?bo(e,t,n,r):mo(e,t,n,r);break;case"files":ho(e,t,n,r);break;case"colour":o?go(e,t,n,r):vo(e,t,n,r);break;case"slider":o?wo(e,t,n,r):Eo(e,t,n,r);break;case"group":So(e,t,n,r);break;case"container":o?Nn(e,t,n):zn(e,t,n,r);break;case"table":Do(e,t,n,r);break;case"richinput":Jo(e,t,n,r);break;default:{const i=document.createElement("div");i.className="text-red-500 text-sm",i.textContent=$("unsupportedFieldType",t.state,{type:e.type}),n.appendChild(i)}}}function Bt(e,t){if(e.type==="markdown"){if(e.hidden===!0){const c=document.createElement("div");return c.style.display="none",c.setAttribute("data-fb-hidden-markdown","true"),c}const l=Zn(e,t),a=document.createElement("div");return a.className="mb-6 fb-field-wrapper fb-markdown-wrapper",a.setAttribute("data-field-key",vt(e,t.state)),ol(e,t,a),l&&(a.style.display="none",a.classList.add("fb-field-wrapper-disabled"),a.setAttribute("data-conditionally-disabled","true")),Qn(a,e,t),a}const n=Zn(e,t),r=document.createElement("div");r.className="mb-6 fb-field-wrapper",r.setAttribute("data-field-key",e.key);const o=dl(e);r.appendChild(o);const i=xe(t.path,e.key);return fl(e,t,r,i),n&&(r.style.display="none",r.classList.add("fb-field-wrapper-disabled"),r.setAttribute("data-conditionally-disabled","true")),Qn(r,e,t),r}$o(Bt);const Dt={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,pickExistingFiles:null,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",downloadFile:"Download",openInNewTab:"Open in new tab",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})",uploadingFile:"Uploading\u2026",filesCounter:"{count}/{max}",fromLibrary:"From library",libraryEmpty:"Library is empty",libraryHint:"Choose from previously uploaded files",pickerError:"Failed to load files from library",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}',invalidFileMime:'File "{name}": file type {type} not allowed (allowed: {mimes})',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",downloadFile:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C",openInNewTab:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u0439 \u0432\u043A\u043B\u0430\u0434\u043A\u0435",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})",uploadingFile:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",filesCounter:"{count}/{max}",fromLibrary:"\u0418\u0437 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438",libraryEmpty:"\u0411\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430 \u043F\u0443\u0441\u0442\u0430",libraryHint:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u043D\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0445 \u0444\u0430\u0439\u043B\u043E\u0432",pickerError:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u0438\u0437 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438",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}',invalidFileMime:'\u0424\u0430\u0439\u043B "{name}": \u0442\u0438\u043F \u0444\u0430\u0439\u043B\u0430 {type} \u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D (\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u044B: {mimes})',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 pl(e){const t={...Dt.translations};if(e!=null&&e.translations)for(const[n,r]of Object.entries(e.translations))t[n]={...Dt.translations[n]||{},...r};return{schema:null,formRoot:null,resourceIndex:new Map,externalActions:null,version:"1.0.0",config:{...Dt,...e,translations:t},debounceTimer:null,prefill:{},syntheticElementIds:new WeakMap,syntheticElementIdCounter:0}}function ml(){const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,9);return`inst-${e}-${t}`}const We={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 hl(e){const t={...We,...e},n=[];return Object.entries(t).forEach(([r,o])=>{const i=r.replace(/([A-Z])/g,"-$1").toLowerCase();n.push(` --fb-${i}: ${o};`)}),n.join(`
|
|
1017
|
-
`)}function
|
|
1131
|
+
`,document.head.appendChild(e)}const dl=["javascript:","data:","vbscript:","blob:"],fl=["javascript:","vbscript:","blob:"];function pl(e){return!!(fl.some(t=>e.startsWith(t))||e.startsWith("data:")&&!e.startsWith("data:image/"))}function ml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function hl(e){e.querySelectorAll("a[href]").forEach(t=>{var n;const r=((n=t.getAttribute("href"))!=null?n:"").trim().toLowerCase();dl.some(o=>r.startsWith(o))&&t.setAttribute("href","#"),t.setAttribute("target","_blank"),t.setAttribute("rel","noopener noreferrer")}),e.querySelectorAll("img[src]").forEach(t=>{var n;const r=((n=t.getAttribute("src"))!=null?n:"").trim().toLowerCase();pl(r)&&t.setAttribute("src","")})}function bl(e,t,n){if(typeof e.content!="string")throw new Error(`renderMarkdown: markdown element${e.key?` "${e.key}"`:""} requires "content" to be a string (got ${e.content===null?"null":typeof e.content})`);cl();const r=document.createElement("div");r.className="fb-markdown";const o=ml(e.content);return r.innerHTML=Ht(o),hl(r),n.appendChild(r),r}function vl(e,t,n){return{value:void 0,errors:[],skip:!0}}function gl(e,t,n,r){}function yl(e,t){const n=document.getElementById(e);if(!n)return;const r=!n.classList.contains("hidden");if(document.querySelectorAll('[id^="tooltip-"]').forEach(d=>{d.classList.add("hidden")}),r)return;const o=t.getBoundingClientRect(),i=window.innerWidth,a=window.innerHeight;n&&n.parentElement!==document.body&&document.body.appendChild(n),n.style.visibility="hidden",n.style.position="fixed",n.classList.remove("hidden");const l=n.getBoundingClientRect();n.classList.add("hidden"),n.style.visibility="visible";let u=o.left,s=o.bottom+5;u+l.width>i&&(u=o.right-l.width),s+l.height>a&&(s=o.top-l.height-5),u<10&&(u=10),s<10&&(s=o.bottom+5),n.style.left=`${u}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 er(e,t){var n,r,o;if(!e.enableIf)return!1;try{const i=(r=(n=t.formData)!=null?n:t.prefill)!=null?r:{},a=((o=e.enableIf.scope)!=null?o:"relative")==="relative"&&t.path?t.prefill:void 0;return!ze(e.enableIf,i,a)}catch(i){console.error(`Error evaluating enableIf for field "${e.key}":`,i)}return!1}function xl(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 dt(e,t,n){var r,o;if(!t.enableIf)return;const i=n.state.formRoot;if(!i){console.error("Cannot re-evaluate enableIf: formRoot is null");return}const a=t.enableIf,l=(r=a.scope)!=null?r:"relative";let u={};const s={};if((!n.path||n.path===""?"absolute":l)==="relative"&&n.path){const d=n.path.match(/^(.+)\[(\d+)\]$/);if(d){const c=d[1],p=parseInt(d[2],10),f=i.querySelector(`[data-container-item="${c}[${p}]"]`);f&&f.querySelectorAll("input, select, textarea").forEach(m=>{const g=m.getAttribute("name");if(g){const y=g.match(/\.([^.[\]]+)$/);if(y){const C=y[1];m instanceof HTMLSelectElement?s[C]=m.value:m instanceof HTMLInputElement?m.type==="checkbox"?s[C]=m.checked:m.type==="radio"?m.checked&&(s[C]=m.value):s[C]=m.value:m instanceof HTMLTextAreaElement&&(s[C]=m.value)}}})}}else{const d=a.key,c=xl(d,i);c!==void 0?u[d]=c:u=(o=n.formData)!=null?o:n.prefill}try{ze(a,u,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(d){console.error(`Error re-evaluating enableIf for field "${t.key}":`,d)}}function tr(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 i=t.enableIf,a=(r=i.scope)!=null?r:"relative",l=i.key;let u;a==="relative"&&n.path?u=`${n.path}.${l}`:u=l;const s=o.querySelector(`[name="${u}"]`);if(!s){const d=new MutationObserver(()=>{const c=o.querySelector(`[name="${u}"]`);c&&(c.addEventListener("change",()=>{dt(e,t,n)}),c.addEventListener("input",()=>{dt(e,t,n)}),d.disconnect())});d.observe(o,{childList:!0,subtree:!0});return}s.addEventListener("change",()=>{dt(e,t,n)}),s.addEventListener("input",()=>{dt(e,t,n)})}function El(e){var t,n;const r=document.createElement("label");if(r.className="text-sm font-medium text-gray-900",r.textContent=(n=(t=e.label)!=null?t:e.key)!=null?n:"",e.required){const o=document.createElement("span");o.className="text-red-500 ml-1",o.textContent="*",r.appendChild(o)}return r}function Cl(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(),yl(n,t)},t}function wl(e){const t=document.createElement("div");t.className="flex items-center mb-1";const n=El(e);if(t.appendChild(n),e.description||e.hint){const r=Cl(e);t.appendChild(r)}return t}function kl(e,t,n,r){const o="multiple"in e&&e.multiple;switch(e.type){case"text":o?pr(e,t,n,r):fr(e,t,n,r);break;case"textarea":o?hr(e,t,n,r):mr(e,t,n,r);break;case"number":o?yr(e,t,n,r):gr(e,t,n,r);break;case"select":o?wr(e,t,n,r):Cr(e,t,n,r);break;case"switcher":o?Sr(e,t,n,r):Lr(e,t,n,r);break;case"file":o?So(e,t,n,r):$o(e,t,n,r);break;case"files":Lo(e,t,n,r);break;case"colour":o?Ao(e,t,n,r):To(e,t,n,r);break;case"slider":o?zo(e,t,n,r):No(e,t,n,r);break;case"group":Do(e,t,n,r);break;case"container":o?In(e,t,n):qn(e,t,n,r);break;case"table":Xo(e,t,n,r);break;case"richinput":il(e,t,n,r);break;default:{const i=document.createElement("div");i.className="text-red-500 text-sm",i.textContent=$("unsupportedFieldType",t.state,{type:e.type}),n.appendChild(i)}}}function Bt(e,t){if(e.type==="markdown"){if(e.hidden===!0){const u=document.createElement("div");return u.style.display="none",u.setAttribute("data-fb-hidden-markdown","true"),u}const a=er(e,t),l=document.createElement("div");return l.className="mb-2 fb-field-wrapper fb-markdown-wrapper",l.setAttribute("data-field-key",ht(e,t.state)),bl(e,t,l),a&&(l.style.display="none",l.classList.add("fb-field-wrapper-disabled"),l.setAttribute("data-conditionally-disabled","true")),tr(l,e,t),l}const n=er(e,t),r=document.createElement("div");r.className="mb-2 fb-field-wrapper",r.setAttribute("data-field-key",e.key);const o=wl(e);r.appendChild(o);const i=ye(t.path,e.key);return kl(e,t,r,i),n&&(r.style.display="none",r.classList.add("fb-field-wrapper-disabled"),r.setAttribute("data-conditionally-disabled","true")),tr(r,e,t),r}Ro(Bt);const Dt={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,pickExistingFiles:null,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",downloadFile:"Download",openInNewTab:"Open in new tab",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",fileCountWithMax:"{count} / {max} files",fileCountRange:"({min}-{max})",uploadingFile:"Uploading\u2026",filesCounter:"{count}/{max}",fromLibrary:"From library",libraryEmpty:"Library is empty",libraryHint:"Choose from previously uploaded files",dropToUpload:"Release to upload",replaceFile:"Replace",clearAll:"Clear all",pickerError:"Failed to load files from library",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}',invalidFileMime:'File "{name}": file type {type} not allowed (allowed: {mimes})',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",downloadFile:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C",openInNewTab:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u0439 \u0432\u043A\u043B\u0430\u0434\u043A\u0435",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",fileCountWithMax:"{count} / {max} \u0444\u0430\u0439\u043B\u043E\u0432",fileCountRange:"({min}-{max})",uploadingFile:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026",filesCounter:"{count}/{max}",fromLibrary:"\u0418\u0437 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438",libraryEmpty:"\u0411\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430 \u043F\u0443\u0441\u0442\u0430",libraryHint:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u0437 \u0440\u0430\u043D\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0445 \u0444\u0430\u0439\u043B\u043E\u0432",dropToUpload:"\u041E\u0442\u043F\u0443\u0441\u0442\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C",replaceFile:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C",clearAll:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u0435",pickerError:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u0438\u0437 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438",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}',invalidFileMime:'\u0424\u0430\u0439\u043B "{name}": \u0442\u0438\u043F \u0444\u0430\u0439\u043B\u0430 {type} \u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D (\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u044B: {mimes})',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 $l(e){const t={...Dt.translations};if(e!=null&&e.translations)for(const[n,r]of Object.entries(e.translations))t[n]={...Dt.translations[n]||{},...r};return{schema:null,formRoot:null,resourceIndex:new Map,externalActions:null,version:"1.0.0",config:{...Dt,...e,translations:t},debounceTimer:null,prefill:{},syntheticElementIds:new WeakMap,syntheticElementIdCounter:0}}function Ll(){const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,9);return`inst-${e}-${t}`}const Ve={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.5rem",inputPaddingY:"0.25rem",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 Sl(e){const t={...Ve,...e},n=[];return Object.entries(t).forEach(([r,o])=>{const i=r.replace(/([A-Z])/g,"-$1").toLowerCase();n.push(` --fb-${i}: ${o};`)}),n.join(`
|
|
1132
|
+
`)}function Tl(e,t){const n=Sl(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=`
|
|
1018
1133
|
[data-fb-root="true"] {
|
|
1019
1134
|
${n}
|
|
1020
1135
|
}
|
|
1021
|
-
`}const
|
|
1136
|
+
`}const Al={default:Ve,dark:{...Ve,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:{...Ve,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 nr(e,t=!1){e.style.cssText=`
|
|
1022
1137
|
background-color: var(--fb-action-bg-color);
|
|
1023
1138
|
color: var(--fb-action-text-color);
|
|
1024
1139
|
border: var(--fb-border-width) solid var(--fb-action-border-color);
|
|
@@ -1028,6 +1143,6 @@ ${n}
|
|
|
1028
1143
|
border-radius: var(--fb-border-radius);
|
|
1029
1144
|
transition: all var(--fb-transition-duration);
|
|
1030
1145
|
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
1031
|
-
`,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
|
|
1146
|
+
`,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 Fl(e,t,n){var r;const{scopeRoot:o}=n,i=o.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${t}"]`),a=(r=i==null?void 0:i.value)!=null?r:"";if(a===""){const l="default"in e?e.default:null;return{value:l!==void 0?l:null,errors:[]}}return{value:Ot(a),errors:[]}}function Ml(e,t,n,r){const{scopeRoot:o}=r,i=o.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${t}"]`);i&&(i.value=jt(n))}const Nl={text:{validate:Ut,update:Pt},textarea:{validate:br,update:vr},number:{validate:xr,update:Er},select:{validate:kr,update:$r},switcher:{validate:Tr,update:Ar},file:{validate:wn,update:$n},files:{validate:wn,update:$n},colour:{validate:Fo,update:Mo},slider:{validate:qo,update:Io},container:{validate:Hn,update:Bn},group:{validate:jo,update:Oo},table:{validate:Zo,update:Qo},richinput:{validate:al,update:sl},hidden:{validate:Fl,update:Ml},markdown:{validate:vl,update:gl}};function rr(e){return Nl[e]||null}function zl(e,t,n){const r=rr(e.type);return r&&r.validate?r.validate(e,t,n):null}function ql(e,t,n,r){const o=rr(e.type);return o&&o.update?(o.update(e,t,n,r),!0):!1}class ft{constructor(t){this.instanceId=Ll(),this.state=$l(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 i=[t,t.replace(/\[(\d+)\]/g,"[$1]"),t.replace(/\./g,"[")+"]".repeat((t.match(/\./g)||[]).length)];for(const a of i)if(o=this.state.formRoot.querySelector(`[name="${a}"]`),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 i=n.label||n.key,a=o.querySelector("label");if(a&&(a.textContent===i||a.textContent===`${i}*`)){let l=o.querySelector(".field-placeholder");return l||(l=document.createElement("div"),l.className="field-placeholder",l.style.display="none",o.appendChild(l)),l}}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 i of o){if(r=n.find(a=>a.key===i)||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 i=r.actions.find(a=>a.key===t);if(i&&i.label)return i.label}if(o&&this.state.schema&&"actions"in this.state.schema&&this.state.schema.actions){const i=this.state.schema.actions.find(a=>a.key===t);if(i&&i.label)return i.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-3 pt-2 flex flex-wrap gap-2 justify-center",o.style.cssText=`
|
|
1032
1147
|
border-top: var(--fb-border-width) solid var(--fb-border-color);
|
|
1033
|
-
`,t.forEach(i=>{const l=document.createElement("button");l.type="button",er(l,!0);const a=n.includes(i),c=this.resolveActionLabel(i.key,i.label,null,a);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(i.value,i.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(i=>{!i.key||!i.value||(i.related_field?(t.has(i.related_field)||t.set(i.related_field,[]),t.get(i.related_field).push(i)):n.push(i))}),t.forEach((i,l)=>{const a=this.findFormElementByFieldPath(l);if(!a){console.warn(`External action: Could not find form element for field "${l}", treating as form-level actions`),r.push(...i);return}let c=a.closest(".fb-field-wrapper");if(c||(c=a.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 p=document.createElement("div");p.className="external-actions-container mt-3 flex flex-wrap gap-2";const u=this.findSchemaElement(l);i.forEach(f=>{const d=document.createElement("button");d.type="button",er(d,!1);const m=this.resolveActionLabel(f.key,f.label,u);d.textContent=m,d.addEventListener("click",v=>{v.preventDefault(),v.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(f.value,f.key,f.related_field)}),p.appendChild(d)}),c.appendChild(p)});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",i=n.getAttribute("data-container-key");if(!r||!o&&!i){console.warn("Prefill hint missing required data attributes");return}try{const l=JSON.parse(r);for(const a in l){const c=o?a:`${i}.${a}`,s=l[a];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 i=bt(n);if(i.length>0){console.error("Schema validation errors:",i);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"),bl(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 a=document.createElement("div"),c=n.columns||1;c===1?a.className="space-y-4":a.className=`grid grid-cols-${c} gap-4`,n.elements.forEach(s=>{var p,u;if(s.type!=="markdown"&&(s.hidden||s.type==="hidden")){const d=(u=(p=r==null?void 0:r[s.key])!=null?p:s.default)!=null?u:null;a.appendChild(De(s.key,d));return}const f=Bt(s,{path:"",prefill:r||{},formData:r||{},state:this.state,instance:this});a.appendChild(f)}),l.appendChild(a),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=(i,l,a=null)=>{var c;const s=(c=i.key)!=null?c:"",p={scopeRoot:a||this.state.formRoot,state:this.state,instance:this,path:l.path,skipValidation:t},u=El(i,s,p);return u!==null?(n.push(...u.errors),{value:u.value,spread:!!u.spread,skip:!!u.skip}):(console.warn(`Unknown field type "${i.type}" for key "${s}"`),{value:null,spread:!1})};return Lo(o),this.state.schema.elements.forEach(i=>{var l;if(i.enableIf)try{if(!ze(i.enableIf,r))return}catch(a){console.error(`Error evaluating enableIf for field "${i.key}" during validation:`,a)}if(i.type!=="markdown")if(i.hidden||i.type==="hidden"){const a=this.state.formRoot.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${i.key}"]`),c=(l=a==null?void 0:a.value)!=null?l:"";c!==""?r[i.key]=Ot(c):r[i.key]=i.default!==void 0?i.default:null}else{const a=o(i,{path:""});if(a.skip)return;a.spread&&a.value!==null&&typeof a.value=="object"?Object.assign(r,a.value):i.key&&(r[i.key]=a.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){if(r.type==="markdown"||!r.key)continue;const o=r.key;if(r.hidden&&r.default!==void 0&&(n[o]=r.default),r.type==="container"||r.type==="group"){const i=r,l=this.buildHiddenFieldsData(i.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 i of t)if(i.type==="richinput"&&i.flatOutput){const l=i,a=(n=l.textKey)!=null?n:"text",c=(r=l.filesKey)!=null?r:"files";o.set(a,{schemaKey:i.key,role:"text"}),o.set(c,{schemaKey:i.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 i=n.get(o);i?(r.has(i.schemaKey)||r.set(i.schemaKey,{}),r.get(i.schemaKey)[o]=t[o]):this.updateField(o,t[o])}for(const[o,i]of r)this.updateField(o,i)}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 i={scopeRoot:this.state.formRoot,state:this.state,instance:this,path:""};wl(n,r,o,i)||console.warn(`updateField: No updater found for field type "${n.type}" at path "${r}"`)}findFieldWrapper(t,n){const r=this.state.formRoot,o=vt(t,this.state);if(!n)return r.querySelector(`[data-field-key="${o}"]`);const i=n.match(/^(.+)\[(\d+)\]$/);if(i){const a=r.querySelector(`[data-container-item="${i[1]}[${i[2]}]"]`);return a?a.querySelector(`[data-field-key="${o}"]`):null}const l=r.querySelector(`[data-container="${n}"]`);return l?l.querySelector(`[data-field-key="${o}"]`):null}applyEnableIfVisibility(t,n,r,o,i){var l,a,c,s;try{const p=((l=t.enableIf.scope)!=null?l:"relative")==="relative"&&r?gt(i,r):void 0,u=ze(t.enableIf,i,p),f=n.getAttribute("data-conditionally-disabled")==="true";if(u&&f){const d=r?gt(i,r):i,m=Bt(t,{path:r,prefill:d&&typeof d=="object"?d:{},formData:i,state:this.state,instance:this});(a=n.parentNode)==null||a.replaceChild(m,n)}else if(!u&&!f){const d=document.createElement("div");d.className="fb-field-wrapper-disabled",d.style.display="none",d.setAttribute("data-field-key",vt(t,this.state)),d.setAttribute("data-conditionally-disabled","true"),(c=n.parentNode)==null||c.replaceChild(d,n)}}catch(p){console.error(`Error re-evaluating enableIf for field "${(s=t.key)!=null?s:"<no key>"}" at path "${o}":`,p)}}reevaluateConditionalFields(){if(!this.state.schema||!this.state.formRoot)return;const t=this.validateForm(!0).data,n=(r,o)=>{r.forEach(i=>{var l,a;const c=o?`${o}.${(l=i.key)!=null?l:""}`:(a=i.key)!=null?a:"";if(i.enableIf){const s=this.findFieldWrapper(i,o);s&&this.applyEnableIfVisibility(i,s,o,c,t)}if((i.type==="container"||i.type==="group")&&"elements"in i&&i.elements){const s=i.key?t==null?void 0:t[i.key]:void 0;if(Array.isArray(s)){const p=this.state.formRoot.querySelectorAll("[data-container-item]");(c?Array.from(p).filter(u=>{const f=u.getAttribute("data-container-item")||"";if(!f.startsWith(`${c}[`))return!1;const d=f.slice(c.length);return/^\[\d+\]$/.test(d)}):[]).forEach(u=>{const f=u.getAttribute("data-container-item")||"";n(i.elements,f)})}else n(i.elements,c)}})};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 nr(e){return new mt(e)}return typeof window!="undefined"&&(window.FormBuilder=mt,window.createFormBuilder=nr,window.validateSchema=bt),Ce.FormBuilderInstance=mt,Ce.createFormBuilder=nr,Ce.default=mt,Ce.defaultTheme=We,Ce.exampleThemes=vl,Ce.validateSchema=bt,Object.defineProperty(Ce,"__esModule",{value:!0}),Ce})({});
|
|
1148
|
+
`,t.forEach(i=>{const a=document.createElement("button");a.type="button",nr(a,!0);const l=n.includes(i),u=this.resolveActionLabel(i.key,i.label,null,l);a.textContent=u,a.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(i.value,i.key,null)}),o.appendChild(a)}),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(i=>{!i.key||!i.value||(i.related_field?(t.has(i.related_field)||t.set(i.related_field,[]),t.get(i.related_field).push(i)):n.push(i))}),t.forEach((i,a)=>{const l=this.findFormElementByFieldPath(a);if(!l){console.warn(`External action: Could not find form element for field "${a}", treating as form-level actions`),r.push(...i);return}let u=l.closest(".fb-field-wrapper");if(u||(u=l.parentElement),!u){console.warn(`External action: Could not find wrapper for field "${a}"`);return}const s=u.querySelector(".external-actions-container");s&&s.remove();const d=document.createElement("div");d.className="external-actions-container mt-3 flex flex-wrap gap-2";const c=this.findSchemaElement(a);i.forEach(p=>{const f=document.createElement("button");f.type="button",nr(f,!1);const m=this.resolveActionLabel(p.key,p.label,c);f.textContent=m,f.addEventListener("click",g=>{g.preventDefault(),g.stopPropagation(),this.state.config.actionHandler&&typeof this.state.config.actionHandler=="function"&&this.state.config.actionHandler(p.value,p.key,p.related_field)}),d.appendChild(f)}),u.appendChild(d)});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",i=n.getAttribute("data-container-key");if(!r||!o&&!i){console.warn("Prefill hint missing required data attributes");return}try{const a=JSON.parse(r);for(const l in a){const u=o?l:`${i}.${l}`,s=a[l];this.updateField(u,s)}}catch(a){console.error("Error parsing prefill hint values:",a)}}createRootPrefillHints(t){const n=document.createElement("div");return n.className="fb-prefill-hints flex flex-wrap gap-2 mb-2",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 i=mt(n);if(i.length>0){console.error("Schema validation errors:",i);return}this.state.formRoot=t,this.state.schema=n,this.state.externalActions=o||null,this.state.prefill=r||{},be(t),t.setAttribute("data-fb-root","true"),Tl(t,this.state.config.theme);const a=document.createElement("div");if(a.className="space-y-2",n.prefillHints&&!this.state.config.readonly){const s=this.createRootPrefillHints(n.prefillHints);a.appendChild(s)}const l=document.createElement("div"),u=n.columns||1;u===1?l.className="space-y-2":l.className=`grid grid-cols-${u} gap-2`,n.elements.forEach(s=>{var d,c;if(s.type!=="markdown"&&(s.hidden||s.type==="hidden")){const f=(c=(d=r==null?void 0:r[s.key])!=null?d:s.default)!=null?c:null;l.appendChild(De(s.key,f));return}const p=Bt(s,{path:"",prefill:r||{},formData:r||{},state:this.state,instance:this});l.appendChild(p)}),a.appendChild(l),t.appendChild(a),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=(i,a,l=null)=>{var u;const s=(u=i.key)!=null?u:"",d={scopeRoot:l||this.state.formRoot,state:this.state,instance:this,path:a.path,skipValidation:t},c=zl(i,s,d);return c!==null?(n.push(...c.errors),{value:c.value,spread:!!c.spread,skip:!!c.skip}):(console.warn(`Unknown field type "${i.type}" for key "${s}"`),{value:null,spread:!1})};return Bo(o),this.state.schema.elements.forEach(i=>{var a;if(i.enableIf)try{if(!ze(i.enableIf,r))return}catch(l){console.error(`Error evaluating enableIf for field "${i.key}" during validation:`,l)}if(i.type!=="markdown")if(i.hidden||i.type==="hidden"){const l=this.state.formRoot.querySelector(`input[type="hidden"][data-hidden-field="true"][name="${i.key}"]`),u=(a=l==null?void 0:l.value)!=null?a:"";u!==""?r[i.key]=Ot(u):r[i.key]=i.default!==void 0?i.default:null}else{const l=o(i,{path:""});if(l.skip)return;l.spread&&l.value!==null&&typeof l.value=="object"?Object.assign(r,l.value):i.key&&(r[i.key]=l.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){if(r.type==="markdown"||!r.key)continue;const o=r.key;if(r.hidden&&r.default!==void 0&&(n[o]=r.default),r.type==="container"||r.type==="group"){const i=r,a=this.buildHiddenFieldsData(i.elements);Object.keys(a).length>0&&(o in n?typeof n[o]=="object"&&n[o]!==null&&!Array.isArray(n[o])&&(n[o]={...n[o],...a}):n[o]=a)}}return n}buildFlatKeyMap(t){var n,r;const o=new Map;for(const i of t)if(i.type==="richinput"&&i.flatOutput){const a=i,l=(n=a.textKey)!=null?n:"text",u=(r=a.filesKey)!=null?r:"files";o.set(l,{schemaKey:i.key,role:"text"}),o.set(u,{schemaKey:i.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 i=n.get(o);i?(r.has(i.schemaKey)||r.set(i.schemaKey,{}),r.get(i.schemaKey)[o]=t[o]):this.updateField(o,t[o])}for(const[o,i]of r)this.updateField(o,i)}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 i={scopeRoot:this.state.formRoot,state:this.state,instance:this,path:""};ql(n,r,o,i)||console.warn(`updateField: No updater found for field type "${n.type}" at path "${r}"`)}findFieldWrapper(t,n){const r=this.state.formRoot,o=ht(t,this.state);if(!n)return r.querySelector(`[data-field-key="${o}"]`);const i=n.match(/^(.+)\[(\d+)\]$/);if(i){const l=r.querySelector(`[data-container-item="${i[1]}[${i[2]}]"]`);return l?l.querySelector(`[data-field-key="${o}"]`):null}const a=r.querySelector(`[data-container="${n}"]`);return a?a.querySelector(`[data-field-key="${o}"]`):null}applyEnableIfVisibility(t,n,r,o,i){var a,l,u,s;try{const d=((a=t.enableIf.scope)!=null?a:"relative")==="relative"&&r?bt(i,r):void 0,c=ze(t.enableIf,i,d),p=n.getAttribute("data-conditionally-disabled")==="true";if(c&&p){const f=r?bt(i,r):i,m=Bt(t,{path:r,prefill:f&&typeof f=="object"?f:{},formData:i,state:this.state,instance:this});(l=n.parentNode)==null||l.replaceChild(m,n)}else if(!c&&!p){const f=document.createElement("div");f.className="fb-field-wrapper-disabled",f.style.display="none",f.setAttribute("data-field-key",ht(t,this.state)),f.setAttribute("data-conditionally-disabled","true"),(u=n.parentNode)==null||u.replaceChild(f,n)}}catch(d){console.error(`Error re-evaluating enableIf for field "${(s=t.key)!=null?s:"<no key>"}" at path "${o}":`,d)}}reevaluateConditionalFields(){if(!this.state.schema||!this.state.formRoot)return;const t=this.validateForm(!0).data,n=(r,o)=>{r.forEach(i=>{var a,l;const u=o?`${o}.${(a=i.key)!=null?a:""}`:(l=i.key)!=null?l:"";if(i.enableIf){const s=this.findFieldWrapper(i,o);s&&this.applyEnableIfVisibility(i,s,o,u,t)}if((i.type==="container"||i.type==="group")&&"elements"in i&&i.elements){const s=i.key?t==null?void 0:t[i.key]:void 0;if(Array.isArray(s)){const d=this.state.formRoot.querySelectorAll("[data-container-item]");(u?Array.from(d).filter(c=>{const p=c.getAttribute("data-container-item")||"";if(!p.startsWith(`${u}[`))return!1;const f=p.slice(u.length);return/^\[\d+\]$/.test(f)}):[]).forEach(c=>{const p=c.getAttribute("data-container-item")||"";n(i.elements,p)})}else n(i.elements,u)}})};n(this.state.schema.elements,"")}destroy(){var t;this.state.debounceTimer!==null&&(clearTimeout(this.state.debounceTimer),this.state.debounceTimer=null),this.state.resourceIndex.clear(),this.state.formRoot&&be(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 or(e){return new ft(e)}return typeof window!="undefined"&&(window.FormBuilder=ft,window.createFormBuilder=or,window.validateSchema=mt),ke.FormBuilderInstance=ft,ke.createFormBuilder=or,ke.default=ft,ke.defaultTheme=Ve,ke.exampleThemes=Al,ke.validateSchema=mt,Object.defineProperty(ke,"__esModule",{value:!0}),ke})({});
|