@unvired/turboforms-embed-sdk 2.0.38 → 2.0.39
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/turboforms.esm.js +3 -3
- package/dist/turboforms.html +1 -1
- package/dist/turboforms.js +3 -3
- package/package.json +1 -1
package/dist/turboforms.esm.js
CHANGED
|
@@ -4,7 +4,7 @@ var Ee=Object.create;var ie=Object.defineProperty;var ke=Object.getOwnPropertyDe
|
|
|
4
4
|
font-weight: bold;
|
|
5
5
|
padding: 2px 6px;
|
|
6
6
|
border-radius: 4px;
|
|
7
|
-
`;if(typeof window!="undefined"&&typeof e[0]=="string"){let f=e[0];e[0]=`%c${t.toUpperCase()}%c ${f}`,e.splice(1,0,p,"color: inherit; background: transparent; font-weight: normal;")}r.apply(void 0,e)}};T.default.setLevel("trace");T.default.setLevel=function(t){let n=String(t).toLowerCase();["trace","debug","info","warn","error","all"].includes(n)?(Q=n,typeof window!="undefined"&&console.log(`%c[SYSTEM]%c Log level set to EXACTLY: ${n.toUpperCase()}`,"color: white; background: #000; padding: 2px 6px; border-radius: 4px; font-weight: bold;","color: inherit; background: transparent;")):console.warn(`[SYSTEM] Invalid log level: ${t}. Use: trace, debug, info, warn, error, or all.`)};typeof window!="undefined"&&(window.__log=T.default,window.logger=T.default,window.setLogLevel=T.default.setLevel);var l=T.default;function ee(t,n,o=!1){if(o||l.info("[TF_SDK:347] \u2705 attachNestedFormsToMainForm() called"),!t||typeof t!="object")return t;for(let r in t)if(typeof t[r]=="object")ee(t[r],n,!0);else if(r==="nestedFormComponenttype"&&t.nestedFormComponenttype==="smartNestedForm"){let e=t.selNestedFormVersion,i=t.selectedNestedFormId;if(e&&i){let a=n.filter(s=>s.formId==i&&s.version==e);if(a.length>0){let s=a[0].formDesign||a[0].formData;if(typeof s=="string")try{s=JSON.parse(s)}catch(p){l.warn("[TF_SDK:348] \u26A0\uFE0F Failed to parse nested form design",p)}t.formDesign=s,t.formdesign=s,s&&typeof s=="object"&&s.components&&(t.components=s.components,t.display=s.display||"form")}}}return t}function le(t){if(!t||typeof t!="object")return t;let n={...t};for(let o of Object.keys(t)){let r=o.trim().replace(/[\s_]+(.)/g,(e,i)=>i.toUpperCase()).replace(/^(.)/,(e,i)=>i.toLowerCase());r!==o&&(n[r]=t[o])}return n}function G(t,n,o="dataSrc",r="masterdata",e=!1){if(e||l.info("[TF_SDK:349] \u2705 attachMasterDataToForm() called"),!t||typeof t!="object")return t;if(Array.isArray(t))return t.forEach(i=>G(i,n,o,r,!0)),t;for(let i in t)if(t.hasOwnProperty(i)){if(typeof t[i]=="object")G(t[i],n,o,r,!0);else if(i===o&&t[i]===r)if(l.info("[TF_SDK:350] \u2705 Found masterdata component:",t.key,"selMasterdataId:",t.selMasterdataId),Array.isArray(n)){let a=[];if(t.selMasterdataId){let s=n.find(p=>p.masterdataId===t.selMasterdataId);a=s?s.submissionData||[]:[]}else a=n.flatMap(s=>s.submissionData||[]);a=a.map(s=>le(s)),t.masterdata=a,l.info("[TF_SDK:351] \u2705 Attached masterdata length:",a.length)}else if(n&&Array.isArray(n.submissionData)){let a=n.submissionData;t.masterdata=a.map(s=>le(s))}else t.masterdata=[]}return t}function D(t,n){if(Array.isArray(t))for(let o of t)n(o),Array.isArray(o.components)&&D(o.components,n),Array.isArray(o.columns)&&o.columns.forEach(r=>D(r.components,n)),Array.isArray(o.rows)&&o.rows.forEach(r=>{Array.isArray(r)&&r.forEach(e=>{e&&e.components&&D(e.components,n)})}),Array.isArray(o.fieldSet)&&D(o.fieldSet,n)}function ce(t,n){l.info("[TF_SDK:352] \u2705 validateNestedForms() called");let o=null,r=!1;return D(t==null?void 0:t.components,e=>{if(e.selectedNestedFormId&&e.selNestedFormVersion&&e.nestedFormComponenttype==="smartNestedForm"){if(r=!0,!Array.isArray(n)||n.length===0){o="Nested Form Data must be a non-empty array when a component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' is present in the form.";return}if(!n.find(a=>a.formId==e.selectedNestedFormId&&a.version==e.selNestedFormVersion)){let a=n.find(s=>s.formId==e.selectedNestedFormId);a?o=`Version is wrong for selectedNestedFormId: ${e.selectedNestedFormId}. Expected version: ${a.version}, got: ${e.selNestedFormVersion}`:o=`ID is wrong. No nested form found for selectedNestedFormId: ${e.selectedNestedFormId}`}}}),Array.isArray(n)&&n.length>0&&!r&&(o="Nested Form Data is provided but no component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' exists in the form."),o}function ue(t,n){l.info("[TF_SDK:353] \u2705 validateMasterdata() called");let o=null,r=!1,e=[],i=!1;if(D(t.components,a=>{if(a.dataSrc==="masterdata"&&(r=!0,a.selMasterdataId&&Array.isArray(n))){let s=n.find(p=>p.masterdataId===a.selMasterdataId);s?Array.isArray(s.submissionData)||(i=!0):e.push(a.selMasterdataId)}}),r){if(!Array.isArray(n)||n.length===0)return o="Master Data must be a non-empty array when a component with dataSrc='masterdata' is present in the form.",o;if(e.length>0)return o=`Master Data is missing entries for the following masterdataIds: ${e.join(", ")}`,o;if(i)return o="Master Data entries must contain a 'submissionData' array.",o}return Array.isArray(n)&&n.length>0&&!r&&(o="Master Data is provided but no component with dataSrc='masterdata' exists in the form."),o}function de({type:t,message:n="",errorMessage:o="",data:r={}}){let e;return t==="ERROR"?e={type:"ERROR",errorMessage:o+", contact your admin or tech team",data:r}:e={type:t,message:n,data:r},e}function Y(t,n,o){if(Array.isArray(t))t.forEach(r=>Y(r,n,o));else if(t&&typeof t=="object")for(let r in t){if(typeof t[r]=="string"){let e=!1;if(/^@\s*title\s*@\s*$/.test(t[r])||/^\[\s*title\s*\]$/.test(t[r])?o&&o.title&&(t[r]=o.title,e=!0):(/^@\s*description\s*@\s*$/.test(t[r])||/^\[\s*description\s*\]$/.test(t[r]))&&o&&o.description&&(t[r]=o.description,e=!0),!e)for(let i in n){let a=new RegExp(`^@\\s*${i}\\s*@\\s*$`),s=new RegExp(`^\\[\\s*${i}\\s*\\]$`);if(a.test(t[r])||s.test(t[r])){t[r]=n[i],e=!0;break}}if(!e){let i=/^@\s*([^@\s]+)\s*@\s*$/,a=/^\[\s*([^\]\s]+)\s*\]$/;(i.test(t[r])||a.test(t[r]))&&(t[r]="")}}Y(t[r],n,o)}}async function fe(t,n,o){if(l.info("[TF_SDK:340] \u2705 validateAttachments() called"),!n||typeof n!="object")return{missingFiles:[],fileKeys:[]};let r=[];function e(f,g=[]){if(!Array.isArray(f))return g;for(let u of f)u.type==="file"&&u.key&&g.push(u.key),Array.isArray(u.components)?e(u.components,g):Array.isArray(u.columns)?u.columns.forEach(y=>e(y.components,g)):Array.isArray(u.rows)?u.rows.forEach(y=>y.forEach(w=>e(w.components,g))):u.tabs&&Array.isArray(u.tabs)&&u.tabs.forEach(y=>e(y.components,g));return g}let i=e((t==null?void 0:t.components)||[]),a=new Set(i),s=new WeakSet;async function p(f){if(!(!f||typeof f!="object"||s.has(f))){s.add(f);for(let g of Object.keys(f)){let u=f[g];a.has(g)&&Array.isArray(u)&&await Promise.all(u.map(async y=>{if(typeof y=="string"&&y.trim())try{let w=await De(y);(!w||!w.id||!w.data&&!w.url)&&r.push({fileId:y,field:g,reason:w?"Incomplete file record (missing id/data/url)":"File not found in IndexedDB"})}catch(w){r.push({fileId:y,field:g,reason:"IndexedDB not initialized"})}})),typeof u=="object"&&u!==null&&await p(u)}}}return await p(n),r.length>0&&(o==null||o({type:"GET_ATTACHMENT",message:"Requesting missing attachments from middleware",data:{missingFiles:r}})),{missingFiles:r,fileKeys:i}}var U=null;function De(t){return l.info("[TF_SDK:341] \u2705 getFileFromIndexedDB() called",{fileId:t}),"indexedDB"in window?(U||(U=new Promise((n,o)=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){U=null,o(new Error("Missing Files store"));return}n(i)},r.onerror=()=>{U=null,o(new Error("Failed to open IndexedDB"))}})),U.then(n=>new Promise(o=>{let r=n.transaction("Files","readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}))):Promise.resolve(null)}async function pe(t,n,o=[]){if(l.info("[TF_SDK:343] \u2705 processFileIds() called"),!t||typeof t!="object")return t;let r=new Set(o),e=JSON.parse(JSON.stringify(t)),i=new WeakSet;async function a(s){if(!(!s||typeof s!="object"||i.has(s))){i.add(s);for(let p of Object.keys(s)){let f=s[p];if(r.has(p)&&Array.isArray(f)){let g=[];for(let u=0;u<f.length;u++)if(typeof f[u]=="string"){let y=await Re(f[u]);y?g.push({name:y.name,originalName:y.name,size:y.size,storage:"SmartStorage",type:y.type,url:y.url,key:p,uid:f[u],mode:y.mode||"G"}):l.warn(`[TF_SDK:344] \u26A0\uFE0F File not found in IndexedDB: ${f[u]} - removing from submission data`)}else typeof f[u]=="object"&&f[u]!==null&&await a(f[u]),g.push(f[u]);s[p]=g}else typeof f=="object"&&f!==null&&await a(f)}}}return await a(e),e}var z=null;async function Re(t){if(l.info("[TF_SDK:345] \u2705 getFileFromIndexedDB() called",{fileId:t}),!("indexedDB"in window))return null;z||(z=new Promise(o=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){l.warn("[TF_SDK:346] \u26A0\uFE0F Files store not found"),z=null,o(null);return}o(i)},r.onerror=()=>{z=null,o(null)}}));let n=await z;return n?new Promise(o=>{let r=n.transaction(["Files"],"readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}):null}function he(t,n){if(l.info("[TF_SDK:342] \u2705 processDynamicValues() called"),!t||!t.components)return null;let o={},r=n&&(Array.isArray(n)&&n.length>0||!Array.isArray(n)&&Object.keys(n).length>0);r&&(Array.isArray(n)?n.forEach(i=>{i.key&&(o[i.key]=i.value)}):o=n||{});function e(i){if(!i||!Array.isArray(i))return null;for(let a of i){if(typeof a.defaultValue=="string"&&a.defaultValue.trim().startsWith("{{")&&a.defaultValue.trim().endsWith("}}")){let p=a.defaultValue.trim();r&&o[p]!==void 0&&(a.defaultValue=o[p])}a.label&&typeof a.label=="string"&&a.label.length>35&&(a.label=a.label.substring(0,35)+"...");let s;if(a.components&&(s=e(a.components),s))return s;if(a.columns&&Array.isArray(a.columns)){for(let p of a.columns)if(s=e(p.components),s)return s}if(a.rows&&Array.isArray(a.rows)){for(let p of a.rows)if(Array.isArray(p)){for(let f of p)if(s=e(f.components),s)return s}}}return null}return e(t.components)}var K="AppDocuments",P="documents",R="documnets";function Z(t){return t?new Promise((n,o)=>{let r=indexedDB.open(K,t);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>n(e.target.result),r.onerror=e=>{l.error("[TF_SDK:330] \u274C DB error:",e.target.error),o(e.target.error)}}):typeof window!="undefined"&&window.indexedDBUtils&&window.indexedDBUtils.openDynamicDB?window.indexedDBUtils.openDynamicDB(K,P,R):new Promise((n,o)=>{let r=indexedDB.open(K);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>{let i=e.target.result;if(i.objectStoreNames.contains(P)||i.objectStoreNames.contains(R)){n(i);return}let s=i.version+1;i.close();let p=indexedDB.open(K,s);p.onupgradeneeded=f=>{let g=f.target.result;g.objectStoreNames.contains(P)||g.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},p.onsuccess=f=>n(f.target.result),p.onerror=f=>{l.error("[TF_SDK:331] \u274C DB Upgrade failed:",f),o(f)}},r.onerror=e=>{l.error("[TF_SDK:332] \u274C DB Open failed:",e),o(e.target.error)}})}function X(t){return t.objectStoreNames.contains(P)?P:t.objectStoreNames.contains(R)?R:null}async function te(){try{let t=await Z(),n=X(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).count();i.onsuccess=()=>{t.close(),o(i.result>0)},i.onerror=a=>{l.error("[TF_SDK:334] \u274C Error counting:",a),t.close(),o(!1)}}):(l.warn(`[TF_SDK:333] \u26A0\uFE0F Store missing \u2014 no '${P}' or '${R}' found`),t.close(),!1)}catch(t){return l.error("[TF_SDK:335] \u274C Error checking documents:",t),!1}}async function me(){try{let t=await Z(),n=X(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return l.error("[TF_SDK:336] \u274C Error getting documents:",t),[]}}async function be(t){try{let n=await Z(),o=X(n);if(!o)throw n.close(),new Error("Failed to open database with valid store.");return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).add(t);s.onsuccess=()=>{n.close(),r(s.result)},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:337] \u274C Error inserting document:",n),n}}async function ge(t){try{let n=await Z(),o=X(n);if(!o){n.close(),l.error("[TF_SDK:338] \u274C No valid document store found for deletion");return}return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).delete(t);s.onsuccess=()=>{n.close(),r()},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:339] \u274C Error deleting document:",n),n}}var Fe="AppDocuments",ve="documents",ye="documnets";function Ne(){return new Promise((t,n)=>{let o=indexedDB.open(Fe);o.onsuccess=r=>t(r.target.result),o.onerror=r=>n(r.target.error)})}function Le(t){return t.objectStoreNames.contains(ve)?ve:t.objectStoreNames.contains(ye)?ye:null}async function we(){try{let t=await Ne(),n=Le(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return logger.warn("[TF_SDK:264] \u26A0\uFE0F Error reading AppDocuments DB:",t),[]}}async function je(){if(typeof window.showDynamicModal!="function"){logger.error("[TF_SDK:265] \u274C showDynamicModal is not defined.");return}window.showDynamicModal("App Documents",[],`
|
|
7
|
+
`;if(typeof window!="undefined"&&typeof e[0]=="string"){let f=e[0];e[0]=`%c${t.toUpperCase()}%c ${f}`,e.splice(1,0,p,"color: inherit; background: transparent; font-weight: normal;")}r.apply(void 0,e)}};T.default.setLevel("trace");T.default.setLevel=function(t){let n=String(t).toLowerCase();["trace","debug","info","warn","error","all"].includes(n)?(Q=n,typeof window!="undefined"&&console.log(`%c[SYSTEM]%c Log level set to EXACTLY: ${n.toUpperCase()}`,"color: white; background: #000; padding: 2px 6px; border-radius: 4px; font-weight: bold;","color: inherit; background: transparent;")):console.warn(`[SYSTEM] Invalid log level: ${t}. Use: trace, debug, info, warn, error, or all.`)};typeof window!="undefined"&&(window.__log=T.default,window.logger=T.default,window.setLogLevel=T.default.setLevel);var l=T.default;function ee(t,n,o=!1){if(o||l.info("[TF_SDK:347] \u2705 attachNestedFormsToMainForm() called"),!t||typeof t!="object")return t;for(let r in t)if(typeof t[r]=="object")ee(t[r],n,!0);else if(r==="nestedFormComponenttype"&&t.nestedFormComponenttype==="smartNestedForm"){let e=t.selNestedFormVersion,i=t.selectedNestedFormId;if(e&&i){let a=n.filter(s=>s.formId==i&&s.version==e);if(a.length>0){let s=a[0].formDesign||a[0].formData;if(typeof s=="string")try{s=JSON.parse(s)}catch(p){l.warn("[TF_SDK:348] \u26A0\uFE0F Failed to parse nested form design",p)}t.formDesign=s,t.formdesign=s,s&&typeof s=="object"&&s.components&&(t.components=s.components,t.display=s.display||"form")}}}return t}function le(t){if(!t||typeof t!="object")return t;let n={...t};for(let o of Object.keys(t)){let r=o.trim().replace(/[\s_]+(.)/g,(e,i)=>i.toUpperCase()).replace(/^(.)/,(e,i)=>i.toLowerCase());r!==o&&(n[r]=t[o])}return n}function G(t,n,o="dataSrc",r="masterdata",e=!1){if(e||l.info("[TF_SDK:349] \u2705 attachMasterDataToForm() called"),!t||typeof t!="object")return t;if(Array.isArray(t))return t.forEach(i=>G(i,n,o,r,!0)),t;for(let i in t)if(t.hasOwnProperty(i)){if(typeof t[i]=="object")G(t[i],n,o,r,!0);else if(i===o&&t[i]===r)if(l.info("[TF_SDK:350] \u2705 Found masterdata component:",t.key,"selMasterdataId:",t.selMasterdataId),Array.isArray(n)){let a=[];if(t.selMasterdataId){let s=n.find(p=>p.masterdataId===t.selMasterdataId);a=s?s.submissionData||[]:[]}else a=n.flatMap(s=>s.submissionData||[]);a=a.map(s=>le(s)),t.masterdata=a,l.info("[TF_SDK:351] \u2705 Attached masterdata length:",a.length)}else if(n&&Array.isArray(n.submissionData)){let a=n.submissionData;t.masterdata=a.map(s=>le(s))}else t.masterdata=[]}return t}function D(t,n){if(Array.isArray(t))for(let o of t)n(o),Array.isArray(o.components)&&D(o.components,n),Array.isArray(o.columns)&&o.columns.forEach(r=>D(r.components,n)),Array.isArray(o.rows)&&o.rows.forEach(r=>{Array.isArray(r)&&r.forEach(e=>{e&&e.components&&D(e.components,n)})}),Array.isArray(o.fieldSet)&&D(o.fieldSet,n)}function ce(t,n){l.info("[TF_SDK:352] \u2705 validateNestedForms() called");let o=null,r=!1;return D(t==null?void 0:t.components,e=>{if(e.selectedNestedFormId&&e.selNestedFormVersion&&e.nestedFormComponenttype==="smartNestedForm"){if(r=!0,!Array.isArray(n)||n.length===0){o="Nested Form Data must be a non-empty array when a component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' is present in the form.";return}if(!n.find(a=>a.formId==e.selectedNestedFormId&&a.version==e.selNestedFormVersion)){let a=n.find(s=>s.formId==e.selectedNestedFormId);a?o=`Version is wrong for selectedNestedFormId: ${e.selectedNestedFormId}. Expected version: ${a.version}, got: ${e.selNestedFormVersion}`:o=`ID is wrong. No nested form found for selectedNestedFormId: ${e.selectedNestedFormId}`}}}),Array.isArray(n)&&n.length>0&&!r&&(o="Nested Form Data is provided but no component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' exists in the form."),o}function ue(t,n){l.info("[TF_SDK:353] \u2705 validateMasterdata() called");let o=null,r=!1,e=[],i=!1;if(D(t.components,a=>{a.dataSrc==="masterdata"&&(r=!0,a.selMasterdataId&&Array.isArray(n)&&(n.find(p=>p.masterdataId===a.selMasterdataId)||e.push(a.selMasterdataId)))}),Array.isArray(n)&&n.length>0&&(i=!n.some(a=>Array.isArray(a.submissionData))),r){if(!Array.isArray(n)||n.length===0)return o="Master Data must be a non-empty array when a component with dataSrc='masterdata' is present in the form.",o;if(e.length>0&&l.warn(`[TF_SDK] \u26A0\uFE0F Master Data is missing entries for the following masterdataIds: ${e.join(", ")}`),i)return o="Master Data entries must contain a 'submissionData' array.",o}return Array.isArray(n)&&n.length>0&&!r&&(o="Master Data is provided but no component with dataSrc='masterdata' exists in the form."),o}function de({type:t,message:n="",errorMessage:o="",data:r={}}){let e;return t==="ERROR"?e={type:"ERROR",errorMessage:o+", contact your admin or tech team",data:r}:e={type:t,message:n,data:r},e}function Y(t,n,o){if(Array.isArray(t))t.forEach(r=>Y(r,n,o));else if(t&&typeof t=="object")for(let r in t){if(typeof t[r]=="string"){let e=!1;if(/^@\s*title\s*@\s*$/.test(t[r])||/^\[\s*title\s*\]$/.test(t[r])?o&&o.title&&(t[r]=o.title,e=!0):(/^@\s*description\s*@\s*$/.test(t[r])||/^\[\s*description\s*\]$/.test(t[r]))&&o&&o.description&&(t[r]=o.description,e=!0),!e)for(let i in n){let a=new RegExp(`^@\\s*${i}\\s*@\\s*$`),s=new RegExp(`^\\[\\s*${i}\\s*\\]$`);if(a.test(t[r])||s.test(t[r])){t[r]=n[i],e=!0;break}}if(!e){let i=/^@\s*([^@\s]+)\s*@\s*$/,a=/^\[\s*([^\]\s]+)\s*\]$/;(i.test(t[r])||a.test(t[r]))&&(t[r]="")}}Y(t[r],n,o)}}async function fe(t,n,o){if(l.info("[TF_SDK:340] \u2705 validateAttachments() called"),!n||typeof n!="object")return{missingFiles:[],fileKeys:[]};let r=[];function e(f,g=[]){if(!Array.isArray(f))return g;for(let u of f)u.type==="file"&&u.key&&g.push(u.key),Array.isArray(u.components)?e(u.components,g):Array.isArray(u.columns)?u.columns.forEach(y=>e(y.components,g)):Array.isArray(u.rows)?u.rows.forEach(y=>y.forEach(w=>e(w.components,g))):u.tabs&&Array.isArray(u.tabs)&&u.tabs.forEach(y=>e(y.components,g));return g}let i=e((t==null?void 0:t.components)||[]),a=new Set(i),s=new WeakSet;async function p(f){if(!(!f||typeof f!="object"||s.has(f))){s.add(f);for(let g of Object.keys(f)){let u=f[g];a.has(g)&&Array.isArray(u)&&await Promise.all(u.map(async y=>{if(typeof y=="string"&&y.trim())try{let w=await De(y);(!w||!w.id||!w.data&&!w.url)&&r.push({fileId:y,field:g,reason:w?"Incomplete file record (missing id/data/url)":"File not found in IndexedDB"})}catch(w){r.push({fileId:y,field:g,reason:"IndexedDB not initialized"})}})),typeof u=="object"&&u!==null&&await p(u)}}}return await p(n),r.length>0&&(o==null||o({type:"GET_ATTACHMENT",message:"Requesting missing attachments from middleware",data:{missingFiles:r}})),{missingFiles:r,fileKeys:i}}var U=null;function De(t){return l.info("[TF_SDK:341] \u2705 getFileFromIndexedDB() called",{fileId:t}),"indexedDB"in window?(U||(U=new Promise((n,o)=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){U=null,o(new Error("Missing Files store"));return}n(i)},r.onerror=()=>{U=null,o(new Error("Failed to open IndexedDB"))}})),U.then(n=>new Promise(o=>{let r=n.transaction("Files","readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}))):Promise.resolve(null)}async function pe(t,n,o=[]){if(l.info("[TF_SDK:343] \u2705 processFileIds() called"),!t||typeof t!="object")return t;let r=new Set(o),e=JSON.parse(JSON.stringify(t)),i=new WeakSet;async function a(s){if(!(!s||typeof s!="object"||i.has(s))){i.add(s);for(let p of Object.keys(s)){let f=s[p];if(r.has(p)&&Array.isArray(f)){let g=[];for(let u=0;u<f.length;u++)if(typeof f[u]=="string"){let y=await Re(f[u]);y?g.push({name:y.name,originalName:y.name,size:y.size,storage:"SmartStorage",type:y.type,url:y.url,key:p,uid:f[u],mode:y.mode||"G"}):l.warn(`[TF_SDK:344] \u26A0\uFE0F File not found in IndexedDB: ${f[u]} - removing from submission data`)}else typeof f[u]=="object"&&f[u]!==null&&await a(f[u]),g.push(f[u]);s[p]=g}else typeof f=="object"&&f!==null&&await a(f)}}}return await a(e),e}var z=null;async function Re(t){if(l.info("[TF_SDK:345] \u2705 getFileFromIndexedDB() called",{fileId:t}),!("indexedDB"in window))return null;z||(z=new Promise(o=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){l.warn("[TF_SDK:346] \u26A0\uFE0F Files store not found"),z=null,o(null);return}o(i)},r.onerror=()=>{z=null,o(null)}}));let n=await z;return n?new Promise(o=>{let r=n.transaction(["Files"],"readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}):null}function he(t,n){if(l.info("[TF_SDK:342] \u2705 processDynamicValues() called"),!t||!t.components)return null;let o={},r=n&&(Array.isArray(n)&&n.length>0||!Array.isArray(n)&&Object.keys(n).length>0);r&&(Array.isArray(n)?n.forEach(i=>{i.key&&(o[i.key]=i.value)}):o=n||{});function e(i){if(!i||!Array.isArray(i))return null;for(let a of i){if(typeof a.defaultValue=="string"&&a.defaultValue.trim().startsWith("{{")&&a.defaultValue.trim().endsWith("}}")){let p=a.defaultValue.trim();r&&o[p]!==void 0&&(a.defaultValue=o[p])}a.label&&typeof a.label=="string"&&a.label.length>35&&(a.label=a.label.substring(0,35)+"...");let s;if(a.components&&(s=e(a.components),s))return s;if(a.columns&&Array.isArray(a.columns)){for(let p of a.columns)if(s=e(p.components),s)return s}if(a.rows&&Array.isArray(a.rows)){for(let p of a.rows)if(Array.isArray(p)){for(let f of p)if(s=e(f.components),s)return s}}}return null}return e(t.components)}var K="AppDocuments",P="documents",R="documnets";function Z(t){return t?new Promise((n,o)=>{let r=indexedDB.open(K,t);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>n(e.target.result),r.onerror=e=>{l.error("[TF_SDK:330] \u274C DB error:",e.target.error),o(e.target.error)}}):typeof window!="undefined"&&window.indexedDBUtils&&window.indexedDBUtils.openDynamicDB?window.indexedDBUtils.openDynamicDB(K,P,R):new Promise((n,o)=>{let r=indexedDB.open(K);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>{let i=e.target.result;if(i.objectStoreNames.contains(P)||i.objectStoreNames.contains(R)){n(i);return}let s=i.version+1;i.close();let p=indexedDB.open(K,s);p.onupgradeneeded=f=>{let g=f.target.result;g.objectStoreNames.contains(P)||g.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},p.onsuccess=f=>n(f.target.result),p.onerror=f=>{l.error("[TF_SDK:331] \u274C DB Upgrade failed:",f),o(f)}},r.onerror=e=>{l.error("[TF_SDK:332] \u274C DB Open failed:",e),o(e.target.error)}})}function X(t){return t.objectStoreNames.contains(P)?P:t.objectStoreNames.contains(R)?R:null}async function te(){try{let t=await Z(),n=X(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).count();i.onsuccess=()=>{t.close(),o(i.result>0)},i.onerror=a=>{l.error("[TF_SDK:334] \u274C Error counting:",a),t.close(),o(!1)}}):(l.warn(`[TF_SDK:333] \u26A0\uFE0F Store missing \u2014 no '${P}' or '${R}' found`),t.close(),!1)}catch(t){return l.error("[TF_SDK:335] \u274C Error checking documents:",t),!1}}async function me(){try{let t=await Z(),n=X(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return l.error("[TF_SDK:336] \u274C Error getting documents:",t),[]}}async function be(t){try{let n=await Z(),o=X(n);if(!o)throw n.close(),new Error("Failed to open database with valid store.");return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).add(t);s.onsuccess=()=>{n.close(),r(s.result)},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:337] \u274C Error inserting document:",n),n}}async function ge(t){try{let n=await Z(),o=X(n);if(!o){n.close(),l.error("[TF_SDK:338] \u274C No valid document store found for deletion");return}return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).delete(t);s.onsuccess=()=>{n.close(),r()},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:339] \u274C Error deleting document:",n),n}}var Fe="AppDocuments",ve="documents",ye="documnets";function Ne(){return new Promise((t,n)=>{let o=indexedDB.open(Fe);o.onsuccess=r=>t(r.target.result),o.onerror=r=>n(r.target.error)})}function Le(t){return t.objectStoreNames.contains(ve)?ve:t.objectStoreNames.contains(ye)?ye:null}async function we(){try{let t=await Ne(),n=Le(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return logger.warn("[TF_SDK:264] \u26A0\uFE0F Error reading AppDocuments DB:",t),[]}}async function je(){if(typeof window.showDynamicModal!="function"){logger.error("[TF_SDK:265] \u274C showDynamicModal is not defined.");return}window.showDynamicModal("App Documents",[],`
|
|
8
8
|
<div style="text-align: center; padding: 40px;">
|
|
9
9
|
<div class="spinner-border text-primary" role="status">
|
|
10
10
|
<span class="visually-hidden">Loading...</span>
|
|
@@ -199,7 +199,7 @@ var Ee=Object.create;var ie=Object.defineProperty;var ke=Object.getOwnPropertyDe
|
|
|
199
199
|
</div>
|
|
200
200
|
${(W=e.themeData)!=null&&W.isCard?"</div>":""}
|
|
201
201
|
<div id="sticky-footer" class="${e.showFooter===!1?"footer-hidden":""}">
|
|
202
|
-
<div class="build-version">SDK v2.0.
|
|
202
|
+
<div class="build-version">SDK v2.0.39</div>
|
|
203
203
|
|
|
204
204
|
<button class="footer-btn footer-btn-secondary" id="prevBtn" style="display:none" onclick="FormOnPrevious()">
|
|
205
205
|
<i class="bi bi-chevron-left"></i> Previous
|
|
@@ -262,4 +262,4 @@ var Ee=Object.create;var ie=Object.defineProperty;var ke=Object.getOwnPropertyDe
|
|
|
262
262
|
|
|
263
263
|
// === SCRIPT_SEPARATOR ===
|
|
264
264
|
|
|
265
|
-
`);if(!window.__unviredSdkScriptsLoaded&&!window.__unviredSdkScriptsLoading){window.__unviredSdkScriptsLoading=!0,l.info("[TF_SDK:14] \u2705 Loading SDK scripts (jQuery, Formio, Recogito, LESS, components)...");let m=d=>{if(b){let C=b.querySelector(".sdk-loader-text");C&&(C.textContent=d)}};if(m("Loading Core Components..."),c[0]&&c[0].trim()){let d=document.createElement("script");d.textContent=c[0],d.setAttribute("data-unvired-script","jquery"),document.head.appendChild(d)}if(c[4]&&c[4].trim()){let d=document.createElement("script");d.textContent=c[4],d.setAttribute("data-unvired-script","choices"),document.head.appendChild(d)}if(m("Loading Formio Library..."),c[5]&&c[5].trim()){let d=document.createElement("script");d.textContent=c[5],d.setAttribute("data-unvired-script","formio"),document.head.appendChild(d),l.info("[TF_SDK:15] \u2705 Bundled Formio library injected.")}if(e.showComments){m("Loading Annotation Tools...");for(let d=1;d<=2;d++)if(c[d]&&c[d].trim()){let C=document.createElement("script");C.textContent=c[d],C.setAttribute("data-unvired-script",`recogito-${d}`),document.head.appendChild(C),await new Promise(A=>setTimeout(A,0))}}else l.info("[TF_SDK:16] \u2705 Skipping Recogito (comments disabled, optimized load)");if(m("Initializing Engine..."),c[3]&&c[3].trim()){let d=document.createElement("script");d.textContent=c[3],d.setAttribute("data-unvired-script","less"),document.head.appendChild(d)}window.form=window.form||{},window.platform=window.platform||{},window.ResizeObserver=window.ResizeObserver||ResizeObserver,typeof browserMD5File!="undefined"&&(window.form.BMF=new browserMD5File),window.less=window.less||{},typeof window.__Html5QrcodeLibrary__!="undefined"&&(window.html5QrCode=window.__Html5QrcodeLibrary__),typeof window.Html5QrcodeScanner=="undefined"&&(window.Html5QrcodeScanner=class{constructor(){l.warn("[TF_SDK:17] \u26A0\uFE0F Barcode library (Html5QrcodeScanner) is not loaded.")}render(){}clear(){}}),m("Initializing Components...");for(let d=6;d<c.length;d++){let C=c[d];if(C&&C.trim()){let A=document.createElement("script");A.textContent=C,A.setAttribute("data-unvired-script",`script-${d}`),document.head.appendChild(A),d%5===0&&await new Promise(V=>setTimeout(V,0))}}window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1,l.info("[TF_SDK:18] \u2705 All SDK scripts injected successfully"),document.addEventListener("click",function(d){let C=document.getElementById("unvired-more-btn"),A=document.getElementById("moreTooltip");C&&A&&!C.contains(d.target)&&!A.contains(d.target)&&(A.style.display="none")})}else if(window.__unviredSdkScriptsLoading)window.__unviredSdkScriptsLoaded||(l.warn("[TF_SDK:19] \u26A0\uFE0F Scripts marked as loading but not yet loaded - waiting..."),window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1);else{if(l.info("[TF_SDK:20] \u2705 SDK scripts already loaded \u2014 skipping injection"),typeof window.Formio=="undefined"){let m="ErrorCode : 005, Formio library not available even though scripts were loaded.";throw l.error("[TF_SDK:21] \u274C ",m),b&&b.classList.add("hidden"),s({type:"ERROR",errorMessage:m,data:{technicalError:new Error(m),formioPath:"bundled",timestamp:new Date().toISOString()}}),new Error(m)}l.info("[TF_SDK:22] \u2705 Formio verified (previously loaded)")}window.FORM_TEMPLATE=h,window.FORM_PREVIOUS_DATA=n,window.FORM_MODE=e.mode,window.FORM_COMMENTS_DATA=e.commentsData,window.FORM_VOB_ARR=e.vobArr,window.FORM_PLATFORM=e.platform,window.FORM_LANGUAGE=e.language,window.FORM_TRASLATIONS=e.translations,window.FORM_ENV=e.environmentVariable,window.FORM_THEME_DATA=e.themeData,window.FORM_USER_DATA=e.userData,window.FORM_USERS_LIST=e.usersList,window.FORM_CONTROL_DATA=e.controlData,window.FORM_PRIVATE_EXTERNAL=e.privateExternal,window.FORM_PERMISSION=e.permission,window.FORM_ATTACHMENT_FILE_KEYS=i,window.sendEventCallback=s,window.FORM_EVENTS={FORM_RENDER:"FORM_RENDER",SAVE:"FORM_SAVE",SUBMIT:"FORM_SUBMIT",SUBMIT_ERROR:"FORM_SUBMIT_ERROR",BACK_NAVIGATION:"FORM_BACK_NAVIGATION",ONCHANGE:"FORM_ONCHANGE",FORM_LOADED:"FORM_LOADED"};let v=r.querySelector("#form-back-btn"),k=r.querySelector("#unvired-more-btn");v&&(e.showBackButton?v.style.setProperty("display","flex","important"):v.style.setProperty("display","none","important")),k&&!e.showMoreButton&&k.style.setProperty("display","none","important"),window.__unviredFormsOptions=e,window.checkDocumentsVisibility(),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility(),e.platform==="web"?window.platform={isBrowser:!0,isAndroid:!1,iosPlatform:!1}:e.platform==="android"?window.platform={isBrowser:!1,isAndroid:!0,iosPlatform:!1}:e.platform==="ios"&&(window.platform={isBrowser:!1,isAndroid:!1,iosPlatform:!0});let O={};if(((oe=e.environmentVariable)==null?void 0:oe.length)>0)for(let m of e.environmentVariable)for(let d in m)O[d]=m[d];Object.keys(O).length>0&&(window.env=O);let S=r.querySelector("#sticky-header"),N=r.querySelector("#sticky-footer"),L=r.querySelector("#formio-wrapper"),H=r.querySelector("#comments-header");e.mode==="pdf"||e.mode==="print"?(r.classList.add(`${e.mode}-mode`),L&&L.classList.add(`${e.mode}-mode`),S&&(S.style.display="none"),N&&(N.style.display="none")):(S&&(S.style.display="flex"),N&&(N.style.display="flex")),H&&(H.style.display="none"),e.themeData&&Object.keys(e.themeData).length>0&&(window.FORM_THEME_DATA=e.themeData),e.language&&(window.FORMIO_LANGUAGE=e.language),e.translations&&(window.FORMIO_I18N=e.translations),e.userData&&(window.firstName=e.userData.firstName,window.lastName=e.userData.lastName,window.form=window.form||{},Object.assign(window.form,e.userData)),window.less=window.less||{},Object.assign(window.less,{async:!0,environment:"production",fileAsync:!1,onReady:!0,useFileCache:!0});let _=n;if(n&&(l.info("[TF_SDK:23] \u2705 Processing file IDs in submission data (fetching from IndexedDB)..."),_=await pe(n,s,i),l.info("[TF_SDK:24] \u2705 File IDs processed \u2014 handing off to form renderer")),b){let m=b.querySelector(".sdk-loader-text");m&&(m.textContent="Initializing Form...")}return typeof window.loadTRform!="function"?(l.info("[TF_SDK:25] \u2705 loadTRform not ready yet \u2014 waiting for web-turbo-formio.js to signal..."),await new Promise(m=>{let d=()=>{document.removeEventListener("LoadRNformReady",d),l.info("[TF_SDK:26] \u2705 loadTRform is now ready (LoadRNformReady event received)"),m()};document.addEventListener("LoadRNformReady",d),typeof window.loadTRform=="function"&&d()})):l.info("[TF_SDK:27] \u2705 loadTRform already available \u2014 invoking immediately"),l.info("[TF_SDK:28] \u2705 Handing off to loadTRform (web-turbo-formio.js)..."),await window.loadTRform(h,_,e.themeData,e.mode,e.language,e.translations,e.controlData,e.privateExternal,e.permission,i),Ce(),{sendAction:m=>{var d;m.type==="SET_IMAGE_DATA"&&((d=window.setImageData)==null||d.call(window,m.imageData,m.controlId,m.fileName))},destroy:()=>{r.innerHTML=""}}}window.closeDocumentsModal=function(){if(typeof $!="undefined"&&$.fn.modal)$("#documentsModal").modal("hide");else{let t=document.getElementById("documentsModal");t&&(t.style.display="none",t.classList.remove("active"))}};window.checkDocumentsVisibility=async function(){let t=document.getElementById("documentsOption"),n=document.getElementById("documentsDivider"),o=await te();t.style.display=o?"block":"none",n&&(n.style.display=o?"block":"none"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()};window.insertAppDocument=async function(t){try{return await be(t),l.info("[TF_SDK:29] \u2705 Document inserted",{id:t==null?void 0:t.id}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:30] \u274C Failed to insert document",n),!1}};window.deleteAppDocument=async function(t){try{return await ge(t),l.info("[TF_SDK:31] \u2705 Document deleted",{id:t}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:32] \u274C Failed to delete document",n),!1}};window.getAllDocuments=me;window.hasDocuments=te;function He(){return"2.0.
|
|
265
|
+
`);if(!window.__unviredSdkScriptsLoaded&&!window.__unviredSdkScriptsLoading){window.__unviredSdkScriptsLoading=!0,l.info("[TF_SDK:14] \u2705 Loading SDK scripts (jQuery, Formio, Recogito, LESS, components)...");let m=d=>{if(b){let C=b.querySelector(".sdk-loader-text");C&&(C.textContent=d)}};if(m("Loading Core Components..."),c[0]&&c[0].trim()){let d=document.createElement("script");d.textContent=c[0],d.setAttribute("data-unvired-script","jquery"),document.head.appendChild(d)}if(c[4]&&c[4].trim()){let d=document.createElement("script");d.textContent=c[4],d.setAttribute("data-unvired-script","choices"),document.head.appendChild(d)}if(m("Loading Formio Library..."),c[5]&&c[5].trim()){let d=document.createElement("script");d.textContent=c[5],d.setAttribute("data-unvired-script","formio"),document.head.appendChild(d),l.info("[TF_SDK:15] \u2705 Bundled Formio library injected.")}if(e.showComments){m("Loading Annotation Tools...");for(let d=1;d<=2;d++)if(c[d]&&c[d].trim()){let C=document.createElement("script");C.textContent=c[d],C.setAttribute("data-unvired-script",`recogito-${d}`),document.head.appendChild(C),await new Promise(A=>setTimeout(A,0))}}else l.info("[TF_SDK:16] \u2705 Skipping Recogito (comments disabled, optimized load)");if(m("Initializing Engine..."),c[3]&&c[3].trim()){let d=document.createElement("script");d.textContent=c[3],d.setAttribute("data-unvired-script","less"),document.head.appendChild(d)}window.form=window.form||{},window.platform=window.platform||{},window.ResizeObserver=window.ResizeObserver||ResizeObserver,typeof browserMD5File!="undefined"&&(window.form.BMF=new browserMD5File),window.less=window.less||{},typeof window.__Html5QrcodeLibrary__!="undefined"&&(window.html5QrCode=window.__Html5QrcodeLibrary__),typeof window.Html5QrcodeScanner=="undefined"&&(window.Html5QrcodeScanner=class{constructor(){l.warn("[TF_SDK:17] \u26A0\uFE0F Barcode library (Html5QrcodeScanner) is not loaded.")}render(){}clear(){}}),m("Initializing Components...");for(let d=6;d<c.length;d++){let C=c[d];if(C&&C.trim()){let A=document.createElement("script");A.textContent=C,A.setAttribute("data-unvired-script",`script-${d}`),document.head.appendChild(A),d%5===0&&await new Promise(V=>setTimeout(V,0))}}window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1,l.info("[TF_SDK:18] \u2705 All SDK scripts injected successfully"),document.addEventListener("click",function(d){let C=document.getElementById("unvired-more-btn"),A=document.getElementById("moreTooltip");C&&A&&!C.contains(d.target)&&!A.contains(d.target)&&(A.style.display="none")})}else if(window.__unviredSdkScriptsLoading)window.__unviredSdkScriptsLoaded||(l.warn("[TF_SDK:19] \u26A0\uFE0F Scripts marked as loading but not yet loaded - waiting..."),window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1);else{if(l.info("[TF_SDK:20] \u2705 SDK scripts already loaded \u2014 skipping injection"),typeof window.Formio=="undefined"){let m="ErrorCode : 005, Formio library not available even though scripts were loaded.";throw l.error("[TF_SDK:21] \u274C ",m),b&&b.classList.add("hidden"),s({type:"ERROR",errorMessage:m,data:{technicalError:new Error(m),formioPath:"bundled",timestamp:new Date().toISOString()}}),new Error(m)}l.info("[TF_SDK:22] \u2705 Formio verified (previously loaded)")}window.FORM_TEMPLATE=h,window.FORM_PREVIOUS_DATA=n,window.FORM_MODE=e.mode,window.FORM_COMMENTS_DATA=e.commentsData,window.FORM_VOB_ARR=e.vobArr,window.FORM_PLATFORM=e.platform,window.FORM_LANGUAGE=e.language,window.FORM_TRASLATIONS=e.translations,window.FORM_ENV=e.environmentVariable,window.FORM_THEME_DATA=e.themeData,window.FORM_USER_DATA=e.userData,window.FORM_USERS_LIST=e.usersList,window.FORM_CONTROL_DATA=e.controlData,window.FORM_PRIVATE_EXTERNAL=e.privateExternal,window.FORM_PERMISSION=e.permission,window.FORM_ATTACHMENT_FILE_KEYS=i,window.sendEventCallback=s,window.FORM_EVENTS={FORM_RENDER:"FORM_RENDER",SAVE:"FORM_SAVE",SUBMIT:"FORM_SUBMIT",SUBMIT_ERROR:"FORM_SUBMIT_ERROR",BACK_NAVIGATION:"FORM_BACK_NAVIGATION",ONCHANGE:"FORM_ONCHANGE",FORM_LOADED:"FORM_LOADED"};let v=r.querySelector("#form-back-btn"),k=r.querySelector("#unvired-more-btn");v&&(e.showBackButton?v.style.setProperty("display","flex","important"):v.style.setProperty("display","none","important")),k&&!e.showMoreButton&&k.style.setProperty("display","none","important"),window.__unviredFormsOptions=e,window.checkDocumentsVisibility(),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility(),e.platform==="web"?window.platform={isBrowser:!0,isAndroid:!1,iosPlatform:!1}:e.platform==="android"?window.platform={isBrowser:!1,isAndroid:!0,iosPlatform:!1}:e.platform==="ios"&&(window.platform={isBrowser:!1,isAndroid:!1,iosPlatform:!0});let O={};if(((oe=e.environmentVariable)==null?void 0:oe.length)>0)for(let m of e.environmentVariable)for(let d in m)O[d]=m[d];Object.keys(O).length>0&&(window.env=O);let S=r.querySelector("#sticky-header"),N=r.querySelector("#sticky-footer"),L=r.querySelector("#formio-wrapper"),H=r.querySelector("#comments-header");e.mode==="pdf"||e.mode==="print"?(r.classList.add(`${e.mode}-mode`),L&&L.classList.add(`${e.mode}-mode`),S&&(S.style.display="none"),N&&(N.style.display="none")):(S&&(S.style.display="flex"),N&&(N.style.display="flex")),H&&(H.style.display="none"),e.themeData&&Object.keys(e.themeData).length>0&&(window.FORM_THEME_DATA=e.themeData),e.language&&(window.FORMIO_LANGUAGE=e.language),e.translations&&(window.FORMIO_I18N=e.translations),e.userData&&(window.firstName=e.userData.firstName,window.lastName=e.userData.lastName,window.form=window.form||{},Object.assign(window.form,e.userData)),window.less=window.less||{},Object.assign(window.less,{async:!0,environment:"production",fileAsync:!1,onReady:!0,useFileCache:!0});let _=n;if(n&&(l.info("[TF_SDK:23] \u2705 Processing file IDs in submission data (fetching from IndexedDB)..."),_=await pe(n,s,i),l.info("[TF_SDK:24] \u2705 File IDs processed \u2014 handing off to form renderer")),b){let m=b.querySelector(".sdk-loader-text");m&&(m.textContent="Initializing Form...")}return typeof window.loadTRform!="function"?(l.info("[TF_SDK:25] \u2705 loadTRform not ready yet \u2014 waiting for web-turbo-formio.js to signal..."),await new Promise(m=>{let d=()=>{document.removeEventListener("LoadRNformReady",d),l.info("[TF_SDK:26] \u2705 loadTRform is now ready (LoadRNformReady event received)"),m()};document.addEventListener("LoadRNformReady",d),typeof window.loadTRform=="function"&&d()})):l.info("[TF_SDK:27] \u2705 loadTRform already available \u2014 invoking immediately"),l.info("[TF_SDK:28] \u2705 Handing off to loadTRform (web-turbo-formio.js)..."),await window.loadTRform(h,_,e.themeData,e.mode,e.language,e.translations,e.controlData,e.privateExternal,e.permission,i),Ce(),{sendAction:m=>{var d;m.type==="SET_IMAGE_DATA"&&((d=window.setImageData)==null||d.call(window,m.imageData,m.controlId,m.fileName))},destroy:()=>{r.innerHTML=""}}}window.closeDocumentsModal=function(){if(typeof $!="undefined"&&$.fn.modal)$("#documentsModal").modal("hide");else{let t=document.getElementById("documentsModal");t&&(t.style.display="none",t.classList.remove("active"))}};window.checkDocumentsVisibility=async function(){let t=document.getElementById("documentsOption"),n=document.getElementById("documentsDivider"),o=await te();t.style.display=o?"block":"none",n&&(n.style.display=o?"block":"none"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()};window.insertAppDocument=async function(t){try{return await be(t),l.info("[TF_SDK:29] \u2705 Document inserted",{id:t==null?void 0:t.id}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:30] \u274C Failed to insert document",n),!1}};window.deleteAppDocument=async function(t){try{return await ge(t),l.info("[TF_SDK:31] \u2705 Document deleted",{id:t}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:32] \u274C Failed to delete document",n),!1}};window.getAllDocuments=me;window.hasDocuments=te;function He(){return"2.0.39"}function Se(t){let n=typeof t=="string"?document.getElementById(t):t;n||(n=document.querySelector(".tf-formio-sdk")||document.body);let o=n.querySelectorAll("table"),r=0,e=null;return o.forEach(i=>{let a=i.getBoundingClientRect().width;a>r&&(r=a,e=i)}),{maxWidth:r,widestTable:e}}window.getMaxTableWidth=Se;typeof window!="undefined"&&(window.TurboForms=window.TurboForms||{loadForm:ze,getBuildVersion:He,getMaxTableWidth:Se});export{He as getBuildVersion,Se as getMaxTableWidth,ze as loadForm};
|
package/dist/turboforms.html
CHANGED
|
@@ -42901,7 +42901,7 @@ window.CommentOnBack = CommentOnBack;
|
|
|
42901
42901
|
|
|
42902
42902
|
|
|
42903
42903
|
<div id="sticky-footer">
|
|
42904
|
-
<div class="build-version">SDK v2.0.
|
|
42904
|
+
<div class="build-version">SDK v2.0.39</div>
|
|
42905
42905
|
<div class="relative-position">
|
|
42906
42906
|
<button id="unvired-more-btn" class="ui button primary dataGrid-addRow" onclick="toggleTooltip()">
|
|
42907
42907
|
<i class="icon options"></i>
|
package/dist/turboforms.js
CHANGED
|
@@ -4,7 +4,7 @@ var TurboForms=(()=>{var Oe=Object.create;var q=Object.defineProperty;var Pe=Obj
|
|
|
4
4
|
font-weight: bold;
|
|
5
5
|
padding: 2px 6px;
|
|
6
6
|
border-radius: 4px;
|
|
7
|
-
`;if(typeof window!="undefined"&&typeof e[0]=="string"){let f=e[0];e[0]=`%c${t.toUpperCase()}%c ${f}`,e.splice(1,0,p,"color: inherit; background: transparent; font-weight: normal;")}r.apply(void 0,e)}};T.default.setLevel("trace");T.default.setLevel=function(t){let n=String(t).toLowerCase();["trace","debug","info","warn","error","all"].includes(n)?(ee=n,typeof window!="undefined"&&console.log(`%c[SYSTEM]%c Log level set to EXACTLY: ${n.toUpperCase()}`,"color: white; background: #000; padding: 2px 6px; border-radius: 4px; font-weight: bold;","color: inherit; background: transparent;")):console.warn(`[SYSTEM] Invalid log level: ${t}. Use: trace, debug, info, warn, error, or all.`)};typeof window!="undefined"&&(window.__log=T.default,window.logger=T.default,window.setLogLevel=T.default.setLevel);var l=T.default;function te(t,n,o=!1){if(o||l.info("[TF_SDK:347] \u2705 attachNestedFormsToMainForm() called"),!t||typeof t!="object")return t;for(let r in t)if(typeof t[r]=="object")te(t[r],n,!0);else if(r==="nestedFormComponenttype"&&t.nestedFormComponenttype==="smartNestedForm"){let e=t.selNestedFormVersion,i=t.selectedNestedFormId;if(e&&i){let a=n.filter(s=>s.formId==i&&s.version==e);if(a.length>0){let s=a[0].formDesign||a[0].formData;if(typeof s=="string")try{s=JSON.parse(s)}catch(p){l.warn("[TF_SDK:348] \u26A0\uFE0F Failed to parse nested form design",p)}t.formDesign=s,t.formdesign=s,s&&typeof s=="object"&&s.components&&(t.components=s.components,t.display=s.display||"form")}}}return t}function ue(t){if(!t||typeof t!="object")return t;let n={...t};for(let o of Object.keys(t)){let r=o.trim().replace(/[\s_]+(.)/g,(e,i)=>i.toUpperCase()).replace(/^(.)/,(e,i)=>i.toLowerCase());r!==o&&(n[r]=t[o])}return n}function Y(t,n,o="dataSrc",r="masterdata",e=!1){if(e||l.info("[TF_SDK:349] \u2705 attachMasterDataToForm() called"),!t||typeof t!="object")return t;if(Array.isArray(t))return t.forEach(i=>Y(i,n,o,r,!0)),t;for(let i in t)if(t.hasOwnProperty(i)){if(typeof t[i]=="object")Y(t[i],n,o,r,!0);else if(i===o&&t[i]===r)if(l.info("[TF_SDK:350] \u2705 Found masterdata component:",t.key,"selMasterdataId:",t.selMasterdataId),Array.isArray(n)){let a=[];if(t.selMasterdataId){let s=n.find(p=>p.masterdataId===t.selMasterdataId);a=s?s.submissionData||[]:[]}else a=n.flatMap(s=>s.submissionData||[]);a=a.map(s=>ue(s)),t.masterdata=a,l.info("[TF_SDK:351] \u2705 Attached masterdata length:",a.length)}else if(n&&Array.isArray(n.submissionData)){let a=n.submissionData;t.masterdata=a.map(s=>ue(s))}else t.masterdata=[]}return t}function D(t,n){if(Array.isArray(t))for(let o of t)n(o),Array.isArray(o.components)&&D(o.components,n),Array.isArray(o.columns)&&o.columns.forEach(r=>D(r.components,n)),Array.isArray(o.rows)&&o.rows.forEach(r=>{Array.isArray(r)&&r.forEach(e=>{e&&e.components&&D(e.components,n)})}),Array.isArray(o.fieldSet)&&D(o.fieldSet,n)}function de(t,n){l.info("[TF_SDK:352] \u2705 validateNestedForms() called");let o=null,r=!1;return D(t==null?void 0:t.components,e=>{if(e.selectedNestedFormId&&e.selNestedFormVersion&&e.nestedFormComponenttype==="smartNestedForm"){if(r=!0,!Array.isArray(n)||n.length===0){o="Nested Form Data must be a non-empty array when a component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' is present in the form.";return}if(!n.find(a=>a.formId==e.selectedNestedFormId&&a.version==e.selNestedFormVersion)){let a=n.find(s=>s.formId==e.selectedNestedFormId);a?o=`Version is wrong for selectedNestedFormId: ${e.selectedNestedFormId}. Expected version: ${a.version}, got: ${e.selNestedFormVersion}`:o=`ID is wrong. No nested form found for selectedNestedFormId: ${e.selectedNestedFormId}`}}}),Array.isArray(n)&&n.length>0&&!r&&(o="Nested Form Data is provided but no component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' exists in the form."),o}function fe(t,n){l.info("[TF_SDK:353] \u2705 validateMasterdata() called");let o=null,r=!1,e=[],i=!1;if(D(t.components,a=>{if(a.dataSrc==="masterdata"&&(r=!0,a.selMasterdataId&&Array.isArray(n))){let s=n.find(p=>p.masterdataId===a.selMasterdataId);s?Array.isArray(s.submissionData)||(i=!0):e.push(a.selMasterdataId)}}),r){if(!Array.isArray(n)||n.length===0)return o="Master Data must be a non-empty array when a component with dataSrc='masterdata' is present in the form.",o;if(e.length>0)return o=`Master Data is missing entries for the following masterdataIds: ${e.join(", ")}`,o;if(i)return o="Master Data entries must contain a 'submissionData' array.",o}return Array.isArray(n)&&n.length>0&&!r&&(o="Master Data is provided but no component with dataSrc='masterdata' exists in the form."),o}function pe({type:t,message:n="",errorMessage:o="",data:r={}}){let e;return t==="ERROR"?e={type:"ERROR",errorMessage:o+", contact your admin or tech team",data:r}:e={type:t,message:n,data:r},e}function K(t,n,o){if(Array.isArray(t))t.forEach(r=>K(r,n,o));else if(t&&typeof t=="object")for(let r in t){if(typeof t[r]=="string"){let e=!1;if(/^@\s*title\s*@\s*$/.test(t[r])||/^\[\s*title\s*\]$/.test(t[r])?o&&o.title&&(t[r]=o.title,e=!0):(/^@\s*description\s*@\s*$/.test(t[r])||/^\[\s*description\s*\]$/.test(t[r]))&&o&&o.description&&(t[r]=o.description,e=!0),!e)for(let i in n){let a=new RegExp(`^@\\s*${i}\\s*@\\s*$`),s=new RegExp(`^\\[\\s*${i}\\s*\\]$`);if(a.test(t[r])||s.test(t[r])){t[r]=n[i],e=!0;break}}if(!e){let i=/^@\s*([^@\s]+)\s*@\s*$/,a=/^\[\s*([^\]\s]+)\s*\]$/;(i.test(t[r])||a.test(t[r]))&&(t[r]="")}}K(t[r],n,o)}}async function he(t,n,o){if(l.info("[TF_SDK:340] \u2705 validateAttachments() called"),!n||typeof n!="object")return{missingFiles:[],fileKeys:[]};let r=[];function e(f,g=[]){if(!Array.isArray(f))return g;for(let u of f)u.type==="file"&&u.key&&g.push(u.key),Array.isArray(u.components)?e(u.components,g):Array.isArray(u.columns)?u.columns.forEach(y=>e(y.components,g)):Array.isArray(u.rows)?u.rows.forEach(y=>y.forEach(w=>e(w.components,g))):u.tabs&&Array.isArray(u.tabs)&&u.tabs.forEach(y=>e(y.components,g));return g}let i=e((t==null?void 0:t.components)||[]),a=new Set(i),s=new WeakSet;async function p(f){if(!(!f||typeof f!="object"||s.has(f))){s.add(f);for(let g of Object.keys(f)){let u=f[g];a.has(g)&&Array.isArray(u)&&await Promise.all(u.map(async y=>{if(typeof y=="string"&&y.trim())try{let w=await Le(y);(!w||!w.id||!w.data&&!w.url)&&r.push({fileId:y,field:g,reason:w?"Incomplete file record (missing id/data/url)":"File not found in IndexedDB"})}catch(w){r.push({fileId:y,field:g,reason:"IndexedDB not initialized"})}})),typeof u=="object"&&u!==null&&await p(u)}}}return await p(n),r.length>0&&(o==null||o({type:"GET_ATTACHMENT",message:"Requesting missing attachments from middleware",data:{missingFiles:r}})),{missingFiles:r,fileKeys:i}}var U=null;function Le(t){return l.info("[TF_SDK:341] \u2705 getFileFromIndexedDB() called",{fileId:t}),"indexedDB"in window?(U||(U=new Promise((n,o)=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){U=null,o(new Error("Missing Files store"));return}n(i)},r.onerror=()=>{U=null,o(new Error("Failed to open IndexedDB"))}})),U.then(n=>new Promise(o=>{let r=n.transaction("Files","readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}))):Promise.resolve(null)}async function me(t,n,o=[]){if(l.info("[TF_SDK:343] \u2705 processFileIds() called"),!t||typeof t!="object")return t;let r=new Set(o),e=JSON.parse(JSON.stringify(t)),i=new WeakSet;async function a(s){if(!(!s||typeof s!="object"||i.has(s))){i.add(s);for(let p of Object.keys(s)){let f=s[p];if(r.has(p)&&Array.isArray(f)){let g=[];for(let u=0;u<f.length;u++)if(typeof f[u]=="string"){let y=await je(f[u]);y?g.push({name:y.name,originalName:y.name,size:y.size,storage:"SmartStorage",type:y.type,url:y.url,key:p,uid:f[u],mode:y.mode||"G"}):l.warn(`[TF_SDK:344] \u26A0\uFE0F File not found in IndexedDB: ${f[u]} - removing from submission data`)}else typeof f[u]=="object"&&f[u]!==null&&await a(f[u]),g.push(f[u]);s[p]=g}else typeof f=="object"&&f!==null&&await a(f)}}}return await a(e),e}var z=null;async function je(t){if(l.info("[TF_SDK:345] \u2705 getFileFromIndexedDB() called",{fileId:t}),!("indexedDB"in window))return null;z||(z=new Promise(o=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){l.warn("[TF_SDK:346] \u26A0\uFE0F Files store not found"),z=null,o(null);return}o(i)},r.onerror=()=>{z=null,o(null)}}));let n=await z;return n?new Promise(o=>{let r=n.transaction(["Files"],"readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}):null}function be(t,n){if(l.info("[TF_SDK:342] \u2705 processDynamicValues() called"),!t||!t.components)return null;let o={},r=n&&(Array.isArray(n)&&n.length>0||!Array.isArray(n)&&Object.keys(n).length>0);r&&(Array.isArray(n)?n.forEach(i=>{i.key&&(o[i.key]=i.value)}):o=n||{});function e(i){if(!i||!Array.isArray(i))return null;for(let a of i){if(typeof a.defaultValue=="string"&&a.defaultValue.trim().startsWith("{{")&&a.defaultValue.trim().endsWith("}}")){let p=a.defaultValue.trim();r&&o[p]!==void 0&&(a.defaultValue=o[p])}a.label&&typeof a.label=="string"&&a.label.length>35&&(a.label=a.label.substring(0,35)+"...");let s;if(a.components&&(s=e(a.components),s))return s;if(a.columns&&Array.isArray(a.columns)){for(let p of a.columns)if(s=e(p.components),s)return s}if(a.rows&&Array.isArray(a.rows)){for(let p of a.rows)if(Array.isArray(p)){for(let f of p)if(s=e(f.components),s)return s}}}return null}return e(t.components)}var Z="AppDocuments",P="documents",R="documnets";function X(t){return t?new Promise((n,o)=>{let r=indexedDB.open(Z,t);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>n(e.target.result),r.onerror=e=>{l.error("[TF_SDK:330] \u274C DB error:",e.target.error),o(e.target.error)}}):typeof window!="undefined"&&window.indexedDBUtils&&window.indexedDBUtils.openDynamicDB?window.indexedDBUtils.openDynamicDB(Z,P,R):new Promise((n,o)=>{let r=indexedDB.open(Z);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>{let i=e.target.result;if(i.objectStoreNames.contains(P)||i.objectStoreNames.contains(R)){n(i);return}let s=i.version+1;i.close();let p=indexedDB.open(Z,s);p.onupgradeneeded=f=>{let g=f.target.result;g.objectStoreNames.contains(P)||g.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},p.onsuccess=f=>n(f.target.result),p.onerror=f=>{l.error("[TF_SDK:331] \u274C DB Upgrade failed:",f),o(f)}},r.onerror=e=>{l.error("[TF_SDK:332] \u274C DB Open failed:",e),o(e.target.error)}})}function J(t){return t.objectStoreNames.contains(P)?P:t.objectStoreNames.contains(R)?R:null}async function ne(){try{let t=await X(),n=J(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).count();i.onsuccess=()=>{t.close(),o(i.result>0)},i.onerror=a=>{l.error("[TF_SDK:334] \u274C Error counting:",a),t.close(),o(!1)}}):(l.warn(`[TF_SDK:333] \u26A0\uFE0F Store missing \u2014 no '${P}' or '${R}' found`),t.close(),!1)}catch(t){return l.error("[TF_SDK:335] \u274C Error checking documents:",t),!1}}async function ge(){try{let t=await X(),n=J(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return l.error("[TF_SDK:336] \u274C Error getting documents:",t),[]}}async function ve(t){try{let n=await X(),o=J(n);if(!o)throw n.close(),new Error("Failed to open database with valid store.");return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).add(t);s.onsuccess=()=>{n.close(),r(s.result)},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:337] \u274C Error inserting document:",n),n}}async function ye(t){try{let n=await X(),o=J(n);if(!o){n.close(),l.error("[TF_SDK:338] \u274C No valid document store found for deletion");return}return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).delete(t);s.onsuccess=()=>{n.close(),r()},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:339] \u274C Error deleting document:",n),n}}var Be="AppDocuments",we="documents",xe="documnets";function Ve(){return new Promise((t,n)=>{let o=indexedDB.open(Be);o.onsuccess=r=>t(r.target.result),o.onerror=r=>n(r.target.error)})}function Ue(t){return t.objectStoreNames.contains(we)?we:t.objectStoreNames.contains(xe)?xe:null}async function Ce(){try{let t=await Ve(),n=Ue(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return logger.warn("[TF_SDK:264] \u26A0\uFE0F Error reading AppDocuments DB:",t),[]}}async function ze(){if(typeof window.showDynamicModal!="function"){logger.error("[TF_SDK:265] \u274C showDynamicModal is not defined.");return}window.showDynamicModal("App Documents",[],`
|
|
7
|
+
`;if(typeof window!="undefined"&&typeof e[0]=="string"){let f=e[0];e[0]=`%c${t.toUpperCase()}%c ${f}`,e.splice(1,0,p,"color: inherit; background: transparent; font-weight: normal;")}r.apply(void 0,e)}};T.default.setLevel("trace");T.default.setLevel=function(t){let n=String(t).toLowerCase();["trace","debug","info","warn","error","all"].includes(n)?(ee=n,typeof window!="undefined"&&console.log(`%c[SYSTEM]%c Log level set to EXACTLY: ${n.toUpperCase()}`,"color: white; background: #000; padding: 2px 6px; border-radius: 4px; font-weight: bold;","color: inherit; background: transparent;")):console.warn(`[SYSTEM] Invalid log level: ${t}. Use: trace, debug, info, warn, error, or all.`)};typeof window!="undefined"&&(window.__log=T.default,window.logger=T.default,window.setLogLevel=T.default.setLevel);var l=T.default;function te(t,n,o=!1){if(o||l.info("[TF_SDK:347] \u2705 attachNestedFormsToMainForm() called"),!t||typeof t!="object")return t;for(let r in t)if(typeof t[r]=="object")te(t[r],n,!0);else if(r==="nestedFormComponenttype"&&t.nestedFormComponenttype==="smartNestedForm"){let e=t.selNestedFormVersion,i=t.selectedNestedFormId;if(e&&i){let a=n.filter(s=>s.formId==i&&s.version==e);if(a.length>0){let s=a[0].formDesign||a[0].formData;if(typeof s=="string")try{s=JSON.parse(s)}catch(p){l.warn("[TF_SDK:348] \u26A0\uFE0F Failed to parse nested form design",p)}t.formDesign=s,t.formdesign=s,s&&typeof s=="object"&&s.components&&(t.components=s.components,t.display=s.display||"form")}}}return t}function ue(t){if(!t||typeof t!="object")return t;let n={...t};for(let o of Object.keys(t)){let r=o.trim().replace(/[\s_]+(.)/g,(e,i)=>i.toUpperCase()).replace(/^(.)/,(e,i)=>i.toLowerCase());r!==o&&(n[r]=t[o])}return n}function Y(t,n,o="dataSrc",r="masterdata",e=!1){if(e||l.info("[TF_SDK:349] \u2705 attachMasterDataToForm() called"),!t||typeof t!="object")return t;if(Array.isArray(t))return t.forEach(i=>Y(i,n,o,r,!0)),t;for(let i in t)if(t.hasOwnProperty(i)){if(typeof t[i]=="object")Y(t[i],n,o,r,!0);else if(i===o&&t[i]===r)if(l.info("[TF_SDK:350] \u2705 Found masterdata component:",t.key,"selMasterdataId:",t.selMasterdataId),Array.isArray(n)){let a=[];if(t.selMasterdataId){let s=n.find(p=>p.masterdataId===t.selMasterdataId);a=s?s.submissionData||[]:[]}else a=n.flatMap(s=>s.submissionData||[]);a=a.map(s=>ue(s)),t.masterdata=a,l.info("[TF_SDK:351] \u2705 Attached masterdata length:",a.length)}else if(n&&Array.isArray(n.submissionData)){let a=n.submissionData;t.masterdata=a.map(s=>ue(s))}else t.masterdata=[]}return t}function D(t,n){if(Array.isArray(t))for(let o of t)n(o),Array.isArray(o.components)&&D(o.components,n),Array.isArray(o.columns)&&o.columns.forEach(r=>D(r.components,n)),Array.isArray(o.rows)&&o.rows.forEach(r=>{Array.isArray(r)&&r.forEach(e=>{e&&e.components&&D(e.components,n)})}),Array.isArray(o.fieldSet)&&D(o.fieldSet,n)}function de(t,n){l.info("[TF_SDK:352] \u2705 validateNestedForms() called");let o=null,r=!1;return D(t==null?void 0:t.components,e=>{if(e.selectedNestedFormId&&e.selNestedFormVersion&&e.nestedFormComponenttype==="smartNestedForm"){if(r=!0,!Array.isArray(n)||n.length===0){o="Nested Form Data must be a non-empty array when a component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' is present in the form.";return}if(!n.find(a=>a.formId==e.selectedNestedFormId&&a.version==e.selNestedFormVersion)){let a=n.find(s=>s.formId==e.selectedNestedFormId);a?o=`Version is wrong for selectedNestedFormId: ${e.selectedNestedFormId}. Expected version: ${a.version}, got: ${e.selNestedFormVersion}`:o=`ID is wrong. No nested form found for selectedNestedFormId: ${e.selectedNestedFormId}`}}}),Array.isArray(n)&&n.length>0&&!r&&(o="Nested Form Data is provided but no component with selectedNestedFormId, selNestedFormVersion, and nestedFormComponenttype='smartNestedForm' exists in the form."),o}function fe(t,n){l.info("[TF_SDK:353] \u2705 validateMasterdata() called");let o=null,r=!1,e=[],i=!1;if(D(t.components,a=>{a.dataSrc==="masterdata"&&(r=!0,a.selMasterdataId&&Array.isArray(n)&&(n.find(p=>p.masterdataId===a.selMasterdataId)||e.push(a.selMasterdataId)))}),Array.isArray(n)&&n.length>0&&(i=!n.some(a=>Array.isArray(a.submissionData))),r){if(!Array.isArray(n)||n.length===0)return o="Master Data must be a non-empty array when a component with dataSrc='masterdata' is present in the form.",o;if(e.length>0&&l.warn(`[TF_SDK] \u26A0\uFE0F Master Data is missing entries for the following masterdataIds: ${e.join(", ")}`),i)return o="Master Data entries must contain a 'submissionData' array.",o}return Array.isArray(n)&&n.length>0&&!r&&(o="Master Data is provided but no component with dataSrc='masterdata' exists in the form."),o}function pe({type:t,message:n="",errorMessage:o="",data:r={}}){let e;return t==="ERROR"?e={type:"ERROR",errorMessage:o+", contact your admin or tech team",data:r}:e={type:t,message:n,data:r},e}function K(t,n,o){if(Array.isArray(t))t.forEach(r=>K(r,n,o));else if(t&&typeof t=="object")for(let r in t){if(typeof t[r]=="string"){let e=!1;if(/^@\s*title\s*@\s*$/.test(t[r])||/^\[\s*title\s*\]$/.test(t[r])?o&&o.title&&(t[r]=o.title,e=!0):(/^@\s*description\s*@\s*$/.test(t[r])||/^\[\s*description\s*\]$/.test(t[r]))&&o&&o.description&&(t[r]=o.description,e=!0),!e)for(let i in n){let a=new RegExp(`^@\\s*${i}\\s*@\\s*$`),s=new RegExp(`^\\[\\s*${i}\\s*\\]$`);if(a.test(t[r])||s.test(t[r])){t[r]=n[i],e=!0;break}}if(!e){let i=/^@\s*([^@\s]+)\s*@\s*$/,a=/^\[\s*([^\]\s]+)\s*\]$/;(i.test(t[r])||a.test(t[r]))&&(t[r]="")}}K(t[r],n,o)}}async function he(t,n,o){if(l.info("[TF_SDK:340] \u2705 validateAttachments() called"),!n||typeof n!="object")return{missingFiles:[],fileKeys:[]};let r=[];function e(f,g=[]){if(!Array.isArray(f))return g;for(let u of f)u.type==="file"&&u.key&&g.push(u.key),Array.isArray(u.components)?e(u.components,g):Array.isArray(u.columns)?u.columns.forEach(y=>e(y.components,g)):Array.isArray(u.rows)?u.rows.forEach(y=>y.forEach(w=>e(w.components,g))):u.tabs&&Array.isArray(u.tabs)&&u.tabs.forEach(y=>e(y.components,g));return g}let i=e((t==null?void 0:t.components)||[]),a=new Set(i),s=new WeakSet;async function p(f){if(!(!f||typeof f!="object"||s.has(f))){s.add(f);for(let g of Object.keys(f)){let u=f[g];a.has(g)&&Array.isArray(u)&&await Promise.all(u.map(async y=>{if(typeof y=="string"&&y.trim())try{let w=await Le(y);(!w||!w.id||!w.data&&!w.url)&&r.push({fileId:y,field:g,reason:w?"Incomplete file record (missing id/data/url)":"File not found in IndexedDB"})}catch(w){r.push({fileId:y,field:g,reason:"IndexedDB not initialized"})}})),typeof u=="object"&&u!==null&&await p(u)}}}return await p(n),r.length>0&&(o==null||o({type:"GET_ATTACHMENT",message:"Requesting missing attachments from middleware",data:{missingFiles:r}})),{missingFiles:r,fileKeys:i}}var U=null;function Le(t){return l.info("[TF_SDK:341] \u2705 getFileFromIndexedDB() called",{fileId:t}),"indexedDB"in window?(U||(U=new Promise((n,o)=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){U=null,o(new Error("Missing Files store"));return}n(i)},r.onerror=()=>{U=null,o(new Error("Failed to open IndexedDB"))}})),U.then(n=>new Promise(o=>{let r=n.transaction("Files","readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}))):Promise.resolve(null)}async function me(t,n,o=[]){if(l.info("[TF_SDK:343] \u2705 processFileIds() called"),!t||typeof t!="object")return t;let r=new Set(o),e=JSON.parse(JSON.stringify(t)),i=new WeakSet;async function a(s){if(!(!s||typeof s!="object"||i.has(s))){i.add(s);for(let p of Object.keys(s)){let f=s[p];if(r.has(p)&&Array.isArray(f)){let g=[];for(let u=0;u<f.length;u++)if(typeof f[u]=="string"){let y=await je(f[u]);y?g.push({name:y.name,originalName:y.name,size:y.size,storage:"SmartStorage",type:y.type,url:y.url,key:p,uid:f[u],mode:y.mode||"G"}):l.warn(`[TF_SDK:344] \u26A0\uFE0F File not found in IndexedDB: ${f[u]} - removing from submission data`)}else typeof f[u]=="object"&&f[u]!==null&&await a(f[u]),g.push(f[u]);s[p]=g}else typeof f=="object"&&f!==null&&await a(f)}}}return await a(e),e}var z=null;async function je(t){if(l.info("[TF_SDK:345] \u2705 getFileFromIndexedDB() called",{fileId:t}),!("indexedDB"in window))return null;z||(z=new Promise(o=>{let r=indexedDB.open("Forms-Attachments",3);r.onupgradeneeded=e=>{let i=e.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},r.onsuccess=e=>{let i=e.target.result;if(!i.objectStoreNames.contains("Files")){l.warn("[TF_SDK:346] \u26A0\uFE0F Files store not found"),z=null,o(null);return}o(i)},r.onerror=()=>{z=null,o(null)}}));let n=await z;return n?new Promise(o=>{let r=n.transaction(["Files"],"readonly");r.onerror=()=>o(null);let i=r.objectStore("Files").get(t);i.onsuccess=()=>o(i.result||null),i.onerror=()=>o(null)}):null}function be(t,n){if(l.info("[TF_SDK:342] \u2705 processDynamicValues() called"),!t||!t.components)return null;let o={},r=n&&(Array.isArray(n)&&n.length>0||!Array.isArray(n)&&Object.keys(n).length>0);r&&(Array.isArray(n)?n.forEach(i=>{i.key&&(o[i.key]=i.value)}):o=n||{});function e(i){if(!i||!Array.isArray(i))return null;for(let a of i){if(typeof a.defaultValue=="string"&&a.defaultValue.trim().startsWith("{{")&&a.defaultValue.trim().endsWith("}}")){let p=a.defaultValue.trim();r&&o[p]!==void 0&&(a.defaultValue=o[p])}a.label&&typeof a.label=="string"&&a.label.length>35&&(a.label=a.label.substring(0,35)+"...");let s;if(a.components&&(s=e(a.components),s))return s;if(a.columns&&Array.isArray(a.columns)){for(let p of a.columns)if(s=e(p.components),s)return s}if(a.rows&&Array.isArray(a.rows)){for(let p of a.rows)if(Array.isArray(p)){for(let f of p)if(s=e(f.components),s)return s}}}return null}return e(t.components)}var Z="AppDocuments",P="documents",R="documnets";function X(t){return t?new Promise((n,o)=>{let r=indexedDB.open(Z,t);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>n(e.target.result),r.onerror=e=>{l.error("[TF_SDK:330] \u274C DB error:",e.target.error),o(e.target.error)}}):typeof window!="undefined"&&window.indexedDBUtils&&window.indexedDBUtils.openDynamicDB?window.indexedDBUtils.openDynamicDB(Z,P,R):new Promise((n,o)=>{let r=indexedDB.open(Z);r.onupgradeneeded=e=>{let i=e.target.result;!i.objectStoreNames.contains(P)&&!i.objectStoreNames.contains(R)&&i.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},r.onsuccess=e=>{let i=e.target.result;if(i.objectStoreNames.contains(P)||i.objectStoreNames.contains(R)){n(i);return}let s=i.version+1;i.close();let p=indexedDB.open(Z,s);p.onupgradeneeded=f=>{let g=f.target.result;g.objectStoreNames.contains(P)||g.createObjectStore(P,{keyPath:"id",autoIncrement:!0})},p.onsuccess=f=>n(f.target.result),p.onerror=f=>{l.error("[TF_SDK:331] \u274C DB Upgrade failed:",f),o(f)}},r.onerror=e=>{l.error("[TF_SDK:332] \u274C DB Open failed:",e),o(e.target.error)}})}function J(t){return t.objectStoreNames.contains(P)?P:t.objectStoreNames.contains(R)?R:null}async function ne(){try{let t=await X(),n=J(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).count();i.onsuccess=()=>{t.close(),o(i.result>0)},i.onerror=a=>{l.error("[TF_SDK:334] \u274C Error counting:",a),t.close(),o(!1)}}):(l.warn(`[TF_SDK:333] \u26A0\uFE0F Store missing \u2014 no '${P}' or '${R}' found`),t.close(),!1)}catch(t){return l.error("[TF_SDK:335] \u274C Error checking documents:",t),!1}}async function ge(){try{let t=await X(),n=J(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return l.error("[TF_SDK:336] \u274C Error getting documents:",t),[]}}async function ve(t){try{let n=await X(),o=J(n);if(!o)throw n.close(),new Error("Failed to open database with valid store.");return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).add(t);s.onsuccess=()=>{n.close(),r(s.result)},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:337] \u274C Error inserting document:",n),n}}async function ye(t){try{let n=await X(),o=J(n);if(!o){n.close(),l.error("[TF_SDK:338] \u274C No valid document store found for deletion");return}return new Promise((r,e)=>{let s=n.transaction([o],"readwrite").objectStore(o).delete(t);s.onsuccess=()=>{n.close(),r()},s.onerror=p=>{n.close(),e(p.target.error)}})}catch(n){throw l.error("[TF_SDK:339] \u274C Error deleting document:",n),n}}var Be="AppDocuments",we="documents",xe="documnets";function Ve(){return new Promise((t,n)=>{let o=indexedDB.open(Be);o.onsuccess=r=>t(r.target.result),o.onerror=r=>n(r.target.error)})}function Ue(t){return t.objectStoreNames.contains(we)?we:t.objectStoreNames.contains(xe)?xe:null}async function Ce(){try{let t=await Ve(),n=Ue(t);return n?new Promise(o=>{let i=t.transaction([n],"readonly").objectStore(n).getAll();i.onsuccess=()=>{t.close(),o(i.result)},i.onerror=()=>{t.close(),o([])}}):(t.close(),[])}catch(t){return logger.warn("[TF_SDK:264] \u26A0\uFE0F Error reading AppDocuments DB:",t),[]}}async function ze(){if(typeof window.showDynamicModal!="function"){logger.error("[TF_SDK:265] \u274C showDynamicModal is not defined.");return}window.showDynamicModal("App Documents",[],`
|
|
8
8
|
<div style="text-align: center; padding: 40px;">
|
|
9
9
|
<div class="spinner-border text-primary" role="status">
|
|
10
10
|
<span class="visually-hidden">Loading...</span>
|
|
@@ -199,7 +199,7 @@ var TurboForms=(()=>{var Oe=Object.create;var q=Object.defineProperty;var Pe=Obj
|
|
|
199
199
|
</div>
|
|
200
200
|
${(W=e.themeData)!=null&&W.isCard?"</div>":""}
|
|
201
201
|
<div id="sticky-footer" class="${e.showFooter===!1?"footer-hidden":""}">
|
|
202
|
-
<div class="build-version">SDK v2.0.
|
|
202
|
+
<div class="build-version">SDK v2.0.39</div>
|
|
203
203
|
|
|
204
204
|
<button class="footer-btn footer-btn-secondary" id="prevBtn" style="display:none" onclick="FormOnPrevious()">
|
|
205
205
|
<i class="bi bi-chevron-left"></i> Previous
|
|
@@ -262,4 +262,4 @@ var TurboForms=(()=>{var Oe=Object.create;var q=Object.defineProperty;var Pe=Obj
|
|
|
262
262
|
|
|
263
263
|
// === SCRIPT_SEPARATOR ===
|
|
264
264
|
|
|
265
|
-
`);if(!window.__unviredSdkScriptsLoaded&&!window.__unviredSdkScriptsLoading){window.__unviredSdkScriptsLoading=!0,l.info("[TF_SDK:14] \u2705 Loading SDK scripts (jQuery, Formio, Recogito, LESS, components)...");let m=d=>{if(b){let C=b.querySelector(".sdk-loader-text");C&&(C.textContent=d)}};if(m("Loading Core Components..."),c[0]&&c[0].trim()){let d=document.createElement("script");d.textContent=c[0],d.setAttribute("data-unvired-script","jquery"),document.head.appendChild(d)}if(c[4]&&c[4].trim()){let d=document.createElement("script");d.textContent=c[4],d.setAttribute("data-unvired-script","choices"),document.head.appendChild(d)}if(m("Loading Formio Library..."),c[5]&&c[5].trim()){let d=document.createElement("script");d.textContent=c[5],d.setAttribute("data-unvired-script","formio"),document.head.appendChild(d),l.info("[TF_SDK:15] \u2705 Bundled Formio library injected.")}if(e.showComments){m("Loading Annotation Tools...");for(let d=1;d<=2;d++)if(c[d]&&c[d].trim()){let C=document.createElement("script");C.textContent=c[d],C.setAttribute("data-unvired-script",`recogito-${d}`),document.head.appendChild(C),await new Promise(A=>setTimeout(A,0))}}else l.info("[TF_SDK:16] \u2705 Skipping Recogito (comments disabled, optimized load)");if(m("Initializing Engine..."),c[3]&&c[3].trim()){let d=document.createElement("script");d.textContent=c[3],d.setAttribute("data-unvired-script","less"),document.head.appendChild(d)}window.form=window.form||{},window.platform=window.platform||{},window.ResizeObserver=window.ResizeObserver||ResizeObserver,typeof browserMD5File!="undefined"&&(window.form.BMF=new browserMD5File),window.less=window.less||{},typeof window.__Html5QrcodeLibrary__!="undefined"&&(window.html5QrCode=window.__Html5QrcodeLibrary__),typeof window.Html5QrcodeScanner=="undefined"&&(window.Html5QrcodeScanner=class{constructor(){l.warn("[TF_SDK:17] \u26A0\uFE0F Barcode library (Html5QrcodeScanner) is not loaded.")}render(){}clear(){}}),m("Initializing Components...");for(let d=6;d<c.length;d++){let C=c[d];if(C&&C.trim()){let A=document.createElement("script");A.textContent=C,A.setAttribute("data-unvired-script",`script-${d}`),document.head.appendChild(A),d%5===0&&await new Promise(V=>setTimeout(V,0))}}window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1,l.info("[TF_SDK:18] \u2705 All SDK scripts injected successfully"),document.addEventListener("click",function(d){let C=document.getElementById("unvired-more-btn"),A=document.getElementById("moreTooltip");C&&A&&!C.contains(d.target)&&!A.contains(d.target)&&(A.style.display="none")})}else if(window.__unviredSdkScriptsLoading)window.__unviredSdkScriptsLoaded||(l.warn("[TF_SDK:19] \u26A0\uFE0F Scripts marked as loading but not yet loaded - waiting..."),window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1);else{if(l.info("[TF_SDK:20] \u2705 SDK scripts already loaded \u2014 skipping injection"),typeof window.Formio=="undefined"){let m="ErrorCode : 005, Formio library not available even though scripts were loaded.";throw l.error("[TF_SDK:21] \u274C ",m),b&&b.classList.add("hidden"),s({type:"ERROR",errorMessage:m,data:{technicalError:new Error(m),formioPath:"bundled",timestamp:new Date().toISOString()}}),new Error(m)}l.info("[TF_SDK:22] \u2705 Formio verified (previously loaded)")}window.FORM_TEMPLATE=h,window.FORM_PREVIOUS_DATA=n,window.FORM_MODE=e.mode,window.FORM_COMMENTS_DATA=e.commentsData,window.FORM_VOB_ARR=e.vobArr,window.FORM_PLATFORM=e.platform,window.FORM_LANGUAGE=e.language,window.FORM_TRASLATIONS=e.translations,window.FORM_ENV=e.environmentVariable,window.FORM_THEME_DATA=e.themeData,window.FORM_USER_DATA=e.userData,window.FORM_USERS_LIST=e.usersList,window.FORM_CONTROL_DATA=e.controlData,window.FORM_PRIVATE_EXTERNAL=e.privateExternal,window.FORM_PERMISSION=e.permission,window.FORM_ATTACHMENT_FILE_KEYS=i,window.sendEventCallback=s,window.FORM_EVENTS={FORM_RENDER:"FORM_RENDER",SAVE:"FORM_SAVE",SUBMIT:"FORM_SUBMIT",SUBMIT_ERROR:"FORM_SUBMIT_ERROR",BACK_NAVIGATION:"FORM_BACK_NAVIGATION",ONCHANGE:"FORM_ONCHANGE",FORM_LOADED:"FORM_LOADED"};let v=r.querySelector("#form-back-btn"),k=r.querySelector("#unvired-more-btn");v&&(e.showBackButton?v.style.setProperty("display","flex","important"):v.style.setProperty("display","none","important")),k&&!e.showMoreButton&&k.style.setProperty("display","none","important"),window.__unviredFormsOptions=e,window.checkDocumentsVisibility(),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility(),e.platform==="web"?window.platform={isBrowser:!0,isAndroid:!1,iosPlatform:!1}:e.platform==="android"?window.platform={isBrowser:!1,isAndroid:!0,iosPlatform:!1}:e.platform==="ios"&&(window.platform={isBrowser:!1,isAndroid:!1,iosPlatform:!0});let O={};if(((ie=e.environmentVariable)==null?void 0:ie.length)>0)for(let m of e.environmentVariable)for(let d in m)O[d]=m[d];Object.keys(O).length>0&&(window.env=O);let S=r.querySelector("#sticky-header"),N=r.querySelector("#sticky-footer"),L=r.querySelector("#formio-wrapper"),H=r.querySelector("#comments-header");e.mode==="pdf"||e.mode==="print"?(r.classList.add(`${e.mode}-mode`),L&&L.classList.add(`${e.mode}-mode`),S&&(S.style.display="none"),N&&(N.style.display="none")):(S&&(S.style.display="flex"),N&&(N.style.display="flex")),H&&(H.style.display="none"),e.themeData&&Object.keys(e.themeData).length>0&&(window.FORM_THEME_DATA=e.themeData),e.language&&(window.FORMIO_LANGUAGE=e.language),e.translations&&(window.FORMIO_I18N=e.translations),e.userData&&(window.firstName=e.userData.firstName,window.lastName=e.userData.lastName,window.form=window.form||{},Object.assign(window.form,e.userData)),window.less=window.less||{},Object.assign(window.less,{async:!0,environment:"production",fileAsync:!1,onReady:!0,useFileCache:!0});let _=n;if(n&&(l.info("[TF_SDK:23] \u2705 Processing file IDs in submission data (fetching from IndexedDB)..."),_=await me(n,s,i),l.info("[TF_SDK:24] \u2705 File IDs processed \u2014 handing off to form renderer")),b){let m=b.querySelector(".sdk-loader-text");m&&(m.textContent="Initializing Form...")}return typeof window.loadTRform!="function"?(l.info("[TF_SDK:25] \u2705 loadTRform not ready yet \u2014 waiting for web-turbo-formio.js to signal..."),await new Promise(m=>{let d=()=>{document.removeEventListener("LoadRNformReady",d),l.info("[TF_SDK:26] \u2705 loadTRform is now ready (LoadRNformReady event received)"),m()};document.addEventListener("LoadRNformReady",d),typeof window.loadTRform=="function"&&d()})):l.info("[TF_SDK:27] \u2705 loadTRform already available \u2014 invoking immediately"),l.info("[TF_SDK:28] \u2705 Handing off to loadTRform (web-turbo-formio.js)..."),await window.loadTRform(h,_,e.themeData,e.mode,e.language,e.translations,e.controlData,e.privateExternal,e.permission,i),Ee(),{sendAction:m=>{var d;m.type==="SET_IMAGE_DATA"&&((d=window.setImageData)==null||d.call(window,m.imageData,m.controlId,m.fileName))},destroy:()=>{r.innerHTML=""}}}window.closeDocumentsModal=function(){if(typeof $!="undefined"&&$.fn.modal)$("#documentsModal").modal("hide");else{let t=document.getElementById("documentsModal");t&&(t.style.display="none",t.classList.remove("active"))}};window.checkDocumentsVisibility=async function(){let t=document.getElementById("documentsOption"),n=document.getElementById("documentsDivider"),o=await ne();t.style.display=o?"block":"none",n&&(n.style.display=o?"block":"none"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()};window.insertAppDocument=async function(t){try{return await ve(t),l.info("[TF_SDK:29] \u2705 Document inserted",{id:t==null?void 0:t.id}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:30] \u274C Failed to insert document",n),!1}};window.deleteAppDocument=async function(t){try{return await ye(t),l.info("[TF_SDK:31] \u2705 Document deleted",{id:t}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:32] \u274C Failed to delete document",n),!1}};window.getAllDocuments=ge;window.hasDocuments=ne;function Ae(){return"2.0.
|
|
265
|
+
`);if(!window.__unviredSdkScriptsLoaded&&!window.__unviredSdkScriptsLoading){window.__unviredSdkScriptsLoading=!0,l.info("[TF_SDK:14] \u2705 Loading SDK scripts (jQuery, Formio, Recogito, LESS, components)...");let m=d=>{if(b){let C=b.querySelector(".sdk-loader-text");C&&(C.textContent=d)}};if(m("Loading Core Components..."),c[0]&&c[0].trim()){let d=document.createElement("script");d.textContent=c[0],d.setAttribute("data-unvired-script","jquery"),document.head.appendChild(d)}if(c[4]&&c[4].trim()){let d=document.createElement("script");d.textContent=c[4],d.setAttribute("data-unvired-script","choices"),document.head.appendChild(d)}if(m("Loading Formio Library..."),c[5]&&c[5].trim()){let d=document.createElement("script");d.textContent=c[5],d.setAttribute("data-unvired-script","formio"),document.head.appendChild(d),l.info("[TF_SDK:15] \u2705 Bundled Formio library injected.")}if(e.showComments){m("Loading Annotation Tools...");for(let d=1;d<=2;d++)if(c[d]&&c[d].trim()){let C=document.createElement("script");C.textContent=c[d],C.setAttribute("data-unvired-script",`recogito-${d}`),document.head.appendChild(C),await new Promise(A=>setTimeout(A,0))}}else l.info("[TF_SDK:16] \u2705 Skipping Recogito (comments disabled, optimized load)");if(m("Initializing Engine..."),c[3]&&c[3].trim()){let d=document.createElement("script");d.textContent=c[3],d.setAttribute("data-unvired-script","less"),document.head.appendChild(d)}window.form=window.form||{},window.platform=window.platform||{},window.ResizeObserver=window.ResizeObserver||ResizeObserver,typeof browserMD5File!="undefined"&&(window.form.BMF=new browserMD5File),window.less=window.less||{},typeof window.__Html5QrcodeLibrary__!="undefined"&&(window.html5QrCode=window.__Html5QrcodeLibrary__),typeof window.Html5QrcodeScanner=="undefined"&&(window.Html5QrcodeScanner=class{constructor(){l.warn("[TF_SDK:17] \u26A0\uFE0F Barcode library (Html5QrcodeScanner) is not loaded.")}render(){}clear(){}}),m("Initializing Components...");for(let d=6;d<c.length;d++){let C=c[d];if(C&&C.trim()){let A=document.createElement("script");A.textContent=C,A.setAttribute("data-unvired-script",`script-${d}`),document.head.appendChild(A),d%5===0&&await new Promise(V=>setTimeout(V,0))}}window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1,l.info("[TF_SDK:18] \u2705 All SDK scripts injected successfully"),document.addEventListener("click",function(d){let C=document.getElementById("unvired-more-btn"),A=document.getElementById("moreTooltip");C&&A&&!C.contains(d.target)&&!A.contains(d.target)&&(A.style.display="none")})}else if(window.__unviredSdkScriptsLoading)window.__unviredSdkScriptsLoaded||(l.warn("[TF_SDK:19] \u26A0\uFE0F Scripts marked as loading but not yet loaded - waiting..."),window.__unviredSdkScriptsLoaded=!0,window.__unviredSdkScriptsLoading=!1);else{if(l.info("[TF_SDK:20] \u2705 SDK scripts already loaded \u2014 skipping injection"),typeof window.Formio=="undefined"){let m="ErrorCode : 005, Formio library not available even though scripts were loaded.";throw l.error("[TF_SDK:21] \u274C ",m),b&&b.classList.add("hidden"),s({type:"ERROR",errorMessage:m,data:{technicalError:new Error(m),formioPath:"bundled",timestamp:new Date().toISOString()}}),new Error(m)}l.info("[TF_SDK:22] \u2705 Formio verified (previously loaded)")}window.FORM_TEMPLATE=h,window.FORM_PREVIOUS_DATA=n,window.FORM_MODE=e.mode,window.FORM_COMMENTS_DATA=e.commentsData,window.FORM_VOB_ARR=e.vobArr,window.FORM_PLATFORM=e.platform,window.FORM_LANGUAGE=e.language,window.FORM_TRASLATIONS=e.translations,window.FORM_ENV=e.environmentVariable,window.FORM_THEME_DATA=e.themeData,window.FORM_USER_DATA=e.userData,window.FORM_USERS_LIST=e.usersList,window.FORM_CONTROL_DATA=e.controlData,window.FORM_PRIVATE_EXTERNAL=e.privateExternal,window.FORM_PERMISSION=e.permission,window.FORM_ATTACHMENT_FILE_KEYS=i,window.sendEventCallback=s,window.FORM_EVENTS={FORM_RENDER:"FORM_RENDER",SAVE:"FORM_SAVE",SUBMIT:"FORM_SUBMIT",SUBMIT_ERROR:"FORM_SUBMIT_ERROR",BACK_NAVIGATION:"FORM_BACK_NAVIGATION",ONCHANGE:"FORM_ONCHANGE",FORM_LOADED:"FORM_LOADED"};let v=r.querySelector("#form-back-btn"),k=r.querySelector("#unvired-more-btn");v&&(e.showBackButton?v.style.setProperty("display","flex","important"):v.style.setProperty("display","none","important")),k&&!e.showMoreButton&&k.style.setProperty("display","none","important"),window.__unviredFormsOptions=e,window.checkDocumentsVisibility(),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility(),e.platform==="web"?window.platform={isBrowser:!0,isAndroid:!1,iosPlatform:!1}:e.platform==="android"?window.platform={isBrowser:!1,isAndroid:!0,iosPlatform:!1}:e.platform==="ios"&&(window.platform={isBrowser:!1,isAndroid:!1,iosPlatform:!0});let O={};if(((ie=e.environmentVariable)==null?void 0:ie.length)>0)for(let m of e.environmentVariable)for(let d in m)O[d]=m[d];Object.keys(O).length>0&&(window.env=O);let S=r.querySelector("#sticky-header"),N=r.querySelector("#sticky-footer"),L=r.querySelector("#formio-wrapper"),H=r.querySelector("#comments-header");e.mode==="pdf"||e.mode==="print"?(r.classList.add(`${e.mode}-mode`),L&&L.classList.add(`${e.mode}-mode`),S&&(S.style.display="none"),N&&(N.style.display="none")):(S&&(S.style.display="flex"),N&&(N.style.display="flex")),H&&(H.style.display="none"),e.themeData&&Object.keys(e.themeData).length>0&&(window.FORM_THEME_DATA=e.themeData),e.language&&(window.FORMIO_LANGUAGE=e.language),e.translations&&(window.FORMIO_I18N=e.translations),e.userData&&(window.firstName=e.userData.firstName,window.lastName=e.userData.lastName,window.form=window.form||{},Object.assign(window.form,e.userData)),window.less=window.less||{},Object.assign(window.less,{async:!0,environment:"production",fileAsync:!1,onReady:!0,useFileCache:!0});let _=n;if(n&&(l.info("[TF_SDK:23] \u2705 Processing file IDs in submission data (fetching from IndexedDB)..."),_=await me(n,s,i),l.info("[TF_SDK:24] \u2705 File IDs processed \u2014 handing off to form renderer")),b){let m=b.querySelector(".sdk-loader-text");m&&(m.textContent="Initializing Form...")}return typeof window.loadTRform!="function"?(l.info("[TF_SDK:25] \u2705 loadTRform not ready yet \u2014 waiting for web-turbo-formio.js to signal..."),await new Promise(m=>{let d=()=>{document.removeEventListener("LoadRNformReady",d),l.info("[TF_SDK:26] \u2705 loadTRform is now ready (LoadRNformReady event received)"),m()};document.addEventListener("LoadRNformReady",d),typeof window.loadTRform=="function"&&d()})):l.info("[TF_SDK:27] \u2705 loadTRform already available \u2014 invoking immediately"),l.info("[TF_SDK:28] \u2705 Handing off to loadTRform (web-turbo-formio.js)..."),await window.loadTRform(h,_,e.themeData,e.mode,e.language,e.translations,e.controlData,e.privateExternal,e.permission,i),Ee(),{sendAction:m=>{var d;m.type==="SET_IMAGE_DATA"&&((d=window.setImageData)==null||d.call(window,m.imageData,m.controlId,m.fileName))},destroy:()=>{r.innerHTML=""}}}window.closeDocumentsModal=function(){if(typeof $!="undefined"&&$.fn.modal)$("#documentsModal").modal("hide");else{let t=document.getElementById("documentsModal");t&&(t.style.display="none",t.classList.remove("active"))}};window.checkDocumentsVisibility=async function(){let t=document.getElementById("documentsOption"),n=document.getElementById("documentsDivider"),o=await ne();t.style.display=o?"block":"none",n&&(n.style.display=o?"block":"none"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()};window.insertAppDocument=async function(t){try{return await ve(t),l.info("[TF_SDK:29] \u2705 Document inserted",{id:t==null?void 0:t.id}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:30] \u274C Failed to insert document",n),!1}};window.deleteAppDocument=async function(t){try{return await ye(t),l.info("[TF_SDK:31] \u2705 Document deleted",{id:t}),await window.checkDocumentsVisibility(),!0}catch(n){return l.error("[TF_SDK:32] \u274C Failed to delete document",n),!1}};window.getAllDocuments=ge;window.hasDocuments=ne;function Ae(){return"2.0.39"}function re(t){let n=typeof t=="string"?document.getElementById(t):t;n||(n=document.querySelector(".tf-formio-sdk")||document.body);let o=n.querySelectorAll("table"),r=0,e=null;return o.forEach(i=>{let a=i.getBoundingClientRect().width;a>r&&(r=a,e=i)}),{maxWidth:r,widestTable:e}}window.getMaxTableWidth=re;typeof window!="undefined"&&(window.TurboForms=window.TurboForms||{loadForm:ke,getBuildVersion:Ae,getMaxTableWidth:re});return Fe(Ge);})();
|
package/package.json
CHANGED