voc-lib-js 1.0.59 → 1.0.60
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.global.js +2 -2
- package/dist/main.js +2 -2
- package/dist/main.mjs +2 -2
- package/package.json +1 -1
package/dist/main.global.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var VocLibJs=(()=>{var P=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(n,E)=>{for(var m in E)P(n,m,{get:E[m],enumerable:!0})},ae=(n,E,m,y)=>{if(E&&typeof E=="object"||typeof E=="function")for(let l of Z(E))!ee.call(n,l)&&l!==m&&P(n,l,{get:()=>E[l],enumerable:!(y=X(E,l))||y.enumerable});return n};var ne=n=>ae(P({},"__esModule",{value:!0}),n);var le={};te(le,{FormsLib:()=>ie,default:()=>ce});function j(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-avatar-wrapper",y&&l.classList.add("d-flex","align-items-center","gap-3");let u=document.createElement("img");u.className="voc-form-avatar-preview",u.alt=n.label||"avatar",y&&(u.classList.add("img-thumbnail","rounded-circle"),u.style.width=u.style.height="64px",u.style.objectFit="cover");let v=m!=null?String(m):n.default!==void 0&&n.default!==null?String(n.default):"";v?u.src=v:(u.src="",u.style.display="none");let c=document.createElement("input");c.type="file",c.accept=n.accept||"image/*",c.className="voc-form-avatar-input",y&&c.classList.add("form-control"),(n.key||n.name)&&(c.name=n.name||n.key,n.key&&(c.id=`voc-form-${n.key}`));let h=document.createElement("input");if(h.type="hidden",(n.key||n.name)&&(h.name=(n.name||n.key)+"_url"),h.value=v||"",c.addEventListener("change",L=>{let f=L.target;if(f.files&&f.files.length>0){let w=f.files[0],g=new FileReader;g.onload=()=>{u.src=String(g.result),u.style.display="",h.value=""},g.readAsDataURL(w)}}),y){let L=document.createElement("div");L.style.flex="1",L.appendChild(c),L.appendChild(h),l.appendChild(u),l.appendChild(L)}else l.appendChild(u),l.appendChild(c),l.appendChild(h);return l}function W(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");if(l.className="voc-form-audio-select",!n.options||n.options.length===0)return l;let u=n.name||n.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,v;return Array.isArray(m)?v=m[0]:m!==void 0?v=m:n.default!==void 0&&(v=n.default),n.options.forEach((c,h)=>{let L=document.createElement("div");L.className="voc-form-audio-item",y&&L.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=u,f.value=c.value,f.className="voc-form-audio-radio",n.key&&(f.id=`voc-form-${n.key}-${h}`),n.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",v!==void 0&&(Array.isArray(v)?f.checked=v.includes(c.value):f.checked=String(v)===String(c.value));let w=()=>{f.checked?L.classList.add("selected"):L.classList.remove("selected")};f.addEventListener("change",()=>{l.querySelectorAll(".voc-form-audio-item").forEach(r=>r.classList.remove("selected")),w()}),f.checked&&L.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",y&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let d=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",y&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let r="http://www.w3.org/2000/svg",i=document.createElementNS(r,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let s=document.createElementNS(r,"path");s.setAttribute("d","M8 5v14l11-7z"),s.setAttribute("fill","currentColor"),i.appendChild(s),t.appendChild(i),d=document.createElement("audio"),d.src=c.audio_link,d.preload="none",d.style.display="none";let o=p=>{for(;p.firstChild;)p.removeChild(p.firstChild)},A=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=p=>{o(t),p?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!d)return;let p=l.querySelectorAll("audio");if(!d.paused&&!d.ended){d.pause(),d.currentTime=0;return}p.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),l.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),d.play()}catch(p){console.warn("audio play failed",p)}}),d.addEventListener("playing",()=>{L.classList.add("is-playing"),_(!0)});let H=()=>{L.classList.remove("is-playing"),_(!1)};d.addEventListener("pause",H),d.addEventListener("ended",H),e.appendChild(t),e.appendChild(d)}let b=document.createElement("div");b.className="voc-form-item-detail",b.style.display="flex",b.style.flexDirection="column",b.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let C=document.createElement("div");C.className="voc-form-item-description";let k=c.description||c.hint_text||"";k&&(C.textContent=k),b.appendChild(a),b.appendChild(C),e.appendChild(b),L.appendChild(e),a.addEventListener("click",t=>{let r=t.target;r&&r.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),L.addEventListener("click",t=>{let r=t.target;r&&r.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),l.appendChild(L)}),l}function G(n,E,m){let y=document.createElement("div");y.className="voc-form-table-wrapper";let l=E?.style==="bootstrap",u=document.createElement("input");u.type="hidden",u.name=n.name||n.key,n.key&&(u.id=`voc-form-${n.key}`),y.appendChild(u);let v=document.createElement("table");v.className="voc-form-table",l&&v.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),L=document.createElement("th");L.className="voc-form-table-drag-col",L.textContent="",h.appendChild(L),(n.fields||[]).forEach(r=>{let i=document.createElement("th");i.textContent=r.label||r.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),v.appendChild(c);let w=document.createElement("tbody");v.appendChild(w),y.appendChild(v);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",l&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),d=document.createElement("tr"),b=document.createElement("td");b.colSpan=(n.fields?n.fields.length:0)+1,b.appendChild(g),d.appendChild(b),e.appendChild(d),v.appendChild(e),y.appendChild(v);let a=[];function C(){u.value=JSON.stringify(a)}function k(r){let i=[];return n.fields.forEach(s=>{let o=r[s.key];if(s.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];s.required&&A.length===0&&i.push(`${s.label||s.key} is required`);return}s.required&&(o==null||String(o).trim()==="")&&i.push(`${s.label||s.key} is required`),s.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${s.label||s.key} must be a valid email`)),s.type==="number"&&o&&isNaN(Number(o))&&i.push(`${s.label||s.key} must be a number`),s.validation&&s.validation.regex&&o&&(new RegExp(s.validation.regex).test(String(o))||i.push(`${s.label||s.key} invalid format`))}),i}function t(){w.innerHTML="";let r=(i,s)=>{s.draggable=!0,s.addEventListener("mousedown",()=>{s.style.cursor="grabbing"}),s.addEventListener("mouseup",()=>{s.style.cursor="grab"}),s.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(s,10,10)}catch{}}),s.addEventListener("dragend",()=>{i.classList.remove("dragging"),s.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[p]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,p),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),C()})};a.forEach((i,s)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(s),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),r(o,N),n.fields.forEach(p=>{let F=document.createElement("td"),T,q=(p.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",l&&x.classList.add("form-control"),p.placeholder){let S=document.createElement("option");S.value="",S.textContent=p.placeholder,S.disabled=!0,(i[p.key]===void 0||i[p.key]===null||i[p.key]==="")&&(S.selected=!0),x.appendChild(S)}(p.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.required&&(x.required=!0),x.addEventListener("change",S=>{a[s][p.key]=S.target.value,C()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",l&&x.classList.add("form-check");let D=p.options||[];Array.isArray(a[s][p.key])||(a[s][p.key]=a[s][p.key]?[a[s][p.key]]:[]),D.forEach(S=>{let B=`voc-form-${n.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[s][p.key])&&a[s][p.key].includes(S.value),M.addEventListener("change",O=>{let Y=O.target.checked;Array.isArray(a[s][p.key])||(a[s][p.key]=[]),Y?a[s][p.key].includes(S.value)||a[s][p.key].push(S.value):a[s][p.key]=a[s][p.key].filter(Q=>Q!==S.value),C()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",l&&x.classList.add("form-check");let D=p.options||[];a[s][p.key]===void 0&&(a[s][p.key]=""),D.forEach(S=>{let B=`voc-form-${n.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${n.key}-${p.key}-${s}`,M.value=S.value,M.checked=a[s][p.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[s][p.key]=O.target.value,C())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.placeholder&&(x.placeholder=p.placeholder),p.required&&(x.required=!0),x.className="voc-form-table-cell",l&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[s][p.key]=D.target.value,C()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",l&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(s,1),t(),C()}),_.appendChild(H),o.appendChild(_),w.appendChild(o)})}return g.addEventListener("click",()=>{if(n.validation?.max_rows!==void 0&&a.length>=n.validation.max_rows)return;let r={};n.fields.forEach(i=>r[i.key]=""),a.push(r),t(),C()}),Array.isArray(m)&&m.length?a=m.map(r=>({...r})):n.default&&Array.isArray(n.default)&&(a=n.default.map(r=>({...r}))),t(),C(),y.validate=function(){let r=[];return a.forEach((i,s)=>{let o=k(i);o.length&&r.push(`Row ${s+1}: ${o.join("; ")}`)}),n.validation?.min_rows!==void 0&&a.length<n.validation.min_rows&&r.push(`At least ${n.validation.min_rows} rows required`),n.validation?.max_rows!==void 0&&a.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(i=>{let s=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(s.has(N)&&r.push(`Field ${i} must be unique (duplicate at row ${A+1})`),s.add(N))})}),r},y}async function re(n){let m=new TextEncoder().encode(n),y=await crypto.subtle.digest("SHA-256",m);return Array.from(new Uint8Array(y)).map(u=>u.toString(16).padStart(2,"0")).join("")}async function se(n){let E=String(n||"").trim().toLowerCase();return E?`https://gravatar.com/avatar/${await re(E)}?d=mp`:""}function U(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-users";let u=document.createElement("div");if(u.className="voc-form-users-header",y&&u.classList.add("mb-2"),n.label){let e=document.createElement("div");if(e.className="voc-form-users-label",y&&e.classList.add("form-label"),e.textContent=n.label,n.required){let d=document.createElement("span");d.className="voc-form-required",d.textContent="*",e.appendChild(d)}u.appendChild(e)}if(n.description){let e=document.createElement("div");e.className="voc-form-users-description",y&&e.classList.add("form-text"),e.textContent=n.description,u.appendChild(e)}l.appendChild(u);let v=document.createElement("div");v.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",y&&c.classList.add("form-control","mb-2"),v.appendChild(c),l.appendChild(v),!n.options||n.options.length===0)return l;let h=document.createElement("div");h.className="voc-form-users-list",y&&h.classList.add("list-group");let L=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(m)?f=m:m!=null?f=[m]:Array.isArray(n.default)&&(f=n.default),n.options.forEach((e,d)=>{let b=document.createElement("div");b.className="voc-form-user-item",b.dataset.label=String(e.label||"").toLowerCase(),b.dataset.email=String(e.email||"").toLowerCase(),b.dataset.value=String(e.value||"").toLowerCase(),y&&b.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${L}[]`,a.value=e.value,a.className="voc-form-user-checkbox",n.key&&(a.id=`voc-form-${n.key}-${d}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(s=>String(s));a.checked=i.includes(String(e.value))}let C=document.createElement("img");C.className="voc-form-user-avatar",C.alt=e.label||String(e.value||"user"),C.style.width=C.style.height="40px",C.style.objectFit="cover",C.style.borderRadius="50%",C.src="",e.email&&se(e.email).then(i=>{i&&(C.src=i)}).catch(()=>{});let k=document.createElement("div");k.className="voc-form-user-info",k.style.display="flex",k.style.flexDirection="column",k.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let r=document.createElement("small");r.className="voc-form-user-email",r.textContent=e.email||"",k.appendChild(t),k.appendChild(r),b.addEventListener("click",i=>{let s=i.target;s&&(s.closest("input")||s.closest("a")||s.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?b.classList.add("selected"):b.classList.remove("selected")}),a.checked&&b.classList.add("selected"),b.appendChild(a),b.appendChild(C),b.appendChild(k),h.appendChild(b)}),l.appendChild(h),n.required){let e=h.querySelectorAll('input[type="checkbox"]'),d=()=>{let b=Array.from(e).some(a=>a.checked);return e.forEach(a=>{b?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),b};e.forEach(b=>{b.addEventListener("change",d)}),l._validateCheckboxGroup=d,d()}let w=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){w.forEach(d=>d.style.setProperty("display","flex","important"));return}w.forEach(d=>{let b=d.dataset.label||"",a=d.dataset.email||"",C=d.dataset.value||"",k=b.includes(e)||a.includes(e)||C.includes(e);d.style.setProperty("display",k?"flex":"none","important")})};return c.addEventListener("input",g),l}function V(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-timezone";let u=n.name||n.key||`timezone_${Math.random().toString(36).substr(2,6)}`,v=document.createElement("input");v.type="text",v.name=u,n.key&&(v.id=`voc-form-${n.key}`),v.className="voc-form-timezone-input",y&&v.classList.add("form-control"),n.placeholder&&(v.placeholder=n.placeholder||""),n.required&&(v.required=!0),n.width&&(v.style.width=n.width),m!=null?v.value=String(m):n.default!==void 0&&n.default!==null&&(v.value=String(n.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${n.key||Math.random().toString(36).substr(2,6)}`,v.setAttribute("list",c.id);let h=["UTC","Etc/UTC","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"];(n.options&&n.options.length?n.options.map(w=>String(w.value||w.label)):h).forEach(w=>{let g=document.createElement("option");g.value=w,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(v.addEventListener("blur",()=>{let w=(v.value||"").trim();if(!w)return;let g=Object.keys(f).find(e=>e.toLowerCase()===w.toLowerCase());g&&(v.value=f[g])}),n.description){let w=document.createElement("div");w.className="voc-form-timezone-description",y&&w.classList.add("form-text"),w.textContent=n.description,l.appendChild(w)}return l.appendChild(v),l.appendChild(c),l}function I(n,E=!0){let m=new FormData(n);if(E)return oe(m);let y={};return m.forEach((l,u)=>{let v=(l instanceof File,l);Object.prototype.hasOwnProperty.call(y,u)?Array.isArray(y[u])?y[u].push(v):y[u]=[y[u],v]:y[u]=v}),y}function oe(n){let E=new FormData;for(let[m,y]of n.entries()){if(y instanceof File){E.append(m,y);continue}let l;try{l=JSON.parse(y)}catch{l=null}Array.isArray(l)?l.length===0?E.append(m,"[]"):l.every(u=>typeof u=="object"&&u!==null)?l.forEach((u,v)=>{for(let[c,h]of Object.entries(u))E.append(`${m}[${v}][${c}]`,h)}):E.append(m,y):E.append(m,y)}return E}async function J(n,E,m){let y=E.url,l={"Content-Type":"application/json"};E?.api_token&&(l.Authorization=`Bearer ${E.api_token}`);let u=I(n);if(E?.additional_data)for(let[h,L]of Object.entries(E.additional_data))u.append(h,L);let v,c=u instanceof FormData;v={method:"POST",headers:{Authorization:`Bearer ${E.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?u:JSON.stringify(Object.fromEntries(u.entries()))};try{fetch(y,v).then(async h=>{let L=h.headers.get("content-type");if(!h.ok)try{let w=(await h.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return L&&L.includes("application/json")?h.json():h.text()}).then(h=>{m&&m(h,null)}).catch(h=>{m&&m(null,h)})}catch(h){m&&m(null,h)}}function K(n,E,m){let y=[];if(typeof n=="string"?y=Array.from(document.querySelectorAll(n)):y=[n],y.length===0)return null;function l(){let c=m?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=E.id;let L=document.createElement("h2");L.className="voc-form-title",c&&L.classList.add("mb-3"),L.textContent=E.form_name,h.appendChild(L);function f(e,d){d&&(d.min_length!==void 0&&(e.minLength=d.min_length),d.max_length!==void 0&&(e.maxLength=d.max_length),d.regex&&(e instanceof HTMLInputElement?e.pattern=d.regex:e.dataset.pattern=d.regex))}function w(e){if(!e.key&&!e.label)return null;let d=E.default_values||{},b=e.name||e.key,a=b?d[b]:void 0,C=document.createElement("div");if(C.className="voc-form-group",c&&C.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 r=document.createElement("span");r.className="voc-form-required",r.textContent="*",t.appendChild(r)}C.appendChild(t)}let k=null;switch(e.type){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((r,i)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=r.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(r.value)&&(o.checked=!0):a!==void 0?a===r.value&&(o.checked=!0):e.default===r.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(r.label)),t.appendChild(s)}),e.required){let r=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let s=Array.from(r).some(o=>o.checked);return r.forEach(o=>{s?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),s};r.forEach(s=>{s.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let r=document.createElement("label");r.classList.add("voc-form-checkbox-label"),c&&r.classList.add("form-check"),e.width&&(r.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),r.appendChild(i),r.appendChild(document.createTextNode(e.label||"")),t.appendChild(r)}k=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let r=e.default||a||"";if(r){let i=(r.match(/\n/g)||[]).length,s=80,o=r.split(`
|
|
2
|
-
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/s)||1,N=Math.max(2,i+A);t.rows=N,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),c&&t.classList.add("form-select"),c&&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
|
|
1
|
+
"use strict";var VocLibJs=(()=>{var P=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(r,E)=>{for(var m in E)P(r,m,{get:E[m],enumerable:!0})},ae=(r,E,m,y)=>{if(E&&typeof E=="object"||typeof E=="function")for(let l of Z(E))!ee.call(r,l)&&l!==m&&P(r,l,{get:()=>E[l],enumerable:!(y=X(E,l))||y.enumerable});return r};var ne=r=>ae(P({},"__esModule",{value:!0}),r);var le={};te(le,{FormsLib:()=>ie,default:()=>ce});function j(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-avatar-wrapper",y&&l.classList.add("d-flex","align-items-center","gap-3");let u=document.createElement("img");u.className="voc-form-avatar-preview",u.alt=r.label||"avatar",y&&(u.classList.add("img-thumbnail","rounded-circle"),u.style.width=u.style.height="64px",u.style.objectFit="cover");let v=m!=null?String(m):r.default!==void 0&&r.default!==null?String(r.default):"";v?u.src=v:(u.src="",u.style.display="none");let c=document.createElement("input");c.type="file",c.accept=r.accept||"image/*",c.className="voc-form-avatar-input",y&&c.classList.add("form-control"),(r.key||r.name)&&(c.name=r.name||r.key,r.key&&(c.id=`voc-form-${r.key}`));let h=document.createElement("input");if(h.type="hidden",(r.key||r.name)&&(h.name=(r.name||r.key)+"_url"),h.value=v||"",c.addEventListener("change",L=>{let f=L.target;if(f.files&&f.files.length>0){let w=f.files[0],g=new FileReader;g.onload=()=>{u.src=String(g.result),u.style.display="",h.value=""},g.readAsDataURL(w)}}),y){let L=document.createElement("div");L.style.flex="1",L.appendChild(c),L.appendChild(h),l.appendChild(u),l.appendChild(L)}else l.appendChild(u),l.appendChild(c),l.appendChild(h);return l}function W(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");if(l.className="voc-form-audio-select",!r.options||r.options.length===0)return l;let u=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,v;return Array.isArray(m)?v=m[0]:m!==void 0?v=m:r.default!==void 0&&(v=r.default),r.options.forEach((c,h)=>{let L=document.createElement("div");L.className="voc-form-audio-item",y&&L.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=u,f.value=c.value,f.className="voc-form-audio-radio",r.key&&(f.id=`voc-form-${r.key}-${h}`),r.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",v!==void 0&&(Array.isArray(v)?f.checked=v.includes(c.value):f.checked=String(v)===String(c.value));let w=()=>{f.checked?L.classList.add("selected"):L.classList.remove("selected")};f.addEventListener("change",()=>{l.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),w()}),f.checked&&L.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",y&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let d=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",y&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let s=document.createElementNS(n,"path");s.setAttribute("d","M8 5v14l11-7z"),s.setAttribute("fill","currentColor"),i.appendChild(s),t.appendChild(i),d=document.createElement("audio"),d.src=c.audio_link,d.preload="none",d.style.display="none";let o=p=>{for(;p.firstChild;)p.removeChild(p.firstChild)},A=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=p=>{o(t),p?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!d)return;let p=l.querySelectorAll("audio");if(!d.paused&&!d.ended){d.pause(),d.currentTime=0;return}p.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),l.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),d.play()}catch(p){console.warn("audio play failed",p)}}),d.addEventListener("playing",()=>{L.classList.add("is-playing"),_(!0)});let H=()=>{L.classList.remove("is-playing"),_(!1)};d.addEventListener("pause",H),d.addEventListener("ended",H),e.appendChild(t),e.appendChild(d)}let b=document.createElement("div");b.className="voc-form-item-detail",b.style.display="flex",b.style.flexDirection="column",b.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let C=document.createElement("div");C.className="voc-form-item-description";let k=c.description||c.hint_text||"";k&&(C.textContent=k),b.appendChild(a),b.appendChild(C),e.appendChild(b),L.appendChild(e),a.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),L.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),l.appendChild(L)}),l}function G(r,E,m){let y=document.createElement("div");y.className="voc-form-table-wrapper";let l=E?.style==="bootstrap",u=document.createElement("input");u.type="hidden",u.name=r.name||r.key,r.key&&(u.id=`voc-form-${r.key}`),y.appendChild(u);let v=document.createElement("table");v.className="voc-form-table",l&&v.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),L=document.createElement("th");L.className="voc-form-table-drag-col",L.textContent="",h.appendChild(L),(r.fields||[]).forEach(n=>{let i=document.createElement("th");i.textContent=n.label||n.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),v.appendChild(c);let w=document.createElement("tbody");v.appendChild(w),y.appendChild(v);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",l&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),d=document.createElement("tr"),b=document.createElement("td");b.colSpan=(r.fields?r.fields.length:0)+1,b.appendChild(g),d.appendChild(b),e.appendChild(d),v.appendChild(e),y.appendChild(v);let a=[];function C(){u.value=JSON.stringify(a)}function k(n){let i=[];return r.fields.forEach(s=>{let o=n[s.key];if(s.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];s.required&&A.length===0&&i.push(`${s.label||s.key} is required`);return}s.required&&(o==null||String(o).trim()==="")&&i.push(`${s.label||s.key} is required`),s.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${s.label||s.key} must be a valid email`)),s.type==="number"&&o&&isNaN(Number(o))&&i.push(`${s.label||s.key} must be a number`),s.validation&&s.validation.regex&&o&&(new RegExp(s.validation.regex).test(String(o))||i.push(`${s.label||s.key} invalid format`))}),i}function t(){w.innerHTML="";let n=(i,s)=>{s.draggable=!0,s.addEventListener("mousedown",()=>{s.style.cursor="grabbing"}),s.addEventListener("mouseup",()=>{s.style.cursor="grab"}),s.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(s,10,10)}catch{}}),s.addEventListener("dragend",()=>{i.classList.remove("dragging"),s.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[p]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,p),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),C()})};a.forEach((i,s)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(s),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),n(o,N),r.fields.forEach(p=>{let F=document.createElement("td"),T,q=(p.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",l&&x.classList.add("form-control"),p.placeholder){let S=document.createElement("option");S.value="",S.textContent=p.placeholder,S.disabled=!0,(i[p.key]===void 0||i[p.key]===null||i[p.key]==="")&&(S.selected=!0),x.appendChild(S)}(p.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.required&&(x.required=!0),x.addEventListener("change",S=>{a[s][p.key]=S.target.value,C()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",l&&x.classList.add("form-check");let D=p.options||[];Array.isArray(a[s][p.key])||(a[s][p.key]=a[s][p.key]?[a[s][p.key]]:[]),D.forEach(S=>{let B=`voc-form-${r.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[s][p.key])&&a[s][p.key].includes(S.value),M.addEventListener("change",O=>{let Y=O.target.checked;Array.isArray(a[s][p.key])||(a[s][p.key]=[]),Y?a[s][p.key].includes(S.value)||a[s][p.key].push(S.value):a[s][p.key]=a[s][p.key].filter(Q=>Q!==S.value),C()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",l&&x.classList.add("form-check");let D=p.options||[];a[s][p.key]===void 0&&(a[s][p.key]=""),D.forEach(S=>{let B=`voc-form-${r.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${r.key}-${p.key}-${s}`,M.value=S.value,M.checked=a[s][p.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[s][p.key]=O.target.value,C())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.placeholder&&(x.placeholder=p.placeholder),p.required&&(x.required=!0),x.className="voc-form-table-cell",l&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[s][p.key]=D.target.value,C()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",l&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(s,1),t(),C()}),_.appendChild(H),o.appendChild(_),w.appendChild(o)})}return g.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&a.length>=r.validation.max_rows)return;let n={};r.fields.forEach(i=>n[i.key]=""),a.push(n),t(),C()}),Array.isArray(m)&&m.length?a=m.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(a=r.default.map(n=>({...n}))),t(),C(),y.validate=function(){let n=[];return a.forEach((i,s)=>{let o=k(i);o.length&&n.push(`Row ${s+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&a.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&a.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(i=>{let s=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(s.has(N)&&n.push(`Field ${i} must be unique (duplicate at row ${A+1})`),s.add(N))})}),n},y}async function re(r){let m=new TextEncoder().encode(r),y=await crypto.subtle.digest("SHA-256",m);return Array.from(new Uint8Array(y)).map(u=>u.toString(16).padStart(2,"0")).join("")}async function se(r){let E=String(r||"").trim().toLowerCase();return E?`https://gravatar.com/avatar/${await re(E)}?d=mp`:""}function U(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-users";let u=document.createElement("div");if(u.className="voc-form-users-header",y&&u.classList.add("mb-2"),r.label){let e=document.createElement("div");if(e.className="voc-form-users-label",y&&e.classList.add("form-label"),e.textContent=r.label,r.required){let d=document.createElement("span");d.className="voc-form-required",d.textContent="*",e.appendChild(d)}u.appendChild(e)}if(r.description){let e=document.createElement("div");e.className="voc-form-users-description",y&&e.classList.add("form-text"),e.textContent=r.description,u.appendChild(e)}l.appendChild(u);let v=document.createElement("div");v.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",y&&c.classList.add("form-control","mb-2"),v.appendChild(c),l.appendChild(v),!r.options||r.options.length===0)return l;let h=document.createElement("div");h.className="voc-form-users-list",y&&h.classList.add("list-group");let L=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(m)?f=m:m!=null?f=[m]:Array.isArray(r.default)&&(f=r.default),r.options.forEach((e,d)=>{let b=document.createElement("div");b.className="voc-form-user-item",b.dataset.label=String(e.label||"").toLowerCase(),b.dataset.email=String(e.email||"").toLowerCase(),b.dataset.value=String(e.value||"").toLowerCase(),y&&b.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${L}[]`,a.value=e.value,a.className="voc-form-user-checkbox",r.key&&(a.id=`voc-form-${r.key}-${d}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(s=>String(s));a.checked=i.includes(String(e.value))}let C=document.createElement("img");C.className="voc-form-user-avatar",C.alt=e.label||String(e.value||"user"),C.style.width=C.style.height="40px",C.style.objectFit="cover",C.style.borderRadius="50%",C.src="",e.email&&se(e.email).then(i=>{i&&(C.src=i)}).catch(()=>{});let k=document.createElement("div");k.className="voc-form-user-info",k.style.display="flex",k.style.flexDirection="column",k.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=e.email||"",k.appendChild(t),k.appendChild(n),b.addEventListener("click",i=>{let s=i.target;s&&(s.closest("input")||s.closest("a")||s.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?b.classList.add("selected"):b.classList.remove("selected")}),a.checked&&b.classList.add("selected"),b.appendChild(a),b.appendChild(C),b.appendChild(k),h.appendChild(b)}),l.appendChild(h),r.required){let e=h.querySelectorAll('input[type="checkbox"]'),d=()=>{let b=Array.from(e).some(a=>a.checked);return e.forEach(a=>{b?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),b};e.forEach(b=>{b.addEventListener("change",d)}),l._validateCheckboxGroup=d,d()}let w=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){w.forEach(d=>d.style.setProperty("display","flex","important"));return}w.forEach(d=>{let b=d.dataset.label||"",a=d.dataset.email||"",C=d.dataset.value||"",k=b.includes(e)||a.includes(e)||C.includes(e);d.style.setProperty("display",k?"flex":"none","important")})};return c.addEventListener("input",g),l}function V(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-timezone";let u=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,v=document.createElement("input");v.type="text",v.name=u,r.key&&(v.id=`voc-form-${r.key}`),v.className="voc-form-timezone-input",y&&v.classList.add("form-control"),r.placeholder&&(v.placeholder=r.placeholder||""),r.required&&(v.required=!0),r.width&&(v.style.width=r.width),m!=null?v.value=String(m):r.default!==void 0&&r.default!==null&&(v.value=String(r.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${r.key||Math.random().toString(36).substr(2,6)}`,v.setAttribute("list",c.id),["UTC","Etc/UTC","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"].forEach(w=>{let g=document.createElement("option");g.value=w,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(v.addEventListener("blur",()=>{let w=(v.value||"").trim();if(!w)return;let g=Object.keys(f).find(e=>e.toLowerCase()===w.toLowerCase());g&&(v.value=f[g])}),r.description){let w=document.createElement("div");w.className="voc-form-timezone-description",y&&w.classList.add("form-text"),w.textContent=r.description,l.appendChild(w)}return l.appendChild(v),l.appendChild(c),l}function I(r,E=!0){let m=new FormData(r);if(E)return oe(m);let y={};return m.forEach((l,u)=>{let v=(l instanceof File,l);Object.prototype.hasOwnProperty.call(y,u)?Array.isArray(y[u])?y[u].push(v):y[u]=[y[u],v]:y[u]=v}),y}function oe(r){let E=new FormData;for(let[m,y]of r.entries()){if(y instanceof File){E.append(m,y);continue}let l;try{l=JSON.parse(y)}catch{l=null}Array.isArray(l)?l.length===0?E.append(m,"[]"):l.every(u=>typeof u=="object"&&u!==null)?l.forEach((u,v)=>{for(let[c,h]of Object.entries(u))E.append(`${m}[${v}][${c}]`,h)}):E.append(m,y):E.append(m,y)}return E}async function J(r,E,m){let y=E.url,l={"Content-Type":"application/json"};E?.api_token&&(l.Authorization=`Bearer ${E.api_token}`);let u=I(r);if(E?.additional_data)for(let[h,L]of Object.entries(E.additional_data))u.append(h,L);let v,c=u instanceof FormData;v={method:"POST",headers:{Authorization:`Bearer ${E.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?u:JSON.stringify(Object.fromEntries(u.entries()))};try{fetch(y,v).then(async h=>{let L=h.headers.get("content-type");if(!h.ok)try{let w=(await h.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return L&&L.includes("application/json")?h.json():h.text()}).then(h=>{m&&m(h,null)}).catch(h=>{m&&m(null,h)})}catch(h){m&&m(null,h)}}function K(r,E,m){let y=[];if(typeof r=="string"?y=Array.from(document.querySelectorAll(r)):y=[r],y.length===0)return null;function l(){let c=m?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=E.id;let L=document.createElement("h2");L.className="voc-form-title",c&&L.classList.add("mb-3"),L.textContent=E.form_name,h.appendChild(L);function f(e,d){d&&(d.min_length!==void 0&&(e.minLength=d.min_length),d.max_length!==void 0&&(e.maxLength=d.max_length),d.regex&&(e instanceof HTMLInputElement?e.pattern=d.regex:e.dataset.pattern=d.regex))}function w(e){if(!e.key&&!e.label)return null;let d=E.default_values||{},b=e.name||e.key,a=b?d[b]:void 0,C=document.createElement("div");if(C.className="voc-form-group",c&&C.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 n=document.createElement("span");n.className="voc-form-required",n.textContent="*",t.appendChild(n)}C.appendChild(t)}let k=null;switch(e.type){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((n,i)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),e.required){let n=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let s=Array.from(n).some(o=>o.checked);return n.forEach(o=>{s?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),s};n.forEach(s=>{s.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),c&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),n.appendChild(i),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}k=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let n=e.default||a||"";if(n){let i=(n.match(/\n/g)||[]).length,s=80,o=n.split(`
|
|
2
|
+
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/s)||1,N=Math.max(2,i+A);t.rows=N,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),c&&t.classList.add("form-select"),c&&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 n=document.createElement("option");n.value="",n.textContent=e.placeholder,n.disabled=!0,n.selected=!0,t.appendChild(n)}e.required&&(t.required=!0),e.options&&e.options.forEach(n=>{let i=document.createElement("option");i.value=n.value,i.textContent=n.label,Array.isArray(a)?a.includes(n.value)&&(i.selected=!0):a!==void 0?a===n.value&&(i.selected=!0):e.default===n.value&&(i.selected=!0),t.appendChild(i)}),e.width&&(t.style.width=e.width),k=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((n,i)=>{let s=document.createElement("label");s.classList.add("voc-form-radio-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="radio",o.classList.add("voc-form-radio"),c&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),k=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let n=document.createElement("input");n.type="file",n.classList.add("voc-form-file"),c&&n.classList.add("form-control"),(e.key||e.name)&&(n.name=e.name||e.key,e.key&&(n.id=`voc-form-${e.key}`)),e.width&&(n.style.width=e.width),e.required&&(n.required=!0),e.accept&&(n.accept=e.accept),e.multiple&&(n.multiple=!0),t.appendChild(n),k=t;break}case"avatar":{k=j(e,m||{},a);break}case"table":{k=G(e,m||{},a);break}case"users":{k=U(e,m||{},a);break}case"timezone":{k=V(e,m||{},a);break}case"audio_select":{k=W(e,m||{},a);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}}if(k&&C.appendChild(k),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,C.appendChild(t)}return C}E.fields.forEach(e=>{if(e.type==="group"&&"items"in e){let d=e;if(c){let b=document.createElement("div");b.className="card voc-form-group-card mb-3";let a=d.label||d.header?.title,C=d.description||d.header?.description;if(a||C){let t=document.createElement("div");if(t.className="card-header voc-form-group-head",a){let n=document.createElement("h5");n.className="mb-0 voc-form-group-label",n.textContent=a,t.appendChild(n)}if(C){let n=document.createElement("p");n.className="mb-0 voc-form-group-description",n.textContent=C,t.appendChild(n)}b.appendChild(t)}let k=document.createElement("div");k.className="card-body voc-form-group-body",d.items.forEach(t=>{if(t.type==="row"&&"items"in t){let n=t,i=document.createElement("div");if(i.className="voc-form-group voc-form-row mb-3",n.label){let o=document.createElement("h6");o.className="voc-form-row-label",o.textContent=n.label,i.appendChild(o)}let s=document.createElement("div");s.className="voc-form-row-items "+(n.direction||"horizontal"),n.items.forEach(o=>{let A=w(o);A&&s.appendChild(A)}),i.appendChild(s),k.appendChild(i)}else{let n=w(t);n&&k.appendChild(n)}}),b.appendChild(k),h.appendChild(b)}else{let b=document.createElement("div");b.className="voc-form-group voc-form-group-wrapper",c&&b.classList.add("mb-3");let a=d.label||d.header?.title,C=d.description||d.header?.description;if(a||C){let k=document.createElement("div");if(k.className="voc-form-group-head",a){let t=document.createElement("h3");t.className="voc-form-group-label",t.textContent=a,k.appendChild(t)}if(C){let t=document.createElement("p");t.className="voc-form-group-description",t.textContent=C,k.appendChild(t)}b.appendChild(k)}d.items.forEach(k=>{if(k.type==="row"&&"items"in k){let t=k,n=document.createElement("div");if(n.className="voc-form-group voc-form-row",c&&n.classList.add("mb-3"),t.label){let s=document.createElement("h4");s.className="voc-form-row-label",s.textContent=t.label,n.appendChild(s)}let i=document.createElement("div");i.className="voc-form-row-items "+(t.direction||"horizontal"),t.items.forEach(s=>{let o=w(s);o&&i.appendChild(o)}),n.appendChild(i),b.appendChild(n)}else{let t=w(k);t&&b.appendChild(t)}}),h.appendChild(b)}return}if(e.type==="row"&&"items"in e){let d=document.createElement("div");if(d.className="voc-form-group voc-form-row",c&&d.classList.add("mb-3"),e.label){let a=document.createElement("h3");a.className="voc-form-row-label",a.textContent=e.label,d.appendChild(a)}if(e.description){let a=document.createElement("p");a.className="voc-form-row-description",a.textContent=e.description,d.appendChild(a)}let b=document.createElement("div");b.className="voc-form-row-items "+(e.direction||"horizontal"),d.appendChild(b),e.items.forEach(a=>{let C=w(a);C&&b.appendChild(C)}),h.appendChild(d)}else{let d=w(e);d&&h.appendChild(d)}});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",c&&g.classList.add("btn","btn-primary"),h.appendChild(g),h}let u=l();y[0].appendChild(u);let v=E?.submit_config??m?.submit_config??null;return v&&u.addEventListener("submit",c=>{c.preventDefault();let h=Array.from(u.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),L=[];if(h.forEach(g=>{g&&typeof g._validateCheckboxGroup=="function"&&(g._validateCheckboxGroup()||g.querySelector('input[type="checkbox"]')&&L.push("Please select at least one option"))}),!u.checkValidity()){u.reportValidity(),m?.onSubmitResult&&m.onSubmitResult(null,new Error("Form validation failed"));return}let f=Array.from(u.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),w=[];if(f.forEach(g=>{if(g&&typeof g.validate=="function"){let e=g.validate();e&&e.length&&w.push(...e)}}),w.length){m?.onSubmitResult&&m.onSubmitResult(null,new Error(w.join("; ")));let g=f[0];g&&g.scrollIntoView({behavior:"smooth",block:"center"});return}if(m?.onSubmit){let g=I(u);m.onSubmit(g)}J(u,v,(g,e)=>{m?.onSubmitResult&&m.onSubmitResult(g,e)})}),{element:u,validate:()=>{let c=[];return u.querySelectorAll(":invalid").forEach(L=>{let f=L.validationMessage;c.push({element:L,message:f})}),c},getValues:()=>I(u),onSubmit:c=>{u.addEventListener("submit",h=>{h.preventDefault();let L=I(u);c(L,h)})}}}var z={renderForm:K};var ie=z,ce={FormsLib:z};return ne(le);})();
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(n,E)=>{for(var m in E)P(n,m,{get:E[m],enumerable:!0})},ae=(n,E,m,y)=>{if(E&&typeof E=="object"||typeof E=="function")for(let l of Z(E))!ee.call(n,l)&&l!==m&&P(n,l,{get:()=>E[l],enumerable:!(y=X(E,l))||y.enumerable});return n};var ne=n=>ae(P({},"__esModule",{value:!0}),n);var le={};te(le,{FormsLib:()=>ie,default:()=>ce});module.exports=ne(le);function j(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-avatar-wrapper",y&&l.classList.add("d-flex","align-items-center","gap-3");let u=document.createElement("img");u.className="voc-form-avatar-preview",u.alt=n.label||"avatar",y&&(u.classList.add("img-thumbnail","rounded-circle"),u.style.width=u.style.height="64px",u.style.objectFit="cover");let v=m!=null?String(m):n.default!==void 0&&n.default!==null?String(n.default):"";v?u.src=v:(u.src="",u.style.display="none");let c=document.createElement("input");c.type="file",c.accept=n.accept||"image/*",c.className="voc-form-avatar-input",y&&c.classList.add("form-control"),(n.key||n.name)&&(c.name=n.name||n.key,n.key&&(c.id=`voc-form-${n.key}`));let h=document.createElement("input");if(h.type="hidden",(n.key||n.name)&&(h.name=(n.name||n.key)+"_url"),h.value=v||"",c.addEventListener("change",L=>{let f=L.target;if(f.files&&f.files.length>0){let w=f.files[0],g=new FileReader;g.onload=()=>{u.src=String(g.result),u.style.display="",h.value=""},g.readAsDataURL(w)}}),y){let L=document.createElement("div");L.style.flex="1",L.appendChild(c),L.appendChild(h),l.appendChild(u),l.appendChild(L)}else l.appendChild(u),l.appendChild(c),l.appendChild(h);return l}function W(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");if(l.className="voc-form-audio-select",!n.options||n.options.length===0)return l;let u=n.name||n.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,v;return Array.isArray(m)?v=m[0]:m!==void 0?v=m:n.default!==void 0&&(v=n.default),n.options.forEach((c,h)=>{let L=document.createElement("div");L.className="voc-form-audio-item",y&&L.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=u,f.value=c.value,f.className="voc-form-audio-radio",n.key&&(f.id=`voc-form-${n.key}-${h}`),n.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",v!==void 0&&(Array.isArray(v)?f.checked=v.includes(c.value):f.checked=String(v)===String(c.value));let w=()=>{f.checked?L.classList.add("selected"):L.classList.remove("selected")};f.addEventListener("change",()=>{l.querySelectorAll(".voc-form-audio-item").forEach(r=>r.classList.remove("selected")),w()}),f.checked&&L.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",y&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let d=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",y&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let r="http://www.w3.org/2000/svg",i=document.createElementNS(r,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let s=document.createElementNS(r,"path");s.setAttribute("d","M8 5v14l11-7z"),s.setAttribute("fill","currentColor"),i.appendChild(s),t.appendChild(i),d=document.createElement("audio"),d.src=c.audio_link,d.preload="none",d.style.display="none";let o=p=>{for(;p.firstChild;)p.removeChild(p.firstChild)},A=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=p=>{o(t),p?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!d)return;let p=l.querySelectorAll("audio");if(!d.paused&&!d.ended){d.pause(),d.currentTime=0;return}p.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),l.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),d.play()}catch(p){console.warn("audio play failed",p)}}),d.addEventListener("playing",()=>{L.classList.add("is-playing"),_(!0)});let H=()=>{L.classList.remove("is-playing"),_(!1)};d.addEventListener("pause",H),d.addEventListener("ended",H),e.appendChild(t),e.appendChild(d)}let b=document.createElement("div");b.className="voc-form-item-detail",b.style.display="flex",b.style.flexDirection="column",b.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let C=document.createElement("div");C.className="voc-form-item-description";let k=c.description||c.hint_text||"";k&&(C.textContent=k),b.appendChild(a),b.appendChild(C),e.appendChild(b),L.appendChild(e),a.addEventListener("click",t=>{let r=t.target;r&&r.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),L.addEventListener("click",t=>{let r=t.target;r&&r.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),l.appendChild(L)}),l}function G(n,E,m){let y=document.createElement("div");y.className="voc-form-table-wrapper";let l=E?.style==="bootstrap",u=document.createElement("input");u.type="hidden",u.name=n.name||n.key,n.key&&(u.id=`voc-form-${n.key}`),y.appendChild(u);let v=document.createElement("table");v.className="voc-form-table",l&&v.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),L=document.createElement("th");L.className="voc-form-table-drag-col",L.textContent="",h.appendChild(L),(n.fields||[]).forEach(r=>{let i=document.createElement("th");i.textContent=r.label||r.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),v.appendChild(c);let w=document.createElement("tbody");v.appendChild(w),y.appendChild(v);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",l&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),d=document.createElement("tr"),b=document.createElement("td");b.colSpan=(n.fields?n.fields.length:0)+1,b.appendChild(g),d.appendChild(b),e.appendChild(d),v.appendChild(e),y.appendChild(v);let a=[];function C(){u.value=JSON.stringify(a)}function k(r){let i=[];return n.fields.forEach(s=>{let o=r[s.key];if(s.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];s.required&&A.length===0&&i.push(`${s.label||s.key} is required`);return}s.required&&(o==null||String(o).trim()==="")&&i.push(`${s.label||s.key} is required`),s.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${s.label||s.key} must be a valid email`)),s.type==="number"&&o&&isNaN(Number(o))&&i.push(`${s.label||s.key} must be a number`),s.validation&&s.validation.regex&&o&&(new RegExp(s.validation.regex).test(String(o))||i.push(`${s.label||s.key} invalid format`))}),i}function t(){w.innerHTML="";let r=(i,s)=>{s.draggable=!0,s.addEventListener("mousedown",()=>{s.style.cursor="grabbing"}),s.addEventListener("mouseup",()=>{s.style.cursor="grab"}),s.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(s,10,10)}catch{}}),s.addEventListener("dragend",()=>{i.classList.remove("dragging"),s.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[p]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,p),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),C()})};a.forEach((i,s)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(s),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),r(o,N),n.fields.forEach(p=>{let F=document.createElement("td"),T,q=(p.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",l&&x.classList.add("form-control"),p.placeholder){let S=document.createElement("option");S.value="",S.textContent=p.placeholder,S.disabled=!0,(i[p.key]===void 0||i[p.key]===null||i[p.key]==="")&&(S.selected=!0),x.appendChild(S)}(p.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.required&&(x.required=!0),x.addEventListener("change",S=>{a[s][p.key]=S.target.value,C()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",l&&x.classList.add("form-check");let D=p.options||[];Array.isArray(a[s][p.key])||(a[s][p.key]=a[s][p.key]?[a[s][p.key]]:[]),D.forEach(S=>{let B=`voc-form-${n.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[s][p.key])&&a[s][p.key].includes(S.value),M.addEventListener("change",O=>{let Y=O.target.checked;Array.isArray(a[s][p.key])||(a[s][p.key]=[]),Y?a[s][p.key].includes(S.value)||a[s][p.key].push(S.value):a[s][p.key]=a[s][p.key].filter(Q=>Q!==S.value),C()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",l&&x.classList.add("form-check");let D=p.options||[];a[s][p.key]===void 0&&(a[s][p.key]=""),D.forEach(S=>{let B=`voc-form-${n.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${n.key}-${p.key}-${s}`,M.value=S.value,M.checked=a[s][p.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[s][p.key]=O.target.value,C())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.placeholder&&(x.placeholder=p.placeholder),p.required&&(x.required=!0),x.className="voc-form-table-cell",l&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[s][p.key]=D.target.value,C()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",l&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(s,1),t(),C()}),_.appendChild(H),o.appendChild(_),w.appendChild(o)})}return g.addEventListener("click",()=>{if(n.validation?.max_rows!==void 0&&a.length>=n.validation.max_rows)return;let r={};n.fields.forEach(i=>r[i.key]=""),a.push(r),t(),C()}),Array.isArray(m)&&m.length?a=m.map(r=>({...r})):n.default&&Array.isArray(n.default)&&(a=n.default.map(r=>({...r}))),t(),C(),y.validate=function(){let r=[];return a.forEach((i,s)=>{let o=k(i);o.length&&r.push(`Row ${s+1}: ${o.join("; ")}`)}),n.validation?.min_rows!==void 0&&a.length<n.validation.min_rows&&r.push(`At least ${n.validation.min_rows} rows required`),n.validation?.max_rows!==void 0&&a.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(i=>{let s=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(s.has(N)&&r.push(`Field ${i} must be unique (duplicate at row ${A+1})`),s.add(N))})}),r},y}async function re(n){let m=new TextEncoder().encode(n),y=await crypto.subtle.digest("SHA-256",m);return Array.from(new Uint8Array(y)).map(u=>u.toString(16).padStart(2,"0")).join("")}async function se(n){let E=String(n||"").trim().toLowerCase();return E?`https://gravatar.com/avatar/${await re(E)}?d=mp`:""}function U(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-users";let u=document.createElement("div");if(u.className="voc-form-users-header",y&&u.classList.add("mb-2"),n.label){let e=document.createElement("div");if(e.className="voc-form-users-label",y&&e.classList.add("form-label"),e.textContent=n.label,n.required){let d=document.createElement("span");d.className="voc-form-required",d.textContent="*",e.appendChild(d)}u.appendChild(e)}if(n.description){let e=document.createElement("div");e.className="voc-form-users-description",y&&e.classList.add("form-text"),e.textContent=n.description,u.appendChild(e)}l.appendChild(u);let v=document.createElement("div");v.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",y&&c.classList.add("form-control","mb-2"),v.appendChild(c),l.appendChild(v),!n.options||n.options.length===0)return l;let h=document.createElement("div");h.className="voc-form-users-list",y&&h.classList.add("list-group");let L=n.name||n.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(m)?f=m:m!=null?f=[m]:Array.isArray(n.default)&&(f=n.default),n.options.forEach((e,d)=>{let b=document.createElement("div");b.className="voc-form-user-item",b.dataset.label=String(e.label||"").toLowerCase(),b.dataset.email=String(e.email||"").toLowerCase(),b.dataset.value=String(e.value||"").toLowerCase(),y&&b.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${L}[]`,a.value=e.value,a.className="voc-form-user-checkbox",n.key&&(a.id=`voc-form-${n.key}-${d}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(s=>String(s));a.checked=i.includes(String(e.value))}let C=document.createElement("img");C.className="voc-form-user-avatar",C.alt=e.label||String(e.value||"user"),C.style.width=C.style.height="40px",C.style.objectFit="cover",C.style.borderRadius="50%",C.src="",e.email&&se(e.email).then(i=>{i&&(C.src=i)}).catch(()=>{});let k=document.createElement("div");k.className="voc-form-user-info",k.style.display="flex",k.style.flexDirection="column",k.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let r=document.createElement("small");r.className="voc-form-user-email",r.textContent=e.email||"",k.appendChild(t),k.appendChild(r),b.addEventListener("click",i=>{let s=i.target;s&&(s.closest("input")||s.closest("a")||s.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?b.classList.add("selected"):b.classList.remove("selected")}),a.checked&&b.classList.add("selected"),b.appendChild(a),b.appendChild(C),b.appendChild(k),h.appendChild(b)}),l.appendChild(h),n.required){let e=h.querySelectorAll('input[type="checkbox"]'),d=()=>{let b=Array.from(e).some(a=>a.checked);return e.forEach(a=>{b?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),b};e.forEach(b=>{b.addEventListener("change",d)}),l._validateCheckboxGroup=d,d()}let w=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){w.forEach(d=>d.style.setProperty("display","flex","important"));return}w.forEach(d=>{let b=d.dataset.label||"",a=d.dataset.email||"",C=d.dataset.value||"",k=b.includes(e)||a.includes(e)||C.includes(e);d.style.setProperty("display",k?"flex":"none","important")})};return c.addEventListener("input",g),l}function V(n,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-timezone";let u=n.name||n.key||`timezone_${Math.random().toString(36).substr(2,6)}`,v=document.createElement("input");v.type="text",v.name=u,n.key&&(v.id=`voc-form-${n.key}`),v.className="voc-form-timezone-input",y&&v.classList.add("form-control"),n.placeholder&&(v.placeholder=n.placeholder||""),n.required&&(v.required=!0),n.width&&(v.style.width=n.width),m!=null?v.value=String(m):n.default!==void 0&&n.default!==null&&(v.value=String(n.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${n.key||Math.random().toString(36).substr(2,6)}`,v.setAttribute("list",c.id);let h=["UTC","Etc/UTC","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"];(n.options&&n.options.length?n.options.map(w=>String(w.value||w.label)):h).forEach(w=>{let g=document.createElement("option");g.value=w,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(v.addEventListener("blur",()=>{let w=(v.value||"").trim();if(!w)return;let g=Object.keys(f).find(e=>e.toLowerCase()===w.toLowerCase());g&&(v.value=f[g])}),n.description){let w=document.createElement("div");w.className="voc-form-timezone-description",y&&w.classList.add("form-text"),w.textContent=n.description,l.appendChild(w)}return l.appendChild(v),l.appendChild(c),l}function I(n,E=!0){let m=new FormData(n);if(E)return oe(m);let y={};return m.forEach((l,u)=>{let v=(l instanceof File,l);Object.prototype.hasOwnProperty.call(y,u)?Array.isArray(y[u])?y[u].push(v):y[u]=[y[u],v]:y[u]=v}),y}function oe(n){let E=new FormData;for(let[m,y]of n.entries()){if(y instanceof File){E.append(m,y);continue}let l;try{l=JSON.parse(y)}catch{l=null}Array.isArray(l)?l.length===0?E.append(m,"[]"):l.every(u=>typeof u=="object"&&u!==null)?l.forEach((u,v)=>{for(let[c,h]of Object.entries(u))E.append(`${m}[${v}][${c}]`,h)}):E.append(m,y):E.append(m,y)}return E}async function J(n,E,m){let y=E.url,l={"Content-Type":"application/json"};E?.api_token&&(l.Authorization=`Bearer ${E.api_token}`);let u=I(n);if(E?.additional_data)for(let[h,L]of Object.entries(E.additional_data))u.append(h,L);let v,c=u instanceof FormData;v={method:"POST",headers:{Authorization:`Bearer ${E.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?u:JSON.stringify(Object.fromEntries(u.entries()))};try{fetch(y,v).then(async h=>{let L=h.headers.get("content-type");if(!h.ok)try{let w=(await h.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return L&&L.includes("application/json")?h.json():h.text()}).then(h=>{m&&m(h,null)}).catch(h=>{m&&m(null,h)})}catch(h){m&&m(null,h)}}function K(n,E,m){let y=[];if(typeof n=="string"?y=Array.from(document.querySelectorAll(n)):y=[n],y.length===0)return null;function l(){let c=m?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=E.id;let L=document.createElement("h2");L.className="voc-form-title",c&&L.classList.add("mb-3"),L.textContent=E.form_name,h.appendChild(L);function f(e,d){d&&(d.min_length!==void 0&&(e.minLength=d.min_length),d.max_length!==void 0&&(e.maxLength=d.max_length),d.regex&&(e instanceof HTMLInputElement?e.pattern=d.regex:e.dataset.pattern=d.regex))}function w(e){if(!e.key&&!e.label)return null;let d=E.default_values||{},b=e.name||e.key,a=b?d[b]:void 0,C=document.createElement("div");if(C.className="voc-form-group",c&&C.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 r=document.createElement("span");r.className="voc-form-required",r.textContent="*",t.appendChild(r)}C.appendChild(t)}let k=null;switch(e.type){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((r,i)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=r.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(r.value)&&(o.checked=!0):a!==void 0?a===r.value&&(o.checked=!0):e.default===r.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(r.label)),t.appendChild(s)}),e.required){let r=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let s=Array.from(r).some(o=>o.checked);return r.forEach(o=>{s?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),s};r.forEach(s=>{s.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let r=document.createElement("label");r.classList.add("voc-form-checkbox-label"),c&&r.classList.add("form-check"),e.width&&(r.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),r.appendChild(i),r.appendChild(document.createTextNode(e.label||"")),t.appendChild(r)}k=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let r=e.default||a||"";if(r){let i=(r.match(/\n/g)||[]).length,s=80,o=r.split(`
|
|
2
|
-
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/s)||1,N=Math.max(2,i+A);t.rows=N,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),c&&t.classList.add("form-select"),c&&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
|
|
1
|
+
"use strict";var P=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(r,E)=>{for(var m in E)P(r,m,{get:E[m],enumerable:!0})},ae=(r,E,m,y)=>{if(E&&typeof E=="object"||typeof E=="function")for(let l of Z(E))!ee.call(r,l)&&l!==m&&P(r,l,{get:()=>E[l],enumerable:!(y=X(E,l))||y.enumerable});return r};var ne=r=>ae(P({},"__esModule",{value:!0}),r);var le={};te(le,{FormsLib:()=>ie,default:()=>ce});module.exports=ne(le);function j(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-avatar-wrapper",y&&l.classList.add("d-flex","align-items-center","gap-3");let u=document.createElement("img");u.className="voc-form-avatar-preview",u.alt=r.label||"avatar",y&&(u.classList.add("img-thumbnail","rounded-circle"),u.style.width=u.style.height="64px",u.style.objectFit="cover");let v=m!=null?String(m):r.default!==void 0&&r.default!==null?String(r.default):"";v?u.src=v:(u.src="",u.style.display="none");let c=document.createElement("input");c.type="file",c.accept=r.accept||"image/*",c.className="voc-form-avatar-input",y&&c.classList.add("form-control"),(r.key||r.name)&&(c.name=r.name||r.key,r.key&&(c.id=`voc-form-${r.key}`));let h=document.createElement("input");if(h.type="hidden",(r.key||r.name)&&(h.name=(r.name||r.key)+"_url"),h.value=v||"",c.addEventListener("change",L=>{let f=L.target;if(f.files&&f.files.length>0){let w=f.files[0],g=new FileReader;g.onload=()=>{u.src=String(g.result),u.style.display="",h.value=""},g.readAsDataURL(w)}}),y){let L=document.createElement("div");L.style.flex="1",L.appendChild(c),L.appendChild(h),l.appendChild(u),l.appendChild(L)}else l.appendChild(u),l.appendChild(c),l.appendChild(h);return l}function W(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");if(l.className="voc-form-audio-select",!r.options||r.options.length===0)return l;let u=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,v;return Array.isArray(m)?v=m[0]:m!==void 0?v=m:r.default!==void 0&&(v=r.default),r.options.forEach((c,h)=>{let L=document.createElement("div");L.className="voc-form-audio-item",y&&L.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=u,f.value=c.value,f.className="voc-form-audio-radio",r.key&&(f.id=`voc-form-${r.key}-${h}`),r.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",v!==void 0&&(Array.isArray(v)?f.checked=v.includes(c.value):f.checked=String(v)===String(c.value));let w=()=>{f.checked?L.classList.add("selected"):L.classList.remove("selected")};f.addEventListener("change",()=>{l.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),w()}),f.checked&&L.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",y&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let d=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",y&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let s=document.createElementNS(n,"path");s.setAttribute("d","M8 5v14l11-7z"),s.setAttribute("fill","currentColor"),i.appendChild(s),t.appendChild(i),d=document.createElement("audio"),d.src=c.audio_link,d.preload="none",d.style.display="none";let o=p=>{for(;p.firstChild;)p.removeChild(p.firstChild)},A=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let p="http://www.w3.org/2000/svg",F=document.createElementNS(p,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(p,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=p=>{o(t),p?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!d)return;let p=l.querySelectorAll("audio");if(!d.paused&&!d.ended){d.pause(),d.currentTime=0;return}p.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),l.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),d.play()}catch(p){console.warn("audio play failed",p)}}),d.addEventListener("playing",()=>{L.classList.add("is-playing"),_(!0)});let H=()=>{L.classList.remove("is-playing"),_(!1)};d.addEventListener("pause",H),d.addEventListener("ended",H),e.appendChild(t),e.appendChild(d)}let b=document.createElement("div");b.className="voc-form-item-detail",b.style.display="flex",b.style.flexDirection="column",b.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let C=document.createElement("div");C.className="voc-form-item-description";let k=c.description||c.hint_text||"";k&&(C.textContent=k),b.appendChild(a),b.appendChild(C),e.appendChild(b),L.appendChild(e),a.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),L.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),l.appendChild(L)}),l}function G(r,E,m){let y=document.createElement("div");y.className="voc-form-table-wrapper";let l=E?.style==="bootstrap",u=document.createElement("input");u.type="hidden",u.name=r.name||r.key,r.key&&(u.id=`voc-form-${r.key}`),y.appendChild(u);let v=document.createElement("table");v.className="voc-form-table",l&&v.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),L=document.createElement("th");L.className="voc-form-table-drag-col",L.textContent="",h.appendChild(L),(r.fields||[]).forEach(n=>{let i=document.createElement("th");i.textContent=n.label||n.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),v.appendChild(c);let w=document.createElement("tbody");v.appendChild(w),y.appendChild(v);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",l&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),d=document.createElement("tr"),b=document.createElement("td");b.colSpan=(r.fields?r.fields.length:0)+1,b.appendChild(g),d.appendChild(b),e.appendChild(d),v.appendChild(e),y.appendChild(v);let a=[];function C(){u.value=JSON.stringify(a)}function k(n){let i=[];return r.fields.forEach(s=>{let o=n[s.key];if(s.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];s.required&&A.length===0&&i.push(`${s.label||s.key} is required`);return}s.required&&(o==null||String(o).trim()==="")&&i.push(`${s.label||s.key} is required`),s.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${s.label||s.key} must be a valid email`)),s.type==="number"&&o&&isNaN(Number(o))&&i.push(`${s.label||s.key} must be a number`),s.validation&&s.validation.regex&&o&&(new RegExp(s.validation.regex).test(String(o))||i.push(`${s.label||s.key} invalid format`))}),i}function t(){w.innerHTML="";let n=(i,s)=>{s.draggable=!0,s.addEventListener("mousedown",()=>{s.style.cursor="grabbing"}),s.addEventListener("mouseup",()=>{s.style.cursor="grab"}),s.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(s,10,10)}catch{}}),s.addEventListener("dragend",()=>{i.classList.remove("dragging"),s.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[p]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,p),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),C()})};a.forEach((i,s)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(s),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),n(o,N),r.fields.forEach(p=>{let F=document.createElement("td"),T,q=(p.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",l&&x.classList.add("form-control"),p.placeholder){let S=document.createElement("option");S.value="",S.textContent=p.placeholder,S.disabled=!0,(i[p.key]===void 0||i[p.key]===null||i[p.key]==="")&&(S.selected=!0),x.appendChild(S)}(p.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.required&&(x.required=!0),x.addEventListener("change",S=>{a[s][p.key]=S.target.value,C()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",l&&x.classList.add("form-check");let D=p.options||[];Array.isArray(a[s][p.key])||(a[s][p.key]=a[s][p.key]?[a[s][p.key]]:[]),D.forEach(S=>{let B=`voc-form-${r.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[s][p.key])&&a[s][p.key].includes(S.value),M.addEventListener("change",O=>{let Y=O.target.checked;Array.isArray(a[s][p.key])||(a[s][p.key]=[]),Y?a[s][p.key].includes(S.value)||a[s][p.key].push(S.value):a[s][p.key]=a[s][p.key].filter(Q=>Q!==S.value),C()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",l&&x.classList.add("form-check");let D=p.options||[];a[s][p.key]===void 0&&(a[s][p.key]=""),D.forEach(S=>{let B=`voc-form-${r.key}-${p.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",l&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",l&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${r.key}-${p.key}-${s}`,M.value=S.value,M.checked=a[s][p.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[s][p.key]=O.target.value,C())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",l&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[p.key]!==void 0&&i[p.key]!==null?String(i[p.key]):"",p.placeholder&&(x.placeholder=p.placeholder),p.required&&(x.required=!0),x.className="voc-form-table-cell",l&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[s][p.key]=D.target.value,C()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",l&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(s,1),t(),C()}),_.appendChild(H),o.appendChild(_),w.appendChild(o)})}return g.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&a.length>=r.validation.max_rows)return;let n={};r.fields.forEach(i=>n[i.key]=""),a.push(n),t(),C()}),Array.isArray(m)&&m.length?a=m.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(a=r.default.map(n=>({...n}))),t(),C(),y.validate=function(){let n=[];return a.forEach((i,s)=>{let o=k(i);o.length&&n.push(`Row ${s+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&a.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&a.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(i=>{let s=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(s.has(N)&&n.push(`Field ${i} must be unique (duplicate at row ${A+1})`),s.add(N))})}),n},y}async function re(r){let m=new TextEncoder().encode(r),y=await crypto.subtle.digest("SHA-256",m);return Array.from(new Uint8Array(y)).map(u=>u.toString(16).padStart(2,"0")).join("")}async function se(r){let E=String(r||"").trim().toLowerCase();return E?`https://gravatar.com/avatar/${await re(E)}?d=mp`:""}function U(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-users";let u=document.createElement("div");if(u.className="voc-form-users-header",y&&u.classList.add("mb-2"),r.label){let e=document.createElement("div");if(e.className="voc-form-users-label",y&&e.classList.add("form-label"),e.textContent=r.label,r.required){let d=document.createElement("span");d.className="voc-form-required",d.textContent="*",e.appendChild(d)}u.appendChild(e)}if(r.description){let e=document.createElement("div");e.className="voc-form-users-description",y&&e.classList.add("form-text"),e.textContent=r.description,u.appendChild(e)}l.appendChild(u);let v=document.createElement("div");v.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",y&&c.classList.add("form-control","mb-2"),v.appendChild(c),l.appendChild(v),!r.options||r.options.length===0)return l;let h=document.createElement("div");h.className="voc-form-users-list",y&&h.classList.add("list-group");let L=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(m)?f=m:m!=null?f=[m]:Array.isArray(r.default)&&(f=r.default),r.options.forEach((e,d)=>{let b=document.createElement("div");b.className="voc-form-user-item",b.dataset.label=String(e.label||"").toLowerCase(),b.dataset.email=String(e.email||"").toLowerCase(),b.dataset.value=String(e.value||"").toLowerCase(),y&&b.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${L}[]`,a.value=e.value,a.className="voc-form-user-checkbox",r.key&&(a.id=`voc-form-${r.key}-${d}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(s=>String(s));a.checked=i.includes(String(e.value))}let C=document.createElement("img");C.className="voc-form-user-avatar",C.alt=e.label||String(e.value||"user"),C.style.width=C.style.height="40px",C.style.objectFit="cover",C.style.borderRadius="50%",C.src="",e.email&&se(e.email).then(i=>{i&&(C.src=i)}).catch(()=>{});let k=document.createElement("div");k.className="voc-form-user-info",k.style.display="flex",k.style.flexDirection="column",k.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=e.email||"",k.appendChild(t),k.appendChild(n),b.addEventListener("click",i=>{let s=i.target;s&&(s.closest("input")||s.closest("a")||s.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?b.classList.add("selected"):b.classList.remove("selected")}),a.checked&&b.classList.add("selected"),b.appendChild(a),b.appendChild(C),b.appendChild(k),h.appendChild(b)}),l.appendChild(h),r.required){let e=h.querySelectorAll('input[type="checkbox"]'),d=()=>{let b=Array.from(e).some(a=>a.checked);return e.forEach(a=>{b?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),b};e.forEach(b=>{b.addEventListener("change",d)}),l._validateCheckboxGroup=d,d()}let w=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){w.forEach(d=>d.style.setProperty("display","flex","important"));return}w.forEach(d=>{let b=d.dataset.label||"",a=d.dataset.email||"",C=d.dataset.value||"",k=b.includes(e)||a.includes(e)||C.includes(e);d.style.setProperty("display",k?"flex":"none","important")})};return c.addEventListener("input",g),l}function V(r,E,m){let y=E?.style==="bootstrap",l=document.createElement("div");l.className="voc-form-timezone";let u=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,v=document.createElement("input");v.type="text",v.name=u,r.key&&(v.id=`voc-form-${r.key}`),v.className="voc-form-timezone-input",y&&v.classList.add("form-control"),r.placeholder&&(v.placeholder=r.placeholder||""),r.required&&(v.required=!0),r.width&&(v.style.width=r.width),m!=null?v.value=String(m):r.default!==void 0&&r.default!==null&&(v.value=String(r.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${r.key||Math.random().toString(36).substr(2,6)}`,v.setAttribute("list",c.id),["UTC","Etc/UTC","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"].forEach(w=>{let g=document.createElement("option");g.value=w,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(v.addEventListener("blur",()=>{let w=(v.value||"").trim();if(!w)return;let g=Object.keys(f).find(e=>e.toLowerCase()===w.toLowerCase());g&&(v.value=f[g])}),r.description){let w=document.createElement("div");w.className="voc-form-timezone-description",y&&w.classList.add("form-text"),w.textContent=r.description,l.appendChild(w)}return l.appendChild(v),l.appendChild(c),l}function I(r,E=!0){let m=new FormData(r);if(E)return oe(m);let y={};return m.forEach((l,u)=>{let v=(l instanceof File,l);Object.prototype.hasOwnProperty.call(y,u)?Array.isArray(y[u])?y[u].push(v):y[u]=[y[u],v]:y[u]=v}),y}function oe(r){let E=new FormData;for(let[m,y]of r.entries()){if(y instanceof File){E.append(m,y);continue}let l;try{l=JSON.parse(y)}catch{l=null}Array.isArray(l)?l.length===0?E.append(m,"[]"):l.every(u=>typeof u=="object"&&u!==null)?l.forEach((u,v)=>{for(let[c,h]of Object.entries(u))E.append(`${m}[${v}][${c}]`,h)}):E.append(m,y):E.append(m,y)}return E}async function J(r,E,m){let y=E.url,l={"Content-Type":"application/json"};E?.api_token&&(l.Authorization=`Bearer ${E.api_token}`);let u=I(r);if(E?.additional_data)for(let[h,L]of Object.entries(E.additional_data))u.append(h,L);let v,c=u instanceof FormData;v={method:"POST",headers:{Authorization:`Bearer ${E.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?u:JSON.stringify(Object.fromEntries(u.entries()))};try{fetch(y,v).then(async h=>{let L=h.headers.get("content-type");if(!h.ok)try{let w=(await h.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return L&&L.includes("application/json")?h.json():h.text()}).then(h=>{m&&m(h,null)}).catch(h=>{m&&m(null,h)})}catch(h){m&&m(null,h)}}function K(r,E,m){let y=[];if(typeof r=="string"?y=Array.from(document.querySelectorAll(r)):y=[r],y.length===0)return null;function l(){let c=m?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=E.id;let L=document.createElement("h2");L.className="voc-form-title",c&&L.classList.add("mb-3"),L.textContent=E.form_name,h.appendChild(L);function f(e,d){d&&(d.min_length!==void 0&&(e.minLength=d.min_length),d.max_length!==void 0&&(e.maxLength=d.max_length),d.regex&&(e instanceof HTMLInputElement?e.pattern=d.regex:e.dataset.pattern=d.regex))}function w(e){if(!e.key&&!e.label)return null;let d=E.default_values||{},b=e.name||e.key,a=b?d[b]:void 0,C=document.createElement("div");if(C.className="voc-form-group",c&&C.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 n=document.createElement("span");n.className="voc-form-required",n.textContent="*",t.appendChild(n)}C.appendChild(t)}let k=null;switch(e.type){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((n,i)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),e.required){let n=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let s=Array.from(n).some(o=>o.checked);return n.forEach(o=>{s?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),s};n.forEach(s=>{s.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),c&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),n.appendChild(i),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}k=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let n=e.default||a||"";if(n){let i=(n.match(/\n/g)||[]).length,s=80,o=n.split(`
|
|
2
|
+
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/s)||1,N=Math.max(2,i+A);t.rows=N,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),c&&t.classList.add("form-select"),c&&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 n=document.createElement("option");n.value="",n.textContent=e.placeholder,n.disabled=!0,n.selected=!0,t.appendChild(n)}e.required&&(t.required=!0),e.options&&e.options.forEach(n=>{let i=document.createElement("option");i.value=n.value,i.textContent=n.label,Array.isArray(a)?a.includes(n.value)&&(i.selected=!0):a!==void 0?a===n.value&&(i.selected=!0):e.default===n.value&&(i.selected=!0),t.appendChild(i)}),e.width&&(t.style.width=e.width),k=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((n,i)=>{let s=document.createElement("label");s.classList.add("voc-form-radio-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="radio",o.classList.add("voc-form-radio"),c&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),k=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let n=document.createElement("input");n.type="file",n.classList.add("voc-form-file"),c&&n.classList.add("form-control"),(e.key||e.name)&&(n.name=e.name||e.key,e.key&&(n.id=`voc-form-${e.key}`)),e.width&&(n.style.width=e.width),e.required&&(n.required=!0),e.accept&&(n.accept=e.accept),e.multiple&&(n.multiple=!0),t.appendChild(n),k=t;break}case"avatar":{k=j(e,m||{},a);break}case"table":{k=G(e,m||{},a);break}case"users":{k=U(e,m||{},a);break}case"timezone":{k=V(e,m||{},a);break}case"audio_select":{k=W(e,m||{},a);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),k=t;break}}if(k&&C.appendChild(k),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,C.appendChild(t)}return C}E.fields.forEach(e=>{if(e.type==="group"&&"items"in e){let d=e;if(c){let b=document.createElement("div");b.className="card voc-form-group-card mb-3";let a=d.label||d.header?.title,C=d.description||d.header?.description;if(a||C){let t=document.createElement("div");if(t.className="card-header voc-form-group-head",a){let n=document.createElement("h5");n.className="mb-0 voc-form-group-label",n.textContent=a,t.appendChild(n)}if(C){let n=document.createElement("p");n.className="mb-0 voc-form-group-description",n.textContent=C,t.appendChild(n)}b.appendChild(t)}let k=document.createElement("div");k.className="card-body voc-form-group-body",d.items.forEach(t=>{if(t.type==="row"&&"items"in t){let n=t,i=document.createElement("div");if(i.className="voc-form-group voc-form-row mb-3",n.label){let o=document.createElement("h6");o.className="voc-form-row-label",o.textContent=n.label,i.appendChild(o)}let s=document.createElement("div");s.className="voc-form-row-items "+(n.direction||"horizontal"),n.items.forEach(o=>{let A=w(o);A&&s.appendChild(A)}),i.appendChild(s),k.appendChild(i)}else{let n=w(t);n&&k.appendChild(n)}}),b.appendChild(k),h.appendChild(b)}else{let b=document.createElement("div");b.className="voc-form-group voc-form-group-wrapper",c&&b.classList.add("mb-3");let a=d.label||d.header?.title,C=d.description||d.header?.description;if(a||C){let k=document.createElement("div");if(k.className="voc-form-group-head",a){let t=document.createElement("h3");t.className="voc-form-group-label",t.textContent=a,k.appendChild(t)}if(C){let t=document.createElement("p");t.className="voc-form-group-description",t.textContent=C,k.appendChild(t)}b.appendChild(k)}d.items.forEach(k=>{if(k.type==="row"&&"items"in k){let t=k,n=document.createElement("div");if(n.className="voc-form-group voc-form-row",c&&n.classList.add("mb-3"),t.label){let s=document.createElement("h4");s.className="voc-form-row-label",s.textContent=t.label,n.appendChild(s)}let i=document.createElement("div");i.className="voc-form-row-items "+(t.direction||"horizontal"),t.items.forEach(s=>{let o=w(s);o&&i.appendChild(o)}),n.appendChild(i),b.appendChild(n)}else{let t=w(k);t&&b.appendChild(t)}}),h.appendChild(b)}return}if(e.type==="row"&&"items"in e){let d=document.createElement("div");if(d.className="voc-form-group voc-form-row",c&&d.classList.add("mb-3"),e.label){let a=document.createElement("h3");a.className="voc-form-row-label",a.textContent=e.label,d.appendChild(a)}if(e.description){let a=document.createElement("p");a.className="voc-form-row-description",a.textContent=e.description,d.appendChild(a)}let b=document.createElement("div");b.className="voc-form-row-items "+(e.direction||"horizontal"),d.appendChild(b),e.items.forEach(a=>{let C=w(a);C&&b.appendChild(C)}),h.appendChild(d)}else{let d=w(e);d&&h.appendChild(d)}});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",c&&g.classList.add("btn","btn-primary"),h.appendChild(g),h}let u=l();y[0].appendChild(u);let v=E?.submit_config??m?.submit_config??null;return v&&u.addEventListener("submit",c=>{c.preventDefault();let h=Array.from(u.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),L=[];if(h.forEach(g=>{g&&typeof g._validateCheckboxGroup=="function"&&(g._validateCheckboxGroup()||g.querySelector('input[type="checkbox"]')&&L.push("Please select at least one option"))}),!u.checkValidity()){u.reportValidity(),m?.onSubmitResult&&m.onSubmitResult(null,new Error("Form validation failed"));return}let f=Array.from(u.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),w=[];if(f.forEach(g=>{if(g&&typeof g.validate=="function"){let e=g.validate();e&&e.length&&w.push(...e)}}),w.length){m?.onSubmitResult&&m.onSubmitResult(null,new Error(w.join("; ")));let g=f[0];g&&g.scrollIntoView({behavior:"smooth",block:"center"});return}if(m?.onSubmit){let g=I(u);m.onSubmit(g)}J(u,v,(g,e)=>{m?.onSubmitResult&&m.onSubmitResult(g,e)})}),{element:u,validate:()=>{let c=[];return u.querySelectorAll(":invalid").forEach(L=>{let f=L.validationMessage;c.push({element:L,message:f})}),c},getValues:()=>I(u),onSubmit:c=>{u.addEventListener("submit",h=>{h.preventDefault();let L=I(u);c(L,h)})}}}var z={renderForm:K};var ie=z,ce={FormsLib:z};0&&(module.exports={FormsLib});
|
package/dist/main.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function z(r,w,p){let b=w?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-avatar-wrapper",b&&m.classList.add("d-flex","align-items-center","gap-3");let d=document.createElement("img");d.className="voc-form-avatar-preview",d.alt=r.label||"avatar",b&&(d.classList.add("img-thumbnail","rounded-circle"),d.style.width=d.style.height="64px",d.style.objectFit="cover");let y=p!=null?String(p):r.default!==void 0&&r.default!==null?String(r.default):"";y?d.src=y:(d.src="",d.style.display="none");let c=document.createElement("input");c.type="file",c.accept=r.accept||"image/*",c.className="voc-form-avatar-input",b&&c.classList.add("form-control"),(r.key||r.name)&&(c.name=r.name||r.key,r.key&&(c.id=`voc-form-${r.key}`));let h=document.createElement("input");if(h.type="hidden",(r.key||r.name)&&(h.name=(r.name||r.key)+"_url"),h.value=y||"",c.addEventListener("change",C=>{let f=C.target;if(f.files&&f.files.length>0){let L=f.files[0],g=new FileReader;g.onload=()=>{d.src=String(g.result),d.style.display="",h.value=""},g.readAsDataURL(L)}}),b){let C=document.createElement("div");C.style.flex="1",C.appendChild(c),C.appendChild(h),m.appendChild(d),m.appendChild(C)}else m.appendChild(d),m.appendChild(c),m.appendChild(h);return m}function j(r,w,p){let b=w?.style==="bootstrap",m=document.createElement("div");if(m.className="voc-form-audio-select",!r.options||r.options.length===0)return m;let d=r.name||r.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,y;return Array.isArray(p)?y=p[0]:p!==void 0?y=p:r.default!==void 0&&(y=r.default),r.options.forEach((c,h)=>{let C=document.createElement("div");C.className="voc-form-audio-item",b&&C.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=d,f.value=c.value,f.className="voc-form-audio-radio",r.key&&(f.id=`voc-form-${r.key}-${h}`),r.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",y!==void 0&&(Array.isArray(y)?f.checked=y.includes(c.value):f.checked=String(y)===String(c.value));let L=()=>{f.checked?C.classList.add("selected"):C.classList.remove("selected")};f.addEventListener("change",()=>{m.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),L()}),f.checked&&C.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",b&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let l=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",b&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let s=document.createElementNS(n,"path");s.setAttribute("d","M8 5v14l11-7z"),s.setAttribute("fill","currentColor"),i.appendChild(s),t.appendChild(i),l=document.createElement("audio"),l.src=c.audio_link,l.preload="none",l.style.display="none";let o=u=>{for(;u.firstChild;)u.removeChild(u.firstChild)},A=()=>{let u="http://www.w3.org/2000/svg",F=document.createElementNS(u,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(u,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let u="http://www.w3.org/2000/svg",F=document.createElementNS(u,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(u,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=u=>{o(t),u?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!l)return;let u=m.querySelectorAll("audio");if(!l.paused&&!l.ended){l.pause(),l.currentTime=0;return}u.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),m.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),l.play()}catch(u){console.warn("audio play failed",u)}}),l.addEventListener("playing",()=>{C.classList.add("is-playing"),_(!0)});let H=()=>{C.classList.remove("is-playing"),_(!1)};l.addEventListener("pause",H),l.addEventListener("ended",H),e.appendChild(t),e.appendChild(l)}let v=document.createElement("div");v.className="voc-form-item-detail",v.style.display="flex",v.style.flexDirection="column",v.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let k=document.createElement("div");k.className="voc-form-item-description";let E=c.description||c.hint_text||"";E&&(k.textContent=E),v.appendChild(a),v.appendChild(k),e.appendChild(v),C.appendChild(e),a.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),C.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),m.appendChild(C)}),m}function W(r,w,p){let b=document.createElement("div");b.className="voc-form-table-wrapper";let m=w?.style==="bootstrap",d=document.createElement("input");d.type="hidden",d.name=r.name||r.key,r.key&&(d.id=`voc-form-${r.key}`),b.appendChild(d);let y=document.createElement("table");y.className="voc-form-table",m&&y.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),C=document.createElement("th");C.className="voc-form-table-drag-col",C.textContent="",h.appendChild(C),(r.fields||[]).forEach(n=>{let i=document.createElement("th");i.textContent=n.label||n.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),y.appendChild(c);let L=document.createElement("tbody");y.appendChild(L),b.appendChild(y);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",m&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),l=document.createElement("tr"),v=document.createElement("td");v.colSpan=(r.fields?r.fields.length:0)+1,v.appendChild(g),l.appendChild(v),e.appendChild(l),y.appendChild(e),b.appendChild(y);let a=[];function k(){d.value=JSON.stringify(a)}function E(n){let i=[];return r.fields.forEach(s=>{let o=n[s.key];if(s.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];s.required&&A.length===0&&i.push(`${s.label||s.key} is required`);return}s.required&&(o==null||String(o).trim()==="")&&i.push(`${s.label||s.key} is required`),s.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${s.label||s.key} must be a valid email`)),s.type==="number"&&o&&isNaN(Number(o))&&i.push(`${s.label||s.key} must be a number`),s.validation&&s.validation.regex&&o&&(new RegExp(s.validation.regex).test(String(o))||i.push(`${s.label||s.key} invalid format`))}),i}function t(){L.innerHTML="";let n=(i,s)=>{s.draggable=!0,s.addEventListener("mousedown",()=>{s.style.cursor="grabbing"}),s.addEventListener("mouseup",()=>{s.style.cursor="grab"}),s.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(s,10,10)}catch{}}),s.addEventListener("dragend",()=>{i.classList.remove("dragging"),s.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[u]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,u),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),k()})};a.forEach((i,s)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(s),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),n(o,N),r.fields.forEach(u=>{let F=document.createElement("td"),T,q=(u.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",m&&x.classList.add("form-control"),u.placeholder){let S=document.createElement("option");S.value="",S.textContent=u.placeholder,S.disabled=!0,(i[u.key]===void 0||i[u.key]===null||i[u.key]==="")&&(S.selected=!0),x.appendChild(S)}(u.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[u.key]!==void 0&&i[u.key]!==null?String(i[u.key]):"",u.required&&(x.required=!0),x.addEventListener("change",S=>{a[s][u.key]=S.target.value,k()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",m&&x.classList.add("form-check");let D=u.options||[];Array.isArray(a[s][u.key])||(a[s][u.key]=a[s][u.key]?[a[s][u.key]]:[]),D.forEach(S=>{let B=`voc-form-${r.key}-${u.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",m&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",m&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[s][u.key])&&a[s][u.key].includes(S.value),M.addEventListener("change",O=>{let K=O.target.checked;Array.isArray(a[s][u.key])||(a[s][u.key]=[]),K?a[s][u.key].includes(S.value)||a[s][u.key].push(S.value):a[s][u.key]=a[s][u.key].filter(Y=>Y!==S.value),k()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",m&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",m&&x.classList.add("form-check");let D=u.options||[];a[s][u.key]===void 0&&(a[s][u.key]=""),D.forEach(S=>{let B=`voc-form-${r.key}-${u.key}-${s}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",m&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",m&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${r.key}-${u.key}-${s}`,M.value=S.value,M.checked=a[s][u.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[s][u.key]=O.target.value,k())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",m&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[u.key]!==void 0&&i[u.key]!==null?String(i[u.key]):"",u.placeholder&&(x.placeholder=u.placeholder),u.required&&(x.required=!0),x.className="voc-form-table-cell",m&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[s][u.key]=D.target.value,k()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",m&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(s,1),t(),k()}),_.appendChild(H),o.appendChild(_),L.appendChild(o)})}return g.addEventListener("click",()=>{if(r.validation?.max_rows!==void 0&&a.length>=r.validation.max_rows)return;let n={};r.fields.forEach(i=>n[i.key]=""),a.push(n),t(),k()}),Array.isArray(p)&&p.length?a=p.map(n=>({...n})):r.default&&Array.isArray(r.default)&&(a=r.default.map(n=>({...n}))),t(),k(),b.validate=function(){let n=[];return a.forEach((i,s)=>{let o=E(i);o.length&&n.push(`Row ${s+1}: ${o.join("; ")}`)}),r.validation?.min_rows!==void 0&&a.length<r.validation.min_rows&&n.push(`At least ${r.validation.min_rows} rows required`),r.validation?.max_rows!==void 0&&a.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(i=>{let s=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(s.has(N)&&n.push(`Field ${i} must be unique (duplicate at row ${A+1})`),s.add(N))})}),n},b}async function Q(r){let p=new TextEncoder().encode(r),b=await crypto.subtle.digest("SHA-256",p);return Array.from(new Uint8Array(b)).map(d=>d.toString(16).padStart(2,"0")).join("")}async function X(r){let w=String(r||"").trim().toLowerCase();return w?`https://gravatar.com/avatar/${await Q(w)}?d=mp`:""}function G(r,w,p){let b=w?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-users";let d=document.createElement("div");if(d.className="voc-form-users-header",b&&d.classList.add("mb-2"),r.label){let e=document.createElement("div");if(e.className="voc-form-users-label",b&&e.classList.add("form-label"),e.textContent=r.label,r.required){let l=document.createElement("span");l.className="voc-form-required",l.textContent="*",e.appendChild(l)}d.appendChild(e)}if(r.description){let e=document.createElement("div");e.className="voc-form-users-description",b&&e.classList.add("form-text"),e.textContent=r.description,d.appendChild(e)}m.appendChild(d);let y=document.createElement("div");y.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",b&&c.classList.add("form-control","mb-2"),y.appendChild(c),m.appendChild(y),!r.options||r.options.length===0)return m;let h=document.createElement("div");h.className="voc-form-users-list",b&&h.classList.add("list-group");let C=r.name||r.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(p)?f=p:p!=null?f=[p]:Array.isArray(r.default)&&(f=r.default),r.options.forEach((e,l)=>{let v=document.createElement("div");v.className="voc-form-user-item",v.dataset.label=String(e.label||"").toLowerCase(),v.dataset.email=String(e.email||"").toLowerCase(),v.dataset.value=String(e.value||"").toLowerCase(),b&&v.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${C}[]`,a.value=e.value,a.className="voc-form-user-checkbox",r.key&&(a.id=`voc-form-${r.key}-${l}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(s=>String(s));a.checked=i.includes(String(e.value))}let k=document.createElement("img");k.className="voc-form-user-avatar",k.alt=e.label||String(e.value||"user"),k.style.width=k.style.height="40px",k.style.objectFit="cover",k.style.borderRadius="50%",k.src="",e.email&&X(e.email).then(i=>{i&&(k.src=i)}).catch(()=>{});let E=document.createElement("div");E.className="voc-form-user-info",E.style.display="flex",E.style.flexDirection="column",E.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=e.email||"",E.appendChild(t),E.appendChild(n),v.addEventListener("click",i=>{let s=i.target;s&&(s.closest("input")||s.closest("a")||s.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?v.classList.add("selected"):v.classList.remove("selected")}),a.checked&&v.classList.add("selected"),v.appendChild(a),v.appendChild(k),v.appendChild(E),h.appendChild(v)}),m.appendChild(h),r.required){let e=h.querySelectorAll('input[type="checkbox"]'),l=()=>{let v=Array.from(e).some(a=>a.checked);return e.forEach(a=>{v?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),v};e.forEach(v=>{v.addEventListener("change",l)}),m._validateCheckboxGroup=l,l()}let L=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){L.forEach(l=>l.style.setProperty("display","flex","important"));return}L.forEach(l=>{let v=l.dataset.label||"",a=l.dataset.email||"",k=l.dataset.value||"",E=v.includes(e)||a.includes(e)||k.includes(e);l.style.setProperty("display",E?"flex":"none","important")})};return c.addEventListener("input",g),m}function U(r,w,p){let b=w?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-timezone";let d=r.name||r.key||`timezone_${Math.random().toString(36).substr(2,6)}`,y=document.createElement("input");y.type="text",y.name=d,r.key&&(y.id=`voc-form-${r.key}`),y.className="voc-form-timezone-input",b&&y.classList.add("form-control"),r.placeholder&&(y.placeholder=r.placeholder||""),r.required&&(y.required=!0),r.width&&(y.style.width=r.width),p!=null?y.value=String(p):r.default!==void 0&&r.default!==null&&(y.value=String(r.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${r.key||Math.random().toString(36).substr(2,6)}`,y.setAttribute("list",c.id);let h=["UTC","Etc/UTC","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"];(r.options&&r.options.length?r.options.map(L=>String(L.value||L.label)):h).forEach(L=>{let g=document.createElement("option");g.value=L,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(y.addEventListener("blur",()=>{let L=(y.value||"").trim();if(!L)return;let g=Object.keys(f).find(e=>e.toLowerCase()===L.toLowerCase());g&&(y.value=f[g])}),r.description){let L=document.createElement("div");L.className="voc-form-timezone-description",b&&L.classList.add("form-text"),L.textContent=r.description,m.appendChild(L)}return m.appendChild(y),m.appendChild(c),m}function I(r,w=!0){let p=new FormData(r);if(w)return Z(p);let b={};return p.forEach((m,d)=>{let y=(m instanceof File,m);Object.prototype.hasOwnProperty.call(b,d)?Array.isArray(b[d])?b[d].push(y):b[d]=[b[d],y]:b[d]=y}),b}function Z(r){let w=new FormData;for(let[p,b]of r.entries()){if(b instanceof File){w.append(p,b);continue}let m;try{m=JSON.parse(b)}catch{m=null}Array.isArray(m)?m.length===0?w.append(p,"[]"):m.every(d=>typeof d=="object"&&d!==null)?m.forEach((d,y)=>{for(let[c,h]of Object.entries(d))w.append(`${p}[${y}][${c}]`,h)}):w.append(p,b):w.append(p,b)}return w}async function V(r,w,p){let b=w.url,m={"Content-Type":"application/json"};w?.api_token&&(m.Authorization=`Bearer ${w.api_token}`);let d=I(r);if(w?.additional_data)for(let[h,C]of Object.entries(w.additional_data))d.append(h,C);let y,c=d instanceof FormData;y={method:"POST",headers:{Authorization:`Bearer ${w.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?d:JSON.stringify(Object.fromEntries(d.entries()))};try{fetch(b,y).then(async h=>{let C=h.headers.get("content-type");if(!h.ok)try{let L=(await h.json())?.message;throw new Error(L??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return C&&C.includes("application/json")?h.json():h.text()}).then(h=>{p&&p(h,null)}).catch(h=>{p&&p(null,h)})}catch(h){p&&p(null,h)}}function J(r,w,p){let b=[];if(typeof r=="string"?b=Array.from(document.querySelectorAll(r)):b=[r],b.length===0)return null;function m(){let c=p?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=w.id;let C=document.createElement("h2");C.className="voc-form-title",c&&C.classList.add("mb-3"),C.textContent=w.form_name,h.appendChild(C);function f(e,l){l&&(l.min_length!==void 0&&(e.minLength=l.min_length),l.max_length!==void 0&&(e.maxLength=l.max_length),l.regex&&(e instanceof HTMLInputElement?e.pattern=l.regex:e.dataset.pattern=l.regex))}function L(e){if(!e.key&&!e.label)return null;let l=w.default_values||{},v=e.name||e.key,a=v?l[v]:void 0,k=document.createElement("div");if(k.className="voc-form-group",c&&k.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 n=document.createElement("span");n.className="voc-form-required",n.textContent="*",t.appendChild(n)}k.appendChild(t)}let E=null;switch(e.type){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((n,i)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),c&&s.classList.add("form-check"),s.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(s.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),e.required){let n=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let s=Array.from(n).some(o=>o.checked);return n.forEach(o=>{s?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),s};n.forEach(s=>{s.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),c&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),n.appendChild(i),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}E=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let n=e.default||a||"";if(n){let i=(n.match(/\n/g)||[]).length,s=80,o=n.split(`
|
|
2
|
-
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/
|
|
1
|
+
function z(s,L,p){let b=L?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-avatar-wrapper",b&&m.classList.add("d-flex","align-items-center","gap-3");let d=document.createElement("img");d.className="voc-form-avatar-preview",d.alt=s.label||"avatar",b&&(d.classList.add("img-thumbnail","rounded-circle"),d.style.width=d.style.height="64px",d.style.objectFit="cover");let y=p!=null?String(p):s.default!==void 0&&s.default!==null?String(s.default):"";y?d.src=y:(d.src="",d.style.display="none");let c=document.createElement("input");c.type="file",c.accept=s.accept||"image/*",c.className="voc-form-avatar-input",b&&c.classList.add("form-control"),(s.key||s.name)&&(c.name=s.name||s.key,s.key&&(c.id=`voc-form-${s.key}`));let h=document.createElement("input");if(h.type="hidden",(s.key||s.name)&&(h.name=(s.name||s.key)+"_url"),h.value=y||"",c.addEventListener("change",C=>{let f=C.target;if(f.files&&f.files.length>0){let w=f.files[0],g=new FileReader;g.onload=()=>{d.src=String(g.result),d.style.display="",h.value=""},g.readAsDataURL(w)}}),b){let C=document.createElement("div");C.style.flex="1",C.appendChild(c),C.appendChild(h),m.appendChild(d),m.appendChild(C)}else m.appendChild(d),m.appendChild(c),m.appendChild(h);return m}function j(s,L,p){let b=L?.style==="bootstrap",m=document.createElement("div");if(m.className="voc-form-audio-select",!s.options||s.options.length===0)return m;let d=s.name||s.key||`audio_select_${Math.random().toString(36).substr(2,6)}`,y;return Array.isArray(p)?y=p[0]:p!==void 0?y=p:s.default!==void 0&&(y=s.default),s.options.forEach((c,h)=>{let C=document.createElement("div");C.className="voc-form-audio-item",b&&C.classList.add("form-check");let f=document.createElement("input");f.type="radio",f.name=d,f.value=c.value,f.className="voc-form-audio-radio",s.key&&(f.id=`voc-form-${s.key}-${h}`),s.required&&h===0&&(f.required=!0),f.style.position="absolute",f.style.width="1px",f.style.height="1px",f.style.margin="0",f.style.padding="0",f.style.clip="rect(0 0 0 0)",f.style.clipPath="inset(50%)",f.style.overflow="hidden",f.style.border="0",y!==void 0&&(Array.isArray(y)?f.checked=y.includes(c.value):f.checked=String(y)===String(c.value));let w=()=>{f.checked?C.classList.add("selected"):C.classList.remove("selected")};f.addEventListener("change",()=>{m.querySelectorAll(".voc-form-audio-item").forEach(n=>n.classList.remove("selected")),w()}),f.checked&&C.classList.add("selected");let g=document.createElement("label");g.className="voc-form-audio-label",b&&g.classList.add("form-check-label"),g.htmlFor=f.id||"",g.textContent=c.label||c.value,g.tabIndex=0;let e=document.createElement("div");e.className="voc-form-audio-control";let l=null;if(c.audio_link){let t=document.createElement("button");t.type="button",t.className="voc-form-audio-play",b&&t.classList.add("btn","btn-sm","btn-outline-secondary"),t.setAttribute("aria-label",`Play ${c.label||c.value}`);let n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg");i.setAttribute("viewBox","0 0 24 24"),i.setAttribute("width","16"),i.setAttribute("height","16"),i.setAttribute("aria-hidden","true");let r=document.createElementNS(n,"path");r.setAttribute("d","M8 5v14l11-7z"),r.setAttribute("fill","currentColor"),i.appendChild(r),t.appendChild(i),l=document.createElement("audio"),l.src=c.audio_link,l.preload="none",l.style.display="none";let o=u=>{for(;u.firstChild;)u.removeChild(u.firstChild)},A=()=>{let u="http://www.w3.org/2000/svg",F=document.createElementNS(u,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(u,"path");return T.setAttribute("d","M8 5v14l11-7z"),T.setAttribute("fill","currentColor"),F.appendChild(T),F},N=()=>{let u="http://www.w3.org/2000/svg",F=document.createElementNS(u,"svg");F.setAttribute("viewBox","0 0 24 24"),F.setAttribute("width","16"),F.setAttribute("height","16"),F.setAttribute("aria-hidden","true");let T=document.createElementNS(u,"rect");return T.setAttribute("x","6"),T.setAttribute("y","6"),T.setAttribute("width","12"),T.setAttribute("height","12"),T.setAttribute("fill","currentColor"),F.appendChild(T),F};o(t),t.appendChild(A());let _=u=>{o(t),u?(t.appendChild(N()),t.setAttribute("aria-label",`Stop ${c.label||c.value}`)):(t.appendChild(A()),t.setAttribute("aria-label",`Play ${c.label||c.value}`))};t.addEventListener("click",()=>{try{if(!l)return;let u=m.querySelectorAll("audio");if(!l.paused&&!l.ended){l.pause(),l.currentTime=0;return}u.forEach(T=>{try{T.pause(),T.currentTime=0}catch{}}),m.querySelectorAll(".voc-form-audio-item").forEach(T=>T.classList.remove("is-playing")),l.play()}catch(u){console.warn("audio play failed",u)}}),l.addEventListener("playing",()=>{C.classList.add("is-playing"),_(!0)});let H=()=>{C.classList.remove("is-playing"),_(!1)};l.addEventListener("pause",H),l.addEventListener("ended",H),e.appendChild(t),e.appendChild(l)}let v=document.createElement("div");v.className="voc-form-item-detail",v.style.display="flex",v.style.flexDirection="column",v.style.gap="4px";let a=document.createElement("div");a.className="voc-form-item-top",a.style.display="flex",a.style.alignItems="center",a.style.gap="8px",a.appendChild(f),a.appendChild(g);let k=document.createElement("div");k.className="voc-form-item-description";let E=c.description||c.hint_text||"";E&&(k.textContent=E),v.appendChild(a),v.appendChild(k),e.appendChild(v),C.appendChild(e),a.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),C.addEventListener("click",t=>{let n=t.target;n&&n.closest(".voc-form-audio-play")||(f.checked=!0,f.dispatchEvent(new Event("change",{bubbles:!0})))}),m.appendChild(C)}),m}function W(s,L,p){let b=document.createElement("div");b.className="voc-form-table-wrapper";let m=L?.style==="bootstrap",d=document.createElement("input");d.type="hidden",d.name=s.name||s.key,s.key&&(d.id=`voc-form-${s.key}`),b.appendChild(d);let y=document.createElement("table");y.className="voc-form-table",m&&y.classList.add("table","table-bordered");let c=document.createElement("thead"),h=document.createElement("tr"),C=document.createElement("th");C.className="voc-form-table-drag-col",C.textContent="",h.appendChild(C),(s.fields||[]).forEach(n=>{let i=document.createElement("th");i.textContent=n.label||n.key,h.appendChild(i)});let f=document.createElement("th");f.textContent="Actions",h.appendChild(f),c.appendChild(h),y.appendChild(c);let w=document.createElement("tbody");y.appendChild(w),b.appendChild(y);let g=document.createElement("button");g.type="button",g.className="voc-form-table-add",m&&g.classList.add("btn","btn-secondary"),g.textContent="+Add";let e=document.createElement("tfoot"),l=document.createElement("tr"),v=document.createElement("td");v.colSpan=(s.fields?s.fields.length:0)+1,v.appendChild(g),l.appendChild(v),e.appendChild(l),y.appendChild(e),b.appendChild(y);let a=[];function k(){d.value=JSON.stringify(a)}function E(n){let i=[];return s.fields.forEach(r=>{let o=n[r.key];if(r.type==="checkbox"){let A=Array.isArray(o)?o:o?[o]:[];r.required&&A.length===0&&i.push(`${r.label||r.key} is required`);return}r.required&&(o==null||String(o).trim()==="")&&i.push(`${r.label||r.key} is required`),r.type==="email"&&o&&(/^\S+@\S+\.\S+$/.test(String(o))||i.push(`${r.label||r.key} must be a valid email`)),r.type==="number"&&o&&isNaN(Number(o))&&i.push(`${r.label||r.key} must be a number`),r.validation&&r.validation.regex&&o&&(new RegExp(r.validation.regex).test(String(o))||i.push(`${r.label||r.key} invalid format`))}),i}function t(){w.innerHTML="";let n=(i,r)=>{r.draggable=!0,r.addEventListener("mousedown",()=>{r.style.cursor="grabbing"}),r.addEventListener("mouseup",()=>{r.style.cursor="grab"}),r.addEventListener("dragstart",o=>{let A=Number(i.dataset.rowIndex);o.dataTransfer.setData("text/plain",String(A)),i.classList.add("dragging");try{o.dataTransfer?.setDragImage(r,10,10)}catch{}}),r.addEventListener("dragend",()=>{i.classList.remove("dragging"),r.style.cursor="grab"}),i.addEventListener("dragover",o=>{o.preventDefault();let A=o.currentTarget,N=A.getBoundingClientRect(),_=N.top+N.height/2,H=(o.clientY||o.y)>_;A.classList.remove("drag-over-top","drag-over-bottom"),H?(A.classList.add("drag-over-bottom"),A.dataset.dropPosition="after"):(A.classList.add("drag-over-top"),A.dataset.dropPosition="before")}),i.addEventListener("dragleave",o=>{let A=o.currentTarget;A.classList.remove("drag-over-top","drag-over-bottom"),delete A.dataset.dropPosition}),i.addEventListener("drop",o=>{o.preventDefault();let A=o.dataTransfer.getData("text/plain"),N=Number(o.currentTarget.dataset.rowIndex),_=Number(A),H=o.currentTarget.dataset.dropPosition||"before";if(isNaN(_)||isNaN(N))return;let[u]=a.splice(_,1),F=N;_<N&&(F=N-1);let T=H==="after"?F+1:F;a.splice(T,0,u),o.currentTarget.classList.remove("drag-over-top","drag-over-bottom"),delete o.currentTarget.dataset.dropPosition,t(),k()})};a.forEach((i,r)=>{let o=document.createElement("tr");o.dataset.rowIndex=String(r),o.classList.add("voc-form-table-row");let A=document.createElement("td");A.className="voc-form-table-drag-handle";let N=document.createElement("span");N.className="voc-form-drag-handle-icon",N.textContent="\u2630",N.style.cursor="grab",A.appendChild(N),o.appendChild(A),n(o,N),s.fields.forEach(u=>{let F=document.createElement("td"),T,q=(u.type||"text").toLowerCase();if(q==="select"){let x=document.createElement("select");if(x.className="voc-form-table-cell",m&&x.classList.add("form-control"),u.placeholder){let S=document.createElement("option");S.value="",S.textContent=u.placeholder,S.disabled=!0,(i[u.key]===void 0||i[u.key]===null||i[u.key]==="")&&(S.selected=!0),x.appendChild(S)}(u.options||[]).forEach(S=>{let B=document.createElement("option");B.value=S.value,B.textContent=S.label,x.appendChild(B)}),x.value=i[u.key]!==void 0&&i[u.key]!==null?String(i[u.key]):"",u.required&&(x.required=!0),x.addEventListener("change",S=>{a[r][u.key]=S.target.value,k()}),T=x}else if(q==="checkbox"){let x=document.createElement("div");x.className="voc-form-table-checkboxes",m&&x.classList.add("form-check");let D=u.options||[];Array.isArray(a[r][u.key])||(a[r][u.key]=a[r][u.key]?[a[r][u.key]]:[]),D.forEach(S=>{let B=`voc-form-${s.key}-${u.key}-${r}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-checkbox-item",m&&R.classList.add("form-check");let M=document.createElement("input");M.type="checkbox",M.className="voc-form-table-cell",m&&M.classList.add("form-check-input"),M.id=B,M.value=S.value,M.checked=Array.isArray(a[r][u.key])&&a[r][u.key].includes(S.value),M.addEventListener("change",O=>{let K=O.target.checked;Array.isArray(a[r][u.key])||(a[r][u.key]=[]),K?a[r][u.key].includes(S.value)||a[r][u.key].push(S.value):a[r][u.key]=a[r][u.key].filter(Y=>Y!==S.value),k()});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-checkbox-label",m&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else if(q==="radio"){let x=document.createElement("div");x.className="voc-form-table-radios",m&&x.classList.add("form-check");let D=u.options||[];a[r][u.key]===void 0&&(a[r][u.key]=""),D.forEach(S=>{let B=`voc-form-${s.key}-${u.key}-${r}-${S.value}`,R=document.createElement("div");R.className="voc-form-table-radio-item",m&&R.classList.add("form-check");let M=document.createElement("input");M.type="radio",M.className="voc-form-table-cell",m&&M.classList.add("form-check-input"),M.id=B,M.name=`voc-form-${s.key}-${u.key}-${r}`,M.value=S.value,M.checked=a[r][u.key]===S.value,M.addEventListener("change",O=>{O.target.checked&&(a[r][u.key]=O.target.value,k())});let $=document.createElement("label");$.htmlFor=B,$.className="voc-form-table-radio-label",m&&$.classList.add("form-check-label"),$.textContent=S.label,R.appendChild(M),R.appendChild($),x.appendChild(R)}),T=x}else{let x=document.createElement("input");q==="number"?x.type="number":q==="email"?x.type="email":q==="tel"?x.type="tel":q==="url"?x.type="url":q==="date"?x.type="date":x.type="text",x.value=i[u.key]!==void 0&&i[u.key]!==null?String(i[u.key]):"",u.placeholder&&(x.placeholder=u.placeholder),u.required&&(x.required=!0),x.className="voc-form-table-cell",m&&x.classList.add("form-control"),x.addEventListener("input",D=>{a[r][u.key]=D.target.value,k()}),T=x}F.appendChild(T),o.appendChild(F)});let _=document.createElement("td"),H=document.createElement("button");H.type="button",H.className="voc-form-table-remove",m&&H.classList.add("btn","btn-danger"),H.textContent="Remove",H.addEventListener("click",()=>{a.splice(r,1),t(),k()}),_.appendChild(H),o.appendChild(_),w.appendChild(o)})}return g.addEventListener("click",()=>{if(s.validation?.max_rows!==void 0&&a.length>=s.validation.max_rows)return;let n={};s.fields.forEach(i=>n[i.key]=""),a.push(n),t(),k()}),Array.isArray(p)&&p.length?a=p.map(n=>({...n})):s.default&&Array.isArray(s.default)&&(a=s.default.map(n=>({...n}))),t(),k(),b.validate=function(){let n=[];return a.forEach((i,r)=>{let o=E(i);o.length&&n.push(`Row ${r+1}: ${o.join("; ")}`)}),s.validation?.min_rows!==void 0&&a.length<s.validation.min_rows&&n.push(`At least ${s.validation.min_rows} rows required`),s.validation?.max_rows!==void 0&&a.length>s.validation.max_rows&&n.push(`No more than ${s.validation.max_rows} rows allowed`),s.validation?.unique_fields&&s.validation.unique_fields.length&&s.validation.unique_fields.forEach(i=>{let r=new Set;a.forEach((o,A)=>{let N=o[i];N!=null&&(r.has(N)&&n.push(`Field ${i} must be unique (duplicate at row ${A+1})`),r.add(N))})}),n},b}async function Q(s){let p=new TextEncoder().encode(s),b=await crypto.subtle.digest("SHA-256",p);return Array.from(new Uint8Array(b)).map(d=>d.toString(16).padStart(2,"0")).join("")}async function X(s){let L=String(s||"").trim().toLowerCase();return L?`https://gravatar.com/avatar/${await Q(L)}?d=mp`:""}function G(s,L,p){let b=L?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-users";let d=document.createElement("div");if(d.className="voc-form-users-header",b&&d.classList.add("mb-2"),s.label){let e=document.createElement("div");if(e.className="voc-form-users-label",b&&e.classList.add("form-label"),e.textContent=s.label,s.required){let l=document.createElement("span");l.className="voc-form-required",l.textContent="*",e.appendChild(l)}d.appendChild(e)}if(s.description){let e=document.createElement("div");e.className="voc-form-users-description",b&&e.classList.add("form-text"),e.textContent=s.description,d.appendChild(e)}m.appendChild(d);let y=document.createElement("div");y.className="voc-form-users-search-wrapper";let c=document.createElement("input");if(c.type="search",c.placeholder="Search users...",c.className="voc-form-users-search",b&&c.classList.add("form-control","mb-2"),y.appendChild(c),m.appendChild(y),!s.options||s.options.length===0)return m;let h=document.createElement("div");h.className="voc-form-users-list",b&&h.classList.add("list-group");let C=s.name||s.key||`users_${Math.random().toString(36).substr(2,6)}`,f=[];if(Array.isArray(p)?f=p:p!=null?f=[p]:Array.isArray(s.default)&&(f=s.default),s.options.forEach((e,l)=>{let v=document.createElement("div");v.className="voc-form-user-item",v.dataset.label=String(e.label||"").toLowerCase(),v.dataset.email=String(e.email||"").toLowerCase(),v.dataset.value=String(e.value||"").toLowerCase(),b&&v.classList.add("d-flex","align-items-center","gap-2");let a=document.createElement("input");if(a.type="checkbox",a.name=`${C}[]`,a.value=e.value,a.className="voc-form-user-checkbox",s.key&&(a.id=`voc-form-${s.key}-${l}`),a.style.position="absolute",a.style.width="1px",a.style.height="1px",a.style.margin="0",a.style.padding="0",a.style.clip="rect(0 0 0 0)",a.style.clipPath="inset(50%)",a.style.overflow="hidden",a.style.border="0",f&&Array.isArray(f)){let i=f.map(r=>String(r));a.checked=i.includes(String(e.value))}let k=document.createElement("img");k.className="voc-form-user-avatar",k.alt=e.label||String(e.value||"user"),k.style.width=k.style.height="40px",k.style.objectFit="cover",k.style.borderRadius="50%",k.src="",e.email&&X(e.email).then(i=>{i&&(k.src=i)}).catch(()=>{});let E=document.createElement("div");E.className="voc-form-user-info",E.style.display="flex",E.style.flexDirection="column",E.style.gap="2px";let t=document.createElement("div");t.className="voc-form-user-label",t.textContent=e.label||String(e.value);let n=document.createElement("small");n.className="voc-form-user-email",n.textContent=e.email||"",E.appendChild(t),E.appendChild(n),v.addEventListener("click",i=>{let r=i.target;r&&(r.closest("input")||r.closest("a")||r.closest("button"))||(a.checked=!a.checked,a.dispatchEvent(new Event("change",{bubbles:!0})))}),a.addEventListener("change",()=>{a.checked?v.classList.add("selected"):v.classList.remove("selected")}),a.checked&&v.classList.add("selected"),v.appendChild(a),v.appendChild(k),v.appendChild(E),h.appendChild(v)}),m.appendChild(h),s.required){let e=h.querySelectorAll('input[type="checkbox"]'),l=()=>{let v=Array.from(e).some(a=>a.checked);return e.forEach(a=>{v?a.setCustomValidity(""):a.setCustomValidity("At least one option must be selected.")}),v};e.forEach(v=>{v.addEventListener("change",l)}),m._validateCheckboxGroup=l,l()}let w=Array.from(h.querySelectorAll(".voc-form-user-item")),g=()=>{let e=String(c.value||"").trim().toLowerCase();if(!e){w.forEach(l=>l.style.setProperty("display","flex","important"));return}w.forEach(l=>{let v=l.dataset.label||"",a=l.dataset.email||"",k=l.dataset.value||"",E=v.includes(e)||a.includes(e)||k.includes(e);l.style.setProperty("display",E?"flex":"none","important")})};return c.addEventListener("input",g),m}function U(s,L,p){let b=L?.style==="bootstrap",m=document.createElement("div");m.className="voc-form-timezone";let d=s.name||s.key||`timezone_${Math.random().toString(36).substr(2,6)}`,y=document.createElement("input");y.type="text",y.name=d,s.key&&(y.id=`voc-form-${s.key}`),y.className="voc-form-timezone-input",b&&y.classList.add("form-control"),s.placeholder&&(y.placeholder=s.placeholder||""),s.required&&(y.required=!0),s.width&&(y.style.width=s.width),p!=null?y.value=String(p):s.default!==void 0&&s.default!==null&&(y.value=String(s.default));let c=document.createElement("datalist");c.id=`voc-form-timezone-list-${s.key||Math.random().toString(36).substr(2,6)}`,y.setAttribute("list",c.id),["UTC","Etc/UTC","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"].forEach(w=>{let g=document.createElement("option");g.value=w,c.appendChild(g)});let f={"Australia/ACT":"Australia/Sydney",ACT:"Australia/Sydney",Canberra:"Australia/Sydney"};if(y.addEventListener("blur",()=>{let w=(y.value||"").trim();if(!w)return;let g=Object.keys(f).find(e=>e.toLowerCase()===w.toLowerCase());g&&(y.value=f[g])}),s.description){let w=document.createElement("div");w.className="voc-form-timezone-description",b&&w.classList.add("form-text"),w.textContent=s.description,m.appendChild(w)}return m.appendChild(y),m.appendChild(c),m}function I(s,L=!0){let p=new FormData(s);if(L)return Z(p);let b={};return p.forEach((m,d)=>{let y=(m instanceof File,m);Object.prototype.hasOwnProperty.call(b,d)?Array.isArray(b[d])?b[d].push(y):b[d]=[b[d],y]:b[d]=y}),b}function Z(s){let L=new FormData;for(let[p,b]of s.entries()){if(b instanceof File){L.append(p,b);continue}let m;try{m=JSON.parse(b)}catch{m=null}Array.isArray(m)?m.length===0?L.append(p,"[]"):m.every(d=>typeof d=="object"&&d!==null)?m.forEach((d,y)=>{for(let[c,h]of Object.entries(d))L.append(`${p}[${y}][${c}]`,h)}):L.append(p,b):L.append(p,b)}return L}async function V(s,L,p){let b=L.url,m={"Content-Type":"application/json"};L?.api_token&&(m.Authorization=`Bearer ${L.api_token}`);let d=I(s);if(L?.additional_data)for(let[h,C]of Object.entries(L.additional_data))d.append(h,C);let y,c=d instanceof FormData;y={method:"POST",headers:{Authorization:`Bearer ${L.api_token}`,...c?{}:{"Content-Type":"application/json"},Accept:"application/json"},body:c?d:JSON.stringify(Object.fromEntries(d.entries()))};try{fetch(b,y).then(async h=>{let C=h.headers.get("content-type");if(!h.ok)try{let w=(await h.json())?.message;throw new Error(w??"Their was an error submitting the form. Check your form and try again.")}catch(f){throw new Error(f.message)}return C&&C.includes("application/json")?h.json():h.text()}).then(h=>{p&&p(h,null)}).catch(h=>{p&&p(null,h)})}catch(h){p&&p(null,h)}}function J(s,L,p){let b=[];if(typeof s=="string"?b=Array.from(document.querySelectorAll(s)):b=[s],b.length===0)return null;function m(){let c=p?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),c&&h.classList.add("needs-validation"),h.id=L.id;let C=document.createElement("h2");C.className="voc-form-title",c&&C.classList.add("mb-3"),C.textContent=L.form_name,h.appendChild(C);function f(e,l){l&&(l.min_length!==void 0&&(e.minLength=l.min_length),l.max_length!==void 0&&(e.maxLength=l.max_length),l.regex&&(e instanceof HTMLInputElement?e.pattern=l.regex:e.dataset.pattern=l.regex))}function w(e){if(!e.key&&!e.label)return null;let l=L.default_values||{},v=e.name||e.key,a=v?l[v]:void 0,k=document.createElement("div");if(k.className="voc-form-group",c&&k.classList.add("mb-3"),e.label&&e.type!=="users"){let t=document.createElement("label");if(t.classList.add("voc-form-label"),c&&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 n=document.createElement("span");n.className="voc-form-required",n.textContent="*",t.appendChild(n)}k.appendChild(t)}let E=null;switch(e.type){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((n,i)=>{let r=document.createElement("label");r.classList.add("voc-form-checkbox-label"),c&&r.classList.add("form-check"),r.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(r.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),c&&o.classList.add("form-check-input"),o.name=`${e.name||e.key||""}[]`,o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),r.appendChild(o),r.appendChild(document.createTextNode(n.label)),t.appendChild(r)}),e.required){let n=t.querySelectorAll('input[type="checkbox"]'),i=()=>{let r=Array.from(n).some(o=>o.checked);return n.forEach(o=>{r?o.setCustomValidity(""):o.setCustomValidity("At least one option must be selected.")}),r};n.forEach(r=>{r.addEventListener("change",i)}),t._validateCheckboxGroup=i,i()}}else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),c&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let i=document.createElement("input");i.type="checkbox",i.classList.add("voc-form-checkbox"),(e.key||e.name)&&(i.name=e.name||e.key,e.key&&(i.id=`voc-form-${e.key}`)),c&&i.classList.add("form-check-input"),e.required&&(i.required=!0),a!==void 0?i.checked=!!a:e.default&&(i.checked=!!e.default),n.appendChild(i),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}E=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default));let n=e.default||a||"";if(n){let i=(n.match(/\n/g)||[]).length,r=80,o=n.split(`
|
|
2
|
+
`).reduce((_,H)=>Math.max(_,H.length),0),A=Math.ceil(o/r)||1,N=Math.max(2,i+A);t.rows=N,t.style.resize="vertical"}e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),E=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),c&&t.classList.add("form-select"),c&&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 n=document.createElement("option");n.value="",n.textContent=e.placeholder,n.disabled=!0,n.selected=!0,t.appendChild(n)}e.required&&(t.required=!0),e.options&&e.options.forEach(n=>{let i=document.createElement("option");i.value=n.value,i.textContent=n.label,Array.isArray(a)?a.includes(n.value)&&(i.selected=!0):a!==void 0?a===n.value&&(i.selected=!0):e.default===n.value&&(i.selected=!0),t.appendChild(i)}),e.width&&(t.style.width=e.width),E=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((n,i)=>{let r=document.createElement("label");r.classList.add("voc-form-radio-label"),c&&r.classList.add("form-check"),r.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(r.style.width=e.width);let o=document.createElement("input");o.type="radio",o.classList.add("voc-form-radio"),c&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${i}`),Array.isArray(a)?a.includes(n.value)&&(o.checked=!0):a!==void 0?a===n.value&&(o.checked=!0):e.default===n.value&&(o.checked=!0),r.appendChild(o),r.appendChild(document.createTextNode(n.label)),t.appendChild(r)}),E=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let n=document.createElement("input");n.type="file",n.classList.add("voc-form-file"),c&&n.classList.add("form-control"),(e.key||e.name)&&(n.name=e.name||e.key,e.key&&(n.id=`voc-form-${e.key}`)),e.width&&(n.style.width=e.width),e.required&&(n.required=!0),e.accept&&(n.accept=e.accept),e.multiple&&(n.multiple=!0),t.appendChild(n),E=t;break}case"avatar":{E=z(e,p||{},a);break}case"table":{E=W(e,p||{},a);break}case"users":{E=G(e,p||{},a);break}case"timezone":{E=U(e,p||{},a);break}case"audio_select":{E=j(e,p||{},a);break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),c&&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),a!=null?t.value=String(a):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),f(t,e.validation),E=t;break}}if(E&&k.appendChild(E),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,k.appendChild(t)}return k}L.fields.forEach(e=>{if(e.type==="group"&&"items"in e){let l=e;if(c){let v=document.createElement("div");v.className="card voc-form-group-card mb-3";let a=l.label||l.header?.title,k=l.description||l.header?.description;if(a||k){let t=document.createElement("div");if(t.className="card-header voc-form-group-head",a){let n=document.createElement("h5");n.className="mb-0 voc-form-group-label",n.textContent=a,t.appendChild(n)}if(k){let n=document.createElement("p");n.className="mb-0 voc-form-group-description",n.textContent=k,t.appendChild(n)}v.appendChild(t)}let E=document.createElement("div");E.className="card-body voc-form-group-body",l.items.forEach(t=>{if(t.type==="row"&&"items"in t){let n=t,i=document.createElement("div");if(i.className="voc-form-group voc-form-row mb-3",n.label){let o=document.createElement("h6");o.className="voc-form-row-label",o.textContent=n.label,i.appendChild(o)}let r=document.createElement("div");r.className="voc-form-row-items "+(n.direction||"horizontal"),n.items.forEach(o=>{let A=w(o);A&&r.appendChild(A)}),i.appendChild(r),E.appendChild(i)}else{let n=w(t);n&&E.appendChild(n)}}),v.appendChild(E),h.appendChild(v)}else{let v=document.createElement("div");v.className="voc-form-group voc-form-group-wrapper",c&&v.classList.add("mb-3");let a=l.label||l.header?.title,k=l.description||l.header?.description;if(a||k){let E=document.createElement("div");if(E.className="voc-form-group-head",a){let t=document.createElement("h3");t.className="voc-form-group-label",t.textContent=a,E.appendChild(t)}if(k){let t=document.createElement("p");t.className="voc-form-group-description",t.textContent=k,E.appendChild(t)}v.appendChild(E)}l.items.forEach(E=>{if(E.type==="row"&&"items"in E){let t=E,n=document.createElement("div");if(n.className="voc-form-group voc-form-row",c&&n.classList.add("mb-3"),t.label){let r=document.createElement("h4");r.className="voc-form-row-label",r.textContent=t.label,n.appendChild(r)}let i=document.createElement("div");i.className="voc-form-row-items "+(t.direction||"horizontal"),t.items.forEach(r=>{let o=w(r);o&&i.appendChild(o)}),n.appendChild(i),v.appendChild(n)}else{let t=w(E);t&&v.appendChild(t)}}),h.appendChild(v)}return}if(e.type==="row"&&"items"in e){let l=document.createElement("div");if(l.className="voc-form-group voc-form-row",c&&l.classList.add("mb-3"),e.label){let a=document.createElement("h3");a.className="voc-form-row-label",a.textContent=e.label,l.appendChild(a)}if(e.description){let a=document.createElement("p");a.className="voc-form-row-description",a.textContent=e.description,l.appendChild(a)}let v=document.createElement("div");v.className="voc-form-row-items "+(e.direction||"horizontal"),l.appendChild(v),e.items.forEach(a=>{let k=w(a);k&&v.appendChild(k)}),h.appendChild(l)}else{let l=w(e);l&&h.appendChild(l)}});let g=document.createElement("button");return g.type="submit",g.className="voc-form-submit",g.textContent="Submit",c&&g.classList.add("btn","btn-primary"),h.appendChild(g),h}let d=m();b[0].appendChild(d);let y=L?.submit_config??p?.submit_config??null;return y&&d.addEventListener("submit",c=>{c.preventDefault();let h=Array.from(d.querySelectorAll(".voc-form-checkbox-group, .voc-form-users")),C=[];if(h.forEach(g=>{g&&typeof g._validateCheckboxGroup=="function"&&(g._validateCheckboxGroup()||g.querySelector('input[type="checkbox"]')&&C.push("Please select at least one option"))}),!d.checkValidity()){d.reportValidity(),p?.onSubmitResult&&p.onSubmitResult(null,new Error("Form validation failed"));return}let f=Array.from(d.querySelectorAll(" .voc-form-table-wrapper, .voc-form-table-wrapper")),w=[];if(f.forEach(g=>{if(g&&typeof g.validate=="function"){let e=g.validate();e&&e.length&&w.push(...e)}}),w.length){p?.onSubmitResult&&p.onSubmitResult(null,new Error(w.join("; ")));let g=f[0];g&&g.scrollIntoView({behavior:"smooth",block:"center"});return}if(p?.onSubmit){let g=I(d);p.onSubmit(g)}V(d,y,(g,e)=>{p?.onSubmitResult&&p.onSubmitResult(g,e)})}),{element:d,validate:()=>{let c=[];return d.querySelectorAll(":invalid").forEach(C=>{let f=C.validationMessage;c.push({element:C,message:f})}),c},getValues:()=>I(d),onSubmit:c=>{d.addEventListener("submit",h=>{h.preventDefault();let C=I(d);c(C,h)})}}}var P={renderForm:J};var ge=P,Ee={FormsLib:P};export{ge as FormsLib,Ee as default};
|