voc-lib-js 1.0.12 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.d.mts CHANGED
@@ -36,8 +36,22 @@ type FormData = {
36
36
  id: string;
37
37
  code: string;
38
38
  form_name: string;
39
+ default_values?: Record<string, any>;
39
40
  fields: Field[];
40
41
  };
42
+ type SubmitConfig = {
43
+ api_endpoint?: string;
44
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
45
+ api_key?: string;
46
+ headers?: Record<string, string>;
47
+ additional_data?: Record<string, any> | FormData;
48
+ contentType?: string | null;
49
+ credentials?: "omit" | "same-origin" | "include";
50
+ timeoutMs?: number;
51
+ signal?: AbortSignal;
52
+ responseType?: "json" | "text" | "blob" | "arrayBuffer";
53
+ retries?: number;
54
+ };
41
55
  interface RenderedForm {
42
56
  element: HTMLFormElement;
43
57
  validate: () => Array<{
@@ -49,8 +63,10 @@ interface RenderedForm {
49
63
  }
50
64
  declare function renderForm(element: string | HTMLElement, data: FormData, options?: {
51
65
  onSubmit?: (result: any, error?: any) => void;
66
+ onSubmitResult?: (response: any, error: Error | null) => void;
52
67
  enableAutoSubmit?: boolean;
53
68
  style?: "bootstrap" | undefined | null;
69
+ submitConfig?: SubmitConfig;
54
70
  }): RenderedForm | null;
55
71
 
56
72
  declare const FormsLib: {
package/dist/main.d.ts CHANGED
@@ -36,8 +36,22 @@ type FormData = {
36
36
  id: string;
37
37
  code: string;
38
38
  form_name: string;
39
+ default_values?: Record<string, any>;
39
40
  fields: Field[];
40
41
  };
42
+ type SubmitConfig = {
43
+ api_endpoint?: string;
44
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
45
+ api_key?: string;
46
+ headers?: Record<string, string>;
47
+ additional_data?: Record<string, any> | FormData;
48
+ contentType?: string | null;
49
+ credentials?: "omit" | "same-origin" | "include";
50
+ timeoutMs?: number;
51
+ signal?: AbortSignal;
52
+ responseType?: "json" | "text" | "blob" | "arrayBuffer";
53
+ retries?: number;
54
+ };
41
55
  interface RenderedForm {
42
56
  element: HTMLFormElement;
43
57
  validate: () => Array<{
@@ -49,8 +63,10 @@ interface RenderedForm {
49
63
  }
50
64
  declare function renderForm(element: string | HTMLElement, data: FormData, options?: {
51
65
  onSubmit?: (result: any, error?: any) => void;
66
+ onSubmitResult?: (response: any, error: Error | null) => void;
52
67
  enableAutoSubmit?: boolean;
53
68
  style?: "bootstrap" | undefined | null;
69
+ submitConfig?: SubmitConfig;
54
70
  }): RenderedForm | null;
55
71
 
56
72
  declare const FormsLib: {
@@ -1 +1 @@
1
- "use strict";var VocLibJs=(()=>{var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var T=(m,s)=>{for(var b in s)g(m,b,{get:s[b],enumerable:!0})},M=(m,s,b,i)=>{if(s&&typeof s=="object"||typeof s=="function")for(let h of F(s))!C.call(m,h)&&h!==b&&g(m,h,{get:()=>s[h],enumerable:!(i=w(s,h))||i.enumerable});return m};var q=m=>M(g({},"__esModule",{value:!0}),m);var D={};T(D,{FormsLib:()=>H,default:()=>N});function k(m,s=!0){let b=new FormData(m);if(s)return b;let i={};return b.forEach((h,d)=>{let r=(h instanceof File,h);Object.prototype.hasOwnProperty.call(i,d)?Array.isArray(i[d])?i[d].push(r):i[d]=[i[d],r]:i[d]=r}),i}function x(m,s,b){let i=[];if(typeof m=="string"?i=Array.from(document.querySelectorAll(m)):i=[m],i.length===0)return null;function h(){let r=b?.style==="bootstrap",p=document.createElement("form");p.classList.add("voc-form"),r&&p.classList.add("needs-validation"),p.id=s.id;let y=document.createElement("h2");y.textContent=s.form_name,p.appendChild(y);function f(e,a){a&&(a.min_length!==void 0&&(e.minLength=a.min_length),a.max_length!==void 0&&(e.maxLength=a.max_length),a.regex&&(e instanceof HTMLInputElement?e.pattern=a.regex:e.dataset.pattern=a.regex))}function L(e){if(!e.key&&!e.label)return null;let a=document.createElement("div");if(a.className="voc-form-group",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),r&&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?" *":""),a.appendChild(t)}let u=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)e.options.forEach((n,c)=>{let l=document.createElement("label");l.classList.add("voc-form-checkbox-label"),r&&l.classList.add("form-check"),l.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(l.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.required&&(o.required=!0),e.default===n.value&&(o.checked=!0),l.appendChild(o),l.appendChild(document.createTextNode(n.label)),t.appendChild(l)});else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),r&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),r&&c.classList.add("form-check-input"),e.required&&(c.required=!0),e.default&&(c.checked=!!e.default),n.appendChild(c),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}u=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),r&&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),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),u=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),r&&t.classList.add("form-select"),(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 c=document.createElement("option");c.value=n.value,c.textContent=n.label,e.default===n.value&&(c.selected=!0),t.appendChild(c)}),e.width&&(t.style.width=e.width),u=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,c)=>{let l=document.createElement("label");l.classList.add("voc-form-radio-label"),r&&l.classList.add("form-check"),l.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(l.style.width=e.width);let o=document.createElement("input");o.type="radio",o.classList.add("voc-form-radio"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.default===n.value&&(o.checked=!0),l.appendChild(o),l.appendChild(document.createTextNode(n.label)),t.appendChild(l)}),u=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"),r&&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),u=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),r&&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),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),u=t;break}}if(u&&a.appendChild(u),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,a.appendChild(t)}return a}s.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let a=document.createElement("div");if(a.className="voc-form-group voc-form-row",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("h3");t.className="voc-form-row-label",t.textContent=e.label,a.appendChild(t)}if(e.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=e.description,a.appendChild(t)}let u=document.createElement("div");u.className="voc-form-row-items "+(e.direction||"horizontal"),a.appendChild(u),e.items.forEach(t=>{let n=L(t);n&&u.appendChild(n)}),p.appendChild(a)}else{let a=L(e);a&&p.appendChild(a)}});let v=document.createElement("button");return v.type="submit",v.className="voc-form-submit",v.textContent="Submit",r&&v.classList.add("btn","btn-primary"),p.appendChild(v),p}let d=h();return i[0].appendChild(d),{element:d,validate:()=>{let r=[];return d.querySelectorAll(":invalid").forEach(y=>{let f=y.validationMessage;r.push({element:y,message:f})}),r},getValues:()=>k(d),onSubmit:r=>{d.addEventListener("submit",p=>{p.preventDefault();let y=k(d);r(y,p)})}}}var E={renderForm:x};var H=E,N={FormsLib:E};return q(D);})();
1
+ "use strict";var VocLibJs=(()=>{var F=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var A=(b,o)=>{for(var m in o)F(b,m,{get:o[m],enumerable:!0})},M=(b,o,m,y)=>{if(o&&typeof o=="object"||typeof o=="function")for(let v of S(o))!D.call(b,v)&&v!==m&&F(b,v,{get:()=>o[v],enumerable:!(y=R(o,v))||y.enumerable});return b};var _=b=>M(F({},"__esModule",{value:!0}),b);var j={};A(j,{FormsLib:()=>H,default:()=>q});function x(b,o=!0){let m=new FormData(b);if(o)return m;let y={};return m.forEach((v,l)=>{let i=(v instanceof File,v);Object.prototype.hasOwnProperty.call(y,l)?Array.isArray(y[l])?y[l].push(i):y[l]=[y[l],i]:y[l]=i}),y}async function T(b,o,m){let y=o.api_endpoint||"https://localhost.vocphone.com/v2/voc-form-submit",v=o.method||"POST",l=x(b),i,f=!1,h=o.additional_data,k=(n,r)=>{Object.keys(r).forEach(c=>{let u=r[c];Array.isArray(u)?u.forEach(t=>n.append(c,t)):u instanceof File?n.append(c,u):u!=null&&n.append(c,String(u))})};if(l instanceof FormData||h instanceof FormData){f=!0;let n=new FormData;l instanceof FormData?l.forEach((r,c)=>n.append(c,r)):typeof l=="object"&&l!==null&&k(n,l),h instanceof FormData?h.forEach((r,c)=>n.append(c,r)):typeof h=="object"&&h!==null&&k(n,h),i=n}else{let n={};typeof l=="object"&&l!==null&&Object.assign(n,l),typeof h=="object"&&h!==null&&Object.assign(n,h),i=JSON.stringify(n)}let E=Object.assign({},o.headers||{});o.api_key&&!E.Authorization&&!E.authorization&&(E.Authorization=`Bearer ${o.api_key}`),f||(o.contentType===void 0?E["Content-Type"]=E["Content-Type"]||"application/json":o.contentType!==null&&(E["Content-Type"]=o.contentType));let w=new AbortController,e=o.signal||w.signal,s;o.timeoutMs&&o.timeoutMs>0&&(s=setTimeout(()=>w.abort(),o.timeoutMs));try{let n=await fetch(y,{method:v,headers:E,body:i,credentials:o.credentials,signal:e});s&&clearTimeout(s);let r=o.responseType||"json",c=null;if(!n.ok){try{c=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{c=await n.text().catch(()=>null)}let u=new Error(`HTTP error ${n.status}`);return u.status=n.status,u.body=c,m&&m(null,u),Promise.resolve()}try{c=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{c=await n.text().catch(()=>null)}return m&&m(c,null),c}catch(n){let r;return n instanceof DOMException&&n.name==="AbortError"?r=new Error("Request aborted (timeout or cancelled)"):n instanceof TypeError&&n.message==="Failed to fetch"?r=new Error("Network or CORS error: Unable to reach the server or CORS policy blocked the request."):n instanceof Error?r=n:r=new Error(String(n)),m&&m(null,r),Promise.reject(r)}finally{s&&clearTimeout(s)}}function C(b,o,m){let y=[];if(typeof b=="string"?y=Array.from(document.querySelectorAll(b)):y=[b],y.length===0)return null;function v(){let i=m?.style==="bootstrap",f=document.createElement("form");f.classList.add("voc-form"),i&&f.classList.add("needs-validation"),f.id=o.id;let h=document.createElement("h2");h.textContent=o.form_name,f.appendChild(h);function k(e,s){s&&(s.min_length!==void 0&&(e.minLength=s.min_length),s.max_length!==void 0&&(e.maxLength=s.max_length),s.regex&&(e instanceof HTMLInputElement?e.pattern=s.regex:e.dataset.pattern=s.regex))}function E(e){if(!e.key&&!e.label)return null;let s=o.default_values||{},n=e.name||e.key,r=n?s[n]:void 0,c=document.createElement("div");if(c.className="voc-form-group",i&&c.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),i&&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?" *":""),c.appendChild(t)}let u=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)e.options.forEach((a,p)=>{let g=document.createElement("label");g.classList.add("voc-form-checkbox-label"),i&&g.classList.add("form-check"),g.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(g.style.width=e.width);let d=document.createElement("input");d.type="checkbox",d.classList.add("voc-form-checkbox"),i&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${p}`),e.required&&(d.required=!0),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),g.appendChild(d),g.appendChild(document.createTextNode(a.label)),t.appendChild(g)});else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),i&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let p=document.createElement("input");p.type="checkbox",p.classList.add("voc-form-checkbox"),(e.key||e.name)&&(p.name=e.name||e.key,e.key&&(p.id=`voc-form-${e.key}`)),i&&p.classList.add("form-check-input"),e.required&&(p.required=!0),r!==void 0?p.checked=!!r:e.default&&(p.checked=!!e.default),a.appendChild(p),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}u=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),i&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),u=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),i&&t.classList.add("form-select"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let p=document.createElement("option");p.value=a.value,p.textContent=a.label,Array.isArray(r)?r.includes(a.value)&&(p.selected=!0):r!==void 0?r===a.value&&(p.selected=!0):e.default===a.value&&(p.selected=!0),t.appendChild(p)}),e.width&&(t.style.width=e.width),u=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,p)=>{let g=document.createElement("label");g.classList.add("voc-form-radio-label"),i&&g.classList.add("form-check"),g.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(g.style.width=e.width);let d=document.createElement("input");d.type="radio",d.classList.add("voc-form-radio"),i&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${p}`),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),g.appendChild(d),g.appendChild(document.createTextNode(a.label)),t.appendChild(g)}),u=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),i&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),u=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),i&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),u=t;break}}if(u&&c.appendChild(u),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,c.appendChild(t)}return c}o.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let s=document.createElement("div");if(s.className="voc-form-group voc-form-row",i&&s.classList.add("mb-3"),e.label){let r=document.createElement("h3");r.className="voc-form-row-label",r.textContent=e.label,s.appendChild(r)}if(e.description){let r=document.createElement("p");r.className="voc-form-row-description",r.textContent=e.description,s.appendChild(r)}let n=document.createElement("div");n.className="voc-form-row-items "+(e.direction||"horizontal"),s.appendChild(n),e.items.forEach(r=>{let c=E(r);c&&n.appendChild(c)}),f.appendChild(s)}else{let s=E(e);s&&f.appendChild(s)}});let w=document.createElement("button");return w.type="submit",w.className="voc-form-submit",w.textContent="Submit",i&&w.classList.add("btn","btn-primary"),f.appendChild(w),f}let l=v();return y[0].appendChild(l),m&&m.submitConfig&&l.addEventListener("submit",i=>{i.preventDefault(),T(l,m.submitConfig,(f,h)=>{m.onSubmitResult&&m.onSubmitResult(f,h)})}),{element:l,validate:()=>{let i=[];return l.querySelectorAll(":invalid").forEach(h=>{let k=h.validationMessage;i.push({element:h,message:k})}),i},getValues:()=>x(l),onSubmit:i=>{l.addEventListener("submit",f=>{f.preventDefault();let h=x(l);i(h,f)})}}}var L={renderForm:C};var H=L,q={FormsLib:L};return _(j);})();
package/dist/main.js CHANGED
@@ -1 +1 @@
1
- "use strict";var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var T=(m,s)=>{for(var b in s)g(m,b,{get:s[b],enumerable:!0})},M=(m,s,b,i)=>{if(s&&typeof s=="object"||typeof s=="function")for(let h of F(s))!C.call(m,h)&&h!==b&&g(m,h,{get:()=>s[h],enumerable:!(i=w(s,h))||i.enumerable});return m};var q=m=>M(g({},"__esModule",{value:!0}),m);var D={};T(D,{FormsLib:()=>H,default:()=>N});module.exports=q(D);function k(m,s=!0){let b=new FormData(m);if(s)return b;let i={};return b.forEach((h,d)=>{let r=(h instanceof File,h);Object.prototype.hasOwnProperty.call(i,d)?Array.isArray(i[d])?i[d].push(r):i[d]=[i[d],r]:i[d]=r}),i}function x(m,s,b){let i=[];if(typeof m=="string"?i=Array.from(document.querySelectorAll(m)):i=[m],i.length===0)return null;function h(){let r=b?.style==="bootstrap",p=document.createElement("form");p.classList.add("voc-form"),r&&p.classList.add("needs-validation"),p.id=s.id;let y=document.createElement("h2");y.textContent=s.form_name,p.appendChild(y);function f(e,a){a&&(a.min_length!==void 0&&(e.minLength=a.min_length),a.max_length!==void 0&&(e.maxLength=a.max_length),a.regex&&(e instanceof HTMLInputElement?e.pattern=a.regex:e.dataset.pattern=a.regex))}function L(e){if(!e.key&&!e.label)return null;let a=document.createElement("div");if(a.className="voc-form-group",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),r&&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?" *":""),a.appendChild(t)}let u=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)e.options.forEach((n,c)=>{let l=document.createElement("label");l.classList.add("voc-form-checkbox-label"),r&&l.classList.add("form-check"),l.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(l.style.width=e.width);let o=document.createElement("input");o.type="checkbox",o.classList.add("voc-form-checkbox"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.required&&(o.required=!0),e.default===n.value&&(o.checked=!0),l.appendChild(o),l.appendChild(document.createTextNode(n.label)),t.appendChild(l)});else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),r&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),r&&c.classList.add("form-check-input"),e.required&&(c.required=!0),e.default&&(c.checked=!!e.default),n.appendChild(c),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}u=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),r&&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),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),u=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),r&&t.classList.add("form-select"),(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 c=document.createElement("option");c.value=n.value,c.textContent=n.label,e.default===n.value&&(c.selected=!0),t.appendChild(c)}),e.width&&(t.style.width=e.width),u=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,c)=>{let l=document.createElement("label");l.classList.add("voc-form-radio-label"),r&&l.classList.add("form-check"),l.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(l.style.width=e.width);let o=document.createElement("input");o.type="radio",o.classList.add("voc-form-radio"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.default===n.value&&(o.checked=!0),l.appendChild(o),l.appendChild(document.createTextNode(n.label)),t.appendChild(l)}),u=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"),r&&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),u=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),r&&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),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),u=t;break}}if(u&&a.appendChild(u),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,a.appendChild(t)}return a}s.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let a=document.createElement("div");if(a.className="voc-form-group voc-form-row",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("h3");t.className="voc-form-row-label",t.textContent=e.label,a.appendChild(t)}if(e.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=e.description,a.appendChild(t)}let u=document.createElement("div");u.className="voc-form-row-items "+(e.direction||"horizontal"),a.appendChild(u),e.items.forEach(t=>{let n=L(t);n&&u.appendChild(n)}),p.appendChild(a)}else{let a=L(e);a&&p.appendChild(a)}});let v=document.createElement("button");return v.type="submit",v.className="voc-form-submit",v.textContent="Submit",r&&v.classList.add("btn","btn-primary"),p.appendChild(v),p}let d=h();return i[0].appendChild(d),{element:d,validate:()=>{let r=[];return d.querySelectorAll(":invalid").forEach(y=>{let f=y.validationMessage;r.push({element:y,message:f})}),r},getValues:()=>k(d),onSubmit:r=>{d.addEventListener("submit",p=>{p.preventDefault();let y=k(d);r(y,p)})}}}var E={renderForm:x};var H=E,N={FormsLib:E};0&&(module.exports={FormsLib});
1
+ "use strict";var F=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var A=(b,o)=>{for(var m in o)F(b,m,{get:o[m],enumerable:!0})},M=(b,o,m,y)=>{if(o&&typeof o=="object"||typeof o=="function")for(let v of S(o))!D.call(b,v)&&v!==m&&F(b,v,{get:()=>o[v],enumerable:!(y=R(o,v))||y.enumerable});return b};var _=b=>M(F({},"__esModule",{value:!0}),b);var j={};A(j,{FormsLib:()=>H,default:()=>q});module.exports=_(j);function x(b,o=!0){let m=new FormData(b);if(o)return m;let y={};return m.forEach((v,l)=>{let i=(v instanceof File,v);Object.prototype.hasOwnProperty.call(y,l)?Array.isArray(y[l])?y[l].push(i):y[l]=[y[l],i]:y[l]=i}),y}async function T(b,o,m){let y=o.api_endpoint||"https://localhost.vocphone.com/v2/voc-form-submit",v=o.method||"POST",l=x(b),i,f=!1,h=o.additional_data,k=(n,r)=>{Object.keys(r).forEach(c=>{let u=r[c];Array.isArray(u)?u.forEach(t=>n.append(c,t)):u instanceof File?n.append(c,u):u!=null&&n.append(c,String(u))})};if(l instanceof FormData||h instanceof FormData){f=!0;let n=new FormData;l instanceof FormData?l.forEach((r,c)=>n.append(c,r)):typeof l=="object"&&l!==null&&k(n,l),h instanceof FormData?h.forEach((r,c)=>n.append(c,r)):typeof h=="object"&&h!==null&&k(n,h),i=n}else{let n={};typeof l=="object"&&l!==null&&Object.assign(n,l),typeof h=="object"&&h!==null&&Object.assign(n,h),i=JSON.stringify(n)}let E=Object.assign({},o.headers||{});o.api_key&&!E.Authorization&&!E.authorization&&(E.Authorization=`Bearer ${o.api_key}`),f||(o.contentType===void 0?E["Content-Type"]=E["Content-Type"]||"application/json":o.contentType!==null&&(E["Content-Type"]=o.contentType));let w=new AbortController,e=o.signal||w.signal,s;o.timeoutMs&&o.timeoutMs>0&&(s=setTimeout(()=>w.abort(),o.timeoutMs));try{let n=await fetch(y,{method:v,headers:E,body:i,credentials:o.credentials,signal:e});s&&clearTimeout(s);let r=o.responseType||"json",c=null;if(!n.ok){try{c=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{c=await n.text().catch(()=>null)}let u=new Error(`HTTP error ${n.status}`);return u.status=n.status,u.body=c,m&&m(null,u),Promise.resolve()}try{c=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{c=await n.text().catch(()=>null)}return m&&m(c,null),c}catch(n){let r;return n instanceof DOMException&&n.name==="AbortError"?r=new Error("Request aborted (timeout or cancelled)"):n instanceof TypeError&&n.message==="Failed to fetch"?r=new Error("Network or CORS error: Unable to reach the server or CORS policy blocked the request."):n instanceof Error?r=n:r=new Error(String(n)),m&&m(null,r),Promise.reject(r)}finally{s&&clearTimeout(s)}}function C(b,o,m){let y=[];if(typeof b=="string"?y=Array.from(document.querySelectorAll(b)):y=[b],y.length===0)return null;function v(){let i=m?.style==="bootstrap",f=document.createElement("form");f.classList.add("voc-form"),i&&f.classList.add("needs-validation"),f.id=o.id;let h=document.createElement("h2");h.textContent=o.form_name,f.appendChild(h);function k(e,s){s&&(s.min_length!==void 0&&(e.minLength=s.min_length),s.max_length!==void 0&&(e.maxLength=s.max_length),s.regex&&(e instanceof HTMLInputElement?e.pattern=s.regex:e.dataset.pattern=s.regex))}function E(e){if(!e.key&&!e.label)return null;let s=o.default_values||{},n=e.name||e.key,r=n?s[n]:void 0,c=document.createElement("div");if(c.className="voc-form-group",i&&c.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),i&&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?" *":""),c.appendChild(t)}let u=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)e.options.forEach((a,p)=>{let g=document.createElement("label");g.classList.add("voc-form-checkbox-label"),i&&g.classList.add("form-check"),g.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(g.style.width=e.width);let d=document.createElement("input");d.type="checkbox",d.classList.add("voc-form-checkbox"),i&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${p}`),e.required&&(d.required=!0),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),g.appendChild(d),g.appendChild(document.createTextNode(a.label)),t.appendChild(g)});else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),i&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let p=document.createElement("input");p.type="checkbox",p.classList.add("voc-form-checkbox"),(e.key||e.name)&&(p.name=e.name||e.key,e.key&&(p.id=`voc-form-${e.key}`)),i&&p.classList.add("form-check-input"),e.required&&(p.required=!0),r!==void 0?p.checked=!!r:e.default&&(p.checked=!!e.default),a.appendChild(p),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}u=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),i&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),u=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),i&&t.classList.add("form-select"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let p=document.createElement("option");p.value=a.value,p.textContent=a.label,Array.isArray(r)?r.includes(a.value)&&(p.selected=!0):r!==void 0?r===a.value&&(p.selected=!0):e.default===a.value&&(p.selected=!0),t.appendChild(p)}),e.width&&(t.style.width=e.width),u=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,p)=>{let g=document.createElement("label");g.classList.add("voc-form-radio-label"),i&&g.classList.add("form-check"),g.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(g.style.width=e.width);let d=document.createElement("input");d.type="radio",d.classList.add("voc-form-radio"),i&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${p}`),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),g.appendChild(d),g.appendChild(document.createTextNode(a.label)),t.appendChild(g)}),u=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),i&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),u=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),i&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),u=t;break}}if(u&&c.appendChild(u),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,c.appendChild(t)}return c}o.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let s=document.createElement("div");if(s.className="voc-form-group voc-form-row",i&&s.classList.add("mb-3"),e.label){let r=document.createElement("h3");r.className="voc-form-row-label",r.textContent=e.label,s.appendChild(r)}if(e.description){let r=document.createElement("p");r.className="voc-form-row-description",r.textContent=e.description,s.appendChild(r)}let n=document.createElement("div");n.className="voc-form-row-items "+(e.direction||"horizontal"),s.appendChild(n),e.items.forEach(r=>{let c=E(r);c&&n.appendChild(c)}),f.appendChild(s)}else{let s=E(e);s&&f.appendChild(s)}});let w=document.createElement("button");return w.type="submit",w.className="voc-form-submit",w.textContent="Submit",i&&w.classList.add("btn","btn-primary"),f.appendChild(w),f}let l=v();return y[0].appendChild(l),m&&m.submitConfig&&l.addEventListener("submit",i=>{i.preventDefault(),T(l,m.submitConfig,(f,h)=>{m.onSubmitResult&&m.onSubmitResult(f,h)})}),{element:l,validate:()=>{let i=[];return l.querySelectorAll(":invalid").forEach(h=>{let k=h.validationMessage;i.push({element:h,message:k})}),i},getValues:()=>x(l),onSubmit:i=>{l.addEventListener("submit",f=>{f.preventDefault();let h=x(l);i(h,f)})}}}var L={renderForm:C};var H=L,q={FormsLib:L};0&&(module.exports={FormsLib});
package/dist/main.mjs CHANGED
@@ -1 +1 @@
1
- function g(u,h=!0){let v=new FormData(u);if(h)return v;let l={};return v.forEach((b,i)=>{let r=(b instanceof File,b);Object.prototype.hasOwnProperty.call(l,i)?Array.isArray(l[i])?l[i].push(r):l[i]=[l[i],r]:l[i]=r}),l}function L(u,h,v){let l=[];if(typeof u=="string"?l=Array.from(document.querySelectorAll(u)):l=[u],l.length===0)return null;function b(){let r=v?.style==="bootstrap",m=document.createElement("form");m.classList.add("voc-form"),r&&m.classList.add("needs-validation"),m.id=h.id;let p=document.createElement("h2");p.textContent=h.form_name,m.appendChild(p);function f(e,a){a&&(a.min_length!==void 0&&(e.minLength=a.min_length),a.max_length!==void 0&&(e.maxLength=a.max_length),a.regex&&(e instanceof HTMLInputElement?e.pattern=a.regex:e.dataset.pattern=a.regex))}function E(e){if(!e.key&&!e.label)return null;let a=document.createElement("div");if(a.className="voc-form-group",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),r&&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?" *":""),a.appendChild(t)}let d=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)e.options.forEach((n,c)=>{let s=document.createElement("label");s.classList.add("voc-form-checkbox-label"),r&&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"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.required&&(o.required=!0),e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)});else{let n=document.createElement("label");n.classList.add("voc-form-checkbox-label"),r&&n.classList.add("form-check"),e.width&&(n.style.width=e.width);let c=document.createElement("input");c.type="checkbox",c.classList.add("voc-form-checkbox"),(e.key||e.name)&&(c.name=e.name||e.key,e.key&&(c.id=`voc-form-${e.key}`)),r&&c.classList.add("form-check-input"),e.required&&(c.required=!0),e.default&&(c.checked=!!e.default),n.appendChild(c),n.appendChild(document.createTextNode(e.label||"")),t.appendChild(n)}d=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),r&&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),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),d=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),r&&t.classList.add("form-select"),(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 c=document.createElement("option");c.value=n.value,c.textContent=n.label,e.default===n.value&&(c.selected=!0),t.appendChild(c)}),e.width&&(t.style.width=e.width),d=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,c)=>{let s=document.createElement("label");s.classList.add("voc-form-radio-label"),r&&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"),r&&o.classList.add("form-check-input"),o.name=e.name||e.key||"",o.value=n.value,e.key&&(o.id=`voc-form-${e.key}-${c}`),e.default===n.value&&(o.checked=!0),s.appendChild(o),s.appendChild(document.createTextNode(n.label)),t.appendChild(s)}),d=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"),r&&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),d=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),r&&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),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),d=t;break}}if(d&&a.appendChild(d),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,a.appendChild(t)}return a}h.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let a=document.createElement("div");if(a.className="voc-form-group voc-form-row",r&&a.classList.add("mb-3"),e.label){let t=document.createElement("h3");t.className="voc-form-row-label",t.textContent=e.label,a.appendChild(t)}if(e.description){let t=document.createElement("p");t.className="voc-form-row-description",t.textContent=e.description,a.appendChild(t)}let d=document.createElement("div");d.className="voc-form-row-items "+(e.direction||"horizontal"),a.appendChild(d),e.items.forEach(t=>{let n=E(t);n&&d.appendChild(n)}),m.appendChild(a)}else{let a=E(e);a&&m.appendChild(a)}});let y=document.createElement("button");return y.type="submit",y.className="voc-form-submit",y.textContent="Submit",r&&y.classList.add("btn","btn-primary"),m.appendChild(y),m}let i=b();return l[0].appendChild(i),{element:i,validate:()=>{let r=[];return i.querySelectorAll(":invalid").forEach(p=>{let f=p.validationMessage;r.push({element:p,message:f})}),r},getValues:()=>g(i),onSubmit:r=>{i.addEventListener("submit",m=>{m.preventDefault();let p=g(i);r(p,m)})}}}var k={renderForm:L};var q=k,H={FormsLib:k};export{q as FormsLib,H as default};
1
+ function x(E,l=!0){let f=new FormData(E);if(l)return f;let b={};return f.forEach((w,c)=>{let o=(w instanceof File,w);Object.prototype.hasOwnProperty.call(b,c)?Array.isArray(b[c])?b[c].push(o):b[c]=[b[c],o]:b[c]=o}),b}async function L(E,l,f){let b=l.api_endpoint||"https://localhost.vocphone.com/v2/voc-form-submit",w=l.method||"POST",c=x(E),o,h=!1,p=l.additional_data,k=(n,r)=>{Object.keys(r).forEach(s=>{let m=r[s];Array.isArray(m)?m.forEach(t=>n.append(s,t)):m instanceof File?n.append(s,m):m!=null&&n.append(s,String(m))})};if(c instanceof FormData||p instanceof FormData){h=!0;let n=new FormData;c instanceof FormData?c.forEach((r,s)=>n.append(s,r)):typeof c=="object"&&c!==null&&k(n,c),p instanceof FormData?p.forEach((r,s)=>n.append(s,r)):typeof p=="object"&&p!==null&&k(n,p),o=n}else{let n={};typeof c=="object"&&c!==null&&Object.assign(n,c),typeof p=="object"&&p!==null&&Object.assign(n,p),o=JSON.stringify(n)}let g=Object.assign({},l.headers||{});l.api_key&&!g.Authorization&&!g.authorization&&(g.Authorization=`Bearer ${l.api_key}`),h||(l.contentType===void 0?g["Content-Type"]=g["Content-Type"]||"application/json":l.contentType!==null&&(g["Content-Type"]=l.contentType));let v=new AbortController,e=l.signal||v.signal,i;l.timeoutMs&&l.timeoutMs>0&&(i=setTimeout(()=>v.abort(),l.timeoutMs));try{let n=await fetch(b,{method:w,headers:g,body:o,credentials:l.credentials,signal:e});i&&clearTimeout(i);let r=l.responseType||"json",s=null;if(!n.ok){try{s=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{s=await n.text().catch(()=>null)}let m=new Error(`HTTP error ${n.status}`);return m.status=n.status,m.body=s,f&&f(null,m),Promise.resolve()}try{s=r==="json"?await n.json():r==="text"?await n.text():r==="blob"?await n.blob():await n.arrayBuffer()}catch{s=await n.text().catch(()=>null)}return f&&f(s,null),s}catch(n){let r;return n instanceof DOMException&&n.name==="AbortError"?r=new Error("Request aborted (timeout or cancelled)"):n instanceof TypeError&&n.message==="Failed to fetch"?r=new Error("Network or CORS error: Unable to reach the server or CORS policy blocked the request."):n instanceof Error?r=n:r=new Error(String(n)),f&&f(null,r),Promise.reject(r)}finally{i&&clearTimeout(i)}}function T(E,l,f){let b=[];if(typeof E=="string"?b=Array.from(document.querySelectorAll(E)):b=[E],b.length===0)return null;function w(){let o=f?.style==="bootstrap",h=document.createElement("form");h.classList.add("voc-form"),o&&h.classList.add("needs-validation"),h.id=l.id;let p=document.createElement("h2");p.textContent=l.form_name,h.appendChild(p);function k(e,i){i&&(i.min_length!==void 0&&(e.minLength=i.min_length),i.max_length!==void 0&&(e.maxLength=i.max_length),i.regex&&(e instanceof HTMLInputElement?e.pattern=i.regex:e.dataset.pattern=i.regex))}function g(e){if(!e.key&&!e.label)return null;let i=l.default_values||{},n=e.name||e.key,r=n?i[n]:void 0,s=document.createElement("div");if(s.className="voc-form-group",o&&s.classList.add("mb-3"),e.label){let t=document.createElement("label");t.classList.add("voc-form-label"),o&&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?" *":""),s.appendChild(t)}let m=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)e.options.forEach((a,u)=>{let y=document.createElement("label");y.classList.add("voc-form-checkbox-label"),o&&y.classList.add("form-check"),y.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(y.style.width=e.width);let d=document.createElement("input");d.type="checkbox",d.classList.add("voc-form-checkbox"),o&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${u}`),e.required&&(d.required=!0),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),y.appendChild(d),y.appendChild(document.createTextNode(a.label)),t.appendChild(y)});else{let a=document.createElement("label");a.classList.add("voc-form-checkbox-label"),o&&a.classList.add("form-check"),e.width&&(a.style.width=e.width);let u=document.createElement("input");u.type="checkbox",u.classList.add("voc-form-checkbox"),(e.key||e.name)&&(u.name=e.name||e.key,e.key&&(u.id=`voc-form-${e.key}`)),o&&u.classList.add("form-check-input"),e.required&&(u.required=!0),r!==void 0?u.checked=!!r:e.default&&(u.checked=!!e.default),a.appendChild(u),a.appendChild(document.createTextNode(e.label||"")),t.appendChild(a)}m=t;break}case"textarea":{let t=document.createElement("textarea");t.classList.add("voc-form-textarea"),o&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),m=t;break}case"select":{let t=document.createElement("select");if(t.classList.add("voc-form-select"),o&&t.classList.add("form-select"),(e.key||e.name)&&(t.name=e.name||e.key,e.key&&(t.id=`voc-form-${e.key}`)),e.placeholder){let a=document.createElement("option");a.value="",a.textContent=e.placeholder,a.disabled=!0,a.selected=!0,t.appendChild(a)}e.required&&(t.required=!0),e.options&&e.options.forEach(a=>{let u=document.createElement("option");u.value=a.value,u.textContent=a.label,Array.isArray(r)?r.includes(a.value)&&(u.selected=!0):r!==void 0?r===a.value&&(u.selected=!0):e.default===a.value&&(u.selected=!0),t.appendChild(u)}),e.width&&(t.style.width=e.width),m=t;break}case"radio":{let t=document.createElement("div");t.className="voc-form-radio-group "+(e.direction||"vertical"),e.width&&(t.style.width=e.width),e.options&&e.options.forEach((a,u)=>{let y=document.createElement("label");y.classList.add("voc-form-radio-label"),o&&y.classList.add("form-check"),y.style.display=e.direction==="horizontal"?"inline-block":"block",e.width&&(y.style.width=e.width);let d=document.createElement("input");d.type="radio",d.classList.add("voc-form-radio"),o&&d.classList.add("form-check-input"),d.name=e.name||e.key||"",d.value=a.value,e.key&&(d.id=`voc-form-${e.key}-${u}`),Array.isArray(r)?r.includes(a.value)&&(d.checked=!0):r!==void 0?r===a.value&&(d.checked=!0):e.default===a.value&&(d.checked=!0),y.appendChild(d),y.appendChild(document.createTextNode(a.label)),t.appendChild(y)}),m=t;break}case"file":{let t=document.createElement("div");t.className="voc-form-file-wrapper",e.width&&(t.style.width=e.width);let a=document.createElement("input");a.type="file",a.classList.add("voc-form-file"),o&&a.classList.add("form-control"),(e.key||e.name)&&(a.name=e.name||e.key,e.key&&(a.id=`voc-form-${e.key}`)),e.width&&(a.style.width=e.width),e.required&&(a.required=!0),e.accept&&(a.accept=e.accept),e.multiple&&(a.multiple=!0),t.appendChild(a),m=t;break}default:{let t=document.createElement("input");t.type=e.type||"text",t.classList.add("voc-form-input"),o&&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),r!=null?t.value=String(r):e.default!==void 0&&e.default!==null&&(t.value=String(e.default)),e.width&&(t.style.width=e.width),e.required&&(t.required=!0),k(t,e.validation),m=t;break}}if(m&&s.appendChild(m),e.hint_text){let t=document.createElement("small");t.className="voc-form-hint",t.textContent=e.hint_text,s.appendChild(t)}return s}l.fields.forEach(e=>{if(e.type==="row"&&"items"in e){let i=document.createElement("div");if(i.className="voc-form-group voc-form-row",o&&i.classList.add("mb-3"),e.label){let r=document.createElement("h3");r.className="voc-form-row-label",r.textContent=e.label,i.appendChild(r)}if(e.description){let r=document.createElement("p");r.className="voc-form-row-description",r.textContent=e.description,i.appendChild(r)}let n=document.createElement("div");n.className="voc-form-row-items "+(e.direction||"horizontal"),i.appendChild(n),e.items.forEach(r=>{let s=g(r);s&&n.appendChild(s)}),h.appendChild(i)}else{let i=g(e);i&&h.appendChild(i)}});let v=document.createElement("button");return v.type="submit",v.className="voc-form-submit",v.textContent="Submit",o&&v.classList.add("btn","btn-primary"),h.appendChild(v),h}let c=w();return b[0].appendChild(c),f&&f.submitConfig&&c.addEventListener("submit",o=>{o.preventDefault(),L(c,f.submitConfig,(h,p)=>{f.onSubmitResult&&f.onSubmitResult(h,p)})}),{element:c,validate:()=>{let o=[];return c.querySelectorAll(":invalid").forEach(p=>{let k=p.validationMessage;o.push({element:p,message:k})}),o},getValues:()=>x(c),onSubmit:o=>{c.addEventListener("submit",h=>{h.preventDefault();let p=x(c);o(p,h)})}}}var F={renderForm:T};var j=F,N={FormsLib:F};export{j as FormsLib,N as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "voc-lib-js",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "A JavaScript library for VocPhone",
5
5
  "main": "./dist/main.cjs",
6
6
  "module": "./dist/main.mjs",