voc-lib-js 1.0.72 → 1.0.73
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/main.d.mts +10 -0
- package/dist/main.d.ts +10 -0
- package/dist/main.global.js +2 -2
- package/dist/main.js +2 -2
- package/dist/main.mjs +2 -2
- package/package.json +1 -1
package/dist/main.d.mts
CHANGED
|
@@ -36,6 +36,16 @@ type BaseField = {
|
|
|
36
36
|
multiple?: boolean;
|
|
37
37
|
icon?: string;
|
|
38
38
|
option_label?: string;
|
|
39
|
+
/**
|
|
40
|
+
* For the `tags` field only.
|
|
41
|
+
* Restrict which values are accepted as tags.
|
|
42
|
+
* Each entry is a validator type: 'email' | 'number' | 'url' | 'text'.
|
|
43
|
+
* If multiple types are provided, a tag is accepted when it passes ANY of them.
|
|
44
|
+
* Including 'text' (or leaving the array empty) accepts everything.
|
|
45
|
+
* @example ['email'] // only valid email addresses
|
|
46
|
+
* @example ['email', 'number'] // valid email OR a number
|
|
47
|
+
*/
|
|
48
|
+
tag_types?: Array<'email' | 'number' | 'url' | 'text'>;
|
|
39
49
|
};
|
|
40
50
|
type RowField = {
|
|
41
51
|
label?: string;
|
package/dist/main.d.ts
CHANGED
|
@@ -36,6 +36,16 @@ type BaseField = {
|
|
|
36
36
|
multiple?: boolean;
|
|
37
37
|
icon?: string;
|
|
38
38
|
option_label?: string;
|
|
39
|
+
/**
|
|
40
|
+
* For the `tags` field only.
|
|
41
|
+
* Restrict which values are accepted as tags.
|
|
42
|
+
* Each entry is a validator type: 'email' | 'number' | 'url' | 'text'.
|
|
43
|
+
* If multiple types are provided, a tag is accepted when it passes ANY of them.
|
|
44
|
+
* Including 'text' (or leaving the array empty) accepts everything.
|
|
45
|
+
* @example ['email'] // only valid email addresses
|
|
46
|
+
* @example ['email', 'number'] // valid email OR a number
|
|
47
|
+
*/
|
|
48
|
+
tag_types?: Array<'email' | 'number' | 'url' | 'text'>;
|
|
39
49
|
};
|
|
40
50
|
type RowField = {
|
|
41
51
|
label?: string;
|
package/dist/main.global.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var VocLibJs=(()=>{var P=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ne=(n,w)=>{for(var v in w)P(n,v,{get:w[v],enumerable:!0})},re=(n,w,v,L)=>{if(w&&typeof w=="object"||typeof w=="function")for(let p of te(w))!ae.call(n,p)&&p!==v&&P(n,p,{get:()=>w[p],enumerable:!(L=ee(w,p))||L.enumerable});return n};var se=n=>re(P({},"__esModule",{value:!0}),n);var me={};ne(me,{FormsLib:()=>le,default:()=>de});function j(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-avatar-wrapper",L&&p.classList.add("d-flex","align-items-center","gap-3");let b=document.createElement("img");b.className="voc-form-avatar-preview",b.alt=n.label||"avatar",L&&(b.classList.add("img-thumbnail","rounded-circle"),b.style.width=b.style.height="64px",b.style.objectFit="cover");let m=v!=null?String(v):n.default!==void 0&&n.default!==null?String(n.default):"";m?b.src=m:(b.src="",b.style.display="none");let i=document.createElement("input");i.type="file",i.accept=n.accept||"image/*",i.className="voc-form-avatar-input",L&&i.classList.add("form-control"),(n.key||n.name)&&(i.name=n.name||n.key,n.key&&(i.id=`voc-form-${n.key}`));let d=document.createElement("input");if(d.type="hidden",(n.key||n.name)&&(d.name=(n.name||n.key)+"_url"),d.value=m||"",i.addEventListener("change",u=>{let k=u.target;if(k.files&&k.files.length>0){let T=k.files[0],C=new FileReader;C.onload=()=>{b.src=String(C.result),b.style.display="",d.value=""},C.readAsDataURL(T)}}),L){let u=document.createElement("div");u.style.flex="1",u.appendChild(i),u.appendChild(d),p.appendChild(b),p.appendChild(u)}else p.appendChild(b),p.appendChild(i),p.appendChild(d);return p}function W(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");if(p.className="voc-form-audio-select",!n.options||n.options.length===0)return p;let b=n.name||n.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,m;return Array.isArray(v)?m=v[0]:v!==void 0?m=v:n.default!==void 0&&(m=n.default),n.options.forEach((i,d)=>{let u=document.createElement("div");u.className="voc-form-audio-item",L&&u.classList.add("form-check");let k=document.createElement("input");k.type="radio",k.name=b,k.value=i.value,k.className="voc-form-audio-radio",n.key&&(k.id=`voc-form-${n.key}-${d}`),n.required&&d===0&&(k.required=!0),k.style.position="absolute",k.style.width="1px",k.style.height="1px",k.style.margin="0",k.style.padding="0",k.style.clip="rect(0 0 0 0)",k.style.clipPath="inset(50%)",k.style.overflow="hidden",k.style.border="0",m!==void 0&&(Array.isArray(m)?k.checked=m.includes(i.value):k.checked=String(m)===String(i.value));let T=()=>{k.checked?u.classList.add("selected"):u.classList.remove("selected")};k.addEventListener("change",()=>{p.querySelectorAll(".voc-form-audio-item").forEach(r=>r.classList.remove("selected")),T()}),k.checked&&u.classList.add("selected");let C=document.createElement("label");C.className="voc-form-audio-label",L&&C.classList.add("form-check-label"),C.htmlFor=k.id||"",C.textContent=i.label||i.value,C.tabIndex=0;let g=document.createElement("div");g.className="voc-form-audio-control";let e=null;if(i.audio_link){let l=document.createElement("button");l.type="button",l.className="voc-form-audio-play",L&&l.classList.add("btn","btn-sm","btn-outline-secondary"),l.setAttribute("aria-label",`Play ${i.label||i.value}`);let r="http://www.w3.org/2000/svg",a=document.createElementNS(r,"svg");a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("width","16"),a.setAttribute("height","16"),a.setAttribute("aria-hidden","true");let t=document.createElementNS(r,"path");t.setAttribute("d","M8 5v14l11-7z"),t.setAttribute("fill","currentColor"),a.appendChild(t),l.appendChild(a),e=document.createElement("audio"),e.src=i.audio_link,e.preload="none",e.style.display="none";let c=y=>{for(;y.firstChild;)y.removeChild(y.firstChild)},E=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},x=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};c(l),l.appendChild(E());let N=y=>{c(l),y?(l.appendChild(x()),l.setAttribute("aria-label",`Stop ${i.label||i.value}`)):(l.appendChild(E()),l.setAttribute("aria-label",`Play ${i.label||i.value}`))};l.addEventListener("click",()=>{try{if(!e)return;let y=p.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}y.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),p.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(y){console.warn("audio play failed",y)}}),e.addEventListener("playing",()=>{u.classList.add("is-playing"),N(!0)});let A=()=>{u.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",A),e.addEventListener("ended",A),g.appendChild(l),g.appendChild(e)}let h=document.createElement("div");h.className="voc-form-item-detail",h.style.display="flex",h.style.flexDirection="column",h.style.gap="4px";let s=document.createElement("div");s.className="voc-form-item-top",s.style.display="flex",s.style.alignItems="center",s.style.gap="8px",s.appendChild(k),s.appendChild(C);let o=document.createElement("div");o.className="voc-form-item-description";let f=i.description||i.hint_text||"";f&&(o.textContent=f),h.appendChild(s),h.appendChild(o),g.appendChild(h),u.appendChild(g),s.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),u.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),p.appendChild(u)}),p}function G(n,w,v){let L=document.createElement("div");L.className="voc-form-table-wrapper";let p=w?.style==="bootstrap",b=document.createElement("input");b.type="hidden",b.name=n.name||n.key,n.key&&(b.id=`voc-form-${n.key}`),L.appendChild(b);let m=document.createElement("table");m.className="voc-form-table",p&&m.classList.add("table","table-bordered");let i=document.createElement("thead"),d=document.createElement("tr"),u=document.createElement("th");u.className="voc-form-table-drag-col",u.textContent="",d.appendChild(u),(n.fields||[]).forEach(r=>{let a=document.createElement("th");a.textContent=r.label||r.key,d.appendChild(a)});let k=document.createElement("th");k.textContent="Actions",d.appendChild(k),i.appendChild(d),m.appendChild(i);let T=document.createElement("tbody");m.appendChild(T),L.appendChild(m);let C=document.createElement("button");C.type="button",C.className="voc-form-table-add",p&&C.classList.add("btn","btn-secondary"),C.textContent="+Add";let g=document.createElement("tfoot"),e=document.createElement("tr"),h=document.createElement("td");h.colSpan=(n.fields?n.fields.length:0)+1,h.appendChild(C),e.appendChild(h),g.appendChild(e),m.appendChild(g),L.appendChild(m);let s=[];function o(){b.value=JSON.stringify(s)}function f(r){let a=[];return n.fields.forEach(t=>{let c=r[t.key];if(t.type==="checkbox"){let E=Array.isArray(c)?c:c?[c]:[];t.required&&E.length===0&&a.push(`${t.label||t.key} is required`);return}t.required&&(c==null||String(c).trim()==="")&&a.push(`${t.label||t.key} is required`),t.type==="email"&&c&&(/^\S+@\S+\.\S+$/.test(String(c))||a.push(`${t.label||t.key} must be a valid email`)),t.type==="number"&&c&&isNaN(Number(c))&&a.push(`${t.label||t.key} must be a number`),t.validation&&t.validation.regex&&c&&(new RegExp(t.validation.regex).test(String(c))||a.push(`${t.label||t.key} invalid format`))}),a}function l(){T.innerHTML="";let r=(a,t)=>{t.draggable=!0,t.addEventListener("mousedown",()=>{t.style.cursor="grabbing"}),t.addEventListener("mouseup",()=>{t.style.cursor="grab"}),t.addEventListener("dragstart",c=>{let E=Number(a.dataset.rowIndex);c.dataTransfer.setData("text/plain",String(E)),a.classList.add("dragging");try{c.dataTransfer?.setDragImage(t,10,10)}catch{}}),t.addEventListener("dragend",()=>{a.classList.remove("dragging"),t.style.cursor="grab"}),a.addEventListener("dragover",c=>{c.preventDefault();let E=c.currentTarget,x=E.getBoundingClientRect(),N=x.top+x.height/2,A=(c.clientY||c.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),A?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),a.addEventListener("dragleave",c=>{let E=c.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),a.addEventListener("drop",c=>{c.preventDefault();let E=c.dataTransfer.getData("text/plain"),x=Number(c.currentTarget.dataset.rowIndex),N=Number(E),A=c.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(x))return;let[y]=s.splice(N,1),F=x;N<x&&(F=x-1);let M=A==="after"?F+1:F;s.splice(M,0,y),c.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete c.currentTarget.dataset.dropPosition,l(),o()})};s.forEach((a,t)=>{let c=document.createElement("tr");c.dataset.rowIndex=String(t),c.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let x=document.createElement("span");x.className="voc-form-drag-handle-icon",x.textContent="\u2630",x.style.cursor="grab",E.appendChild(x),c.appendChild(E),r(c,x),n.fields.forEach(y=>{let F=document.createElement("td"),M,$=(y.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",p&&S.classList.add("form-control"),y.placeholder){let H=document.createElement("option");H.value="",H.textContent=y.placeholder,H.disabled=!0,(a[y.key]===void 0||a[y.key]===null||a[y.key]==="")&&(H.selected=!0),S.appendChild(H)}(y.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.required&&(S.required=!0),S.addEventListener("change",H=>{s[t][y.key]=H.target.value,o()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",p&&S.classList.add("form-check");let D=y.options||[];Array.isArray(s[t][y.key])||(s[t][y.key]=s[t][y.key]?[s[t][y.key]]:[]),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(s[t][y.key])&&s[t][y.key].includes(H.value),q.addEventListener("change",O=>{let X=O.target.checked;Array.isArray(s[t][y.key])||(s[t][y.key]=[]),X?s[t][y.key].includes(H.value)||s[t][y.key].push(H.value):s[t][y.key]=s[t][y.key].filter(Z=>Z!==H.value),o()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",p&&S.classList.add("form-check");let D=y.options||[];s[t][y.key]===void 0&&(s[t][y.key]=""),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${n.key}-${y.key}-${t}`,q.value=H.value,q.checked=s[t][y.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(s[t][y.key]=O.target.value,o())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.placeholder&&(S.placeholder=y.placeholder),y.required&&(S.required=!0),S.className="voc-form-table-cell",p&&S.classList.add("form-control"),S.addEventListener("input",D=>{s[t][y.key]=D.target.value,o()}),M=S}F.appendChild(M),c.appendChild(F)});let N=document.createElement("td"),A=document.createElement("button");A.type="button",A.className="voc-form-table-remove",p&&A.classList.add("btn","btn-danger"),A.textContent="Remove",A.addEventListener("click",()=>{s.splice(t,1),l(),o()}),N.appendChild(A),c.appendChild(N),T.appendChild(c)})}return C.addEventListener("click",()=>{if(n.validation?.max_rows!==void 0&&s.length>=n.validation.max_rows)return;let r={};n.fields.forEach(a=>r[a.key]=""),s.push(r),l(),o()}),Array.isArray(v)&&v.length?s=v.map(r=>({...r})):n.default&&Array.isArray(n.default)&&(s=n.default.map(r=>({...r}))),l(),o(),L.validate=function(){let r=[];return s.forEach((a,t)=>{let c=f(a);c.length&&r.push(`Row ${t+1}: ${c.join("; ")}`)}),n.validation?.min_rows!==void 0&&s.length<n.validation.min_rows&&r.push(`At least ${n.validation.min_rows} rows required`),n.validation?.max_rows!==void 0&&s.length>n.validation.max_rows&&r.push(`No more than ${n.validation.max_rows} rows allowed`),n.validation?.unique_fields&&n.validation.unique_fields.length&&n.validation.unique_fields.forEach(a=>{let t=new Set;s.forEach((c,E)=>{let x=c[a];x!=null&&(t.has(x)&&r.push(`Field ${a} must be unique (duplicate at row ${E+1})`),t.add(x))})}),r},L}async function oe(n){let v=new TextEncoder().encode(n),L=await crypto.subtle.digest("SHA-256",v);return Array.from(new Uint8Array(L)).map(b=>b.toString(16).padStart(2,"0")).join("")}async function ie(n){let w=String(n||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await oe(w)}?d=mp`:""}function V(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-users";let b=document.createElement("div");if(b.className="voc-form-users-header",L&&b.classList.add("mb-2"),n.label){let g=document.createElement("div");if(g.className="voc-form-users-label",L&&g.classList.add("form-label"),g.textContent=n.label,n.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",g.appendChild(e)}b.appendChild(g)}if(n.description){let g=document.createElement("div");g.className="voc-form-users-description",L&&g.classList.add("form-text"),g.textContent=n.description,b.appendChild(g)}p.appendChild(b);let m=document.createElement("div");m.className="voc-form-users-search-wrapper";let i=document.createElement("input");if(i.type="search",i.placeholder="Search users...",i.className="voc-form-users-search",L&&i.classList.add("form-control","mb-2"),m.appendChild(i),p.appendChild(m),!n.options||n.options.length===0)return p;let d=document.createElement("div");d.className="voc-form-users-list",L&&d.classList.add("list-group");let u=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,k=[];if(Array.isArray(v)?k=v:v!=null?k=[v]:Array.isArray(n.default)&&(k=n.default),n.options.forEach((g,e)=>{let h=document.createElement("div");h.className="voc-form-user-item",h.dataset.label=String(g.label||"").toLowerCase(),h.dataset.email=String(g.email||"").toLowerCase(),h.dataset.value=String(g.value||"").toLowerCase(),L&&h.classList.add("d-flex","align-items-center","gap-2");let s=document.createElement("input");if(s.type="checkbox",s.name=`${u}[]`,s.value=g.value,s.className="voc-form-user-checkbox",n.key&&(s.id=`voc-form-${n.key}-${e}`),s.style.position="absolute",s.style.width="1px",s.style.height="1px",s.style.margin="0",s.style.padding="0",s.style.clip="rect(0 0 0 0)",s.style.clipPath="inset(50%)",s.style.overflow="hidden",s.style.border="0",k&&Array.isArray(k)){let a=k.map(t=>String(t));s.checked=a.includes(String(g.value))}let o=document.createElement("img");o.className="voc-form-user-avatar",o.alt=g.label||String(g.value||"user"),o.style.width=o.style.height="40px",o.style.objectFit="cover",o.style.borderRadius="50%",o.src="",g.email&&ie(g.email).then(a=>{a&&(o.src=a)}).catch(()=>{});let f=document.createElement("div");f.className="voc-form-user-info",f.style.display="flex",f.style.flexDirection="column",f.style.gap="2px";let l=document.createElement("div");l.className="voc-form-user-label",l.textContent=g.label||String(g.value);let r=document.createElement("small");r.className="voc-form-user-email",r.textContent=g.email||"",f.appendChild(l),f.appendChild(r),h.addEventListener("click",a=>{let t=a.target;t&&(t.closest("input")||t.closest("a")||t.closest("button"))||(s.checked=!s.checked,s.dispatchEvent(new Event("change",{bubbles:!0})))}),s.addEventListener("change",()=>{s.checked?h.classList.add("selected"):h.classList.remove("selected")}),s.checked&&h.classList.add("selected"),h.appendChild(s),h.appendChild(o),h.appendChild(f),d.appendChild(h)}),p.appendChild(d),n.required){let g=d.querySelectorAll('input[type="checkbox"]'),e=()=>{let h=Array.from(g).some(s=>s.checked);return g.forEach(s=>{h?s.setCustomValidity(""):s.setCustomValidity("At least one option must be selected.")}),h};g.forEach(h=>{h.addEventListener("change",e)}),p._validateCheckboxGroup=e,e()}let T=Array.from(d.querySelectorAll(".voc-form-user-item")),C=()=>{let g=String(i.value||"").trim().toLowerCase();if(!g){T.forEach(e=>e.style.setProperty("display","flex","important"));return}T.forEach(e=>{let h=e.dataset.label||"",s=e.dataset.email||"",o=e.dataset.value||"",f=h.includes(g)||s.includes(g)||o.includes(g);e.style.setProperty("display",f?"flex":"none","important")})};return i.addEventListener("input",C),p}function U(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-timezone";let b=n.name||n.key||`timezone_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("input");m.type="text",m.name=b,n.key&&(m.id=`voc-form-${n.key}`),m.className="voc-form-timezone-input",L&&m.classList.add("form-control"),n.placeholder&&(m.placeholder=n.placeholder||""),n.required&&(m.required=!0),n.width&&(m.style.width=n.width);try{m.autocomplete="off"}catch{}try{m.autocorrect="off"}catch{}try{m.autocapitalize="off"}catch{}try{m.spellcheck=!1}catch{}m.setAttribute("data-lpignore","true"),v!=null?m.value=String(v):n.default!==void 0&&n.default!==null&&(m.value=String(n.default));let i=document.createElement("div");i.className="voc-form-timezone-control",i.style.position="relative",i.style.display="inline-block",i.style.width=n.width||"100%";let d=document.createElement("button");d.type="button",d.className="voc-form-timezone-toggle",d.setAttribute("aria-haspopup","listbox"),d.setAttribute("aria-expanded","false"),d.style.position="absolute",d.style.right="4px",d.style.top="50%",d.style.transform="translateY(-50%)",d.style.height="28px",d.style.width="28px",d.style.padding="0",d.style.border="none",d.style.background="transparent",d.style.cursor="pointer",d.innerHTML="\u25BC";let u=document.createElement("ul");u.className="voc-form-timezone-list",u.setAttribute("role","listbox"),u.style.position="absolute",u.style.left="0",u.style.right="0",u.style.zIndex="1000",u.style.maxHeight="200px",u.style.overflow="auto",u.style.margin="4px 0 0 0",u.style.padding="0",u.style.listStyle="none",u.style.background="white",u.style.border="1px solid rgba(0,0,0,0.15)",u.style.display="none",u.tabIndex=-1,m.style.paddingRight="36px";let T=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function C(l){u.innerHTML="",l.forEach((r,a)=>{let t=document.createElement("li");t.className="voc-form-timezone-item",t.setAttribute("role","option"),t.dataset.value=r,t.style.padding="6px 8px",t.style.cursor="pointer",t.textContent=r,t.addEventListener("mousedown",c=>{c.preventDefault(),m.value=r,s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}),u.appendChild(t)})}C(T);let g=-1;function e(){Array.from(u.children).forEach((r,a)=>{a===g?(r.style.background="rgba(0,123,255,0.1)",r.setAttribute("aria-selected","true")):(r.style.background="",r.removeAttribute("aria-selected"))})}function h(){u.style.display="block",d.setAttribute("aria-expanded","true")}function s(){u.style.display="none",d.setAttribute("aria-expanded","false"),g=-1,e()}function o(){u.style.display==="none"?h():s()}m.addEventListener("input",()=>{let l=(m.value||"").trim().toLowerCase(),r=l?T.filter(a=>a.toLowerCase().includes(l)):T;C(r),h()}),d.addEventListener("click",l=>{l.preventDefault(),u.style.display==="none"?(C(T),h(),m.focus()):s()}),m.addEventListener("keydown",l=>{let r=Array.from(u.children);if(l.key==="ArrowDown"){if(l.preventDefault(),r.length===0)return;g=Math.min(g+1,r.length-1),e(),r[g].scrollIntoView({block:"nearest"})}else if(l.key==="ArrowUp"){if(l.preventDefault(),r.length===0)return;g=Math.max(g-1,0),e(),r[g].scrollIntoView({block:"nearest"})}else if(l.key==="Enter"){if(u.style.display!=="none"&&g>=0){l.preventDefault();let a=r[g];m.value=a.dataset.value||a.textContent||"",s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}}else l.key==="Escape"&&s()}),document.addEventListener("click",l=>{i.contains(l.target)||s()});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(m.addEventListener("blur",()=>{let l=(m.value||"").trim();if(!l)return;let r=Object.keys(f).find(a=>a.toLowerCase()===l.toLowerCase());r&&(m.value=f[r])}),n.description){let l=document.createElement("div");l.className="voc-form-timezone-description",L&&l.classList.add("form-text"),l.textContent=n.description,p.appendChild(l)}return i.appendChild(m),i.appendChild(d),i.appendChild(u),p.appendChild(i),p}function J(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-tags";let b=n.name||n.key||`tags_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("div");m.className="voc-form-tags-container",m.style.display="flex",m.style.flexWrap="wrap",m.style.gap="6px",m.style.alignItems="center",m.style.padding="6px",m.style.border="1px solid rgba(0,0,0,0.12)",m.style.borderRadius="4px";let i=document.createElement("input");i.type="text",i.className="voc-form-tags-input",i.style.border="none",i.style.flex="1 0 120px",i.style.minWidth="80px",i.style.outline="none",i.placeholder=n.placeholder||"",L&&i.classList.add("form-control"),m.appendChild(i);let d=[],u=document.createElement("input");u.type="text",u.style.position="absolute",u.style.left="-9999px",u.style.width="1px",u.style.height="1px",u.tabIndex=-1,n.required&&(u.required=!0),p.appendChild(u);function k(){Array.from(p.querySelectorAll("input.voc-form-tag-hidden")).forEach(h=>h.parentElement?.removeChild(h)),d.forEach(h=>{let s=document.createElement("input");s.type="hidden",s.name=`${b}[]`,s.className="voc-form-tag-hidden",s.value=h,n.key&&(s.id=`voc-form-${n.key}`),p.appendChild(s)}),n.required&&(d.length===0?(u.value="",u.setCustomValidity("Please enter at least one tag")):(u.value="1",u.setCustomValidity("")))}function T(e){let h=document.createElement("span");h.className="voc-form-tag",h.style.display="inline-flex",h.style.alignItems="center",h.style.padding="4px 8px",h.style.background="rgba(0,0,0,0.05)",h.style.borderRadius="16px";let s=document.createElement("span");s.textContent=e,s.style.marginRight="8px",h.appendChild(s);let o=document.createElement("button");return o.type="button",o.textContent="\xD7",o.style.border="none",o.style.background="transparent",o.style.cursor="pointer",o.addEventListener("click",()=>{let f=d.indexOf(e);f>=0&&(d.splice(f,1),m.removeChild(h),k())}),h.appendChild(o),h}function C(e){let h=e.trim();if(!h||d.includes(h))return;d.push(h);let s=T(h);m.insertBefore(s,i),k()}let g=v!=null?String(v):n.default||"";return g&&g.split(",").map(e=>e.trim()).filter(Boolean).forEach(C),i.addEventListener("keydown",e=>{if(e.key==="Enter"||e.key===",")e.preventDefault(),C(i.value),i.value="";else if(e.key==="Backspace"&&i.value===""&&d.pop()){let s=Array.from(m.querySelectorAll(".voc-form-tag")),o=s[s.length-1];o&&m.removeChild(o),k()}}),i.addEventListener("paste",e=>{let h=e.clipboardData?.getData("text");h&&(e.preventDefault(),h.split(/[,\n\r]+/).map(s=>s.trim()).filter(Boolean).forEach(C),i.value="")}),p.getTags=()=>d.slice(),p.addTag=C,p.appendChild(m),k(),p}function Y(n,w,v,L){let p=w?.style==="bootstrap",b=document.createElement("div");b.className="voc-form-field-selects";let m=document.createElement("div");if(m.className="voc-form-field-selects-header",p&&m.classList.add("mb-2"),n.label){let o=document.createElement("div");if(o.className="voc-form-field-selects-label",p&&o.classList.add("form-label"),o.textContent=n.label,n.required){let f=document.createElement("span");f.className="voc-form-required",f.textContent="*",o.appendChild(f)}m.appendChild(o)}if(n.description){let o=document.createElement("div");o.className="voc-form-field-selects-description",p&&o.classList.add("form-text"),o.textContent=n.description,m.appendChild(o)}b.appendChild(m);let i=document.createElement("div");i.className="voc-form-field-selects-search-wrapper";let d=document.createElement("input");d.type="search",d.placeholder="Search...",d.className="voc-form-field-selects-search",p&&d.classList.add("form-control","mb-2"),i.appendChild(d),b.appendChild(i);let u=n.options;if(!u||u.length===0)return b;let k=document.createElement("div");k.className="voc-form-field-selects-list",p&&k.classList.add("list-group");let T=document.createElement("div");T.className="voc-form-field-selects-selected",T.style.marginTop="12px";let C={},g=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(v)?e=v:v!=null?e=[v]:Array.isArray(n.default)&&(e=n.default),u.forEach((o,f)=>{let l=document.createElement("div");l.className="voc-form-field-selects-item",l.dataset.label=String(o.option_label??o.label??"").toLowerCase(),l.dataset.email=String(o.email||"").toLowerCase(),l.dataset.value=String(o.value||"").toLowerCase(),p&&l.classList.add("d-flex","align-items-center","gap-2");let r=document.createElement("input");if(r.type="checkbox",r.name=`${g}[]`,r.value=o.value??o.key,r.className="voc-form--checkbox",n.key&&(r.id=`voc-form-${n.key}-${f}`),r.style.position="absolute",r.style.width="1px",r.style.height="1px",r.style.margin="0",r.style.padding="0",r.style.clip="rect(0 0 0 0)",r.style.clipPath="inset(50%)",r.style.overflow="hidden",r.style.border="0",e&&Array.isArray(e)){let N=e.map(y=>String(y)),A=String(o.value??o.key);r.checked=N.includes(A)}let a=o.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',t=document.createElement("div");t.className="voc-form-fields-select-avatar",t.innerHTML=a;let c=document.createElement("div");c.className="voc-form-field-select-info",c.style.display="flex",c.style.flexDirection="column",c.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(o.option_label??o.label)||String(o.value);let x=document.createElement("small");x.className="voc-form-field-select-email",x.textContent=o.email||"",c.appendChild(E),c.appendChild(x),l.addEventListener("click",N=>{let A=N.target;A&&(A.closest("input")||A.closest("a")||A.closest("button"))||(r.checked=!r.checked,r.dispatchEvent(new Event("change",{bubbles:!0})))}),r.addEventListener("change",()=>{if(r.checked){l.classList.add("selected"),(C[f]||[]).forEach(y=>y.parentElement?.removeChild(y)),C[f]=[];let A=o;if(A&&Array.isArray(A.items))A.items.forEach(y=>{let F=L(y);F&&(T.appendChild(F),C[f].push(F))});else if(A&&(A.type||A.key)){let y=L(A);y&&(T.appendChild(y),C[f].push(y))}}else l.classList.remove("selected"),(C[f]||[]).forEach(A=>A.parentElement?.removeChild(A)),C[f]=[]}),r.checked&&(l.classList.add("selected"),setTimeout(()=>{let N=o;if(N&&Array.isArray(N.items))N.items.forEach(A=>{let y=L(A);y&&(T.appendChild(y),C[f]=C[f]||[],C[f].push(y))});else if(N&&(N.type||N.key)){let A=L(N);A&&(T.appendChild(A),C[f]=C[f]||[],C[f].push(A))}},0)),l.appendChild(r),l.appendChild(t),l.appendChild(c),k.appendChild(l)}),b.appendChild(k),b.appendChild(T),n.required){let o=k.querySelectorAll('input[type="checkbox"]'),f=()=>{let l=Array.from(o).some(r=>r.checked);return o.forEach(r=>{l?r.setCustomValidity(""):r.setCustomValidity("At least one option must be selected.")}),l};o.forEach(l=>{l.addEventListener("change",f)}),b._validateCheckboxGroup=f,f()}let h=Array.from(k.querySelectorAll(".voc-form-field-select-item")),s=()=>{let o=String(d.value||"").trim().toLowerCase();if(!o){h.forEach(f=>f.style.setProperty("display","flex","important"));return}h.forEach(f=>{let l=f.dataset.label||"",r=f.dataset.email||"",a=f.dataset.value||"",t=l.includes(o)||r.includes(o)||a.includes(o);f.style.setProperty("display",t?"flex":"none","important")})};return d.addEventListener("input",s),b}function I(n,w=!0){let v=new FormData(n);if(w)return ce(v);let L={};return v.forEach((p,b)=>{let m=(p instanceof File,p);Object.prototype.hasOwnProperty.call(L,b)?Array.isArray(L[b])?L[b].push(m):L[b]=[L[b],m]:L[b]=m}),L}function ce(n){let w=new FormData;for(let[v,L]of n.entries()){if(L instanceof File){w.append(v,L);continue}let p;try{p=JSON.parse(L)}catch{p=null}Array.isArray(p)?p.length===0?w.append(v,"[]"):p.every(b=>typeof b=="object"&&b!==null)?p.forEach((b,m)=>{for(let[i,d]of Object.entries(b))w.append(`${v}[${m}][${i}]`,d)}):w.append(v,L):w.append(v,L)}return w}async function K(n,w,v){let L=w.url,p={"Content-Type":"application/json"};w?.api_token&&(p.Authorization=`Bearer ${w.api_token}`);let b=I(n);if(w?.additional_data)for(let[d,u]of Object.entries(w.additional_data))b.append(d,u);let m,i=b instanceof FormData;m={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...i?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:i?b:JSON.stringify(Object.fromEntries(b.entries()))};try{fetch(L,m).then(async d=>{let u=d.headers.get("content-type");if(!d.ok)try{let T=(await d.json())?.message;throw new Error(T??"Their was an error submitting the form. Check your form and try again.")}catch(k){throw new Error(k.message)}return u&&u.includes("application/json")?d.json():d.text()}).then(d=>{v&&v(d,null)}).catch(d=>{v&&v(null,d)})}catch(d){v&&v(null,d)}}function Q(n,w,v){let L=[];if(typeof n=="string"?L=Array.from(document.querySelectorAll(n)):L=[n],L.length===0)return null;function p(){let i=v?.style==="bootstrap",d=document.createElement("form");d.classList.add("voc-form"),i&&d.classList.add("needs-validation"),d.id=w.id;let u=document.createElement("h2");u.className="voc-form-title",i&&u.classList.add("mb-3"),u.textContent=w.form_name,d.appendChild(u);function k(e,h){h&&(h.min_length!==void 0&&(e.minLength=h.min_length),h.max_length!==void 0&&(e.maxLength=h.max_length),h.regex&&(e instanceof HTMLInputElement?e.pattern=h.regex:e.dataset.pattern=h.regex))}function T(e){if(!e.key&&!e.label)return null;let h=w.default_values||{},s=e.name||e.key,o=s?h[s]:void 0,f=document.createElement("div");if(f.className="voc-form-group",i&&f.classList.add("mb-3"),e.label&&e.type!=="users"){let a=document.createElement("label");if(a.classList.add("voc-form-label"),i&&a.classList.add("form-label"),e.key?e.type==="radio"?a.htmlFor="":a.htmlFor=`voc-form-${e.key}`:a.htmlFor="",a.textContent=e.label,e.required){let t=document.createElement("span");t.className="voc-form-required",t.textContent="*",a.appendChild(t)}f.appendChild(a)}let l=new Set(["users","timezone"]);if(e.description&&!l.has(String(e.type||""))){let a=document.createElement("div");a.className="voc-form-description",i&&a.classList.add("form-text","text-muted","mb-2"),a.textContent=e.description,f.appendChild(a)}let r=null;switch(e.type){case"tags":{r=J(e,v||{},o);break}case"checkbox":{let a=document.createElement("div");if(a.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(a.style.width=e.width),e.options){if(e.options.forEach((t,c)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),i&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="checkbox",x.classList.add("voc-form-checkbox"),i&&x.classList.add("form-check-input"),x.name=`${e.name||e.key||""}[]`,x.value=t.value,e.key&&(x.id=`voc-form-${e.key}-${c}`),Array.isArray(o)?o.includes(t.value)&&(x.checked=!0):o!==void 0?o===t.value&&(x.checked=!0):e.default===t.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(t.label)),a.appendChild(E)}),e.required){let t=a.querySelectorAll('input[type="checkbox"]'),c=()=>{let E=Array.from(t).some(x=>x.checked);return t.forEach(x=>{E?x.setCustomValidity(""):x.setCustomValidity("At least one option must be selected.")}),E};t.forEach(E=>{E.addEventListener("change",c)}),a._validateCheckboxGroup=c,c()}}else{let t=document.createElement("label");t.classList.add("voc-form-checkbox-label"),i&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),i&&c.classList.add("form-check-input"),e.required&&(c.required=!0),o!==void 0?c.checked=!!o:e.default&&(c.checked=!!e.default),t.appendChild(c),t.appendChild(document.createTextNode(e.label||"")),a.appendChild(t)}r=a;break}case"boolean":{let a=document.createElement("div");a.className="voc-form-boolean-wrapper",i&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let t=document.createElement("input");if(t.type="checkbox",t.classList.add("voc-form-boolean"),i&&t.classList.add("form-check-input"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.required&&(t.required=!0),o!==void 0?t.checked=!!o:e.default!==void 0&&(t.checked=e.default===!0||e.default==="true"),a.appendChild(t),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),i&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let x=document.createElement("span");x.className="voc-form-required",x.textContent="*",E.appendChild(x)}a.appendChild(E)}let c=f.querySelector(".voc-form-label");c&&c.remove(),r=a;break}case"textarea":{let a=document.createElement("textarea");a.classList.add("voc-form-textarea"),i&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.placeholder&&(a.placeholder=e.placeholder),o!=null?a.value=String(o):e.default!==void 0&&e.default!==null&&(a.value=String(e.default));let t=e.default||o||"";if(t){let c=(t.match(/\n/g)||[]).length,E=80,x=t.split(`
|
|
2
|
-
`).reduce((
|
|
1
|
+
"use strict";var VocLibJs=(()=>{var P=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ne=(r,w)=>{for(var y in w)P(r,y,{get:w[y],enumerable:!0})},re=(r,w,y,L)=>{if(w&&typeof w=="object"||typeof w=="function")for(let p of te(w))!ae.call(r,p)&&p!==y&&P(r,p,{get:()=>w[p],enumerable:!(L=ee(w,p))||L.enumerable});return r};var se=r=>re(P({},"__esModule",{value:!0}),r);var ue={};ne(ue,{FormsLib:()=>de,default:()=>me});function j(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-avatar-wrapper",L&&p.classList.add("d-flex","align-items-center","gap-3");let v=document.createElement("img");v.className="voc-form-avatar-preview",v.alt=r.label||"avatar",L&&(v.classList.add("img-thumbnail","rounded-circle"),v.style.width=v.style.height="64px",v.style.objectFit="cover");let u=y!=null?String(y):r.default!==void 0&&r.default!==null?String(r.default):"";u?v.src=u:(v.src="",v.style.display="none");let m=document.createElement("input");m.type="file",m.accept=r.accept||"image/*",m.className="voc-form-avatar-input",L&&m.classList.add("form-control"),(r.key||r.name)&&(m.name=r.name||r.key,r.key&&(m.id=`voc-form-${r.key}`));let l=document.createElement("input");if(l.type="hidden",(r.key||r.name)&&(l.name=(r.name||r.key)+"_url"),l.value=u||"",m.addEventListener("change",d=>{let b=d.target;if(b.files&&b.files.length>0){let A=b.files[0],k=new FileReader;k.onload=()=>{v.src=String(k.result),v.style.display="",l.value=""},k.readAsDataURL(A)}}),L){let d=document.createElement("div");d.style.flex="1",d.appendChild(m),d.appendChild(l),p.appendChild(v),p.appendChild(d)}else p.appendChild(v),p.appendChild(m),p.appendChild(l);return p}function W(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");if(p.className="voc-form-audio-select",!r.options||r.options.length===0)return p;let v=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,u;return Array.isArray(y)?u=y[0]:y!==void 0?u=y:r.default!==void 0&&(u=r.default),r.options.forEach((m,l)=>{let d=document.createElement("div");d.className="voc-form-audio-item",L&&d.classList.add("form-check");let b=document.createElement("input");b.type="radio",b.name=v,b.value=m.value,b.className="voc-form-audio-radio",r.key&&(b.id=`voc-form-${r.key}-${l}`),r.required&&l===0&&(b.required=!0),b.style.position="absolute",b.style.width="1px",b.style.height="1px",b.style.margin="0",b.style.padding="0",b.style.clip="rect(0 0 0 0)",b.style.clipPath="inset(50%)",b.style.overflow="hidden",b.style.border="0",u!==void 0&&(Array.isArray(u)?b.checked=u.includes(m.value):b.checked=String(u)===String(m.value));let A=()=>{b.checked?d.classList.add("selected"):d.classList.remove("selected")};b.addEventListener("change",()=>{p.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),A()}),b.checked&&d.classList.add("selected");let k=document.createElement("label");k.className="voc-form-audio-label",L&&k.classList.add("form-check-label"),k.htmlFor=b.id||"",k.textContent=m.label||m.value,k.tabIndex=0;let g=document.createElement("div");g.className="voc-form-audio-control";let e=null;if(m.audio_link){let s=document.createElement("button");s.type="button",s.className="voc-form-audio-play",L&&s.classList.add("btn","btn-sm","btn-outline-secondary"),s.setAttribute("aria-label",`Play ${m.label||m.value}`);let n="http://www.w3.org/2000/svg",t=document.createElementNS(n,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width","16"),t.setAttribute("height","16"),t.setAttribute("aria-hidden","true");let a=document.createElementNS(n,"path");a.setAttribute("d","M8 5v14l11-7z"),a.setAttribute("fill","currentColor"),t.appendChild(a),s.appendChild(t),e=document.createElement("audio"),e.src=m.audio_link,e.preload="none",e.style.display="none";let o=f=>{for(;f.firstChild;)f.removeChild(f.firstChild)},E=()=>{let f="http://www.w3.org/2000/svg",F=document.createElementNS(f,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(f,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},x=()=>{let f="http://www.w3.org/2000/svg",F=document.createElementNS(f,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(f,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};o(s),s.appendChild(E());let N=f=>{o(s),f?(s.appendChild(x()),s.setAttribute("aria-label",`Stop ${m.label||m.value}`)):(s.appendChild(E()),s.setAttribute("aria-label",`Play ${m.label||m.value}`))};s.addEventListener("click",()=>{try{if(!e)return;let f=p.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}f.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),p.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(f){console.warn("audio play failed",f)}}),e.addEventListener("playing",()=>{d.classList.add("is-playing"),N(!0)});let T=()=>{d.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",T),e.addEventListener("ended",T),g.appendChild(s),g.appendChild(e)}let C=document.createElement("div");C.className="voc-form-item-detail",C.style.display="flex",C.style.flexDirection="column",C.style.gap="4px";let c=document.createElement("div");c.className="voc-form-item-top",c.style.display="flex",c.style.alignItems="center",c.style.gap="8px",c.appendChild(b),c.appendChild(k);let i=document.createElement("div");i.className="voc-form-item-description";let h=m.description||m.hint_text||"";h&&(i.textContent=h),C.appendChild(c),C.appendChild(i),g.appendChild(C),d.appendChild(g),c.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(b.checked=!0,b.dispatchEvent(new Event("change",{bubbles:!0})))}),d.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(b.checked=!0,b.dispatchEvent(new Event("change",{bubbles:!0})))}),p.appendChild(d)}),p}function G(r,w,y){let L=document.createElement("div");L.className="voc-form-table-wrapper";let p=w?.style==="bootstrap",v=document.createElement("input");v.type="hidden",v.name=r.name||r.key,r.key&&(v.id=`voc-form-${r.key}`),L.appendChild(v);let u=document.createElement("table");u.className="voc-form-table",p&&u.classList.add("table","table-bordered");let m=document.createElement("thead"),l=document.createElement("tr"),d=document.createElement("th");d.className="voc-form-table-drag-col",d.textContent="",l.appendChild(d),(r.fields||[]).forEach(n=>{let t=document.createElement("th");t.textContent=n.label||n.key,l.appendChild(t)});let b=document.createElement("th");b.textContent="Actions",l.appendChild(b),m.appendChild(l),u.appendChild(m);let A=document.createElement("tbody");u.appendChild(A),L.appendChild(u);let k=document.createElement("button");k.type="button",k.className="voc-form-table-add",p&&k.classList.add("btn","btn-secondary"),k.textContent="+Add";let g=document.createElement("tfoot"),e=document.createElement("tr"),C=document.createElement("td");C.colSpan=(r.fields?r.fields.length:0)+1,C.appendChild(k),e.appendChild(C),g.appendChild(e),u.appendChild(g),L.appendChild(u);let c=[];function i(){v.value=JSON.stringify(c)}function h(n){let t=[];return r.fields.forEach(a=>{let o=n[a.key];if(a.type==="checkbox"){let E=Array.isArray(o)?o:o?[o]:[];a.required&&E.length===0&&t.push(`${a.label||a.key} is required`);return}a.required&&(o==null||String(o).trim()==="")&&t.push(`${a.label||a.key} is required`),a.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||t.push(`${a.label||a.key} must be a valid email`)),a.type==="number"&&o&&isNaN(Number(o))&&t.push(`${a.label||a.key} must be a number`),a.validation&&a.validation.regex&&o&&(new RegExp(a.validation.regex).test(String(o))||t.push(`${a.label||a.key} invalid format`))}),t}function s(){A.innerHTML="";let n=(t,a)=>{a.draggable=!0,a.addEventListener("mousedown",()=>{a.style.cursor="grabbing"}),a.addEventListener("mouseup",()=>{a.style.cursor="grab"}),a.addEventListener("dragstart",o=>{let E=Number(t.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(E)),t.classList.add("dragging");try{o.dataTransfer?.setDragImage(a,10,10)}catch{}}),a.addEventListener("dragend",()=>{t.classList.remove("dragging"),a.style.cursor="grab"}),t.addEventListener("dragover",o=>{o.preventDefault();let E=o.currentTarget,x=E.getBoundingClientRect(),N=x.top+x.height/2,T=(o.clientY||o.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),T?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),t.addEventListener("dragleave",o=>{let E=o.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),t.addEventListener("drop",o=>{o.preventDefault();let E=o.dataTransfer.getData("text/plain"),x=Number(o.currentTarget.dataset.rowIndex),N=Number(E),T=o.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(x))return;let[f]=c.splice(N,1),F=x;N<x&&(F=x-1);let M=T==="after"?F+1:F;c.splice(M,0,f),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,s(),i()})};c.forEach((t,a)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(a),o.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let x=document.createElement("span");x.className="voc-form-drag-handle-icon",x.textContent="\u2630",x.style.cursor="grab",E.appendChild(x),o.appendChild(E),n(o,x),r.fields.forEach(f=>{let F=document.createElement("td"),M,$=(f.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",p&&S.classList.add("form-control"),f.placeholder){let H=document.createElement("option");H.value="",H.textContent=f.placeholder,H.disabled=!0,(t[f.key]===void 0||t[f.key]===null||t[f.key]==="")&&(H.selected=!0),S.appendChild(H)}(f.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=t[f.key]!==void 0&&t[f.key]!==null?String(t[f.key]):"",f.required&&(S.required=!0),S.addEventListener("change",H=>{c[a][f.key]=H.target.value,i()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",p&&S.classList.add("form-check");let D=f.options||[];Array.isArray(c[a][f.key])||(c[a][f.key]=c[a][f.key]?[c[a][f.key]]:[]),D.forEach(H=>{let B=`voc-form-${r.key}-${f.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(c[a][f.key])&&c[a][f.key].includes(H.value),q.addEventListener("change",O=>{let X=O.target.checked;Array.isArray(c[a][f.key])||(c[a][f.key]=[]),X?c[a][f.key].includes(H.value)||c[a][f.key].push(H.value):c[a][f.key]=c[a][f.key].filter(Z=>Z!==H.value),i()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",p&&S.classList.add("form-check");let D=f.options||[];c[a][f.key]===void 0&&(c[a][f.key]=""),D.forEach(H=>{let B=`voc-form-${r.key}-${f.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${r.key}-${f.key}-${a}`,q.value=H.value,q.checked=c[a][f.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(c[a][f.key]=O.target.value,i())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=t[f.key]!==void 0&&t[f.key]!==null?String(t[f.key]):"",f.placeholder&&(S.placeholder=f.placeholder),f.required&&(S.required=!0),S.className="voc-form-table-cell",p&&S.classList.add("form-control"),S.addEventListener("input",D=>{c[a][f.key]=D.target.value,i()}),M=S}F.appendChild(M),o.appendChild(F)});let N=document.createElement("td"),T=document.createElement("button");T.type="button",T.className="voc-form-table-remove",p&&T.classList.add("btn","btn-danger"),T.textContent="Remove",T.addEventListener("click",()=>{c.splice(a,1),s(),i()}),N.appendChild(T),o.appendChild(N),A.appendChild(o)})}return k.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&c.length>=r.validation.max_rows)return;let n={};r.fields.forEach(t=>n[t.key]=""),c.push(n),s(),i()}),Array.isArray(y)&&y.length?c=y.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(c=r.default.map(n=>({...n}))),s(),i(),L.validate=function(){let n=[];return c.forEach((t,a)=>{let o=h(t);o.length&&n.push(`Row ${a+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&c.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&c.length>r.validation.max_rows&&n.push(`No more than ${r.validation.max_rows} rows allowed`),r.validation?.unique_fields&&r.validation.unique_fields.length&&r.validation.unique_fields.forEach(t=>{let a=new Set;c.forEach((o,E)=>{let x=o[t];x!=null&&(a.has(x)&&n.push(`Field ${t} must be unique (duplicate at row ${E+1})`),a.add(x))})}),n},L}async function oe(r){let y=new TextEncoder().encode(r),L=await crypto.subtle.digest("SHA-256",y);return Array.from(new Uint8Array(L)).map(v=>v.toString(16).padStart(2,"0")).join("")}async function ie(r){let w=String(r||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await oe(w)}?d=mp`:""}function V(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-users";let v=document.createElement("div");if(v.className="voc-form-users-header",L&&v.classList.add("mb-2"),r.label){let g=document.createElement("div");if(g.className="voc-form-users-label",L&&g.classList.add("form-label"),g.textContent=r.label,r.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",g.appendChild(e)}v.appendChild(g)}if(r.description){let g=document.createElement("div");g.className="voc-form-users-description",L&&g.classList.add("form-text"),g.textContent=r.description,v.appendChild(g)}p.appendChild(v);let u=document.createElement("div");u.className="voc-form-users-search-wrapper";let m=document.createElement("input");if(m.type="search",m.placeholder="Search users...",m.className="voc-form-users-search",L&&m.classList.add("form-control","mb-2"),u.appendChild(m),p.appendChild(u),!r.options||r.options.length===0)return p;let l=document.createElement("div");l.className="voc-form-users-list",L&&l.classList.add("list-group");let d=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,b=[];if(Array.isArray(y)?b=y:y!=null?b=[y]:Array.isArray(r.default)&&(b=r.default),r.options.forEach((g,e)=>{let C=document.createElement("div");C.className="voc-form-user-item",C.dataset.label=String(g.label||"").toLowerCase(),C.dataset.email=String(g.email||"").toLowerCase(),C.dataset.value=String(g.value||"").toLowerCase(),L&&C.classList.add("d-flex","align-items-center","gap-2");let c=document.createElement("input");if(c.type="checkbox",c.name=`${d}[]`,c.value=g.value,c.className="voc-form-user-checkbox",r.key&&(c.id=`voc-form-${r.key}-${e}`),c.style.position="absolute",c.style.width="1px",c.style.height="1px",c.style.margin="0",c.style.padding="0",c.style.clip="rect(0 0 0 0)",c.style.clipPath="inset(50%)",c.style.overflow="hidden",c.style.border="0",b&&Array.isArray(b)){let t=b.map(a=>String(a));c.checked=t.includes(String(g.value))}let i=document.createElement("img");i.className="voc-form-user-avatar",i.alt=g.label||String(g.value||"user"),i.style.width=i.style.height="40px",i.style.objectFit="cover",i.style.borderRadius="50%",i.src="",g.email&&ie(g.email).then(t=>{t&&(i.src=t)}).catch(()=>{});let h=document.createElement("div");h.className="voc-form-user-info",h.style.display="flex",h.style.flexDirection="column",h.style.gap="2px";let s=document.createElement("div");s.className="voc-form-user-label",s.textContent=g.label||String(g.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=g.email||"",h.appendChild(s),h.appendChild(n),C.addEventListener("click",t=>{let a=t.target;a&&(a.closest("input")||a.closest("a")||a.closest("button"))||(c.checked=!c.checked,c.dispatchEvent(new Event("change",{bubbles:!0})))}),c.addEventListener("change",()=>{c.checked?C.classList.add("selected"):C.classList.remove("selected")}),c.checked&&C.classList.add("selected"),C.appendChild(c),C.appendChild(i),C.appendChild(h),l.appendChild(C)}),p.appendChild(l),r.required){let g=l.querySelectorAll('input[type="checkbox"]'),e=()=>{let C=Array.from(g).some(c=>c.checked);return g.forEach(c=>{C?c.setCustomValidity(""):c.setCustomValidity("At least one option must be selected.")}),C};g.forEach(C=>{C.addEventListener("change",e)}),p._validateCheckboxGroup=e,e()}let A=Array.from(l.querySelectorAll(".voc-form-user-item")),k=()=>{let g=String(m.value||"").trim().toLowerCase();if(!g){A.forEach(e=>e.style.setProperty("display","flex","important"));return}A.forEach(e=>{let C=e.dataset.label||"",c=e.dataset.email||"",i=e.dataset.value||"",h=C.includes(g)||c.includes(g)||i.includes(g);e.style.setProperty("display",h?"flex":"none","important")})};return m.addEventListener("input",k),p}function U(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-timezone";let v=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,u=document.createElement("input");u.type="text",u.name=v,r.key&&(u.id=`voc-form-${r.key}`),u.className="voc-form-timezone-input",L&&u.classList.add("form-control"),r.placeholder&&(u.placeholder=r.placeholder||""),r.required&&(u.required=!0),r.width&&(u.style.width=r.width);try{u.autocomplete="off"}catch{}try{u.autocorrect="off"}catch{}try{u.autocapitalize="off"}catch{}try{u.spellcheck=!1}catch{}u.setAttribute("data-lpignore","true"),y!=null?u.value=String(y):r.default!==void 0&&r.default!==null&&(u.value=String(r.default));let m=document.createElement("div");m.className="voc-form-timezone-control",m.style.position="relative",m.style.display="inline-block",m.style.width=r.width||"100%";let l=document.createElement("button");l.type="button",l.className="voc-form-timezone-toggle",l.setAttribute("aria-haspopup","listbox"),l.setAttribute("aria-expanded","false"),l.style.position="absolute",l.style.right="4px",l.style.top="50%",l.style.transform="translateY(-50%)",l.style.height="28px",l.style.width="28px",l.style.padding="0",l.style.border="none",l.style.background="transparent",l.style.cursor="pointer",l.innerHTML="\u25BC";let d=document.createElement("ul");d.className="voc-form-timezone-list",d.setAttribute("role","listbox"),d.style.position="absolute",d.style.left="0",d.style.right="0",d.style.zIndex="1000",d.style.maxHeight="200px",d.style.overflow="auto",d.style.margin="4px 0 0 0",d.style.padding="0",d.style.listStyle="none",d.style.background="white",d.style.border="1px solid rgba(0,0,0,0.15)",d.style.display="none",d.tabIndex=-1,u.style.paddingRight="36px";let A=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function k(s){d.innerHTML="",s.forEach((n,t)=>{let a=document.createElement("li");a.className="voc-form-timezone-item",a.setAttribute("role","option"),a.dataset.value=n,a.style.padding="6px 8px",a.style.cursor="pointer",a.textContent=n,a.addEventListener("mousedown",o=>{o.preventDefault(),u.value=n,c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}),d.appendChild(a)})}k(A);let g=-1;function e(){Array.from(d.children).forEach((n,t)=>{t===g?(n.style.background="rgba(0,123,255,0.1)",n.setAttribute("aria-selected","true")):(n.style.background="",n.removeAttribute("aria-selected"))})}function C(){d.style.display="block",l.setAttribute("aria-expanded","true")}function c(){d.style.display="none",l.setAttribute("aria-expanded","false"),g=-1,e()}function i(){d.style.display==="none"?C():c()}u.addEventListener("input",()=>{let s=(u.value||"").trim().toLowerCase(),n=s?A.filter(t=>t.toLowerCase().includes(s)):A;k(n),C()}),l.addEventListener("click",s=>{s.preventDefault(),d.style.display==="none"?(k(A),C(),u.focus()):c()}),u.addEventListener("keydown",s=>{let n=Array.from(d.children);if(s.key==="ArrowDown"){if(s.preventDefault(),n.length===0)return;g=Math.min(g+1,n.length-1),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="ArrowUp"){if(s.preventDefault(),n.length===0)return;g=Math.max(g-1,0),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="Enter"){if(d.style.display!=="none"&&g>=0){s.preventDefault();let t=n[g];u.value=t.dataset.value||t.textContent||"",c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}}else s.key==="Escape"&&c()}),document.addEventListener("click",s=>{m.contains(s.target)||c()});let h={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(u.addEventListener("blur",()=>{let s=(u.value||"").trim();if(!s)return;let n=Object.keys(h).find(t=>t.toLowerCase()===s.toLowerCase());n&&(u.value=h[n])}),r.description){let s=document.createElement("div");s.className="voc-form-timezone-description",L&&s.classList.add("form-text"),s.textContent=r.description,p.appendChild(s)}return m.appendChild(u),m.appendChild(l),m.appendChild(d),p.appendChild(m),p}var le={email:r=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r),number:r=>r.trim()!==""&&!isNaN(Number(r)),url:r=>{try{return new URL(r),!0}catch{return!1}},text:()=>!0};function J(r,w,y){let L=w?.style==="bootstrap",p=r.tag_types,v=p&&p.length>0&&!p.includes("text"),u=document.createElement("div");u.className="voc-form-tags";let m=r.name||r.key||`tags_${Math.random().toString(36).substr(2,6)}`,l=document.createElement("div");l.className="voc-form-tags-container",l.style.display="flex",l.style.flexWrap="wrap",l.style.gap="6px",l.style.alignItems="center",l.style.padding="6px",l.style.border="1px solid rgba(0,0,0,0.12)",l.style.borderRadius="4px",l.style.transition="border-color 0.2s";let d=document.createElement("input");d.type="text",d.className="voc-form-tags-input",d.style.border="none",d.style.flex="1 0 120px",d.style.minWidth="80px",d.style.outline="none",d.placeholder=r.placeholder||"",L&&d.classList.add("form-control"),l.appendChild(d);let b=[],A=document.createElement("input");A.type="text",A.style.position="absolute",A.style.left="-9999px",A.style.width="1px",A.style.height="1px",A.tabIndex=-1,r.required&&(A.required=!0),u.appendChild(A);let k=null;function g(){l.style.borderColor="#dc3545",d.style.color="#dc3545",k&&clearTimeout(k),k=setTimeout(()=>{l.style.borderColor="rgba(0,0,0,0.12)",d.style.color="",k=null},600)}function e(s){return v?p.some(n=>{let t=le[n];return t?t(s):!0}):!0}function C(){Array.from(u.querySelectorAll("input.voc-form-tag-hidden")).forEach(n=>n.parentElement?.removeChild(n)),b.forEach(n=>{let t=document.createElement("input");t.type="hidden",t.name=`${m}[]`,t.className="voc-form-tag-hidden",t.value=n,r.key&&(t.id=`voc-form-${r.key}`),u.appendChild(t)}),r.required&&(b.length===0?(A.value="",A.setCustomValidity("Please enter at least one tag")):(A.value="1",A.setCustomValidity("")))}function c(s){let n=document.createElement("span");n.className="voc-form-tag",n.style.display="inline-flex",n.style.alignItems="center",n.style.padding="4px 8px",n.style.background="rgba(0,0,0,0.05)",n.style.borderRadius="16px";let t=document.createElement("span");t.textContent=s,t.style.marginRight="8px",n.appendChild(t);let a=document.createElement("button");return a.type="button",a.textContent="\xD7",a.style.border="none",a.style.background="transparent",a.style.cursor="pointer",a.addEventListener("click",()=>{let o=b.indexOf(s);o>=0&&(b.splice(o,1),l.removeChild(n),C())}),n.appendChild(a),n}function i(s,n=!1){let t=s.trim();if(!t||b.includes(t))return;if(!n&&!e(t)){g();return}b.push(t);let a=c(t);l.insertBefore(a,d),C()}let h=y!=null?String(y):r.default||"";return h&&h.split(",").map(s=>s.trim()).filter(Boolean).forEach(s=>i(s,!0)),d.addEventListener("keydown",s=>{if(s.key==="Enter"||s.key===","){s.preventDefault();let n=d.value;i(n),b[b.length-1]===n.trim()&&(d.value="")}else if(s.key==="Backspace"&&d.value===""&&b.pop()){let t=Array.from(l.querySelectorAll(".voc-form-tag")),a=t[t.length-1];a&&l.removeChild(a),C()}}),d.addEventListener("paste",s=>{let n=s.clipboardData?.getData("text");n&&(s.preventDefault(),n.split(/[,\n\r]+/).map(t=>t.trim()).filter(Boolean).forEach(t=>i(t)),d.value="")}),u.getTags=()=>b.slice(),u.addTag=i,u.appendChild(l),C(),u}function Y(r,w,y,L){let p=w?.style==="bootstrap",v=document.createElement("div");v.className="voc-form-field-selects";let u=document.createElement("div");if(u.className="voc-form-field-selects-header",p&&u.classList.add("mb-2"),r.label){let i=document.createElement("div");if(i.className="voc-form-field-selects-label",p&&i.classList.add("form-label"),i.textContent=r.label,r.required){let h=document.createElement("span");h.className="voc-form-required",h.textContent="*",i.appendChild(h)}u.appendChild(i)}if(r.description){let i=document.createElement("div");i.className="voc-form-field-selects-description",p&&i.classList.add("form-text"),i.textContent=r.description,u.appendChild(i)}v.appendChild(u);let m=document.createElement("div");m.className="voc-form-field-selects-search-wrapper";let l=document.createElement("input");l.type="search",l.placeholder="Search...",l.className="voc-form-field-selects-search",p&&l.classList.add("form-control","mb-2"),m.appendChild(l),v.appendChild(m);let d=r.options;if(!d||d.length===0)return v;let b=document.createElement("div");b.className="voc-form-field-selects-list",p&&b.classList.add("list-group");let A=document.createElement("div");A.className="voc-form-field-selects-selected",A.style.marginTop="12px";let k={},g=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(y)?e=y:y!=null?e=[y]:Array.isArray(r.default)&&(e=r.default),d.forEach((i,h)=>{let s=document.createElement("div");s.className="voc-form-field-selects-item",s.dataset.label=String(i.option_label??i.label??"").toLowerCase(),s.dataset.email=String(i.email||"").toLowerCase(),s.dataset.value=String(i.value||"").toLowerCase(),p&&s.classList.add("d-flex","align-items-center","gap-2");let n=document.createElement("input");if(n.type="checkbox",n.name=`${g}[]`,n.value=i.value??i.key,n.className="voc-form--checkbox",r.key&&(n.id=`voc-form-${r.key}-${h}`),n.style.position="absolute",n.style.width="1px",n.style.height="1px",n.style.margin="0",n.style.padding="0",n.style.clip="rect(0 0 0 0)",n.style.clipPath="inset(50%)",n.style.overflow="hidden",n.style.border="0",e&&Array.isArray(e)){let N=e.map(f=>String(f)),T=String(i.value??i.key);n.checked=N.includes(T)}let t=i.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',a=document.createElement("div");a.className="voc-form-fields-select-avatar",a.innerHTML=t;let o=document.createElement("div");o.className="voc-form-field-select-info",o.style.display="flex",o.style.flexDirection="column",o.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(i.option_label??i.label)||String(i.value);let x=document.createElement("small");x.className="voc-form-field-select-email",x.textContent=i.email||"",o.appendChild(E),o.appendChild(x),s.addEventListener("click",N=>{let T=N.target;T&&(T.closest("input")||T.closest("a")||T.closest("button"))||(n.checked=!n.checked,n.dispatchEvent(new Event("change",{bubbles:!0})))}),n.addEventListener("change",()=>{if(n.checked){s.classList.add("selected"),(k[h]||[]).forEach(f=>f.parentElement?.removeChild(f)),k[h]=[];let T=i;if(T&&Array.isArray(T.items))T.items.forEach(f=>{let F=L(f);F&&(A.appendChild(F),k[h].push(F))});else if(T&&(T.type||T.key)){let f=L(T);f&&(A.appendChild(f),k[h].push(f))}}else s.classList.remove("selected"),(k[h]||[]).forEach(T=>T.parentElement?.removeChild(T)),k[h]=[]}),n.checked&&(s.classList.add("selected"),setTimeout(()=>{let N=i;if(N&&Array.isArray(N.items))N.items.forEach(T=>{let f=L(T);f&&(A.appendChild(f),k[h]=k[h]||[],k[h].push(f))});else if(N&&(N.type||N.key)){let T=L(N);T&&(A.appendChild(T),k[h]=k[h]||[],k[h].push(T))}},0)),s.appendChild(n),s.appendChild(a),s.appendChild(o),b.appendChild(s)}),v.appendChild(b),v.appendChild(A),r.required){let i=b.querySelectorAll('input[type="checkbox"]'),h=()=>{let s=Array.from(i).some(n=>n.checked);return i.forEach(n=>{s?n.setCustomValidity(""):n.setCustomValidity("At least one option must be selected.")}),s};i.forEach(s=>{s.addEventListener("change",h)}),v._validateCheckboxGroup=h,h()}let C=Array.from(b.querySelectorAll(".voc-form-field-select-item")),c=()=>{let i=String(l.value||"").trim().toLowerCase();if(!i){C.forEach(h=>h.style.setProperty("display","flex","important"));return}C.forEach(h=>{let s=h.dataset.label||"",n=h.dataset.email||"",t=h.dataset.value||"",a=s.includes(i)||n.includes(i)||t.includes(i);h.style.setProperty("display",a?"flex":"none","important")})};return l.addEventListener("input",c),v}function I(r,w=!0){let y=new FormData(r);if(w)return ce(y);let L={};return y.forEach((p,v)=>{let u=(p instanceof File,p);Object.prototype.hasOwnProperty.call(L,v)?Array.isArray(L[v])?L[v].push(u):L[v]=[L[v],u]:L[v]=u}),L}function ce(r){let w=new FormData;for(let[y,L]of r.entries()){if(L instanceof File){w.append(y,L);continue}let p;try{p=JSON.parse(L)}catch{p=null}Array.isArray(p)?p.length===0?w.append(y,"[]"):p.every(v=>typeof v=="object"&&v!==null)?p.forEach((v,u)=>{for(let[m,l]of Object.entries(v))w.append(`${y}[${u}][${m}]`,l)}):w.append(y,L):w.append(y,L)}return w}async function K(r,w,y){let L=w.url,p={"Content-Type":"application/json"};w?.api_token&&(p.Authorization=`Bearer ${w.api_token}`);let v=I(r);if(w?.additional_data)for(let[l,d]of Object.entries(w.additional_data))v.append(l,d);let u,m=v instanceof FormData;u={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...m?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:m?v:JSON.stringify(Object.fromEntries(v.entries()))};try{fetch(L,u).then(async l=>{let d=l.headers.get("content-type");if(!l.ok)try{let A=(await l.json())?.message;throw new Error(A??"Their was an error submitting the form. Check your form and try again.")}catch(b){throw new Error(b.message)}return d&&d.includes("application/json")?l.json():l.text()}).then(l=>{y&&y(l,null)}).catch(l=>{y&&y(null,l)})}catch(l){y&&y(null,l)}}function Q(r,w,y){let L=[];if(typeof r=="string"?L=Array.from(document.querySelectorAll(r)):L=[r],L.length===0)return null;function p(){let m=y?.style==="bootstrap",l=document.createElement("form");l.classList.add("voc-form"),m&&l.classList.add("needs-validation"),l.id=w.id;let d=document.createElement("h2");d.className="voc-form-title",m&&d.classList.add("mb-3"),d.textContent=w.form_name,l.appendChild(d);function b(e,C){C&&(C.min_length!==void 0&&(e.minLength=C.min_length),C.max_length!==void 0&&(e.maxLength=C.max_length),C.regex&&(e instanceof HTMLInputElement?e.pattern=C.regex:e.dataset.pattern=C.regex))}function A(e){if(!e.key&&!e.label)return null;let C=w.default_values||{},c=e.name||e.key,i=c?C[c]:void 0,h=document.createElement("div");if(h.className="voc-form-group",m&&h.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),m&&t.classList.add("form-label"),e.key?e.type==="radio"?t.htmlFor="":t.htmlFor=`voc-form-${e.key}`:t.htmlFor="",t.textContent=e.label,e.required){let a=document.createElement("span");a.className="voc-form-required",a.textContent="*",t.appendChild(a)}h.appendChild(t)}let s=new Set(["users","timezone"]);if(e.description&&!s.has(String(e.type||""))){let t=document.createElement("div");t.className="voc-form-description",m&&t.classList.add("form-text","text-muted","mb-2"),t.textContent=e.description,h.appendChild(t)}let n=null;switch(e.type){case"tags":{n=J(e,y||{},i);break}case"checkbox":{let t=document.createElement("div");if(t.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options){if(e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="checkbox",x.classList.add("voc-form-checkbox"),m&&x.classList.add("form-check-input"),x.name=`${e.name||e.key||""}[]`,x.value=a.value,e.key&&(x.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(x.checked=!0):i!==void 0?i===a.value&&(x.checked=!0):e.default===a.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),e.required){let a=t.querySelectorAll('input[type="checkbox"]'),o=()=>{let E=Array.from(a).some(x=>x.checked);return a.forEach(x=>{E?x.setCustomValidity(""):x.setCustomValidity("At least one option must be selected.")}),E};a.forEach(E=>{E.addEventListener("change",o)}),t._validateCheckboxGroup=o,o()}}else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),m&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),(e.key||e.name)&&(o.name=e.name||e.key,e.key&&(o.id=`voc-form-${e.key}`)),m&&o.classList.add("form-check-input"),e.required&&(o.required=!0),i!==void 0?o.checked=!!i:e.default&&(o.checked=!!e.default),a.appendChild(o),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}n=t;break}case"boolean":{let t=document.createElement("div");t.className="voc-form-boolean-wrapper",m&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let a=document.createElement("input");if(a.type="checkbox",a.classList.add("voc-form-boolean"),m&&a.classList.add("form-check-input"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.required&&(a.required=!0),i!==void 0?a.checked=!!i:e.default!==void 0&&(a.checked=e.default===!0||e.default==="true"),t.appendChild(a),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),m&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let x=document.createElement("span");x.className="voc-form-required",x.textContent="*",E.appendChild(x)}t.appendChild(E)}let o=h.querySelector(".voc-form-label");o&&o.remove(),n=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let a=e.default||i||"";if(a){let o=(a.match(/\n/g)||[]).length,E=80,x=a.split(`
|
|
2
|
+
`).reduce((f,F)=>Math.max(f,F.length),0),N=Math.ceil(x/E)||1,T=Math.max(2,o+N);t.rows=T,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),b(t,e.validation),n=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),m&&t.classList.add("form-select"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let o=document.createElement("option");o.value=a.value,o.textContent=a.label,Array.isArray(i)?i.includes(a.value)&&(o.selected=!0):i!==void 0?i===a.value&&(o.selected=!0):e.default===a.value&&(o.selected=!0),t.appendChild(o)}),e.width&&(t.style.width=e.width),n=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-radio-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="radio",x.classList.add("voc-form-radio"),m&&x.classList.add("form-check-input"),x.name=e.name||e.key||"",x.value=a.value,e.key&&(x.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(x.checked=!0):i!==void 0?i===a.value&&(x.checked=!0):e.default===a.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),n=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),m&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),n=t;break}case"avatar":{n=j(e,y||{},i);break}case"table":{n=G(e,y||{},i);break}case"users":{n=V(e,y||{},i);break}case"timezone":{n=U(e,y||{},i);break}case"audio_select":{n=W(e,y||{},i);break}case"field-select":{n=Y(e,y||{},i,A);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),b(t,e.validation),n=t;break}}if(n&&h.appendChild(n),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.innerHTML=e.hint_text,h.appendChild(t)}return h}function k(e,C,c=0){if(e.type==="group"&&"items"in e){let h=e;if(m){let s=document.createElement("div");s.className="card voc-form-group-card mb-3",c>0&&s.classList.add("voc-form-nested-group");let n=h.label||h.header?.title,t=h.description||h.header?.description;if(n||t){let o=document.createElement("div");if(o.className="card-header voc-form-group-head",n){let E=document.createElement("h5");E.className="mb-0 voc-form-group-label",E.textContent=n,o.appendChild(E)}if(t){let E=document.createElement("p");E.className="mb-0 voc-form-group-description",E.textContent=t,o.appendChild(E)}s.appendChild(o)}let a=document.createElement("div");a.className="card-body voc-form-group-body",h.items.forEach(o=>{k(o,a,c+1)}),s.appendChild(a),C.appendChild(s)}else{let s=document.createElement("div");s.className="voc-form-group voc-form-group-wrapper",c>0&&s.classList.add("voc-form-nested-group");let n=h.label||h.header?.title,t=h.description||h.header?.description;if(n||t){let a=document.createElement("div");if(a.className="voc-form-group-head",n){let o=document.createElement("h3");o.className="voc-form-group-label",o.textContent=n,a.appendChild(o)}if(t){let o=document.createElement("p");o.className="voc-form-group-description",o.textContent=t,a.appendChild(o)}s.appendChild(a)}h.items.forEach(a=>{k(a,s,c+1)}),C.appendChild(s)}return}if(e.type==="row"&&"items"in e){let h=e,s=document.createElement("div");if(s.className="voc-form-group voc-form-row",m&&s.classList.add("mb-3"),h.label){let t=document.createElement(c>0?"h6":"h3");t.className="voc-form-row-label",t.textContent=h.label,s.appendChild(t)}if(h.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=h.description,s.appendChild(t)}let n=document.createElement("div");n.className="voc-form-row-items "+(h.direction||"horizontal"),h.items.forEach(t=>{let a=A(t);a&&n.appendChild(a)}),s.appendChild(n),C.appendChild(s);return}let i=A(e);i&&C.appendChild(i)}w.fields.forEach(e=>{k(e,l,0)});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",m&&g.classList.add("btn","btn-primary"),l.appendChild(g),l}let v=p();L[0].appendChild(v);let u=w?.submit_config??y?.submit_config??null;return u&&v.addEventListener("submit",m=>{m.preventDefault();let l=Array.from(v.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),d=[];if(l.forEach(k=>{k&&typeof k._validateCheckboxGroup=="function"&&(k._validateCheckboxGroup()||k.querySelector('input[type="checkbox"]')&&d.push("Please select at least one option"))}),!v.checkValidity()){v.reportValidity(),y?.onSubmitResult&&y.onSubmitResult(null,new Error("Form validation failed"));return}let b=Array.from(v.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),A=[];if(b.forEach(k=>{if(k&&typeof k.validate=="function"){let g=k.validate();g&&g.length&&A.push(...g)}}),A.length){y?.onSubmitResult&&y.onSubmitResult(null,new Error(A.join("; ")));let k=b[0];k&&k.scrollIntoView({behavior:"smooth",block:"center"});return}if(y?.onSubmit){let k=I(v);y.onSubmit(k)}K(v,u,(k,g)=>{y?.onSubmitResult&&y.onSubmitResult(k,g)})}),{element:v,validate:()=>{let m=[];return v.querySelectorAll(":invalid").forEach(d=>{let b=d.validationMessage;m.push({element:d,message:b})}),m},getValues:()=>I(v),onSubmit:m=>{v.addEventListener("submit",l=>{l.preventDefault();let d=I(v);m(d,l)})}}}var z={renderForm:Q};var de=z,me={FormsLib:z};return se(ue);})();
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ne=(n,w)=>{for(var v in w)P(n,v,{get:w[v],enumerable:!0})},re=(n,w,v,L)=>{if(w&&typeof w=="object"||typeof w=="function")for(let p of te(w))!ae.call(n,p)&&p!==v&&P(n,p,{get:()=>w[p],enumerable:!(L=ee(w,p))||L.enumerable});return n};var se=n=>re(P({},"__esModule",{value:!0}),n);var me={};ne(me,{FormsLib:()=>le,default:()=>de});module.exports=se(me);function j(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-avatar-wrapper",L&&p.classList.add("d-flex","align-items-center","gap-3");let b=document.createElement("img");b.className="voc-form-avatar-preview",b.alt=n.label||"avatar",L&&(b.classList.add("img-thumbnail","rounded-circle"),b.style.width=b.style.height="64px",b.style.objectFit="cover");let m=v!=null?String(v):n.default!==void 0&&n.default!==null?String(n.default):"";m?b.src=m:(b.src="",b.style.display="none");let i=document.createElement("input");i.type="file",i.accept=n.accept||"image/*",i.className="voc-form-avatar-input",L&&i.classList.add("form-control"),(n.key||n.name)&&(i.name=n.name||n.key,n.key&&(i.id=`voc-form-${n.key}`));let d=document.createElement("input");if(d.type="hidden",(n.key||n.name)&&(d.name=(n.name||n.key)+"_url"),d.value=m||"",i.addEventListener("change",u=>{let k=u.target;if(k.files&&k.files.length>0){let T=k.files[0],C=new FileReader;C.onload=()=>{b.src=String(C.result),b.style.display="",d.value=""},C.readAsDataURL(T)}}),L){let u=document.createElement("div");u.style.flex="1",u.appendChild(i),u.appendChild(d),p.appendChild(b),p.appendChild(u)}else p.appendChild(b),p.appendChild(i),p.appendChild(d);return p}function W(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");if(p.className="voc-form-audio-select",!n.options||n.options.length===0)return p;let b=n.name||n.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,m;return Array.isArray(v)?m=v[0]:v!==void 0?m=v:n.default!==void 0&&(m=n.default),n.options.forEach((i,d)=>{let u=document.createElement("div");u.className="voc-form-audio-item",L&&u.classList.add("form-check");let k=document.createElement("input");k.type="radio",k.name=b,k.value=i.value,k.className="voc-form-audio-radio",n.key&&(k.id=`voc-form-${n.key}-${d}`),n.required&&d===0&&(k.required=!0),k.style.position="absolute",k.style.width="1px",k.style.height="1px",k.style.margin="0",k.style.padding="0",k.style.clip="rect(0 0 0 0)",k.style.clipPath="inset(50%)",k.style.overflow="hidden",k.style.border="0",m!==void 0&&(Array.isArray(m)?k.checked=m.includes(i.value):k.checked=String(m)===String(i.value));let T=()=>{k.checked?u.classList.add("selected"):u.classList.remove("selected")};k.addEventListener("change",()=>{p.querySelectorAll(".voc-form-audio-item").forEach(r=>r.classList.remove("selected")),T()}),k.checked&&u.classList.add("selected");let C=document.createElement("label");C.className="voc-form-audio-label",L&&C.classList.add("form-check-label"),C.htmlFor=k.id||"",C.textContent=i.label||i.value,C.tabIndex=0;let g=document.createElement("div");g.className="voc-form-audio-control";let e=null;if(i.audio_link){let l=document.createElement("button");l.type="button",l.className="voc-form-audio-play",L&&l.classList.add("btn","btn-sm","btn-outline-secondary"),l.setAttribute("aria-label",`Play ${i.label||i.value}`);let r="http://www.w3.org/2000/svg",a=document.createElementNS(r,"svg");a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("width","16"),a.setAttribute("height","16"),a.setAttribute("aria-hidden","true");let t=document.createElementNS(r,"path");t.setAttribute("d","M8 5v14l11-7z"),t.setAttribute("fill","currentColor"),a.appendChild(t),l.appendChild(a),e=document.createElement("audio"),e.src=i.audio_link,e.preload="none",e.style.display="none";let c=y=>{for(;y.firstChild;)y.removeChild(y.firstChild)},E=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},x=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};c(l),l.appendChild(E());let N=y=>{c(l),y?(l.appendChild(x()),l.setAttribute("aria-label",`Stop ${i.label||i.value}`)):(l.appendChild(E()),l.setAttribute("aria-label",`Play ${i.label||i.value}`))};l.addEventListener("click",()=>{try{if(!e)return;let y=p.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}y.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),p.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(y){console.warn("audio play failed",y)}}),e.addEventListener("playing",()=>{u.classList.add("is-playing"),N(!0)});let A=()=>{u.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",A),e.addEventListener("ended",A),g.appendChild(l),g.appendChild(e)}let h=document.createElement("div");h.className="voc-form-item-detail",h.style.display="flex",h.style.flexDirection="column",h.style.gap="4px";let s=document.createElement("div");s.className="voc-form-item-top",s.style.display="flex",s.style.alignItems="center",s.style.gap="8px",s.appendChild(k),s.appendChild(C);let o=document.createElement("div");o.className="voc-form-item-description";let f=i.description||i.hint_text||"";f&&(o.textContent=f),h.appendChild(s),h.appendChild(o),g.appendChild(h),u.appendChild(g),s.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),u.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),p.appendChild(u)}),p}function G(n,w,v){let L=document.createElement("div");L.className="voc-form-table-wrapper";let p=w?.style==="bootstrap",b=document.createElement("input");b.type="hidden",b.name=n.name||n.key,n.key&&(b.id=`voc-form-${n.key}`),L.appendChild(b);let m=document.createElement("table");m.className="voc-form-table",p&&m.classList.add("table","table-bordered");let i=document.createElement("thead"),d=document.createElement("tr"),u=document.createElement("th");u.className="voc-form-table-drag-col",u.textContent="",d.appendChild(u),(n.fields||[]).forEach(r=>{let a=document.createElement("th");a.textContent=r.label||r.key,d.appendChild(a)});let k=document.createElement("th");k.textContent="Actions",d.appendChild(k),i.appendChild(d),m.appendChild(i);let T=document.createElement("tbody");m.appendChild(T),L.appendChild(m);let C=document.createElement("button");C.type="button",C.className="voc-form-table-add",p&&C.classList.add("btn","btn-secondary"),C.textContent="+Add";let g=document.createElement("tfoot"),e=document.createElement("tr"),h=document.createElement("td");h.colSpan=(n.fields?n.fields.length:0)+1,h.appendChild(C),e.appendChild(h),g.appendChild(e),m.appendChild(g),L.appendChild(m);let s=[];function o(){b.value=JSON.stringify(s)}function f(r){let a=[];return n.fields.forEach(t=>{let c=r[t.key];if(t.type==="checkbox"){let E=Array.isArray(c)?c:c?[c]:[];t.required&&E.length===0&&a.push(`${t.label||t.key} is required`);return}t.required&&(c==null||String(c).trim()==="")&&a.push(`${t.label||t.key} is required`),t.type==="email"&&c&&(/^\S+@\S+\.\S+$/.test(String(c))||a.push(`${t.label||t.key} must be a valid email`)),t.type==="number"&&c&&isNaN(Number(c))&&a.push(`${t.label||t.key} must be a number`),t.validation&&t.validation.regex&&c&&(new RegExp(t.validation.regex).test(String(c))||a.push(`${t.label||t.key} invalid format`))}),a}function l(){T.innerHTML="";let r=(a,t)=>{t.draggable=!0,t.addEventListener("mousedown",()=>{t.style.cursor="grabbing"}),t.addEventListener("mouseup",()=>{t.style.cursor="grab"}),t.addEventListener("dragstart",c=>{let E=Number(a.dataset.rowIndex);c.dataTransfer.setData("text/plain",String(E)),a.classList.add("dragging");try{c.dataTransfer?.setDragImage(t,10,10)}catch{}}),t.addEventListener("dragend",()=>{a.classList.remove("dragging"),t.style.cursor="grab"}),a.addEventListener("dragover",c=>{c.preventDefault();let E=c.currentTarget,x=E.getBoundingClientRect(),N=x.top+x.height/2,A=(c.clientY||c.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),A?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),a.addEventListener("dragleave",c=>{let E=c.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),a.addEventListener("drop",c=>{c.preventDefault();let E=c.dataTransfer.getData("text/plain"),x=Number(c.currentTarget.dataset.rowIndex),N=Number(E),A=c.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(x))return;let[y]=s.splice(N,1),F=x;N<x&&(F=x-1);let M=A==="after"?F+1:F;s.splice(M,0,y),c.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete c.currentTarget.dataset.dropPosition,l(),o()})};s.forEach((a,t)=>{let c=document.createElement("tr");c.dataset.rowIndex=String(t),c.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let x=document.createElement("span");x.className="voc-form-drag-handle-icon",x.textContent="\u2630",x.style.cursor="grab",E.appendChild(x),c.appendChild(E),r(c,x),n.fields.forEach(y=>{let F=document.createElement("td"),M,$=(y.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",p&&S.classList.add("form-control"),y.placeholder){let H=document.createElement("option");H.value="",H.textContent=y.placeholder,H.disabled=!0,(a[y.key]===void 0||a[y.key]===null||a[y.key]==="")&&(H.selected=!0),S.appendChild(H)}(y.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.required&&(S.required=!0),S.addEventListener("change",H=>{s[t][y.key]=H.target.value,o()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",p&&S.classList.add("form-check");let D=y.options||[];Array.isArray(s[t][y.key])||(s[t][y.key]=s[t][y.key]?[s[t][y.key]]:[]),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(s[t][y.key])&&s[t][y.key].includes(H.value),q.addEventListener("change",O=>{let X=O.target.checked;Array.isArray(s[t][y.key])||(s[t][y.key]=[]),X?s[t][y.key].includes(H.value)||s[t][y.key].push(H.value):s[t][y.key]=s[t][y.key].filter(Z=>Z!==H.value),o()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",p&&S.classList.add("form-check");let D=y.options||[];s[t][y.key]===void 0&&(s[t][y.key]=""),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${n.key}-${y.key}-${t}`,q.value=H.value,q.checked=s[t][y.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(s[t][y.key]=O.target.value,o())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.placeholder&&(S.placeholder=y.placeholder),y.required&&(S.required=!0),S.className="voc-form-table-cell",p&&S.classList.add("form-control"),S.addEventListener("input",D=>{s[t][y.key]=D.target.value,o()}),M=S}F.appendChild(M),c.appendChild(F)});let N=document.createElement("td"),A=document.createElement("button");A.type="button",A.className="voc-form-table-remove",p&&A.classList.add("btn","btn-danger"),A.textContent="Remove",A.addEventListener("click",()=>{s.splice(t,1),l(),o()}),N.appendChild(A),c.appendChild(N),T.appendChild(c)})}return C.addEventListener("click",()=>{if(n.validation?.max_rows!==void 0&&s.length>=n.validation.max_rows)return;let r={};n.fields.forEach(a=>r[a.key]=""),s.push(r),l(),o()}),Array.isArray(v)&&v.length?s=v.map(r=>({...r})):n.default&&Array.isArray(n.default)&&(s=n.default.map(r=>({...r}))),l(),o(),L.validate=function(){let r=[];return s.forEach((a,t)=>{let c=f(a);c.length&&r.push(`Row ${t+1}: ${c.join("; ")}`)}),n.validation?.min_rows!==void 0&&s.length<n.validation.min_rows&&r.push(`At least ${n.validation.min_rows} rows required`),n.validation?.max_rows!==void 0&&s.length>n.validation.max_rows&&r.push(`No more than ${n.validation.max_rows} rows allowed`),n.validation?.unique_fields&&n.validation.unique_fields.length&&n.validation.unique_fields.forEach(a=>{let t=new Set;s.forEach((c,E)=>{let x=c[a];x!=null&&(t.has(x)&&r.push(`Field ${a} must be unique (duplicate at row ${E+1})`),t.add(x))})}),r},L}async function oe(n){let v=new TextEncoder().encode(n),L=await crypto.subtle.digest("SHA-256",v);return Array.from(new Uint8Array(L)).map(b=>b.toString(16).padStart(2,"0")).join("")}async function ie(n){let w=String(n||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await oe(w)}?d=mp`:""}function V(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-users";let b=document.createElement("div");if(b.className="voc-form-users-header",L&&b.classList.add("mb-2"),n.label){let g=document.createElement("div");if(g.className="voc-form-users-label",L&&g.classList.add("form-label"),g.textContent=n.label,n.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",g.appendChild(e)}b.appendChild(g)}if(n.description){let g=document.createElement("div");g.className="voc-form-users-description",L&&g.classList.add("form-text"),g.textContent=n.description,b.appendChild(g)}p.appendChild(b);let m=document.createElement("div");m.className="voc-form-users-search-wrapper";let i=document.createElement("input");if(i.type="search",i.placeholder="Search users...",i.className="voc-form-users-search",L&&i.classList.add("form-control","mb-2"),m.appendChild(i),p.appendChild(m),!n.options||n.options.length===0)return p;let d=document.createElement("div");d.className="voc-form-users-list",L&&d.classList.add("list-group");let u=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,k=[];if(Array.isArray(v)?k=v:v!=null?k=[v]:Array.isArray(n.default)&&(k=n.default),n.options.forEach((g,e)=>{let h=document.createElement("div");h.className="voc-form-user-item",h.dataset.label=String(g.label||"").toLowerCase(),h.dataset.email=String(g.email||"").toLowerCase(),h.dataset.value=String(g.value||"").toLowerCase(),L&&h.classList.add("d-flex","align-items-center","gap-2");let s=document.createElement("input");if(s.type="checkbox",s.name=`${u}[]`,s.value=g.value,s.className="voc-form-user-checkbox",n.key&&(s.id=`voc-form-${n.key}-${e}`),s.style.position="absolute",s.style.width="1px",s.style.height="1px",s.style.margin="0",s.style.padding="0",s.style.clip="rect(0 0 0 0)",s.style.clipPath="inset(50%)",s.style.overflow="hidden",s.style.border="0",k&&Array.isArray(k)){let a=k.map(t=>String(t));s.checked=a.includes(String(g.value))}let o=document.createElement("img");o.className="voc-form-user-avatar",o.alt=g.label||String(g.value||"user"),o.style.width=o.style.height="40px",o.style.objectFit="cover",o.style.borderRadius="50%",o.src="",g.email&&ie(g.email).then(a=>{a&&(o.src=a)}).catch(()=>{});let f=document.createElement("div");f.className="voc-form-user-info",f.style.display="flex",f.style.flexDirection="column",f.style.gap="2px";let l=document.createElement("div");l.className="voc-form-user-label",l.textContent=g.label||String(g.value);let r=document.createElement("small");r.className="voc-form-user-email",r.textContent=g.email||"",f.appendChild(l),f.appendChild(r),h.addEventListener("click",a=>{let t=a.target;t&&(t.closest("input")||t.closest("a")||t.closest("button"))||(s.checked=!s.checked,s.dispatchEvent(new Event("change",{bubbles:!0})))}),s.addEventListener("change",()=>{s.checked?h.classList.add("selected"):h.classList.remove("selected")}),s.checked&&h.classList.add("selected"),h.appendChild(s),h.appendChild(o),h.appendChild(f),d.appendChild(h)}),p.appendChild(d),n.required){let g=d.querySelectorAll('input[type="checkbox"]'),e=()=>{let h=Array.from(g).some(s=>s.checked);return g.forEach(s=>{h?s.setCustomValidity(""):s.setCustomValidity("At least one option must be selected.")}),h};g.forEach(h=>{h.addEventListener("change",e)}),p._validateCheckboxGroup=e,e()}let T=Array.from(d.querySelectorAll(".voc-form-user-item")),C=()=>{let g=String(i.value||"").trim().toLowerCase();if(!g){T.forEach(e=>e.style.setProperty("display","flex","important"));return}T.forEach(e=>{let h=e.dataset.label||"",s=e.dataset.email||"",o=e.dataset.value||"",f=h.includes(g)||s.includes(g)||o.includes(g);e.style.setProperty("display",f?"flex":"none","important")})};return i.addEventListener("input",C),p}function U(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-timezone";let b=n.name||n.key||`timezone_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("input");m.type="text",m.name=b,n.key&&(m.id=`voc-form-${n.key}`),m.className="voc-form-timezone-input",L&&m.classList.add("form-control"),n.placeholder&&(m.placeholder=n.placeholder||""),n.required&&(m.required=!0),n.width&&(m.style.width=n.width);try{m.autocomplete="off"}catch{}try{m.autocorrect="off"}catch{}try{m.autocapitalize="off"}catch{}try{m.spellcheck=!1}catch{}m.setAttribute("data-lpignore","true"),v!=null?m.value=String(v):n.default!==void 0&&n.default!==null&&(m.value=String(n.default));let i=document.createElement("div");i.className="voc-form-timezone-control",i.style.position="relative",i.style.display="inline-block",i.style.width=n.width||"100%";let d=document.createElement("button");d.type="button",d.className="voc-form-timezone-toggle",d.setAttribute("aria-haspopup","listbox"),d.setAttribute("aria-expanded","false"),d.style.position="absolute",d.style.right="4px",d.style.top="50%",d.style.transform="translateY(-50%)",d.style.height="28px",d.style.width="28px",d.style.padding="0",d.style.border="none",d.style.background="transparent",d.style.cursor="pointer",d.innerHTML="\u25BC";let u=document.createElement("ul");u.className="voc-form-timezone-list",u.setAttribute("role","listbox"),u.style.position="absolute",u.style.left="0",u.style.right="0",u.style.zIndex="1000",u.style.maxHeight="200px",u.style.overflow="auto",u.style.margin="4px 0 0 0",u.style.padding="0",u.style.listStyle="none",u.style.background="white",u.style.border="1px solid rgba(0,0,0,0.15)",u.style.display="none",u.tabIndex=-1,m.style.paddingRight="36px";let T=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function C(l){u.innerHTML="",l.forEach((r,a)=>{let t=document.createElement("li");t.className="voc-form-timezone-item",t.setAttribute("role","option"),t.dataset.value=r,t.style.padding="6px 8px",t.style.cursor="pointer",t.textContent=r,t.addEventListener("mousedown",c=>{c.preventDefault(),m.value=r,s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}),u.appendChild(t)})}C(T);let g=-1;function e(){Array.from(u.children).forEach((r,a)=>{a===g?(r.style.background="rgba(0,123,255,0.1)",r.setAttribute("aria-selected","true")):(r.style.background="",r.removeAttribute("aria-selected"))})}function h(){u.style.display="block",d.setAttribute("aria-expanded","true")}function s(){u.style.display="none",d.setAttribute("aria-expanded","false"),g=-1,e()}function o(){u.style.display==="none"?h():s()}m.addEventListener("input",()=>{let l=(m.value||"").trim().toLowerCase(),r=l?T.filter(a=>a.toLowerCase().includes(l)):T;C(r),h()}),d.addEventListener("click",l=>{l.preventDefault(),u.style.display==="none"?(C(T),h(),m.focus()):s()}),m.addEventListener("keydown",l=>{let r=Array.from(u.children);if(l.key==="ArrowDown"){if(l.preventDefault(),r.length===0)return;g=Math.min(g+1,r.length-1),e(),r[g].scrollIntoView({block:"nearest"})}else if(l.key==="ArrowUp"){if(l.preventDefault(),r.length===0)return;g=Math.max(g-1,0),e(),r[g].scrollIntoView({block:"nearest"})}else if(l.key==="Enter"){if(u.style.display!=="none"&&g>=0){l.preventDefault();let a=r[g];m.value=a.dataset.value||a.textContent||"",s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}}else l.key==="Escape"&&s()}),document.addEventListener("click",l=>{i.contains(l.target)||s()});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(m.addEventListener("blur",()=>{let l=(m.value||"").trim();if(!l)return;let r=Object.keys(f).find(a=>a.toLowerCase()===l.toLowerCase());r&&(m.value=f[r])}),n.description){let l=document.createElement("div");l.className="voc-form-timezone-description",L&&l.classList.add("form-text"),l.textContent=n.description,p.appendChild(l)}return i.appendChild(m),i.appendChild(d),i.appendChild(u),p.appendChild(i),p}function J(n,w,v){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-tags";let b=n.name||n.key||`tags_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("div");m.className="voc-form-tags-container",m.style.display="flex",m.style.flexWrap="wrap",m.style.gap="6px",m.style.alignItems="center",m.style.padding="6px",m.style.border="1px solid rgba(0,0,0,0.12)",m.style.borderRadius="4px";let i=document.createElement("input");i.type="text",i.className="voc-form-tags-input",i.style.border="none",i.style.flex="1 0 120px",i.style.minWidth="80px",i.style.outline="none",i.placeholder=n.placeholder||"",L&&i.classList.add("form-control"),m.appendChild(i);let d=[],u=document.createElement("input");u.type="text",u.style.position="absolute",u.style.left="-9999px",u.style.width="1px",u.style.height="1px",u.tabIndex=-1,n.required&&(u.required=!0),p.appendChild(u);function k(){Array.from(p.querySelectorAll("input.voc-form-tag-hidden")).forEach(h=>h.parentElement?.removeChild(h)),d.forEach(h=>{let s=document.createElement("input");s.type="hidden",s.name=`${b}[]`,s.className="voc-form-tag-hidden",s.value=h,n.key&&(s.id=`voc-form-${n.key}`),p.appendChild(s)}),n.required&&(d.length===0?(u.value="",u.setCustomValidity("Please enter at least one tag")):(u.value="1",u.setCustomValidity("")))}function T(e){let h=document.createElement("span");h.className="voc-form-tag",h.style.display="inline-flex",h.style.alignItems="center",h.style.padding="4px 8px",h.style.background="rgba(0,0,0,0.05)",h.style.borderRadius="16px";let s=document.createElement("span");s.textContent=e,s.style.marginRight="8px",h.appendChild(s);let o=document.createElement("button");return o.type="button",o.textContent="\xD7",o.style.border="none",o.style.background="transparent",o.style.cursor="pointer",o.addEventListener("click",()=>{let f=d.indexOf(e);f>=0&&(d.splice(f,1),m.removeChild(h),k())}),h.appendChild(o),h}function C(e){let h=e.trim();if(!h||d.includes(h))return;d.push(h);let s=T(h);m.insertBefore(s,i),k()}let g=v!=null?String(v):n.default||"";return g&&g.split(",").map(e=>e.trim()).filter(Boolean).forEach(C),i.addEventListener("keydown",e=>{if(e.key==="Enter"||e.key===",")e.preventDefault(),C(i.value),i.value="";else if(e.key==="Backspace"&&i.value===""&&d.pop()){let s=Array.from(m.querySelectorAll(".voc-form-tag")),o=s[s.length-1];o&&m.removeChild(o),k()}}),i.addEventListener("paste",e=>{let h=e.clipboardData?.getData("text");h&&(e.preventDefault(),h.split(/[,\n\r]+/).map(s=>s.trim()).filter(Boolean).forEach(C),i.value="")}),p.getTags=()=>d.slice(),p.addTag=C,p.appendChild(m),k(),p}function Y(n,w,v,L){let p=w?.style==="bootstrap",b=document.createElement("div");b.className="voc-form-field-selects";let m=document.createElement("div");if(m.className="voc-form-field-selects-header",p&&m.classList.add("mb-2"),n.label){let o=document.createElement("div");if(o.className="voc-form-field-selects-label",p&&o.classList.add("form-label"),o.textContent=n.label,n.required){let f=document.createElement("span");f.className="voc-form-required",f.textContent="*",o.appendChild(f)}m.appendChild(o)}if(n.description){let o=document.createElement("div");o.className="voc-form-field-selects-description",p&&o.classList.add("form-text"),o.textContent=n.description,m.appendChild(o)}b.appendChild(m);let i=document.createElement("div");i.className="voc-form-field-selects-search-wrapper";let d=document.createElement("input");d.type="search",d.placeholder="Search...",d.className="voc-form-field-selects-search",p&&d.classList.add("form-control","mb-2"),i.appendChild(d),b.appendChild(i);let u=n.options;if(!u||u.length===0)return b;let k=document.createElement("div");k.className="voc-form-field-selects-list",p&&k.classList.add("list-group");let T=document.createElement("div");T.className="voc-form-field-selects-selected",T.style.marginTop="12px";let C={},g=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(v)?e=v:v!=null?e=[v]:Array.isArray(n.default)&&(e=n.default),u.forEach((o,f)=>{let l=document.createElement("div");l.className="voc-form-field-selects-item",l.dataset.label=String(o.option_label??o.label??"").toLowerCase(),l.dataset.email=String(o.email||"").toLowerCase(),l.dataset.value=String(o.value||"").toLowerCase(),p&&l.classList.add("d-flex","align-items-center","gap-2");let r=document.createElement("input");if(r.type="checkbox",r.name=`${g}[]`,r.value=o.value??o.key,r.className="voc-form--checkbox",n.key&&(r.id=`voc-form-${n.key}-${f}`),r.style.position="absolute",r.style.width="1px",r.style.height="1px",r.style.margin="0",r.style.padding="0",r.style.clip="rect(0 0 0 0)",r.style.clipPath="inset(50%)",r.style.overflow="hidden",r.style.border="0",e&&Array.isArray(e)){let N=e.map(y=>String(y)),A=String(o.value??o.key);r.checked=N.includes(A)}let a=o.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',t=document.createElement("div");t.className="voc-form-fields-select-avatar",t.innerHTML=a;let c=document.createElement("div");c.className="voc-form-field-select-info",c.style.display="flex",c.style.flexDirection="column",c.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(o.option_label??o.label)||String(o.value);let x=document.createElement("small");x.className="voc-form-field-select-email",x.textContent=o.email||"",c.appendChild(E),c.appendChild(x),l.addEventListener("click",N=>{let A=N.target;A&&(A.closest("input")||A.closest("a")||A.closest("button"))||(r.checked=!r.checked,r.dispatchEvent(new Event("change",{bubbles:!0})))}),r.addEventListener("change",()=>{if(r.checked){l.classList.add("selected"),(C[f]||[]).forEach(y=>y.parentElement?.removeChild(y)),C[f]=[];let A=o;if(A&&Array.isArray(A.items))A.items.forEach(y=>{let F=L(y);F&&(T.appendChild(F),C[f].push(F))});else if(A&&(A.type||A.key)){let y=L(A);y&&(T.appendChild(y),C[f].push(y))}}else l.classList.remove("selected"),(C[f]||[]).forEach(A=>A.parentElement?.removeChild(A)),C[f]=[]}),r.checked&&(l.classList.add("selected"),setTimeout(()=>{let N=o;if(N&&Array.isArray(N.items))N.items.forEach(A=>{let y=L(A);y&&(T.appendChild(y),C[f]=C[f]||[],C[f].push(y))});else if(N&&(N.type||N.key)){let A=L(N);A&&(T.appendChild(A),C[f]=C[f]||[],C[f].push(A))}},0)),l.appendChild(r),l.appendChild(t),l.appendChild(c),k.appendChild(l)}),b.appendChild(k),b.appendChild(T),n.required){let o=k.querySelectorAll('input[type="checkbox"]'),f=()=>{let l=Array.from(o).some(r=>r.checked);return o.forEach(r=>{l?r.setCustomValidity(""):r.setCustomValidity("At least one option must be selected.")}),l};o.forEach(l=>{l.addEventListener("change",f)}),b._validateCheckboxGroup=f,f()}let h=Array.from(k.querySelectorAll(".voc-form-field-select-item")),s=()=>{let o=String(d.value||"").trim().toLowerCase();if(!o){h.forEach(f=>f.style.setProperty("display","flex","important"));return}h.forEach(f=>{let l=f.dataset.label||"",r=f.dataset.email||"",a=f.dataset.value||"",t=l.includes(o)||r.includes(o)||a.includes(o);f.style.setProperty("display",t?"flex":"none","important")})};return d.addEventListener("input",s),b}function I(n,w=!0){let v=new FormData(n);if(w)return ce(v);let L={};return v.forEach((p,b)=>{let m=(p instanceof File,p);Object.prototype.hasOwnProperty.call(L,b)?Array.isArray(L[b])?L[b].push(m):L[b]=[L[b],m]:L[b]=m}),L}function ce(n){let w=new FormData;for(let[v,L]of n.entries()){if(L instanceof File){w.append(v,L);continue}let p;try{p=JSON.parse(L)}catch{p=null}Array.isArray(p)?p.length===0?w.append(v,"[]"):p.every(b=>typeof b=="object"&&b!==null)?p.forEach((b,m)=>{for(let[i,d]of Object.entries(b))w.append(`${v}[${m}][${i}]`,d)}):w.append(v,L):w.append(v,L)}return w}async function K(n,w,v){let L=w.url,p={"Content-Type":"application/json"};w?.api_token&&(p.Authorization=`Bearer ${w.api_token}`);let b=I(n);if(w?.additional_data)for(let[d,u]of Object.entries(w.additional_data))b.append(d,u);let m,i=b instanceof FormData;m={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...i?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:i?b:JSON.stringify(Object.fromEntries(b.entries()))};try{fetch(L,m).then(async d=>{let u=d.headers.get("content-type");if(!d.ok)try{let T=(await d.json())?.message;throw new Error(T??"Their was an error submitting the form. Check your form and try again.")}catch(k){throw new Error(k.message)}return u&&u.includes("application/json")?d.json():d.text()}).then(d=>{v&&v(d,null)}).catch(d=>{v&&v(null,d)})}catch(d){v&&v(null,d)}}function Q(n,w,v){let L=[];if(typeof n=="string"?L=Array.from(document.querySelectorAll(n)):L=[n],L.length===0)return null;function p(){let i=v?.style==="bootstrap",d=document.createElement("form");d.classList.add("voc-form"),i&&d.classList.add("needs-validation"),d.id=w.id;let u=document.createElement("h2");u.className="voc-form-title",i&&u.classList.add("mb-3"),u.textContent=w.form_name,d.appendChild(u);function k(e,h){h&&(h.min_length!==void 0&&(e.minLength=h.min_length),h.max_length!==void 0&&(e.maxLength=h.max_length),h.regex&&(e instanceof HTMLInputElement?e.pattern=h.regex:e.dataset.pattern=h.regex))}function T(e){if(!e.key&&!e.label)return null;let h=w.default_values||{},s=e.name||e.key,o=s?h[s]:void 0,f=document.createElement("div");if(f.className="voc-form-group",i&&f.classList.add("mb-3"),e.label&&e.type!=="users"){let a=document.createElement("label");if(a.classList.add("voc-form-label"),i&&a.classList.add("form-label"),e.key?e.type==="radio"?a.htmlFor="":a.htmlFor=`voc-form-${e.key}`:a.htmlFor="",a.textContent=e.label,e.required){let t=document.createElement("span");t.className="voc-form-required",t.textContent="*",a.appendChild(t)}f.appendChild(a)}let l=new Set(["users","timezone"]);if(e.description&&!l.has(String(e.type||""))){let a=document.createElement("div");a.className="voc-form-description",i&&a.classList.add("form-text","text-muted","mb-2"),a.textContent=e.description,f.appendChild(a)}let r=null;switch(e.type){case"tags":{r=J(e,v||{},o);break}case"checkbox":{let a=document.createElement("div");if(a.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(a.style.width=e.width),e.options){if(e.options.forEach((t,c)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),i&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="checkbox",x.classList.add("voc-form-checkbox"),i&&x.classList.add("form-check-input"),x.name=`${e.name||e.key||""}[]`,x.value=t.value,e.key&&(x.id=`voc-form-${e.key}-${c}`),Array.isArray(o)?o.includes(t.value)&&(x.checked=!0):o!==void 0?o===t.value&&(x.checked=!0):e.default===t.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(t.label)),a.appendChild(E)}),e.required){let t=a.querySelectorAll('input[type="checkbox"]'),c=()=>{let E=Array.from(t).some(x=>x.checked);return t.forEach(x=>{E?x.setCustomValidity(""):x.setCustomValidity("At least one option must be selected.")}),E};t.forEach(E=>{E.addEventListener("change",c)}),a._validateCheckboxGroup=c,c()}}else{let t=document.createElement("label");t.classList.add("voc-form-checkbox-label"),i&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),i&&c.classList.add("form-check-input"),e.required&&(c.required=!0),o!==void 0?c.checked=!!o:e.default&&(c.checked=!!e.default),t.appendChild(c),t.appendChild(document.createTextNode(e.label||"")),a.appendChild(t)}r=a;break}case"boolean":{let a=document.createElement("div");a.className="voc-form-boolean-wrapper",i&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let t=document.createElement("input");if(t.type="checkbox",t.classList.add("voc-form-boolean"),i&&t.classList.add("form-check-input"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.required&&(t.required=!0),o!==void 0?t.checked=!!o:e.default!==void 0&&(t.checked=e.default===!0||e.default==="true"),a.appendChild(t),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),i&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let x=document.createElement("span");x.className="voc-form-required",x.textContent="*",E.appendChild(x)}a.appendChild(E)}let c=f.querySelector(".voc-form-label");c&&c.remove(),r=a;break}case"textarea":{let a=document.createElement("textarea");a.classList.add("voc-form-textarea"),i&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.placeholder&&(a.placeholder=e.placeholder),o!=null?a.value=String(o):e.default!==void 0&&e.default!==null&&(a.value=String(e.default));let t=e.default||o||"";if(t){let c=(t.match(/\n/g)||[]).length,E=80,x=t.split(`
|
|
2
|
-
`).reduce((
|
|
1
|
+
"use strict";var P=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ne=(r,w)=>{for(var y in w)P(r,y,{get:w[y],enumerable:!0})},re=(r,w,y,L)=>{if(w&&typeof w=="object"||typeof w=="function")for(let p of te(w))!ae.call(r,p)&&p!==y&&P(r,p,{get:()=>w[p],enumerable:!(L=ee(w,p))||L.enumerable});return r};var se=r=>re(P({},"__esModule",{value:!0}),r);var ue={};ne(ue,{FormsLib:()=>de,default:()=>me});module.exports=se(ue);function j(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-avatar-wrapper",L&&p.classList.add("d-flex","align-items-center","gap-3");let v=document.createElement("img");v.className="voc-form-avatar-preview",v.alt=r.label||"avatar",L&&(v.classList.add("img-thumbnail","rounded-circle"),v.style.width=v.style.height="64px",v.style.objectFit="cover");let u=y!=null?String(y):r.default!==void 0&&r.default!==null?String(r.default):"";u?v.src=u:(v.src="",v.style.display="none");let m=document.createElement("input");m.type="file",m.accept=r.accept||"image/*",m.className="voc-form-avatar-input",L&&m.classList.add("form-control"),(r.key||r.name)&&(m.name=r.name||r.key,r.key&&(m.id=`voc-form-${r.key}`));let l=document.createElement("input");if(l.type="hidden",(r.key||r.name)&&(l.name=(r.name||r.key)+"_url"),l.value=u||"",m.addEventListener("change",d=>{let b=d.target;if(b.files&&b.files.length>0){let A=b.files[0],k=new FileReader;k.onload=()=>{v.src=String(k.result),v.style.display="",l.value=""},k.readAsDataURL(A)}}),L){let d=document.createElement("div");d.style.flex="1",d.appendChild(m),d.appendChild(l),p.appendChild(v),p.appendChild(d)}else p.appendChild(v),p.appendChild(m),p.appendChild(l);return p}function W(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");if(p.className="voc-form-audio-select",!r.options||r.options.length===0)return p;let v=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,u;return Array.isArray(y)?u=y[0]:y!==void 0?u=y:r.default!==void 0&&(u=r.default),r.options.forEach((m,l)=>{let d=document.createElement("div");d.className="voc-form-audio-item",L&&d.classList.add("form-check");let b=document.createElement("input");b.type="radio",b.name=v,b.value=m.value,b.className="voc-form-audio-radio",r.key&&(b.id=`voc-form-${r.key}-${l}`),r.required&&l===0&&(b.required=!0),b.style.position="absolute",b.style.width="1px",b.style.height="1px",b.style.margin="0",b.style.padding="0",b.style.clip="rect(0 0 0 0)",b.style.clipPath="inset(50%)",b.style.overflow="hidden",b.style.border="0",u!==void 0&&(Array.isArray(u)?b.checked=u.includes(m.value):b.checked=String(u)===String(m.value));let A=()=>{b.checked?d.classList.add("selected"):d.classList.remove("selected")};b.addEventListener("change",()=>{p.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),A()}),b.checked&&d.classList.add("selected");let k=document.createElement("label");k.className="voc-form-audio-label",L&&k.classList.add("form-check-label"),k.htmlFor=b.id||"",k.textContent=m.label||m.value,k.tabIndex=0;let g=document.createElement("div");g.className="voc-form-audio-control";let e=null;if(m.audio_link){let s=document.createElement("button");s.type="button",s.className="voc-form-audio-play",L&&s.classList.add("btn","btn-sm","btn-outline-secondary"),s.setAttribute("aria-label",`Play ${m.label||m.value}`);let n="http://www.w3.org/2000/svg",t=document.createElementNS(n,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width","16"),t.setAttribute("height","16"),t.setAttribute("aria-hidden","true");let a=document.createElementNS(n,"path");a.setAttribute("d","M8 5v14l11-7z"),a.setAttribute("fill","currentColor"),t.appendChild(a),s.appendChild(t),e=document.createElement("audio"),e.src=m.audio_link,e.preload="none",e.style.display="none";let o=f=>{for(;f.firstChild;)f.removeChild(f.firstChild)},E=()=>{let f="http://www.w3.org/2000/svg",F=document.createElementNS(f,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(f,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},x=()=>{let f="http://www.w3.org/2000/svg",F=document.createElementNS(f,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(f,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};o(s),s.appendChild(E());let N=f=>{o(s),f?(s.appendChild(x()),s.setAttribute("aria-label",`Stop ${m.label||m.value}`)):(s.appendChild(E()),s.setAttribute("aria-label",`Play ${m.label||m.value}`))};s.addEventListener("click",()=>{try{if(!e)return;let f=p.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}f.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),p.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(f){console.warn("audio play failed",f)}}),e.addEventListener("playing",()=>{d.classList.add("is-playing"),N(!0)});let T=()=>{d.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",T),e.addEventListener("ended",T),g.appendChild(s),g.appendChild(e)}let C=document.createElement("div");C.className="voc-form-item-detail",C.style.display="flex",C.style.flexDirection="column",C.style.gap="4px";let c=document.createElement("div");c.className="voc-form-item-top",c.style.display="flex",c.style.alignItems="center",c.style.gap="8px",c.appendChild(b),c.appendChild(k);let i=document.createElement("div");i.className="voc-form-item-description";let h=m.description||m.hint_text||"";h&&(i.textContent=h),C.appendChild(c),C.appendChild(i),g.appendChild(C),d.appendChild(g),c.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(b.checked=!0,b.dispatchEvent(new Event("change",{bubbles:!0})))}),d.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(b.checked=!0,b.dispatchEvent(new Event("change",{bubbles:!0})))}),p.appendChild(d)}),p}function G(r,w,y){let L=document.createElement("div");L.className="voc-form-table-wrapper";let p=w?.style==="bootstrap",v=document.createElement("input");v.type="hidden",v.name=r.name||r.key,r.key&&(v.id=`voc-form-${r.key}`),L.appendChild(v);let u=document.createElement("table");u.className="voc-form-table",p&&u.classList.add("table","table-bordered");let m=document.createElement("thead"),l=document.createElement("tr"),d=document.createElement("th");d.className="voc-form-table-drag-col",d.textContent="",l.appendChild(d),(r.fields||[]).forEach(n=>{let t=document.createElement("th");t.textContent=n.label||n.key,l.appendChild(t)});let b=document.createElement("th");b.textContent="Actions",l.appendChild(b),m.appendChild(l),u.appendChild(m);let A=document.createElement("tbody");u.appendChild(A),L.appendChild(u);let k=document.createElement("button");k.type="button",k.className="voc-form-table-add",p&&k.classList.add("btn","btn-secondary"),k.textContent="+Add";let g=document.createElement("tfoot"),e=document.createElement("tr"),C=document.createElement("td");C.colSpan=(r.fields?r.fields.length:0)+1,C.appendChild(k),e.appendChild(C),g.appendChild(e),u.appendChild(g),L.appendChild(u);let c=[];function i(){v.value=JSON.stringify(c)}function h(n){let t=[];return r.fields.forEach(a=>{let o=n[a.key];if(a.type==="checkbox"){let E=Array.isArray(o)?o:o?[o]:[];a.required&&E.length===0&&t.push(`${a.label||a.key} is required`);return}a.required&&(o==null||String(o).trim()==="")&&t.push(`${a.label||a.key} is required`),a.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||t.push(`${a.label||a.key} must be a valid email`)),a.type==="number"&&o&&isNaN(Number(o))&&t.push(`${a.label||a.key} must be a number`),a.validation&&a.validation.regex&&o&&(new RegExp(a.validation.regex).test(String(o))||t.push(`${a.label||a.key} invalid format`))}),t}function s(){A.innerHTML="";let n=(t,a)=>{a.draggable=!0,a.addEventListener("mousedown",()=>{a.style.cursor="grabbing"}),a.addEventListener("mouseup",()=>{a.style.cursor="grab"}),a.addEventListener("dragstart",o=>{let E=Number(t.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(E)),t.classList.add("dragging");try{o.dataTransfer?.setDragImage(a,10,10)}catch{}}),a.addEventListener("dragend",()=>{t.classList.remove("dragging"),a.style.cursor="grab"}),t.addEventListener("dragover",o=>{o.preventDefault();let E=o.currentTarget,x=E.getBoundingClientRect(),N=x.top+x.height/2,T=(o.clientY||o.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),T?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),t.addEventListener("dragleave",o=>{let E=o.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),t.addEventListener("drop",o=>{o.preventDefault();let E=o.dataTransfer.getData("text/plain"),x=Number(o.currentTarget.dataset.rowIndex),N=Number(E),T=o.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(x))return;let[f]=c.splice(N,1),F=x;N<x&&(F=x-1);let M=T==="after"?F+1:F;c.splice(M,0,f),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,s(),i()})};c.forEach((t,a)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(a),o.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let x=document.createElement("span");x.className="voc-form-drag-handle-icon",x.textContent="\u2630",x.style.cursor="grab",E.appendChild(x),o.appendChild(E),n(o,x),r.fields.forEach(f=>{let F=document.createElement("td"),M,$=(f.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",p&&S.classList.add("form-control"),f.placeholder){let H=document.createElement("option");H.value="",H.textContent=f.placeholder,H.disabled=!0,(t[f.key]===void 0||t[f.key]===null||t[f.key]==="")&&(H.selected=!0),S.appendChild(H)}(f.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=t[f.key]!==void 0&&t[f.key]!==null?String(t[f.key]):"",f.required&&(S.required=!0),S.addEventListener("change",H=>{c[a][f.key]=H.target.value,i()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",p&&S.classList.add("form-check");let D=f.options||[];Array.isArray(c[a][f.key])||(c[a][f.key]=c[a][f.key]?[c[a][f.key]]:[]),D.forEach(H=>{let B=`voc-form-${r.key}-${f.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(c[a][f.key])&&c[a][f.key].includes(H.value),q.addEventListener("change",O=>{let X=O.target.checked;Array.isArray(c[a][f.key])||(c[a][f.key]=[]),X?c[a][f.key].includes(H.value)||c[a][f.key].push(H.value):c[a][f.key]=c[a][f.key].filter(Z=>Z!==H.value),i()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",p&&S.classList.add("form-check");let D=f.options||[];c[a][f.key]===void 0&&(c[a][f.key]=""),D.forEach(H=>{let B=`voc-form-${r.key}-${f.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",p&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",p&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${r.key}-${f.key}-${a}`,q.value=H.value,q.checked=c[a][f.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(c[a][f.key]=O.target.value,i())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",p&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=t[f.key]!==void 0&&t[f.key]!==null?String(t[f.key]):"",f.placeholder&&(S.placeholder=f.placeholder),f.required&&(S.required=!0),S.className="voc-form-table-cell",p&&S.classList.add("form-control"),S.addEventListener("input",D=>{c[a][f.key]=D.target.value,i()}),M=S}F.appendChild(M),o.appendChild(F)});let N=document.createElement("td"),T=document.createElement("button");T.type="button",T.className="voc-form-table-remove",p&&T.classList.add("btn","btn-danger"),T.textContent="Remove",T.addEventListener("click",()=>{c.splice(a,1),s(),i()}),N.appendChild(T),o.appendChild(N),A.appendChild(o)})}return k.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&c.length>=r.validation.max_rows)return;let n={};r.fields.forEach(t=>n[t.key]=""),c.push(n),s(),i()}),Array.isArray(y)&&y.length?c=y.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(c=r.default.map(n=>({...n}))),s(),i(),L.validate=function(){let n=[];return c.forEach((t,a)=>{let o=h(t);o.length&&n.push(`Row ${a+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&c.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&c.length>r.validation.max_rows&&n.push(`No more than ${r.validation.max_rows} rows allowed`),r.validation?.unique_fields&&r.validation.unique_fields.length&&r.validation.unique_fields.forEach(t=>{let a=new Set;c.forEach((o,E)=>{let x=o[t];x!=null&&(a.has(x)&&n.push(`Field ${t} must be unique (duplicate at row ${E+1})`),a.add(x))})}),n},L}async function oe(r){let y=new TextEncoder().encode(r),L=await crypto.subtle.digest("SHA-256",y);return Array.from(new Uint8Array(L)).map(v=>v.toString(16).padStart(2,"0")).join("")}async function ie(r){let w=String(r||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await oe(w)}?d=mp`:""}function V(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-users";let v=document.createElement("div");if(v.className="voc-form-users-header",L&&v.classList.add("mb-2"),r.label){let g=document.createElement("div");if(g.className="voc-form-users-label",L&&g.classList.add("form-label"),g.textContent=r.label,r.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",g.appendChild(e)}v.appendChild(g)}if(r.description){let g=document.createElement("div");g.className="voc-form-users-description",L&&g.classList.add("form-text"),g.textContent=r.description,v.appendChild(g)}p.appendChild(v);let u=document.createElement("div");u.className="voc-form-users-search-wrapper";let m=document.createElement("input");if(m.type="search",m.placeholder="Search users...",m.className="voc-form-users-search",L&&m.classList.add("form-control","mb-2"),u.appendChild(m),p.appendChild(u),!r.options||r.options.length===0)return p;let l=document.createElement("div");l.className="voc-form-users-list",L&&l.classList.add("list-group");let d=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,b=[];if(Array.isArray(y)?b=y:y!=null?b=[y]:Array.isArray(r.default)&&(b=r.default),r.options.forEach((g,e)=>{let C=document.createElement("div");C.className="voc-form-user-item",C.dataset.label=String(g.label||"").toLowerCase(),C.dataset.email=String(g.email||"").toLowerCase(),C.dataset.value=String(g.value||"").toLowerCase(),L&&C.classList.add("d-flex","align-items-center","gap-2");let c=document.createElement("input");if(c.type="checkbox",c.name=`${d}[]`,c.value=g.value,c.className="voc-form-user-checkbox",r.key&&(c.id=`voc-form-${r.key}-${e}`),c.style.position="absolute",c.style.width="1px",c.style.height="1px",c.style.margin="0",c.style.padding="0",c.style.clip="rect(0 0 0 0)",c.style.clipPath="inset(50%)",c.style.overflow="hidden",c.style.border="0",b&&Array.isArray(b)){let t=b.map(a=>String(a));c.checked=t.includes(String(g.value))}let i=document.createElement("img");i.className="voc-form-user-avatar",i.alt=g.label||String(g.value||"user"),i.style.width=i.style.height="40px",i.style.objectFit="cover",i.style.borderRadius="50%",i.src="",g.email&&ie(g.email).then(t=>{t&&(i.src=t)}).catch(()=>{});let h=document.createElement("div");h.className="voc-form-user-info",h.style.display="flex",h.style.flexDirection="column",h.style.gap="2px";let s=document.createElement("div");s.className="voc-form-user-label",s.textContent=g.label||String(g.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=g.email||"",h.appendChild(s),h.appendChild(n),C.addEventListener("click",t=>{let a=t.target;a&&(a.closest("input")||a.closest("a")||a.closest("button"))||(c.checked=!c.checked,c.dispatchEvent(new Event("change",{bubbles:!0})))}),c.addEventListener("change",()=>{c.checked?C.classList.add("selected"):C.classList.remove("selected")}),c.checked&&C.classList.add("selected"),C.appendChild(c),C.appendChild(i),C.appendChild(h),l.appendChild(C)}),p.appendChild(l),r.required){let g=l.querySelectorAll('input[type="checkbox"]'),e=()=>{let C=Array.from(g).some(c=>c.checked);return g.forEach(c=>{C?c.setCustomValidity(""):c.setCustomValidity("At least one option must be selected.")}),C};g.forEach(C=>{C.addEventListener("change",e)}),p._validateCheckboxGroup=e,e()}let A=Array.from(l.querySelectorAll(".voc-form-user-item")),k=()=>{let g=String(m.value||"").trim().toLowerCase();if(!g){A.forEach(e=>e.style.setProperty("display","flex","important"));return}A.forEach(e=>{let C=e.dataset.label||"",c=e.dataset.email||"",i=e.dataset.value||"",h=C.includes(g)||c.includes(g)||i.includes(g);e.style.setProperty("display",h?"flex":"none","important")})};return m.addEventListener("input",k),p}function U(r,w,y){let L=w?.style==="bootstrap",p=document.createElement("div");p.className="voc-form-timezone";let v=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,u=document.createElement("input");u.type="text",u.name=v,r.key&&(u.id=`voc-form-${r.key}`),u.className="voc-form-timezone-input",L&&u.classList.add("form-control"),r.placeholder&&(u.placeholder=r.placeholder||""),r.required&&(u.required=!0),r.width&&(u.style.width=r.width);try{u.autocomplete="off"}catch{}try{u.autocorrect="off"}catch{}try{u.autocapitalize="off"}catch{}try{u.spellcheck=!1}catch{}u.setAttribute("data-lpignore","true"),y!=null?u.value=String(y):r.default!==void 0&&r.default!==null&&(u.value=String(r.default));let m=document.createElement("div");m.className="voc-form-timezone-control",m.style.position="relative",m.style.display="inline-block",m.style.width=r.width||"100%";let l=document.createElement("button");l.type="button",l.className="voc-form-timezone-toggle",l.setAttribute("aria-haspopup","listbox"),l.setAttribute("aria-expanded","false"),l.style.position="absolute",l.style.right="4px",l.style.top="50%",l.style.transform="translateY(-50%)",l.style.height="28px",l.style.width="28px",l.style.padding="0",l.style.border="none",l.style.background="transparent",l.style.cursor="pointer",l.innerHTML="\u25BC";let d=document.createElement("ul");d.className="voc-form-timezone-list",d.setAttribute("role","listbox"),d.style.position="absolute",d.style.left="0",d.style.right="0",d.style.zIndex="1000",d.style.maxHeight="200px",d.style.overflow="auto",d.style.margin="4px 0 0 0",d.style.padding="0",d.style.listStyle="none",d.style.background="white",d.style.border="1px solid rgba(0,0,0,0.15)",d.style.display="none",d.tabIndex=-1,u.style.paddingRight="36px";let A=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function k(s){d.innerHTML="",s.forEach((n,t)=>{let a=document.createElement("li");a.className="voc-form-timezone-item",a.setAttribute("role","option"),a.dataset.value=n,a.style.padding="6px 8px",a.style.cursor="pointer",a.textContent=n,a.addEventListener("mousedown",o=>{o.preventDefault(),u.value=n,c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}),d.appendChild(a)})}k(A);let g=-1;function e(){Array.from(d.children).forEach((n,t)=>{t===g?(n.style.background="rgba(0,123,255,0.1)",n.setAttribute("aria-selected","true")):(n.style.background="",n.removeAttribute("aria-selected"))})}function C(){d.style.display="block",l.setAttribute("aria-expanded","true")}function c(){d.style.display="none",l.setAttribute("aria-expanded","false"),g=-1,e()}function i(){d.style.display==="none"?C():c()}u.addEventListener("input",()=>{let s=(u.value||"").trim().toLowerCase(),n=s?A.filter(t=>t.toLowerCase().includes(s)):A;k(n),C()}),l.addEventListener("click",s=>{s.preventDefault(),d.style.display==="none"?(k(A),C(),u.focus()):c()}),u.addEventListener("keydown",s=>{let n=Array.from(d.children);if(s.key==="ArrowDown"){if(s.preventDefault(),n.length===0)return;g=Math.min(g+1,n.length-1),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="ArrowUp"){if(s.preventDefault(),n.length===0)return;g=Math.max(g-1,0),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="Enter"){if(d.style.display!=="none"&&g>=0){s.preventDefault();let t=n[g];u.value=t.dataset.value||t.textContent||"",c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}}else s.key==="Escape"&&c()}),document.addEventListener("click",s=>{m.contains(s.target)||c()});let h={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(u.addEventListener("blur",()=>{let s=(u.value||"").trim();if(!s)return;let n=Object.keys(h).find(t=>t.toLowerCase()===s.toLowerCase());n&&(u.value=h[n])}),r.description){let s=document.createElement("div");s.className="voc-form-timezone-description",L&&s.classList.add("form-text"),s.textContent=r.description,p.appendChild(s)}return m.appendChild(u),m.appendChild(l),m.appendChild(d),p.appendChild(m),p}var le={email:r=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r),number:r=>r.trim()!==""&&!isNaN(Number(r)),url:r=>{try{return new URL(r),!0}catch{return!1}},text:()=>!0};function J(r,w,y){let L=w?.style==="bootstrap",p=r.tag_types,v=p&&p.length>0&&!p.includes("text"),u=document.createElement("div");u.className="voc-form-tags";let m=r.name||r.key||`tags_${Math.random().toString(36).substr(2,6)}`,l=document.createElement("div");l.className="voc-form-tags-container",l.style.display="flex",l.style.flexWrap="wrap",l.style.gap="6px",l.style.alignItems="center",l.style.padding="6px",l.style.border="1px solid rgba(0,0,0,0.12)",l.style.borderRadius="4px",l.style.transition="border-color 0.2s";let d=document.createElement("input");d.type="text",d.className="voc-form-tags-input",d.style.border="none",d.style.flex="1 0 120px",d.style.minWidth="80px",d.style.outline="none",d.placeholder=r.placeholder||"",L&&d.classList.add("form-control"),l.appendChild(d);let b=[],A=document.createElement("input");A.type="text",A.style.position="absolute",A.style.left="-9999px",A.style.width="1px",A.style.height="1px",A.tabIndex=-1,r.required&&(A.required=!0),u.appendChild(A);let k=null;function g(){l.style.borderColor="#dc3545",d.style.color="#dc3545",k&&clearTimeout(k),k=setTimeout(()=>{l.style.borderColor="rgba(0,0,0,0.12)",d.style.color="",k=null},600)}function e(s){return v?p.some(n=>{let t=le[n];return t?t(s):!0}):!0}function C(){Array.from(u.querySelectorAll("input.voc-form-tag-hidden")).forEach(n=>n.parentElement?.removeChild(n)),b.forEach(n=>{let t=document.createElement("input");t.type="hidden",t.name=`${m}[]`,t.className="voc-form-tag-hidden",t.value=n,r.key&&(t.id=`voc-form-${r.key}`),u.appendChild(t)}),r.required&&(b.length===0?(A.value="",A.setCustomValidity("Please enter at least one tag")):(A.value="1",A.setCustomValidity("")))}function c(s){let n=document.createElement("span");n.className="voc-form-tag",n.style.display="inline-flex",n.style.alignItems="center",n.style.padding="4px 8px",n.style.background="rgba(0,0,0,0.05)",n.style.borderRadius="16px";let t=document.createElement("span");t.textContent=s,t.style.marginRight="8px",n.appendChild(t);let a=document.createElement("button");return a.type="button",a.textContent="\xD7",a.style.border="none",a.style.background="transparent",a.style.cursor="pointer",a.addEventListener("click",()=>{let o=b.indexOf(s);o>=0&&(b.splice(o,1),l.removeChild(n),C())}),n.appendChild(a),n}function i(s,n=!1){let t=s.trim();if(!t||b.includes(t))return;if(!n&&!e(t)){g();return}b.push(t);let a=c(t);l.insertBefore(a,d),C()}let h=y!=null?String(y):r.default||"";return h&&h.split(",").map(s=>s.trim()).filter(Boolean).forEach(s=>i(s,!0)),d.addEventListener("keydown",s=>{if(s.key==="Enter"||s.key===","){s.preventDefault();let n=d.value;i(n),b[b.length-1]===n.trim()&&(d.value="")}else if(s.key==="Backspace"&&d.value===""&&b.pop()){let t=Array.from(l.querySelectorAll(".voc-form-tag")),a=t[t.length-1];a&&l.removeChild(a),C()}}),d.addEventListener("paste",s=>{let n=s.clipboardData?.getData("text");n&&(s.preventDefault(),n.split(/[,\n\r]+/).map(t=>t.trim()).filter(Boolean).forEach(t=>i(t)),d.value="")}),u.getTags=()=>b.slice(),u.addTag=i,u.appendChild(l),C(),u}function Y(r,w,y,L){let p=w?.style==="bootstrap",v=document.createElement("div");v.className="voc-form-field-selects";let u=document.createElement("div");if(u.className="voc-form-field-selects-header",p&&u.classList.add("mb-2"),r.label){let i=document.createElement("div");if(i.className="voc-form-field-selects-label",p&&i.classList.add("form-label"),i.textContent=r.label,r.required){let h=document.createElement("span");h.className="voc-form-required",h.textContent="*",i.appendChild(h)}u.appendChild(i)}if(r.description){let i=document.createElement("div");i.className="voc-form-field-selects-description",p&&i.classList.add("form-text"),i.textContent=r.description,u.appendChild(i)}v.appendChild(u);let m=document.createElement("div");m.className="voc-form-field-selects-search-wrapper";let l=document.createElement("input");l.type="search",l.placeholder="Search...",l.className="voc-form-field-selects-search",p&&l.classList.add("form-control","mb-2"),m.appendChild(l),v.appendChild(m);let d=r.options;if(!d||d.length===0)return v;let b=document.createElement("div");b.className="voc-form-field-selects-list",p&&b.classList.add("list-group");let A=document.createElement("div");A.className="voc-form-field-selects-selected",A.style.marginTop="12px";let k={},g=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(y)?e=y:y!=null?e=[y]:Array.isArray(r.default)&&(e=r.default),d.forEach((i,h)=>{let s=document.createElement("div");s.className="voc-form-field-selects-item",s.dataset.label=String(i.option_label??i.label??"").toLowerCase(),s.dataset.email=String(i.email||"").toLowerCase(),s.dataset.value=String(i.value||"").toLowerCase(),p&&s.classList.add("d-flex","align-items-center","gap-2");let n=document.createElement("input");if(n.type="checkbox",n.name=`${g}[]`,n.value=i.value??i.key,n.className="voc-form--checkbox",r.key&&(n.id=`voc-form-${r.key}-${h}`),n.style.position="absolute",n.style.width="1px",n.style.height="1px",n.style.margin="0",n.style.padding="0",n.style.clip="rect(0 0 0 0)",n.style.clipPath="inset(50%)",n.style.overflow="hidden",n.style.border="0",e&&Array.isArray(e)){let N=e.map(f=>String(f)),T=String(i.value??i.key);n.checked=N.includes(T)}let t=i.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',a=document.createElement("div");a.className="voc-form-fields-select-avatar",a.innerHTML=t;let o=document.createElement("div");o.className="voc-form-field-select-info",o.style.display="flex",o.style.flexDirection="column",o.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(i.option_label??i.label)||String(i.value);let x=document.createElement("small");x.className="voc-form-field-select-email",x.textContent=i.email||"",o.appendChild(E),o.appendChild(x),s.addEventListener("click",N=>{let T=N.target;T&&(T.closest("input")||T.closest("a")||T.closest("button"))||(n.checked=!n.checked,n.dispatchEvent(new Event("change",{bubbles:!0})))}),n.addEventListener("change",()=>{if(n.checked){s.classList.add("selected"),(k[h]||[]).forEach(f=>f.parentElement?.removeChild(f)),k[h]=[];let T=i;if(T&&Array.isArray(T.items))T.items.forEach(f=>{let F=L(f);F&&(A.appendChild(F),k[h].push(F))});else if(T&&(T.type||T.key)){let f=L(T);f&&(A.appendChild(f),k[h].push(f))}}else s.classList.remove("selected"),(k[h]||[]).forEach(T=>T.parentElement?.removeChild(T)),k[h]=[]}),n.checked&&(s.classList.add("selected"),setTimeout(()=>{let N=i;if(N&&Array.isArray(N.items))N.items.forEach(T=>{let f=L(T);f&&(A.appendChild(f),k[h]=k[h]||[],k[h].push(f))});else if(N&&(N.type||N.key)){let T=L(N);T&&(A.appendChild(T),k[h]=k[h]||[],k[h].push(T))}},0)),s.appendChild(n),s.appendChild(a),s.appendChild(o),b.appendChild(s)}),v.appendChild(b),v.appendChild(A),r.required){let i=b.querySelectorAll('input[type="checkbox"]'),h=()=>{let s=Array.from(i).some(n=>n.checked);return i.forEach(n=>{s?n.setCustomValidity(""):n.setCustomValidity("At least one option must be selected.")}),s};i.forEach(s=>{s.addEventListener("change",h)}),v._validateCheckboxGroup=h,h()}let C=Array.from(b.querySelectorAll(".voc-form-field-select-item")),c=()=>{let i=String(l.value||"").trim().toLowerCase();if(!i){C.forEach(h=>h.style.setProperty("display","flex","important"));return}C.forEach(h=>{let s=h.dataset.label||"",n=h.dataset.email||"",t=h.dataset.value||"",a=s.includes(i)||n.includes(i)||t.includes(i);h.style.setProperty("display",a?"flex":"none","important")})};return l.addEventListener("input",c),v}function I(r,w=!0){let y=new FormData(r);if(w)return ce(y);let L={};return y.forEach((p,v)=>{let u=(p instanceof File,p);Object.prototype.hasOwnProperty.call(L,v)?Array.isArray(L[v])?L[v].push(u):L[v]=[L[v],u]:L[v]=u}),L}function ce(r){let w=new FormData;for(let[y,L]of r.entries()){if(L instanceof File){w.append(y,L);continue}let p;try{p=JSON.parse(L)}catch{p=null}Array.isArray(p)?p.length===0?w.append(y,"[]"):p.every(v=>typeof v=="object"&&v!==null)?p.forEach((v,u)=>{for(let[m,l]of Object.entries(v))w.append(`${y}[${u}][${m}]`,l)}):w.append(y,L):w.append(y,L)}return w}async function K(r,w,y){let L=w.url,p={"Content-Type":"application/json"};w?.api_token&&(p.Authorization=`Bearer ${w.api_token}`);let v=I(r);if(w?.additional_data)for(let[l,d]of Object.entries(w.additional_data))v.append(l,d);let u,m=v instanceof FormData;u={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...m?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:m?v:JSON.stringify(Object.fromEntries(v.entries()))};try{fetch(L,u).then(async l=>{let d=l.headers.get("content-type");if(!l.ok)try{let A=(await l.json())?.message;throw new Error(A??"Their was an error submitting the form. Check your form and try again.")}catch(b){throw new Error(b.message)}return d&&d.includes("application/json")?l.json():l.text()}).then(l=>{y&&y(l,null)}).catch(l=>{y&&y(null,l)})}catch(l){y&&y(null,l)}}function Q(r,w,y){let L=[];if(typeof r=="string"?L=Array.from(document.querySelectorAll(r)):L=[r],L.length===0)return null;function p(){let m=y?.style==="bootstrap",l=document.createElement("form");l.classList.add("voc-form"),m&&l.classList.add("needs-validation"),l.id=w.id;let d=document.createElement("h2");d.className="voc-form-title",m&&d.classList.add("mb-3"),d.textContent=w.form_name,l.appendChild(d);function b(e,C){C&&(C.min_length!==void 0&&(e.minLength=C.min_length),C.max_length!==void 0&&(e.maxLength=C.max_length),C.regex&&(e instanceof HTMLInputElement?e.pattern=C.regex:e.dataset.pattern=C.regex))}function A(e){if(!e.key&&!e.label)return null;let C=w.default_values||{},c=e.name||e.key,i=c?C[c]:void 0,h=document.createElement("div");if(h.className="voc-form-group",m&&h.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),m&&t.classList.add("form-label"),e.key?e.type==="radio"?t.htmlFor="":t.htmlFor=`voc-form-${e.key}`:t.htmlFor="",t.textContent=e.label,e.required){let a=document.createElement("span");a.className="voc-form-required",a.textContent="*",t.appendChild(a)}h.appendChild(t)}let s=new Set(["users","timezone"]);if(e.description&&!s.has(String(e.type||""))){let t=document.createElement("div");t.className="voc-form-description",m&&t.classList.add("form-text","text-muted","mb-2"),t.textContent=e.description,h.appendChild(t)}let n=null;switch(e.type){case"tags":{n=J(e,y||{},i);break}case"checkbox":{let t=document.createElement("div");if(t.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options){if(e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="checkbox",x.classList.add("voc-form-checkbox"),m&&x.classList.add("form-check-input"),x.name=`${e.name||e.key||""}[]`,x.value=a.value,e.key&&(x.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(x.checked=!0):i!==void 0?i===a.value&&(x.checked=!0):e.default===a.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),e.required){let a=t.querySelectorAll('input[type="checkbox"]'),o=()=>{let E=Array.from(a).some(x=>x.checked);return a.forEach(x=>{E?x.setCustomValidity(""):x.setCustomValidity("At least one option must be selected.")}),E};a.forEach(E=>{E.addEventListener("change",o)}),t._validateCheckboxGroup=o,o()}}else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),m&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),(e.key||e.name)&&(o.name=e.name||e.key,e.key&&(o.id=`voc-form-${e.key}`)),m&&o.classList.add("form-check-input"),e.required&&(o.required=!0),i!==void 0?o.checked=!!i:e.default&&(o.checked=!!e.default),a.appendChild(o),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}n=t;break}case"boolean":{let t=document.createElement("div");t.className="voc-form-boolean-wrapper",m&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let a=document.createElement("input");if(a.type="checkbox",a.classList.add("voc-form-boolean"),m&&a.classList.add("form-check-input"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.required&&(a.required=!0),i!==void 0?a.checked=!!i:e.default!==void 0&&(a.checked=e.default===!0||e.default==="true"),t.appendChild(a),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),m&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let x=document.createElement("span");x.className="voc-form-required",x.textContent="*",E.appendChild(x)}t.appendChild(E)}let o=h.querySelector(".voc-form-label");o&&o.remove(),n=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let a=e.default||i||"";if(a){let o=(a.match(/\n/g)||[]).length,E=80,x=a.split(`
|
|
2
|
+
`).reduce((f,F)=>Math.max(f,F.length),0),N=Math.ceil(x/E)||1,T=Math.max(2,o+N);t.rows=T,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),b(t,e.validation),n=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),m&&t.classList.add("form-select"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let o=document.createElement("option");o.value=a.value,o.textContent=a.label,Array.isArray(i)?i.includes(a.value)&&(o.selected=!0):i!==void 0?i===a.value&&(o.selected=!0):e.default===a.value&&(o.selected=!0),t.appendChild(o)}),e.width&&(t.style.width=e.width),n=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-radio-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let x=document.createElement("input");x.type="radio",x.classList.add("voc-form-radio"),m&&x.classList.add("form-check-input"),x.name=e.name||e.key||"",x.value=a.value,e.key&&(x.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(x.checked=!0):i!==void 0?i===a.value&&(x.checked=!0):e.default===a.value&&(x.checked=!0),E.appendChild(x),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),n=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),m&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),n=t;break}case"avatar":{n=j(e,y||{},i);break}case"table":{n=G(e,y||{},i);break}case"users":{n=V(e,y||{},i);break}case"timezone":{n=U(e,y||{},i);break}case"audio_select":{n=W(e,y||{},i);break}case"field-select":{n=Y(e,y||{},i,A);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),b(t,e.validation),n=t;break}}if(n&&h.appendChild(n),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.innerHTML=e.hint_text,h.appendChild(t)}return h}function k(e,C,c=0){if(e.type==="group"&&"items"in e){let h=e;if(m){let s=document.createElement("div");s.className="card voc-form-group-card mb-3",c>0&&s.classList.add("voc-form-nested-group");let n=h.label||h.header?.title,t=h.description||h.header?.description;if(n||t){let o=document.createElement("div");if(o.className="card-header voc-form-group-head",n){let E=document.createElement("h5");E.className="mb-0 voc-form-group-label",E.textContent=n,o.appendChild(E)}if(t){let E=document.createElement("p");E.className="mb-0 voc-form-group-description",E.textContent=t,o.appendChild(E)}s.appendChild(o)}let a=document.createElement("div");a.className="card-body voc-form-group-body",h.items.forEach(o=>{k(o,a,c+1)}),s.appendChild(a),C.appendChild(s)}else{let s=document.createElement("div");s.className="voc-form-group voc-form-group-wrapper",c>0&&s.classList.add("voc-form-nested-group");let n=h.label||h.header?.title,t=h.description||h.header?.description;if(n||t){let a=document.createElement("div");if(a.className="voc-form-group-head",n){let o=document.createElement("h3");o.className="voc-form-group-label",o.textContent=n,a.appendChild(o)}if(t){let o=document.createElement("p");o.className="voc-form-group-description",o.textContent=t,a.appendChild(o)}s.appendChild(a)}h.items.forEach(a=>{k(a,s,c+1)}),C.appendChild(s)}return}if(e.type==="row"&&"items"in e){let h=e,s=document.createElement("div");if(s.className="voc-form-group voc-form-row",m&&s.classList.add("mb-3"),h.label){let t=document.createElement(c>0?"h6":"h3");t.className="voc-form-row-label",t.textContent=h.label,s.appendChild(t)}if(h.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=h.description,s.appendChild(t)}let n=document.createElement("div");n.className="voc-form-row-items "+(h.direction||"horizontal"),h.items.forEach(t=>{let a=A(t);a&&n.appendChild(a)}),s.appendChild(n),C.appendChild(s);return}let i=A(e);i&&C.appendChild(i)}w.fields.forEach(e=>{k(e,l,0)});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",m&&g.classList.add("btn","btn-primary"),l.appendChild(g),l}let v=p();L[0].appendChild(v);let u=w?.submit_config??y?.submit_config??null;return u&&v.addEventListener("submit",m=>{m.preventDefault();let l=Array.from(v.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),d=[];if(l.forEach(k=>{k&&typeof k._validateCheckboxGroup=="function"&&(k._validateCheckboxGroup()||k.querySelector('input[type="checkbox"]')&&d.push("Please select at least one option"))}),!v.checkValidity()){v.reportValidity(),y?.onSubmitResult&&y.onSubmitResult(null,new Error("Form validation failed"));return}let b=Array.from(v.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),A=[];if(b.forEach(k=>{if(k&&typeof k.validate=="function"){let g=k.validate();g&&g.length&&A.push(...g)}}),A.length){y?.onSubmitResult&&y.onSubmitResult(null,new Error(A.join("; ")));let k=b[0];k&&k.scrollIntoView({behavior:"smooth",block:"center"});return}if(y?.onSubmit){let k=I(v);y.onSubmit(k)}K(v,u,(k,g)=>{y?.onSubmitResult&&y.onSubmitResult(k,g)})}),{element:v,validate:()=>{let m=[];return v.querySelectorAll(":invalid").forEach(d=>{let b=d.validationMessage;m.push({element:d,message:b})}),m},getValues:()=>I(v),onSubmit:m=>{v.addEventListener("submit",l=>{l.preventDefault();let d=I(v);m(d,l)})}}}var z={renderForm:Q};var de=z,me={FormsLib:z};0&&(module.exports={FormsLib});
|
package/dist/main.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function z(n,w,g){let x=w?.style==="bootstrap",f=document.createElement("div");f.className="voc-form-avatar-wrapper",x&&f.classList.add("d-flex","align-items-center","gap-3");let v=document.createElement("img");v.className="voc-form-avatar-preview",v.alt=n.label||"avatar",x&&(v.classList.add("img-thumbnail","rounded-circle"),v.style.width=v.style.height="64px",v.style.objectFit="cover");let m=g!=null?String(g):n.default!==void 0&&n.default!==null?String(n.default):"";m?v.src=m:(v.src="",v.style.display="none");let i=document.createElement("input");i.type="file",i.accept=n.accept||"image/*",i.className="voc-form-avatar-input",x&&i.classList.add("form-control"),(n.key||n.name)&&(i.name=n.name||n.key,n.key&&(i.id=`voc-form-${n.key}`));let d=document.createElement("input");if(d.type="hidden",(n.key||n.name)&&(d.name=(n.name||n.key)+"_url"),d.value=m||"",i.addEventListener("change",u=>{let k=u.target;if(k.files&&k.files.length>0){let T=k.files[0],C=new FileReader;C.onload=()=>{v.src=String(C.result),v.style.display="",d.value=""},C.readAsDataURL(T)}}),x){let u=document.createElement("div");u.style.flex="1",u.appendChild(i),u.appendChild(d),f.appendChild(v),f.appendChild(u)}else f.appendChild(v),f.appendChild(i),f.appendChild(d);return f}function j(n,w,g){let x=w?.style==="bootstrap",f=document.createElement("div");if(f.className="voc-form-audio-select",!n.options||n.options.length===0)return f;let v=n.name||n.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,m;return Array.isArray(g)?m=g[0]:g!==void 0?m=g:n.default!==void 0&&(m=n.default),n.options.forEach((i,d)=>{let u=document.createElement("div");u.className="voc-form-audio-item",x&&u.classList.add("form-check");let k=document.createElement("input");k.type="radio",k.name=v,k.value=i.value,k.className="voc-form-audio-radio",n.key&&(k.id=`voc-form-${n.key}-${d}`),n.required&&d===0&&(k.required=!0),k.style.position="absolute",k.style.width="1px",k.style.height="1px",k.style.margin="0",k.style.padding="0",k.style.clip="rect(0 0 0 0)",k.style.clipPath="inset(50%)",k.style.overflow="hidden",k.style.border="0",m!==void 0&&(Array.isArray(m)?k.checked=m.includes(i.value):k.checked=String(m)===String(i.value));let T=()=>{k.checked?u.classList.add("selected"):u.classList.remove("selected")};k.addEventListener("change",()=>{f.querySelectorAll(".voc-form-audio-item").forEach(r=>r.classList.remove("selected")),T()}),k.checked&&u.classList.add("selected");let C=document.createElement("label");C.className="voc-form-audio-label",x&&C.classList.add("form-check-label"),C.htmlFor=k.id||"",C.textContent=i.label||i.value,C.tabIndex=0;let b=document.createElement("div");b.className="voc-form-audio-control";let e=null;if(i.audio_link){let l=document.createElement("button");l.type="button",l.className="voc-form-audio-play",x&&l.classList.add("btn","btn-sm","btn-outline-secondary"),l.setAttribute("aria-label",`Play ${i.label||i.value}`);let r="http://www.w3.org/2000/svg",a=document.createElementNS(r,"svg");a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("width","16"),a.setAttribute("height","16"),a.setAttribute("aria-hidden","true");let t=document.createElementNS(r,"path");t.setAttribute("d","M8 5v14l11-7z"),t.setAttribute("fill","currentColor"),a.appendChild(t),l.appendChild(a),e=document.createElement("audio"),e.src=i.audio_link,e.preload="none",e.style.display="none";let c=y=>{for(;y.firstChild;)y.removeChild(y.firstChild)},E=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},L=()=>{let y="http://www.w3.org/2000/svg",F=document.createElementNS(y,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(y,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};c(l),l.appendChild(E());let N=y=>{c(l),y?(l.appendChild(L()),l.setAttribute("aria-label",`Stop ${i.label||i.value}`)):(l.appendChild(E()),l.setAttribute("aria-label",`Play ${i.label||i.value}`))};l.addEventListener("click",()=>{try{if(!e)return;let y=f.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}y.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),f.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(y){console.warn("audio play failed",y)}}),e.addEventListener("playing",()=>{u.classList.add("is-playing"),N(!0)});let A=()=>{u.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",A),e.addEventListener("ended",A),b.appendChild(l),b.appendChild(e)}let p=document.createElement("div");p.className="voc-form-item-detail",p.style.display="flex",p.style.flexDirection="column",p.style.gap="4px";let s=document.createElement("div");s.className="voc-form-item-top",s.style.display="flex",s.style.alignItems="center",s.style.gap="8px",s.appendChild(k),s.appendChild(C);let o=document.createElement("div");o.className="voc-form-item-description";let h=i.description||i.hint_text||"";h&&(o.textContent=h),p.appendChild(s),p.appendChild(o),b.appendChild(p),u.appendChild(b),s.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),u.addEventListener("click",l=>{let r=l.target;r&&r.closest(".voc-form-audio-play")||(k.checked=!0,k.dispatchEvent(new Event("change",{bubbles:!0})))}),f.appendChild(u)}),f}function W(n,w,g){let x=document.createElement("div");x.className="voc-form-table-wrapper";let f=w?.style==="bootstrap",v=document.createElement("input");v.type="hidden",v.name=n.name||n.key,n.key&&(v.id=`voc-form-${n.key}`),x.appendChild(v);let m=document.createElement("table");m.className="voc-form-table",f&&m.classList.add("table","table-bordered");let i=document.createElement("thead"),d=document.createElement("tr"),u=document.createElement("th");u.className="voc-form-table-drag-col",u.textContent="",d.appendChild(u),(n.fields||[]).forEach(r=>{let a=document.createElement("th");a.textContent=r.label||r.key,d.appendChild(a)});let k=document.createElement("th");k.textContent="Actions",d.appendChild(k),i.appendChild(d),m.appendChild(i);let T=document.createElement("tbody");m.appendChild(T),x.appendChild(m);let C=document.createElement("button");C.type="button",C.className="voc-form-table-add",f&&C.classList.add("btn","btn-secondary"),C.textContent="+Add";let b=document.createElement("tfoot"),e=document.createElement("tr"),p=document.createElement("td");p.colSpan=(n.fields?n.fields.length:0)+1,p.appendChild(C),e.appendChild(p),b.appendChild(e),m.appendChild(b),x.appendChild(m);let s=[];function o(){v.value=JSON.stringify(s)}function h(r){let a=[];return n.fields.forEach(t=>{let c=r[t.key];if(t.type==="checkbox"){let E=Array.isArray(c)?c:c?[c]:[];t.required&&E.length===0&&a.push(`${t.label||t.key} is required`);return}t.required&&(c==null||String(c).trim()==="")&&a.push(`${t.label||t.key} is required`),t.type==="email"&&c&&(/^\S+@\S+\.\S+$/.test(String(c))||a.push(`${t.label||t.key} must be a valid email`)),t.type==="number"&&c&&isNaN(Number(c))&&a.push(`${t.label||t.key} must be a number`),t.validation&&t.validation.regex&&c&&(new RegExp(t.validation.regex).test(String(c))||a.push(`${t.label||t.key} invalid format`))}),a}function l(){T.innerHTML="";let r=(a,t)=>{t.draggable=!0,t.addEventListener("mousedown",()=>{t.style.cursor="grabbing"}),t.addEventListener("mouseup",()=>{t.style.cursor="grab"}),t.addEventListener("dragstart",c=>{let E=Number(a.dataset.rowIndex);c.dataTransfer.setData("text/plain",String(E)),a.classList.add("dragging");try{c.dataTransfer?.setDragImage(t,10,10)}catch{}}),t.addEventListener("dragend",()=>{a.classList.remove("dragging"),t.style.cursor="grab"}),a.addEventListener("dragover",c=>{c.preventDefault();let E=c.currentTarget,L=E.getBoundingClientRect(),N=L.top+L.height/2,A=(c.clientY||c.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),A?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),a.addEventListener("dragleave",c=>{let E=c.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),a.addEventListener("drop",c=>{c.preventDefault();let E=c.dataTransfer.getData("text/plain"),L=Number(c.currentTarget.dataset.rowIndex),N=Number(E),A=c.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(L))return;let[y]=s.splice(N,1),F=L;N<L&&(F=L-1);let M=A==="after"?F+1:F;s.splice(M,0,y),c.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete c.currentTarget.dataset.dropPosition,l(),o()})};s.forEach((a,t)=>{let c=document.createElement("tr");c.dataset.rowIndex=String(t),c.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let L=document.createElement("span");L.className="voc-form-drag-handle-icon",L.textContent="\u2630",L.style.cursor="grab",E.appendChild(L),c.appendChild(E),r(c,L),n.fields.forEach(y=>{let F=document.createElement("td"),M,$=(y.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",f&&S.classList.add("form-control"),y.placeholder){let H=document.createElement("option");H.value="",H.textContent=y.placeholder,H.disabled=!0,(a[y.key]===void 0||a[y.key]===null||a[y.key]==="")&&(H.selected=!0),S.appendChild(H)}(y.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.required&&(S.required=!0),S.addEventListener("change",H=>{s[t][y.key]=H.target.value,o()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",f&&S.classList.add("form-check");let D=y.options||[];Array.isArray(s[t][y.key])||(s[t][y.key]=s[t][y.key]?[s[t][y.key]]:[]),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",f&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",f&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(s[t][y.key])&&s[t][y.key].includes(H.value),q.addEventListener("change",O=>{let Q=O.target.checked;Array.isArray(s[t][y.key])||(s[t][y.key]=[]),Q?s[t][y.key].includes(H.value)||s[t][y.key].push(H.value):s[t][y.key]=s[t][y.key].filter(X=>X!==H.value),o()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",f&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",f&&S.classList.add("form-check");let D=y.options||[];s[t][y.key]===void 0&&(s[t][y.key]=""),D.forEach(H=>{let B=`voc-form-${n.key}-${y.key}-${t}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",f&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",f&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${n.key}-${y.key}-${t}`,q.value=H.value,q.checked=s[t][y.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(s[t][y.key]=O.target.value,o())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",f&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=a[y.key]!==void 0&&a[y.key]!==null?String(a[y.key]):"",y.placeholder&&(S.placeholder=y.placeholder),y.required&&(S.required=!0),S.className="voc-form-table-cell",f&&S.classList.add("form-control"),S.addEventListener("input",D=>{s[t][y.key]=D.target.value,o()}),M=S}F.appendChild(M),c.appendChild(F)});let N=document.createElement("td"),A=document.createElement("button");A.type="button",A.className="voc-form-table-remove",f&&A.classList.add("btn","btn-danger"),A.textContent="Remove",A.addEventListener("click",()=>{s.splice(t,1),l(),o()}),N.appendChild(A),c.appendChild(N),T.appendChild(c)})}return C.addEventListener("click",()=>{if(n.validation?.max_rows!==void 0&&s.length>=n.validation.max_rows)return;let r={};n.fields.forEach(a=>r[a.key]=""),s.push(r),l(),o()}),Array.isArray(g)&&g.length?s=g.map(r=>({...r})):n.default&&Array.isArray(n.default)&&(s=n.default.map(r=>({...r}))),l(),o(),x.validate=function(){let r=[];return s.forEach((a,t)=>{let c=h(a);c.length&&r.push(`Row ${t+1}: ${c.join("; ")}`)}),n.validation?.min_rows!==void 0&&s.length<n.validation.min_rows&&r.push(`At least ${n.validation.min_rows} rows required`),n.validation?.max_rows!==void 0&&s.length>n.validation.max_rows&&r.push(`No more than ${n.validation.max_rows} rows allowed`),n.validation?.unique_fields&&n.validation.unique_fields.length&&n.validation.unique_fields.forEach(a=>{let t=new Set;s.forEach((c,E)=>{let L=c[a];L!=null&&(t.has(L)&&r.push(`Field ${a} must be unique (duplicate at row ${E+1})`),t.add(L))})}),r},x}async function Z(n){let g=new TextEncoder().encode(n),x=await crypto.subtle.digest("SHA-256",g);return Array.from(new Uint8Array(x)).map(v=>v.toString(16).padStart(2,"0")).join("")}async function ee(n){let w=String(n||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await Z(w)}?d=mp`:""}function G(n,w,g){let x=w?.style==="bootstrap",f=document.createElement("div");f.className="voc-form-users";let v=document.createElement("div");if(v.className="voc-form-users-header",x&&v.classList.add("mb-2"),n.label){let b=document.createElement("div");if(b.className="voc-form-users-label",x&&b.classList.add("form-label"),b.textContent=n.label,n.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",b.appendChild(e)}v.appendChild(b)}if(n.description){let b=document.createElement("div");b.className="voc-form-users-description",x&&b.classList.add("form-text"),b.textContent=n.description,v.appendChild(b)}f.appendChild(v);let m=document.createElement("div");m.className="voc-form-users-search-wrapper";let i=document.createElement("input");if(i.type="search",i.placeholder="Search users...",i.className="voc-form-users-search",x&&i.classList.add("form-control","mb-2"),m.appendChild(i),f.appendChild(m),!n.options||n.options.length===0)return f;let d=document.createElement("div");d.className="voc-form-users-list",x&&d.classList.add("list-group");let u=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,k=[];if(Array.isArray(g)?k=g:g!=null?k=[g]:Array.isArray(n.default)&&(k=n.default),n.options.forEach((b,e)=>{let p=document.createElement("div");p.className="voc-form-user-item",p.dataset.label=String(b.label||"").toLowerCase(),p.dataset.email=String(b.email||"").toLowerCase(),p.dataset.value=String(b.value||"").toLowerCase(),x&&p.classList.add("d-flex","align-items-center","gap-2");let s=document.createElement("input");if(s.type="checkbox",s.name=`${u}[]`,s.value=b.value,s.className="voc-form-user-checkbox",n.key&&(s.id=`voc-form-${n.key}-${e}`),s.style.position="absolute",s.style.width="1px",s.style.height="1px",s.style.margin="0",s.style.padding="0",s.style.clip="rect(0 0 0 0)",s.style.clipPath="inset(50%)",s.style.overflow="hidden",s.style.border="0",k&&Array.isArray(k)){let a=k.map(t=>String(t));s.checked=a.includes(String(b.value))}let o=document.createElement("img");o.className="voc-form-user-avatar",o.alt=b.label||String(b.value||"user"),o.style.width=o.style.height="40px",o.style.objectFit="cover",o.style.borderRadius="50%",o.src="",b.email&&ee(b.email).then(a=>{a&&(o.src=a)}).catch(()=>{});let h=document.createElement("div");h.className="voc-form-user-info",h.style.display="flex",h.style.flexDirection="column",h.style.gap="2px";let l=document.createElement("div");l.className="voc-form-user-label",l.textContent=b.label||String(b.value);let r=document.createElement("small");r.className="voc-form-user-email",r.textContent=b.email||"",h.appendChild(l),h.appendChild(r),p.addEventListener("click",a=>{let t=a.target;t&&(t.closest("input")||t.closest("a")||t.closest("button"))||(s.checked=!s.checked,s.dispatchEvent(new Event("change",{bubbles:!0})))}),s.addEventListener("change",()=>{s.checked?p.classList.add("selected"):p.classList.remove("selected")}),s.checked&&p.classList.add("selected"),p.appendChild(s),p.appendChild(o),p.appendChild(h),d.appendChild(p)}),f.appendChild(d),n.required){let b=d.querySelectorAll('input[type="checkbox"]'),e=()=>{let p=Array.from(b).some(s=>s.checked);return b.forEach(s=>{p?s.setCustomValidity(""):s.setCustomValidity("At least one option must be selected.")}),p};b.forEach(p=>{p.addEventListener("change",e)}),f._validateCheckboxGroup=e,e()}let T=Array.from(d.querySelectorAll(".voc-form-user-item")),C=()=>{let b=String(i.value||"").trim().toLowerCase();if(!b){T.forEach(e=>e.style.setProperty("display","flex","important"));return}T.forEach(e=>{let p=e.dataset.label||"",s=e.dataset.email||"",o=e.dataset.value||"",h=p.includes(b)||s.includes(b)||o.includes(b);e.style.setProperty("display",h?"flex":"none","important")})};return i.addEventListener("input",C),f}function V(n,w,g){let x=w?.style==="bootstrap",f=document.createElement("div");f.className="voc-form-timezone";let v=n.name||n.key||`timezone_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("input");m.type="text",m.name=v,n.key&&(m.id=`voc-form-${n.key}`),m.className="voc-form-timezone-input",x&&m.classList.add("form-control"),n.placeholder&&(m.placeholder=n.placeholder||""),n.required&&(m.required=!0),n.width&&(m.style.width=n.width);try{m.autocomplete="off"}catch{}try{m.autocorrect="off"}catch{}try{m.autocapitalize="off"}catch{}try{m.spellcheck=!1}catch{}m.setAttribute("data-lpignore","true"),g!=null?m.value=String(g):n.default!==void 0&&n.default!==null&&(m.value=String(n.default));let i=document.createElement("div");i.className="voc-form-timezone-control",i.style.position="relative",i.style.display="inline-block",i.style.width=n.width||"100%";let d=document.createElement("button");d.type="button",d.className="voc-form-timezone-toggle",d.setAttribute("aria-haspopup","listbox"),d.setAttribute("aria-expanded","false"),d.style.position="absolute",d.style.right="4px",d.style.top="50%",d.style.transform="translateY(-50%)",d.style.height="28px",d.style.width="28px",d.style.padding="0",d.style.border="none",d.style.background="transparent",d.style.cursor="pointer",d.innerHTML="\u25BC";let u=document.createElement("ul");u.className="voc-form-timezone-list",u.setAttribute("role","listbox"),u.style.position="absolute",u.style.left="0",u.style.right="0",u.style.zIndex="1000",u.style.maxHeight="200px",u.style.overflow="auto",u.style.margin="4px 0 0 0",u.style.padding="0",u.style.listStyle="none",u.style.background="white",u.style.border="1px solid rgba(0,0,0,0.15)",u.style.display="none",u.tabIndex=-1,m.style.paddingRight="36px";let T=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function C(l){u.innerHTML="",l.forEach((r,a)=>{let t=document.createElement("li");t.className="voc-form-timezone-item",t.setAttribute("role","option"),t.dataset.value=r,t.style.padding="6px 8px",t.style.cursor="pointer",t.textContent=r,t.addEventListener("mousedown",c=>{c.preventDefault(),m.value=r,s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}),u.appendChild(t)})}C(T);let b=-1;function e(){Array.from(u.children).forEach((r,a)=>{a===b?(r.style.background="rgba(0,123,255,0.1)",r.setAttribute("aria-selected","true")):(r.style.background="",r.removeAttribute("aria-selected"))})}function p(){u.style.display="block",d.setAttribute("aria-expanded","true")}function s(){u.style.display="none",d.setAttribute("aria-expanded","false"),b=-1,e()}function o(){u.style.display==="none"?p():s()}m.addEventListener("input",()=>{let l=(m.value||"").trim().toLowerCase(),r=l?T.filter(a=>a.toLowerCase().includes(l)):T;C(r),p()}),d.addEventListener("click",l=>{l.preventDefault(),u.style.display==="none"?(C(T),p(),m.focus()):s()}),m.addEventListener("keydown",l=>{let r=Array.from(u.children);if(l.key==="ArrowDown"){if(l.preventDefault(),r.length===0)return;b=Math.min(b+1,r.length-1),e(),r[b].scrollIntoView({block:"nearest"})}else if(l.key==="ArrowUp"){if(l.preventDefault(),r.length===0)return;b=Math.max(b-1,0),e(),r[b].scrollIntoView({block:"nearest"})}else if(l.key==="Enter"){if(u.style.display!=="none"&&b>=0){l.preventDefault();let a=r[b];m.value=a.dataset.value||a.textContent||"",s(),m.dispatchEvent(new Event("change",{bubbles:!0}))}}else l.key==="Escape"&&s()}),document.addEventListener("click",l=>{i.contains(l.target)||s()});let h={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(m.addEventListener("blur",()=>{let l=(m.value||"").trim();if(!l)return;let r=Object.keys(h).find(a=>a.toLowerCase()===l.toLowerCase());r&&(m.value=h[r])}),n.description){let l=document.createElement("div");l.className="voc-form-timezone-description",x&&l.classList.add("form-text"),l.textContent=n.description,f.appendChild(l)}return i.appendChild(m),i.appendChild(d),i.appendChild(u),f.appendChild(i),f}function U(n,w,g){let x=w?.style==="bootstrap",f=document.createElement("div");f.className="voc-form-tags";let v=n.name||n.key||`tags_${Math.random().toString(36).substr(2,6)}`,m=document.createElement("div");m.className="voc-form-tags-container",m.style.display="flex",m.style.flexWrap="wrap",m.style.gap="6px",m.style.alignItems="center",m.style.padding="6px",m.style.border="1px solid rgba(0,0,0,0.12)",m.style.borderRadius="4px";let i=document.createElement("input");i.type="text",i.className="voc-form-tags-input",i.style.border="none",i.style.flex="1 0 120px",i.style.minWidth="80px",i.style.outline="none",i.placeholder=n.placeholder||"",x&&i.classList.add("form-control"),m.appendChild(i);let d=[],u=document.createElement("input");u.type="text",u.style.position="absolute",u.style.left="-9999px",u.style.width="1px",u.style.height="1px",u.tabIndex=-1,n.required&&(u.required=!0),f.appendChild(u);function k(){Array.from(f.querySelectorAll("input.voc-form-tag-hidden")).forEach(p=>p.parentElement?.removeChild(p)),d.forEach(p=>{let s=document.createElement("input");s.type="hidden",s.name=`${v}[]`,s.className="voc-form-tag-hidden",s.value=p,n.key&&(s.id=`voc-form-${n.key}`),f.appendChild(s)}),n.required&&(d.length===0?(u.value="",u.setCustomValidity("Please enter at least one tag")):(u.value="1",u.setCustomValidity("")))}function T(e){let p=document.createElement("span");p.className="voc-form-tag",p.style.display="inline-flex",p.style.alignItems="center",p.style.padding="4px 8px",p.style.background="rgba(0,0,0,0.05)",p.style.borderRadius="16px";let s=document.createElement("span");s.textContent=e,s.style.marginRight="8px",p.appendChild(s);let o=document.createElement("button");return o.type="button",o.textContent="\xD7",o.style.border="none",o.style.background="transparent",o.style.cursor="pointer",o.addEventListener("click",()=>{let h=d.indexOf(e);h>=0&&(d.splice(h,1),m.removeChild(p),k())}),p.appendChild(o),p}function C(e){let p=e.trim();if(!p||d.includes(p))return;d.push(p);let s=T(p);m.insertBefore(s,i),k()}let b=g!=null?String(g):n.default||"";return b&&b.split(",").map(e=>e.trim()).filter(Boolean).forEach(C),i.addEventListener("keydown",e=>{if(e.key==="Enter"||e.key===",")e.preventDefault(),C(i.value),i.value="";else if(e.key==="Backspace"&&i.value===""&&d.pop()){let s=Array.from(m.querySelectorAll(".voc-form-tag")),o=s[s.length-1];o&&m.removeChild(o),k()}}),i.addEventListener("paste",e=>{let p=e.clipboardData?.getData("text");p&&(e.preventDefault(),p.split(/[,\n\r]+/).map(s=>s.trim()).filter(Boolean).forEach(C),i.value="")}),f.getTags=()=>d.slice(),f.addTag=C,f.appendChild(m),k(),f}function J(n,w,g,x){let f=w?.style==="bootstrap",v=document.createElement("div");v.className="voc-form-field-selects";let m=document.createElement("div");if(m.className="voc-form-field-selects-header",f&&m.classList.add("mb-2"),n.label){let o=document.createElement("div");if(o.className="voc-form-field-selects-label",f&&o.classList.add("form-label"),o.textContent=n.label,n.required){let h=document.createElement("span");h.className="voc-form-required",h.textContent="*",o.appendChild(h)}m.appendChild(o)}if(n.description){let o=document.createElement("div");o.className="voc-form-field-selects-description",f&&o.classList.add("form-text"),o.textContent=n.description,m.appendChild(o)}v.appendChild(m);let i=document.createElement("div");i.className="voc-form-field-selects-search-wrapper";let d=document.createElement("input");d.type="search",d.placeholder="Search...",d.className="voc-form-field-selects-search",f&&d.classList.add("form-control","mb-2"),i.appendChild(d),v.appendChild(i);let u=n.options;if(!u||u.length===0)return v;let k=document.createElement("div");k.className="voc-form-field-selects-list",f&&k.classList.add("list-group");let T=document.createElement("div");T.className="voc-form-field-selects-selected",T.style.marginTop="12px";let C={},b=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(g)?e=g:g!=null?e=[g]:Array.isArray(n.default)&&(e=n.default),u.forEach((o,h)=>{let l=document.createElement("div");l.className="voc-form-field-selects-item",l.dataset.label=String(o.option_label??o.label??"").toLowerCase(),l.dataset.email=String(o.email||"").toLowerCase(),l.dataset.value=String(o.value||"").toLowerCase(),f&&l.classList.add("d-flex","align-items-center","gap-2");let r=document.createElement("input");if(r.type="checkbox",r.name=`${b}[]`,r.value=o.value??o.key,r.className="voc-form--checkbox",n.key&&(r.id=`voc-form-${n.key}-${h}`),r.style.position="absolute",r.style.width="1px",r.style.height="1px",r.style.margin="0",r.style.padding="0",r.style.clip="rect(0 0 0 0)",r.style.clipPath="inset(50%)",r.style.overflow="hidden",r.style.border="0",e&&Array.isArray(e)){let N=e.map(y=>String(y)),A=String(o.value??o.key);r.checked=N.includes(A)}let a=o.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',t=document.createElement("div");t.className="voc-form-fields-select-avatar",t.innerHTML=a;let c=document.createElement("div");c.className="voc-form-field-select-info",c.style.display="flex",c.style.flexDirection="column",c.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(o.option_label??o.label)||String(o.value);let L=document.createElement("small");L.className="voc-form-field-select-email",L.textContent=o.email||"",c.appendChild(E),c.appendChild(L),l.addEventListener("click",N=>{let A=N.target;A&&(A.closest("input")||A.closest("a")||A.closest("button"))||(r.checked=!r.checked,r.dispatchEvent(new Event("change",{bubbles:!0})))}),r.addEventListener("change",()=>{if(r.checked){l.classList.add("selected"),(C[h]||[]).forEach(y=>y.parentElement?.removeChild(y)),C[h]=[];let A=o;if(A&&Array.isArray(A.items))A.items.forEach(y=>{let F=x(y);F&&(T.appendChild(F),C[h].push(F))});else if(A&&(A.type||A.key)){let y=x(A);y&&(T.appendChild(y),C[h].push(y))}}else l.classList.remove("selected"),(C[h]||[]).forEach(A=>A.parentElement?.removeChild(A)),C[h]=[]}),r.checked&&(l.classList.add("selected"),setTimeout(()=>{let N=o;if(N&&Array.isArray(N.items))N.items.forEach(A=>{let y=x(A);y&&(T.appendChild(y),C[h]=C[h]||[],C[h].push(y))});else if(N&&(N.type||N.key)){let A=x(N);A&&(T.appendChild(A),C[h]=C[h]||[],C[h].push(A))}},0)),l.appendChild(r),l.appendChild(t),l.appendChild(c),k.appendChild(l)}),v.appendChild(k),v.appendChild(T),n.required){let o=k.querySelectorAll('input[type="checkbox"]'),h=()=>{let l=Array.from(o).some(r=>r.checked);return o.forEach(r=>{l?r.setCustomValidity(""):r.setCustomValidity("At least one option must be selected.")}),l};o.forEach(l=>{l.addEventListener("change",h)}),v._validateCheckboxGroup=h,h()}let p=Array.from(k.querySelectorAll(".voc-form-field-select-item")),s=()=>{let o=String(d.value||"").trim().toLowerCase();if(!o){p.forEach(h=>h.style.setProperty("display","flex","important"));return}p.forEach(h=>{let l=h.dataset.label||"",r=h.dataset.email||"",a=h.dataset.value||"",t=l.includes(o)||r.includes(o)||a.includes(o);h.style.setProperty("display",t?"flex":"none","important")})};return d.addEventListener("input",s),v}function I(n,w=!0){let g=new FormData(n);if(w)return te(g);let x={};return g.forEach((f,v)=>{let m=(f instanceof File,f);Object.prototype.hasOwnProperty.call(x,v)?Array.isArray(x[v])?x[v].push(m):x[v]=[x[v],m]:x[v]=m}),x}function te(n){let w=new FormData;for(let[g,x]of n.entries()){if(x instanceof File){w.append(g,x);continue}let f;try{f=JSON.parse(x)}catch{f=null}Array.isArray(f)?f.length===0?w.append(g,"[]"):f.every(v=>typeof v=="object"&&v!==null)?f.forEach((v,m)=>{for(let[i,d]of Object.entries(v))w.append(`${g}[${m}][${i}]`,d)}):w.append(g,x):w.append(g,x)}return w}async function Y(n,w,g){let x=w.url,f={"Content-Type":"application/json"};w?.api_token&&(f.Authorization=`Bearer ${w.api_token}`);let v=I(n);if(w?.additional_data)for(let[d,u]of Object.entries(w.additional_data))v.append(d,u);let m,i=v instanceof FormData;m={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...i?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:i?v:JSON.stringify(Object.fromEntries(v.entries()))};try{fetch(x,m).then(async d=>{let u=d.headers.get("content-type");if(!d.ok)try{let T=(await d.json())?.message;throw new Error(T??"Their was an error submitting the form. Check your form and try again.")}catch(k){throw new Error(k.message)}return u&&u.includes("application/json")?d.json():d.text()}).then(d=>{g&&g(d,null)}).catch(d=>{g&&g(null,d)})}catch(d){g&&g(null,d)}}function K(n,w,g){let x=[];if(typeof n=="string"?x=Array.from(document.querySelectorAll(n)):x=[n],x.length===0)return null;function f(){let i=g?.style==="bootstrap",d=document.createElement("form");d.classList.add("voc-form"),i&&d.classList.add("needs-validation"),d.id=w.id;let u=document.createElement("h2");u.className="voc-form-title",i&&u.classList.add("mb-3"),u.textContent=w.form_name,d.appendChild(u);function k(e,p){p&&(p.min_length!==void 0&&(e.minLength=p.min_length),p.max_length!==void 0&&(e.maxLength=p.max_length),p.regex&&(e instanceof HTMLInputElement?e.pattern=p.regex:e.dataset.pattern=p.regex))}function T(e){if(!e.key&&!e.label)return null;let p=w.default_values||{},s=e.name||e.key,o=s?p[s]:void 0,h=document.createElement("div");if(h.className="voc-form-group",i&&h.classList.add("mb-3"),e.label&&e.type!=="users"){let a=document.createElement("label");if(a.classList.add("voc-form-label"),i&&a.classList.add("form-label"),e.key?e.type==="radio"?a.htmlFor="":a.htmlFor=`voc-form-${e.key}`:a.htmlFor="",a.textContent=e.label,e.required){let t=document.createElement("span");t.className="voc-form-required",t.textContent="*",a.appendChild(t)}h.appendChild(a)}let l=new Set(["users","timezone"]);if(e.description&&!l.has(String(e.type||""))){let a=document.createElement("div");a.className="voc-form-description",i&&a.classList.add("form-text","text-muted","mb-2"),a.textContent=e.description,h.appendChild(a)}let r=null;switch(e.type){case"tags":{r=U(e,g||{},o);break}case"checkbox":{let a=document.createElement("div");if(a.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(a.style.width=e.width),e.options){if(e.options.forEach((t,c)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),i&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let L=document.createElement("input");L.type="checkbox",L.classList.add("voc-form-checkbox"),i&&L.classList.add("form-check-input"),L.name=`${e.name||e.key||""}[]`,L.value=t.value,e.key&&(L.id=`voc-form-${e.key}-${c}`),Array.isArray(o)?o.includes(t.value)&&(L.checked=!0):o!==void 0?o===t.value&&(L.checked=!0):e.default===t.value&&(L.checked=!0),E.appendChild(L),E.appendChild(document.createTextNode(t.label)),a.appendChild(E)}),e.required){let t=a.querySelectorAll('input[type="checkbox"]'),c=()=>{let E=Array.from(t).some(L=>L.checked);return t.forEach(L=>{E?L.setCustomValidity(""):L.setCustomValidity("At least one option must be selected.")}),E};t.forEach(E=>{E.addEventListener("change",c)}),a._validateCheckboxGroup=c,c()}}else{let t=document.createElement("label");t.classList.add("voc-form-checkbox-label"),i&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),i&&c.classList.add("form-check-input"),e.required&&(c.required=!0),o!==void 0?c.checked=!!o:e.default&&(c.checked=!!e.default),t.appendChild(c),t.appendChild(document.createTextNode(e.label||"")),a.appendChild(t)}r=a;break}case"boolean":{let a=document.createElement("div");a.className="voc-form-boolean-wrapper",i&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let t=document.createElement("input");if(t.type="checkbox",t.classList.add("voc-form-boolean"),i&&t.classList.add("form-check-input"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.required&&(t.required=!0),o!==void 0?t.checked=!!o:e.default!==void 0&&(t.checked=e.default===!0||e.default==="true"),a.appendChild(t),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),i&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let L=document.createElement("span");L.className="voc-form-required",L.textContent="*",E.appendChild(L)}a.appendChild(E)}let c=h.querySelector(".voc-form-label");c&&c.remove(),r=a;break}case"textarea":{let a=document.createElement("textarea");a.classList.add("voc-form-textarea"),i&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.placeholder&&(a.placeholder=e.placeholder),o!=null?a.value=String(o):e.default!==void 0&&e.default!==null&&(a.value=String(e.default));let t=e.default||o||"";if(t){let c=(t.match(/\n/g)||[]).length,E=80,L=t.split(`
|
|
2
|
-
`).reduce((
|
|
1
|
+
function z(r,A,b){let x=A?.style==="bootstrap",y=document.createElement("div");y.className="voc-form-avatar-wrapper",x&&y.classList.add("d-flex","align-items-center","gap-3");let f=document.createElement("img");f.className="voc-form-avatar-preview",f.alt=r.label||"avatar",x&&(f.classList.add("img-thumbnail","rounded-circle"),f.style.width=f.style.height="64px",f.style.objectFit="cover");let u=b!=null?String(b):r.default!==void 0&&r.default!==null?String(r.default):"";u?f.src=u:(f.src="",f.style.display="none");let m=document.createElement("input");m.type="file",m.accept=r.accept||"image/*",m.className="voc-form-avatar-input",x&&m.classList.add("form-control"),(r.key||r.name)&&(m.name=r.name||r.key,r.key&&(m.id=`voc-form-${r.key}`));let l=document.createElement("input");if(l.type="hidden",(r.key||r.name)&&(l.name=(r.name||r.key)+"_url"),l.value=u||"",m.addEventListener("change",d=>{let v=d.target;if(v.files&&v.files.length>0){let w=v.files[0],k=new FileReader;k.onload=()=>{f.src=String(k.result),f.style.display="",l.value=""},k.readAsDataURL(w)}}),x){let d=document.createElement("div");d.style.flex="1",d.appendChild(m),d.appendChild(l),y.appendChild(f),y.appendChild(d)}else y.appendChild(f),y.appendChild(m),y.appendChild(l);return y}function j(r,A,b){let x=A?.style==="bootstrap",y=document.createElement("div");if(y.className="voc-form-audio-select",!r.options||r.options.length===0)return y;let f=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,u;return Array.isArray(b)?u=b[0]:b!==void 0?u=b:r.default!==void 0&&(u=r.default),r.options.forEach((m,l)=>{let d=document.createElement("div");d.className="voc-form-audio-item",x&&d.classList.add("form-check");let v=document.createElement("input");v.type="radio",v.name=f,v.value=m.value,v.className="voc-form-audio-radio",r.key&&(v.id=`voc-form-${r.key}-${l}`),r.required&&l===0&&(v.required=!0),v.style.position="absolute",v.style.width="1px",v.style.height="1px",v.style.margin="0",v.style.padding="0",v.style.clip="rect(0 0 0 0)",v.style.clipPath="inset(50%)",v.style.overflow="hidden",v.style.border="0",u!==void 0&&(Array.isArray(u)?v.checked=u.includes(m.value):v.checked=String(u)===String(m.value));let w=()=>{v.checked?d.classList.add("selected"):d.classList.remove("selected")};v.addEventListener("change",()=>{y.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),w()}),v.checked&&d.classList.add("selected");let k=document.createElement("label");k.className="voc-form-audio-label",x&&k.classList.add("form-check-label"),k.htmlFor=v.id||"",k.textContent=m.label||m.value,k.tabIndex=0;let g=document.createElement("div");g.className="voc-form-audio-control";let e=null;if(m.audio_link){let s=document.createElement("button");s.type="button",s.className="voc-form-audio-play",x&&s.classList.add("btn","btn-sm","btn-outline-secondary"),s.setAttribute("aria-label",`Play ${m.label||m.value}`);let n="http://www.w3.org/2000/svg",t=document.createElementNS(n,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width","16"),t.setAttribute("height","16"),t.setAttribute("aria-hidden","true");let a=document.createElementNS(n,"path");a.setAttribute("d","M8 5v14l11-7z"),a.setAttribute("fill","currentColor"),t.appendChild(a),s.appendChild(t),e=document.createElement("audio"),e.src=m.audio_link,e.preload="none",e.style.display="none";let o=h=>{for(;h.firstChild;)h.removeChild(h.firstChild)},E=()=>{let h="http://www.w3.org/2000/svg",F=document.createElementNS(h,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(h,"path");return M.setAttribute("d","M8 5v14l11-7z"),M.setAttribute("fill","currentColor"),F.appendChild(M),F},L=()=>{let h="http://www.w3.org/2000/svg",F=document.createElementNS(h,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let M=document.createElementNS(h,"rect");return M.setAttribute("x","6"),M.setAttribute("y","6"),M.setAttribute("width","12"),M.setAttribute("height","12"),M.setAttribute("fill","currentColor"),F.appendChild(M),F};o(s),s.appendChild(E());let N=h=>{o(s),h?(s.appendChild(L()),s.setAttribute("aria-label",`Stop ${m.label||m.value}`)):(s.appendChild(E()),s.setAttribute("aria-label",`Play ${m.label||m.value}`))};s.addEventListener("click",()=>{try{if(!e)return;let h=y.querySelectorAll("audio");if(!e.paused&&!e.ended){e.pause(),e.currentTime=0;return}h.forEach(M=>{try{M.pause(),M.currentTime=0}catch{}}),y.querySelectorAll(".voc-form-audio-item").forEach(M=>M.classList.remove("is-playing")),e.play()}catch(h){console.warn("audio play failed",h)}}),e.addEventListener("playing",()=>{d.classList.add("is-playing"),N(!0)});let T=()=>{d.classList.remove("is-playing"),N(!1)};e.addEventListener("pause",T),e.addEventListener("ended",T),g.appendChild(s),g.appendChild(e)}let C=document.createElement("div");C.className="voc-form-item-detail",C.style.display="flex",C.style.flexDirection="column",C.style.gap="4px";let c=document.createElement("div");c.className="voc-form-item-top",c.style.display="flex",c.style.alignItems="center",c.style.gap="8px",c.appendChild(v),c.appendChild(k);let i=document.createElement("div");i.className="voc-form-item-description";let p=m.description||m.hint_text||"";p&&(i.textContent=p),C.appendChild(c),C.appendChild(i),g.appendChild(C),d.appendChild(g),c.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(v.checked=!0,v.dispatchEvent(new Event("change",{bubbles:!0})))}),d.addEventListener("click",s=>{let n=s.target;n&&n.closest(".voc-form-audio-play")||(v.checked=!0,v.dispatchEvent(new Event("change",{bubbles:!0})))}),y.appendChild(d)}),y}function W(r,A,b){let x=document.createElement("div");x.className="voc-form-table-wrapper";let y=A?.style==="bootstrap",f=document.createElement("input");f.type="hidden",f.name=r.name||r.key,r.key&&(f.id=`voc-form-${r.key}`),x.appendChild(f);let u=document.createElement("table");u.className="voc-form-table",y&&u.classList.add("table","table-bordered");let m=document.createElement("thead"),l=document.createElement("tr"),d=document.createElement("th");d.className="voc-form-table-drag-col",d.textContent="",l.appendChild(d),(r.fields||[]).forEach(n=>{let t=document.createElement("th");t.textContent=n.label||n.key,l.appendChild(t)});let v=document.createElement("th");v.textContent="Actions",l.appendChild(v),m.appendChild(l),u.appendChild(m);let w=document.createElement("tbody");u.appendChild(w),x.appendChild(u);let k=document.createElement("button");k.type="button",k.className="voc-form-table-add",y&&k.classList.add("btn","btn-secondary"),k.textContent="+Add";let g=document.createElement("tfoot"),e=document.createElement("tr"),C=document.createElement("td");C.colSpan=(r.fields?r.fields.length:0)+1,C.appendChild(k),e.appendChild(C),g.appendChild(e),u.appendChild(g),x.appendChild(u);let c=[];function i(){f.value=JSON.stringify(c)}function p(n){let t=[];return r.fields.forEach(a=>{let o=n[a.key];if(a.type==="checkbox"){let E=Array.isArray(o)?o:o?[o]:[];a.required&&E.length===0&&t.push(`${a.label||a.key} is required`);return}a.required&&(o==null||String(o).trim()==="")&&t.push(`${a.label||a.key} is required`),a.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||t.push(`${a.label||a.key} must be a valid email`)),a.type==="number"&&o&&isNaN(Number(o))&&t.push(`${a.label||a.key} must be a number`),a.validation&&a.validation.regex&&o&&(new RegExp(a.validation.regex).test(String(o))||t.push(`${a.label||a.key} invalid format`))}),t}function s(){w.innerHTML="";let n=(t,a)=>{a.draggable=!0,a.addEventListener("mousedown",()=>{a.style.cursor="grabbing"}),a.addEventListener("mouseup",()=>{a.style.cursor="grab"}),a.addEventListener("dragstart",o=>{let E=Number(t.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(E)),t.classList.add("dragging");try{o.dataTransfer?.setDragImage(a,10,10)}catch{}}),a.addEventListener("dragend",()=>{t.classList.remove("dragging"),a.style.cursor="grab"}),t.addEventListener("dragover",o=>{o.preventDefault();let E=o.currentTarget,L=E.getBoundingClientRect(),N=L.top+L.height/2,T=(o.clientY||o.y)>N;E.classList.remove("drag-over-top","drag-over-bottom"),T?(E.classList.add("drag-over-bottom"),E.dataset.dropPosition="after"):(E.classList.add("drag-over-top"),E.dataset.dropPosition="before")}),t.addEventListener("dragleave",o=>{let E=o.currentTarget;E.classList.remove("drag-over-top","drag-over-bottom"),delete E.dataset.dropPosition}),t.addEventListener("drop",o=>{o.preventDefault();let E=o.dataTransfer.getData("text/plain"),L=Number(o.currentTarget.dataset.rowIndex),N=Number(E),T=o.currentTarget.dataset.dropPosition||"before";if(isNaN(N)||isNaN(L))return;let[h]=c.splice(N,1),F=L;N<L&&(F=L-1);let M=T==="after"?F+1:F;c.splice(M,0,h),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,s(),i()})};c.forEach((t,a)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(a),o.classList.add("voc-form-table-row");let E=document.createElement("td");E.className="voc-form-table-drag-handle";let L=document.createElement("span");L.className="voc-form-drag-handle-icon",L.textContent="\u2630",L.style.cursor="grab",E.appendChild(L),o.appendChild(E),n(o,L),r.fields.forEach(h=>{let F=document.createElement("td"),M,$=(h.type||"text").toLowerCase();if($==="select"){let S=document.createElement("select");if(S.className="voc-form-table-cell",y&&S.classList.add("form-control"),h.placeholder){let H=document.createElement("option");H.value="",H.textContent=h.placeholder,H.disabled=!0,(t[h.key]===void 0||t[h.key]===null||t[h.key]==="")&&(H.selected=!0),S.appendChild(H)}(h.options||[]).forEach(H=>{let B=document.createElement("option");B.value=H.value,B.textContent=H.label,S.appendChild(B)}),S.value=t[h.key]!==void 0&&t[h.key]!==null?String(t[h.key]):"",h.required&&(S.required=!0),S.addEventListener("change",H=>{c[a][h.key]=H.target.value,i()}),M=S}else if($==="checkbox"){let S=document.createElement("div");S.className="voc-form-table-checkboxes",y&&S.classList.add("form-check");let D=h.options||[];Array.isArray(c[a][h.key])||(c[a][h.key]=c[a][h.key]?[c[a][h.key]]:[]),D.forEach(H=>{let B=`voc-form-${r.key}-${h.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",y&&R.classList.add("form-check");let q=document.createElement("input");q.type="checkbox",q.className="voc-form-table-cell",y&&q.classList.add("form-check-input"),q.id=B,q.value=H.value,q.checked=Array.isArray(c[a][h.key])&&c[a][h.key].includes(H.value),q.addEventListener("change",O=>{let Q=O.target.checked;Array.isArray(c[a][h.key])||(c[a][h.key]=[]),Q?c[a][h.key].includes(H.value)||c[a][h.key].push(H.value):c[a][h.key]=c[a][h.key].filter(X=>X!==H.value),i()});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-checkbox-label",y&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else if($==="radio"){let S=document.createElement("div");S.className="voc-form-table-radios",y&&S.classList.add("form-check");let D=h.options||[];c[a][h.key]===void 0&&(c[a][h.key]=""),D.forEach(H=>{let B=`voc-form-${r.key}-${h.key}-${a}-${H.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",y&&R.classList.add("form-check");let q=document.createElement("input");q.type="radio",q.className="voc-form-table-cell",y&&q.classList.add("form-check-input"),q.id=B,q.name=`voc-form-${r.key}-${h.key}-${a}`,q.value=H.value,q.checked=c[a][h.key]===H.value,q.addEventListener("change",O=>{O.target.checked&&(c[a][h.key]=O.target.value,i())});let _=document.createElement("label");_.htmlFor=B,_.className="voc-form-table-radio-label",y&&_.classList.add("form-check-label"),_.textContent=H.label,R.appendChild(q),R.appendChild(_),S.appendChild(R)}),M=S}else{let S=document.createElement("input");$==="number"?S.type="number":$==="email"?S.type="email":$==="tel"?S.type="tel":$==="url"?S.type="url":$==="date"?S.type="date":S.type="text",S.value=t[h.key]!==void 0&&t[h.key]!==null?String(t[h.key]):"",h.placeholder&&(S.placeholder=h.placeholder),h.required&&(S.required=!0),S.className="voc-form-table-cell",y&&S.classList.add("form-control"),S.addEventListener("input",D=>{c[a][h.key]=D.target.value,i()}),M=S}F.appendChild(M),o.appendChild(F)});let N=document.createElement("td"),T=document.createElement("button");T.type="button",T.className="voc-form-table-remove",y&&T.classList.add("btn","btn-danger"),T.textContent="Remove",T.addEventListener("click",()=>{c.splice(a,1),s(),i()}),N.appendChild(T),o.appendChild(N),w.appendChild(o)})}return k.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&c.length>=r.validation.max_rows)return;let n={};r.fields.forEach(t=>n[t.key]=""),c.push(n),s(),i()}),Array.isArray(b)&&b.length?c=b.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(c=r.default.map(n=>({...n}))),s(),i(),x.validate=function(){let n=[];return c.forEach((t,a)=>{let o=p(t);o.length&&n.push(`Row ${a+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&c.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&c.length>r.validation.max_rows&&n.push(`No more than ${r.validation.max_rows} rows allowed`),r.validation?.unique_fields&&r.validation.unique_fields.length&&r.validation.unique_fields.forEach(t=>{let a=new Set;c.forEach((o,E)=>{let L=o[t];L!=null&&(a.has(L)&&n.push(`Field ${t} must be unique (duplicate at row ${E+1})`),a.add(L))})}),n},x}async function Z(r){let b=new TextEncoder().encode(r),x=await crypto.subtle.digest("SHA-256",b);return Array.from(new Uint8Array(x)).map(f=>f.toString(16).padStart(2,"0")).join("")}async function ee(r){let A=String(r||"").trim().toLowerCase();return A?`https://gravatar.com/avatar/${await Z(A)}?d=mp`:""}function G(r,A,b){let x=A?.style==="bootstrap",y=document.createElement("div");y.className="voc-form-users";let f=document.createElement("div");if(f.className="voc-form-users-header",x&&f.classList.add("mb-2"),r.label){let g=document.createElement("div");if(g.className="voc-form-users-label",x&&g.classList.add("form-label"),g.textContent=r.label,r.required){let e=document.createElement("span");e.className="voc-form-required",e.textContent="*",g.appendChild(e)}f.appendChild(g)}if(r.description){let g=document.createElement("div");g.className="voc-form-users-description",x&&g.classList.add("form-text"),g.textContent=r.description,f.appendChild(g)}y.appendChild(f);let u=document.createElement("div");u.className="voc-form-users-search-wrapper";let m=document.createElement("input");if(m.type="search",m.placeholder="Search users...",m.className="voc-form-users-search",x&&m.classList.add("form-control","mb-2"),u.appendChild(m),y.appendChild(u),!r.options||r.options.length===0)return y;let l=document.createElement("div");l.className="voc-form-users-list",x&&l.classList.add("list-group");let d=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,v=[];if(Array.isArray(b)?v=b:b!=null?v=[b]:Array.isArray(r.default)&&(v=r.default),r.options.forEach((g,e)=>{let C=document.createElement("div");C.className="voc-form-user-item",C.dataset.label=String(g.label||"").toLowerCase(),C.dataset.email=String(g.email||"").toLowerCase(),C.dataset.value=String(g.value||"").toLowerCase(),x&&C.classList.add("d-flex","align-items-center","gap-2");let c=document.createElement("input");if(c.type="checkbox",c.name=`${d}[]`,c.value=g.value,c.className="voc-form-user-checkbox",r.key&&(c.id=`voc-form-${r.key}-${e}`),c.style.position="absolute",c.style.width="1px",c.style.height="1px",c.style.margin="0",c.style.padding="0",c.style.clip="rect(0 0 0 0)",c.style.clipPath="inset(50%)",c.style.overflow="hidden",c.style.border="0",v&&Array.isArray(v)){let t=v.map(a=>String(a));c.checked=t.includes(String(g.value))}let i=document.createElement("img");i.className="voc-form-user-avatar",i.alt=g.label||String(g.value||"user"),i.style.width=i.style.height="40px",i.style.objectFit="cover",i.style.borderRadius="50%",i.src="",g.email&&ee(g.email).then(t=>{t&&(i.src=t)}).catch(()=>{});let p=document.createElement("div");p.className="voc-form-user-info",p.style.display="flex",p.style.flexDirection="column",p.style.gap="2px";let s=document.createElement("div");s.className="voc-form-user-label",s.textContent=g.label||String(g.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=g.email||"",p.appendChild(s),p.appendChild(n),C.addEventListener("click",t=>{let a=t.target;a&&(a.closest("input")||a.closest("a")||a.closest("button"))||(c.checked=!c.checked,c.dispatchEvent(new Event("change",{bubbles:!0})))}),c.addEventListener("change",()=>{c.checked?C.classList.add("selected"):C.classList.remove("selected")}),c.checked&&C.classList.add("selected"),C.appendChild(c),C.appendChild(i),C.appendChild(p),l.appendChild(C)}),y.appendChild(l),r.required){let g=l.querySelectorAll('input[type="checkbox"]'),e=()=>{let C=Array.from(g).some(c=>c.checked);return g.forEach(c=>{C?c.setCustomValidity(""):c.setCustomValidity("At least one option must be selected.")}),C};g.forEach(C=>{C.addEventListener("change",e)}),y._validateCheckboxGroup=e,e()}let w=Array.from(l.querySelectorAll(".voc-form-user-item")),k=()=>{let g=String(m.value||"").trim().toLowerCase();if(!g){w.forEach(e=>e.style.setProperty("display","flex","important"));return}w.forEach(e=>{let C=e.dataset.label||"",c=e.dataset.email||"",i=e.dataset.value||"",p=C.includes(g)||c.includes(g)||i.includes(g);e.style.setProperty("display",p?"flex":"none","important")})};return m.addEventListener("input",k),y}function V(r,A,b){let x=A?.style==="bootstrap",y=document.createElement("div");y.className="voc-form-timezone";let f=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,u=document.createElement("input");u.type="text",u.name=f,r.key&&(u.id=`voc-form-${r.key}`),u.className="voc-form-timezone-input",x&&u.classList.add("form-control"),r.placeholder&&(u.placeholder=r.placeholder||""),r.required&&(u.required=!0),r.width&&(u.style.width=r.width);try{u.autocomplete="off"}catch{}try{u.autocorrect="off"}catch{}try{u.autocapitalize="off"}catch{}try{u.spellcheck=!1}catch{}u.setAttribute("data-lpignore","true"),b!=null?u.value=String(b):r.default!==void 0&&r.default!==null&&(u.value=String(r.default));let m=document.createElement("div");m.className="voc-form-timezone-control",m.style.position="relative",m.style.display="inline-block",m.style.width=r.width||"100%";let l=document.createElement("button");l.type="button",l.className="voc-form-timezone-toggle",l.setAttribute("aria-haspopup","listbox"),l.setAttribute("aria-expanded","false"),l.style.position="absolute",l.style.right="4px",l.style.top="50%",l.style.transform="translateY(-50%)",l.style.height="28px",l.style.width="28px",l.style.padding="0",l.style.border="none",l.style.background="transparent",l.style.cursor="pointer",l.innerHTML="\u25BC";let d=document.createElement("ul");d.className="voc-form-timezone-list",d.setAttribute("role","listbox"),d.style.position="absolute",d.style.left="0",d.style.right="0",d.style.zIndex="1000",d.style.maxHeight="200px",d.style.overflow="auto",d.style.margin="4px 0 0 0",d.style.padding="0",d.style.listStyle="none",d.style.background="white",d.style.border="1px solid rgba(0,0,0,0.15)",d.style.display="none",d.tabIndex=-1,u.style.paddingRight="36px";let w=["UTC","ETC","AEST","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Toronto","America/Vancouver","Europe/London","Europe/Paris","Europe/Berlin","Europe/Rome","Europe/Madrid","Europe/Amsterdam","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Asia/Kolkata","Asia/Dubai","Australia/Lindeman","Australia/Brisbane","Australia/Sydney","Australia/Melbourne","Australia/Hobart","Australia/Currie","Australia/Broken_Hill","Australia/Lord_Howe","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Australia/ACT","ACT","Pacific/Auckland","America/Sao_Paulo","America/Mexico_City","Africa/Cairo","Africa/Johannesburg"];function k(s){d.innerHTML="",s.forEach((n,t)=>{let a=document.createElement("li");a.className="voc-form-timezone-item",a.setAttribute("role","option"),a.dataset.value=n,a.style.padding="6px 8px",a.style.cursor="pointer",a.textContent=n,a.addEventListener("mousedown",o=>{o.preventDefault(),u.value=n,c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}),d.appendChild(a)})}k(w);let g=-1;function e(){Array.from(d.children).forEach((n,t)=>{t===g?(n.style.background="rgba(0,123,255,0.1)",n.setAttribute("aria-selected","true")):(n.style.background="",n.removeAttribute("aria-selected"))})}function C(){d.style.display="block",l.setAttribute("aria-expanded","true")}function c(){d.style.display="none",l.setAttribute("aria-expanded","false"),g=-1,e()}function i(){d.style.display==="none"?C():c()}u.addEventListener("input",()=>{let s=(u.value||"").trim().toLowerCase(),n=s?w.filter(t=>t.toLowerCase().includes(s)):w;k(n),C()}),l.addEventListener("click",s=>{s.preventDefault(),d.style.display==="none"?(k(w),C(),u.focus()):c()}),u.addEventListener("keydown",s=>{let n=Array.from(d.children);if(s.key==="ArrowDown"){if(s.preventDefault(),n.length===0)return;g=Math.min(g+1,n.length-1),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="ArrowUp"){if(s.preventDefault(),n.length===0)return;g=Math.max(g-1,0),e(),n[g].scrollIntoView({block:"nearest"})}else if(s.key==="Enter"){if(d.style.display!=="none"&&g>=0){s.preventDefault();let t=n[g];u.value=t.dataset.value||t.textContent||"",c(),u.dispatchEvent(new Event("change",{bubbles:!0}))}}else s.key==="Escape"&&c()}),document.addEventListener("click",s=>{m.contains(s.target)||c()});let p={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(u.addEventListener("blur",()=>{let s=(u.value||"").trim();if(!s)return;let n=Object.keys(p).find(t=>t.toLowerCase()===s.toLowerCase());n&&(u.value=p[n])}),r.description){let s=document.createElement("div");s.className="voc-form-timezone-description",x&&s.classList.add("form-text"),s.textContent=r.description,y.appendChild(s)}return m.appendChild(u),m.appendChild(l),m.appendChild(d),y.appendChild(m),y}var te={email:r=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r),number:r=>r.trim()!==""&&!isNaN(Number(r)),url:r=>{try{return new URL(r),!0}catch{return!1}},text:()=>!0};function U(r,A,b){let x=A?.style==="bootstrap",y=r.tag_types,f=y&&y.length>0&&!y.includes("text"),u=document.createElement("div");u.className="voc-form-tags";let m=r.name||r.key||`tags_${Math.random().toString(36).substr(2,6)}`,l=document.createElement("div");l.className="voc-form-tags-container",l.style.display="flex",l.style.flexWrap="wrap",l.style.gap="6px",l.style.alignItems="center",l.style.padding="6px",l.style.border="1px solid rgba(0,0,0,0.12)",l.style.borderRadius="4px",l.style.transition="border-color 0.2s";let d=document.createElement("input");d.type="text",d.className="voc-form-tags-input",d.style.border="none",d.style.flex="1 0 120px",d.style.minWidth="80px",d.style.outline="none",d.placeholder=r.placeholder||"",x&&d.classList.add("form-control"),l.appendChild(d);let v=[],w=document.createElement("input");w.type="text",w.style.position="absolute",w.style.left="-9999px",w.style.width="1px",w.style.height="1px",w.tabIndex=-1,r.required&&(w.required=!0),u.appendChild(w);let k=null;function g(){l.style.borderColor="#dc3545",d.style.color="#dc3545",k&&clearTimeout(k),k=setTimeout(()=>{l.style.borderColor="rgba(0,0,0,0.12)",d.style.color="",k=null},600)}function e(s){return f?y.some(n=>{let t=te[n];return t?t(s):!0}):!0}function C(){Array.from(u.querySelectorAll("input.voc-form-tag-hidden")).forEach(n=>n.parentElement?.removeChild(n)),v.forEach(n=>{let t=document.createElement("input");t.type="hidden",t.name=`${m}[]`,t.className="voc-form-tag-hidden",t.value=n,r.key&&(t.id=`voc-form-${r.key}`),u.appendChild(t)}),r.required&&(v.length===0?(w.value="",w.setCustomValidity("Please enter at least one tag")):(w.value="1",w.setCustomValidity("")))}function c(s){let n=document.createElement("span");n.className="voc-form-tag",n.style.display="inline-flex",n.style.alignItems="center",n.style.padding="4px 8px",n.style.background="rgba(0,0,0,0.05)",n.style.borderRadius="16px";let t=document.createElement("span");t.textContent=s,t.style.marginRight="8px",n.appendChild(t);let a=document.createElement("button");return a.type="button",a.textContent="\xD7",a.style.border="none",a.style.background="transparent",a.style.cursor="pointer",a.addEventListener("click",()=>{let o=v.indexOf(s);o>=0&&(v.splice(o,1),l.removeChild(n),C())}),n.appendChild(a),n}function i(s,n=!1){let t=s.trim();if(!t||v.includes(t))return;if(!n&&!e(t)){g();return}v.push(t);let a=c(t);l.insertBefore(a,d),C()}let p=b!=null?String(b):r.default||"";return p&&p.split(",").map(s=>s.trim()).filter(Boolean).forEach(s=>i(s,!0)),d.addEventListener("keydown",s=>{if(s.key==="Enter"||s.key===","){s.preventDefault();let n=d.value;i(n),v[v.length-1]===n.trim()&&(d.value="")}else if(s.key==="Backspace"&&d.value===""&&v.pop()){let t=Array.from(l.querySelectorAll(".voc-form-tag")),a=t[t.length-1];a&&l.removeChild(a),C()}}),d.addEventListener("paste",s=>{let n=s.clipboardData?.getData("text");n&&(s.preventDefault(),n.split(/[,\n\r]+/).map(t=>t.trim()).filter(Boolean).forEach(t=>i(t)),d.value="")}),u.getTags=()=>v.slice(),u.addTag=i,u.appendChild(l),C(),u}function J(r,A,b,x){let y=A?.style==="bootstrap",f=document.createElement("div");f.className="voc-form-field-selects";let u=document.createElement("div");if(u.className="voc-form-field-selects-header",y&&u.classList.add("mb-2"),r.label){let i=document.createElement("div");if(i.className="voc-form-field-selects-label",y&&i.classList.add("form-label"),i.textContent=r.label,r.required){let p=document.createElement("span");p.className="voc-form-required",p.textContent="*",i.appendChild(p)}u.appendChild(i)}if(r.description){let i=document.createElement("div");i.className="voc-form-field-selects-description",y&&i.classList.add("form-text"),i.textContent=r.description,u.appendChild(i)}f.appendChild(u);let m=document.createElement("div");m.className="voc-form-field-selects-search-wrapper";let l=document.createElement("input");l.type="search",l.placeholder="Search...",l.className="voc-form-field-selects-search",y&&l.classList.add("form-control","mb-2"),m.appendChild(l),f.appendChild(m);let d=r.options;if(!d||d.length===0)return f;let v=document.createElement("div");v.className="voc-form-field-selects-list",y&&v.classList.add("list-group");let w=document.createElement("div");w.className="voc-form-field-selects-selected",w.style.marginTop="12px";let k={},g=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,e=[];if(Array.isArray(b)?e=b:b!=null?e=[b]:Array.isArray(r.default)&&(e=r.default),d.forEach((i,p)=>{let s=document.createElement("div");s.className="voc-form-field-selects-item",s.dataset.label=String(i.option_label??i.label??"").toLowerCase(),s.dataset.email=String(i.email||"").toLowerCase(),s.dataset.value=String(i.value||"").toLowerCase(),y&&s.classList.add("d-flex","align-items-center","gap-2");let n=document.createElement("input");if(n.type="checkbox",n.name=`${g}[]`,n.value=i.value??i.key,n.className="voc-form--checkbox",r.key&&(n.id=`voc-form-${r.key}-${p}`),n.style.position="absolute",n.style.width="1px",n.style.height="1px",n.style.margin="0",n.style.padding="0",n.style.clip="rect(0 0 0 0)",n.style.clipPath="inset(50%)",n.style.overflow="hidden",n.style.border="0",e&&Array.isArray(e)){let N=e.map(h=>String(h)),T=String(i.value??i.key);n.checked=N.includes(T)}let t=i.icon||'<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M14 11c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1h9c.55 0 1 .45 1 1M3 7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1m7 8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1m8.01-2.13l.71-.71a.996.996 0 0 1 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71l-5.16 5.16c-.09.09-.14.21-.14.35v1.41c0 .28.22.5.5.5h1.41c.13 0 .26-.05.35-.15l5.16-5.16z"/></svg>',a=document.createElement("div");a.className="voc-form-fields-select-avatar",a.innerHTML=t;let o=document.createElement("div");o.className="voc-form-field-select-info",o.style.display="flex",o.style.flexDirection="column",o.style.gap="2px";let E=document.createElement("div");E.className="voc-form-field-select-label",E.textContent=(i.option_label??i.label)||String(i.value);let L=document.createElement("small");L.className="voc-form-field-select-email",L.textContent=i.email||"",o.appendChild(E),o.appendChild(L),s.addEventListener("click",N=>{let T=N.target;T&&(T.closest("input")||T.closest("a")||T.closest("button"))||(n.checked=!n.checked,n.dispatchEvent(new Event("change",{bubbles:!0})))}),n.addEventListener("change",()=>{if(n.checked){s.classList.add("selected"),(k[p]||[]).forEach(h=>h.parentElement?.removeChild(h)),k[p]=[];let T=i;if(T&&Array.isArray(T.items))T.items.forEach(h=>{let F=x(h);F&&(w.appendChild(F),k[p].push(F))});else if(T&&(T.type||T.key)){let h=x(T);h&&(w.appendChild(h),k[p].push(h))}}else s.classList.remove("selected"),(k[p]||[]).forEach(T=>T.parentElement?.removeChild(T)),k[p]=[]}),n.checked&&(s.classList.add("selected"),setTimeout(()=>{let N=i;if(N&&Array.isArray(N.items))N.items.forEach(T=>{let h=x(T);h&&(w.appendChild(h),k[p]=k[p]||[],k[p].push(h))});else if(N&&(N.type||N.key)){let T=x(N);T&&(w.appendChild(T),k[p]=k[p]||[],k[p].push(T))}},0)),s.appendChild(n),s.appendChild(a),s.appendChild(o),v.appendChild(s)}),f.appendChild(v),f.appendChild(w),r.required){let i=v.querySelectorAll('input[type="checkbox"]'),p=()=>{let s=Array.from(i).some(n=>n.checked);return i.forEach(n=>{s?n.setCustomValidity(""):n.setCustomValidity("At least one option must be selected.")}),s};i.forEach(s=>{s.addEventListener("change",p)}),f._validateCheckboxGroup=p,p()}let C=Array.from(v.querySelectorAll(".voc-form-field-select-item")),c=()=>{let i=String(l.value||"").trim().toLowerCase();if(!i){C.forEach(p=>p.style.setProperty("display","flex","important"));return}C.forEach(p=>{let s=p.dataset.label||"",n=p.dataset.email||"",t=p.dataset.value||"",a=s.includes(i)||n.includes(i)||t.includes(i);p.style.setProperty("display",a?"flex":"none","important")})};return l.addEventListener("input",c),f}function I(r,A=!0){let b=new FormData(r);if(A)return ae(b);let x={};return b.forEach((y,f)=>{let u=(y instanceof File,y);Object.prototype.hasOwnProperty.call(x,f)?Array.isArray(x[f])?x[f].push(u):x[f]=[x[f],u]:x[f]=u}),x}function ae(r){let A=new FormData;for(let[b,x]of r.entries()){if(x instanceof File){A.append(b,x);continue}let y;try{y=JSON.parse(x)}catch{y=null}Array.isArray(y)?y.length===0?A.append(b,"[]"):y.every(f=>typeof f=="object"&&f!==null)?y.forEach((f,u)=>{for(let[m,l]of Object.entries(f))A.append(`${b}[${u}][${m}]`,l)}):A.append(b,x):A.append(b,x)}return A}async function Y(r,A,b){let x=A.url,y={"Content-Type":"application/json"};A?.api_token&&(y.Authorization=`Bearer ${A.api_token}`);let f=I(r);if(A?.additional_data)for(let[l,d]of Object.entries(A.additional_data))f.append(l,d);let u,m=f instanceof FormData;u={method:"POST",headers:{Authorization:`Bearer ${A.api_token}`,...m?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:m?f:JSON.stringify(Object.fromEntries(f.entries()))};try{fetch(x,u).then(async l=>{let d=l.headers.get("content-type");if(!l.ok)try{let w=(await l.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(v){throw new Error(v.message)}return d&&d.includes("application/json")?l.json():l.text()}).then(l=>{b&&b(l,null)}).catch(l=>{b&&b(null,l)})}catch(l){b&&b(null,l)}}function K(r,A,b){let x=[];if(typeof r=="string"?x=Array.from(document.querySelectorAll(r)):x=[r],x.length===0)return null;function y(){let m=b?.style==="bootstrap",l=document.createElement("form");l.classList.add("voc-form"),m&&l.classList.add("needs-validation"),l.id=A.id;let d=document.createElement("h2");d.className="voc-form-title",m&&d.classList.add("mb-3"),d.textContent=A.form_name,l.appendChild(d);function v(e,C){C&&(C.min_length!==void 0&&(e.minLength=C.min_length),C.max_length!==void 0&&(e.maxLength=C.max_length),C.regex&&(e instanceof HTMLInputElement?e.pattern=C.regex:e.dataset.pattern=C.regex))}function w(e){if(!e.key&&!e.label)return null;let C=A.default_values||{},c=e.name||e.key,i=c?C[c]:void 0,p=document.createElement("div");if(p.className="voc-form-group",m&&p.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),m&&t.classList.add("form-label"),e.key?e.type==="radio"?t.htmlFor="":t.htmlFor=`voc-form-${e.key}`:t.htmlFor="",t.textContent=e.label,e.required){let a=document.createElement("span");a.className="voc-form-required",a.textContent="*",t.appendChild(a)}p.appendChild(t)}let s=new Set(["users","timezone"]);if(e.description&&!s.has(String(e.type||""))){let t=document.createElement("div");t.className="voc-form-description",m&&t.classList.add("form-text","text-muted","mb-2"),t.textContent=e.description,p.appendChild(t)}let n=null;switch(e.type){case"tags":{n=U(e,b||{},i);break}case"checkbox":{let t=document.createElement("div");if(t.className="voc-form-checkbox-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options){if(e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-checkbox-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let L=document.createElement("input");L.type="checkbox",L.classList.add("voc-form-checkbox"),m&&L.classList.add("form-check-input"),L.name=`${e.name||e.key||""}[]`,L.value=a.value,e.key&&(L.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(L.checked=!0):i!==void 0?i===a.value&&(L.checked=!0):e.default===a.value&&(L.checked=!0),E.appendChild(L),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),e.required){let a=t.querySelectorAll('input[type="checkbox"]'),o=()=>{let E=Array.from(a).some(L=>L.checked);return a.forEach(L=>{E?L.setCustomValidity(""):L.setCustomValidity("At least one option must be selected.")}),E};a.forEach(E=>{E.addEventListener("change",o)}),t._validateCheckboxGroup=o,o()}}else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),m&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),(e.key||e.name)&&(o.name=e.name||e.key,e.key&&(o.id=`voc-form-${e.key}`)),m&&o.classList.add("form-check-input"),e.required&&(o.required=!0),i!==void 0?o.checked=!!i:e.default&&(o.checked=!!e.default),a.appendChild(o),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}n=t;break}case"boolean":{let t=document.createElement("div");t.className="voc-form-boolean-wrapper",m&&t.classList.add("form-check"),e.width&&(t.style.width=e.width);let a=document.createElement("input");if(a.type="checkbox",a.classList.add("voc-form-boolean"),m&&a.classList.add("form-check-input"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.required&&(a.required=!0),i!==void 0?a.checked=!!i:e.default!==void 0&&(a.checked=e.default===!0||e.default==="true"),t.appendChild(a),e.label){let E=document.createElement("label");if(E.classList.add("voc-form-boolean-label"),m&&E.classList.add("form-check-label"),e.key&&(E.htmlFor=`voc-form-${e.key}`),E.textContent=e.label,e.required){let L=document.createElement("span");L.className="voc-form-required",L.textContent="*",E.appendChild(L)}t.appendChild(E)}let o=p.querySelector(".voc-form-label");o&&o.remove(),n=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let a=e.default||i||"";if(a){let o=(a.match(/\n/g)||[]).length,E=80,L=a.split(`
|
|
2
|
+
`).reduce((h,F)=>Math.max(h,F.length),0),N=Math.ceil(L/E)||1,T=Math.max(2,o+N);t.rows=T,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),v(t,e.validation),n=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),m&&t.classList.add("form-select"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let o=document.createElement("option");o.value=a.value,o.textContent=a.label,Array.isArray(i)?i.includes(a.value)&&(o.selected=!0):i!==void 0?i===a.value&&(o.selected=!0):e.default===a.value&&(o.selected=!0),t.appendChild(o)}),e.width&&(t.style.width=e.width),n=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,o)=>{let E=document.createElement("label");E.classList.add("voc-form-radio-label"),m&&E.classList.add("form-check"),E.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(E.style.width=e.width);let L=document.createElement("input");L.type="radio",L.classList.add("voc-form-radio"),m&&L.classList.add("form-check-input"),L.name=e.name||e.key||"",L.value=a.value,e.key&&(L.id=`voc-form-${e.key}-${o}`),Array.isArray(i)?i.includes(a.value)&&(L.checked=!0):i!==void 0?i===a.value&&(L.checked=!0):e.default===a.value&&(L.checked=!0),E.appendChild(L),E.appendChild(document.createTextNode(a.label)),t.appendChild(E)}),n=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),m&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),n=t;break}case"avatar":{n=z(e,b||{},i);break}case"table":{n=W(e,b||{},i);break}case"users":{n=G(e,b||{},i);break}case"timezone":{n=V(e,b||{},i);break}case"audio_select":{n=j(e,b||{},i);break}case"field-select":{n=J(e,b||{},i,w);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),m&&t.classList.add("form-control"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder&&(t.placeholder=e.placeholder),i!=null?t.value=String(i):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),v(t,e.validation),n=t;break}}if(n&&p.appendChild(n),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.innerHTML=e.hint_text,p.appendChild(t)}return p}function k(e,C,c=0){if(e.type==="group"&&"items"in e){let p=e;if(m){let s=document.createElement("div");s.className="card voc-form-group-card mb-3",c>0&&s.classList.add("voc-form-nested-group");let n=p.label||p.header?.title,t=p.description||p.header?.description;if(n||t){let o=document.createElement("div");if(o.className="card-header voc-form-group-head",n){let E=document.createElement("h5");E.className="mb-0 voc-form-group-label",E.textContent=n,o.appendChild(E)}if(t){let E=document.createElement("p");E.className="mb-0 voc-form-group-description",E.textContent=t,o.appendChild(E)}s.appendChild(o)}let a=document.createElement("div");a.className="card-body voc-form-group-body",p.items.forEach(o=>{k(o,a,c+1)}),s.appendChild(a),C.appendChild(s)}else{let s=document.createElement("div");s.className="voc-form-group voc-form-group-wrapper",c>0&&s.classList.add("voc-form-nested-group");let n=p.label||p.header?.title,t=p.description||p.header?.description;if(n||t){let a=document.createElement("div");if(a.className="voc-form-group-head",n){let o=document.createElement("h3");o.className="voc-form-group-label",o.textContent=n,a.appendChild(o)}if(t){let o=document.createElement("p");o.className="voc-form-group-description",o.textContent=t,a.appendChild(o)}s.appendChild(a)}p.items.forEach(a=>{k(a,s,c+1)}),C.appendChild(s)}return}if(e.type==="row"&&"items"in e){let p=e,s=document.createElement("div");if(s.className="voc-form-group voc-form-row",m&&s.classList.add("mb-3"),p.label){let t=document.createElement(c>0?"h6":"h3");t.className="voc-form-row-label",t.textContent=p.label,s.appendChild(t)}if(p.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=p.description,s.appendChild(t)}let n=document.createElement("div");n.className="voc-form-row-items "+(p.direction||"horizontal"),p.items.forEach(t=>{let a=w(t);a&&n.appendChild(a)}),s.appendChild(n),C.appendChild(s);return}let i=w(e);i&&C.appendChild(i)}A.fields.forEach(e=>{k(e,l,0)});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",m&&g.classList.add("btn","btn-primary"),l.appendChild(g),l}let f=y();x[0].appendChild(f);let u=A?.submit_config??b?.submit_config??null;return u&&f.addEventListener("submit",m=>{m.preventDefault();let l=Array.from(f.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),d=[];if(l.forEach(k=>{k&&typeof k._validateCheckboxGroup=="function"&&(k._validateCheckboxGroup()||k.querySelector('input[type="checkbox"]')&&d.push("Please select at least one option"))}),!f.checkValidity()){f.reportValidity(),b?.onSubmitResult&&b.onSubmitResult(null,new Error("Form validation failed"));return}let v=Array.from(f.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),w=[];if(v.forEach(k=>{if(k&&typeof k.validate=="function"){let g=k.validate();g&&g.length&&w.push(...g)}}),w.length){b?.onSubmitResult&&b.onSubmitResult(null,new Error(w.join("; ")));let k=v[0];k&&k.scrollIntoView({behavior:"smooth",block:"center"});return}if(b?.onSubmit){let k=I(f);b.onSubmit(k)}Y(f,u,(k,g)=>{b?.onSubmitResult&&b.onSubmitResult(k,g)})}),{element:f,validate:()=>{let m=[];return f.querySelectorAll(":invalid").forEach(d=>{let v=d.validationMessage;m.push({element:d,message:v})}),m},getValues:()=>I(f),onSubmit:m=>{f.addEventListener("submit",l=>{l.preventDefault();let d=I(f);m(d,l)})}}}var P={renderForm:K};var Ae=P,Te={FormsLib:P};export{Ae as FormsLib,Te as default};
|