@unvired/turboforms-embed-sdk 2.0.79 → 2.0.80
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/README.md +33 -0
- package/dist/turboforms.esm.js +6 -6
- package/dist/turboforms.html +5 -5
- package/dist/turboforms.js +6 -6
- package/package.json +1 -1
package/dist/turboforms.html
CHANGED
|
@@ -36658,9 +36658,9 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
36658
36658
|
}
|
|
36659
36659
|
})
|
|
36660
36660
|
`)}function compressOnWebWorker(e,t){return new Promise(function(n,r){var a=cnt+=1;imageCompressionLibUrl||(imageCompressionLibUrl=generateLib()),worker||(worker=generateWorkerScript()),worker.addEventListener("message",function i(c){if(c.data.id===a){if(c.data.progress!==void 0)return void t.onProgress(c.data.progress);worker.removeEventListener("message",i),c.data.error&&r(new Error(c.data.error)),n(c.data.file)}}),worker.addEventListener("error",r),worker.postMessage({file:e,id:a,imageCompressionLibUrl,options:_objectSpread2(_objectSpread2({},t),{},{onProgress:void 0})})})}function imageCompression(e,t){return new Promise(function(n,r){var a,i,c,s,u,l;if(a=_objectSpread2({},t),c=0,s=a.onProgress,a.maxSizeMB=a.maxSizeMB||Number.POSITIVE_INFINITY,u=typeof a.useWebWorker!="boolean"||a.useWebWorker,delete a.useWebWorker,a.onProgress=function(h){c=h,typeof s=="function"&&s(c)},!(e instanceof Blob||e instanceof CustomFile))return r(new Error("The file given is not an instance of Blob or File"));if(!/^image/.test(e.type))return r(new Error("The file given is not an image"));if(l=typeof WorkerGlobalScope!="undefined"&&self instanceof WorkerGlobalScope,!u||typeof Worker!="function"||l)return compress(e,a).then(function(h){try{return i=h,d.call(this)}catch(g){return r(g)}}.bind(this),r);var p=function(){try{return d.call(this)}catch(h){return r(h)}}.bind(this),y=function(g){try{return compress(e,a).then(function(m){try{return i=m,p()}catch(A){return r(A)}},r)}catch(m){return r(m)}};try{return compressOnWebWorker(e,a).then(function(h){try{return i=h,p()}catch(g){return y()}},y)}catch(h){y()}function d(){try{i.name=e.name,i.lastModified=e.lastModified}catch(h){}return n(i)}})}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.getBrowserName=getBrowserName,imageCompression.version="1.0.17",imageCompression})})();</script>
|
|
36661
|
-
<script>var
|
|
36661
|
+
<script>var K=Object.defineProperty;var A=(S,c,l)=>c in S?K(S,c,{enumerable:!0,configurable:!0,writable:!0,value:l}):S[c]=l;var z=(S,c,l)=>A(S,typeof c!="symbol"?c+"":c,l);(function(){let S=!1;typeof Formio!="undefined"&&!window._&&(window._=Formio._);const l=class l{constructor(){}static get title(){return"SmartStorage"}static preInitialize(){return new l().createDb()}createDb(){return l._dbPromise?l._dbPromise:"indexedDB"in window?(l._listenerAdded||(document.addEventListener("deleteOriginalFileFromDB",async e=>{logger.info("[TF_SDK:207] \u2705 deleteOriginalFileFromDB event received",{fileId:e.detail.fileId}),await this.deleteFile(e.detail.fileId)},!1),l._listenerAdded=!0),l._dbPromise=new Promise((e,o)=>{const s=indexedDB.open("Forms-Attachments",3);logger.info("[TF_SDK:208] \u2705 Opening IndexedDB: Forms-Attachments v3"),s.onsuccess=n=>{const r=n.target.result;if(!r.objectStoreNames.contains("Files")){logger.warn("[TF_SDK:209] \u26A0\uFE0F Files store missing \u2014 recreating DB..."),r.close();const a=indexedDB.deleteDatabase("Forms-Attachments");a.onsuccess=()=>{const i=indexedDB.open("Forms-Attachments",3);i.onupgradeneeded=t=>{const d=t.target.result;d.objectStoreNames.contains("Files")||d.createObjectStore("Files")},i.onsuccess=t=>{logger.info("[TF_SDK:210] \u2705 DB recreated successfully"),e(t.target.result)},i.onerror=t=>{l._dbPromise=null,o(t)}},a.onerror=i=>{l._dbPromise=null,o(i)};return}e(r),logger.info("[TF_SDK:211] \u2705 DB opened successfully")},s.onupgradeneeded=n=>{const r=n.target.result;r.objectStoreNames.contains("Files")||r.createObjectStore("Files")},s.onerror=n=>{l._dbPromise=null,o(n)}}),l._dbPromise):(logger.warn("[TF_SDK:206] \u26A0\uFE0F IndexedDB not supported in this browser"),Promise.reject("IndexedDB not supported"))}isPlatform(){return window.platform&&(window.platform.isBrowser||window.platform.isAndroid||window.platform.iosPlatform)}async uploadFile(e,o,s,n){logger.info("[TF_SDK:212] \u{1F4BE} SmartStorage.uploadFile() called",{fileName:o,size:(e.size/1024).toFixed(1)+" KB",type:e.type});const r=await this.createDb(),a=new FileReader;return new Promise((i,t)=>{typeof n=="function"&&n({loaded:0,total:e.size}),a.onload=d=>{const b=new Blob([e],{type:e.type}),m=uuid.v4(),u=d.target.result,w={id:m,data:b,name:o,size:e.size,type:e.type,url:u,mode:"A"};if(this.isPlatform()){const p=r.transaction(["Files"],"readwrite"),y=p.objectStore("Files").put(w,m);y.onerror=F=>{logger.error("[TF_SDK:213] \u274C Error storing data in IndexedDB:",F),t(F)},p.onerror=F=>t(F),p.oncomplete=()=>{logger.info("[TF_SDK:214] \u2705 File stored in IndexedDB (Forms-Attachments -> Files)",{id:m,fileName:o,size:(e.size/1024).toFixed(1)+" KB"}),typeof n=="function"&&n({loaded:e.size,total:e.size}),logger.info(`[TF_SDK:215] \u2705 Initial file saved to IndexedDB: ${o} (ID: ${m})`),i({storage:"SmartStorage",name:o,size:e.size,type:e.type,url:u,id:m,mode:"A"})}}else i({storage:"SmartStorage",name:o,size:e.size,type:e.type,url:u,id:m,mode:"A"})},a.readAsDataURL(e)})}async deleteFile(e){if(!e)return;logger.info("[TF_SDK:216] \u2705 deleteFile() called",{Id:e});const o=await this.createDb();return new Promise((s,n)=>{if(this.isPlatform()){const r=o.transaction(["Files"],"readwrite"),a=r.objectStore("Files"),i=a.get(e);i.onsuccess=()=>{const t=i.result;t?(t.mode="D",a.put(t,e)):a.put({id:e,mode:"D"},e)},r.oncomplete=()=>{logger.info("[TF_SDK:217] \u2705 File marked as deleted (mode: D) in IndexedDB",{Id:e}),s(!0)},r.onerror=t=>n(t)}else s(!0)})}async updateFile(e,o,s,n){if(logger.info("[TF_SDK:216a] \u{1F4BE} SmartStorage.updateFile() called",{existingId:e,fileName:s,size:(o.size/1024).toFixed(1)+" KB",type:o.type}),!e)return logger.warn("[TF_SDK:216b] \u26A0\uFE0F SmartStorage.updateFile: no existingId provided, falling back to uploadFile"),this.uploadFile(o,s,null,n);const r=await this.createDb(),a=new FileReader;return new Promise((i,t)=>{typeof n=="function"&&n({loaded:0,total:o.size}),a.onload=d=>{const b=new Blob([o],{type:o.type}),m=d.target.result;if(this.isPlatform()){const u=r.transaction(["Files"],"readwrite"),w=u.objectStore("Files"),p=w.get(e);p.onsuccess=()=>{const D=p.result||{},y={...D,id:e,data:b,name:D.name||s,size:o.size,type:o.type||"image/jpeg",url:m,mode:"M"},F=w.put(y,e);F.onerror=g=>{logger.error("[TF_SDK:216c] \u274C Error updating file in IndexedDB:",g),t(g)}},p.onerror=D=>{logger.error("[TF_SDK:216d] \u274C Error reading existing file from IndexedDB:",D),t(D)},u.onerror=D=>t(D),u.oncomplete=()=>{logger.info("[TF_SDK:217a] \u2705 File updated in IndexedDB (Forms-Attachments -> Files)",{existingId:e,fileName:s,size:(o.size/1024).toFixed(1)+" KB",mode:"M"}),typeof n=="function"&&n({loaded:o.size,total:o.size}),i({storage:"SmartStorage",name:s,size:o.size,type:o.type,url:m,id:e,mode:"M"})}}else i({storage:"SmartStorage",name:s,size:o.size,type:o.type,url:m,id:e,mode:"M"})},a.onerror=d=>t(d),a.readAsDataURL(o)})}async downloadFile(e){logger.info("[TF_SDK:218] \u2705 downloadFile() called",{id:e.id,name:e.originalName||e.name});const o=await this.createDb(),s=new FileReader;return new Promise((n,r)=>{if(this.isPlatform())if(e.id){const a=o.transaction(["Files"],"readonly"),t=a.objectStore("Files").get(e.id);t.onsuccess=()=>{if(!t.result)return logger.warn("[TF_SDK:219] \u26A0\uFE0F File not found in IndexedDB",{id:e.id}),r("File not found");a.oncomplete=()=>{const d=t.result.data;logger.info("[TF_SDK:220] \u2705 File fetched from IndexedDB",{id:e.id,size:(d.size/1024).toFixed(1)+" KB"}),s.onload=()=>n(t.result),s.onerror=b=>r(b),s.readAsDataURL(d)}},t.onerror=d=>r(d),a.onerror=d=>r(d)}else{const a=e.url.indexOf(","),i=e.url.substring(a+1),t=atob(i),d=new Array(t.length);for(let u=0;u<t.length;u++)d[u]=t.charCodeAt(u);const b=new Uint8Array(d),m=new Blob([b],{type:e.type});s.onload=()=>{const u=e.uid,w={id:u,data:m,name:e.originalName,size:m.size,type:e.type,url:e.url,mode:e.mode||"G"},p=o.transaction(["Files"],"readwrite"),D=p.objectStore("Files"),y=D.put(w,u),F=D.get(u);y.onerror=g=>r(g),p.onerror=g=>r(g),F.onsuccess=()=>{if(!F.result)return r("File not found");p.oncomplete=()=>{const g=new FileReader,B=F.result.data;g.onload=()=>n(F.result),g.onerror=f=>r(f),g.readAsDataURL(B)}},F.onerror=g=>r(g)},s.onerror=u=>r(u),s.readAsDataURL(m)}else{if(e&&e.url)return n(e);const a=new Blob([e],{type:e.type});s.onload=()=>n({...e,url:s.result}),s.onerror=i=>r(i),s.readAsDataURL(a)}})}async markFileAsDeleted(e){if(logger.info("[TF_SDK:221] \u2705 markFileAsDeleted() called",{fileId:e}),!e)return;const o=await this.createDb();return new Promise((s,n)=>{if(this.isPlatform()){const r=o.transaction(["Files"],"readwrite"),a=r.objectStore("Files"),i=a.get(e);i.onsuccess=()=>{const t=i.result;if(!t)return n("File not found");t.mode="D";const d=a.put(t,e);d.onsuccess=()=>{r.oncomplete=()=>{logger.info("[TF_SDK:222] \u2705 File marked as deleted (mode=D)",{fileId:e}),s(t)}},d.onerror=b=>n(b)},i.onerror=t=>n(t),r.onerror=t=>n(t)}else n("Not supported on mobile platform")})}};z(l,"_dbPromise",null),z(l,"_listenerAdded",!1);let c=l;c.title="SmartStorage",typeof c!="undefined"&&(window.SmartStorage=c),typeof Formio!="undefined"&&(Formio.providers=Formio.providers||{},Formio.providers.storage=Formio.providers.storage||{},Formio.providers.storage.SmartStorage=c,Formio.providers.storage.smartstorage=c,Formio.Providers&&Formio.Providers.addProviders("storage",{SmartStorage:c,smartstorage:c}),document.dispatchEvent(new CustomEvent("smartStorageReady",{detail:{SmartStorage:c}})))})();</script>
|
|
36662
36662
|
<script>(function(){(function(i,w){typeof exports=="object"&&typeof module!="undefined"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):w((i=typeof globalThis!="undefined"?globalThis:i||self).uuid={})})(this,function(i){"use strict";var w,B=new Uint8Array(16);function N(){if(!w&&!(w=typeof crypto!="undefined"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!="undefined"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return w(B)}var F=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function I(r){return typeof r=="string"&&F.test(r)}for(var _,k,v=[],S=0;S<256;++S)v.push((S+256).toString(16).substr(1));function C(r){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,c=(v[r[l+0]]+v[r[l+1]]+v[r[l+2]]+v[r[l+3]]+"-"+v[r[l+4]]+v[r[l+5]]+"-"+v[r[l+6]]+v[r[l+7]]+"-"+v[r[l+8]]+v[r[l+9]]+"-"+v[r[l+10]]+v[r[l+11]]+v[r[l+12]]+v[r[l+13]]+v[r[l+14]]+v[r[l+15]]).toLowerCase();if(!I(c))throw TypeError("Stringified UUID is invalid");return c}var j=0,q=0;function O(r){if(!I(r))throw TypeError("Invalid UUID");var l,c=new Uint8Array(16);return c[0]=(l=parseInt(r.slice(0,8),16))>>>24,c[1]=l>>>16&255,c[2]=l>>>8&255,c[3]=255&l,c[4]=(l=parseInt(r.slice(9,13),16))>>>8,c[5]=255&l,c[6]=(l=parseInt(r.slice(14,18),16))>>>8,c[7]=255&l,c[8]=(l=parseInt(r.slice(19,23),16))>>>8,c[9]=255&l,c[10]=(l=parseInt(r.slice(24,36),16))/1099511627776&255,c[11]=l/4294967296&255,c[12]=l>>>24&255,c[13]=l>>>16&255,c[14]=l>>>8&255,c[15]=255&l,c}function P(r,l,c){function n(d,u,e,s){if(typeof d=="string"&&(d=function(o){o=unescape(encodeURIComponent(o));for(var m=[],p=0;p<o.length;++p)m.push(o.charCodeAt(p));return m}(d)),typeof u=="string"&&(u=O(u)),u.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var t=new Uint8Array(16+d.length);if(t.set(u),t.set(d,u.length),(t=c(t))[6]=15&t[6]|l,t[8]=63&t[8]|128,e){s=s||0;for(var f=0;f<16;++f)e[s+f]=t[f];return e}return C(t)}try{n.name=r}catch(d){}return n.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",n.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",n}function $(r){return 14+(r+64>>>9<<4)+1}function b(r,l){var c=(65535&r)+(65535&l);return(r>>16)+(l>>16)+(c>>16)<<16|65535&c}function R(r,l,c,n,d,u){return b((e=b(b(l,r),b(n,u)))<<(s=d)|e>>>32-s,c);var e,s}function h(r,l,c,n,d,u,e){return R(l&c|~l&n,r,l,d,u,e)}function y(r,l,c,n,d,u,e){return R(l&n|c&~n,r,l,d,u,e)}function a(r,l,c,n,d,u,e){return R(l^c^n,r,l,d,u,e)}function g(r,l,c,n,d,u,e){return R(c^(l|~n),r,l,d,u,e)}var G=P("v3",48,function(r){if(typeof r=="string"){var l=unescape(encodeURIComponent(r));r=new Uint8Array(l.length);for(var c=0;c<l.length;++c)r[c]=l.charCodeAt(c)}return function(n){for(var d=[],u=32*n.length,e="0123456789abcdef",s=0;s<u;s+=8){var t=n[s>>5]>>>s%32&255,f=parseInt(e.charAt(t>>>4&15)+e.charAt(15&t),16);d.push(f)}return d}(function(n,d){n[d>>5]|=128<<d%32,n[$(d)-1]=d;for(var u=1732584193,e=-271733879,s=-1732584194,t=271733878,f=0;f<n.length;f+=16){var o=u,m=e,p=s,U=t;u=h(u,e,s,t,n[f],7,-680876936),t=h(t,u,e,s,n[f+1],12,-389564586),s=h(s,t,u,e,n[f+2],17,606105819),e=h(e,s,t,u,n[f+3],22,-1044525330),u=h(u,e,s,t,n[f+4],7,-176418897),t=h(t,u,e,s,n[f+5],12,1200080426),s=h(s,t,u,e,n[f+6],17,-1473231341),e=h(e,s,t,u,n[f+7],22,-45705983),u=h(u,e,s,t,n[f+8],7,1770035416),t=h(t,u,e,s,n[f+9],12,-1958414417),s=h(s,t,u,e,n[f+10],17,-42063),e=h(e,s,t,u,n[f+11],22,-1990404162),u=h(u,e,s,t,n[f+12],7,1804603682),t=h(t,u,e,s,n[f+13],12,-40341101),s=h(s,t,u,e,n[f+14],17,-1502002290),u=y(u,e=h(e,s,t,u,n[f+15],22,1236535329),s,t,n[f+1],5,-165796510),t=y(t,u,e,s,n[f+6],9,-1069501632),s=y(s,t,u,e,n[f+11],14,643717713),e=y(e,s,t,u,n[f],20,-373897302),u=y(u,e,s,t,n[f+5],5,-701558691),t=y(t,u,e,s,n[f+10],9,38016083),s=y(s,t,u,e,n[f+15],14,-660478335),e=y(e,s,t,u,n[f+4],20,-405537848),u=y(u,e,s,t,n[f+9],5,568446438),t=y(t,u,e,s,n[f+14],9,-1019803690),s=y(s,t,u,e,n[f+3],14,-187363961),e=y(e,s,t,u,n[f+8],20,1163531501),u=y(u,e,s,t,n[f+13],5,-1444681467),t=y(t,u,e,s,n[f+2],9,-51403784),s=y(s,t,u,e,n[f+7],14,1735328473),u=a(u,e=y(e,s,t,u,n[f+12],20,-1926607734),s,t,n[f+5],4,-378558),t=a(t,u,e,s,n[f+8],11,-2022574463),s=a(s,t,u,e,n[f+11],16,1839030562),e=a(e,s,t,u,n[f+14],23,-35309556),u=a(u,e,s,t,n[f+1],4,-1530992060),t=a(t,u,e,s,n[f+4],11,1272893353),s=a(s,t,u,e,n[f+7],16,-155497632),e=a(e,s,t,u,n[f+10],23,-1094730640),u=a(u,e,s,t,n[f+13],4,681279174),t=a(t,u,e,s,n[f],11,-358537222),s=a(s,t,u,e,n[f+3],16,-722521979),e=a(e,s,t,u,n[f+6],23,76029189),u=a(u,e,s,t,n[f+9],4,-640364487),t=a(t,u,e,s,n[f+12],11,-421815835),s=a(s,t,u,e,n[f+15],16,530742520),u=g(u,e=a(e,s,t,u,n[f+2],23,-995338651),s,t,n[f],6,-198630844),t=g(t,u,e,s,n[f+7],10,1126891415),s=g(s,t,u,e,n[f+14],15,-1416354905),e=g(e,s,t,u,n[f+5],21,-57434055),u=g(u,e,s,t,n[f+12],6,1700485571),t=g(t,u,e,s,n[f+3],10,-1894986606),s=g(s,t,u,e,n[f+10],15,-1051523),e=g(e,s,t,u,n[f+1],21,-2054922799),u=g(u,e,s,t,n[f+8],6,1873313359),t=g(t,u,e,s,n[f+15],10,-30611744),s=g(s,t,u,e,n[f+6],15,-1560198380),e=g(e,s,t,u,n[f+13],21,1309151649),u=g(u,e,s,t,n[f+4],6,-145523070),t=g(t,u,e,s,n[f+11],10,-1120210379),s=g(s,t,u,e,n[f+2],15,718787259),e=g(e,s,t,u,n[f+9],21,-343485551),u=b(u,o),e=b(e,m),s=b(s,p),t=b(t,U)}return[u,e,s,t]}(function(n){if(n.length===0)return[];for(var d=8*n.length,u=new Uint32Array($(d)),e=0;e<d;e+=8)u[e>>5]|=(255&n[e/8])<<e%32;return u}(r),8*r.length))});function H(r,l,c,n){switch(r){case 0:return l&c^~l&n;case 1:return l^c^n;case 2:return l&c^l&n^c&n;case 3:return l^c^n}}function x(r,l){return r<<l|r>>>32-l}var J=P("v5",80,function(r){var l=[1518500249,1859775393,2400959708,3395469782],c=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof r=="string"){var n=unescape(encodeURIComponent(r));r=[];for(var d=0;d<n.length;++d)r.push(n.charCodeAt(d))}else Array.isArray(r)||(r=Array.prototype.slice.call(r));r.push(128);for(var u=r.length/4+2,e=Math.ceil(u/16),s=new Array(e),t=0;t<e;++t){for(var f=new Uint32Array(16),o=0;o<16;++o)f[o]=r[64*t+4*o]<<24|r[64*t+4*o+1]<<16|r[64*t+4*o+2]<<8|r[64*t+4*o+3];s[t]=f}s[e-1][14]=8*(r.length-1)/Math.pow(2,32),s[e-1][14]=Math.floor(s[e-1][14]),s[e-1][15]=8*(r.length-1)&4294967295;for(var m=0;m<e;++m){for(var p=new Uint32Array(80),U=0;U<16;++U)p[U]=s[m][U];for(var A=16;A<80;++A)p[A]=x(p[A-3]^p[A-8]^p[A-14]^p[A-16],1);for(var E=c[0],M=c[1],T=c[2],D=c[3],L=c[4],V=0;V<80;++V){var z=Math.floor(V/20),K=x(E,5)+H(z,M,T,D)+L+l[z]+p[V]>>>0;L=D,D=T,T=x(M,30)>>>0,M=E,E=K}c[0]=c[0]+E>>>0,c[1]=c[1]+M>>>0,c[2]=c[2]+T>>>0,c[3]=c[3]+D>>>0,c[4]=c[4]+L>>>0}return[c[0]>>24&255,c[0]>>16&255,c[0]>>8&255,255&c[0],c[1]>>24&255,c[1]>>16&255,c[1]>>8&255,255&c[1],c[2]>>24&255,c[2]>>16&255,c[2]>>8&255,255&c[2],c[3]>>24&255,c[3]>>16&255,c[3]>>8&255,255&c[3],c[4]>>24&255,c[4]>>16&255,c[4]>>8&255,255&c[4]]});i.NIL="00000000-0000-0000-0000-000000000000",i.parse=O,i.stringify=C,i.v1=function(r,l,c){var n=l&&c||0,d=l||new Array(16),u=(r=r||{}).node||_,e=r.clockseq!==void 0?r.clockseq:k;if(u==null||e==null){var s=r.random||(r.rng||N)();u==null&&(u=_=[1|s[0],s[1],s[2],s[3],s[4],s[5]]),e==null&&(e=k=16383&(s[6]<<8|s[7]))}var t=r.msecs!==void 0?r.msecs:Date.now(),f=r.nsecs!==void 0?r.nsecs:q+1,o=t-j+(f-q)/1e4;if(o<0&&r.clockseq===void 0&&(e=e+1&16383),(o<0||t>j)&&r.nsecs===void 0&&(f=0),f>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");j=t,q=f,k=e;var m=(1e4*(268435455&(t+=122192928e5))+f)%4294967296;d[n++]=m>>>24&255,d[n++]=m>>>16&255,d[n++]=m>>>8&255,d[n++]=255&m;var p=t/4294967296*1e4&268435455;d[n++]=p>>>8&255,d[n++]=255&p,d[n++]=p>>>24&15|16,d[n++]=p>>>16&255,d[n++]=e>>>8|128,d[n++]=255&e;for(var U=0;U<6;++U)d[n+U]=u[U];return l||C(d)},i.v3=G,i.v4=function(r,l,c){var n=(r=r||{}).random||(r.rng||N)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,l){c=c||0;for(var d=0;d<16;++d)l[c+d]=n[d];return l}return C(n)},i.v5=J,i.validate=I,i.version=function(r){if(!I(r))throw TypeError("Invalid UUID");return parseInt(r.substr(14,1),16)},Object.defineProperty(i,"__esModule",{value:!0})})})();</script>
|
|
36663
|
-
<script>(function(){logger.info("[TF_SDK:68] \u2705 Script loading started");var j=Formio.Components;const W=()=>({components:[]}),J=Promise;var x=Formio.Utils,v=window._,z,E=navigator.camera||z,q=x.uniqueName,Q=Formio.Components.components.field;const V=Formio.Components.components.field;V||logger.error("[TF_SDK:69] \u274C FieldComponent is undefined!");const Z=Formio.Templates;let O="",B=!1;const ee=["image/gif","image/jpeg","image/png"],G=x.getComponentSavedTypes,X=x.componentValueTypes;let P=!1;const L=typeof navigator!="undefined"&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);function $(F,e,t){return logger.info(`[TF_SDK:IDB-U0] \u2705 updateFileInIndexedDB called for id: ${F}, file: ${t}`),F?e?new Promise((s,o)=>{const n=indexedDB.open("Forms-Attachments",3);n.onupgradeneeded=c=>{const i=c.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},n.onerror=()=>o(n.error),n.onsuccess=c=>{const i=c.target.result;if(!i.objectStoreNames.contains("Files"))return i.close(),o(new Error("[TF_SDK] Files store not found in IndexedDB"));const r=new FileReader;r.onerror=()=>o(r.error),r.onload=l=>{const a=l.target.result,d={id:F,data:e,name:t,size:e.size,type:e.type,url:a,mode:"A"};try{const p=i.transaction(["Files"],"readwrite"),w=p.objectStore("Files").put(d,F);w.onerror=()=>{logger.error("[TF_SDK:IDB-U1] \u274C updateFileInIndexedDB put failed:",w.error),i.close(),o(w.error)},p.oncomplete=()=>{logger.info(`[TF_SDK:IDB-U2] \u2705 IndexedDB record updated in-place (mode=A): id=${F}, file=${t}`),i.close(),s({id:F,url:a,name:t,size:e.size,type:e.type,mode:"A"})},p.onerror=()=>{logger.error("[TF_SDK:IDB-U3] \u274C updateFileInIndexedDB transaction error:",p.error),i.close(),o(p.error)},p.onabort=()=>{i.close(),o(p.error||new Error("Transaction aborted"))}}catch(p){logger.error("[TF_SDK:IDB-U4] \u274C Exception during transaction:",p),i.close(),o(p)}},r.readAsDataURL(e)}}):Promise.reject(new Error("[TF_SDK] blob is required for updateFileInIndexedDB")):Promise.reject(new Error("[TF_SDK] existingId is required for updateFileInIndexedDB"))}function H(F){return logger.info(`[TF_SDK:IDB-D0] \u2705 deleteFileInIndexedDB called for id: ${F}`),F?new Promise((e,t)=>{const s=indexedDB.open("Forms-Attachments",3);s.onupgradeneeded=o=>{const n=o.target.result;n.objectStoreNames.contains("Files")||n.createObjectStore("Files")},s.onerror=()=>t(s.error),s.onsuccess=o=>{const n=o.target.result;if(!n.objectStoreNames.contains("Files"))return n.close(),t(new Error("[TF_SDK] Files store not found in IndexedDB"));try{const c=n.transaction(["Files"],"readwrite"),i=c.objectStore("Files"),r=i.get(F);r.onsuccess=()=>{const l=r.result||{id:F};l.mode="D",i.put(l,F)},c.oncomplete=()=>{logger.info(`[TF_SDK:IDB-D2] \u2705 IndexedDB record marked mode='D': id=${F}`),n.close(),e({id:F,mode:"D"})},c.onerror=()=>{logger.error("[TF_SDK:IDB-D3] \u274C deleteFileInIndexedDB transaction error:",c.error),n.close(),t(c.error)}}catch(c){logger.error("[TF_SDK:IDB-D4] \u274C Exception during transaction:",c),n.close(),t(c)}}}):Promise.reject(new Error("[TF_SDK] existingId is required for deleteFileInIndexedDB"))}typeof window!="undefined"&&(window.updateFileInIndexedDB=$,window.deleteFileInIndexedDB=H);let _;typeof window!="undefined"?_=window.HTMLCanvasElement:typeof globalThis!="undefined"&&(_=globalThis.HTMLCanvasElement),_&&!_.prototype.toBlob&&Object.defineProperty(_.prototype,"toBlob",{value:function(F,e,t){var s=this;setTimeout(function(){for(var o=atob(s.toDataURL(e,t).split(",")[1]),n=o.length,c=new Uint8Array(n),i=0;i<n;i++)c[i]=o.charCodeAt(i);F(new Blob([c],{type:e||"image/png"}))})}});const Y=()=>Math.random().toString(36).substring(2,15);class K extends V{static schema(...e){return V.schema({type:"file",label:"Upload",key:"file",image:!1,privateDownload:!1,imageSize:"200",filePattern:"*",fileMinSize:"0KB",fileMaxSize:"1GB",uploadOnly:!1},...e)}static get builderInfo(){return{title:"File",group:"premium",icon:"file",documentation:"/userguide/#file",weight:100,schema:K.schema()}}static get serverConditionSettings(){return V.conditionOperatorsSettings}static get conditionOperatorsSettings(){return{...super.conditionOperatorsSettings,operators:["isEmpty","isNotEmpty"]}}static savedValueTypes(e){return e=e||{},G(e)||[X.object]}constructor(e,t,s){super(e,t,s),logger.info(`[TF_SDK:70] \u2705 Constructor called for key: ${e.key}`),this.statuses=[],this.fileDropHidden=!1,this.filesToSync={filesToUpload:[],filesToDelete:[]},this.isSyncing=!1,this.abortUploads=[],this.pendingfiles=[],this.resolvedFiles=[]}init(){super.init(),E=navigator.camera||z;const e=typeof FileReader!="undefined",t=typeof window!="undefined"?!!window.FormData:!1,s=typeof window!="undefined"&&window.XMLHttpRequest?"upload"in new XMLHttpRequest:!1;this.support={filereader:e,formdata:t,hasWarning:!e||!t||!s,progress:s},this.cameraMode=!1}get dataReady(){return this.filesReady||Promise.resolve()}get defaultSchema(){return K.schema()}loadImage(e){return this.component.privateDownload&&(e.private=!0),this.fileService.downloadFile(e,this.component).then(t=>t.url)}get emptyValue(){return[]}getValueAsString(e,t){return t!=null&&t.review&&!this.component.uploadOnly?v.map(e,(s,o)=>`<a href="${s.url||"#"}" target="_blank" data-path='${this.path}' data-fileindex='${o}'>${s.originalName}</a>`).join(", "):v.isArray(e)?v.map(e,"originalName").join(", "):v.get(e,"originalName","")}getValue(){return this.dataValue}get defaultValue(){const e=super.defaultValue;return Array.isArray(e)?e:[]}get hasTypes(){return this.component.fileTypes&&Array.isArray(this.component.fileTypes)&&this.component.fileTypes.length!==0&&(this.component.fileTypes[0].label!==""||this.component.fileTypes[0].value!=="")}get fileDropHidden(){return this._fileBrowseHidden}set fileDropHidden(e){typeof e!="boolean"||this.component.multiple||(this._fileBrowseHidden=e)}get shouldSyncFiles(){return!!(this.filesToSync.filesToDelete.length||this.filesToSync.filesToUpload.length)}get autoSync(){return!1}get columnsSize(){const e=this.disabled?0:this.autoSync?2:1,t=this.hasTypes?2:0,s=2;return{name:12-e-t-s,size:s,type:t,actions:e}}render(){const{filesToDelete:e,filesToUpload:t}=this.filesToSync;return logger.info(`[TF_SDK:71] \u2705 render() called for key: ${this.component.key}`,{filesCount:(this.dataValue||[]).length,isSyncing:this.isSyncing}),super.render(this.renderTemplate("file",{fileSize:this.fileSize,files:this.dataValue||[],filesToDelete:e,filesToUpload:t,disabled:this.disabled,support:this.support,fileDropHidden:this.fileDropHidden,showSyncButton:this.autoSync&&(e.length||t.length),isSyncing:this.isSyncing,columns:this.columnsSize}))}getVideoStream(e){const t={audio:!1,video:{width:{min:640,ideal:1920},height:{min:360,ideal:1080},aspectRatio:{ideal:1.7777777777777777},...e}};return navigator.mediaDevices.getUserMedia(t)}stopVideoStream(e){e.getVideoTracks().forEach(t=>t.stop())}getFrame(e){return new Promise(t=>{const s=document.createElement("canvas");s.height=e.videoHeight,s.width=e.videoWidth,s.getContext("2d").drawImage(e,0,0),s.toBlob(t)})}startVideo(){this._cameraMode=!1}stopVideo(){this.videoStream&&(this.stopVideoStream(this.videoStream),this.videoStream=null),this._cameraMode=!1}takePicture(){let e=this.id;B=!1,window.isListenerSet=!1;let t=new CustomEvent("openCamera",{detail:{controlId:e}});document.dispatchEvent(t)}browseFiles(e={}){return new Promise(t=>{const s=this.ce("input",{type:"file",style:"height: 0; width: 0; visibility: hidden;",tabindex:"-1",...e});document.body.appendChild(s),this.addEventListener(s,"change",o=>{logger.info(`[TF_SDK:74] \u2705 Native file input change event triggered with ${o.target.files.length} files`),t(o.target.files),document.body.removeChild(s)},!0),typeof s.trigger=="function"?s.trigger("click"):s.click()})}set cameraMode(e){this._cameraMode=!1}get cameraMode(){return!1}get useWebViewCamera(){return this.imageUpload&&E}get imageUpload(){return!!this.component.image}get browseOptions(){const e={};this.component.multiple&&(e.multiple=!0),this.component.capture&&(e.capture=this.component.capture);const t=this.component.filePattern.trim()||"";if(this.isMobile.any)this.component.capture&&(t.includes("video")?e.accept="video/*":t.includes("audio")?e.accept="audio/*":e.accept="image/*");else{const s="image/*";this.imageUpload&&(!t||t==="*")?e.accept=s:this.imageUpload&&!t.includes(s)?e.accept=`${s},${t}`:e.accept=t}return e}get actions(){return{abort:this.abortRequest.bind(this)}}attach(e){logger.info(`[TF_SDK:75] \u2705 attach() called for key: ${this.component.key}`),this.loadRefs(e,{fileDrop:"single",fileBrowse:"single",galleryButton:"single",cameraButton:"single",takePictureButton:"single",toggleCameraMode:"single",videoPlayer:"single",fileLink:"multiple",removeLink:"multiple",fileToSyncRemove:"multiple",fileImage:"multiple",fileType:"multiple",fileProcessingLoader:"single",FileView:"multiple",DownloadFile:"multiple",syncNow:"single",restoreFile:"multiple",progress:"multiple",cropImage:"multiple",annotateImage:"multiple"}),this.refs.input=[];const t=super.attach(e);if(this.refs.fileDrop){const i=this;this.addEventListener(this.refs.fileDrop,"dragover",r=>{this.refs.fileDrop.className="fileSelector fileDragOver",r.preventDefault()}),this.addEventListener(this.refs.fileDrop,"dragleave",r=>{this.refs.fileDrop.className="fileSelector",r.preventDefault()}),this.addEventListener(this.refs.fileDrop,"drop",r=>{this.refs.fileDrop.className="fileSelector",r.preventDefault(),P=!1;const l=[],a=r.dataTransfer.files;for(let d=0;d<a.length;d++)l.push(a[d]);this.processAndUpload(l)}),this.addEventListener(this.refs.fileDrop,"click",r=>{r.target.tagName==="A"||r.target.closest("a")||r.target.closest("button")||r.target.closest&&(r.target.closest('[ref="cameraButton"]')||r.target.closest('[ref="toggleCameraMode"]')||r.target.closest('[ref="galleryButton"]'))||(r.preventDefault(),!(!this.component.multiple&&this.statuses.some(l=>l.status==="progress"))&&(this.statuses=[],this.browseFiles(this.browseOptions).then(l=>{P=!1;const a=[];for(let d=0;d<l.length;d++){let p=l[d];a.push(new Promise(u=>{const w=new FileReader;w.onloadend=f=>{const g=new Blob([new Uint8Array(f.target.result)],{type:p.type});g.name=p.name,g.lastModified=p.lastModified,g.lastModifiedDate=p.lastModifiedDate,B=!0,this.compressFile([g])},w.readAsArrayBuffer(p)}))}})))})}if(this.addEventListener(e,"click",i=>{this.handleAction(i)}),this.refs.fileBrowse&&this.addEventListener(this.refs.fileBrowse,"click",i=>{i.preventDefault(),!(!this.component.multiple&&this.statuses.some(r=>r.status==="progress"))&&(this.statuses=[],this.browseFiles(this.browseOptions).then(r=>{P=!1;const l=[];for(let a=0;a<r.length;a++){let d=r[a];l.push(new Promise(p=>{const u=new FileReader;u.onloadend=w=>{const f=new Blob([new Uint8Array(w.target.result)],{type:d.type});f.name=d.name,f.lastModified=d.lastModified,f.lastModifiedDate=d.lastModifiedDate,p(f)},u.readAsArrayBuffer(d)}))}Promise.all(l).then(a=>{logger.info(`[TF_SDK:76] \u2705 Selected ${a.length} files from browser`),B=!0,this.processAndUpload(a)})}))}),this.refs.fileLink&&this.refs.fileLink.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault(),this.getFile(this.dataValue[r])})}),this.refs.removeLink&&this.refs.removeLink.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault();const a=this.dataValue[r];this.handleFileToRemove(a)})}),this.refs.fileImage&&this.refs.fileImage.forEach((i,r)=>{this.addEventListener(i,"click",l=>{const a=this.dataValue[r];let d=new CustomEvent("openImagePreview",{detail:{data:a}});logger.info("[TF_SDK:78] \u2705 dispatching openImagePreview event"),document.dispatchEvent(d)})}),this.refs.cropImage&&this.refs.cropImage.forEach((i,r)=>{this.addEventListener(i,"click",l=>{let a=this;const d=this.dataValue[r];logger.info("[TF_SDK:79] \u2705 cropImage clicked");let p=null;if(a.refs.fileImage&&a.refs.fileImage[r])p=a.refs.fileImage[r];else{const g=document.getElementsByClassName("fileImageData");for(var u=0;u<g.length;u++)if(g[u].alt==d.originalName&&(g[u].id==d.compnentId||a.component.key==d.key)){p=g[u];break}!p&&g.length>0&&(p=g[0])}p?w(p):logger.error("[TF_SDK:79a] \u274C Target image element not found for crop");function w(g){new cropro.Activator.addKey("CRPR-P238-M097-0451");const m=new cropro.CropArea(g);m.displayMode="popup",m.renderImageType="image/jpeg",m.renderImageQuality=.8,m.styles.settings.toolbarBackgroundColor="#2586c7",m.styles.settings.toolbarBackgroundHoverColor="#286f9f",m.addRenderEventListener(h=>{g.src=h,logger.info("[TF_SDK:80] \u2705 cropped imgURL length ="+h.length),a.dataValue[r].url=h,f(h.split(",")[1],"image/jpeg",a.dataValue[r].originalName)}),m.show()}async function f(g,m,h){for(var S=512,I=atob(g),A=[],b=0;b<I.length;b+=S){for(var C=I.slice(b,b+S),k=new Array(C.length),T=0;T<C.length;T++)k[T]=C.charCodeAt(T);var N=new Uint8Array(k);A.push(N)}var D=new Blob(A,{type:m||"image/jpeg"});if(D.name=h,typeof imageCompression=="function")try{const y=await imageCompression(D,{maxSizeMB:.2,maxWidthOrHeight:1600,useWebWorker:!L});y.name=h,logger.info(`[TF_SDK:81] \u26A1 Compressed cropped image: ${D.size} -> ${y.size} bytes`),D=y}catch(y){logger.warn("[TF_SDK:81a] \u26A0\uFE0F Compression failed:",y)}logger.info(`[TF_SDK:81b] \u2705 Cropped Image file size ${D.size/1024/1024} MB`);const U=a.dataValue[r],M=U&&U.id;M?$(M,D,h).then(y=>{var R;logger.info(`[TF_SDK:81c] \u2705 IndexedDB updated in-place (crop) for: ${h}`),a.dataValue[r]={...a.dataValue[r],url:y.url,size:y.size,mode:y.mode,originalName:h},(R=a.triggerChange)==null||R.call(a,{modified:!0}),a.redraw()}).catch(y=>{logger.error("[TF_SDK:81d] \u274C updateFileInIndexedDB (crop) failed:",y)}):logger.warn(`[TF_SDK:81e] \u26A0\uFE0F No existingId found for crop update (index=${r})`)}})}),this.refs.annotateImage&&this.refs.annotateImage.forEach((i,r)=>{this.addEventListener(i,"click",l=>{let a=this;const d=this.dataValue[r];logger.info("[TF_SDK:82] \u2705 annotateImage clicked");let p=null;if(a.refs.fileImage&&a.refs.fileImage[r])p=a.refs.fileImage[r];else{const g=document.getElementsByClassName("fileImageData");for(var u=0;u<g.length;u++)if(g[u].alt==d.originalName&&(g[u].id==d.compnentId||a.component.key==d.key)){p=g[u];break}!p&&g.length>0&&(p=g[0])}p?w(p):logger.error("[TF_SDK:82a] \u274C Target image element not found for annotate");function w(g){new markerjs2.Activator.addKey("MJS2-P013-M397-4100");const m=new markerjs2.MarkerArea(g);m.settings.displayMode="popup",m.uiStyleSettings.toolbarBackgroundColor="#2586c7",m.uiStyleSettings.toolbarBackgroundHoverColor="#286f9f",m.addRenderEventListener(h=>{g.src=h,a.dataValue[r].url=h,f(h.split(",")[1],"image/jpeg",a.dataValue[r].originalName)}),m.show()}async function f(g,m,h){m=m||"image/jpeg";for(var S=512,I=atob(g),A=[],b=0;b<I.length;b+=S){for(var C=I.slice(b,b+S),k=new Array(C.length),T=0;T<C.length;T++)k[T]=C.charCodeAt(T);var N=new Uint8Array(k);A.push(N)}var D=new Blob(A,{type:m});if(D.name=h,typeof imageCompression=="function")try{const y=await imageCompression(D,{maxSizeMB:.2,maxWidthOrHeight:1600,useWebWorker:!L});y.name=h,logger.info(`[TF_SDK:83] \u26A1 Compressed annotated image: ${D.size} -> ${y.size} bytes`),D=y}catch(y){logger.warn("[TF_SDK:83a] \u26A0\uFE0F Compression failed:",y)}logger.info(`[TF_SDK:83b] \u2705 Annotated Image file size ${D.size/1024/1024} MB`);const U=a.dataValue[r],M=U&&U.id;M?$(M,D,h).then(y=>{var R;logger.info(`[TF_SDK:83c] \u2705 IndexedDB updated in-place (annotate) for: ${h}`),a.dataValue[r]={...a.dataValue[r],url:y.url,size:y.size,mode:y.mode,originalName:h},(R=a.triggerChange)==null||R.call(a,{modified:!0}),a.redraw()}).catch(y=>{logger.error("[TF_SDK:83d] \u274C updateFileInIndexedDB (annotate) failed:",y)}):logger.warn(`[TF_SDK:83e] \u26A0\uFE0F No existingId found for annotate update (index=${r})`)}})}),this.refs.fileToSyncRemove&&this.refs.fileToSyncRemove.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault(),this.filesToSync.filesToUpload.splice(r,1),this.redraw()})}),this.refs.fileStatusRemove&&this.refs.fileStatusRemove.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault(),this.abortUpload&&this.abortUpload(),this.statuses.splice(r,1),this.redraw()})}),this.refs.restoreFile&&this.refs.restoreFile.forEach((i,r)=>{this.addEventListener(i,"click",l=>{var d;l.preventDefault();const a=this.filesToSync.filesToDelete[r];delete a.status,delete a.message,this.filesToSync.filesToDelete.splice(r,1),this.dataValue.push(a),(d=this.triggerChange)==null||d.call(this),this.redraw()})}),this.refs.galleryButton&&E&&this.addEventListener(this.refs.galleryButton,"click",i=>{i.preventDefault(),E.getPicture(r=>{window.resolveLocalFileSystemURL(r,l=>{l.file(a=>{const d=new FileReader;d.onloadend=p=>{const u=new Blob([new Uint8Array(p.target.result)],{type:a.type});u.name=a.name,P=!1,this.processAndUpload([u])},d.readAsArrayBuffer(a)})})},r=>{logger.error(r)},{sourceType:E.PictureSourceType.PHOTOLIBRARY})}),this.refs.cameraButton&&this.addEventListener(this.refs.cameraButton,"click",i=>{i.preventDefault(),i.stopPropagation(),typeof i.stopImmediatePropagation=="function"&&i.stopImmediatePropagation();let r=this.id;B=!1,window.isListenerSet=!1;let l=new CustomEvent("openCamera",{detail:{controlId:r}});window.parent&&window.parent!==window&&window.parent.postMessage({type:"OPEN_CAMERA",data:{controlId:r},status:"sucess",message:"camera triggerd"},"*"),logger.info("[TF_SDK:84a] \u2705 Dispatching openCamera event for controlId:",r),document.dispatchEvent(l)}),this.refs.takePictureButton&&this.addEventListener(this.refs.takePictureButton,"click",i=>{i.preventDefault(),i.stopPropagation(),this.takePicture()}),this.refs.toggleCameraMode&&this.addEventListener(this.refs.toggleCameraMode,"click",i=>{i.preventDefault(),i.stopPropagation(),typeof i.stopImmediatePropagation=="function"&&i.stopImmediatePropagation();let r=this.id;B=!1,window.isListenerSet=!1;let l=new CustomEvent("openCamera",{detail:{controlId:r}});window.parent&&window.parent!==window&&window.parent.postMessage({type:"OPEN_CAMERA",data:{controlId:r},status:"sucess",message:"camera triggerd"},"*"),logger.info("[TF_SDK:84b] \u2705 Dispatching openCamera event from toggleCameraMode for controlId:",r),document.dispatchEvent(l)}),this.refs.fileType.forEach((i,r)=>{this.dataValue[r]&&(this.dataValue[r].fileType=this.dataValue[r].fileType||this.component.fileTypes[0].label,this.addEventListener(i,"change",l=>{l.preventDefault();const a=this.component.fileTypes.find(d=>d.value===l.target.value);this.dataValue[r].fileType=a.label}))}),this.addEventListener(this.refs.syncNow,"click",i=>{i.preventDefault(),this.syncFiles()}),this.fileService){const i=[];this.filesReady=new Promise((r,l)=>{this.filesReadyResolve=r,this.filesReadyReject=l}),this.refs.fileImage.forEach((r,l)=>{i.push(this.loadImage(this.dataValue[l]).then(a=>r.src=a))}),i.length?Promise.all(i).then(()=>{this.filesReadyResolve()}).catch(()=>this.filesReadyReject()):this.filesReadyResolve()}let o=this;this.addEventListener(document,"capureImageData",function(i){var r;o.id==((r=i.detail)==null?void 0:r.controlId)&&(window.isListenerSet||(window.isListenerSet=!0,setTimeout(()=>{if(typeof i.detail.imageData=="string"&&i.detail.imageData.startsWith("data:")||typeof window.resolveLocalFileSystemURL!="function"){const d=((p,u,w="image/jpeg")=>{const f=p.split(","),g=f[0].match(/:(.*?);/)[1],m=atob(f[1]);let h=m.length;const S=new Uint8Array(h);for(;h--;)S[h]=m.charCodeAt(h);const I=new Blob([S],{type:w});return I.name=u,I})(i.detail.imageData,i.detail.fileName||`photo-${Date.now()}.jpg`);B=!1,P=!1,o.compressFile([d])}else window.resolveLocalFileSystemURL(i.detail.imageData,a=>{a.file(d=>{logger.info("[TF_SDK:85] \u2705 fileEntry ="+d);const p=new FileReader;p.onloadend=u=>{logger.info("[TF_SDK:86] \u2705 onloadend ="+u);const w=new Blob([new Uint8Array(u.target.result)],{type:d.type});w.name=d.name,logger.info("[TF_SDK:87] \u2705 file.name ="+d.name),logger.info("[TF_SDK:88] \u2705 blob instanceOf Blob ="+w),o.compressFile([w])},p.readAsArrayBuffer(d)})})},0)))},!1),this.addEventListener(document,"capureImageDataForAndroidBrowser",function(i){logger.info("[TF_SDK:89] \u2705 event.detail.controlId capureImageDataForAndroidBrowser ="+i.detail.controlId),o.id==i.detail.controlId&&(window.isListenerSet||(window.isListenerSet=!0,setTimeout(()=>{o.compressFile([i.detail.imageData])},0)))},!1),this.refs.FileView.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault();let a=this.dataValue[r],d=c(a.url);n(d,a.type,a.originalName,!1)})}),this.refs.DownloadFile.forEach((i,r)=>{this.addEventListener(i,"click",l=>{l.preventDefault();let a=this.dataValue[r],d=c(a.url);n(d,a.type,a.originalName,!0)})});function n(i,r,l,a){try{const d=atob(i),p=[];for(let f=0;f<d.length;f+=512){const g=d.slice(f,f+512),m=new Array(g.length);for(let S=0;S<g.length;S++)m[S]=g.charCodeAt(S);const h=new Uint8Array(m);p.push(h)}const u=new Blob(p,{type:r}),w=URL.createObjectURL(u);if(a){const f=document.createElement("a");f.href=w,f.target="_blank",f.download=l,document.body.appendChild(f),f.click(),document.body.removeChild(f)}else window.open(w,"_blank")}catch(d){logger.error("[TF_SDK:93] \u274C Failed to open file:",d)}}function c(i){const r=i.indexOf(",");return r!==-1?i.slice(r+1):i}return t}fileSize(e,t,s,o,n){return`${(t=Math,s=t.log,o=1024,n=s(e)/s(o)|0,e/t.pow(o,n)).toFixed(2)} ${n?`${"kMGTPEZY"[--n]}B`:"Bytes"}`}globStringToRegex(e){e=e.replace(/\s/g,"");let t="",s=[];if(e.length>2&&e[0]==="/"&&e[e.length-1]==="/")t=e.substring(1,e.length-1);else{const o=e.split(",");if(o.length>1)for(let n=0;n<o.length;n++){const c=this.globStringToRegex(o[n]);c.regexp?(t+=`(${c.regexp})`,n<o.length-1&&(t+="|")):s=s.concat(c.excludes)}else e.startsWith("!")?s.push(`^((?!${this.globStringToRegex(e.substring(1)).regexp}).)*$`):(e.startsWith(".")&&(e=`*${e}`),t=`^${e.replace(new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g"),"\\$&")}$`,t=t.replace(/\\\*/g,".*").replace(/\\\?/g,"."))}return{regexp:t,excludes:s}}translateScalars(e){if(typeof e=="string"){if(e.search(/kb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024);if(e.search(/mb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024*1024);if(e.search(/gb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024*1024*1024);if(e.search(/b/i)===e.length-1||e.search(/s/i)===e.length-1)return parseFloat(e.substring(0,e.length-1));if(e.search(/m/i)===e.length-1)return parseFloat(e.substring(0,e.length-1)*60);if(e.search(/h/i)===e.length-1)return parseFloat(e.substring(0,e.length-1)*3600)}return e}validatePattern(e,t){if(!t)return!0;const s=this.globStringToRegex(t);let o=!0;if(s.regexp&&s.regexp.length){const n=new RegExp(s.regexp,"i"),c=!v.isNil(e.type)&&n.test(e.type),i=!v.isNil(e.name)&&n.test(e.name);logger.info(`[TF_SDK:94] \u2705 Validating pattern "${t}":`,{fileName:e.name,fileType:e.type,regexp:s.regexp,typeMatches:c,nameMatches:i}),o=c||i}return o=s.excludes.reduce((n,c)=>{const i=new RegExp(c,"i");return n&&(v.isNil(e.type)||i.test(e.type))&&(v.isNil(e.name)||i.test(e.name))},o),o}validateMinSize(e,t){return e.size+.1>=this.translateScalars(t)}validateMaxSize(e,t){return e.size-.1<=this.translateScalars(t)}abortRequest(e){const t=this.abortUploads.find(s=>s.id===e);t&&t.abort()}handleAction(e){const t=e.target;if(!t.id)return;const[s,o]=t.id.split("-");!s||!o||!this.actions[s]||this.actions[s](o)}getFileName(e){return q(e.name,this.component.fileNameTemplate,this.evalContext())}getInitFileToSync(e){const t=e.name?e.name.replace(/</g,"<").replace(/>/g,">"):e.name;return{id:Y(),dir:this.interpolate(this.component.dir||""),name:this.getFileName(e),originalName:t,fileKey:this.component.fileKey||"file",storage:this.component.storage,options:this.component.options,file:e,size:e.size,status:"info",message:this.t("Processing file. Please wait..."),hash:""}}async handleSubmissionRevisions(e){var o;if(((o=this.root)==null?void 0:o.form.submissionRevisions)!=="true")return"";const t=new BMF,s=await new Promise((n,c)=>{this.emit("fileUploadingStart"),t.md5(e,(i,r)=>i?c(i):n(r))});return this.emit("fileUploadingEnd"),s}validateFileName(e){const t=B?this.filesToSync.filesToUpload.some(o=>{var n;return((n=o.file)==null?void 0:n.name)===e.name}):this.dataValue.some(o=>o.url===O);return v.some(this.dataValue,o=>o.originalName===e.name)||t?{status:"error",message:this.t(`File with the same name is already ${t?"being ":""}uploaded`)}:{}}validateFileSettings(e){if(this.component.filePattern&&!this.validatePattern(e,this.component.filePattern))return{status:"error",message:this.t("File is the wrong type; it must be {{ pattern }}",{pattern:this.component.filePattern})};if(this.component.fileMinSize){const t=this.interpolate(this.component.fileMinSize,this.evalContext());if(!t)return{status:"error",message:"Please, check the entered parameters"};if(!this.validateMinSize(e,t))return{status:"error",message:this.t("fileTooSmall",{size:t})}}if(this.component.fileMaxSize){const t=this.interpolate(this.component.fileMaxSize,this.evalContext());if(!t)return{status:"error",message:"Please, check the entered parameters"};if(!this.validateMaxSize(e,t))return{status:"error",message:this.t("fileTooBig",{size:t})}}return{}}validateFileService(){const{fileService:e}=this;return e?{}:{status:"error",message:this.t("File Service not provided.")}}validateFile(e){const t=this.validateFileService();if(t.status==="error")return t;const s=this.validateFileName(e);return s.status==="error"?s:this.validateFileSettings(e)}getGroupPermissions(){var s;let e=null,t=null;return(s=this.root)==null||s.everyComponent(o=>{var n,c;((n=o.component)!=null&&n.submissionAccess||(c=o.component)!=null&&c.defaultPermission)&&(t=o.component.submissionAccess?o.component.submissionAccess:[{type:o.component.defaultPermission,roles:[]}],t.forEach(i=>{e=["admin","write","create"].includes(i.type)?o.component.key:null}))}),{groupKey:e,groupPermissions:t}}async triggerFileProcessor(e){var s,o;let t=null;if((s=this.root)!=null&&s.options.fileProcessor)try{this.refs.fileProcessingLoader&&(this.refs.fileProcessingLoader.style.display="block"),t=await fileProcessor(this.fileService,(o=this.root)==null?void 0:o.options.fileProcessor)(e,this.component.properties)}catch(n){return this.fileDropHidden=!1,{status:"error",message:this.t("File processing has been failed.")}}finally{this.refs.fileProcessingLoader&&(this.refs.fileProcessingLoader.style.display="none")}return{file:t}}async prepareFileToUpload(e){const t=this.getInitFileToSync(e);t.hash=await this.handleSubmissionRevisions(e);const{status:s,message:o}=this.validateFile(e);if(s==="error")return t.isValidationError=!0,t.status=s,t.message=o,this.filesToSync.filesToUpload.push(t);this.component.privateDownload&&(e.private=!0);const{groupKey:n,groupPermissions:c}=this.getGroupPermissions(),i=await this.triggerFileProcessor(e);if(i.status==="error")return t.status,t.message=i.message,this.filesToSync.filesToUpload.push(t);this.autoSync&&(t.message=this.t("Ready to be uploaded into storage")),this.filesToSync.filesToUpload.push({...t,message:t.message,file:i.file||e,url:this.interpolate(this.component.url,{file:t}),groupPermissions:c,groupResourceId:n?this.currentForm.submission.data[n]._id:null})}processAndUpload(e){const t=(this.dataValue||[]).map(n=>n.originalName||n.name),s=Array.from(e).filter(n=>t.includes(n.name)?(logger.warn(`[TF_SDK:95] \u26A0\uFE0F Duplicate blocked: ${n.name}`),typeof window.showToast=="function"&&window.showToast("File with the same name is already uploaded","danger"),!1):!0);if(s.length===0){logger.info("[TF_SDK:96] \u2705 All selected files are already uploaded. Skipping.");return}logger.info(`[TF_SDK:97] \u2705 processAndUpload started for ${s.length} files`);const o=[];for(let n=0;n<s.length;n++)o.push(this.compressFilePromise(s[n]));Promise.all(o).then(n=>{logger.info(`[TF_SDK:98] \u2705 Compression phase complete for ${n.length} files`),this.handleFilesToUpload(n)}).catch(n=>{logger.error("[TF_SDK:99] \u274C processAndUpload failed:",n)})}compressFilePromise(e){return new Promise(t=>{if(e&&["image/gif","image/jpeg","image/png"].includes(e.type)){let o=this.component.fileCompressionSize||2,n=this.component.MaximumCompressionHeightOrWidth||2048;const c={maxSizeMB:o,maxWidthOrHeight:n,useWebWorker:!L};imageCompression(e,c).then(i=>{i.name=e.name,logger.info(`[TF_SDK:100] \u2705 Compressed: ${e.name} (${(e.size/1024).toFixed(1)}KB -> ${(i.size/1024).toFixed(1)}KB)`),this.blobToBase64(i).then(r=>{O=r,t(i)})}).catch(i=>{logger.warn("[TF_SDK:101] \u26A0\uFE0F Compression failed, using original:",i.message),t(e)})}else t(e)})}compressFile(e){this.processAndUpload(e)}async prepareFilesToUpload(e){if(this.component.multiple||(e=Array.prototype.slice.call(e,0,1)),this.component.storage&&e&&e.length){this.fileDropHidden=!0;const t=await Promise.all([...e].map(async s=>await this.prepareFileToUpload(s)));return this.redraw(),typeof window!="undefined"&&window.requestAnimationFrame(()=>{document.body.offsetHeight}),t}else return Promise.resolve()}async handleFilesToUpload(e){logger.info(`[TF_SDK:102] \u2705 handleFilesToUpload received ${e.length} files`),await this.prepareFilesToUpload(e),this.autoSync||await this.syncFiles()}prepareFileToDelete(e){this.filesToSync.filesToDelete.push({...e,status:"info",message:this.autoSync?this.t("Ready to be removed from storage"):this.t("Preparing file to remove")}),e&&e.id&&H(e.id).catch(s=>{logger.warn("[TF_SDK:102c] \u26A0\uFE0F Failed to mark file mode='D' in IndexedDB:",s)});const t=this.dataValue.findIndex(s=>s===e||s.id&&s.id===e.id||s.name&&s.name===e.name);t!==-1?this.splice(t):logger.warn("[TF_SDK:102b] \u26A0\uFE0F Could not find file to delete in dataValue:",e),this.redraw()}handleFileToRemove(e){this.prepareFileToDelete(e),this.autoSync||this.syncFiles()}async deleteFile(e){const{options:t={}}=this.component;if(e&&["url","indexeddb","s3","azure","googledrive"].includes(this.component.storage)){const{fileService:s}=this;if(s&&typeof s.deleteFile=="function")return await s.deleteFile(e,t);{const o=this.options.formio||this.root&&this.root.formio;if(o)return await o.makeRequest("",e.url,"delete")}}}async delete(){return this.filesToSync.filesToDelete.length?await Promise.all(this.filesToSync.filesToDelete.map(async e=>{try{if(e.isValidationError)return{fileToSync:e};await this.deleteFile(e),e.status="success",e.message=this.t("Succefully removed")}catch(t){e.status="error",e.message=typeof t=="string"?t:t.toString()}finally{this.redraw()}return{fileToSync:e}})):Promise.resolve()}updateProgress(e,t){if(e.progress=parseInt(100*t.loaded/t.total),e.status!=="progress")e.status="progress",delete e.message,this.redraw();else{const s=Array.prototype.find.call(this.refs.progress,o=>o.id===e.id);s.innerHTML=`<span class="visually-hidden">${e.progress}% ${this.t("Complete")}</span>`,s.style.width=`${e.progress}%`,s.ariaValueNow=e.progress.toString()}}getMultipartOptions(e){let t=0;return this.component.useMultipartUpload&&this.component.multipart?{...this.component.multipart,progressCallback:s=>{t++,e.status="progress",e.progress=parseInt(100*t/s),delete e.message,this.redraw()},changeMessage:s=>{e.message=s,this.redraw()}}:!1}uploadFile(e){var r,l,a;const{storage:t,options:s={}}=this.component,o=this.interpolate(this.component.url,{file:e}),{groupKey:n,groupPermissions:c}=this.getGroupPermissions(),i=n&&((a=(l=(r=this.currentForm)==null?void 0:r.submission)==null?void 0:l.data[n])==null?void 0:a._id)||null;return this.fileService.uploadFile(t,e.file,e.name,e.dir,d=>{this.updateProgress(e,d)},o,s,e.fileKey,c,i,()=>{this.emit("fileUploadingStart")},d=>{this.abortUploads.push({id:e.id,abort:d})},this.getMultipartOptions(e))}async upload(){return this.filesToSync.filesToUpload.length?(logger.info(`[TF_SDK:103] \u2705 Starting upload for ${this.filesToSync.filesToUpload.length} files`),await Promise.all(this.filesToSync.filesToUpload.map(async e=>{let t=null;try{if(e.isValidationError)return logger.warn(`[TF_SDK:104] \u26A0\uFE0F Skipping upload for ${e.originalName} due to validation error`),{fileToSync:e,fileInfo:t};if(e.status==="success"){const o=this.resolvedFiles.find(n=>n.fileToSync.originalName===e.originalName);return{fileToSync:o.fileToSync,fileInfo:o.fileInfo}}logger.info(`[TF_SDK:105] \u2705 Uploading: ${e.originalName}`);const s=this.pendingfiles.find(o=>o.name===e.name);if(s)t=await s.fileInfoProm;else{const o=this.uploadFile(e);this.pendingfiles.push({name:e.name,fileInfoProm:o}),t=await o}this.pendingfiles=this.pendingfiles.filter(o=>o.name!==e.name),e.status="success",e.message=this.t("Succefully uploaded"),t.originalName=e.originalName,t.hash=e.hash,logger.info(`[TF_SDK:106] \u2705 Uploaded: ${e.originalName}`),this.emit("fileUploadingEnd")}catch(s){logger.error(`[TF_SDK:107] \u274C Upload failed for ${e.originalName}:`,s),e.status="error",delete e.progress,e.message=typeof s=="string"?s:s.type==="abort"?this.t("Request was aborted"):s.toString(),this.emit("fileUploadingEnd"),this.emit("fileUploadError",{fileToSync:e,response:s})}finally{delete e.progress,this.redraw();const s=this.resolvedFiles.find(o=>o.fileInfo.originalName===e.originalName);t&&!s&&this.resolvedFiles.push({fileToSync:e,fileInfo:t})}return{fileToSync:e,fileInfo:t}}))):Promise.resolve()}async syncFiles(){var e,t,s;logger.info("[TF_SDK:108] \u2705 syncFiles started"),this.isSyncing=!0,this.fileDropHidden=!0,this.redraw();try{const[o=[],n=[]]=await Promise.all([this.delete(),this.upload()]);if(logger.info(`[TF_SDK:109] \u2705 syncFiles results: ${n.length} uploaded, ${o.length} deleted`),n.length!==((t=(e=this.filesToSync)==null?void 0:e.filesToUpload)==null?void 0:t.length))return;this.filesToSync.filesToDelete=o.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="error"}).map(i=>i.fileToSync),this.filesToSync.filesToUpload=n.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="error"}).map(i=>i.fileToSync),this.hasValue()||(this.dataValue=[]);const c=n.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="success"}).map(i=>i.fileInfo);if(logger.info(`[TF_SDK:110] \u2705 syncFiles succeeded for ${c.length} new files`),P){P=!1;const i=c[0];if(!i)logger.warn("[TF_SDK:111a] \u26A0\uFE0F replace=true but no fileInfo available \u2014 skipping replace");else{let r;for(let l=0;l<this.dataValue.length;l++)this.dataValue[l].originalName==i.originalName&&(logger.info("[TF_SDK:111] \u2705 original name matches at index "+l),r=l);if(r!==void 0){let l=this.dataValue[r].id;logger.info("[TF_SDK:112] \u2705 originalFileId ="+l+", replacing with new id ="+i.id),this.dataValue[r]=i;let a=new CustomEvent("deleteOriginalFileFromDB",{detail:{fileId:l}});document.dispatchEvent(a)}else logger.warn("[TF_SDK:112a] \u26A0\uFE0F Could not find original file to replace in dataValue for: "+i.originalName),this.dataValue.push(i)}}else this.dataValue.push(...c);return(s=this.triggerChange)==null||s.call(this,{modified:!0}),Promise.resolve()}catch(o){return logger.error("[TF_SDK:113] \u274C syncFiles error:",o),Promise.reject()}finally{this.isSyncing=!1,this.fileDropHidden=!1,this.abortUploads=[],this.redraw()}}blobToBase64(e){return new Promise((t,s)=>{const o=new FileReader;o.onloadend=()=>t(o.result),o.readAsDataURL(e)})}getFile(e){const{options:t={}}=this.component,{fileService:s}=this;if(!s)return alert("File Service not provided");this.component.privateDownload&&(e.private=!0),s.downloadFile(e,t).then(o=>{o&&(["base64","indexeddb"].includes(o.storage)?download(o.url,o.originalName||o.name,o.type):window.open(o.url,"_blank"))}).catch(o=>{alert(o)})}focus(){"beforeFocus"in this.parent&&this.parent.beforeFocus(this),this.refs.fileBrowse&&this.refs.fileBrowse.focus()}async beforeSubmit(){try{return this.autoSync?(await this.syncFiles(),this.shouldSyncFiles?Promise.reject("Synchronization is failed"):Promise.resolve()):Promise.resolve()}catch(e){return Promise.reject(e.message)}}destroy(e){this.stopVideo(),super.destroy(e)}}K.editForm=W,j.addComponent("file",K),logger.info("[TF_SDK:114] \u2705 Script execution finished and component 'file' registered")})();</script>
|
|
36663
|
+
<script>(function(){logger.info("[TF_SDK:68] \u2705 Script loading started");var j=Formio.Components;const q=()=>({components:[]}),J=Promise;var R=Formio.Utils,K=window._,L,E=navigator.camera||L,W=R.uniqueName,Q=Formio.Components.components.field;const U=Formio.Components.components.field;U||logger.error("[TF_SDK:69] \u274C FieldComponent is undefined!");const Z=Formio.Templates;let N="",P=!1;const ee=["image/gif","image/jpeg","image/png"],G=R.getComponentSavedTypes,X=R.componentValueTypes;let $=!1;const M=typeof navigator!="undefined"&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);function V(D,e,t){return logger.info(`[TF_SDK:80a] \u{1F4BE} updateFileInIndexedDB called for id: ${D}, file: ${t}, size: ${(e.size/1024).toFixed(1)} KB`),D?e?new Promise((s,o)=>{logger.info("[TF_SDK:80d] \u{1F513} Opening IndexedDB 'Forms-Attachments' (v3)...");const n=indexedDB.open("Forms-Attachments",3);n.onupgradeneeded=c=>{const i=c.target.result;i.objectStoreNames.contains("Files")||i.createObjectStore("Files")},n.onerror=()=>{logger.error("[TF_SDK:80e] \u274C Failed to open IndexedDB:",n.error),o(n.error)},n.onsuccess=c=>{const i=c.target.result;if(logger.info("[TF_SDK:80f] \u2705 IndexedDB 'Forms-Attachments' opened. Reading Blob as DataURL..."),!i.objectStoreNames.contains("Files"))return i.close(),logger.error("[TF_SDK:80g] \u274C Files store not found in IndexedDB"),o(new Error("[TF_SDK] Files store not found in IndexedDB"));const r=new FileReader;r.onerror=()=>{logger.error("[TF_SDK:80h] \u274C FileReader error:",r.error),o(r.error)},r.onload=d=>{const a=d.target.result;logger.info(`[TF_SDK:80i] \u{1F4DD} FileReader finished. DataURL length: ${a.length}. Executing readwrite transaction on store 'Files'...`);try{const l=i.transaction(["Files"],"readwrite"),p=l.objectStore("Files"),u=p.get(D);u.onsuccess=()=>{const w=u.result||{},m={...w,id:D,data:e,name:w.name||t,size:e.size,type:e.type||"image/jpeg",url:a,mode:"M"},f=p.put(m,D);f.onerror=()=>{logger.error("[TF_SDK:80j] \u274C updateFileInIndexedDB put failed:",f.error),i.close(),o(f.error)}},u.onerror=()=>{logger.error("[TF_SDK:80k] \u274C updateFileInIndexedDB get failed:",u.error),i.close(),o(u.error)},l.oncomplete=()=>{logger.info(`[TF_SDK:80l] \u2705 IndexedDB transaction committed! Record updated in-place (mode=M): id=${D}, file=${t}, size=${(e.size/1024).toFixed(1)} KB`);try{const f=i.transaction(["Files"],"readonly").objectStore("Files").get(D);f.onsuccess=()=>{var h,y;const g=f.result;g?logger.info(`[TF_SDK:80m] \u{1F50D} Live IndexedDB Record Verified: ID="${g.id}", Name="${g.name}", Size=${(g.size/1024).toFixed(1)} KB (${g.size} bytes), BlobSize=${(((h=g.data)==null?void 0:h.size)/1024).toFixed(1)} KB, DataURLLength=${(y=g.url)==null?void 0:y.length}, Mode="${g.mode}"`):logger.warn(`[TF_SDK:80n] \u26A0\uFE0F Record not found on verify read for ID: ${D}`),i.close(),s({id:D,url:a,name:t,size:e.size,type:e.type,mode:"M"})},f.onerror=()=>{i.close(),s({id:D,url:a,name:t,size:e.size,type:e.type,mode:"M"})}}catch(w){i.close(),s({id:D,url:a,name:t,size:e.size,type:e.type,mode:"M"})}},l.onerror=()=>{logger.error("[TF_SDK:80o] \u274C updateFileInIndexedDB transaction error:",l.error),i.close(),o(l.error)},l.onabort=()=>{logger.error("[TF_SDK:80p] \u274C Transaction aborted:",l.error),i.close(),o(l.error||new Error("Transaction aborted"))}}catch(l){logger.error("[TF_SDK:80q] \u274C Exception during transaction:",l),i.close(),o(l)}},r.readAsDataURL(e)}}):(logger.error("[TF_SDK:80c] \u274C blob is required for updateFileInIndexedDB"),Promise.reject(new Error("[TF_SDK] blob is required for updateFileInIndexedDB"))):(logger.error("[TF_SDK:80b] \u274C existingId is required for updateFileInIndexedDB"),Promise.reject(new Error("[TF_SDK] existingId is required for updateFileInIndexedDB")))}function O(D){return logger.info(`[TF_SDK:IDB-D0] \u2705 deleteFileInIndexedDB called for id: ${D}`),D?new Promise((e,t)=>{const s=indexedDB.open("Forms-Attachments",3);s.onupgradeneeded=o=>{const n=o.target.result;n.objectStoreNames.contains("Files")||n.createObjectStore("Files")},s.onerror=()=>t(s.error),s.onsuccess=o=>{const n=o.target.result;if(!n.objectStoreNames.contains("Files"))return n.close(),t(new Error("[TF_SDK] Files store not found in IndexedDB"));try{const c=n.transaction(["Files"],"readwrite"),i=c.objectStore("Files"),r=i.get(D);r.onsuccess=()=>{const d=r.result||{id:D};d.mode="D",i.put(d,D)},c.oncomplete=()=>{logger.info(`[TF_SDK:IDB-D2] \u2705 IndexedDB record marked mode='D': id=${D}`),n.close(),e({id:D,mode:"D"})},c.onerror=()=>{logger.error("[TF_SDK:IDB-D3] \u274C deleteFileInIndexedDB transaction error:",c.error),n.close(),t(c.error)}}catch(c){logger.error("[TF_SDK:IDB-D4] \u274C Exception during transaction:",c),n.close(),t(c)}}}):Promise.reject(new Error("[TF_SDK] existingId is required for deleteFileInIndexedDB"))}typeof window!="undefined"&&(window.updateFileInIndexedDB=V,window.deleteFileInIndexedDB=O);let x;typeof window!="undefined"?x=window.HTMLCanvasElement:typeof globalThis!="undefined"&&(x=globalThis.HTMLCanvasElement),x&&!x.prototype.toBlob&&Object.defineProperty(x.prototype,"toBlob",{value:function(D,e,t){var s=this;setTimeout(function(){for(var o=atob(s.toDataURL(e,t).split(",")[1]),n=o.length,c=new Uint8Array(n),i=0;i<n;i++)c[i]=o.charCodeAt(i);D(new Blob([c],{type:e||"image/png"}))})}});const Y=()=>Math.random().toString(36).substring(2,15);class A extends U{static schema(...e){return U.schema({type:"file",label:"Upload",key:"file",image:!1,privateDownload:!1,imageSize:"200",filePattern:"*",fileMinSize:"0KB",fileMaxSize:"1GB",uploadOnly:!1},...e)}static get builderInfo(){return{title:"File",group:"premium",icon:"file",documentation:"/userguide/#file",weight:100,schema:A.schema()}}static get serverConditionSettings(){return U.conditionOperatorsSettings}static get conditionOperatorsSettings(){return{...super.conditionOperatorsSettings,operators:["isEmpty","isNotEmpty"]}}static savedValueTypes(e){return e=e||{},G(e)||[X.object]}constructor(e,t,s){super(e,t,s),logger.info(`[TF_SDK:70] \u2705 Constructor called for key: ${e.key}`),this.statuses=[],this.fileDropHidden=!1,this.filesToSync={filesToUpload:[],filesToDelete:[]},this.isSyncing=!1,this.abortUploads=[],this.pendingfiles=[],this.resolvedFiles=[]}init(){super.init(),E=navigator.camera||L;const e=typeof FileReader!="undefined",t=typeof window!="undefined"?!!window.FormData:!1,s=typeof window!="undefined"&&window.XMLHttpRequest?"upload"in new XMLHttpRequest:!1;this.support={filereader:e,formdata:t,hasWarning:!e||!t||!s,progress:s},this.cameraMode=!1}get dataReady(){return this.filesReady||Promise.resolve()}get defaultSchema(){return A.schema()}loadImage(e){return this.component.privateDownload&&(e.private=!0),this.fileService.downloadFile(e,this.component).then(t=>t.url)}get emptyValue(){return[]}getValueAsString(e,t){return t!=null&&t.review&&!this.component.uploadOnly?K.map(e,(s,o)=>`<a href="${s.url||"#"}" target="_blank" data-path='${this.path}' data-fileindex='${o}'>${s.originalName}</a>`).join(", "):K.isArray(e)?K.map(e,"originalName").join(", "):K.get(e,"originalName","")}getValue(){return this.dataValue}get defaultValue(){const e=super.defaultValue;return Array.isArray(e)?e:[]}get hasTypes(){return this.component.fileTypes&&Array.isArray(this.component.fileTypes)&&this.component.fileTypes.length!==0&&(this.component.fileTypes[0].label!==""||this.component.fileTypes[0].value!=="")}get fileDropHidden(){return this._fileBrowseHidden}set fileDropHidden(e){typeof e!="boolean"||this.component.multiple||(this._fileBrowseHidden=e)}get shouldSyncFiles(){return!!(this.filesToSync.filesToDelete.length||this.filesToSync.filesToUpload.length)}get autoSync(){return!1}get columnsSize(){const e=this.disabled?0:this.autoSync?2:1,t=this.hasTypes?2:0,s=2;return{name:12-e-t-s,size:s,type:t,actions:e}}render(){const{filesToDelete:e,filesToUpload:t}=this.filesToSync;return logger.info(`[TF_SDK:71] \u2705 render() called for key: ${this.component.key}`,{filesCount:(this.dataValue||[]).length,isSyncing:this.isSyncing}),super.render(this.renderTemplate("file",{fileSize:this.fileSize,files:this.dataValue||[],filesToDelete:e,filesToUpload:t,disabled:this.disabled,support:this.support,fileDropHidden:this.fileDropHidden,showSyncButton:this.autoSync&&(e.length||t.length),isSyncing:this.isSyncing,columns:this.columnsSize}))}getVideoStream(e){const t={audio:!1,video:{width:{min:640,ideal:1920},height:{min:360,ideal:1080},aspectRatio:{ideal:1.7777777777777777},...e}};return navigator.mediaDevices.getUserMedia(t)}stopVideoStream(e){e.getVideoTracks().forEach(t=>t.stop())}getFrame(e){return new Promise(t=>{const s=document.createElement("canvas");s.height=e.videoHeight,s.width=e.videoWidth,s.getContext("2d").drawImage(e,0,0),s.toBlob(t)})}startVideo(){this._cameraMode=!1}stopVideo(){this.videoStream&&(this.stopVideoStream(this.videoStream),this.videoStream=null),this._cameraMode=!1}takePicture(){let e=this.id;P=!1,window.isListenerSet=!1;let t=new CustomEvent("openCamera",{detail:{controlId:e}});document.dispatchEvent(t)}browseFiles(e={}){return new Promise(t=>{const s=this.ce("input",{type:"file",style:"height: 0; width: 0; visibility: hidden;",tabindex:"-1",...e});document.body.appendChild(s),this.addEventListener(s,"change",o=>{logger.info(`[TF_SDK:74] \u2705 Native file input change event triggered with ${o.target.files.length} files`),t(o.target.files),document.body.removeChild(s)},!0),typeof s.trigger=="function"?s.trigger("click"):s.click()})}set cameraMode(e){this._cameraMode=!1}get cameraMode(){return!1}get useWebViewCamera(){return this.imageUpload&&E}get imageUpload(){return!!this.component.image}get browseOptions(){const e={};this.component.multiple&&(e.multiple=!0),this.component.capture&&(e.capture=this.component.capture);const t=this.component.filePattern.trim()||"";if(this.isMobile.any)this.component.capture&&(t.includes("video")?e.accept="video/*":t.includes("audio")?e.accept="audio/*":e.accept="image/*");else{const s="image/*";this.imageUpload&&(!t||t==="*")?e.accept=s:this.imageUpload&&!t.includes(s)?e.accept=`${s},${t}`:e.accept=t}return e}get actions(){return{abort:this.abortRequest.bind(this)}}attach(e){logger.info(`[TF_SDK:75] \u2705 attach() called for key: ${this.component.key}`),this.loadRefs(e,{fileDrop:"single",fileBrowse:"single",galleryButton:"single",cameraButton:"single",takePictureButton:"single",toggleCameraMode:"single",videoPlayer:"single",fileLink:"multiple",removeLink:"multiple",fileToSyncRemove:"multiple",fileImage:"multiple",fileType:"multiple",fileProcessingLoader:"single",FileView:"multiple",DownloadFile:"multiple",syncNow:"single",restoreFile:"multiple",progress:"multiple",cropImage:"multiple",annotateImage:"multiple"}),this.refs.input=[];const t=super.attach(e);if(this.refs.fileDrop){const i=this;this.addEventListener(this.refs.fileDrop,"dragover",r=>{this.refs.fileDrop.className="fileSelector fileDragOver",r.preventDefault()}),this.addEventListener(this.refs.fileDrop,"dragleave",r=>{this.refs.fileDrop.className="fileSelector",r.preventDefault()}),this.addEventListener(this.refs.fileDrop,"drop",r=>{this.refs.fileDrop.className="fileSelector",r.preventDefault(),$=!1;const d=[],a=r.dataTransfer.files;for(let l=0;l<a.length;l++)d.push(a[l]);this.processAndUpload(d)}),this.addEventListener(this.refs.fileDrop,"click",r=>{r.target.tagName==="A"||r.target.closest("a")||r.target.closest("button")||r.target.closest&&(r.target.closest('[ref="cameraButton"]')||r.target.closest('[ref="toggleCameraMode"]')||r.target.closest('[ref="galleryButton"]'))||(r.preventDefault(),!(!this.component.multiple&&this.statuses.some(d=>d.status==="progress"))&&(this.statuses=[],this.browseFiles(this.browseOptions).then(d=>{$=!1;const a=[];for(let l=0;l<d.length;l++){let p=d[l];a.push(new Promise(u=>{const w=new FileReader;w.onloadend=m=>{const f=new Blob([new Uint8Array(m.target.result)],{type:p.type});f.name=p.name,f.lastModified=p.lastModified,f.lastModifiedDate=p.lastModifiedDate,P=!0,this.compressFile([f])},w.readAsArrayBuffer(p)}))}})))})}if(this.addEventListener(e,"click",i=>{this.handleAction(i)}),this.refs.fileBrowse&&this.addEventListener(this.refs.fileBrowse,"click",i=>{i.preventDefault(),!(!this.component.multiple&&this.statuses.some(r=>r.status==="progress"))&&(this.statuses=[],this.browseFiles(this.browseOptions).then(r=>{$=!1;const d=[];for(let a=0;a<r.length;a++){let l=r[a];d.push(new Promise(p=>{const u=new FileReader;u.onloadend=w=>{const m=new Blob([new Uint8Array(w.target.result)],{type:l.type});m.name=l.name,m.lastModified=l.lastModified,m.lastModifiedDate=l.lastModifiedDate,p(m)},u.readAsArrayBuffer(l)}))}Promise.all(d).then(a=>{logger.info(`[TF_SDK:76] \u2705 Selected ${a.length} files from browser`),P=!0,this.processAndUpload(a)})}))}),this.refs.fileLink&&this.refs.fileLink.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault(),this.getFile(this.dataValue[r])})}),this.refs.removeLink&&this.refs.removeLink.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault();const a=this.dataValue[r];this.handleFileToRemove(a)})}),this.refs.fileImage&&this.refs.fileImage.forEach((i,r)=>{this.addEventListener(i,"click",d=>{const a=this.dataValue[r];let l=new CustomEvent("openImagePreview",{detail:{data:a}});logger.info("[TF_SDK:78] \u2705 dispatching openImagePreview event"),document.dispatchEvent(l)})}),this.refs.cropImage&&this.refs.cropImage.forEach((i,r)=>{this.addEventListener(i,"click",d=>{var f;let a=this;const l=this.dataValue[r];logger.info(`[TF_SDK:81a] \u2702\uFE0F Crop button clicked for file: "${(l==null?void 0:l.originalName)||(l==null?void 0:l.name)}", index=${r}, ID=${l==null?void 0:l.id}`);let p=null;if(a.refs.fileImage&&a.refs.fileImage[r])p=a.refs.fileImage[r];else{const g=document.getElementsByClassName("fileImageData");for(var u=0;u<g.length;u++)if(g[u].alt==l.originalName&&(g[u].id==l.compnentId||a.component.key==l.key)){p=g[u];break}!p&&g.length>0&&(p=g[0])}p?(logger.info(`[TF_SDK:81b] \u{1F3AF} Target image element found for crop: src length=${((f=p.src)==null?void 0:f.length)||0}`),w(p)):logger.error("[TF_SDK:81c] \u274C Target image element not found for crop");function w(g){logger.info("[TF_SDK:81d] \u{1F5BC}\uFE0F Opening Cropro Crop modal UI..."),new cropro.Activator.addKey("CRPR-P238-M097-0451");const h=new cropro.CropArea(g);h.displayMode="popup",h.renderImageType="image/jpeg",h.renderImageQuality=.8,h.styles.settings.toolbarBackgroundColor="#2586c7",h.styles.settings.toolbarBackgroundHoverColor="#286f9f",h.addRenderEventListener(y=>{g.src=y,logger.info(`[TF_SDK:81e] \u{1F4BE} User clicked Crop Save (\u2713 right checkmark)! Rendered Base64 DataURL length=${y.length}`),a.dataValue[r].url=y,m(y.split(",")[1],"image/jpeg",a.dataValue[r].originalName)}),h.addCloseEventListener(()=>{logger.info("[TF_SDK:81f] \u{1F6AA} Crop modal closed.")}),h.show()}async function m(g,h,y){const I=atob(g),B=new Uint8Array(I.length);for(let S=0;S<I.length;S++)B[S]=I.charCodeAt(S);const v=new Blob([B],{type:h||"image/jpeg"});if(v.name=y,logger.info(`[TF_SDK:81g] \u2705 Cropped image Blob created. Size: ${(v.size/1024).toFixed(1)} KB (${(v.size/1024/1024).toFixed(2)} MB), Type: ${v.type}`),typeof imageCompression=="function")try{logger.info("[TF_SDK:81h] \u26A1 Compressing cropped image Blob...");const S=await imageCompression(v,{maxSizeMB:.2,maxWidthOrHeight:1600,useWebWorker:!M});S.name=y,logger.info(`[TF_SDK:81i] \u26A1 Cropped image compressed: ${(v.size/1024).toFixed(1)} KB -> ${(S.size/1024).toFixed(1)} KB`),v=S}catch(S){logger.warn("[TF_SDK:81j] \u26A0\uFE0F Compression failed for cropped image:",S)}logger.info(`[TF_SDK:81k] \u2705 Final cropped image size ready for IndexedDB update: ${(v.size/1024).toFixed(1)} KB`);const _=a.dataValue[r],F=_&&(_.id||_.uid||_._id);F?(logger.info(`[TF_SDK:81l] \u{1F4BE} Initiating in-place update in IndexedDB for ID: ${F}, File: "${y}"`),V(F,v,y).then(S=>{var k,b;if(logger.info(`[TF_SDK:81m] \u2705 IndexedDB updated in-place (crop) successfully for: "${y}", ID: ${F}`),a.dataValue[r]={...a.dataValue[r],url:S.url,size:S.size,mode:S.mode,originalName:y},a.resolvedFiles&&Array.isArray(a.resolvedFiles)){const T=a.resolvedFiles.find(C=>{var z,H;return((z=C.fileInfo)==null?void 0:z.id)===F||((H=C.fileInfo)==null?void 0:H.originalName)===y});T&&(T.fileInfo&&(T.fileInfo.size=S.size,T.fileInfo.url=S.url,T.fileInfo.mode=S.mode),T.fileToSync&&(T.fileToSync.size=S.size,T.fileToSync.file=v))}if((k=a.filesToSync)!=null&&k.filesToUpload&&Array.isArray(a.filesToSync.filesToUpload)){const T=a.filesToSync.filesToUpload.find(C=>C.id===F||C.originalName===y);T&&(T.size=S.size,T.file=v)}logger.info("[TF_SDK:81n] \u{1F504} Triggering component change and redrawing UI with updated cropped image..."),(b=a.triggerChange)==null||b.call(a,{modified:!0}),a.redraw(),logger.info("[TF_SDK:81o] \u2705 UI redraw completed. Cropped image process finished.")}).catch(S=>{logger.error("[TF_SDK:81p] \u274C updateFileInIndexedDB (crop) failed:",S)})):logger.warn(`[TF_SDK:81q] \u26A0\uFE0F No existingId found for crop update (index=${r})`)}})}),this.refs.annotateImage&&this.refs.annotateImage.forEach((i,r)=>{this.addEventListener(i,"click",d=>{let a=this;const l=this.dataValue[r];logger.info("[TF_SDK:82] \u2705 annotateImage clicked");let p=null;if(a.refs.fileImage&&a.refs.fileImage[r])p=a.refs.fileImage[r];else{const f=document.getElementsByClassName("fileImageData");for(var u=0;u<f.length;u++)if(f[u].alt==l.originalName&&(f[u].id==l.compnentId||a.component.key==l.key)){p=f[u];break}!p&&f.length>0&&(p=f[0])}p?w(p):logger.error("[TF_SDK:82a] \u274C Target image element not found for annotate");function w(f){new markerjs2.Activator.addKey("MJS2-P013-M397-4100");const g=new markerjs2.MarkerArea(f);g.settings.displayMode="popup",g.uiStyleSettings.toolbarBackgroundColor="#2586c7",g.uiStyleSettings.toolbarBackgroundHoverColor="#286f9f",g.addRenderEventListener(h=>{f.src=h,a.dataValue[r].url=h,m(h.split(",")[1],"image/jpeg",a.dataValue[r].originalName)}),g.show()}async function m(f,g,h){g=g||"image/jpeg";const y=atob(f),I=new Uint8Array(y.length);for(let F=0;F<y.length;F++)I[F]=y.charCodeAt(F);let B=new Blob([I],{type:g});if(B.name=h,typeof imageCompression=="function")try{const F=await imageCompression(B,{maxSizeMB:.2,maxWidthOrHeight:1600,useWebWorker:!M});F.name=h,logger.info(`[TF_SDK:83] \u26A1 Compressed annotated image: ${B.size} -> ${F.size} bytes`),B=F}catch(F){logger.warn("[TF_SDK:83a] \u26A0\uFE0F Compression failed:",F)}logger.info(`[TF_SDK:83b] \u2705 Annotated Image file size ${B.size/1024/1024} MB`);const v=a.dataValue[r],_=v&&(v.id||v.uid||v._id);_?V(_,B,h).then(F=>{var S,k;if(logger.info(`[TF_SDK:83c] \u2705 IndexedDB updated in-place (annotate) for: ${h}`),a.dataValue[r]={...a.dataValue[r],url:F.url,size:F.size,mode:F.mode,originalName:h},a.resolvedFiles&&Array.isArray(a.resolvedFiles)){const b=a.resolvedFiles.find(T=>{var C,z;return((C=T.fileInfo)==null?void 0:C.id)===_||((z=T.fileInfo)==null?void 0:z.originalName)===h});b&&(b.fileInfo&&(b.fileInfo.size=F.size,b.fileInfo.url=F.url,b.fileInfo.mode=F.mode),b.fileToSync&&(b.fileToSync.size=F.size,b.fileToSync.file=B))}if((S=a.filesToSync)!=null&&S.filesToUpload&&Array.isArray(a.filesToSync.filesToUpload)){const b=a.filesToSync.filesToUpload.find(T=>T.id===_||T.originalName===h);b&&(b.size=F.size,b.file=B)}(k=a.triggerChange)==null||k.call(a,{modified:!0}),a.redraw()}).catch(F=>{logger.error("[TF_SDK:83d] \u274C updateFileInIndexedDB (annotate) failed:",F)}):logger.warn(`[TF_SDK:83e] \u26A0\uFE0F No existingId found for annotate update (index=${r})`)}})}),this.refs.fileToSyncRemove&&this.refs.fileToSyncRemove.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault(),this.filesToSync.filesToUpload.splice(r,1),this.redraw()})}),this.refs.fileStatusRemove&&this.refs.fileStatusRemove.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault(),this.abortUpload&&this.abortUpload(),this.statuses.splice(r,1),this.redraw()})}),this.refs.restoreFile&&this.refs.restoreFile.forEach((i,r)=>{this.addEventListener(i,"click",d=>{var l;d.preventDefault();const a=this.filesToSync.filesToDelete[r];delete a.status,delete a.message,this.filesToSync.filesToDelete.splice(r,1),this.dataValue.push(a),(l=this.triggerChange)==null||l.call(this),this.redraw()})}),this.refs.galleryButton&&E&&this.addEventListener(this.refs.galleryButton,"click",i=>{i.preventDefault(),E.getPicture(r=>{window.resolveLocalFileSystemURL(r,d=>{d.file(a=>{const l=new FileReader;l.onloadend=p=>{const u=new Blob([new Uint8Array(p.target.result)],{type:a.type});u.name=a.name,$=!1,this.processAndUpload([u])},l.readAsArrayBuffer(a)})})},r=>{logger.error(r)},{sourceType:E.PictureSourceType.PHOTOLIBRARY})}),this.refs.cameraButton&&this.addEventListener(this.refs.cameraButton,"click",i=>{i.preventDefault(),i.stopPropagation(),typeof i.stopImmediatePropagation=="function"&&i.stopImmediatePropagation();let r=this.id;P=!1,window.isListenerSet=!1;let d=new CustomEvent("openCamera",{detail:{controlId:r}});window.parent&&window.parent!==window&&window.parent.postMessage({type:"OPEN_CAMERA",data:{controlId:r},status:"sucess",message:"camera triggerd"},"*"),logger.info("[TF_SDK:84a] \u2705 Dispatching openCamera event for controlId:",r),document.dispatchEvent(d)}),this.refs.takePictureButton&&this.addEventListener(this.refs.takePictureButton,"click",i=>{i.preventDefault(),i.stopPropagation(),this.takePicture()}),this.refs.toggleCameraMode&&this.addEventListener(this.refs.toggleCameraMode,"click",i=>{i.preventDefault(),i.stopPropagation(),typeof i.stopImmediatePropagation=="function"&&i.stopImmediatePropagation();let r=this.id;P=!1,window.isListenerSet=!1;let d=new CustomEvent("openCamera",{detail:{controlId:r}});window.parent&&window.parent!==window&&window.parent.postMessage({type:"OPEN_CAMERA",data:{controlId:r},status:"sucess",message:"camera triggerd"},"*"),logger.info("[TF_SDK:84b] \u2705 Dispatching openCamera event from toggleCameraMode for controlId:",r),document.dispatchEvent(d)}),this.refs.fileType.forEach((i,r)=>{this.dataValue[r]&&(this.dataValue[r].fileType=this.dataValue[r].fileType||this.component.fileTypes[0].label,this.addEventListener(i,"change",d=>{d.preventDefault();const a=this.component.fileTypes.find(l=>l.value===d.target.value);this.dataValue[r].fileType=a.label}))}),this.addEventListener(this.refs.syncNow,"click",i=>{i.preventDefault(),this.syncFiles()}),this.fileService){const i=[];this.filesReady=new Promise((r,d)=>{this.filesReadyResolve=r,this.filesReadyReject=d}),this.refs.fileImage.forEach((r,d)=>{i.push(this.loadImage(this.dataValue[d]).then(a=>r.src=a))}),i.length?Promise.all(i).then(()=>{this.filesReadyResolve()}).catch(()=>this.filesReadyReject()):this.filesReadyResolve()}let o=this;this.addEventListener(document,"capureImageData",function(i){var r;o.id==((r=i.detail)==null?void 0:r.controlId)&&(window.isListenerSet||(window.isListenerSet=!0,setTimeout(()=>{if(typeof i.detail.imageData=="string"&&i.detail.imageData.startsWith("data:")||typeof window.resolveLocalFileSystemURL!="function"){const l=((p,u,w="image/jpeg")=>{const m=p.split(","),f=m[0].match(/:(.*?);/)[1],g=atob(m[1]);let h=g.length;const y=new Uint8Array(h);for(;h--;)y[h]=g.charCodeAt(h);const I=new Blob([y],{type:w});return I.name=u,I})(i.detail.imageData,i.detail.fileName||`photo-${Date.now()}.jpg`);P=!1,$=!1,o.compressFile([l])}else window.resolveLocalFileSystemURL(i.detail.imageData,a=>{a.file(l=>{logger.info("[TF_SDK:85] \u2705 fileEntry ="+l);const p=new FileReader;p.onloadend=u=>{logger.info("[TF_SDK:86] \u2705 onloadend ="+u);const w=new Blob([new Uint8Array(u.target.result)],{type:l.type});w.name=l.name,logger.info("[TF_SDK:87] \u2705 file.name ="+l.name),logger.info("[TF_SDK:88] \u2705 blob instanceOf Blob ="+w),o.compressFile([w])},p.readAsArrayBuffer(l)})})},0)))},!1),this.addEventListener(document,"capureImageDataForAndroidBrowser",function(i){logger.info("[TF_SDK:89] \u2705 event.detail.controlId capureImageDataForAndroidBrowser ="+i.detail.controlId),o.id==i.detail.controlId&&(window.isListenerSet||(window.isListenerSet=!0,setTimeout(()=>{o.compressFile([i.detail.imageData])},0)))},!1),this.refs.FileView.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault();let a=this.dataValue[r],l=c(a.url);n(l,a.type,a.originalName,!1)})}),this.refs.DownloadFile.forEach((i,r)=>{this.addEventListener(i,"click",d=>{d.preventDefault();let a=this.dataValue[r],l=c(a.url);n(l,a.type,a.originalName,!0)})});function n(i,r,d,a){try{const l=atob(i),p=[];for(let m=0;m<l.length;m+=512){const f=l.slice(m,m+512),g=new Array(f.length);for(let y=0;y<f.length;y++)g[y]=f.charCodeAt(y);const h=new Uint8Array(g);p.push(h)}const u=new Blob(p,{type:r}),w=URL.createObjectURL(u);if(a){const m=document.createElement("a");m.href=w,m.target="_blank",m.download=d,document.body.appendChild(m),m.click(),document.body.removeChild(m)}else window.open(w,"_blank")}catch(l){logger.error("[TF_SDK:93] \u274C Failed to open file:",l)}}function c(i){const r=i.indexOf(",");return r!==-1?i.slice(r+1):i}return t}fileSize(e,t,s,o,n){return`${(t=Math,s=t.log,o=1024,n=s(e)/s(o)|0,e/t.pow(o,n)).toFixed(2)} ${n?`${"kMGTPEZY"[--n]}B`:"Bytes"}`}globStringToRegex(e){e=e.replace(/\s/g,"");let t="",s=[];if(e.length>2&&e[0]==="/"&&e[e.length-1]==="/")t=e.substring(1,e.length-1);else{const o=e.split(",");if(o.length>1)for(let n=0;n<o.length;n++){const c=this.globStringToRegex(o[n]);c.regexp?(t+=`(${c.regexp})`,n<o.length-1&&(t+="|")):s=s.concat(c.excludes)}else e.startsWith("!")?s.push(`^((?!${this.globStringToRegex(e.substring(1)).regexp}).)*$`):(e.startsWith(".")&&(e=`*${e}`),t=`^${e.replace(new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g"),"\\$&")}$`,t=t.replace(/\\\*/g,".*").replace(/\\\?/g,"."))}return{regexp:t,excludes:s}}translateScalars(e){if(typeof e=="string"){if(e.search(/kb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024);if(e.search(/mb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024*1024);if(e.search(/gb/i)===e.length-2)return parseFloat(e.substring(0,e.length-2)*1024*1024*1024);if(e.search(/b/i)===e.length-1||e.search(/s/i)===e.length-1)return parseFloat(e.substring(0,e.length-1));if(e.search(/m/i)===e.length-1)return parseFloat(e.substring(0,e.length-1)*60);if(e.search(/h/i)===e.length-1)return parseFloat(e.substring(0,e.length-1)*3600)}return e}validatePattern(e,t){if(!t)return!0;const s=this.globStringToRegex(t);let o=!0;if(s.regexp&&s.regexp.length){const n=new RegExp(s.regexp,"i"),c=!K.isNil(e.type)&&n.test(e.type),i=!K.isNil(e.name)&&n.test(e.name);logger.info(`[TF_SDK:94] \u2705 Validating pattern "${t}":`,{fileName:e.name,fileType:e.type,regexp:s.regexp,typeMatches:c,nameMatches:i}),o=c||i}return o=s.excludes.reduce((n,c)=>{const i=new RegExp(c,"i");return n&&(K.isNil(e.type)||i.test(e.type))&&(K.isNil(e.name)||i.test(e.name))},o),o}validateMinSize(e,t){return e.size+.1>=this.translateScalars(t)}validateMaxSize(e,t){return e.size-.1<=this.translateScalars(t)}abortRequest(e){const t=this.abortUploads.find(s=>s.id===e);t&&t.abort()}handleAction(e){const t=e.target;if(!t.id)return;const[s,o]=t.id.split("-");!s||!o||!this.actions[s]||this.actions[s](o)}getFileName(e){return W(e.name,this.component.fileNameTemplate,this.evalContext())}getInitFileToSync(e){const t=e.name?e.name.replace(/</g,"<").replace(/>/g,">"):e.name;return{id:Y(),dir:this.interpolate(this.component.dir||""),name:this.getFileName(e),originalName:t,fileKey:this.component.fileKey||"file",storage:this.component.storage,options:this.component.options,file:e,size:e.size,status:"info",message:this.t("Processing file. Please wait..."),hash:""}}async handleSubmissionRevisions(e){var o;if(((o=this.root)==null?void 0:o.form.submissionRevisions)!=="true")return"";const t=new BMF,s=await new Promise((n,c)=>{this.emit("fileUploadingStart"),t.md5(e,(i,r)=>i?c(i):n(r))});return this.emit("fileUploadingEnd"),s}validateFileName(e){const t=P?this.filesToSync.filesToUpload.some(o=>{var n;return((n=o.file)==null?void 0:n.name)===e.name}):this.dataValue.some(o=>o.url===N);return K.some(this.dataValue,o=>o.originalName===e.name)||t?{status:"error",message:this.t(`File with the same name is already ${t?"being ":""}uploaded`)}:{}}validateFileSettings(e){if(this.component.filePattern&&!this.validatePattern(e,this.component.filePattern))return{status:"error",message:this.t("File is the wrong type; it must be {{ pattern }}",{pattern:this.component.filePattern})};if(this.component.fileMinSize){const t=this.interpolate(this.component.fileMinSize,this.evalContext());if(!t)return{status:"error",message:"Please, check the entered parameters"};if(!this.validateMinSize(e,t))return{status:"error",message:this.t("fileTooSmall",{size:t})}}if(this.component.fileMaxSize){const t=this.interpolate(this.component.fileMaxSize,this.evalContext());if(!t)return{status:"error",message:"Please, check the entered parameters"};if(!this.validateMaxSize(e,t))return{status:"error",message:this.t("fileTooBig",{size:t})}}return{}}validateFileService(){const{fileService:e}=this;return e?{}:{status:"error",message:this.t("File Service not provided.")}}validateFile(e){const t=this.validateFileService();if(t.status==="error")return t;const s=this.validateFileName(e);return s.status==="error"?s:this.validateFileSettings(e)}getGroupPermissions(){var s;let e=null,t=null;return(s=this.root)==null||s.everyComponent(o=>{var n,c;((n=o.component)!=null&&n.submissionAccess||(c=o.component)!=null&&c.defaultPermission)&&(t=o.component.submissionAccess?o.component.submissionAccess:[{type:o.component.defaultPermission,roles:[]}],t.forEach(i=>{e=["admin","write","create"].includes(i.type)?o.component.key:null}))}),{groupKey:e,groupPermissions:t}}async triggerFileProcessor(e){var s,o;let t=null;if((s=this.root)!=null&&s.options.fileProcessor)try{this.refs.fileProcessingLoader&&(this.refs.fileProcessingLoader.style.display="block"),t=await fileProcessor(this.fileService,(o=this.root)==null?void 0:o.options.fileProcessor)(e,this.component.properties)}catch(n){return this.fileDropHidden=!1,{status:"error",message:this.t("File processing has been failed.")}}finally{this.refs.fileProcessingLoader&&(this.refs.fileProcessingLoader.style.display="none")}return{file:t}}async prepareFileToUpload(e){const t=this.getInitFileToSync(e);t.hash=await this.handleSubmissionRevisions(e);const{status:s,message:o}=this.validateFile(e);if(s==="error")return t.isValidationError=!0,t.status=s,t.message=o,this.filesToSync.filesToUpload.push(t);this.component.privateDownload&&(e.private=!0);const{groupKey:n,groupPermissions:c}=this.getGroupPermissions(),i=await this.triggerFileProcessor(e);if(i.status==="error")return t.status,t.message=i.message,this.filesToSync.filesToUpload.push(t);this.autoSync&&(t.message=this.t("Ready to be uploaded into storage")),this.filesToSync.filesToUpload.push({...t,message:t.message,file:i.file||e,url:this.interpolate(this.component.url,{file:t}),groupPermissions:c,groupResourceId:n?this.currentForm.submission.data[n]._id:null})}processAndUpload(e){logger.info(`[TF_SDK:100a] \u{1F4E5} Image upload process initiated for ${e.length} file(s)`);const t=(this.dataValue||[]).map(n=>n.originalName||n.name),s=Array.from(e).filter(n=>(logger.info(`[TF_SDK:100b] \u{1F4C4} Selected file: name="${n.name}", size=${(n.size/1024).toFixed(1)} KB, type="${n.type}"`),t.includes(n.name)?(logger.warn(`[TF_SDK:100c] \u26A0\uFE0F Duplicate blocked: ${n.name}`),typeof window.showToast=="function"&&window.showToast("File with the same name is already uploaded","danger"),!1):!0));if(s.length===0){logger.info("[TF_SDK:100d] \u2139\uFE0F All selected files are already uploaded. Skipping.");return}logger.info(`[TF_SDK:100e] \u26A1 Starting compression phase for ${s.length} file(s)...`);const o=[];for(let n=0;n<s.length;n++)o.push(this.compressFilePromise(s[n]));Promise.all(o).then(n=>{logger.info(`[TF_SDK:100f] \u2705 Compression phase complete for ${n.length} file(s)`),this.handleFilesToUpload(n)}).catch(n=>{logger.error("[TF_SDK:100g] \u274C processAndUpload failed:",n)})}compressFilePromise(e){return new Promise(t=>{if(e&&["image/gif","image/jpeg","image/png"].includes(e.type)){let o=this.component.fileCompressionSize||2,n=this.component.MaximumCompressionHeightOrWidth||2048;logger.info(`[TF_SDK:101a] \u26A1 Compressing image "${e.name}" (Original: ${(e.size/1024).toFixed(1)} KB)...`);const c={maxSizeMB:o,maxWidthOrHeight:n,useWebWorker:!M};imageCompression(e,c).then(i=>{i.name=e.name,logger.info(`[TF_SDK:101b] \u2705 Compressed "${e.name}" (${(e.size/1024).toFixed(1)} KB -> ${(i.size/1024).toFixed(1)} KB)`),this.blobToBase64(i).then(r=>{N=r,t(i)})}).catch(i=>{logger.warn(`[TF_SDK:101c] \u26A0\uFE0F Compression failed for "${e.name}", using original:`,i.message),t(e)})}else logger.info(`[TF_SDK:101d] \u2139\uFE0F File "${e.name}" is non-compressible type (${e.type}). Using original.`),t(e)})}compressFile(e){this.processAndUpload(e)}async prepareFilesToUpload(e){if(this.component.multiple||(e=Array.prototype.slice.call(e,0,1)),this.component.storage&&e&&e.length){this.fileDropHidden=!0;const t=await Promise.all([...e].map(async s=>await this.prepareFileToUpload(s)));return this.redraw(),typeof window!="undefined"&&window.requestAnimationFrame(()=>{document.body.offsetHeight}),t}else return Promise.resolve()}async handleFilesToUpload(e){logger.info(`[TF_SDK:102] \u2705 handleFilesToUpload received ${e.length} files`),await this.prepareFilesToUpload(e),this.autoSync||await this.syncFiles()}prepareFileToDelete(e){this.filesToSync.filesToDelete.push({...e,status:"info",message:this.autoSync?this.t("Ready to be removed from storage"):this.t("Preparing file to remove")}),e&&e.id&&O(e.id).catch(s=>{logger.warn("[TF_SDK:102c] \u26A0\uFE0F Failed to mark file mode='D' in IndexedDB:",s)});const t=this.dataValue.findIndex(s=>s===e||s.id&&s.id===e.id||s.name&&s.name===e.name);t!==-1?this.splice(t):logger.warn("[TF_SDK:102b] \u26A0\uFE0F Could not find file to delete in dataValue:",e),this.redraw()}handleFileToRemove(e){this.prepareFileToDelete(e),this.autoSync||this.syncFiles()}async deleteFile(e){const{options:t={}}=this.component;if(e&&["url","indexeddb","s3","azure","googledrive"].includes(this.component.storage)){const{fileService:s}=this;if(s&&typeof s.deleteFile=="function")return await s.deleteFile(e,t);{const o=this.options.formio||this.root&&this.root.formio;if(o)return await o.makeRequest("",e.url,"delete")}}}async delete(){return this.filesToSync.filesToDelete.length?await Promise.all(this.filesToSync.filesToDelete.map(async e=>{try{if(e.isValidationError)return{fileToSync:e};await this.deleteFile(e),e.status="success",e.message=this.t("Succefully removed")}catch(t){e.status="error",e.message=typeof t=="string"?t:t.toString()}finally{this.redraw()}return{fileToSync:e}})):Promise.resolve()}updateProgress(e,t){if(e.progress=parseInt(100*t.loaded/t.total),e.status!=="progress")e.status="progress",delete e.message,this.redraw();else{const s=Array.prototype.find.call(this.refs.progress,o=>o.id===e.id);s.innerHTML=`<span class="visually-hidden">${e.progress}% ${this.t("Complete")}</span>`,s.style.width=`${e.progress}%`,s.ariaValueNow=e.progress.toString()}}getMultipartOptions(e){let t=0;return this.component.useMultipartUpload&&this.component.multipart?{...this.component.multipart,progressCallback:s=>{t++,e.status="progress",e.progress=parseInt(100*t/s),delete e.message,this.redraw()},changeMessage:s=>{e.message=s,this.redraw()}}:!1}uploadFile(e){var r,d,a;const{storage:t,options:s={}}=this.component,o=this.interpolate(this.component.url,{file:e}),{groupKey:n,groupPermissions:c}=this.getGroupPermissions(),i=n&&((a=(d=(r=this.currentForm)==null?void 0:r.submission)==null?void 0:d.data[n])==null?void 0:a._id)||null;return this.fileService.uploadFile(t,e.file,e.name,e.dir,l=>{this.updateProgress(e,l)},o,s,e.fileKey,c,i,()=>{this.emit("fileUploadingStart")},l=>{this.abortUploads.push({id:e.id,abort:l})},this.getMultipartOptions(e))}async upload(){return this.filesToSync.filesToUpload.length?(logger.info(`[TF_SDK:102a] \u{1F4BE} Starting IndexedDB upload for ${this.filesToSync.filesToUpload.length} file(s)...`),await Promise.all(this.filesToSync.filesToUpload.map(async e=>{let t=null;try{if(e.isValidationError)return logger.warn(`[TF_SDK:102b] \u26A0\uFE0F Skipping upload for ${e.originalName} due to validation error`),{fileToSync:e,fileInfo:t};if(e.status==="success"){const o=this.resolvedFiles.find(n=>n.fileToSync.originalName===e.originalName);return{fileToSync:o.fileToSync,fileInfo:o.fileInfo}}logger.info(`[TF_SDK:102c] \u{1F4BE} Uploading file to IndexedDB: name="${e.originalName}", size=${(e.size/1024).toFixed(1)} KB`);const s=this.pendingfiles.find(o=>o.name===e.name);if(s)t=await s.fileInfoProm;else{const o=this.uploadFile(e);this.pendingfiles.push({name:e.name,fileInfoProm:o}),t=await o}this.pendingfiles=this.pendingfiles.filter(o=>o.name!==e.name),e.status="success",e.message=this.t("Succefully uploaded"),t.originalName=e.originalName,t.hash=e.hash,logger.info(`[TF_SDK:102d] \u2705 Saved to IndexedDB successfully: name="${e.originalName}", ID="${t==null?void 0:t.id}", Mode="${(t==null?void 0:t.mode)||"A"}"`),this.emit("fileUploadingEnd")}catch(s){logger.error(`[TF_SDK:102e] \u274C Upload to IndexedDB failed for ${e.originalName}:`,s),e.status="error",delete e.progress,e.message=typeof s=="string"?s:s.type==="abort"?this.t("Request was aborted"):s.toString(),this.emit("fileUploadingEnd"),this.emit("fileUploadError",{fileToSync:e,response:s})}finally{delete e.progress,this.redraw();const s=this.resolvedFiles.find(o=>o.fileInfo.originalName===e.originalName);t&&!s&&this.resolvedFiles.push({fileToSync:e,fileInfo:t})}return{fileToSync:e,fileInfo:t}}))):Promise.resolve()}async syncFiles(){var e,t,s;logger.info("[TF_SDK:108] \u2705 syncFiles started"),this.isSyncing=!0,this.fileDropHidden=!0,this.redraw();try{const[o=[],n=[]]=await Promise.all([this.delete(),this.upload()]);if(logger.info(`[TF_SDK:109] \u2705 syncFiles results: ${n.length} uploaded, ${o.length} deleted`),n.length!==((t=(e=this.filesToSync)==null?void 0:e.filesToUpload)==null?void 0:t.length))return;this.filesToSync.filesToDelete=o.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="error"}).map(i=>i.fileToSync),this.filesToSync.filesToUpload=n.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="error"}).map(i=>i.fileToSync),this.hasValue()||(this.dataValue=[]);const c=n.filter(i=>{var r;return((r=i.fileToSync)==null?void 0:r.status)==="success"}).map(i=>i.fileInfo);if(logger.info(`[TF_SDK:110] \u2705 syncFiles succeeded for ${c.length} new files`),$){$=!1;const i=c[0];if(!i)logger.warn("[TF_SDK:111a] \u26A0\uFE0F replace=true but no fileInfo available \u2014 skipping replace");else{let r;for(let d=0;d<this.dataValue.length;d++)this.dataValue[d].originalName==i.originalName&&(logger.info("[TF_SDK:111] \u2705 original name matches at index "+d),r=d);if(r!==void 0){let d=this.dataValue[r].id;logger.info("[TF_SDK:112] \u2705 originalFileId ="+d+", replacing with new id ="+i.id),this.dataValue[r]=i;let a=new CustomEvent("deleteOriginalFileFromDB",{detail:{fileId:d}});document.dispatchEvent(a)}else logger.warn("[TF_SDK:112a] \u26A0\uFE0F Could not find original file to replace in dataValue for: "+i.originalName),this.dataValue.push(i)}}else this.dataValue.push(...c);return(s=this.triggerChange)==null||s.call(this,{modified:!0}),Promise.resolve()}catch(o){return logger.error("[TF_SDK:113] \u274C syncFiles error:",o),Promise.reject()}finally{this.isSyncing=!1,this.fileDropHidden=!1,this.abortUploads=[],this.redraw()}}blobToBase64(e){return new Promise((t,s)=>{const o=new FileReader;o.onloadend=()=>t(o.result),o.readAsDataURL(e)})}getFile(e){const{options:t={}}=this.component,{fileService:s}=this;if(!s)return alert("File Service not provided");this.component.privateDownload&&(e.private=!0),s.downloadFile(e,t).then(o=>{o&&(["base64","indexeddb"].includes(o.storage)?download(o.url,o.originalName||o.name,o.type):window.open(o.url,"_blank"))}).catch(o=>{alert(o)})}focus(){"beforeFocus"in this.parent&&this.parent.beforeFocus(this),this.refs.fileBrowse&&this.refs.fileBrowse.focus()}async beforeSubmit(){try{return this.autoSync?(await this.syncFiles(),this.shouldSyncFiles?Promise.reject("Synchronization is failed"):Promise.resolve()):Promise.resolve()}catch(e){return Promise.reject(e.message)}}destroy(e){this.stopVideo(),super.destroy(e)}}A.editForm=q,j.addComponent("file",A),logger.info("[TF_SDK:114] \u2705 Script execution finished and component 'file' registered")})();</script>
|
|
36664
36664
|
<script>(function(){window.openImagePreviewModal=function(W,$){let L="var(--tf-primary-color, #2586c7)",v="white",I="white";document.querySelector(".tf-embed-sdk")&&window.__unviredThemeData&&(window.__unviredThemeData.primaryColor&&(L=window.__unviredThemeData.primaryColor),window.__unviredThemeData.secondaryColor&&(v=window.__unviredThemeData.secondaryColor),window.__unviredThemeData.backgroundColor&&(I=window.__unviredThemeData.backgroundColor));const l=document.createElement("div");l.style.position="fixed",l.style.top="0",l.style.left="0",l.style.width="100vw",l.style.height="100vh",l.style.backgroundColor="rgba(0, 0, 0, 0.85)",l.style.display="flex",l.style.alignItems="center",l.style.justifyContent="center",l.style.zIndex="999999";const r=document.createElement("div");r.style.width="90vw",r.style.height="90vh",r.style.backgroundColor="#fff",r.style.borderRadius="8px",r.style.display="flex",r.style.flexDirection="column",r.style.overflow="hidden",r.style.boxShadow="0 4px 12px rgba(0,0,0,0.5)";const p=document.createElement("div");p.style.backgroundColor=L,p.style.color=v,p.style.padding="10px 15px",p.style.display="flex",p.style.justifyContent="space-between",p.style.alignItems="center",p.style.position="relative";const y=document.createElement("button");y.innerHTML="Reset",y.title="Reset Zoom",y.style.background="transparent",y.style.border=`1px solid ${v}`,y.style.borderRadius="4px",y.style.color=v,y.style.fontSize="12px",y.style.cursor="pointer",y.style.padding="4px 10px",p.appendChild(y);const d=document.createElement("span");d.textContent=$||"Preview",d.style.fontSize="16px",d.style.fontWeight="500",d.style.whiteSpace="nowrap",d.style.overflow="hidden",d.style.setProperty("color",v,"important"),d.style.textOverflow="ellipsis",d.style.position="absolute",d.style.left="50%",d.style.transform="translateX(-50%)",d.style.maxWidth="50%",p.appendChild(d);const h=document.createElement("button");h.innerHTML="\u2715",h.style.background="transparent",h.style.border="none",h.style.color=v,h.style.fontSize="20px",h.style.cursor="pointer",h.style.padding="0",h.style.lineHeight="1",h.addEventListener("click",t=>{t.stopPropagation(),document.body.removeChild(l)}),p.appendChild(h);const i=document.createElement("div");i.style.flex="1",i.style.display="flex",i.style.alignItems="center",i.style.justifyContent="center",i.style.backgroundColor=I,i.style.overflow="hidden";const u=document.createElement("img");u.src=W,u.style.maxWidth="100%",u.style.maxHeight="100%",u.style.objectFit="contain",u.style.transition="transform 0.2s ease-in-out",i.appendChild(u);let a=1,m=0,f=0;function x(t=!1){const o=i.offsetWidth,e=i.offsetHeight,s=u.offsetWidth*a,g=u.offsetHeight*a,n=Math.abs(s-o)/2,C=Math.abs(g-e)/2;m=Math.max(-n,Math.min(m,n)),f=Math.max(-C,Math.min(f,C)),t?u.style.transition="transform 0.2s ease-in-out":u.style.transition="none",u.style.transform=`translate(${m}px, ${f}px) scale(${a})`}x(),i.addEventListener("wheel",t=>{t.preventDefault();const e=Math.exp((t.deltaY<0?1:-1)*.1);let s=a*e;s<.5&&(s=.5),s>50&&(s=50);const g=s/a,n=i.getBoundingClientRect(),C=n.width/2,D=n.height/2,T=t.clientX-n.left-C,k=t.clientY-n.top-D;m=T-(T-m)*g,f=k-(k-f)*g,a=s,x(!1)},{passive:!1});let b=null;i.addEventListener("touchstart",t=>{t.touches.length===2&&(t.preventDefault(),b=Math.hypot(t.touches[0].clientX-t.touches[1].clientX,t.touches[0].clientY-t.touches[1].clientY))},{passive:!1}),i.addEventListener("touchmove",t=>{if(t.touches.length===2&&b!==null){t.preventDefault();const o=Math.hypot(t.touches[0].clientX-t.touches[1].clientX,t.touches[0].clientY-t.touches[1].clientY),e=o/b;let s=a*e;s<.5&&(s=.5),s>50&&(s=50);const g=s/a,n=i.getBoundingClientRect(),C=n.width/2,D=n.height/2,T=(t.touches[0].clientX+t.touches[1].clientX)/2,k=(t.touches[0].clientY+t.touches[1].clientY)/2,H=T-n.left-C,j=k-n.top-D;m=H-(H-m)*g,f=j-(j-f)*g,a=s,b=o,x(!1)}},{passive:!1}),i.addEventListener("touchend",t=>{t.touches.length<2&&(b=null)});const c=document.createElement("div");c.style.backgroundColor=L,c.style.color=v,c.style.padding="10px 15px",c.style.display="flex",c.style.justifyContent="center",c.style.alignItems="center",c.style.gap="15px";const w=(t,o)=>{const e=document.createElement("button");return e.innerHTML=t,e.title=o,e.style.background="transparent",e.style.border=`1px solid ${v}`,e.style.borderRadius="4px",e.style.color=v,e.style.fontSize="18px",e.style.fontWeight="bold",e.style.cursor="pointer",e.style.width="35px",e.style.height="35px",e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="center",e},_=w("+","Zoom In"),P=w("\u2212","Zoom Out"),B=w("\u2190","Move Left"),S=w("\u2192","Move Right"),X=w("\u2191","Move Up"),Y=w("\u2193","Move Down");c.appendChild(_),c.appendChild(P),c.appendChild(B),c.appendChild(S),c.appendChild(X),c.appendChild(Y);const E=50;_.addEventListener("click",t=>{t.stopPropagation();let o=a+.5;o>50&&(o=50),a=o,x(!0)}),P.addEventListener("click",t=>{t.stopPropagation();let o=a-.5;o<.5&&(o=.5),a=o,x(!0)});let z=null,R=null;const M=(t,o,e)=>{const s=n=>{n.type==="touchstart"&&n.cancelable&&n.preventDefault(),n.stopPropagation(),m+=o,f+=e,x(!0),R=setTimeout(()=>{z=setInterval(()=>{m+=o*.4,f+=e*.4,x(!1)},20)},300)},g=()=>{clearTimeout(R),clearInterval(z)};t.addEventListener("mousedown",s),t.addEventListener("touchstart",s,{passive:!1}),["mouseup","mouseleave","touchend","touchcancel"].forEach(n=>{t.addEventListener(n,g)})};M(B,E,0),M(S,-E,0),M(X,0,E),M(Y,0,-E),y.addEventListener("click",t=>{t.stopPropagation(),a=1,m=0,f=0,x(!0)}),r.appendChild(p),r.appendChild(i),r.appendChild(c),l.addEventListener("click",t=>{t.target===l&&document.body.removeChild(l)}),l.appendChild(r),document.body.appendChild(l)}})();</script>
|
|
36665
36665
|
<script>(function(){const n=typeof Formio!="undefined"?Formio:typeof window!="undefined"?window.Formio:void 0,a=n&&n.Components&&n.Components.components?n.Components.components.textfield:class{static schema(){return{}}};class i extends a{constructor(o,e,r){super(o,e,r)}static schema(...o){return a.schema({type:"smartId",label:"Smart ID",input:!0,key:"smartId",inputType:"text",inputFormat:"plain",disabled:!0},...o)}static get builderInfo(){return{title:"Smart Id",group:"premium",icon:"id-card-o",weight:40,documentation:"http://help.form.io/userguide/#textfield",schema:i.schema()}}static addTemplate(o,e){Templates.templates[o]=e}get defaultSchema(){return i.schema()}render(){return super.render(this.renderTemplate("input",{input:this.inputInfo}))}attach(o){let e=new Date,r="",s="";if(Number(e.getDate())<=9&&this.component.addLeadingZeros?r="0"+e.getDate():r=e.getDate(),Number(e.getMonth())<=9&&this.component.addLeadingZeros?s="0"+Number(e.getMonth()+1):s=Number(e.getMonth()+1),this.component.addLeadingZeros&&this.component.startCounter!="undefined"&&((this.component.startCounter=="undefined"||this.component.startCounter==null)&&(this.component.startCounter=1),this.component.digitsInConter&&(this.component.startCounter=String(this.component.startCounter).padStart(this.component.digitsInConter,0))),this.component.pattern){let t=this.component.pattern;t.includes("${counter}")?(t=t.replace("${day}",r),t=t.replace("${month}",s),t=t.replace("${year}",e.getFullYear()),t=t.replace("${day}",r),t=t.replace("${counter}",this.component.startCounter),this.setValue(t)):this.resetValue()}return super.attach(o)}}n&&n.Components?n.Components.addComponent("smartId",i):typeof Formio!="undefined"&&Formio.Components&&Formio.Components.addComponent("smartId",i)})();</script>
|
|
36666
36666
|
<script>(function(){const m=Formio.Components.components.nested;class r extends m{static schema(...t){return m.schema({label:"Columns",key:"columns",type:"columns",columns:[{components:[],width:8,offset:0,push:0,pull:0,size:"md"},{components:[],width:8,offset:0,push:0,pull:0,size:"md"}],clearOnHide:!1,input:!1,tableView:!1,persistent:!1,autoAdjust:!1},...t)}static get builderInfo(){return{title:"Columns",icon:"columns",group:"layout",documentation:"/userguide/form-building/layout-components#columns",showPreview:!1,weight:10,schema:r.schema()}}constructor(t,e,o){super(t,e,o),this.rows=[]}get schema(){var e;const t=_.omit(super.schema,["components"]);return(e=t.columns)==null||e.map((o,s)=>{o.components.map((n,c)=>{const i=_.clone(n);i.internal=!0;const u=this.createComponent(i);delete u.component.internal,t.columns[s].components[c]=u.schema})}),t}get defaultSchema(){return r.schema()}get className(){return`row ${super.className}`}get columnKey(){return`column-${this.id}`}init(){super.init(),this.columns=[],_.each(this.component.columns,(t,e)=>{this.columns[e]=[],t.size||(t.size="md"),t.currentWidth=t.width||0,Array.isArray(t.components)||(t.components=[]),_.each(t.components,o=>{const s=this.createComponent(o);s.column=e,this.columns[e].push(s)})}),this.component.autoAdjust&&this.options.display!=="pdf"&&this.justify(),this.rows=this.groupByRow()}labelIsHidden(){return!0}render(){return super.render(this.renderTemplate("columns",{columnKey:this.columnKey,columnComponents:this.columns.map(t=>this.renderComponents(t))}))}justifyColumn(t,e){const o=_.every(t,i=>!i.visible),s=this.component.columns[e],n=o&&t.length?0:s.width,c=!_.isEqual(n,s.currentWidth);return s.currentWidth=n,c}justify(){return this.columns.reduce((t,e,o)=>this.justifyColumn(e,o)||t,!1)}attach(t){this.loadRefs(t,{[this.columnKey]:"multiple"});const e=super.attach(t);return this.refs[this.columnKey]&&this.refs[this.columnKey].forEach((o,s)=>this.attachComponents(o,this.columns[s],this.component.columns[s].components)),e}get gridSize(){return 12}groupByRow(){const t={stack:[],rows:[]},e=s=>s.component.width,o=_.reduce(this.components,(s,n)=>{const c=[...s.stack,n];return _.sumBy(c,e)<=this.gridSize?(s.stack=c,s):(s.rows=[...s.rows,s.stack],s.stack=[n],s)},t);return _.concat(o.rows,[o.stack])}checkData(t,e,o,s){const n=super.checkData(t,e,o,s);if(this.component.autoAdjust&&this.options.display!=="pdf"&&this.justify()){const i=document.activeElement;i&&(i.tagName==="INPUT"||i.tagName==="TEXTAREA"||i.classList.contains("choices__input"))||this.redraw()}return n}detach(t){super.detach(t)}destroy(){super.destroy(),this.columns=[]}}Formio.Components.addComponent("columns",r)})();</script>
|
|
@@ -38461,12 +38461,12 @@ Expecting `+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":x="Parse error on
|
|
|
38461
38461
|
</div>
|
|
38462
38462
|
`,p=document.createElement("div");p.innerHTML=d.trim();const a=p.firstChild;s.appendChild(a);const u=setTimeout(()=>{a.parentNode&&(a.classList.remove("show"),a.style.transition="opacity 0.5s ease",a.style.opacity="0",setTimeout(()=>{a.parentNode&&a.remove()},500))},g),m=a.querySelector(".btn-close");m&&(m.onclick=()=>{clearTimeout(u),a.remove()})}window.showDynamicModal=w,window.showToast=x})();</script>
|
|
38463
38463
|
<script>(function(){let v=!1,l=null;const g=window.innerHeight;function u(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1||!!(window.platform&&window.platform.iosPlatform)}logger.info("[TF_SDK:254] \u2705 Focus script initialized. Initial Height:",g,"isIOS:",u());function h(o){if(o&&o.target&&o.target.closest&&o.target.closest(".flatpickr-calendar"))return;document.querySelector(".flatpickr-calendar.open, .flatpickr-calendar.show")&&(document.activeElement&&typeof document.activeElement.blur=="function"&&document.activeElement.blur(),document.querySelectorAll("input").forEach(n=>{n._flatpickr&&typeof n._flatpickr.close=="function"&&n._flatpickr.close()}),document.body.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0})))}window.addEventListener("scroll",h,!0),window.addEventListener("wheel",h,{capture:!0,passive:!0}),window.addEventListener("touchmove",h,{capture:!0,passive:!0});function w(o){if(!u())return;const e=document.getElementById("sticky-footer");e&&(o?e.style.display="none":e.style.display="flex")}function a(){if(!u()||!l)return;const o=l.closest(".formio-component")||l,e=window.visualViewport?window.visualViewport.height:window.innerHeight,n=o.getBoundingClientRect(),r=o.querySelector(".choices__list--dropdown.is-active, .choices__list--dropdown"),d=!!(r||o.querySelector(".choices")),s=d&&r?Math.max(140,r.offsetHeight||140):0,t=n.bottom+s>e-15,i=n.top<0;if(!t&&!i)return;if(typeof o.scrollIntoView=="function"){const m=d&&t?"center":"nearest";o.scrollIntoView({behavior:"smooth",block:m,inline:"nearest"})}const f=document.getElementById("formio-wrapper");if(f&&f.scrollHeight>f.clientHeight){let m=0,c=o;for(;c&&c!==f&&c!==null;)m+=c.offsetTop,c=c.offsetParent;if(t){const E=m-(e-o.offsetHeight-s-20);f.scrollTo({top:Math.max(0,E),behavior:"smooth"})}else i&&f.scrollTo({top:Math.max(0,m-20),behavior:"smooth"})}}document.addEventListener("focusin",o=>{if(!u())return;const e=o.target;if(!(!e||!["INPUT","TEXTAREA","SELECT"].includes(e.tagName))){if(w(!0),l=e,e.classList.contains("choices__input")||e.closest(".choices")){const n=e.closest(".choices")||e.closest(".formio-component-barcodeselect")||e.closest(".formio-component-select");n&&(l=n)}setTimeout(a,100),setTimeout(a,350)}}),document.addEventListener("focusout",o=>{u()&&setTimeout(()=>{const e=document.activeElement;!(e&&["INPUT","TEXTAREA","SELECT"].includes(e.tagName))&&!v&&w(!1)},250)}),window.visualViewport&&window.visualViewport.addEventListener("resize",()=>{if(!u())return;const e=window.visualViewport.height;e<g-60||e<screen.height-150?(v=!0,w(!0),l&&(setTimeout(a,150),setTimeout(a,350))):(v=!1,w(!1))}),document.addEventListener("showDropdown",o=>{if(!u())return;const e=o.target,n=e&&e.closest?e.closest(".formio-component-barcodeselect, .formio-component-select, .formio-component")||e:l;n&&(l=n,setTimeout(a,50),setTimeout(a,200),setTimeout(a,400))},!0),document.addEventListener("hideDropdown",()=>{u()&&setTimeout(a,80)},!0),document.addEventListener("FormRenderingComplete",()=>{const o=window.formObj;if(!o)return;let e=0;const n=setInterval(()=>{if(e++,e>8){clearInterval(n);return}let r=null;function d(s){if(!s)return null;for(let p=0;p<s.length;p++){const t=s[p];if(t){if(t.component&&t.component.autofocus){if(t.refs&&t.refs.input&&t.refs.input[0])return t.refs.input[0];if(t.element){const i=t.element.querySelector('input:not([type="hidden"]), textarea, select');if(i)return i}}if(t.components&&Array.isArray(t.components)){const i=d(t.components);if(i)return i}if(t.subForm&&t.subForm.components&&Array.isArray(t.subForm.components)){const i=d(t.subForm.components);if(i)return i}if(t.rows&&Array.isArray(t.rows))for(let i=0;i<t.rows.length;i++){const f=t.rows[i],m=Object.values(f||{}),c=d(m);if(c)return c}}}return null}if(r=d(o.components),r)if(document.activeElement!==r){if(logger.info(`[TF_SDK:262] \u2705 Forcing focus on schema-defined autofocus element (Attempt ${e})`),r.focus(),r.setSelectionRange&&r.value){const s=r.value.length;try{r.blur(),r.focus(),r.setSelectionRange(s,s)}catch(p){}}}else clearInterval(n)},500)})})();</script>
|
|
38464
|
-
<script>(function(){var u=null,k=null,ne;let v=[],T=0,M=!1;function L(){sendEventCallback({type:FORM_EVENTS.BACK_NAVIGATION,message:"Back navigation triggered.",data:{}})}function H(e,t){var c,f;const o=document.getElementById("saveBtn"),n=document.getElementById("submitBtn"),r=document.getElementById("prevBtn"),i=document.getElementById("nextBtn"),l=document.getElementById("completeOption"),m=document.getElementById("saveOption"),p=document.getElementById("completeDivider"),y=document.getElementById("saveDivider");if(!o||!n)return;const s=e===!0||e==="true",g=e===!1||e==="false",d=String(t||"").toLowerCase(),a=(h,w,E)=>{h&&(E?h.style.setProperty("display","flex","important"):h.style.setProperty("display","none","important")),w&&(E?w.style.setProperty("display","block","important"):w.style.setProperty("display","none","important"))};a(l,p,!1),a(m,y,!1),d==="read"?(o.style.display="none",n.style.display="none"):g&&d==="writemultiple"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',n.disabled=!0,a(l,p,!1),a(m,y,!1)):g&&d==="writesingle"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Submit',n.disabled=!0):s&&d==="writemultiple"?((c=window.__unviredFormsOptions)==null?void 0:c.showCompleteAlways)===!0||((f=window.__unviredFormsOptions)==null?void 0:f.showCompleteAlways)==="true"?(o.style.display="",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',o.disabled=!0,n.disabled=!0,a(l,p,!1),a(m,y,!1)):(o.style.display="",n.style.display="none",o.disabled=!0,a(l,p,!1)):s&&d==="writesingle"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',n.disabled=!0,a(m,y,!0)):(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Submit',n.disabled=!0),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()}function W(e,t,o,n){var O,F,D,C;const r=document.getElementById("saveBtn"),i=document.getElementById("submitBtn"),l=document.getElementById("prevBtn"),m=document.getElementById("nextBtn");if(!r||!i)return;const p=o===!0||o==="true",y=o===!1||o==="false",s=String(n||"").toLowerCase(),g=document.getElementById("completeOption"),d=document.getElementById("saveOption"),a=document.getElementById("completeDivider"),c=document.getElementById("saveDivider"),f=(b,A,S)=>{b&&(S?b.style.setProperty("display","flex","important"):b.style.setProperty("display","none","important")),A&&(S?A.style.setProperty("display","block","important"):A.style.setProperty("display","none","important"))},h=Object.values(t||{}).some(b=>b!=null&&b!==""&&b!==!1&&!(Array.isArray(b)&&b.length===0)&&!(typeof b=="object"&&!Array.isArray(b)&&Object.keys(b).length===0)),w=e>=100,E=((O=window.__unviredFormsOptions)==null?void 0:O.requireCompleteForm)!==!1&&((F=window.__unviredFormsOptions)==null?void 0:F.requireCompleteForm)!=="false";if(s==="read"){r.style.display="none",i.style.display="none";return}if(p&&s==="writesingle"){r.style.display="none",i.style.display="",i.disabled=!1,f(d,c,!0),f(g,a,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(p&&s==="writemultiple"){((D=window.__unviredFormsOptions)==null?void 0:D.showCompleteAlways)===!0||((C=window.__unviredFormsOptions)==null?void 0:C.showCompleteAlways)==="true"?(r.style.display="",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',r.disabled=!h,i.disabled=!1,f(g,a,!1),f(d,c,!1)):w?(r.style.display="none",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',i.disabled=!1,f(d,c,!0),f(g,a,!1)):h?(r.style.display="",i.style.display="none",r.disabled=!1,f(g,a,!0),f(d,c,!1)):(r.style.display="",i.style.display="none",r.disabled=!0,f(g,a,!1),f(d,c,!1)),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(y&&s==="writemultiple"){r.style.display="none",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',i.disabled=!1,f(g,a,!1),f(d,c,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(y&&s==="writesingle"){r.style.display="none",i.style.display="",i.disabled=!1,f(g,a,!1),f(d,c,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}r.style.display="none",i.style.display="",i.disabled=!1,typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()}async function G(e,t,o,n,r,i,l,m,p,y){if(window.CURRENT_VIEW!=="comments"){if(U(),logger.info("[TF_SDK:296] \u2705 loadTRform() entered",{mode:n,permission:p,privateExternal:m,language:r}),v=y,typeof Formio=="undefined"){logger.error("[TF_SDK:297] \u274C Formio library not loaded"),sendEventCallback({type:"ERROR",errorMessage:"ErrorCode : 016, Formio library not loaded",data:{reason:"Formio library not loaded"}});return}try{if(console.log("[TF_SDK_DEBUG] 1. Entered try block of loadTRform"),logger.info("[TF_SDK_DEBUG] 1. Entered try block of loadTRform"),console.log("[TF_SDK_DEBUG] 2. Checking Formio typeof"),typeof Formio!="undefined"&&Formio.Components&&Formio.Components.components&&Formio.Components.components.component){const c=Formio.Components.components.component;if(!c._requiredFixApplied){c._requiredFixApplied=!0;const f=c.prototype.setCustomValidity;c.prototype.setCustomValidity=function(w,E,O){var F,D,C,b;if(typeof w=="string"&&(w.trim().toLowerCase()==="required"||w.includes("{{field}}"))){const A=(D=(F=this.component)==null?void 0:F.validate)==null?void 0:D.customMessage,S=((C=this.component)==null?void 0:C.errorLabel)||((b=this.component)==null?void 0:b.label)||this.key||"Field";w=A||`${S} is required`}if(f)return f.call(this,w,E,O)};const h=c.prototype.t;c.prototype.t=function(w,E){var O,F,D,C;if(typeof w=="string"&&w.trim().toLowerCase()==="required"){const b=(F=(O=this.component)==null?void 0:O.validate)==null?void 0:F.customMessage;return b||`${(E==null?void 0:E.field)||((D=this.component)==null?void 0:D.errorLabel)||((C=this.component)==null?void 0:C.label)||this.key||"Field"} is required`}return h?h.apply(this,arguments):w}}}console.log("[TF_SDK_DEBUG] 3. Finished Formio component patch check"),console.log("[TF_SDK_DEBUG] 4. Initializing formConfig");let s={noAlerts:!0,scroll:!1,language:window.FORMIO_LANGUAGE||"en",i18n:window.FORMIO_I18N};if(H(m,p),n=="form")s.readOnly=!1,s.flatten=!1,s.viewHtml=!1;else if(n=="pdf"||n=="print"){s.readOnly=!0,s.flatten=!0,s.renderMode="flat",s.viewHtml=!0;const c=document.querySelector(".progress-container");c&&(c.style.display="none")}else if(n=="readOnly"||p=="read"){s.readOnly=!0,s.flatten=!1,s.viewHtml=!1;const c=document.querySelector(".progress-container");c&&(c.style.display="none");const f=document.getElementById("sticky-footer");f&&window.CURRENT_VIEW!=="comments"&&(f.style.display="none")}else s.readOnly=!1,s.flatten=!1,s.viewHtml=!1;const g=document.getElementById("formio");if(console.log("[TF_SDK_DEBUG] 5. formElement found:",!!g),!g)throw console.error("[TF_SDK_DEBUG] formElement is missing!"),new Error("DOM Element #formio not found");logger.info("[TF_SDK:298] \u2705 Creating Formio form...",e),console.log("[TF_SDK_DEBUG] 6. Calling Formio.createForm");try{u=await Formio.createForm(g,e,s),console.log("[TF_SDK_DEBUG] 7. Formio.createForm resolved successfully")}catch(c){throw console.error("[TF_SDK_DEBUG] ERROR in Formio.createForm:",c?c.message:"Unknown error",c?c.stack:""),c}let d=!1;if(u.on("change",()=>{if(!d){if(!k)try{k=JSON.parse(JSON.stringify(u.getValue().data))}catch(c){k=u.getValue().data}d=!0}}),document.dispatchEvent(new CustomEvent("LessRenderingComplete")),window.formObj=u,window.FORMIO_I18N&&Object.keys(window.FORMIO_I18N).length>0){const c=document.getElementById("languageSubMenu"),f=document.getElementById("languageMainOption"),h=document.getElementById("languageDivider");if(c&&f){c.innerHTML="";let w=Object.keys(window.FORMIO_I18N).filter(F=>typeof window.FORMIO_I18N[F]=="object"&&window.FORMIO_I18N[F]!==null);const E=window.FORMIO_LANGUAGE||"en";!w.includes(E)&&typeof window.FORMIO_I18N[E]=="object"&&w.unshift(E);let O=null;try{window.Intl&&typeof Intl.DisplayNames=="function"&&(O=new Intl.DisplayNames(["en"],{type:"language"}))}catch(F){logger.warn("Intl.DisplayNames not supported",F)}w.forEach(F=>{const D=document.createElement("div");D.className=f.className,D.style.cursor="pointer",D.style.padding="0.5rem 1rem",D.style.borderTop="none";let C=F.toUpperCase();try{C=O.of(F)||C}catch(A){}let b=F===E?'<i class="bi bi-check2 text-primary" style="margin-right: 8px;"></i>':'<i class="bi bi-check2" style="margin-right: 8px; visibility: hidden;"></i>';f.innerHTML.includes("icon chevron")&&(b=F===E?'<i class="icon check" style="margin-right: 8px;"></i>':'<i class="icon check" style="margin-right: 8px; visibility: hidden;"></i>'),D.innerHTML=`${b}${C}`,D.onclick=function(A){A.stopPropagation(),window.changeFormLanguage&&(window.changeFormLanguage(F),window.FORMIO_LANGUAGE=F);const S=c.children;for(let N=0;N<S.length;N++){const _=S[N].querySelector("i");_&&(w[N]===F?(_.style.visibility="visible",_.className.includes("bi")&&_.classList.add("text-primary")):(_.style.visibility="hidden",_.className.includes("bi")&&_.classList.remove("text-primary")))}window.toggleLanguageSubMenu&&window.toggleLanguageSubMenu(),window.showToast&&window.showToast(`Language set to ${C}`,"success")},c.appendChild(D)}),w.length>1?(f.style.display=f.className.includes("d-flex")?"flex":"block",h&&(h.style.display="block")):(f.style.display="none",h&&(h.style.display="none"))}}else{const c=document.getElementById("languageMainOption"),f=document.getElementById("languageDivider");c&&(c.style.display="none"),f&&(f.style.display="none")}if(!u){logger.error("[TF_SDK:299] \u274C Form not initialized.");return}const a=()=>{['button[type="submit"]',".formio-component-submit"].forEach(h=>{u.element.querySelectorAll(h).forEach(E=>{E.style.display="none"})}),u.element.querySelectorAll('input:not([type="file"]), textarea').forEach(h=>{h.getAttribute("autocomplete")!=="new-password"&&(h.setAttribute("autocomplete","new-password"),h.setAttribute("data-lpignore","true"),h.setAttribute("spellcheck","false"))})};a(),u.on("render",a),Q(m,p),u.formReady.then(()=>{if(logger.info("[TF_SDK:300] \u2705 formReady.then() triggered"),typeof window.initializeWizardLogic=="function"&&window.initializeWizardLogic(u,m,p),t?(logger.info("[TF_SDK:301] \u2705 Previous form data found:",t),u.submission={data:typeof t=="string"?JSON.parse(t):t},logger.info("[TF_SDK:302] \u2705 Previous submission data applied")):logger.info("[TF_SDK:303] \u2705 No previous form data found"),logger.info("[TF_SDK:304] \u2705 Calculating initial progress..."),executeProgressCalculation(m,p),logger.info("[TF_SDK:305] \u2705 Progress calculation completed"),n=="readOnly"){logger.info("[TF_SDK:306] \u2705 ReadOnly mode detected");const w=document.querySelectorAll(".formio-component-submit");logger.info(`[TF_SDK:307] \u2705 Found ${w.length} submit components`),w.forEach((E,O)=>{E.style.display="none",logger.info(`[TF_SDK:308] \u2705 Hidden submit component ${O+1}`)})}else logger.info("[TF_SDK:309] \u2705 Editable mode detected");logger.info("[TF_SDK:310] \u2705 Sending FORM_RENDER callback..."),sendEventCallback({type:FORM_EVENTS.FORM_RENDER,message:"Success: Form rendered successfully.",data:{submissionData:t,formTemplate:e}}),logger.info("[TF_SDK:311] \u2705 FORM_RENDER callback sent");const c=document.getElementById("sdk-form-loader");c?(logger.info("[TF_SDK:312] \u2705 Loader found, hiding..."),c.classList.add("hidden"),logger.info("[TF_SDK:313] \u2705 Loader hidden")):logger.warn("[TF_SDK:314] \u2705 Loader element not found"),document.querySelectorAll(".tf-form-loading").forEach(w=>w.classList.remove("tf-form-loading")),logger.info("[TF_SDK:315] \u2705 Dispatching FormRenderingComplete event...");let f=0;typeof window.getMaxTableWidth=="function"&&(f=window.getMaxTableWidth(document.getElementById("formio")||document.querySelector(".tf-embed-sdk")||document.body).maxWidth),sendEventCallback({type:FORM_EVENTS.FORM_LOADED,message:"Success: Form rendered complete.",data:{maxTableWidth:`${f}px`}}),document.dispatchEvent(new CustomEvent("FormRenderingComplete",{detail:{timestamp:new Date().toISOString(),status:"success",maxTableWidth:f}})),logger.info("[TF_SDK:316] \u2705 FormRenderingComplete event dispatched successfully");const h=document.querySelector('input[type="file"]');h?(h.setAttribute("accept","*/*"),logger.info("[TF_SDK:317] \u2705 File input found, accept=*/* applied")):logger.info("[TF_SDK:318] \u2705 No file input found"),logger.info("[TF_SDK:319] \u2705 Full formReady process completed")}).catch(c=>{logger.error("[TF_SDK:320] \u274C formReady.then() failed:",c)})}catch(s){console.error("[TF_SDK:321] \u274C Error creating form (after retries):",s?s.message:"Unknown error",s?s.stack:""),logger.error("[TF_SDK:321] \u274C Error creating form (after retries):",s?s.message:"Unknown error",s?s.stack:"");const g=document.getElementById("sdk-form-loader");g&&g.classList.add("hidden"),document.querySelectorAll(".tf-form-loading").forEach(d=>d.classList.remove("tf-form-loading")),sendEventCallback({type:"ERROR",errorMessage:"ErrorCode : 005, Formio not rendered the forms",data:{reason:"Failed to render form after retries",technicalError:s}})}}}let I=null,V=null,B=null;function z(){if(B)return B;if(!u)return[];const e=[];function t(o,n=""){Array.isArray(o)&&o.forEach(r=>{var y;if(!r)return;const i=r.component||r;let l=n;if(["columns","panel","fieldset","well","table","tabs","content","htmlelement"].includes(i.type)||(l=n?`${n}.${i.key}`:i.key),["textfield","textarea","number","checkbox","radio","select","selectboxes","email","url","day","datetime","file","datamap","tree","survey","signature","datagrid","editgrid","container"].includes(i.type)&&((y=i.validate)!=null&&y.required)&&e.push({key:i.key,type:i.type,path:l,comp:i,instance:r}),Array.isArray(r.components)&&t(r.components,l),i.type==="form"){let s=l?`${l}.data`:"data";r.subForm&&Array.isArray(r.subForm.components)?t(r.subForm.components,s):Array.isArray(r.components)&&t(r.components,s)}Array.isArray(r.columns)&&r.columns.forEach(s=>{Array.isArray(s.components)&&t(s.components,l)})})}return t(u.components),B=e,e}window.executeProgressCalculation=function(e,t){if(!u)return;const o=u.data||{},n=JSON.stringify(o);if(!(u&&!!u.wizard)&&n===V)return;V=n;const i=z();let l=i.length,m=0;function p(d,a){if(Array.isArray(a)){if(!(["file","datagrid","editgrid","datamap","selectboxes"].includes(d.type)||d.multiple))return a.length>0&&a.every(h=>p(d,h));if(d.type==="file"&&a.length>0&&Array.isArray(a[0]))return a.every(h=>p(d,h))}switch(d.type){case"selectboxes":return Object.values(a||{}).some(Boolean);case"datamap":case"tree":return a&&Object.keys(a).length>0;case"survey":return d.questions&&Array.isArray(d.questions)?a&&Object.keys(a).length>=d.questions.length:a&&Object.keys(a).length>0;case"file":return Array.isArray(a)&&a.length>0;case"checkbox":return a===!0;case"editgrid":case"datagrid":return Array.isArray(a)&&a.length>0;case"signature":return!!a;default:return d.multiple?Array.isArray(a)&&a.length>0&&a.some(c=>c!=null&&c!==""):a!=null&&a!==""}}const y=[];i.forEach(d=>{let a=!0;d.instance&&(d.instance.visible===!1&&(a=!1),a&&typeof d.instance.checkCondition=="function"&&(d.instance.checkCondition(null,o)||(a=!1))),a&&(d.instance&&d.instance.parent&&d.instance.parent.visible===!1||y.push(d))}),l=y.length,m=0,console.log("[ProgressCalc Debug] --- Starting Progress Calculation ---"),console.log("[ProgressCalc Debug] formObj.data:",JSON.stringify(o)),console.log("[ProgressCalc Debug] Total mandatory fields in cache:",i.length),console.log("[ProgressCalc Debug] Active (visible) mandatory fields count:",y.length),y.forEach(({key:d,type:a,path:c,comp:f})=>{let h=P(o,c);const w=p(f,h);console.log(`[ProgressCalc Debug] Field [${d}] | Type: [${a}] | Path: [${c}] | Value:`,JSON.stringify(h),`| Filled: ${w}`),w&&m++});const s=l===0?100:Math.round(m/l*100);console.log(`[ProgressCalc Debug] Summary -> filledMandatory: ${m} / ${l} | completion: ${s}%`),console.log("[ProgressCalc Debug] --- Ending Progress Calculation ---"),logger.info("[TF_SDK:322] \u2705 Progress:",{mandatory:l,filledMandatory:m,completion:s+"%"}),T=s,M=s>=100,W(s,u.data,e,t),typeof window.updateWizardNav=="function"&&window.updateWizardNav(u);const g=document.getElementById("progress-bar");if(g){const d=g.querySelector(".progress"),a=g.querySelector(".badge");d.style.width=`${s}%`,a.textContent=`${s}%`;let c=s;s<=0?(c=.5,d.style.width=`${.5}%`,window.innerWidth>768||window.innerWidth>480?a.style.transform="translateX(2%)":a.style.transform="translateX(1%)"):s>=100?(g.classList.add("complete"),c=99.5,window.innerWidth>768||window.innerWidth>480,a.style.transform="translateX(-100%)"):(g.classList.remove("complete"),a.style.transform="translateX(-50%)"),a.style.left=`${c-.25}%`}};function P(e,t){if(e==null||!t)return;if(t.indexOf(".")===-1)return Array.isArray(e)?e.map(r=>r[t]):e[t];const o=t.split(".");let n=e;for(let r=0;r<o.length;r++){const i=o[r];if(n==null)return;if(Array.isArray(n)){const l=o.slice(r).join(".");return n.map(m=>P(m,l))}n=n[i]}return n}function K(e){if(!e)return!0;let t=e.getValue?e.getValue():e.dataValue;return t==null||t===""||Array.isArray(t)&&(t.length===0||!t.some(n=>!(n==null||n===""||typeof n=="object"&&Object.keys(n).length===0)))||typeof t=="object"&&!Array.isArray(t)&&(Object.keys(t).length===0||!Object.values(t).some(n=>n!=null&&n!==""&&n!==!1))?!0:e.isEmpty?e.isEmpty(t):!1}function J(e,t){var r,i,l,m,p,y;if(!e||!t)return null;if(t.component&&t.component.element)return t.component;const o=t.path||((r=t.context)==null?void 0:r.path)||((i=t.context)==null?void 0:i.hasPath);if(o){let s=typeof e.getComponent=="function"?e.getComponent(o):null;if(s&&s.element)return s;const g=String(o).replace(/\[(\d+)\]/g,".$1");if(s=typeof e.getComponent=="function"?e.getComponent(g):null,s&&s.element)return s;const d=String(o).replace(/\.(\d+)\./g,"[$1].");if(s=typeof e.getComponent=="function"?e.getComponent(d):null,s&&s.element)return s}const n=((m=(l=t.context)==null?void 0:l.component)==null?void 0:m.key)||((p=t.component)==null?void 0:p.key)||(typeof((y=t.context)==null?void 0:y.component)=="string"?t.context.component:null);if(n&&typeof e.getComponent=="function"){const s=e.getComponent(n);if(s&&s.element)return s}return null}function x(e){if(!e||!e.element)return;e.error=null,typeof e.setCustomValidity=="function"&&e.setCustomValidity(""),e.element.classList.remove("has-error","formio-error-wrapper","is-invalid"),e.element.querySelectorAll(".choices__inner, .ui.selection.dropdown, .is-invalid").forEach(n=>{n.closest(".formio-component")===e.element&&n.classList.remove("is-invalid")}),e.element.querySelectorAll(".formio-errors, .invalid-feedback, [ref='messageContainer']").forEach(n=>{n.closest(".formio-component")===e.element&&(n.innerHTML="",n.style.display="none")})}function X(e){!e||typeof e.everyComponent!="function"||e.everyComponent(t=>{var l;if(!t||!t.element)return;const o=((l=t.component)==null?void 0:l.type)||t.type;if(["datagrid","editgrid","container","panel","columns","fieldset","well","tabs","form"].includes(o))return;const r=t.element.classList.contains("has-error")||t.element.classList.contains("formio-error-wrapper"),i=Array.from(t.element.querySelectorAll(".formio-errors, .invalid-feedback")).some(m=>m.style.display!=="none"&&m.innerHTML.trim()!==""&&m.closest(".formio-component")===t.element);(r||i)&&!K(t)&&x(t)})}function Y(e,t){var m,p,y,s;if(!e||!e.element)return;e.element.classList.add("has-error","formio-error-wrapper");const o=e.element.querySelector(".choices__inner, .ui.selection.dropdown");o&&o.closest(".formio-component")===e.element&&o.classList.add("is-invalid");const n=t.message||((p=(m=t.context)==null?void 0:m.component)!=null&&p.label?`${t.context.component.label} is required`:`${((y=e.component)==null?void 0:y.label)||e.key} is required`),i=`e-${e.id||((s=e.component)==null?void 0:s.id)||e.key}-${e.key}`;let l=Array.from(e.element.querySelectorAll(".formio-errors, [ref='messageContainer']")).find(g=>g.closest(".formio-component")===e.element);l?(l.setAttribute("ref","messageContainer"),l.classList.contains("invalid-feedback")||l.classList.add("invalid-feedback")):(l=document.createElement("div"),l.setAttribute("ref","messageContainer"),l.className="formio-errors invalid-feedback",e.element.appendChild(l)),l.innerHTML=`<div id="${i}" class="form-text error">${n}</div>`,l.style.display="block"}function Q(e,t){u&&u.on("change",o=>{var n,r;((r=(n=o.changed)==null?void 0:n.component)==null?void 0:r.type)==="datetime"&&document.activeElement.blur(),X(u),I&&clearTimeout(I),B=null,I=setTimeout(()=>{executeProgressCalculation(e,t)},300)})}function q(e,t=[]){let o={};if(!t||t.length===0||!e)return o;let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch(i){}const r=i=>{if(!(!i||typeof i!="object"))if(Array.isArray(i))i.forEach(r);else for(const l in i)t.includes(l)?o[l]?Array.isArray(o[l])&&Array.isArray(i[l])&&(o[l]=o[l].concat(i[l])):o[l]=i[l]:typeof i[l]=="object"&&r(i[l])};return r(n),o}function R(e,t=[]){if(!e||typeof e!="object")return e;const o=Array.isArray(e)?[...e]:{...e};for(const n in o){const r=o[n];Array.isArray(r)?t.length>0&&t.includes(n)?o[n]=r.map(i=>i&&typeof i=="object"&&(i.uid||i.id)?i.uid||i.id:i):r.length>0&&r.every(i=>i&&typeof i=="object"&&i.storage==="SmartStorage")?o[n]=r.map(i=>i.id||i.uid||i):o[n]=r.map(i=>typeof i=="object"&&i!==null?R(i,t):i):r&&typeof r=="object"&&(o[n]=R(r,t))}return o}function $(){var r,i;if(!u)return;const e=u.getValue(),t=R(e,v),o=q(e.data,v);if(!(((r=window.__unviredFormsOptions)==null?void 0:r.requireCompleteForm)!==!1&&((i=window.__unviredFormsOptions)==null?void 0:i.requireCompleteForm)!=="false")){sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully (Validation Bypassed).",data:{formData:t,completeFlag:M,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:t,attachmentsData:o}});return}u.errors=[],u.submit().then(l=>{sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully.",data:{formData:t,completeFlag:M,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:l,attachmentsData:o}})}).catch(l=>{let m=!1,p=[],y=[];if(u&&Array.isArray(u.errors)&&u.errors.length>0&&(y=y.concat(u.errors)),Array.isArray(l)?y=y.concat(l):l&&Array.isArray(l.errors)?y=y.concat(l.errors):l&&Array.isArray(l.details)?y=y.concat(l.details):l&&typeof l=="object"&&(l.message||l.context)&&y.push(l),y.length>0?y.forEach(g=>{const d=J(u,g);d&&d.element?K(d)?(m=!0,p.push(g),Y(d,g)):x(d):(m=!0,p.push(g))}):m=!0,!m){console.warn("[TurboForms] All reported errors were resolved/hallucinated. Forcing success submit."),sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully.",data:{formData:t,completeFlag:M,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:t,attachmentsData:o}});return}logger.error("Form submit errors:",p);let s="Please fill in all required fields.";p.length===1&&p[0].message&&(s=p[0].message),showDynamicModal("Error",[{label:"OK"}],s),sendEventCallback({type:FORM_EVENTS.SUBMIT_ERROR,errorMessage:"ErrorCode : 006, Formio not submit the form",data:{reason:"Form submission failed",formData:t,completeFlag:M,completionPercentage:T,technicalError:p.length>0?p:l}})})}function U(){I=null,V=null,B=null}async function Z(){if(!u){logger.error("[TF_SDK:323] \u274C Form object not initialized");return}let e=u.getValue();window.FORM_SUB_TEMP=e;const t=window.FORM_TEMPLATE||{display:"form",type:"form",components:[]};try{typeof window.loadCommentsform=="function"?(await window.loadCommentsform(t,window.FORM_USER_DATA,window.FORM_COMMENTS_DATA,window.FORM_VOB_ARR,window.FORM_USERS_LIST||[]),showCommentsView()):logger.error("[TF_SDK:324] \u274C loadCommentsform is not a function")}catch(o){logger.error("[TF_SDK:325] \u274C Error while loading comments:",o)}}function j(){if(!u)return;const e=u.getValue().data;if(!Object.values(e||{}).some(o=>o!=null&&o!==""&&o!==!1&&!(Array.isArray(o)&&o.length===0)&&!(typeof o=="object"&&!Array.isArray(o)&&Object.keys(o).length===0))){showDynamicModal("Attention",[{label:"OK"}],"Please fill at least one field before saving.");return}showDynamicModal("Do you want to save the data?",[{label:"Yes",callback:()=>{const o=u.getValue(),n=R(o),r=q(o.data,v);sendEventCallback({type:FORM_EVENTS.SAVE,message:"Success: Data saved successfully.",data:{commentsData:FORM_COMMENTS_DATA,formData:n,completeFlag:M,completionPercentage:T,attachmentsData:r}})}},{label:"No",callback:()=>{}}])}function ee(){if(u&&u.options&&u.options.readOnly){L();return}let e;try{e=u?u.getValue().data:null}catch(o){e=null}JSON.stringify(e)===JSON.stringify(k)?L():showDynamicModal("Unsaved Form Data",[{label:"Discard",callback:L},{label:"Save",callback:j}],"Discard your changes or save them before leaving?")}function te(e,t,o){let n=new CustomEvent("capureImageData",{detail:{imageData:e,controlId:t,fileName:o}});document.dispatchEvent(n)}window.checkMoreButtonVisibility=function(){const e=document.getElementById("unvired-more-btn");if(!e)return;const t=window.__unviredFormsOptions||{};if(t.showMoreButton===!1){e.style.display="none";return}const o=document.getElementById("completeOption"),n=document.getElementById("saveOption"),r=document.getElementById("documentsOption"),i=document.getElementById("comments-item"),l=document.getElementById("help-item"),m=(y,s)=>y?s&&t[s]===!0?!0:y.style.display!=="none":!1;m(o)||m(n)||m(r)||t.showComments===!0||t.showHelp===!0?e.style.display="":e.style.display="none"},window.checkMoreButtonVisibility(),window.loadComments=Z,window.loadTRform=G,window.FormOnSave=j,window.FormOnBack=ee,window.setImageData=te,window.FormOnComplete=$,window.FormOnNext=function(){u&&typeof u.nextPage=="function"&&u.nextPage().then(()=>{typeof window.updateWizardNav=="function"&&window.updateWizardNav(u)})},window.FormOnPrevious=function(){u&&typeof u.prevPage=="function"&&u.prevPage().then(()=>{typeof window.updateWizardNav=="function"&&window.updateWizardNav(u)})},window.formOnCompleteFunction=$,window.resetFormCache=U,window.resetInitialFormData=function(){k=null},document.dispatchEvent(new CustomEvent("LoadRNformReady"))})();</script>
|
|
38464
|
+
<script>(function(){var d=null,k=null,ne;let v=[],T=0,_=!1;function L(){sendEventCallback({type:FORM_EVENTS.BACK_NAVIGATION,message:"Back navigation triggered.",data:{}})}function W(e,t){var c,f;const o=document.getElementById("saveBtn"),n=document.getElementById("submitBtn"),r=document.getElementById("prevBtn"),i=document.getElementById("nextBtn"),l=document.getElementById("completeOption"),m=document.getElementById("saveOption"),p=document.getElementById("completeDivider"),y=document.getElementById("saveDivider");if(!o||!n)return;const s=e===!0||e==="true",g=e===!1||e==="false",u=String(t||"").toLowerCase(),a=(h,w,E)=>{h&&(E?h.style.setProperty("display","flex","important"):h.style.setProperty("display","none","important")),w&&(E?w.style.setProperty("display","block","important"):w.style.setProperty("display","none","important"))};a(l,p,!1),a(m,y,!1),u==="read"?(o.style.display="none",n.style.display="none"):g&&u==="writemultiple"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',n.disabled=!0,a(l,p,!1),a(m,y,!1)):g&&u==="writesingle"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Submit',n.disabled=!0):s&&u==="writemultiple"?((c=window.__unviredFormsOptions)==null?void 0:c.showCompleteAlways)===!0||((f=window.__unviredFormsOptions)==null?void 0:f.showCompleteAlways)==="true"?(o.style.display="",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',o.disabled=!0,n.disabled=!0,a(l,p,!1),a(m,y,!1)):(o.style.display="",n.style.display="none",o.disabled=!0,a(l,p,!1)):s&&u==="writesingle"?(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Complete',n.disabled=!0,a(m,y,!0)):(o.style.display="none",n.style.display="",n.innerHTML='<i class="bi bi-check2-circle"></i> Submit',n.disabled=!0),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()}function U(e,t,o,n){var C,F,O,A;const r=document.getElementById("saveBtn"),i=document.getElementById("submitBtn"),l=document.getElementById("prevBtn"),m=document.getElementById("nextBtn");if(!r||!i)return;const p=o===!0||o==="true",y=o===!1||o==="false",s=String(n||"").toLowerCase(),g=document.getElementById("completeOption"),u=document.getElementById("saveOption"),a=document.getElementById("completeDivider"),c=document.getElementById("saveDivider"),f=(b,S,M)=>{b&&(M?b.style.setProperty("display","flex","important"):b.style.setProperty("display","none","important")),S&&(M?S.style.setProperty("display","block","important"):S.style.setProperty("display","none","important"))},h=Object.values(t||{}).some(b=>b!=null&&b!==""&&b!==!1&&!(Array.isArray(b)&&b.length===0)&&!(typeof b=="object"&&!Array.isArray(b)&&Object.keys(b).length===0)),w=e>=100,E=((C=window.__unviredFormsOptions)==null?void 0:C.requireCompleteForm)!==!1&&((F=window.__unviredFormsOptions)==null?void 0:F.requireCompleteForm)!=="false";if(s==="read"){r.style.display="none",i.style.display="none";return}if(p&&s==="writesingle"){r.style.display="none",i.style.display="",i.disabled=!1,f(u,c,!0),f(g,a,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(p&&s==="writemultiple"){((O=window.__unviredFormsOptions)==null?void 0:O.showCompleteAlways)===!0||((A=window.__unviredFormsOptions)==null?void 0:A.showCompleteAlways)==="true"?(r.style.display="",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',r.disabled=!h,i.disabled=!1,f(g,a,!1),f(u,c,!1)):w?(r.style.display="none",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',i.disabled=!1,f(u,c,!0),f(g,a,!1)):h?(r.style.display="",i.style.display="none",r.disabled=!1,f(g,a,!0),f(u,c,!1)):(r.style.display="",i.style.display="none",r.disabled=!0,f(g,a,!1),f(u,c,!1)),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(y&&s==="writemultiple"){r.style.display="none",i.style.display="",i.innerHTML='<i class="bi bi-check2-circle"></i> Complete',i.disabled=!1,f(g,a,!1),f(u,c,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}if(y&&s==="writesingle"){r.style.display="none",i.style.display="",i.disabled=!1,f(g,a,!1),f(u,c,!1),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();return}r.style.display="none",i.style.display="",i.disabled=!1,typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()}async function z(e,t,o,n,r,i,l,m,p,y){if(window.CURRENT_VIEW!=="comments"){if(H(),logger.info("[TF_SDK:296] \u2705 loadTRform() entered",{mode:n,permission:p,privateExternal:m,language:r}),v=y,typeof Formio=="undefined"){logger.error("[TF_SDK:297] \u274C Formio library not loaded"),sendEventCallback({type:"ERROR",errorMessage:"ErrorCode : 016, Formio library not loaded",data:{reason:"Formio library not loaded"}});return}try{if(logger.info("[TF_SDK:297] \u2705 Initializing loadTRform"),typeof Formio!="undefined"&&Formio.Components&&Formio.Components.components&&Formio.Components.components.component){const c=Formio.Components.components.component;if(!c._requiredFixApplied){c._requiredFixApplied=!0;const f=c.prototype.setCustomValidity;c.prototype.setCustomValidity=function(w,E,C){var F,O,A,b;if(typeof w=="string"&&(w.trim().toLowerCase()==="required"||w.includes("{{field}}"))){const S=(O=(F=this.component)==null?void 0:F.validate)==null?void 0:O.customMessage,M=((A=this.component)==null?void 0:A.errorLabel)||((b=this.component)==null?void 0:b.label)||this.key||"Field";w=S||`${M} is required`}if(f)return f.call(this,w,E,C)};const h=c.prototype.t;c.prototype.t=function(w,E){var C,F,O,A;if(typeof w=="string"&&w.trim().toLowerCase()==="required"){const b=(F=(C=this.component)==null?void 0:C.validate)==null?void 0:F.customMessage;return b||`${(E==null?void 0:E.field)||((O=this.component)==null?void 0:O.errorLabel)||((A=this.component)==null?void 0:A.label)||this.key||"Field"} is required`}return h?h.apply(this,arguments):w}}}let s={noAlerts:!0,scroll:!1,language:window.FORMIO_LANGUAGE||"en",i18n:window.FORMIO_I18N};if(W(m,p),n=="form")s.readOnly=!1,s.flatten=!1,s.viewHtml=!1;else if(n=="pdf"||n=="print"){s.readOnly=!0,s.flatten=!0,s.renderMode="flat",s.viewHtml=!0;const c=document.querySelector(".progress-container");c&&(c.style.display="none")}else if(n=="readOnly"||p=="read"){s.readOnly=!0,s.flatten=!1,s.viewHtml=!1;const c=document.querySelector(".progress-container");c&&(c.style.display="none");const f=document.getElementById("sticky-footer");f&&window.CURRENT_VIEW!=="comments"&&(f.style.display="none")}else s.readOnly=!1,s.flatten=!1,s.viewHtml=!1;const g=document.getElementById("formio");if(!g)throw new Error("DOM Element #formio not found");logger.info("[TF_SDK:298] \u2705 Creating Formio form...",e);try{d=await Formio.createForm(g,e,s)}catch(c){throw logger.error("[TF_SDK:298-ERR] \u274C Error in Formio.createForm:",c),c}let u=!1;if(d.on("change",()=>{if(!u){if(!k)try{k=JSON.parse(JSON.stringify(d.getValue().data))}catch(c){k=d.getValue().data}u=!0}}),document.dispatchEvent(new CustomEvent("LessRenderingComplete")),window.formObj=d,window.FORMIO_I18N&&Object.keys(window.FORMIO_I18N).length>0){const c=document.getElementById("languageSubMenu"),f=document.getElementById("languageMainOption"),h=document.getElementById("languageDivider");if(c&&f){c.innerHTML="";let w=Object.keys(window.FORMIO_I18N).filter(F=>typeof window.FORMIO_I18N[F]=="object"&&window.FORMIO_I18N[F]!==null);const E=window.FORMIO_LANGUAGE||"en";!w.includes(E)&&typeof window.FORMIO_I18N[E]=="object"&&w.unshift(E);let C=null;try{window.Intl&&typeof Intl.DisplayNames=="function"&&(C=new Intl.DisplayNames(["en"],{type:"language"}))}catch(F){logger.warn("Intl.DisplayNames not supported",F)}w.forEach(F=>{const O=document.createElement("div");O.className=f.className,O.style.cursor="pointer",O.style.padding="0.5rem 1rem",O.style.borderTop="none";let A=F.toUpperCase();try{A=C.of(F)||A}catch(S){}let b=F===E?'<i class="bi bi-check2 text-primary" style="margin-right: 8px;"></i>':'<i class="bi bi-check2" style="margin-right: 8px; visibility: hidden;"></i>';f.innerHTML.includes("icon chevron")&&(b=F===E?'<i class="icon check" style="margin-right: 8px;"></i>':'<i class="icon check" style="margin-right: 8px; visibility: hidden;"></i>'),O.innerHTML=`${b}${A}`,O.onclick=function(S){S.stopPropagation(),window.changeFormLanguage&&(window.changeFormLanguage(F),window.FORMIO_LANGUAGE=F);const M=c.children;for(let N=0;N<M.length;N++){const D=M[N].querySelector("i");D&&(w[N]===F?(D.style.visibility="visible",D.className.includes("bi")&&D.classList.add("text-primary")):(D.style.visibility="hidden",D.className.includes("bi")&&D.classList.remove("text-primary")))}window.toggleLanguageSubMenu&&window.toggleLanguageSubMenu(),window.showToast&&window.showToast(`Language set to ${A}`,"success")},c.appendChild(O)}),w.length>1?(f.style.display=f.className.includes("d-flex")?"flex":"block",h&&(h.style.display="block")):(f.style.display="none",h&&(h.style.display="none"))}}else{const c=document.getElementById("languageMainOption"),f=document.getElementById("languageDivider");c&&(c.style.display="none"),f&&(f.style.display="none")}if(!d){logger.error("[TF_SDK:299] \u274C Form not initialized.");return}const a=()=>{['button[type="submit"]',".formio-component-submit"].forEach(h=>{d.element.querySelectorAll(h).forEach(E=>{E.style.display="none"})}),d.element.querySelectorAll('input:not([type="file"]), textarea').forEach(h=>{h.getAttribute("autocomplete")!=="new-password"&&(h.setAttribute("autocomplete","new-password"),h.setAttribute("data-lpignore","true"),h.setAttribute("spellcheck","false"))})};a(),d.on("render",a),Q(m,p),d.formReady.then(()=>{if(logger.info("[TF_SDK:300] \u2705 formReady.then() triggered"),typeof window.initializeWizardLogic=="function"&&window.initializeWizardLogic(d,m,p),t?(logger.info("[TF_SDK:301] \u2705 Previous form data found:",t),d.submission={data:typeof t=="string"?JSON.parse(t):t},logger.info("[TF_SDK:302] \u2705 Previous submission data applied")):logger.info("[TF_SDK:303] \u2705 No previous form data found"),logger.info("[TF_SDK:304] \u2705 Calculating initial progress..."),executeProgressCalculation(m,p),logger.info("[TF_SDK:305] \u2705 Progress calculation completed"),n=="readOnly"){logger.info("[TF_SDK:306] \u2705 ReadOnly mode detected");const w=document.querySelectorAll(".formio-component-submit");logger.info(`[TF_SDK:307] \u2705 Found ${w.length} submit components`),w.forEach((E,C)=>{E.style.display="none",logger.info(`[TF_SDK:308] \u2705 Hidden submit component ${C+1}`)})}else logger.info("[TF_SDK:309] \u2705 Editable mode detected");logger.info("[TF_SDK:310] \u2705 Sending FORM_RENDER callback..."),sendEventCallback({type:FORM_EVENTS.FORM_RENDER,message:"Success: Form rendered successfully.",data:{submissionData:t,formTemplate:e}}),logger.info("[TF_SDK:311] \u2705 FORM_RENDER callback sent");const c=document.getElementById("sdk-form-loader");c?(logger.info("[TF_SDK:312] \u2705 Loader found, hiding..."),c.classList.add("hidden"),logger.info("[TF_SDK:313] \u2705 Loader hidden")):logger.warn("[TF_SDK:314] \u2705 Loader element not found"),document.querySelectorAll(".tf-form-loading").forEach(w=>w.classList.remove("tf-form-loading")),logger.info("[TF_SDK:315] \u2705 Dispatching FormRenderingComplete event...");let f=0;typeof window.getMaxTableWidth=="function"&&(f=window.getMaxTableWidth(document.getElementById("formio")||document.querySelector(".tf-embed-sdk")||document.body).maxWidth),sendEventCallback({type:FORM_EVENTS.FORM_LOADED,message:"Success: Form rendered complete.",data:{maxTableWidth:`${f}px`}}),document.dispatchEvent(new CustomEvent("FormRenderingComplete",{detail:{timestamp:new Date().toISOString(),status:"success",maxTableWidth:f}})),logger.info("[TF_SDK:316] \u2705 FormRenderingComplete event dispatched successfully");const h=document.querySelector('input[type="file"]');h?(h.setAttribute("accept","*/*"),logger.info("[TF_SDK:317] \u2705 File input found, accept=*/* applied")):logger.info("[TF_SDK:318] \u2705 No file input found"),logger.info("[TF_SDK:319] \u2705 Full formReady process completed")}).catch(c=>{logger.error("[TF_SDK:320] \u274C formReady.then() failed:",c)})}catch(s){logger.error("[TF_SDK:321] \u274C Error creating form (after retries):",s?s.message:"Unknown error",s?s.stack:"");const g=document.getElementById("sdk-form-loader");g&&g.classList.add("hidden"),document.querySelectorAll(".tf-form-loading").forEach(u=>u.classList.remove("tf-form-loading")),sendEventCallback({type:"ERROR",errorMessage:"ErrorCode : 005, Formio not rendered the forms",data:{reason:"Failed to render form after retries",technicalError:s}})}}}let B=null,V=null,I=null;function G(){if(I)return I;if(!d)return[];const e=[];function t(o,n=""){Array.isArray(o)&&o.forEach(r=>{var y;if(!r)return;const i=r.component||r;let l=n;if(["columns","panel","fieldset","well","table","tabs","content","htmlelement"].includes(i.type)||(l=n?`${n}.${i.key}`:i.key),["textfield","textarea","number","checkbox","radio","select","selectboxes","email","url","day","datetime","file","datamap","tree","survey","signature","datagrid","editgrid","container"].includes(i.type)&&((y=i.validate)!=null&&y.required)&&e.push({key:i.key,type:i.type,path:l,comp:i,instance:r}),Array.isArray(r.components)&&t(r.components,l),i.type==="form"){let s=l?`${l}.data`:"data";r.subForm&&Array.isArray(r.subForm.components)?t(r.subForm.components,s):Array.isArray(r.components)&&t(r.components,s)}Array.isArray(r.columns)&&r.columns.forEach(s=>{Array.isArray(s.components)&&t(s.components,l)})})}return t(d.components),I=e,e}window.executeProgressCalculation=function(e,t){if(!d)return;const o=d.data||{},n=JSON.stringify(o);if(!(d&&!!d.wizard)&&n===V)return;V=n;const i=G();let l=i.length,m=0;function p(u,a){if(Array.isArray(a)){if(!(["file","datagrid","editgrid","datamap","selectboxes"].includes(u.type)||u.multiple))return a.length>0&&a.every(h=>p(u,h));if(u.type==="file"&&a.length>0&&Array.isArray(a[0]))return a.every(h=>p(u,h))}switch(u.type){case"selectboxes":return Object.values(a||{}).some(Boolean);case"datamap":case"tree":return a&&Object.keys(a).length>0;case"survey":return u.questions&&Array.isArray(u.questions)?a&&Object.keys(a).length>=u.questions.length:a&&Object.keys(a).length>0;case"file":return Array.isArray(a)&&a.length>0;case"checkbox":return a===!0;case"editgrid":case"datagrid":return Array.isArray(a)&&a.length>0;case"signature":return!!a;default:return u.multiple?Array.isArray(a)&&a.length>0&&a.some(c=>c!=null&&c!==""):a!=null&&a!==""}}const y=[];i.forEach(u=>{let a=!0;u.instance&&(u.instance.visible===!1&&(a=!1),a&&typeof u.instance.checkCondition=="function"&&(u.instance.checkCondition(null,o)||(a=!1))),a&&(u.instance&&u.instance.parent&&u.instance.parent.visible===!1||y.push(u))}),l=y.length,m=0,y.forEach(({key:u,type:a,path:c,comp:f})=>{let h=x(o,c);p(f,h)&&m++});const s=l===0?100:Math.round(m/l*100);logger.info("[TF_SDK:322] \u2705 Progress:",{mandatory:l,filledMandatory:m,completion:s+"%"}),T=s,_=s>=100,U(s,d.data,e,t),typeof window.updateWizardNav=="function"&&window.updateWizardNav(d);const g=document.getElementById("progress-bar");if(g){const u=g.querySelector(".progress"),a=g.querySelector(".badge");u.style.width=`${s}%`,a.textContent=`${s}%`;let c=s;s<=0?(c=.5,u.style.width=`${.5}%`,window.innerWidth>768||window.innerWidth>480?a.style.transform="translateX(2%)":a.style.transform="translateX(1%)"):s>=100?(g.classList.add("complete"),c=99.5,window.innerWidth>768||window.innerWidth>480,a.style.transform="translateX(-100%)"):(g.classList.remove("complete"),a.style.transform="translateX(-50%)"),a.style.left=`${c-.25}%`}};function x(e,t){if(e==null||!t)return;if(t.indexOf(".")===-1)return Array.isArray(e)?e.map(r=>r[t]):e[t];const o=t.split(".");let n=e;for(let r=0;r<o.length;r++){const i=o[r];if(n==null)return;if(Array.isArray(n)){const l=o.slice(r).join(".");return n.map(m=>x(m,l))}n=n[i]}return n}function q(e){if(!e)return!0;let t=e.getValue?e.getValue():e.dataValue;return t==null||t===""||Array.isArray(t)&&(t.length===0||!t.some(n=>!(n==null||n===""||typeof n=="object"&&Object.keys(n).length===0)))||typeof t=="object"&&!Array.isArray(t)&&(Object.keys(t).length===0||!Object.values(t).some(n=>n!=null&&n!==""&&n!==!1))?!0:e.isEmpty?e.isEmpty(t):!1}function J(e,t){var r,i,l,m,p,y;if(!e||!t)return null;if(t.component&&t.component.element)return t.component;const o=t.path||((r=t.context)==null?void 0:r.path)||((i=t.context)==null?void 0:i.hasPath);if(o){let s=typeof e.getComponent=="function"?e.getComponent(o):null;if(s&&s.element)return s;const g=String(o).replace(/\[(\d+)\]/g,".$1");if(s=typeof e.getComponent=="function"?e.getComponent(g):null,s&&s.element)return s;const u=String(o).replace(/\.(\d+)\./g,"[$1].");if(s=typeof e.getComponent=="function"?e.getComponent(u):null,s&&s.element)return s}const n=((m=(l=t.context)==null?void 0:l.component)==null?void 0:m.key)||((p=t.component)==null?void 0:p.key)||(typeof((y=t.context)==null?void 0:y.component)=="string"?t.context.component:null);if(n&&typeof e.getComponent=="function"){const s=e.getComponent(n);if(s&&s.element)return s}return null}function P(e){if(!e||!e.element)return;e.error=null,typeof e.setCustomValidity=="function"&&e.setCustomValidity(""),e.element.classList.remove("has-error","formio-error-wrapper","is-invalid"),e.element.querySelectorAll(".choices__inner, .ui.selection.dropdown, .is-invalid").forEach(n=>{n.closest(".formio-component")===e.element&&n.classList.remove("is-invalid")}),e.element.querySelectorAll(".formio-errors, .invalid-feedback, [ref='messageContainer']").forEach(n=>{n.closest(".formio-component")===e.element&&(n.innerHTML="",n.style.display="none")})}function X(e){!e||typeof e.everyComponent!="function"||e.everyComponent(t=>{var l;if(!t||!t.element)return;const o=((l=t.component)==null?void 0:l.type)||t.type;if(["datagrid","editgrid","container","panel","columns","fieldset","well","tabs","form"].includes(o))return;const r=t.element.classList.contains("has-error")||t.element.classList.contains("formio-error-wrapper"),i=Array.from(t.element.querySelectorAll(".formio-errors, .invalid-feedback")).some(m=>m.style.display!=="none"&&m.innerHTML.trim()!==""&&m.closest(".formio-component")===t.element);(r||i)&&!q(t)&&P(t)})}function Y(e,t){var m,p,y,s;if(!e||!e.element)return;e.element.classList.add("has-error","formio-error-wrapper");const o=e.element.querySelector(".choices__inner, .ui.selection.dropdown");o&&o.closest(".formio-component")===e.element&&o.classList.add("is-invalid");const n=t.message||((p=(m=t.context)==null?void 0:m.component)!=null&&p.label?`${t.context.component.label} is required`:`${((y=e.component)==null?void 0:y.label)||e.key} is required`),i=`e-${e.id||((s=e.component)==null?void 0:s.id)||e.key}-${e.key}`;let l=Array.from(e.element.querySelectorAll(".formio-errors, [ref='messageContainer']")).find(g=>g.closest(".formio-component")===e.element);l?(l.setAttribute("ref","messageContainer"),l.classList.contains("invalid-feedback")||l.classList.add("invalid-feedback")):(l=document.createElement("div"),l.setAttribute("ref","messageContainer"),l.className="formio-errors invalid-feedback",e.element.appendChild(l)),l.innerHTML=`<div id="${i}" class="form-text error">${n}</div>`,l.style.display="block"}function Q(e,t){d&&d.on("change",o=>{var n,r;((r=(n=o.changed)==null?void 0:n.component)==null?void 0:r.type)==="datetime"&&document.activeElement.blur(),X(d),B&&clearTimeout(B),I=null,B=setTimeout(()=>{executeProgressCalculation(e,t)},300)})}function K(e,t=[]){let o={};if(!t||t.length===0||!e)return o;let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch(i){}const r=i=>{if(!(!i||typeof i!="object"))if(Array.isArray(i))i.forEach(r);else for(const l in i)t.includes(l)?o[l]?Array.isArray(o[l])&&Array.isArray(i[l])&&(o[l]=o[l].concat(i[l])):o[l]=i[l]:typeof i[l]=="object"&&r(i[l])};return r(n),o}function R(e,t=[]){if(!e||typeof e!="object")return e;const o=Array.isArray(e)?[...e]:{...e};for(const n in o){const r=o[n];Array.isArray(r)?t.length>0&&t.includes(n)?o[n]=r.map(i=>i&&typeof i=="object"&&(i.uid||i.id)?i.uid||i.id:i):r.length>0&&r.every(i=>i&&typeof i=="object"&&i.storage==="SmartStorage")?o[n]=r.map(i=>i.id||i.uid||i):o[n]=r.map(i=>typeof i=="object"&&i!==null?R(i,t):i):r&&typeof r=="object"&&(o[n]=R(r,t))}return o}function j(){var r,i;if(!d)return;const e=d.getValue(),t=R(e,v),o=K(e.data,v);if(!(((r=window.__unviredFormsOptions)==null?void 0:r.requireCompleteForm)!==!1&&((i=window.__unviredFormsOptions)==null?void 0:i.requireCompleteForm)!=="false")){sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully (Validation Bypassed).",data:{formData:t,completeFlag:_,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:t,attachmentsData:o}});return}d.errors=[],d.submit().then(l=>{sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully.",data:{formData:t,completeFlag:_,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:l,attachmentsData:o}})}).catch(l=>{let m=!1,p=[],y=[];if(d&&Array.isArray(d.errors)&&d.errors.length>0&&(y=y.concat(d.errors)),Array.isArray(l)?y=y.concat(l):l&&Array.isArray(l.errors)?y=y.concat(l.errors):l&&Array.isArray(l.details)?y=y.concat(l.details):l&&typeof l=="object"&&(l.message||l.context)&&y.push(l),y.length>0?y.forEach(g=>{const u=J(d,g);u&&u.element?q(u)?(m=!0,p.push(g),Y(u,g)):P(u):(m=!0,p.push(g))}):m=!0,!m){logger.warn("[TF_SDK:321a] \u26A0\uFE0F All reported errors were resolved/hallucinated. Forcing success submit."),sendEventCallback({type:FORM_EVENTS.SUBMIT,message:"Success: Form submitted successfully.",data:{formData:t,completeFlag:_,completionPercentage:T,commentsData:FORM_COMMENTS_DATA,result:t,attachmentsData:o}});return}logger.error("Form submit errors:",p);let s="Please fill in all required fields.";p.length===1&&p[0].message&&(s=p[0].message),showDynamicModal("Error",[{label:"OK"}],s),sendEventCallback({type:FORM_EVENTS.SUBMIT_ERROR,errorMessage:"ErrorCode : 006, Formio not submit the form",data:{reason:"Form submission failed",formData:t,completeFlag:_,completionPercentage:T,technicalError:p.length>0?p:l}})})}function H(){B=null,V=null,I=null}async function Z(){if(!d){logger.error("[TF_SDK:323] \u274C Form object not initialized");return}let e=d.getValue();window.FORM_SUB_TEMP=e;const t=window.FORM_TEMPLATE||{display:"form",type:"form",components:[]};try{typeof window.loadCommentsform=="function"?(await window.loadCommentsform(t,window.FORM_USER_DATA,window.FORM_COMMENTS_DATA,window.FORM_VOB_ARR,window.FORM_USERS_LIST||[]),showCommentsView()):logger.error("[TF_SDK:324] \u274C loadCommentsform is not a function")}catch(o){logger.error("[TF_SDK:325] \u274C Error while loading comments:",o)}}function $(){if(!d)return;const e=d.getValue().data;if(!Object.values(e||{}).some(o=>o!=null&&o!==""&&o!==!1&&!(Array.isArray(o)&&o.length===0)&&!(typeof o=="object"&&!Array.isArray(o)&&Object.keys(o).length===0))){showDynamicModal("Attention",[{label:"OK"}],"Please fill at least one field before saving.");return}showDynamicModal("Do you want to save the data?",[{label:"Yes",callback:()=>{const o=d.getValue(),n=R(o),r=K(o.data,v);sendEventCallback({type:FORM_EVENTS.SAVE,message:"Success: Data saved successfully.",data:{commentsData:FORM_COMMENTS_DATA,formData:n,completeFlag:_,completionPercentage:T,attachmentsData:r}})}},{label:"No",callback:()=>{}}])}function ee(){if(d&&d.options&&d.options.readOnly){L();return}let e;try{e=d?d.getValue().data:null}catch(o){e=null}JSON.stringify(e)===JSON.stringify(k)?L():showDynamicModal("Unsaved Form Data",[{label:"Discard",callback:L},{label:"Save",callback:$}],"Discard your changes or save them before leaving?")}function te(e,t,o){let n=new CustomEvent("capureImageData",{detail:{imageData:e,controlId:t,fileName:o}});document.dispatchEvent(n)}window.checkMoreButtonVisibility=function(){const e=document.getElementById("unvired-more-btn");if(!e)return;const t=window.__unviredFormsOptions||{};if(t.showMoreButton===!1){e.style.display="none";return}const o=document.getElementById("completeOption"),n=document.getElementById("saveOption"),r=document.getElementById("documentsOption"),i=document.getElementById("comments-item"),l=document.getElementById("help-item"),m=(y,s)=>y?s&&t[s]===!0?!0:y.style.display!=="none":!1;m(o)||m(n)||m(r)||t.showComments===!0||t.showHelp===!0?e.style.display="":e.style.display="none"},window.checkMoreButtonVisibility(),window.loadComments=Z,window.loadTRform=z,window.FormOnSave=$,window.FormOnBack=ee,window.setImageData=te,window.FormOnComplete=j,window.FormOnNext=function(){d&&typeof d.nextPage=="function"&&d.nextPage().then(()=>{typeof window.updateWizardNav=="function"&&window.updateWizardNav(d)})},window.FormOnPrevious=function(){d&&typeof d.prevPage=="function"&&d.prevPage().then(()=>{typeof window.updateWizardNav=="function"&&window.updateWizardNav(d)})},window.formOnCompleteFunction=j,window.resetFormCache=H,window.resetInitialFormData=function(){k=null},document.dispatchEvent(new CustomEvent("LoadRNformReady"))})();</script>
|
|
38465
38465
|
<script>(function(){function l(e){if(!e||([".formio-component-wizard_nav",".btn-wizard-nav-next",".btn-wizard-nav-previous",".btn-wizard-nav-cancel",".btn-wizard-nav-submit"].forEach(n=>{e.element.querySelectorAll(n).forEach(t=>{t.style.display="none"})}),typeof e.eachComponent=="function"&&e.eachComponent(n=>{if(n.type==="button"){const o=(n.component.action||"").toLowerCase(),t=(n.component.label||"").toLowerCase();(o==="next"||o==="previous"||o==="cancel"||t==="next"||t==="previous"||t==="cancel")&&(n.visible=!1,n.element&&(n.element.style.display="none"))}}),!e.wizard))return;const i=document.getElementById("prevBtn"),d=document.getElementById("nextBtn"),u=document.getElementById("submitBtn"),y=document.getElementById("saveBtn"),a=e.page||0,c=e.pages&&e.pages.length||0,g=a>=c-1;if(logger.info(`[TF_SDK:326] \u2705 Page: ${a+1}/${c}, isLastPage: ${g}`),i&&(i.style.display=a>0?"inline-block":"none"),d&&(d.style.display=a<c-1?"inline-block":"none"),g)logger.info("[TF_SDK:328] \u2705 Last page: Allowing normal button logic to take over"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility();else{logger.info("[TF_SDK:327] \u2705 Intermediate page: Hiding save/complete actions"),u&&(u.style.display="none"),y&&(y.style.display="none");const n=document.getElementById("completeOption"),o=document.getElementById("saveOption"),t=document.getElementById("completeDivider"),p=document.getElementById("saveDivider");n&&(n.style.display="none"),o&&(o.style.display="none"),t&&(t.style.display="none"),p&&(p.style.display="none");const r=document.getElementById("quickCompleteBtn"),w=document.getElementById("quickSaveBtn");r&&(r.style.display="none"),w&&(w.style.display="none"),typeof window.checkMoreButtonVisibility=="function"&&window.checkMoreButtonVisibility()}}function f(e,s,i){e&&(e.wizard&&(e.on("nextPage",()=>{l(e),typeof window.executeProgressCalculation=="function"&&window.executeProgressCalculation(s,i)}),e.on("prevPage",()=>{l(e),typeof window.executeProgressCalculation=="function"&&window.executeProgressCalculation(s,i)})),e.on("render",()=>{l(e)}))}window.updateWizardNav=l,window.initializeWizardLogic=function(e,s,i){logger.info("[TF_SDK:329] \u2705 Initializing wizard-specific logic..."),f(e,s,i),e.on("change",()=>{l(e)}),l(e)}})();</script>
|
|
38466
38466
|
<script>(function(){async function d(o,e,n,w,i=[]){var a,c;logger.info("[TF_SDK:279] \u2705 loadCommentsform() called",{users:i==null?void 0:i.length,commentsData:n==null?void 0:n.length});const r=document.getElementById("formio-cmt");if(!r)return logger.error("[TF_SDK:280] \u274C formio-cmt container not found");if(window.commentsResponse){try{(c=(a=window.commentsResponse).destroy)==null||c.call(a)}catch(t){logger.warn("[TF_SDK:281] \u26A0\uFE0F Could not destroy previous Recogito instance",t)}window.commentsResponse=null}if(window.commentsFormObj&&window.commentsFormObj.destroy)try{await window.commentsFormObj.destroy()}catch(t){logger.warn("[TF_SDK:282] \u26A0\uFE0F Could not destroy previous comments Formio form",t)}r.innerHTML="",logger.info("[TF_SDK:283] \u2705 Creating Formio form in read-only mode for comments..."),window.commentsFormObj=await Formio.createForm(r,o,{renderMode:"html",flatten:!0,readOnly:!0,language:localStorage.getItem("language")||"en"}),window.commentsFormObj.nosubmit=!0,window.commentsFormObj.on("change",()=>{}),logger.info("[TF_SDK:284] \u2705 Initializing Recogito annotation overlay..."),window.commentsResponse=Recogito.init({content:document.getElementById("formio-cmt"),locale:localStorage.getItem("language"),widgets:[{widget:recogito.CommentsMention,userSuggestions:i,editable:"MINE_ONLY"},{widget:"TAG",vocabulary:w}],mode:"html"}),window.commentsResponse.setAuthInfo({id:e.email,displayName:e.firstName||e.email}),window.commentsResponse.on("createAnnotation",function(t){}),window.commentsResponse.on("updateAnnotation",function(t){}),window.commentsResponse.on("selectAnnotation",function(t){const g=new CustomEvent("annotateCss",{detail:!0});document.dispatchEvent(g)}),window.commentsFormObj.formReady.then(()=>{setTimeout(()=>{logger.info("[TF_SDK:285] \u2705 Annotations loaded",{count:n==null?void 0:n.length}),window.commentsResponse.setAnnotations(n)},500);const t=new CustomEvent("loadAnnotationComplete",{});document.dispatchEvent(t),logger.info("[TF_SDK:286] \u2705 loadAnnotationComplete dispatched")})}async function m(){logger.info("[TF_SDK:287] \u2705 goToformRender() \u2014 returning to form view");const o=document.getElementById("formio-cmt");if(o&&(o.innerHTML=""),typeof window.resetFormCache=="function"&&window.resetFormCache(),typeof window.showFormView=="function")try{window.commentsResponse&&window.commentsResponse.destroy&&(window.commentsResponse.destroy(),logger.info("[TF_SDK:288] \u2705 Previous Recogito instance destroyed")),window.commentsFormObj&&window.commentsFormObj.destroy&&(await window.commentsFormObj.destroy(),window.commentsFormObj=null),logger.info("[TF_SDK:289] \u2705 Instantly switching back to form view..."),window.showFormView()}catch(e){logger.error("[TF_SDK:290] \u274C Error restoring form view:",e),typeof sendEventCallback=="function"&&sendEventCallback({type:"ERROR",errorMessage:"ErrorCode : 005, Formio not rendered the forms",data:{reason:"Failed to restore form view",technicalError:e}})}else logger.error("[TF_SDK:291] \u274C showFormView is not defined")}function l(){logger.info("[TF_SDK:292] \u2705 CommentOnBack() \u2014 checking for unsaved changes");let o=window.commentsResponse.getAnnotations(),e=window.FORM_COMMENTS_DATA;const n=JSON.stringify(o)===JSON.stringify(e);logger.info("[TF_SDK:293] \u2705 Annotations changed:",!n),n?m():showDynamicModal("Unsaved Comments",[{label:"Discard",callback:m},{label:"Save",callback:s}],"Discard your comments or save them before leaving?")}function s(){logger.info("[TF_SDK:294] \u2705 submitComments() \u2014 sending annotation data to app");let o=window.commentsResponse.getAnnotations();logger.info("[TF_SDK:295] \u2705 Annotations collected",{count:o==null?void 0:o.length}),sendEventCallback({type:"COMMENTS_DATA",message:"Success: getcomments data.",data:{commentsData:o}}),window.FORM_COMMENTS_DATA=o,m()}window.submitComments=s,window.loadCommentsform=d,window.CommentOnBack=l})();</script>
|
|
38467
38467
|
|
|
38468
38468
|
<script>(function(){window.applyBarcodeLayout=i=>{const n=i;if(!n||!n.querySelectorAll)return;n.querySelectorAll(".formio-component-barcode, .formio-component-barcodeselect").forEach(o=>{const c=o.querySelector('[ref="element"]')||o.querySelector(".choices")||o;if(c&&!o.querySelector(".barcode-custom-icon")){const e=document.createElement("span");e.className="barcode-custom-icon bi bi-barcode",e.title="Scan Barcode",e.setAttribute("role","button"),e.setAttribute("aria-label","Scan barcode"),e.addEventListener("click",r=>{r.preventDefault(),r.stopPropagation(),e.style.opacity="0.5",setTimeout(()=>e.style.opacity="1",200),logger.info("[TF_SDK:33] \u2705 Barcode Icon Clicked!");const t=o.querySelector("input"),a=t?t.id:o.id;logger.info("[TF_SDK:34] \u2705 Dispatching openBarcode for:",a);const l=new CustomEvent("openBarcode",{detail:{compObj:o,controlId:a}});document.dispatchEvent(l),t&&t.focus()}),c.prepend(e)}})}})();</script>
|
|
38469
|
-
<script>(function(){function
|
|
38469
|
+
<script>(function(){function k(o){logger.info(`[TF_SDK:35] \u2705 Processing component: ${o.getAttribute("ref")||o.id}`);const q=!o.querySelector("ul"),E=o.querySelector("ul.list-group, div:not(.fileSelector):not(.formio-errors):not(.mb-2):not(.formio-errors)"),l=E?Array.from(E.children).filter(e=>["DIV","LI"].includes(e.nodeName)):[];l.forEach(e=>{if(!(e.classList.contains("formio-errors")||e.classList.contains("list-group-header"))){if(q){let n="";if(!e.querySelector(".file-preview-wrapper")&&!e.querySelector('[ref="fileImage"]')){const s=e.textContent.toLowerCase(),t=e.querySelector("a"),g=/\.(jpg|jpeg|png|gif|webp|svg)$/i;if(g.test(s)||t&&g.test(t.href)||e.querySelector("img.file-image")){const C=e.querySelector("img.file-image");if(C&&C.src?n=C.src:(t&&t.href&&g.test(t.href)||t&&t.href&&t.href.startsWith("data:image"))&&(n=t.href),n){const d=document.createElement("div");d.className="file-preview-wrapper";const v=document.createElement("img");v.src=n,v.className="file-preview-img",d.appendChild(v),e.firstChild?e.insertBefore(d,e.firstChild):e.appendChild(d)}}}if(!n){const s=e.querySelector('.file-preview-img, [ref="fileImage"]');if(s&&s.src)n=s.src;else{const t=e.querySelector("a"),g=/\.(jpg|jpeg|png|gif|webp|svg)$/i;t&&t.href&&(g.test(t.href)||t.href.startsWith("data:image"))&&(n=t.href)}}const a=[{class:"bi bi-eye",title:"Preview"},{class:"bi bi-pencil",title:"Edit"}];e.querySelectorAll('[ref="removeLink"]').forEach(s=>{if(s.closest(".file-actions-wrapper"))return;const t=document.createElement("div");t.className="file-actions-wrapper custom-scrollbar",s.after(t),s.className="action-item remove-action",s.innerHTML='<i class="bi bi-trash-fill"></i>',t.appendChild(s),a.forEach(g=>{const b=document.createElement("div");b.className="action-item",b.setAttribute("title",g.title),b.innerHTML=`<i class="${g.class}"></i>`,t.appendChild(b),b.addEventListener("click",C=>{var L,A;C.preventDefault(),C.stopPropagation();let d="";const v=e.querySelector('.file-preview-img, [ref="fileImage"]');if(v&&v.src)d=v.src;else{const i=e.querySelector("a"),r=/\.(jpg|jpeg|png|gif|webp|svg)$/i;i&&i.href&&(r.test(i.href)||i.href.startsWith("data:image"))&&(d=i.href)}if(g.title==="Preview"&&d&&typeof window.openImagePreviewModal=="function"){const i=((A=(L=e.querySelector("a"))==null?void 0:L.textContent)==null?void 0:A.trim())||"File Preview";window.openImagePreviewModal(d,i);return}if(g.title==="Edit"&&d&&typeof cropro!="undefined"){const i=new Image;i.src=d,i.style.position="fixed",i.style.visibility="hidden",i.style.pointerEvents="none",document.body.appendChild(i),i.onload=()=>{const r=new cropro.CropArea(i);if(r.displayMode="popup",r.renderImageType="image/jpeg",r.renderImageQuality=.8,r.renderAtNaturalSize=!0,r.popupMargin=60,r.styles&&r.styles.settings&&o.closest(".tf-embed-sdk")){const h=getComputedStyle(o);let p=h.getPropertyValue("--tf-primary-color").trim(),c=h.getPropertyValue("--tf-secondary-color").trim(),m=h.getPropertyValue("--tf-app-bg-color").trim();window.__unviredThemeData&&(p=p||window.__unviredThemeData.primaryColor,c=c||window.__unviredThemeData.secondaryColor,m=m||window.__unviredThemeData.backgroundColor),p=p||"#2586c7",c=c||"white",m=m||"white",r.styles.settings.toolbarBackgroundColor=m,r.styles.settings.toolbarBackgroundHoverColor=m,r.styles.settings.toolbarBackgroundActiveColor=m,r.styles.settings.toolbarColor=p,r.styles.settings.cropFrameColor=p,r.styles.settings.gripColor=p,r.styles.settings.gripFillColor=c}r.addRenderEventListener(async h=>{logger.info("[TF_SDK:35a] \u{1F3A8} Crop render event fired");const p=e.querySelector('.file-preview-img, [ref="fileImage"]');p&&(p.src=h);const c=o.componentInstance||o.component,m=l.indexOf(e);let f=null;c&&Array.isArray(c.dataValue)&&(f=c.dataValue[m]);const w=f?f.id||f.uid||f._id:null,D=f?f.originalName||f.name:"edited_image.jpg";for(var F=h.split(","),P=(F[0].match(/:(.*?);/)||[])[1]||"image/jpeg",T=atob(F[1]),I=T.length,N=new Uint8Array(I);I--;)N[I]=T.charCodeAt(I);let S=new Blob([N],{type:P});if(S.name=D,logger.info(`[TF_SDK:36] \u{1F4BE} Custom Renderer: User clicked Crop Save (\u2713)! Base64 DataURL length=${h.length}`),typeof imageCompression=="function"&&P.startsWith("image/"))try{const u={maxSizeMB:.2,maxWidthOrHeight:1600,initialQuality:.8,useWebWorker:!0},_=await imageCompression(S,u);_.name=D,logger.info(`[TF_SDK:37] \u26A1 Compressed cropped image: ${S.size} -> ${_.size} bytes`),S=_}catch(u){logger.warn("[TF_SDK:37a] \u26A0\uFE0F Compression skipped/failed:",u)}w&&typeof window.updateFileInIndexedDB=="function"?(logger.info(`[TF_SDK:38] \u{1F4BE} Custom Renderer: Calling updateFileInIndexedDB for id: ${w}`),window.updateFileInIndexedDB(w,S,D).then(u=>{logger.info("[TF_SDK:38a] \u2705 Custom Renderer: IndexedDB update successful for id:",w),f&&(f.url=u.url,f.size=u.size,f.mode=u.mode||"M"),c&&typeof c.triggerChange=="function"&&c.triggerChange({modified:!0})}).catch(u=>{logger.error("[TF_SDK:38b] \u274C Custom Renderer: IndexedDB update failed:",u)})):logger.warn("[TF_SDK:38c] \u26A0\uFE0F Cannot update IndexedDB: existingId missing or updateFileInIndexedDB function not available");const M=new CustomEvent("formio-file-updated",{detail:{element:o,row:e,dataUrl:h},bubbles:!0});o.dispatchEvent(M),document.body.removeChild(i)}),r.addCloseEventListener(()=>{i.parentNode&&document.body.removeChild(i)}),r.show()};return}const B=new CustomEvent("formio-file-action",{detail:{element:o,icon:g,row:e,imgSrc:d},bubbles:!0});b.dispatchEvent(B)})})})}e.classList.add("layout-processed"),e.style.setProperty("opacity","1","important"),e.style.visibility="visible"}});const y=o.querySelector('[ref="messageContainer"]');if(y){const e=Array.from(o.querySelectorAll(".status.text-danger, .alert-danger")).filter(a=>!y.contains(a));y.querySelectorAll(".cloned-err").forEach(a=>a.remove()),e.length>0&&(y.classList.add("d-block"),y.style.display="block",e.forEach(a=>{const x=a.textContent.toLowerCase();if(x.includes("already uploaded")||x.includes("already being uploaded")){a.style.setProperty("display","none","important");return}const s=a.cloneNode(!0);s.classList.add("cloned-err"),s.style.setProperty("display","block","important"),y.appendChild(s),a.style.setProperty("display","none","important")}))}}window.applyFileLayout=function(o){if(!o)return;o.querySelectorAll(".formio-component-file .fileSelector").forEach(l=>{l.classList.add("premium-dropzone")}),o.querySelectorAll(".formio-component-file").forEach(l=>{k(l),l._hasSafeObserver||(l._hasSafeObserver=new MutationObserver(y=>{let e=!1;for(let n of y){const a=l.querySelector('[ref="messageContainer"]');if(!(a&&a.contains(n.target))){if(n.addedNodes.length>0||n.removedNodes.length>0){e=!0;break}if(n.type==="attributes"&&!["class","style"].includes(n.attributeName)){e=!0;break}}}e&&k(l)}),l._hasSafeObserver.observe(l,{childList:!0,subtree:!0,attributes:!0}))})}})();</script>
|
|
38470
38470
|
<script>(function(){window.prepareFloating=o=>{!o||!Array.isArray(o)||o.forEach(e=>{if((["textfield","email","number","password","phoneNumber","textarea","datetime","dateTime","day","currency","time","barcode","location","barcodeselect","url","website","smartId","bio"].includes(e.type)||e.type==="select")&&(e.placeholder||(e.placeholder=" ")),(e.type==="htmlelement"||e.type==="content")&&e.content){let t=e.content;if(t.includes("<body")){const r=t.match(/<body[^>]*>([\s\S]*)<\/body>/i);r&&r[1]&&(t=r[1].trim())}t=t.replace(/<!DOCTYPE[^>]*>/gi,"").replace(/<\/?html[^>]*>/gi,"").replace(/<\/?head[^>]*>/gi,"").replace(/<\/?meta[^>]*>/gi,""),e.content=t.trim(),e.tag==="p"&&(t.includes("<div")||t.includes("<h")||t.includes("<p")||t.includes("<table"))&&(e.tag="div")}e.components&&Array.isArray(e.components)&&prepareFloating(e.components),e.pages&&Array.isArray(e.pages)&&prepareFloating(e.pages),e.rows&&Array.isArray(e.rows)&&e.rows.forEach(t=>{Array.isArray(t)&&t.forEach(r=>{r&&r.components&&prepareFloating(r.components)})}),e.columns&&Array.isArray(e.columns)&&e.columns.forEach(t=>{t&&t.components&&prepareFloating(t.components)})})},window.applyFloatingLabelsLayout=function(o){if(!o)return;o.querySelectorAll(".formio-component-time").forEach(t=>{t.querySelectorAll('input[type="time"]').forEach(a=>{const i=()=>{a.value&&a.value.trim()!==""?t.classList.add("has-value"):t.classList.remove("has-value")};a.addEventListener("change",i),a.addEventListener("input",i),i()})}),o.querySelectorAll(".formio-component-address").forEach(t=>{t.querySelectorAll('input[type="text"]').forEach(a=>{(!a.getAttribute("placeholder")||a.getAttribute("placeholder")==="")&&a.setAttribute("placeholder"," ")})})}})();</script>
|
|
38471
38471
|
<script>(function(){window.applyColumnLayout=function(l){if(!l)return;l.querySelectorAll(".formio-component-columns").forEach(e=>{e.style.display="flex",e.style.flexWrap="wrap",e.style.marginRight="-15px",e.style.marginLeft="-15px",e.querySelectorAll(':scope > [class*="col-"]').forEach((t,s)=>{t.style.paddingLeft="15px",t.style.paddingRight="15px",window.innerWidth<992?t.style.marginBottom="1.5rem":t.style.marginBottom="0"})})}})();</script>
|
|
38472
38472
|
<script>(function(){window.applyLocationLayout=n=>{if(n&&n.Components&&n.Components.components){const o=n,{textfield:e}=o.Components.components;!o.Components.components.location&&e&&o.Components.addComponent("location",e);return}const i=n;if(!i||!i.querySelectorAll)return;i.querySelectorAll(".formio-component-location").forEach(o=>{const e=o.querySelector('[ref="element"]');if(e&&!e.querySelector(".location-custom-icon")){const t=document.createElement("span");t.className="location-custom-icon bi bi-geo-alt-fill",t.title="Fetch Location",t.setAttribute("role","button"),t.setAttribute("aria-label","Get current location"),t.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation(),t.style.opacity="0.5",setTimeout(()=>t.style.opacity="1",200),logger.info("[TF_SDK:36] \u2705 Location Icon Clicked!");const c=o.querySelector("input"),a=c?c.id:o.id;logger.info("[TF_SDK:37] \u2705 Dispatching getLocation for:",a);const r=new CustomEvent("getLocation",{detail:{compObj:o,controlId:a}});document.dispatchEvent(r),c&&c.focus()}),e.prepend(t)}})}})();</script>
|
|
@@ -38527,7 +38527,7 @@ Expecting `+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":x="Parse error on
|
|
|
38527
38527
|
|
|
38528
38528
|
|
|
38529
38529
|
<div id="sticky-footer" class="footer-hidden" style="display: none;">
|
|
38530
|
-
<div class="build-version">SDK v2.0.
|
|
38530
|
+
<div class="build-version">SDK v2.0.80</div>
|
|
38531
38531
|
|
|
38532
38532
|
<button class="footer-btn footer-btn-secondary" id="prevBtn" style="display:none" onclick="FormOnPrevious()">
|
|
38533
38533
|
<i class="bi bi-chevron-left"></i> Previous
|