@lottiefiles/dotlottie-web 0.64.2 → 0.65.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["DotLottieWebWorker"],"sources":["../src/animation-frame-manager.ts","../src/constants.ts","../src/core/dotlottie-player.js","../src/core/dotlottie-wasm-loader.ts","../src/event-manager.ts","../src/offscreen-observer.ts","../src/resize-observer.ts","../src/utils.ts","../src/utils/vector-char.ts","../src/dotlottie.ts","../src/worker/worker-manager.ts","../src/worker/dotlottie.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\ninterface AnimationFrameStrategy {\n cancelAnimationFrame(id: number): void;\n requestAnimationFrame(callback: (time: number) => void): number;\n}\n\nclass WebAnimationFrameStrategy implements AnimationFrameStrategy {\n public requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n cancelAnimationFrame(id);\n }\n}\n\nclass NodeAnimationFrameStrategy implements AnimationFrameStrategy {\n private _lastHandleId: number = 0;\n\n private _lastImmediate: NodeJS.Immediate | null = null;\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n if (this._lastHandleId >= Number.MAX_SAFE_INTEGER) {\n this._lastHandleId = 0;\n }\n\n this._lastHandleId += 1;\n\n this._lastImmediate = setImmediate(() => {\n callback(Date.now());\n });\n\n return this._lastHandleId;\n }\n\n public cancelAnimationFrame(_id: number): void {\n if (this._lastImmediate) {\n clearImmediate(this._lastImmediate);\n }\n }\n}\n\nexport class AnimationFrameManager {\n private readonly _strategy: AnimationFrameStrategy;\n\n public constructor() {\n this._strategy =\n typeof requestAnimationFrame === 'function' ? new WebAnimationFrameStrategy() : new NodeAnimationFrameStrategy();\n }\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n return this._strategy.requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n this._strategy.cancelAnimationFrame(id);\n }\n}\n","export const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport const MS_TO_SEC_FACTOR = 1000;\nexport const DEFAULT_BG_COLOR = '#00000000';\nexport const ZIP_SIGNATURE = new Uint8Array([0x50, 0x4b, 0x03, 0x04]);\nexport const LOTTIE_JSON_MANDATORY_FIELDS = ['v', 'ip', 'op', 'layers', 'fr', 'w', 'h'];\n\n// These values are replace during the build process with the package version and name\nexport const PACKAGE_VERSION = __PACKAGE_VERSION__;\nexport const PACKAGE_NAME = __PACKAGE_NAME__;\n\nexport const DEFAULT_DPR_FACTOR = 0.75;\n\nexport const BYTES_PER_PIXEL = 4;\n","\nvar createDotLottiePlayerModule = (() => {\n var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n \n return (\nfunction(moduleArg = {}) {\n var moduleRtn;\n\nfunction _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,\"string\");return\"symbol\"==typeof i?i:i+\"\"}function _toPrimitive(t,r){if(\"object\"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||\"default\");if(\"object\"!=typeof i)return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===r?String:Number)(t)}var h=moduleArg,aa,ba,ca=new Promise((a,b)=>{aa=a;ba=b}),fa=Object.assign({},h),ha=\"./this.program\",p=\"\",ia;\"undefined\"!=typeof document&&document.currentScript&&(p=document.currentScript.src);_scriptName&&(p=_scriptName);p.startsWith(\"blob:\")?p=\"\":p=p.substr(0,p.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1);ia=async a=>{a=await fetch(a,{credentials:\"same-origin\"});if(a.ok)return a.arrayBuffer();throw Error(a.status+\" : \"+a.url)};var t=h.printErr||console.error.bind(console);Object.assign(h,fa);fa=null;h.thisProgram&&(ha=h.thisProgram);var ja=h.wasmBinary,ka,la=!1,ma,u,x,y,z,C,D,na,oa;function pa(){var a=ka.buffer;h.HEAP8=u=new Int8Array(a);h.HEAP16=y=new Int16Array(a);h.HEAPU8=x=new Uint8Array(a);h.HEAPU16=z=new Uint16Array(a);h.HEAP32=C=new Int32Array(a);h.HEAPU32=D=new Uint32Array(a);h.HEAPF32=na=new Float32Array(a);h.HEAPF64=oa=new Float64Array(a)}var qa=[],ra=[],sa=[];function ta(){var a=h.preRun.shift();qa.unshift(a)}var F=0,G=null;function ua(a){var _h$onAbort;(_h$onAbort=h.onAbort)===null||_h$onAbort===void 0||_h$onAbort.call(h,a);a=\"Aborted(\"+a+\")\";t(a);la=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ba(a);throw a}var va=a=>a.startsWith(\"data:application/octet-stream;base64,\"),wa;async function xa(a){if(!ja)try{var b=await ia(a);return new Uint8Array(b)}catch{}if(a==wa&&ja)a=new Uint8Array(ja);else throw\"both async and sync fetching of the wasm failed\";return a}async function ya(a,b){try{var c=await xa(a);return await WebAssembly.instantiate(c,b)}catch(d){t(`failed to asynchronously prepare wasm: ${d}`),ua(d)}}async function za(a){var b=wa;if(!ja&&\"function\"==typeof WebAssembly.instantiateStreaming&&!va(b)&&\"function\"==typeof fetch)try{var c=fetch(b,{credentials:\"same-origin\"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){t(`wasm streaming compile failed: ${d}`),t(\"falling back to ArrayBuffer instantiation\")}return ya(b,a)}class Aa{constructor(a){_defineProperty(this,\"name\",\"ExitStatus\");this.message=`Program terminated with exit(${a})`;this.status=a}}var Ba=a=>{for(;0<a.length;)a.shift()(h)},Ca=h.noExitRuntime||!0,Da=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,Ea=function(){let a=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;let b=arguments.length>1&&arguments[1]!==undefined?arguments[1]:NaN;var c=x,d=a+b;for(b=a;c[b]&&!(b>=d);)++b;if(16<b-a&&c.buffer&&Da)return Da.decode(c.subarray(a,b));for(d=\"\";a<b;){var e=c[a++];if(e&128){var f=c[a++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var k=c[a++]&63;e=224==(e&240)?(e&15)<<12|f<<6|k:(e&7)<<18|f<<12|k<<6|c[a++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d};class Fa{constructor(a){this.Ca=a-24}}var Ga=0,Ha=0,H=(a,b,c)=>{var d=x;if(0<c){c=b+c-1;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var k=a.charCodeAt(++e);f=65536+((f&1023)<<10)|k&1023}if(127>=f){if(b>=c)break;d[b++]=f}else{if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6}else{if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63}d[b++]=128|f>>6&63}d[b++]=128|f&63}}d[b]=0}},Ia={},Ja=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function I(a){return this.fromWireType(D[a>>2])}var J={},K={},Ka={},L,N=(a,b,c)=>{function d(g){g=c(g);if(g.length!==a.length)throw new L(\"Mismatched type converter count\");for(var l=0;l<a.length;++l)M(a[l],g[l])}a.forEach(g=>Ka[g]=b);var e=Array(b.length),f=[],k=0;b.forEach((g,l)=>{K.hasOwnProperty(g)?e[l]=K[g]:(f.push(g),J.hasOwnProperty(g)||(J[g]=[]),J[g].push(()=>{e[l]=K[g];++k;k===f.length&&d(e)}))});0===f.length&&d(e)},La,O=a=>{for(var b=\"\";x[a];)b+=La[x[a++]];return b},P;function Ma(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var d=b.name;if(!a)throw new P(`type \"${d}\" must have a positive integer typeid pointer`);if(K.hasOwnProperty(a)){if(c.hb)return;throw new P(`Cannot register type '${d}' twice`)}K[a]=b;delete Ka[a];J.hasOwnProperty(a)&&(b=J[a],delete J[a],b.forEach(e=>e()))}function M(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};return Ma(a,b,c)}var Oa=a=>{throw new P(a.Aa.Da.Ba.name+\" instance already deleted\")},Pa=!1,Qa=()=>{},Ra=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ga)return null;a=Ra(a,b,c.Ga);return null===a?null:c.$a(a)},Sa={},Ta={},Ua=(a,b)=>{if(void 0===b)throw new P(\"ptr should not be undefined\");for(;a.Ga;)b=a.Qa(b),a=a.Ga;return Ta[b]},Va=(a,b)=>{if(!b.Da||!b.Ca)throw new L(\"makeClassHandle requires ptr and ptrType\");if(!!b.Ha!==!!b.Fa)throw new L(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return Q(Object.create(a,{Aa:{value:b,writable:!0}}))},Q=a=>{if(\"undefined\"===typeof FinalizationRegistry)return Q=b=>b,a;Pa=new FinalizationRegistry(b=>{b=b.Aa;--b.count.value;0===b.count.value&&(b.Fa?b.Ha.Ka(b.Fa):b.Da.Ba.Ka(b.Ca))});Q=b=>{var c=b.Aa;c.Fa&&Pa.register(b,{Aa:c},b);return b};Qa=b=>{Pa.unregister(b)};return Q(a)},Wa=[];function Xa(){}var Ya=(a,b)=>Object.defineProperty(b,\"name\",{value:a}),Za=(a,b,c)=>{if(void 0===a[b].Ea){var d=a[b];a[b]=function(){for(var _len=arguments.length,e=new Array(_len),_key=0;_key<_len;_key++){e[_key]=arguments[_key]}if(!a[b].Ea.hasOwnProperty(e.length))throw new P(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ea})!`);return a[b].Ea[e.length].apply(this,e)};a[b].Ea=[];a[b].Ea[d.Na]=d}},$a=(a,b,c)=>{if(h.hasOwnProperty(a)){if(void 0===c||void 0!==h[a].Ea&&void 0!==h[a].Ea[c])throw new P(`Cannot register public name '${a}' twice`);Za(h,a,a);if(h[a].Ea.hasOwnProperty(c))throw new P(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);h[a].Ea[c]=b}else h[a]=b,h[a].Na=c},ab=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function bb(a,b,c,d,e,f,k,g){this.name=a;this.constructor=b;this.Ma=c;this.Ka=d;this.Ga=e;this.bb=f;this.Qa=k;this.$a=g;this.jb=[]}var cb=(a,b,c)=>{for(;b!==c;){if(!b.Qa)throw new P(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Qa(a);b=b.Ga}return a};function db(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);return 0}if(!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);return cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba)}function fb(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);if(this.Sa){var c=this.Ua();null!==a&&a.push(this.Ka,c);return c}return 0}if(!b||!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Ra&&b.Aa.Da.Ra)throw new P(`Cannot convert argument of type ${b.Aa.Ha?b.Aa.Ha.name:b.Aa.Da.name} to parameter type ${this.name}`);c=cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba);if(this.Sa){if(void 0===b.Aa.Fa)throw new P(\"Passing raw pointer to smart pointer is illegal\");switch(this.ob){case 0:if(b.Aa.Ha===this)c=b.Aa.Fa;else throw new P(`Cannot convert argument of type ${b.Aa.Ha?b.Aa.Ha.name:b.Aa.Da.name} to parameter type ${this.name}`);break;case 1:c=b.Aa.Fa;break;case 2:if(b.Aa.Ha===this)c=b.Aa.Fa;else{var d=b.clone();c=this.kb(c,gb(()=>d[\"delete\"]()));null!==a&&a.push(this.Ka,c)}break;default:throw new P(\"Unsupporting sharing policy\")}}return c}function hb(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);return 0}if(!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Aa.Da.Ra)throw new P(`Cannot convert argument of type ${b.Aa.Da.name} to parameter type ${this.name}`);return cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba)}function ib(a,b,c,d,e,f,k,g,l,n,m){this.name=a;this.Ba=b;this.Ta=c;this.Ra=d;this.Sa=e;this.ib=f;this.ob=k;this.Ya=g;this.Ua=l;this.kb=n;this.Ka=m;e||void 0!==b.Ga?this.toWireType=fb:(this.toWireType=d?db:hb,this.Ja=null)}var jb=(a,b,c)=>{if(!h.hasOwnProperty(a))throw new L(\"Replacing nonexistent public symbol\");void 0!==h[a].Ea&&void 0!==c?h[a].Ea[c]=b:(h[a]=b,h[a].Na=c)},R,kb=function(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];a.includes(\"j\")?(a=a.replace(/p/g,\"i\"),b=(0,h[\"dynCall_\"+a])(b,...c)):b=R.get(b)(...c);return b},lb=(a,b)=>function(){for(var _len2=arguments.length,c=new Array(_len2),_key2=0;_key2<_len2;_key2++){c[_key2]=arguments[_key2]}return kb(a,b,c)},S=(a,b)=>{a=O(a);var c=a.includes(\"j\")?lb(a,b):R.get(b);if(\"function\"!=typeof c)throw new P(`unknown function pointer with signature ${a}: ${b}`);return c},mb,ob=a=>{a=nb(a);var b=O(a);T(a);return b},pb=(a,b)=>{function c(f){e[f]||K[f]||(Ka[f]?Ka[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(`${a}: `+d.map(ob).join([\", \"]))},qb=(a,b)=>{for(var c=[],d=0;d<a;d++)c.push(D[b+4*d>>2]);return c};function rb(a){for(var b=1;b<a.length;++b)if(null!==a[b]&&void 0===a[b].Ja)return!0;return!1}function sb(a,b,c,d,e){var f=b.length;if(2>f)throw new P(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var k=null!==b[1]&&null!==c,g=rb(b),l=\"void\"!==b[0].name,n=f-2,m=Array(n),q=[],r=[];return Ya(a,function(){for(var _len3=arguments.length,A=new Array(_len3),_key3=0;_key3<_len3;_key3++){A[_key3]=arguments[_key3]}r.length=0;q.length=k?2:1;q[0]=e;if(k){var v=b[1].toWireType(r,this);q[1]=v}for(var w=0;w<n;++w)m[w]=b[w+2].toWireType(r,A[w]),q.push(m[w]);A=d(...q);if(g)Ja(r);else for(w=k?1:2;w<b.length;w++){var E=1===w?v:m[w-2];null!==b[w].Ja&&b[w].Ja(E)}v=l?b[0].fromWireType(A):void 0;return v})}var tb=a=>{a=a.trim();const b=a.indexOf(\"(\");return-1!==b?a.substr(0,b):a},vb=[],U=[],wb=a=>{9<a&&0===--U[a+1]&&(U[a]=void 0,vb.push(a))},V=a=>{if(!a)throw new P(\"Cannot use deleted val. handle = \"+a);return U[a]},gb=a=>{switch(a){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:const b=vb.pop()||U.length;U[b]=a;U[b+1]=1;return b}},xb={name:\"emscripten::val\",fromWireType:a=>{var b=V(a);wb(a);return b},toWireType:(a,b)=>gb(b),Ia:8,readValueFromPointer:I,Ja:null},yb=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(u[d])}:function(d){return this.fromWireType(x[d])};case 2:return c?function(d){return this.fromWireType(y[d>>1])}:function(d){return this.fromWireType(z[d>>1])};case 4:return c?function(d){return this.fromWireType(C[d>>2])}:function(d){return this.fromWireType(D[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`)}},zb=(a,b)=>{var c=K[a];if(void 0===c)throw a=`${b} has unknown type ${ob(a)}`,new P(a);return c},eb=a=>{if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a},Ab=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(na[c>>2])};case 8:return function(c){return this.fromWireType(oa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`)}},Bb=(a,b,c)=>{switch(b){case 1:return c?d=>u[d]:d=>x[d];case 2:return c?d=>y[d>>1]:d=>z[d>>1];case 4:return c?d=>C[d>>2]:d=>D[d>>2];default:throw new TypeError(`invalid integer width (${b}): ${a}`)}},Cb=Object.assign({optional:!0},xb),Db=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-16le\"):void 0,Eb=(a,b)=>{var c=a>>1;for(var d=c+b/2;!(c>=d)&&z[c];)++c;c<<=1;if(32<c-a&&Db)return Db.decode(x.subarray(a,c));c=\"\";for(d=0;!(d>=b/2);++d){var e=y[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c},Fb=(a,b,c)=>{var _c;(_c=c)!==null&&_c!==void 0?_c:c=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)y[b>>1]=a.charCodeAt(e),b+=2;y[b>>1]=0;return b-d},Gb=a=>2*a.length,Hb=(a,b)=>{for(var c=0,d=\"\";!(c>=b/4);){var e=C[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},Ib=(a,b,c)=>{var _c2;(_c2=c)!==null&&_c2!==void 0?_c2:c=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var k=a.charCodeAt(++e);f=65536+((f&1023)<<10)|k&1023}C[b>>2]=f;b+=4;if(b+4>c)break}C[b>>2]=0;return b-d},Jb=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b},Kb=0,Lb=(a,b,c)=>{var d=[];a=a.toWireType(d,c);d.length&&(D[b>>2]=gb(d));return a},Mb=[],Nb=a=>{var b=Mb.length;Mb.push(a);return b},Ob=(a,b)=>{for(var c=Array(a),d=0;d<a;++d)c[d]=zb(D[b+4*d>>2],\"parameter \"+d);return c},Pb=Reflect.construct,Qb={},Rb=a=>{if(!(a instanceof Aa||\"unwind\"==a))throw a},Sb=a=>{var _h$onExit;ma=a;Ca||0<Kb||((_h$onExit=h.onExit)!==null&&_h$onExit!==void 0&&_h$onExit.call(h,a),la=!0);throw new Aa(a)},Tb=a=>{if(!la)try{if(a(),!(Ca||0<Kb))try{ma=a=ma,Sb(a)}catch(b){Rb(b)}}catch(b){Rb(b)}},Ub={},Wb=()=>{if(!Vb){var a={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:ha||\"./this.program\"},b;for(b in Ub)void 0===Ub[b]?delete a[b]:a[b]=Ub[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Vb=c}return Vb},Vb,Xb=()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return a=>crypto.getRandomValues(a);ua(\"initRandomDevice\")},Yb=a=>(Yb=Xb())(a);L=h.InternalError=class extends Error{constructor(a){super(a);this.name=\"InternalError\"}};for(var Zb=Array(256),$b=0;256>$b;++$b)Zb[$b]=String.fromCharCode($b);La=Zb;P=h.BindingError=class extends Error{constructor(a){super(a);this.name=\"BindingError\"}};Object.assign(Xa.prototype,{isAliasOf:function(a){if(!(this instanceof Xa&&a instanceof Xa))return!1;var b=this.Aa.Da.Ba,c=this.Aa.Ca;a.Aa=a.Aa;var d=a.Aa.Da.Ba;for(a=a.Aa.Ca;b.Ga;)c=b.Qa(c),b=b.Ga;for(;d.Ga;)a=d.Qa(a),d=d.Ga;return b===d&&c===a},clone:function(){this.Aa.Ca||Oa(this);if(this.Aa.Pa)return this.Aa.count.value+=1,this;var a=Q,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.Aa;a=a(c.call(b,d,{Aa:{value:{count:e.count,Oa:e.Oa,Pa:e.Pa,Ca:e.Ca,Da:e.Da,Fa:e.Fa,Ha:e.Ha}}}));a.Aa.count.value+=1;a.Aa.Oa=!1;return a},[\"delete\"](){this.Aa.Ca||Oa(this);if(this.Aa.Oa&&!this.Aa.Pa)throw new P(\"Object already scheduled for deletion\");Qa(this);var a=this.Aa;--a.count.value;0===a.count.value&&(a.Fa?a.Ha.Ka(a.Fa):a.Da.Ba.Ka(a.Ca));this.Aa.Pa||(this.Aa.Fa=void 0,this.Aa.Ca=void 0)},isDeleted:function(){return!this.Aa.Ca},deleteLater:function(){this.Aa.Ca||Oa(this);if(this.Aa.Oa&&!this.Aa.Pa)throw new P(\"Object already scheduled for deletion\");Wa.push(this);this.Aa.Oa=!0;return this}});Object.assign(ib.prototype,{cb(a){this.Ya&&(a=this.Ya(a));return a},Wa(a){var _this$Ka;(_this$Ka=this.Ka)===null||_this$Ka===void 0||_this$Ka.call(this,a)},Ia:8,readValueFromPointer:I,fromWireType:function(a){function b(){return this.Sa?Va(this.Ba.Ma,{Da:this.ib,Ca:c,Ha:this,Fa:a}):Va(this.Ba.Ma,{Da:this,Ca:a})}var c=this.cb(a);if(!c)return this.Wa(a),null;var d=Ua(this.Ba,c);if(void 0!==d){if(0===d.Aa.count.value)return d.Aa.Ca=c,d.Aa.Fa=a,d.clone();d=d.clone();this.Wa(a);return d}d=this.Ba.bb(c);d=Sa[d];if(!d)return b.call(this);d=this.Ra?d.Za:d.pointerType;var e=Ra(c,this.Ba,d.Ba);return null===e?b.call(this):this.Sa?Va(d.Ba.Ma,{Da:d,Ca:e,Ha:this,Fa:a}):Va(d.Ba.Ma,{Da:d,Ca:e})}});mb=h.UnboundTypeError=((a,b)=>{var c=Ya(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,\"UnboundTypeError\");U.push(0,1,void 0,1,null,1,!0,1,!1,1);h.count_emval_handles=()=>U.length/2-5-vb.length;var lc={c:(a,b,c,d)=>ua(`Assertion failed: ${a?Ea(a):\"\"}, at: `+[b?b?Ea(b):\"\":\"unknown filename\",c,d?d?Ea(d):\"\":\"unknown function\"]),j:(a,b,c)=>{var d=new Fa(a);D[d.Ca+16>>2]=0;D[d.Ca+4>>2]=b;D[d.Ca+8>>2]=c;Ga=a;Ha++;throw Ga},P:()=>{},M:()=>{},N:()=>{},R:function(){},O:()=>{},T:()=>ua(\"\"),w:a=>{var b=Ia[a];delete Ia[a];var c=b.Ua,d=b.Ka,e=b.Xa,f=e.map(k=>k.gb).concat(e.map(k=>k.mb));N([a],f,k=>{var g={};e.forEach((l,n)=>{var m=k[n],q=l.eb,r=l.fb,A=k[n+e.length],v=l.lb,w=l.nb;g[l.ab]={read:E=>m.fromWireType(q(r,E)),write:(E,da)=>{var B=[];v(w,E,A.toWireType(B,da));Ja(B)}}});return[{name:b.name,fromWireType:l=>{var n={},m;for(m in g)n[m]=g[m].read(l);d(l);return n},toWireType:(l,n)=>{for(var m in g)if(!(m in n))throw new TypeError(`Missing field: \"${m}\"`);var q=c();for(m in g)g[m].write(q,n[m]);null!==l&&l.push(d,q);return q},Ia:8,readValueFromPointer:I,Ja:d}]})},F:()=>{},_:(a,b,c,d)=>{b=O(b);M(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},Ia:8,readValueFromPointer:function(e){return this.fromWireType(x[e])},Ja:null})},k:(a,b,c,d,e,f,k,g,l,n,m,q,r)=>{m=O(m);f=S(e,f);g&&(g=S(k,g));n&&(n=S(l,n));r=S(q,r);var A=ab(m);$a(A,function(){pb(`Cannot construct ${m} due to unbound types`,[d])});N([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Ba;var E=w.Ma}else E=Xa.prototype;v=Ya(m,function(){if(Object.getPrototypeOf(this)!==da)throw new P(\"Use 'new' to construct \"+m);if(void 0===B.La)throw new P(m+\" has no accessible constructor\");for(var _len4=arguments.length,Na=new Array(_len4),_key4=0;_key4<_len4;_key4++){Na[_key4]=arguments[_key4]}var ub=B.La[Na.length];if(void 0===ub)throw new P(`Tried to invoke ctor of ${m} with invalid number of parameters (${Na.length}) - expected (${Object.keys(B.La).toString()}) parameters instead!`);return ub.apply(this,Na)});var da=Object.create(E,{constructor:{value:v}});v.prototype=da;var B=new bb(m,v,da,r,w,f,g,n);if(B.Ga){var _ea$Va;var ea;(_ea$Va=(ea=B.Ga).Va)!==null&&_ea$Va!==void 0?_ea$Va:ea.Va=[];B.Ga.Va.push(B)}w=new ib(m,B,!0,!1,!1);ea=new ib(m+\"*\",B,!1,!1,!1);E=new ib(m+\" const*\",B,!1,!0,!1);Sa[a]={pointerType:ea,Za:E};jb(A,v);return[w,ea,E]})},r:(a,b,c,d,e,f)=>{var k=qb(b,c);e=S(d,e);N([],[a],g=>{g=g[0];var l=`constructor ${g.name}`;void 0===g.Ba.La&&(g.Ba.La=[]);if(void 0!==g.Ba.La[b-1])throw new P(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${g.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);g.Ba.La[b-1]=()=>{pb(`Cannot construct ${g.name} due to unbound types`,k)};N([],k,n=>{n.splice(1,0,null);g.Ba.La[b-1]=sb(l,n,null,e,f);return[]});return[]})},d:(a,b,c,d,e,f,k,g)=>{var l=qb(c,d);b=O(b);b=tb(b);f=S(e,f);N([],[a],n=>{function m(){pb(`Cannot call ${q} due to unbound types`,l)}n=n[0];var q=`${n.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);g&&n.Ba.jb.push(b);var r=n.Ba.Ma,A=r[b];void 0===A||void 0===A.Ea&&A.className!==n.name&&A.Na===c-2?(m.Na=c-2,m.className=n.name,r[b]=m):(Za(r,b,q),r[b].Ea[c-2]=m);N([],l,v=>{v=sb(q,v,n,f,k);void 0===r[b].Ea?(v.Na=c-2,r[b]=v):r[b].Ea[c-2]=v;return[]});return[]})},Y:a=>M(a,xb),D:(a,b,c,d)=>{function e(){}b=O(b);e.values={};M(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,k)=>k.value,Ia:8,readValueFromPointer:yb(b,c,d),Ja:null});$a(b,e)},m:(a,b,c)=>{var d=zb(a,\"enum\");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Ya(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},A:(a,b,c)=>{b=O(b);M(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,Ia:8,readValueFromPointer:Ab(b,c),Ja:null})},u:(a,b,c,d,e,f)=>{var k=qb(b,c);a=O(a);a=tb(a);e=S(d,e);$a(a,function(){pb(`Cannot call ${a} due to unbound types`,k)},b-1);N([],k,g=>{jb(a,sb(a,[g[0],null].concat(g.slice(1)),null,e,f),b-1);return[]})},n:(a,b,c,d,e)=>{b=O(b);-1===e&&(e=4294967295);e=g=>g;if(0===d){var f=32-8*c;e=g=>g<<f>>>f}var k=b.includes(\"unsigned\")?function(g,l){return l>>>0}:function(g,l){return l};M(a,{name:b,fromWireType:e,toWireType:k,Ia:8,readValueFromPointer:Bb(b,c,0!==d),Ja:null})},g:(a,b,c)=>{function d(f){return new e(u.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);M(a,{name:c,fromWireType:d,Ia:8,readValueFromPointer:d},{hb:!0})},o:a=>{M(a,Cb)},v:(a,b,c,d,e,f,k,g,l,n,m,q)=>{c=O(c);f=S(e,f);g=S(k,g);n=S(l,n);q=S(m,q);N([a],[b],r=>{r=r[0];return[new ib(c,r.Ba,!1,!1,!0,r,d,f,g,n,q)]})},Z:(a,b)=>{b=O(b);M(a,{name:b,fromWireType:function(c){for(var d=D[c>>2],e=c+4,f,k=e,g=0;g<=d;++g){var l=e+g;if(g==d||0==x[l])k=k?Ea(k,l-k):\"\",void 0===f?f=k:(f+=String.fromCharCode(0),f+=k),k=l+1}T(c);return f},toWireType:function(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e,f=\"string\"==typeof d;if(!(f||d instanceof Uint8Array||d instanceof Uint8ClampedArray||d instanceof Int8Array))throw new P(\"Cannot pass non-string to std::string\");if(f)for(var k=e=0;k<d.length;++k){var g=d.charCodeAt(k);127>=g?e++:2047>=g?e+=2:55296<=g&&57343>=g?(e+=4,++k):e+=3}else e=d.length;k=ac(4+e+1);g=k+4;D[k>>2]=e;if(f)H(d,g,e+1);else if(f)for(f=0;f<e;++f){var l=d.charCodeAt(f);if(255<l)throw T(g),new P(\"String has UTF-16 code units that do not fit in 8 bits\");x[g+f]=l}else for(f=0;f<e;++f)x[g+f]=d[f];null!==c&&c.push(T,k);return k},Ia:8,readValueFromPointer:I,Ja(c){T(c)}})},y:(a,b,c)=>{c=O(c);if(2===b){var d=Eb;var e=Fb;var f=Gb;var k=g=>z[g>>1]}else 4===b&&(d=Hb,e=Ib,f=Jb,k=g=>D[g>>2]);M(a,{name:c,fromWireType:g=>{for(var l=D[g>>2],n,m=g+4,q=0;q<=l;++q){var r=g+4+q*b;if(q==l||0==k(r))m=d(m,r-m),void 0===n?n=m:(n+=String.fromCharCode(0),n+=m),m=r+b}T(g);return n},toWireType:(g,l)=>{if(\"string\"!=typeof l)throw new P(`Cannot pass non-string to C++ string type ${c}`);var n=f(l),m=ac(4+n+b);D[m>>2]=n/b;e(l,m+4,n+b);null!==g&&g.push(T,m);return m},Ia:8,readValueFromPointer:I,Ja(g){T(g)}})},x:(a,b,c,d,e,f)=>{Ia[a]={name:O(b),Ua:S(c,d),Ka:S(e,f),Xa:[]}},i:(a,b,c,d,e,f,k,g,l,n)=>{Ia[a].Xa.push({ab:O(b),gb:c,eb:S(d,e),fb:f,mb:k,lb:S(g,l),nb:n})},$:(a,b)=>{b=O(b);M(a,{pb:!0,name:b,Ia:0,fromWireType:()=>{},toWireType:()=>{}})},K:()=>{Ca=!1;Kb=0},I:()=>{throw Infinity},C:(a,b,c)=>{a=V(a);b=zb(b,\"emval::as\");return Lb(b,c,a)},q:(a,b,c,d)=>{a=Mb[a];b=V(b);return a(null,b,c,d)},W:wb,E:(a,b)=>{a=V(a);b=V(b);return a==b},p:(a,b,c)=>{var d=Ob(a,b),e=d.shift();a--;var f=Array(a);b=`methodCaller<(${d.map(k=>k.name).join(\", \")}) => ${e.name}>`;return Nb(Ya(b,(k,g,l,n)=>{for(var m=0,q=0;q<a;++q)f[q]=d[q].readValueFromPointer(n+m),m+=d[q].Ia;k=1===c?Pb(g,f):g.apply(k,f);return Lb(e,l,k)}))},z:a=>{9<a&&(U[a+1]+=1)},ca:a=>{var b=V(a);Ja(b);wb(a)},s:(a,b)=>{a=zb(a,\"_emval_take_value\");a=a.readValueFromPointer(b);return gb(a)},G:(a,b)=>{Qb[a]&&(clearTimeout(Qb[a].id),delete Qb[a]);if(!b)return 0;var c=setTimeout(()=>{delete Qb[a];Tb(()=>bc(a,performance.now()))},b);Qb[a]={id:c,qb:b};return 0},H:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=new Date(e,0,1).getTimezoneOffset();e=new Date(e,6,1).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);C[b>>2]=Number(f!=e);b=k=>{var g=Math.abs(k);return`UTC${0<=k?\"-\":\"+\"}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`};a=b(f);b=b(e);e<f?(H(a,c,17),H(b,d,17)):(H(a,d,17),H(b,c,17))},ba:()=>performance.now(),J:a=>{var b=x.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-ka.buffer.byteLength+65535)/65536|0;try{ka.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},V:(a,b)=>{var c=0;Wb().forEach((d,e)=>{var f=b+c;e=D[a+4*e>>2]=f;for(f=0;f<d.length;++f)u[e++]=d.charCodeAt(f);u[e]=0;c+=d.length+1});return 0},X:(a,b)=>{var c=Wb();D[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);D[b>>2]=d;return 0},S:()=>52,Q:()=>52,l:cc,f:dc,e:ec,B:fc,aa:gc,a:hc,b:ic,h:jc,t:kc,U:Sb,L:(a,b)=>{Yb(x.subarray(a,a+b));return 0}},W;(async function(_h$monitorRunDependen2,_wa){function a(d){var _h$monitorRunDependen;W=d.exports;ka=W.da;pa();R=W.ga;ra.unshift(W.ea);F--;(_h$monitorRunDependen=h.monitorRunDependencies)===null||_h$monitorRunDependen===void 0||_h$monitorRunDependen.call(h,F);0==F&&G&&(d=G,G=null,d());return W}F++;(_h$monitorRunDependen2=h.monitorRunDependencies)===null||_h$monitorRunDependen2===void 0||_h$monitorRunDependen2.call(h,F);var b={a:lc};if(h.instantiateWasm)try{return h.instantiateWasm(b,a)}catch(d){t(`Module.instantiateWasm callback failed with error: ${d}`),ba(d)}(_wa=wa)!==null&&_wa!==void 0?_wa:wa=va(\"DotLottiePlayer.wasm\")?\"DotLottiePlayer.wasm\":h.locateFile?h.locateFile(\"DotLottiePlayer.wasm\",p):p+\"DotLottiePlayer.wasm\";try{var c=await za(b);a(c.instance);return c}catch(d){ba(d)}})();var ac=a=>(ac=W.fa)(a),T=a=>(T=W.ha)(a),nb=a=>(nb=W.ia)(a),bc=(a,b)=>(bc=W.ja)(a,b),X=(a,b)=>(X=W.ka)(a,b),Y=a=>(Y=W.la)(a),Z=()=>(Z=W.ma)();h.dynCall_jiii=(a,b,c,d)=>(h.dynCall_jiii=W.na)(a,b,c,d);h.dynCall_jii=(a,b,c)=>(h.dynCall_jii=W.oa)(a,b,c);h.dynCall_vjii=(a,b,c,d,e)=>(h.dynCall_vjii=W.pa)(a,b,c,d,e);h.dynCall_vjfii=(a,b,c,d,e,f)=>(h.dynCall_vjfii=W.qa)(a,b,c,d,e,f);h.dynCall_vjiii=(a,b,c,d,e,f)=>(h.dynCall_vjiii=W.ra)(a,b,c,d,e,f);h.dynCall_vj=(a,b,c)=>(h.dynCall_vj=W.sa)(a,b,c);h.dynCall_vjiiiii=(a,b,c,d,e,f,k,g)=>(h.dynCall_vjiiiii=W.ta)(a,b,c,d,e,f,k,g);h.dynCall_vjiffii=(a,b,c,d,e,f,k,g)=>(h.dynCall_vjiffii=W.ua)(a,b,c,d,e,f,k,g);h.dynCall_vjiiii=(a,b,c,d,e,f,k)=>(h.dynCall_vjiiii=W.va)(a,b,c,d,e,f,k);h.dynCall_viijii=(a,b,c,d,e,f,k)=>(h.dynCall_viijii=W.wa)(a,b,c,d,e,f,k);h.dynCall_iiiiij=(a,b,c,d,e,f,k)=>(h.dynCall_iiiiij=W.xa)(a,b,c,d,e,f,k);h.dynCall_iiiiijj=(a,b,c,d,e,f,k,g,l)=>(h.dynCall_iiiiijj=W.ya)(a,b,c,d,e,f,k,g,l);h.dynCall_iiiiiijj=(a,b,c,d,e,f,k,g,l,n)=>(h.dynCall_iiiiiijj=W.za)(a,b,c,d,e,f,k,g,l,n);function cc(a,b){var c=Z();try{return R.get(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function fc(a,b,c,d,e,f){var k=Z();try{return R.get(a)(b,c,d,e,f)}catch(g){Y(k);if(g!==g+0)throw g;X(1,0)}}function hc(a,b){var c=Z();try{R.get(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function jc(a,b,c,d){var e=Z();try{R.get(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function dc(a,b,c){var d=Z();try{return R.get(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}}function ic(a,b,c){var d=Z();try{R.get(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}}function gc(a){var b=Z();try{R.get(a)()}catch(c){Y(b);if(c!==c+0)throw c;X(1,0)}}function ec(a,b,c,d){var e=Z();try{return R.get(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function kc(a,b,c,d,e){var f=Z();try{R.get(a)(b,c,d,e)}catch(k){Y(f);if(k!==k+0)throw k;X(1,0)}}var mc;G=function nc(){mc||oc();mc||(G=nc)};function oc(){function a(){if(!mc&&(mc=!0,h.calledRun=!0,!la)){var _h$onRuntimeInitializ;Ba(ra);aa(h);(_h$onRuntimeInitializ=h.onRuntimeInitialized)===null||_h$onRuntimeInitializ===void 0||_h$onRuntimeInitializ.call(h);if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();sa.unshift(b)}Ba(sa)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)ta();Ba(qa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(()=>{setTimeout(()=>h.setStatus(\"\"),1);a()},1)):a())}}if(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();oc();moduleRtn=ca;\n\n\n return moduleRtn;\n}\n);\n})();\nexport default createDotLottiePlayerModule;\n","import { PACKAGE_NAME, PACKAGE_VERSION } from '../constants';\n\nimport createDotLottiePlayerModule from './dotlottie-player';\nimport type { MainModule } from './dotlottie-player.types';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class DotLottieWasmLoader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private static _ModulePromise: Promise<MainModule> | null = null;\n\n // URL for the WASM file, constructed using package information\n private static _wasmURL =\n `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n private constructor() {\n throw new Error('RendererLoader is a static class and cannot be instantiated.');\n }\n\n private static async _tryLoad(url: string): Promise<MainModule> {\n const module = await createDotLottiePlayerModule({ locateFile: () => url });\n\n return module;\n }\n\n /**\n * Tries to load the WASM module from the primary URL, falling back to a backup URL if necessary.\n * Throws an error if both URLs fail to load the module.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n private static async _loadWithBackup(): Promise<MainModule> {\n if (!DotLottieWasmLoader._ModulePromise) {\n DotLottieWasmLoader._ModulePromise = DotLottieWasmLoader._tryLoad(DotLottieWasmLoader._wasmURL).catch(\n async (initialError): Promise<MainModule> => {\n const backupUrl = `https://unpkg.com/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n console.warn(\n `Primary WASM load failed from ${DotLottieWasmLoader._wasmURL}. Error: ${(initialError as Error).message}`,\n );\n console.warn(`Attempting to load WASM from backup URL: ${backupUrl}`);\n\n try {\n return await DotLottieWasmLoader._tryLoad(backupUrl);\n } catch (backupError) {\n console.error(`Primary WASM URL failed: ${(initialError as Error).message}`);\n console.error(`Backup WASM URL failed: ${(backupError as Error).message}`);\n throw new Error('WASM loading failed from all sources.');\n }\n },\n );\n }\n\n return DotLottieWasmLoader._ModulePromise;\n }\n\n /**\n * Public method to load the WebAssembly module.\n * Utilizes a primary and backup URL for robustness.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n public static async load(): Promise<MainModule> {\n return DotLottieWasmLoader._loadWithBackup();\n }\n\n /**\n * Sets a new URL for the WASM file and invalidates the current module promise.\n *\n * @param string - The new URL for the WASM file.\n */\n public static setWasmUrl(url: string): void {\n if (url === DotLottieWasmLoader._wasmURL) return;\n\n DotLottieWasmLoader._wasmURL = url;\n // Invalidate current module promise\n DotLottieWasmLoader._ModulePromise = null;\n }\n}\n","/**\n * Represents the different types of events that can be dispatched.\n */\nexport type EventType =\n | 'complete'\n | 'frame'\n | 'load'\n | 'loadError'\n | 'renderError'\n | 'loop'\n | 'pause'\n | 'play'\n | 'stop'\n | 'destroy'\n | 'freeze'\n | 'unfreeze'\n | 'render'\n | 'ready'\n | 'stateMachineStart'\n | 'stateMachineStop'\n | 'stateMachineTransition'\n | 'stateMachineStateEntered'\n | 'stateMachineStateExit'\n | 'stateMachineCustomEvent'\n | 'stateMachineError'\n | 'stateMachineBooleanInputValueChange'\n | 'stateMachineNumericInputValueChange'\n | 'stateMachineStringInputValueChange'\n | 'stateMachineInputFired'\n | 'stateMachineInternalMessage';\n\n/**\n * Maps an event type string to its respective event interface.\n */\ntype EventByType<T extends EventType> = Extract<Event, { type: T }>;\n\n/**\n * Base interface for all events.\n */\nexport interface BaseEvent {\n type: EventType;\n}\n\nexport interface RenderEvent extends BaseEvent {\n currentFrame: number;\n type: 'render';\n}\n\nexport interface FreezeEvent extends BaseEvent {\n type: 'freeze';\n}\n\nexport interface UnfreezeEvent extends BaseEvent {\n type: 'unfreeze';\n}\n\n/*\n * Event fired when a destroy action occurs.\n */\nexport interface DestroyEvent extends BaseEvent {\n type: 'destroy';\n}\n\n/**\n * Event fired when a loop action occurs.\n */\nexport interface LoopEvent extends BaseEvent {\n loopCount: number;\n type: 'loop';\n}\n\n/**\n * Event fired during frame changes.\n */\nexport interface FrameEvent extends BaseEvent {\n currentFrame: number;\n type: 'frame';\n}\n\n/**\n * Event fired when a load action occurs.\n */\nexport interface LoadEvent extends BaseEvent {\n type: 'load';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface LoadErrorEvent extends BaseEvent {\n error: Error;\n type: 'loadError';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface RenderErrorEvent extends BaseEvent {\n error: Error;\n type: 'renderError';\n}\n\n/**\n * Event fired when a completion action occurs.\n */\nexport interface CompleteEvent extends BaseEvent {\n type: 'complete';\n}\n\n/**\n * Event fired when a pause action occurs.\n */\nexport interface PauseEvent extends BaseEvent {\n type: 'pause';\n}\n\n/**\n * Event fired when a play action occurs.\n */\nexport interface PlayEvent extends BaseEvent {\n type: 'play';\n}\n\n/**\n * Event fired when a stop action occurs.\n */\nexport interface StopEvent extends BaseEvent {\n type: 'stop';\n}\n\n/**\n * Event fired when a WASM module is initialized and ready.\n */\nexport interface ReadyEvent extends BaseEvent {\n type: 'ready';\n}\n\nexport interface StateMachineStartEvent extends BaseEvent {\n type: 'stateMachineStart';\n}\n\nexport interface StateMachineStopEvent extends BaseEvent {\n type: 'stateMachineStop';\n}\n\nexport interface StateMachineTransitionEvent extends BaseEvent {\n fromState: string;\n toState: string;\n type: 'stateMachineTransition';\n}\n\nexport interface StateMachineStateEnteredEvent extends BaseEvent {\n state: string;\n type: 'stateMachineStateEntered';\n}\n\nexport interface StateMachineStateExitEvent extends BaseEvent {\n state: string;\n type: 'stateMachineStateExit';\n}\n\nexport interface StateMachineCustomEvent extends BaseEvent {\n eventName: string;\n type: 'stateMachineCustomEvent';\n}\n\nexport interface StateMachineErrorEvent extends BaseEvent {\n error: string;\n type: 'stateMachineError';\n}\n\nexport interface StateMachineBooleanInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: boolean;\n oldValue: boolean;\n type: 'stateMachineBooleanInputValueChange';\n}\n\nexport interface StateMachineNumericInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: number;\n oldValue: number;\n type: 'stateMachineNumericInputValueChange';\n}\n\nexport interface StateMachineStringInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: string;\n oldValue: string;\n type: 'stateMachineStringInputValueChange';\n}\n\nexport interface StateMachineInputFiredEvent extends BaseEvent {\n inputName: string;\n type: 'stateMachineInputFired';\n}\n\nexport interface StateMachineInternalMessage extends BaseEvent {\n message: string;\n type: 'stateMachineInternalMessage';\n}\n\n/**\n * Type representing all possible event types.\n */\nexport type Event =\n | LoopEvent\n | FrameEvent\n | LoadEvent\n | LoadErrorEvent\n | RenderErrorEvent\n | CompleteEvent\n | PauseEvent\n | PlayEvent\n | StopEvent\n | DestroyEvent\n | FreezeEvent\n | UnfreezeEvent\n | RenderEvent\n | ReadyEvent\n | StateMachineStartEvent\n | StateMachineStopEvent\n | StateMachineTransitionEvent\n | StateMachineStateEnteredEvent\n | StateMachineStateExitEvent\n | StateMachineCustomEvent\n | StateMachineErrorEvent\n | StateMachineBooleanInputValueChangeEvent\n | StateMachineNumericInputValueChangeEvent\n | StateMachineStringInputValueChangeEvent\n | StateMachineInputFiredEvent\n | StateMachineInternalMessage;\n\nexport type EventListener<T extends EventType> = (event: EventByType<T>) => void;\n\n/**\n * Manages registration and dispatching of event listeners.\n */\nexport class EventManager {\n private readonly _eventListeners: Map<EventType, Set<EventListener<EventType>>> = new Map();\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n let listeners = this._eventListeners.get(type);\n\n if (!listeners) {\n listeners = new Set<EventListener<EventType>>();\n this._eventListeners.set(type, listeners);\n }\n\n listeners.add(listener as unknown as EventListener<EventType>);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n const listeners = this._eventListeners.get(type);\n\n if (!listeners) return;\n\n if (listener) {\n listeners.delete(listener as unknown as EventListener<EventType>);\n\n if (listeners.size === 0) {\n this._eventListeners.delete(type);\n }\n } else {\n this._eventListeners.delete(type);\n }\n }\n\n public dispatch<T extends EventType>(event: EventByType<T>): void {\n const listeners = this._eventListeners.get(event.type);\n\n listeners?.forEach((listener) => listener(event));\n }\n\n public removeAllEventListeners(): void {\n this._eventListeners.clear();\n }\n}\n","import type { DotLottie } from './dotlottie';\nimport type { DotLottieWorker } from './worker/dotlottie';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class OffscreenObserver {\n private static _observer: IntersectionObserver | null = null;\n\n private static readonly _observedCanvases = new Map<HTMLCanvasElement, DotLottie | DotLottieWorker>();\n\n private static _initializeObserver(): void {\n if (OffscreenObserver._observer) return;\n\n const intersectionObserverCallback = (entries: IntersectionObserverEntry[]): void => {\n entries.forEach((entry) => {\n const instance = OffscreenObserver._observedCanvases.get(entry.target as HTMLCanvasElement);\n\n if (instance) {\n if (entry.isIntersecting) {\n instance.unfreeze();\n } else {\n instance.freeze();\n }\n }\n });\n };\n\n OffscreenObserver._observer = new IntersectionObserver(intersectionObserverCallback, {\n threshold: 0,\n });\n }\n\n public static observe(canvas: HTMLCanvasElement, dotLottieInstance: DotLottie | DotLottieWorker): void {\n OffscreenObserver._initializeObserver();\n\n if (OffscreenObserver._observedCanvases.has(canvas)) return;\n\n OffscreenObserver._observedCanvases.set(canvas, dotLottieInstance);\n OffscreenObserver._observer?.observe(canvas);\n }\n\n public static unobserve(canvas: HTMLCanvasElement): void {\n OffscreenObserver._observer?.unobserve(canvas);\n OffscreenObserver._observedCanvases.delete(canvas);\n\n if (OffscreenObserver._observedCanvases.size === 0) {\n OffscreenObserver._observer?.disconnect();\n OffscreenObserver._observer = null;\n }\n }\n}\n","import type { DotLottie } from './dotlottie';\nimport type { DotLottieWorker } from './worker/dotlottie';\n\nexport const RESIZE_DEBOUNCE_TIME = 100;\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class CanvasResizeObserver {\n private static _observer: ResizeObserver | null = null;\n\n private static readonly _observedCanvases = new Map<HTMLCanvasElement, [DotLottie | DotLottieWorker, number]>();\n\n private static _initializeObserver(): void {\n if (CanvasResizeObserver._observer) return;\n\n const resizeHandler = (entries: ResizeObserverEntry[]): void => {\n entries.forEach((entry) => {\n const element = CanvasResizeObserver._observedCanvases.get(entry.target as HTMLCanvasElement);\n\n if (!element) return;\n\n const [dotLottieInstance, timeout] = element;\n\n clearTimeout(timeout);\n\n const newTimeout = setTimeout(() => {\n dotLottieInstance.resize();\n }, RESIZE_DEBOUNCE_TIME) as unknown as number;\n\n CanvasResizeObserver._observedCanvases.set(entry.target as HTMLCanvasElement, [dotLottieInstance, newTimeout]);\n });\n };\n\n CanvasResizeObserver._observer = new ResizeObserver(resizeHandler);\n }\n\n public static observe(canvas: HTMLCanvasElement, dotLottieInstance: DotLottie | DotLottieWorker): void {\n CanvasResizeObserver._initializeObserver();\n\n if (CanvasResizeObserver._observedCanvases.has(canvas)) return;\n\n CanvasResizeObserver._observedCanvases.set(canvas, [dotLottieInstance, 0]);\n CanvasResizeObserver._observer?.observe(canvas);\n }\n\n public static unobserve(canvas: HTMLCanvasElement): void {\n const element = CanvasResizeObserver._observedCanvases.get(canvas);\n\n if (element) {\n const timeoutId = element[1];\n\n if (timeoutId) clearTimeout(timeoutId);\n }\n\n CanvasResizeObserver._observer?.unobserve(canvas);\n CanvasResizeObserver._observedCanvases.delete(canvas);\n\n if (!CanvasResizeObserver._observedCanvases.size && CanvasResizeObserver._observer) {\n CanvasResizeObserver._observer.disconnect();\n CanvasResizeObserver._observer = null;\n }\n }\n}\n","import { DEFAULT_DPR_FACTOR, IS_BROWSER, LOTTIE_JSON_MANDATORY_FIELDS, ZIP_SIGNATURE } from './constants';\n\n/**\n * Validates if a string is a valid hex color in #RRGGBB or #RRGGBBAA format.\n * @param color - Color string to validate\n * @returns True if valid hex color format, false otherwise\n */\nexport function isHexColor(color: string): boolean {\n return /^#([\\da-f]{6}|[\\da-f]{8})$/iu.test(color);\n}\n\n/**\n * Converts a hex color string to an RGBA integer for WASM consumption.\n * Adds full opacity (alpha = 255, 0xFF in hex) if alpha channel is not specified.\n * @param colorHex - Hex color string (e.g., '#FFFFFF' or '#FFFFFFFF')\n * @returns RGBA value as a 32-bit integer, or 0 if invalid hex color\n */\nexport function hexStringToRGBAInt(colorHex: string): number {\n if (!isHexColor(colorHex)) {\n return 0;\n }\n\n let hex = colorHex.replace('#', '');\n\n // Add alpha if it's not included\n hex = hex.length === 6 ? `${hex}ff` : hex;\n\n return parseInt(hex, 16);\n}\n\n/**\n * Detects if file data is a .lottie file by checking for ZIP signature.\n * dotLottie files are ZIP archives containing Lottie JSON and metadata.\n * @param fileData - Raw file data as ArrayBuffer\n * @returns True if data starts with ZIP signature, false otherwise\n */\nexport function isDotLottie(fileData: ArrayBuffer): boolean {\n if (fileData.byteLength < 4) {\n return false;\n }\n\n const fileSignature = new Uint8Array(fileData.slice(0, ZIP_SIGNATURE.byteLength));\n\n for (let i = 0; i < ZIP_SIGNATURE.length; i += 1) {\n if (ZIP_SIGNATURE[i] !== fileSignature[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns whether the given object looks like a valid Lottie JSON structure.\n */\nexport function isLottieJSON(json: Record<string, unknown>): boolean {\n return LOTTIE_JSON_MANDATORY_FIELDS.every((field) => Object.hasOwn(json, field));\n}\n\n/**\n * Detects if data is a valid Lottie animation by checking for required JSON fields.\n * Accepts either a JSON string or a parsed object.\n * @param fileData - Lottie data as JSON string or parsed object\n * @returns True if data contains required Lottie fields, false otherwise\n */\nexport function isLottie(fileData: string | Record<string, unknown>): boolean {\n if (typeof fileData === 'string') {\n try {\n return isLottieJSON(JSON.parse(fileData));\n } catch (_e) {\n return false;\n }\n } else {\n return isLottieJSON(fileData);\n }\n}\n\n/**\n * Calculates the default device pixel ratio with a scaling factor.\n * Applies a factor to balance quality and performance on high-DPI displays.\n * @returns Adjusted device pixel ratio value\n */\nexport function getDefaultDPR(): number {\n const dpr = IS_BROWSER ? window.devicePixelRatio : 1;\n\n return 1 + (dpr - 1) * DEFAULT_DPR_FACTOR;\n}\n\n/**\n * Checks if an HTML element is currently visible within the browser viewport.\n * Used to determine when to freeze/unfreeze rendering for performance optimization.\n * @param element - HTMLElement to check visibility for\n * @returns True if element is at least partially visible in viewport, false otherwise\n */\nexport function isElementInViewport(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n\n return !(rect.bottom < 0 || rect.top > viewportHeight || rect.right < 0 || rect.left > viewportWidth);\n}\n\n/**\n * Calculate pointer position relative to the canvas coordinate system\n * @param event - The mouse or pointer event (target should be the canvas element)\n * @returns The calculated position or null if calculation fails or target is not a valid canvas\n */\nexport function getPointerPosition(event: MouseEvent | PointerEvent): { x: number; y: number } | null {\n const canvas = event.target;\n\n if (canvas instanceof HTMLCanvasElement) {\n const rect = canvas.getBoundingClientRect();\n\n if (rect.width === 0 || rect.height === 0 || canvas.width === 0 || canvas.height === 0) {\n return null;\n }\n\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n const x = (event.clientX - rect.left) * scaleX;\n const y = (event.clientY - rect.top) * scaleY;\n\n if (!Number.isFinite(x) || !Number.isFinite(y) || Number.isNaN(x) || Number.isNaN(y)) {\n return null;\n }\n\n return { x, y };\n }\n\n // Return null if target is not an HTMLCanvasElement or calculation fails\n return null;\n}\n\nexport function handleOpenUrl(message: string): void {\n const content = message.replace('OpenUrl: ', '');\n\n const targetSeparatorIndex = content.indexOf(' | Target: ');\n let urlToOpen: string;\n let target: string;\n\n if (targetSeparatorIndex === -1) {\n // Format: \"OpenUrl: {url}\"\n urlToOpen = content;\n target = '_blank';\n } else {\n // Format: \"OpenUrl: {url} | Target: {target}\"\n urlToOpen = content.substring(0, targetSeparatorIndex);\n target = content.substring(targetSeparatorIndex + ' | Target: '.length);\n }\n\n window.open(urlToOpen, target);\n}\n","import type { MainModule, VectorChar } from '../core/dotlottie-player.types';\n\nexport const toVectorChar = (module: MainModule, data: ArrayBuffer): VectorChar => {\n const vectorChar = new module.VectorChar();\n\n const uint8Array = new Uint8Array(data);\n\n for (let i = 0; i < uint8Array.length; i += 1) {\n const byte = uint8Array[i];\n\n if (byte !== undefined && typeof byte === 'number') {\n vectorChar.push_back(byte);\n }\n }\n\n return vectorChar;\n};\n","/* eslint-disable no-warning-comments */\nimport { AnimationFrameManager } from './animation-frame-manager';\nimport { BYTES_PER_PIXEL, IS_BROWSER } from './constants';\nimport type {\n Fit as CoreFit,\n Mode as CoreMode,\n DotLottiePlayer,\n MainModule,\n Marker,\n Observer,\n StateMachineInternalObserver,\n StateMachineObserver,\n VectorFloat,\n} from './core';\nimport { DotLottieWasmLoader } from './core';\nimport type { EventListener, EventType } from './event-manager';\nimport { EventManager } from './event-manager';\nimport { OffscreenObserver } from './offscreen-observer';\nimport { CanvasResizeObserver } from './resize-observer';\nimport type {\n ColorSlotValue,\n Config,\n Data,\n Fit,\n GradientSlotValue,\n Layout,\n Manifest,\n Mode,\n RenderConfig,\n RenderSurface,\n ScalarSlotValue,\n SlotType,\n StateMachineConfig,\n TextSlotValue,\n Theme,\n Transform,\n VectorSlotValue,\n} from './types';\nimport {\n getDefaultDPR,\n getPointerPosition,\n handleOpenUrl,\n hexStringToRGBAInt,\n isDotLottie,\n isElementInViewport,\n isLottie,\n} from './utils';\nimport { toVectorChar } from './utils/vector-char';\n\nconst createCoreMode = (mode: Mode, module: MainModule): CoreMode => {\n if (mode === 'reverse') {\n return module.Mode.Reverse;\n } else if (mode === 'bounce') {\n return module.Mode.Bounce;\n } else if (mode === 'reverse-bounce') {\n return module.Mode.ReverseBounce;\n } else {\n return module.Mode.Forward;\n }\n};\n\nconst createCoreFit = (fit: Fit, module: MainModule): CoreFit => {\n if (fit === 'contain') {\n return module.Fit.Contain;\n } else if (fit === 'cover') {\n return module.Fit.Cover;\n } else if (fit === 'fill') {\n return module.Fit.Fill;\n } else if (fit === 'fit-height') {\n return module.Fit.FitHeight;\n } else if (fit === 'fit-width') {\n return module.Fit.FitWidth;\n } else {\n return module.Fit.None;\n }\n};\n\nconst createCoreAlign = (align: [number, number], module: MainModule): VectorFloat => {\n const coreAlign = new module.VectorFloat();\n\n coreAlign.push_back(align[0]);\n coreAlign.push_back(align[1]);\n\n return coreAlign;\n};\n\nconst createCoreSegment = (segment: number[], module: MainModule): VectorFloat => {\n const coresegment = new module.VectorFloat();\n\n if (segment.length !== 2) return coresegment;\n\n coresegment.push_back(segment[0] as number);\n coresegment.push_back(segment[1] as number);\n\n return coresegment;\n};\n\nconst createCoreLayout = (layout: Layout | undefined, module: MainModule): { align: VectorFloat; fit: CoreFit } => {\n if (!layout) {\n return module.createDefaultLayout();\n }\n\n return {\n align: createCoreAlign(layout.align ?? [0.5, 0.5], module),\n fit: createCoreFit(layout.fit ?? 'contain', module),\n };\n};\n\nexport class DotLottie {\n private _canvas: HTMLCanvasElement | OffscreenCanvas | RenderSurface | null = null;\n\n private _pendingLoad: { data?: Data; src?: string } | null = null;\n\n private _context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null = null;\n\n private readonly _eventManager: EventManager;\n\n private _animationFrameId: number | null = null;\n\n private readonly _frameManager: AnimationFrameManager;\n\n private _dotLottieCore: DotLottiePlayer | null = null;\n\n private _stateMachineId: string = '';\n\n private _stateMachineConfig: StateMachineConfig | null = null;\n\n private _isStateMachineRunning: boolean = false;\n\n private _stateMachineObserverHandle: StateMachineObserver | null = null;\n\n private _stateMachineInternalMessageObserver: StateMachineInternalObserver | null = null;\n\n private _dotLottieObserverHandle: Observer | null = null;\n\n private static _wasmModule: MainModule | null = null;\n\n private _renderConfig: RenderConfig = {};\n\n private _isFrozen: boolean = false;\n\n private _backgroundColor: string | null = null;\n\n // Bound event listeners for state machine\n private _boundOnClick: ((event: MouseEvent) => void) | null = null;\n\n private _boundOnPointerUp: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerDown: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerMove: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerEnter: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerLeave: ((event: PointerEvent) => void) | null = null;\n\n private _bufferMismatchCount = 0;\n\n private _lastExpectedBufferSize = 0;\n\n /**\n * Creates a new DotLottie player instance for rendering Lottie animations.\n * Initializes the WASM module, event system, and loads animation if src or data is provided in config.\n * @param config - Configuration object specifying animation source, playback settings, and rendering options\n */\n public constructor(config: Config) {\n this._canvas = config.canvas ?? null;\n\n this._eventManager = new EventManager();\n this._frameManager = new AnimationFrameManager();\n this._renderConfig = {\n ...config.renderConfig,\n devicePixelRatio: config.renderConfig?.devicePixelRatio || getDefaultDPR(),\n // freezeOnOffscreen is true by default to prevent unnecessary rendering when the canvas is offscreen\n freezeOnOffscreen: config.renderConfig?.freezeOnOffscreen ?? true,\n };\n\n DotLottieWasmLoader.load()\n .then((module) => {\n DotLottie._wasmModule = module;\n\n const callbackObserver = new module.CallbackObserver();\n\n callbackObserver.setOnLoad(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'load',\n });\n }, 0);\n });\n callbackObserver.setOnLoadError(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error('failed to load'),\n });\n }, 0);\n });\n callbackObserver.setOnPlay(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'play',\n });\n }, 0);\n });\n callbackObserver.setOnPause(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'pause',\n });\n }, 0);\n });\n callbackObserver.setOnStop(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'stop',\n });\n }, 0);\n });\n callbackObserver.setOnLoop((loopCount: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'loop',\n loopCount,\n });\n }, 0);\n });\n callbackObserver.setOnComplete(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'complete',\n });\n }, 0);\n });\n callbackObserver.setOnFrame((currentFrame: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame,\n });\n }, 0);\n });\n callbackObserver.setOnRender((currentFrame: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'render',\n currentFrame,\n });\n }, 0);\n });\n\n this._dotLottieCore = new module.DotLottiePlayer({\n animationId: config.animationId ?? '',\n themeId: config.themeId ?? '',\n // FIXME: state machine id is not useful, since the load and start of state machine require to be controlled by the framework\n stateMachineId: '',\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n loopCount: config.loopCount ?? 0,\n mode: createCoreMode(config.mode ?? 'forward', module),\n segment: createCoreSegment(config.segment ?? [], module),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: createCoreLayout(config.layout, module),\n });\n\n this._stateMachineId = config.stateMachineId ?? '';\n this._stateMachineConfig = config.stateMachineConfig ?? null;\n\n this._dotLottieObserverHandle = this._dotLottieCore.subscribe(callbackObserver);\n\n this._eventManager.dispatch({ type: 'ready' });\n\n if (config.data) {\n if (this._canvas) {\n this._loadFromData(config.data);\n } else {\n this._pendingLoad = { data: config.data };\n }\n } else if (config.src) {\n if (this._canvas) {\n this._loadFromSrc(config.src);\n } else {\n this._pendingLoad = { src: config.src };\n }\n }\n\n if (config.backgroundColor) {\n this.setBackgroundColor(config.backgroundColor);\n }\n })\n .catch((error) => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to load wasm module: ${error}`),\n });\n });\n }\n\n private _dispatchError(message: string): void {\n console.error(message);\n this._eventManager.dispatch({ type: 'loadError', error: new Error(message) });\n }\n\n private async _fetchData(src: string): Promise<string | ArrayBuffer> {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch animation data from URL: ${src}. ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.arrayBuffer();\n\n if (isDotLottie(data)) {\n return data;\n }\n\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n return new TextDecoder().decode(data);\n }\n\n private _loadFromData(data: Data): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n if (!this._canvas) {\n console.warn('[dotlottie-web] Cannot load animation without canvas. Call setCanvas() first.');\n\n return;\n }\n\n const width = this._canvas.width;\n const height = this._canvas.height;\n\n let loaded = false;\n\n if (typeof data === 'string') {\n if (!isLottie(data)) {\n this._dispatchError(\n 'Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(data, width, height);\n } else if (data instanceof ArrayBuffer) {\n if (!isDotLottie(data)) {\n this._dispatchError(\n 'Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadDotLottieData(toVectorChar(DotLottie._wasmModule, data), width, height);\n } else if (typeof data === 'object') {\n if (!isLottie(data as Record<string, unknown>)) {\n this._dispatchError(\n 'Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(JSON.stringify(data), width, height);\n } else {\n this._dispatchError(\n `Unsupported data type for animation data. Expected: \n - string (Lottie JSON),\n - ArrayBuffer (dotLottie),\n - object (Lottie JSON). \n Received: ${typeof data}`,\n );\n\n return;\n }\n\n if (loaded) {\n if (this._renderConfig.quality !== undefined) {\n this._dotLottieCore.setQuality(this._renderConfig.quality);\n }\n\n if (IS_BROWSER) {\n this.resize();\n }\n\n setTimeout(() => {\n // FIXME: frame is not triggered from the dotlottie-rs core\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this.currentFrame,\n });\n }, 0);\n\n this._dotLottieCore.render();\n\n this._draw();\n\n if (this._stateMachineId) {\n const smLoaded = this.stateMachineLoad(this._stateMachineId);\n\n if (smLoaded) {\n const smStarted = this.stateMachineStart();\n\n if (smStarted) {\n this._startAnimationLoop();\n }\n }\n } else if (this._dotLottieCore.isPlaying()) {\n this._startAnimationLoop();\n }\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is initially offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n }\n\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n }\n }\n }\n\n private _loadFromSrc(src: string): void {\n this._fetchData(src)\n .then((data) => this._loadFromData(data))\n .catch((error) => this._dispatchError(`Failed to load animation data from URL: ${src}. ${error}`));\n }\n\n /**\n * Gets the raw pixel buffer containing the rendered animation frame.\n * Returns RGBA pixel data as a Uint8Array for advanced image processing or custom rendering.\n */\n public get buffer(): Uint8Array | null {\n if (!this._dotLottieCore) return null;\n\n return this._dotLottieCore.buffer() as Uint8Array;\n }\n\n /**\n * Gets the ID of the currently active animation from a multi-animation dotLottie file.\n * Returns undefined if no specific animation is active or for single-animation files.\n */\n public get activeAnimationId(): string | undefined {\n return this._dotLottieCore?.activeAnimationId();\n }\n\n /**\n * Gets the ID of the currently active theme applied to the animation.\n * Returns undefined if no theme is active. Themes modify colors and visual properties.\n */\n public get activeThemeId(): string | undefined {\n return this._dotLottieCore?.activeThemeId();\n }\n\n /**\n * Gets the current layout configuration for positioning and scaling the animation.\n * Includes fit mode (contain, cover, fill, etc.) and alignment [x, y] values (0-1 range).\n */\n public get layout(): Layout | undefined {\n const layout = this._dotLottieCore?.config().layout;\n\n if (layout) {\n return {\n align: [layout.align.get(0) as number, layout.align.get(1) as number],\n fit: ((): Fit => {\n switch (layout.fit) {\n case DotLottie._wasmModule?.Fit.Contain:\n return 'contain';\n\n case DotLottie._wasmModule?.Fit.Cover:\n return 'cover';\n\n case DotLottie._wasmModule?.Fit.Fill:\n return 'fill';\n\n case DotLottie._wasmModule?.Fit.FitHeight:\n return 'fit-height';\n\n case DotLottie._wasmModule?.Fit.FitWidth:\n return 'fit-width';\n\n case DotLottie._wasmModule?.Fit.None:\n return 'none';\n\n default:\n return 'contain';\n }\n })(),\n };\n }\n\n return undefined;\n }\n\n /**\n * Gets the currently active marker name if a marker-based segment is set.\n * Returns undefined if no marker is active. Use setMarker() to activate a named segment.\n */\n public get marker(): string | undefined {\n const marker = this._dotLottieCore?.config().marker as string | undefined;\n\n return marker;\n }\n\n /**\n * Gets the animation manifest containing metadata about animations, themes, and states.\n * Returns null if no manifest is available or if the loaded animation doesn't include one.\n */\n public get manifest(): Manifest | null {\n try {\n const manifest = this._dotLottieCore?.manifestString();\n\n if (this._dotLottieCore === null || !manifest) return null;\n\n const manifestJson = JSON.parse(manifest);\n\n if (Object.keys(manifestJson).length === 0) return null;\n\n return manifestJson as Manifest;\n } catch (_err) {\n return null;\n }\n }\n\n /**\n * Gets the current rendering configuration.\n * Includes settings like devicePixelRatio, autoResize, and freezeOnOffscreen.\n */\n public get renderConfig(): RenderConfig {\n return this._renderConfig;\n }\n\n /**\n * Gets the currently active playback segment as [startFrame, endFrame].\n * If no segment is set, returns undefined and the full animation plays.\n */\n public get segment(): [number, number] | undefined {\n const segment = this._dotLottieCore?.config().segment;\n\n if (segment && segment.size() === 2) {\n return [segment.get(0) as number, segment.get(1) as number];\n }\n\n return undefined;\n }\n\n /**\n * Gets the current loop configuration.\n * Returns true if the animation is set to loop continuously.\n */\n public get loop(): boolean {\n return this._dotLottieCore?.config().loopAnimation ?? false;\n }\n\n /**\n * Gets the current playback mode.\n * Determines playback direction: 'forward', 'reverse', 'bounce' (forward then reverse), or 'reverse-bounce'.\n */\n public get mode(): Mode {\n const mode = this._dotLottieCore?.config().mode;\n\n if (mode === DotLottie._wasmModule?.Mode.Reverse) {\n return 'reverse';\n } else if (mode === DotLottie._wasmModule?.Mode.Bounce) {\n return 'bounce';\n } else if (mode === DotLottie._wasmModule?.Mode.ReverseBounce) {\n return 'reverse-bounce';\n } else {\n return 'forward';\n }\n }\n\n /**\n * Indicates whether rendering is currently frozen.\n * True when freeze() has been called and the rendering loop is paused to save resources.\n */\n public get isFrozen(): boolean {\n return this._isFrozen;\n }\n\n /**\n * Indicates whether a state machine is currently active and running.\n * True after stateMachineStart() is called and until stateMachineStop() is called.\n */\n public get isStateMachineRunning(): boolean {\n return this._isStateMachineRunning;\n }\n\n /**\n * Gets the current background color.\n * Returns the background color as a string (e.g., '#FFFFFF' or 'transparent').\n */\n public get backgroundColor(): string {\n return this._backgroundColor ?? '';\n }\n\n /**\n * Gets the autoplay configuration.\n * Returns true if the animation is configured to start playing automatically when loaded.\n */\n public get autoplay(): boolean {\n return this._dotLottieCore?.config().autoplay ?? false;\n }\n\n /**\n * Gets the frame interpolation setting.\n * Returns true if frame interpolation is enabled for smoother animation playback.\n */\n public get useFrameInterpolation(): boolean {\n return this._dotLottieCore?.config().useFrameInterpolation ?? false;\n }\n\n /**\n * Gets the current playback speed.\n * Returns the speed multiplier (1 = normal speed, 2 = double speed, 0.5 = half speed).\n */\n public get speed(): number {\n return this._dotLottieCore?.config().speed ?? 0;\n }\n\n /**\n * Indicates whether the WASM module and core player have been initialized.\n * Check this before performing operations that require the player to be ready.\n */\n public get isReady(): boolean {\n return this._dotLottieCore !== null;\n }\n\n /**\n * Indicates whether an animation has been successfully loaded and is ready for playback.\n * Check this before calling play() or other playback methods to ensure the animation is ready.\n */\n public get isLoaded(): boolean {\n return this._dotLottieCore?.isLoaded() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently playing.\n * True when animation is actively playing, false when paused, stopped, or not started.\n */\n public get isPlaying(): boolean {\n return this._dotLottieCore?.isPlaying() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently paused.\n * True when pause() has been called and animation is not playing or stopped.\n */\n public get isPaused(): boolean {\n return this._dotLottieCore?.isPaused() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently stopped.\n * True when stop() has been called or animation hasn't started yet.\n */\n public get isStopped(): boolean {\n return this._dotLottieCore?.isStopped() ?? false;\n }\n\n /**\n * Gets the current frame number of the animation.\n * Useful for tracking playback position or implementing custom frame displays. Rounded to 2 decimal places.\n */\n public get currentFrame(): number {\n if (!this._dotLottieCore) return 0;\n\n return Math.round(this._dotLottieCore.currentFrame() * 100) / 100;\n }\n\n /**\n * Gets the number of times the animation has completed a loop during the current playback.\n * Increments each time the animation completes one full cycle.\n */\n public get loopCount(): number {\n return this._dotLottieCore?.loopCount() ?? 0;\n }\n\n /**\n * Gets the total number of frames in the animation.\n * Use with currentFrame to calculate playback progress as a percentage.\n */\n public get totalFrames(): number {\n return this._dotLottieCore?.totalFrames() ?? 0;\n }\n\n /**\n * Gets the total duration of the animation in seconds.\n * Represents the time to play from the first frame to the last at normal speed (speed = 1).\n */\n public get duration(): number {\n return this._dotLottieCore?.duration() ?? 0;\n }\n\n /**\n * Gets the duration of the currently active segment in seconds.\n * If no segment is set, returns the full animation duration.\n */\n public get segmentDuration(): number {\n return this._dotLottieCore?.segmentDuration() ?? 0;\n }\n\n /**\n * Gets the canvas element used for rendering the animation.\n * Returns the HTMLCanvasElement, OffscreenCanvas, or RenderSurface set during initialization.\n */\n public get canvas(): HTMLCanvasElement | OffscreenCanvas | RenderSurface | null {\n return this._canvas;\n }\n\n /**\n * Dynamically loads a new animation, replacing the current one if any.\n * Stops current playback, cleans up resources, and loads from the provided src or data.\n * @param config - Configuration for the new animation (all Config properties except canvas)\n */\n public load(config: Omit<Config, 'canvas'>): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._stopAnimationLoop();\n\n this._cleanupCanvas();\n\n this._isFrozen = false;\n\n this._dotLottieCore.setConfig({\n animationId: config.animationId ?? '',\n themeId: config.themeId ?? '',\n stateMachineId: '',\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n loopCount: config.loopCount ?? 0,\n mode: createCoreMode(config.mode ?? 'forward', DotLottie._wasmModule),\n segment: createCoreSegment(config.segment ?? [], DotLottie._wasmModule),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: createCoreLayout(config.layout, DotLottie._wasmModule),\n });\n\n if (config.data) {\n if (this._canvas) {\n this._loadFromData(config.data);\n } else {\n this._pendingLoad = { data: config.data };\n }\n } else if (config.src) {\n if (this._canvas) {\n this._loadFromSrc(config.src);\n } else {\n this._pendingLoad = { src: config.src };\n }\n }\n\n this.setBackgroundColor(config.backgroundColor ?? '');\n }\n\n private _draw(): void {\n if (this._dotLottieCore === null || this._canvas === null) return;\n\n // Only try to get context if canvas has getContext method and no context exists yet\n if (\n !this._context &&\n 'getContext' in this._canvas &&\n typeof this._canvas.getContext === 'function' &&\n ((typeof HTMLCanvasElement !== 'undefined' && this._canvas instanceof HTMLCanvasElement) ||\n (typeof OffscreenCanvas !== 'undefined' && this._canvas instanceof OffscreenCanvas))\n ) {\n this._context = this._canvas.getContext('2d') as\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D\n | null;\n }\n\n // Only process visual output if we have a canvas with a valid context\n if (this._context) {\n const buffer = this._dotLottieCore.buffer() as ArrayBuffer;\n\n const expectedLength = this._canvas.width * this._canvas.height * BYTES_PER_PIXEL;\n\n /* \n frame buffer size mismatch can occur temporarily during resize operations when the WASM buffer allocation hasn't completed yet\n */\n if (buffer.byteLength !== expectedLength) {\n if (this._lastExpectedBufferSize === expectedLength) {\n this._bufferMismatchCount += 1;\n } else {\n this._bufferMismatchCount = 1;\n this._lastExpectedBufferSize = expectedLength;\n }\n\n if (this._bufferMismatchCount === 10) {\n console.warn(\n `[dotlottie-web] Persistent buffer size mismatch detected. ` +\n `Expected ${expectedLength} bytes for canvas ${this._canvas.width}x${this._canvas.height}, ` +\n `but got ${buffer.byteLength} bytes. ` +\n `This may indicate a WASM memory allocation issue or invalid canvas dimensions.`,\n );\n }\n\n return;\n }\n\n this._bufferMismatchCount = 0;\n this._lastExpectedBufferSize = expectedLength;\n\n let imageData = null;\n\n const clampedBuffer = new Uint8ClampedArray(buffer, 0, buffer.byteLength);\n\n /* \n In Node.js, the ImageData constructor is not available. \n You can use createImageData function in the canvas context to create ImageData object.\n */\n if (typeof ImageData === 'undefined') {\n imageData = this._context.createImageData(this._canvas.width, this._canvas.height);\n imageData.data.set(clampedBuffer);\n } else {\n imageData = new ImageData(clampedBuffer, this._canvas.width, this._canvas.height);\n }\n\n this._context.putImageData(imageData, 0, 0);\n }\n }\n\n private _cleanupCanvas(): void {\n if (this._canvas && IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n OffscreenObserver.unobserve(this._canvas);\n CanvasResizeObserver.unobserve(this._canvas);\n this._cleanupStateMachineListeners();\n }\n }\n\n private _initializeCanvas(): void {\n this._context = null;\n\n if (this._canvas && IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n }\n\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n\n if (this._isStateMachineRunning) {\n this._setupStateMachineListeners();\n }\n }\n\n if (this._canvas && this._dotLottieCore && this.isLoaded) {\n const resized = this._dotLottieCore.resize(this._canvas.width, this._canvas.height);\n\n if (resized) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n }\n\n private _stopAnimationLoop(): void {\n if (this._animationFrameId !== null) {\n this._frameManager.cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n }\n\n private _startAnimationLoop(): void {\n // Start if we don't already have an active loop and either:\n // 1. The animation should be playing, OR\n // 2. The state machine is running\n if (\n this._animationFrameId === null &&\n this._dotLottieCore &&\n !this._isFrozen &&\n (this._dotLottieCore.isPlaying() || this._isStateMachineRunning)\n ) {\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._animationLoop.bind(this));\n }\n }\n\n private _animationLoop(): void {\n if (this._dotLottieCore === null) {\n this._stopAnimationLoop();\n\n return;\n }\n\n // Continue the loop if either the animation is playing OR the state machine is running\n if (!this._dotLottieCore.isPlaying() && !this._isStateMachineRunning) {\n this._stopAnimationLoop();\n\n return;\n }\n\n try {\n const advanced = this._dotLottieCore.tick();\n\n if (advanced) {\n this._draw();\n }\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._animationLoop.bind(this));\n } catch (error) {\n console.error('Error in animation frame:', error);\n\n this._eventManager.dispatch({ type: 'renderError', error: error as unknown as Error });\n\n // destroy the instance if it's a runtime error\n if (error instanceof WebAssembly.RuntimeError) {\n this.destroy();\n }\n }\n }\n\n /**\n * Starts or resumes animation playback from the current frame.\n * Unfreezes rendering if frozen and starts the animation loop. Updates isPlaying state to true.\n */\n public play(): void {\n if (this._dotLottieCore === null || !this.isLoaded) return;\n\n this._stopAnimationLoop();\n\n const playing = this._dotLottieCore.play();\n\n // Always unfreeze and start animation loop if core is playing, regardless of play() return value\n if (playing || this._dotLottieCore.isPlaying()) {\n this._isFrozen = false;\n this._startAnimationLoop();\n }\n\n /* \n Check if the canvas is offscreen and freezing is enabled\n If freezeOnOffscreen is true and the canvas is currently outside the viewport,\n we immediately freeze the animation to avoid unnecessary rendering and performance overhead.\n */\n if (\n this._canvas &&\n IS_BROWSER &&\n this._canvas instanceof HTMLCanvasElement &&\n this._renderConfig.freezeOnOffscreen &&\n !isElementInViewport(this._canvas)\n ) {\n this.freeze();\n }\n }\n\n /**\n * Pauses animation playback at the current frame.\n * Stops the animation loop while preserving the current frame position. Updates isPaused state to true.\n */\n public pause(): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.pause();\n\n this._stopAnimationLoop();\n }\n\n /**\n * Stops animation playback and resets to the start frame.\n * Halts the animation loop and returns to the beginning. Updates isStopped state to true.\n */\n public stop(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.stop();\n\n this._stopAnimationLoop();\n\n if (ok) {\n // FIXME: frame is not triggered from the dotlottie-rs core on stop()\n this._eventManager.dispatch({ type: 'frame', currentFrame: this.currentFrame });\n // FIXME: stop() doesn't trigger render() internally\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n /**\n * Seeks to a specific frame in the animation and renders it.\n * Useful for implementing custom scrubbing controls or precise frame positioning.\n * @param frame - The target frame number to seek to\n */\n public setFrame(frame: number): void {\n if (this._dotLottieCore === null) return;\n\n const frameUpdated = this._dotLottieCore.seek(frame);\n\n if (frameUpdated) {\n const rendered = this._dotLottieCore.render();\n\n if (rendered) {\n this._draw();\n }\n }\n }\n\n /**\n * Changes the animation playback speed.\n * Values above 1 speed up playback, below 1 slow it down.\n * @param speed - Playback speed multiplier (e.g., 2 for 2x speed, 0.5 for half speed)\n */\n public setSpeed(speed: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n speed,\n });\n }\n\n /**\n * Changes the background color of the canvas or animation.\n * For HTMLCanvasElement, sets the CSS background. For other surfaces, renders behind the animation.\n * @param color - CSS color string (e.g., '#FFFFFF', 'rgba(0,0,0,0.5)', 'transparent')\n */\n public setBackgroundColor(color: string): void {\n if (this._dotLottieCore === null) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.style.backgroundColor = color;\n } else {\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n backgroundColor: hexStringToRGBAInt(color),\n });\n }\n\n this._backgroundColor = color;\n }\n\n /**\n * Enables or disables continuous looping of the animation.\n * When enabled with loopCount set to 0, animation repeats indefinitely.\n * @param loop - True to enable looping, false to play once\n */\n public setLoop(loop: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopAnimation: loop,\n });\n }\n\n /**\n * Sets the number of additional times to replay the animation after the first play.\n * Requires loop to be true. A value of 0 means infinite replays; a positive value n means\n * the animation plays a total of n + 1 times (initial play + n replays).\n * @param loopCount - Number of additional replays (0 = infinite, 1 = plays twice, 2 = plays three times, etc.)\n */\n public setLoopCount(loopCount: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopCount,\n });\n }\n\n /**\n * Enables or disables frame interpolation for smoother playback.\n * When enabled, interpolates between frames. When disabled, shows exact frame-by-frame animation.\n * @param useFrameInterpolation - True for smooth interpolation, false for exact frames\n */\n public setUseFrameInterpolation(useFrameInterpolation: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n useFrameInterpolation,\n });\n }\n\n /**\n * Subscribes to animation events like play, pause, frame, complete, etc.\n * Use this to react to animation state changes and playback progress.\n * @param type - Event type to listen for (e.g., 'play', 'frame', 'complete')\n * @param listener - Callback function invoked when the event occurs\n */\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n /**\n * Unsubscribes from animation events.\n * If no listener is provided, removes all listeners for the given event type.\n * @param type - Event type to stop listening for\n * @param listener - Specific callback to remove, or undefined to remove all\n */\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n /**\n * Cleans up and destroys the player instance, releasing all resources.\n * Stops playback, removes event listeners, and frees WASM memory. Call when the player is no longer needed.\n */\n public destroy(): void {\n this._stopAnimationLoop();\n\n // Reset state machine status\n this._isStateMachineRunning = false;\n\n this._cleanupCanvas();\n\n if (this._stateMachineObserverHandle) {\n this._dotLottieCore?.stateMachineUnsubscribe(this._stateMachineObserverHandle);\n this._stateMachineObserverHandle.delete();\n this._stateMachineObserverHandle = null;\n }\n\n if (this._stateMachineInternalMessageObserver) {\n this._dotLottieCore?.stateMachineInternalUnsubscribe(this._stateMachineInternalMessageObserver);\n this._stateMachineInternalMessageObserver.delete();\n this._stateMachineInternalMessageObserver = null;\n }\n\n if (this._dotLottieObserverHandle) {\n this._dotLottieCore?.unsubscribe(this._dotLottieObserverHandle);\n this._dotLottieObserverHandle.delete();\n this._dotLottieObserverHandle = null;\n }\n\n this._dotLottieCore?.delete();\n this._dotLottieCore = null;\n this._context = null;\n\n this._eventManager.dispatch({\n type: 'destroy',\n });\n\n this._eventManager.removeAllEventListeners();\n this._cleanupStateMachineListeners();\n }\n\n /**\n * Pauses the rendering loop without changing playback state.\n * Useful for reducing CPU/GPU usage when the animation is offscreen or hidden. Dispatches 'freeze' event.\n */\n public freeze(): void {\n if (this._animationFrameId === null) return;\n\n this._stopAnimationLoop();\n\n this._isFrozen = true;\n\n this._eventManager.dispatch({ type: 'freeze' });\n }\n\n /**\n * Resumes the rendering loop after being frozen.\n * Restarts frame rendering while maintaining the current playback state. Dispatches 'unfreeze' event.\n */\n public unfreeze(): void {\n if (this._animationFrameId !== null) return;\n\n this._isFrozen = false;\n\n this._eventManager.dispatch({ type: 'unfreeze' });\n\n this._startAnimationLoop();\n }\n\n /**\n * Recalculates and updates canvas dimensions based on current size.\n * Call this when the canvas container size changes to maintain proper rendering. Usually handled by autoResize.\n */\n public resize(): void {\n if (!this._dotLottieCore || !this.isLoaded || !this._canvas) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n const dpr = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n\n const { height: clientHeight, width: clientWidth } = this._canvas.getBoundingClientRect();\n\n if (clientHeight !== 0 && clientWidth !== 0) {\n this._canvas.width = clientWidth * dpr;\n this._canvas.height = clientHeight * dpr;\n }\n }\n\n const resized = this._dotLottieCore.resize(this._canvas.width, this._canvas.height);\n\n if (resized) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n /**\n * Changes the canvas element used for rendering.\n * Useful for moving the animation to a different canvas without recreating the player instance.\n * @param canvas - New HTMLCanvasElement, OffscreenCanvas, or RenderSurface to render to\n */\n public setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas | RenderSurface): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!canvas || this._canvas === canvas) return;\n\n if (this._canvas) {\n this._cleanupCanvas();\n }\n\n this._canvas = canvas;\n\n this._initializeCanvas();\n\n if (this._pendingLoad) {\n const pending = this._pendingLoad;\n\n this._pendingLoad = null;\n\n if (pending.data) {\n this._loadFromData(pending.data);\n } else if (pending.src) {\n this._loadFromSrc(pending.src);\n }\n }\n }\n\n /**\n * Applies a 3x3 transformation matrix to the entire animation on the canvas.\n * Use this to translate, rotate, scale, or skew the animation rendering.\n * @param transform - 9-element array representing the transformation matrix in row-major order\n * @returns True if transformation was applied successfully, false otherwise\n */\n public setTransform(transform: Transform): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n const transformVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of transform) {\n transformVector.push_back(val);\n }\n\n const ok = this._dotLottieCore.setTransform(transformVector);\n\n if (ok && this._dotLottieCore.render()) {\n this._draw();\n }\n\n return ok;\n }\n\n /**\n * Gets the 3x3 transformation matrix applied to the animation.\n * Returns a 9-element array representing affine transformations (translation, rotation, scale, skew).\n * @returns Transform array of 9 numbers, or undefined if not available\n */\n public getTransform(): Transform | undefined {\n if (!this._dotLottieCore) return undefined;\n\n const transform: Transform = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n const transformVector = this._dotLottieCore.getTransform();\n\n for (let i = 0; i < transformVector.size(); i += 1) {\n transform[i] = transformVector.get(i) as number;\n }\n\n return transform;\n }\n\n /**\n * Sets a frame range to play instead of the full animation.\n * Useful for playing specific sections or creating animation sequences from subsections.\n * @param startFrame - Starting frame number (inclusive)\n * @param endFrame - Ending frame number (inclusive)\n */\n public setSegment(startFrame: number, endFrame: number): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n segment: createCoreSegment([startFrame, endFrame], DotLottie._wasmModule),\n });\n }\n\n /**\n * Changes the playback direction mode.\n * Controls whether animation plays forward, in reverse, or alternates (bounce).\n * @param mode - Playback mode: 'forward', 'reverse', 'bounce', or 'reverse-bounce'\n */\n public setMode(mode: Mode): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n mode: createCoreMode(mode, DotLottie._wasmModule),\n });\n }\n\n /**\n * Updates rendering configuration like autoResize, devicePixelRatio, and freezeOnOffscreen.\n * Dynamically changes how the canvas behaves without reloading the animation.\n * @param config - Partial RenderConfig with properties to update\n */\n public setRenderConfig(config: RenderConfig): void {\n const { devicePixelRatio, freezeOnOffscreen, quality, ...restConfig } = config;\n\n this._renderConfig = {\n ...this._renderConfig,\n ...restConfig,\n // devicePixelRatio is a special case, it should be set to the default value if it's not provided\n devicePixelRatio: devicePixelRatio || getDefaultDPR(),\n freezeOnOffscreen: freezeOnOffscreen ?? true,\n ...(quality !== undefined && { quality }),\n };\n\n if (quality !== undefined && this._dotLottieCore) {\n this._dotLottieCore.setQuality(quality);\n }\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n } else {\n CanvasResizeObserver.unobserve(this._canvas);\n }\n\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is currently offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n } else {\n OffscreenObserver.unobserve(this._canvas);\n // If the animation was previously frozen, we need to unfreeze it now\n // to ensure it resumes rendering when the canvas is back onscreen.\n if (this._isFrozen) {\n this.unfreeze();\n }\n }\n }\n }\n\n /**\n * Switches to a different animation within a multi-animation dotLottie file.\n * Use this to load a different animation by its ID without creating a new player instance.\n * @param animationId - ID of the animation to load (must exist in the manifest)\n */\n public loadAnimation(animationId: string): void {\n if (this._dotLottieCore === null || this._dotLottieCore.activeAnimationId() === animationId || !this._canvas)\n return;\n\n const loaded = this._dotLottieCore.loadAnimation(animationId, this._canvas.width, this._canvas.height);\n\n if (loaded) {\n if (this._renderConfig.quality !== undefined) {\n this._dotLottieCore.setQuality(this._renderConfig.quality);\n }\n this.resize();\n }\n }\n\n /**\n * Activates a named marker to play only that marked segment.\n * Markers define named sections within an animation. Use markers() to list available markers.\n * @param marker - Name of the marker to activate\n */\n public setMarker(marker: string): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n marker,\n });\n }\n\n /**\n * Gets all markers defined in the animation with their time and duration.\n * Markers represent named sections that can be played using setMarker().\n * @returns Array of marker objects with name, time, and duration properties\n */\n public markers(): Marker[] {\n const markers = this._dotLottieCore?.markers();\n\n if (markers) {\n const result: Marker[] = [];\n\n for (let i = 0; i < markers.size(); i += 1) {\n const marker = markers.get(i) as Marker;\n\n result.push({\n name: marker.name,\n time: marker.time,\n duration: marker.duration,\n });\n }\n\n return result;\n }\n\n return [];\n }\n\n /**\n * Applies a theme to the animation, modifying colors and visual properties.\n * Themes are predefined in the dotLottie manifest. Returns true if theme was successfully loaded.\n * @param themeId - ID of the theme to apply (must exist in manifest)\n * @returns True if theme loaded successfully, false otherwise\n */\n public setTheme(themeId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeLoaded = this._dotLottieCore.setTheme(themeId);\n\n if (themeLoaded) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeLoaded;\n }\n\n /**\n * Removes the currently applied theme and restores original animation colors.\n * Use this to revert to the default appearance after applying a theme.\n * @returns True if theme was reset successfully, false otherwise\n */\n public resetTheme(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeReset = this._dotLottieCore.resetTheme();\n\n if (themeReset) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeReset;\n }\n\n /**\n * Applies a custom theme from theme data instead of manifest theme ID.\n * Useful for dynamically generated or user-created themes not in the manifest.\n *\n * @param themeData - Theme data as a JSON string or a structured Theme object\n * @returns True if theme loaded successfully, false otherwise\n *\n * @example\n * ```typescript\n * // Using a string (existing behavior)\n * dotLottie.setThemeData('{\"rules\":[{\"id\":\"bg\",\"type\":\"Color\",\"value\":[1,0,0]}]}');\n *\n * // Using a Theme object (new behavior)\n * dotLottie.setThemeData({\n * rules: [\n * {\n * id: 'background_color',\n * type: 'Color',\n * value: [0.2, 0.4, 0.8]\n * },\n * {\n * id: 'title',\n * type: 'Text',\n * value: {\n * text: 'Hello World',\n * fontSize: 48,\n * fillColor: [1, 1, 1]\n * }\n * }\n * ]\n * });\n * ```\n */\n public setThemeData(themeData: Theme | string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeDataString = typeof themeData === 'string' ? themeData : JSON.stringify(themeData);\n\n const themeLoaded = this._dotLottieCore.setThemeData(themeDataString);\n\n if (themeLoaded) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeLoaded;\n }\n\n /**\n * Sets multiple slot values at once for parameterized animations.\n * Slots allow runtime customization of colors, text, images, or other properties.\n * @param slots - Object mapping slot IDs to their values\n */\n public setSlots(slots: Record<string, unknown>): void {\n if (this._dotLottieCore === null) return;\n\n if (this._dotLottieCore.setSlots(JSON.stringify(slots))) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n // #region Typed Slot APIs\n\n /**\n * Check if value is an array of keyframes (has objects with 't' and 's' properties)\n */\n private _isKeyframeArray(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n value[0] !== null &&\n 't' in value[0] &&\n 's' in value[0]\n );\n }\n\n /**\n * Get all slot IDs in the animation\n * @returns Array of slot ID strings\n */\n public getSlotIds(): string[] {\n if (!this._dotLottieCore) return [];\n\n const idsVector = this._dotLottieCore.getSlotIds();\n const ids: string[] = [];\n\n for (let i = 0; i < idsVector.size(); i += 1) {\n ids.push(idsVector.get(i) as string);\n }\n\n return ids;\n }\n\n /**\n * Get the type of a slot\n * @param slotId - The slot ID to query\n * @returns The slot type ('color', 'gradient', 'text', 'scalar', 'vector', 'position', 'image') or undefined\n */\n public getSlotType(slotId: string): SlotType | undefined {\n if (!this._dotLottieCore) return undefined;\n\n const type = this._dotLottieCore.getSlotType(slotId);\n\n if (!type) return undefined;\n\n return type as SlotType;\n }\n\n /**\n * Get the current value of a slot\n * @param slotId - The slot ID to query\n * @returns The parsed slot value or undefined if not found\n */\n public getSlot(slotId: string): unknown {\n if (!this._dotLottieCore) return undefined;\n\n const slotStr = this._dotLottieCore.getSlotStr(slotId);\n\n if (!slotStr) return undefined;\n\n try {\n return JSON.parse(slotStr);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get all slots as an object with slot IDs as keys\n * @returns Object containing all slots, or empty object if not loaded\n * @example\n * const slots = dotLottie.getSlots();\n */\n public getSlots(): Record<string, unknown> {\n if (!this._dotLottieCore) return {};\n\n try {\n return JSON.parse(this._dotLottieCore.getSlotsStr());\n } catch {\n return {};\n }\n }\n\n /**\n * Set a color slot value\n * @param slotId - The slot ID to set\n * @param value - Static color [r, g, b, a] or array of keyframes\n * @returns true if successful\n * @example\n * // Static red color\n * dotLottie.setColorSlot('myColor', [1, 0, 0, 1]);\n * // Animated color (red to blue)\n * dotLottie.setColorSlot('myColor', [\\{ t: 0, s: [1, 0, 0, 1] \\}, \\{ t: 60, s: [0, 0, 1, 1] \\}]);\n */\n public setColorSlot(slotId: string, value: ColorSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a scalar slot value (single number like rotation, opacity)\n * @param slotId - The slot ID to set\n * @param value - Static number or array of keyframes\n * @returns true if successful\n * @example\n * // Static rotation\n * dotLottie.setScalarSlot('rotation', 45);\n * // Animated rotation\n * dotLottie.setScalarSlot('rotation', [\\{ t: 0, s: 0 \\}, \\{ t: 60, s: 360 \\}]);\n */\n public setScalarSlot(slotId: string, value: ScalarSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = typeof value !== 'number';\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a vector slot value (2D or 3D point for position, scale, etc.)\n * Handles both \"vector\" and \"position\" slot types\n * @param slotId - The slot ID to set\n * @param value - Static vector [x, y] or array of keyframes\n * @returns true if successful\n * @example\n * // Static scale\n * dotLottie.setVectorSlot('scale', [150, 150]);\n * // Animated position\n * dotLottie.setVectorSlot('position', [\\{ t: 0, s: [0, 0] \\}, \\{ t: 60, s: [100, 200] \\}]);\n */\n public setVectorSlot(slotId: string, value: VectorSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a gradient slot value\n * @param slotId - The slot ID to set\n * @param value - Static gradient or array of keyframes.\n * Color stops: [offset, r, g, b, ...] (4 floats per stop).\n * With opacity stops appended: [...color stops, offset, alpha, ...] (2 floats per opacity stop).\n * @param colorStopCount - Number of color stops (required to distinguish color data from opacity data)\n * @returns true if successful\n * @example\n * // Static red to blue gradient (2 color stops, no opacity)\n * dotLottie.setGradientSlot('myGradient', [0, 1, 0, 0, 1, 0, 0, 1], 2);\n * // Static gradient with opacity stops (2 color stops + 2 opacity stops)\n * dotLottie.setGradientSlot('myGradient', [\n * 0, 1, 0, 0, // color stop 1: red at position 0\n * 1, 0, 0, 1, // color stop 2: blue at position 1\n * 0, 0.8, // opacity stop 1: 80% at position 0\n * 1, 1, // opacity stop 2: 100% at position 1\n * ], 2);\n * // Animated gradient\n * dotLottie.setGradientSlot('myGradient', [\n * \\{ t: 0, s: [0, 1, 0, 0, 1, 0, 0, 1] \\},\n * \\{ t: 60, s: [0, 0, 1, 0, 1, 1, 0, 0] \\},\n * ], 2);\n */\n public setGradientSlot(slotId: string, value: GradientSlotValue, colorStopCount: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ k: { a: isAnimated ? 1 : 0, k: value }, p: colorStopCount });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a text slot value (always static - text documents don't support animation)\n * Supports partial updates - only provided properties will be changed, others inherit from existing value\n * @param slotId - The slot ID to set\n * @param value - Text document properties (partial allowed)\n * @returns true if successful\n * @example\n * // Set all properties\n * dotLottie.setTextSlot('title', \\{ t: 'Hello World', s: 24, fc: [0, 0, 0, 1] \\});\n * // Partial update - only change text, keep existing font size, color, etc.\n * dotLottie.setTextSlot('title', \\{ t: 'New Text' \\});\n */\n public setTextSlot(slotId: string, value: TextSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const existingValue = JSON.parse(this._dotLottieCore.getSlotStr(slotId));\n\n let mergedTextDoc = value;\n\n if (existingValue && 'k' in existingValue && Array.isArray(existingValue.k)) {\n const keyframe0 = existingValue.k[0] as Record<string, unknown>;\n\n if ('s' in keyframe0 && typeof keyframe0['s'] === 'object') {\n mergedTextDoc = {\n ...(keyframe0['s'] as Record<string, unknown>),\n ...value,\n };\n }\n }\n\n const slotJson = JSON.stringify({\n a: 0,\n k: [{ t: 0, s: mergedTextDoc }],\n });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Reset a slot to its original value\n * @param slotId - The slot ID to reset\n * @returns true if successful\n */\n public resetSlot(slotId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.resetSlot(slotId);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Clear a slot's custom value\n * @param slotId - The slot ID to clear\n * @returns true if successful\n */\n public clearSlot(slotId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.clearSlot(slotId);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Reset all slots to their original values\n * @returns true if successful\n */\n public resetSlots(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.resetSlots();\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Clear all slot custom values\n * @returns true if successful\n */\n public clearSlots(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.clearSlots();\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n // #endregion\n\n /**\n * Updates the layout configuration for positioning and scaling the animation.\n * Changes how the animation fits and aligns within the canvas without requiring a reload.\n * @param layout - New layout configuration with fit mode and alignment values\n */\n public setLayout(layout: Layout): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n layout: createCoreLayout(layout, DotLottie._wasmModule),\n });\n }\n\n /**\n * Sets a custom viewport region for rendering a portion of the animation.\n * Defines a rectangular area to render, useful for implementing animation clipping or panning effects.\n * @param x - X coordinate of the viewport's top-left corner\n * @param y - Y coordinate of the viewport's top-left corner\n * @param width - Width of the viewport in pixels\n * @param height - Height of the viewport in pixels\n * @returns True if viewport was set successfully, false otherwise\n */\n public setViewport(x: number, y: number, width: number, height: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n return this._dotLottieCore.setViewport(x, y, width, height);\n }\n\n /**\n * Configures the URL for loading the WASM module.\n * Call this before creating any player instances to load the WASM from a custom CDN or local path.\n * @param url - URL pointing to the dotlottie WASM file\n */\n public static setWasmUrl(url: string): void {\n DotLottieWasmLoader.setWasmUrl(url);\n }\n\n /**\n * @experimental\n * Register a custom font for use in animations\n * @param fontName - The name of the font to register\n * @param fontSource - Either a URL string to fetch the font, or ArrayBuffer/Uint8Array of font data\n * @returns Promise<boolean> - true if registration succeeded, false otherwise\n */\n public static async registerFont(fontName: string, fontSource: string | ArrayBuffer | Uint8Array): Promise<boolean> {\n try {\n const module = await DotLottieWasmLoader.load();\n\n let fontData: ArrayBuffer;\n\n if (typeof fontSource === 'string') {\n const response = await fetch(fontSource);\n\n if (!response.ok) {\n console.error(`Failed to fetch font from URL: ${fontSource}. Status: ${response.status}`);\n\n return false;\n }\n fontData = await response.arrayBuffer();\n } else if (fontSource instanceof Uint8Array) {\n const tempBuffer = fontSource.buffer.slice(\n fontSource.byteOffset,\n fontSource.byteOffset + fontSource.byteLength,\n );\n\n if (tempBuffer instanceof ArrayBuffer) {\n fontData = tempBuffer;\n } else {\n fontData = new ArrayBuffer(fontSource.byteLength);\n new Uint8Array(fontData).set(fontSource);\n }\n } else {\n fontData = fontSource;\n }\n\n const success = module.registerFont(fontName, toVectorChar(module, fontData));\n\n if (!success) {\n console.error(`Failed to register font \"${fontName}\". Font data may be invalid.`);\n }\n\n return success;\n } catch (error) {\n console.error(`Error registering font \"${fontName}\":`, error);\n\n return false;\n }\n }\n\n /**\n * @experimental\n * Animates smoothly to a specific frame over a duration using linear easing.\n * Creates a tween animation transitioning from the current frame to the target frame.\n * @param frame - Target frame number to tween to\n * @param duration - Duration of the tween animation in seconds\n * @returns True if tween started successfully, false otherwise\n */\n public tween(frame: number, duration: number): boolean {\n if (!DotLottie._wasmModule) return false;\n\n // Default easing (linear)\n const easing = [0, 0, 1, 1];\n\n const easingVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of easing) {\n easingVector.push_back(val);\n }\n\n return this._dotLottieCore?.tween(frame, duration, easingVector) ?? false;\n }\n\n /**\n * @experimental\n * Start a tween animation to a specific marker\n * @param marker - The marker name to tween to\n * @param duration - Duration of the tween animation in seconds\n * @returns true if tween was started successfully\n */\n public tweenToMarker(marker: string, duration: number): boolean {\n if (!DotLottie._wasmModule) return false;\n\n const easing = [0, 0, 1, 1];\n\n const easingVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of easing) {\n easingVector.push_back(val);\n }\n\n return this._dotLottieCore?.tweenToMarker(marker, duration, easingVector) ?? false;\n }\n\n /**\n * Gets the original dimensions of the animation as defined in the source file.\n * Returns width and height in pixels representing the animation's intrinsic size.\n * @returns Object with width and height properties in pixels\n */\n public animationSize(): { height: number; width: number } {\n const width = this._dotLottieCore?.animationSize().get(0) ?? 0;\n const height = this._dotLottieCore?.animationSize().get(1) ?? 0;\n\n return {\n width,\n height,\n };\n }\n\n /**\n * Gets the Oriented Bounding Box (OBB) points of a layer by its name.\n * Returns 8 numbers representing 4 corner points (x,y) in clockwise order from top-left: [x0, y0, x1, y1, x2, y2, x3, y3].\n * @param layerName - Name of the layer to get bounds for\n * @returns Array of 8 numbers representing the bounding box corners, or undefined if layer not found\n */\n public getLayerBoundingBox(layerName: string): number[] | undefined {\n const bounds = this._dotLottieCore?.getLayerBounds(layerName);\n\n if (!bounds) return undefined;\n\n if (bounds.size() !== 8) return undefined;\n\n const points: number[] = [];\n\n for (let i = 0; i < 8; i += 1) {\n points.push(bounds.get(i) as number);\n }\n\n return points;\n }\n\n /**\n * Converts theme data into Lottie slot format for dynamic content replacement.\n * Utility function for transforming theme definitions into slot-compatible data structures.\n * @param theme - Theme data as a JSON string\n * @param slots - Slot definitions as a JSON string\n * @returns Transformed slots data as a JSON string\n */\n public static transformThemeToLottieSlots(theme: string, slots: string): string {\n return DotLottie._wasmModule?.transformThemeToLottieSlots(theme, slots) ?? '';\n }\n\n // #region State Machine\n private _setupStateMachineObservers(): void {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return;\n\n const smCallbackObserver = new DotLottie._wasmModule.CallbackStateMachineObserver();\n\n smCallbackObserver.setOnStart(() => {\n setTimeout(() => {\n this._isStateMachineRunning = true;\n this._eventManager.dispatch({ type: 'stateMachineStart' });\n this._startAnimationLoop();\n }, 0);\n });\n smCallbackObserver.setOnStop(() => {\n setTimeout(() => {\n this._isStateMachineRunning = false;\n this._eventManager.dispatch({ type: 'stateMachineStop' });\n\n // Stop animation loop if animation is not playing\n if (!this._dotLottieCore?.isPlaying()) {\n this._stopAnimationLoop();\n }\n }, 0);\n });\n smCallbackObserver.setOnCustomEvent((eventName: string) => {\n this._eventManager.dispatch({ type: 'stateMachineCustomEvent', eventName });\n });\n smCallbackObserver.setOnBooleanInputValueChange((inputName: string, oldValue: boolean, newValue: boolean) => {\n this._eventManager.dispatch({ type: 'stateMachineBooleanInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnNumericInputValueChange((inputName: string, oldValue: number, newValue: number) => {\n this._eventManager.dispatch({ type: 'stateMachineNumericInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnStringInputValueChange((inputName: string, oldValue: string, newValue: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStringInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnInputFired((inputName: string) => {\n this._eventManager.dispatch({ type: 'stateMachineInputFired', inputName });\n });\n smCallbackObserver.setOnTransition((fromState: string, toState: string) => {\n this._eventManager.dispatch({ type: 'stateMachineTransition', fromState, toState });\n });\n smCallbackObserver.setOnStateEntered((state: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStateEntered', state });\n });\n smCallbackObserver.setOnStateExit((state: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStateExit', state });\n });\n smCallbackObserver.setOnError((error: string) => {\n this._eventManager.dispatch({ type: 'stateMachineError', error });\n });\n\n const smInternalMessageObserver = new DotLottie._wasmModule.CallbackStateMachineInternalObserver();\n\n smInternalMessageObserver.setOnMessage((message: string) => {\n if (IS_BROWSER) {\n if (message.startsWith('OpenUrl: ')) {\n handleOpenUrl(message);\n }\n } else {\n this._eventManager.dispatch({ type: 'stateMachineInternalMessage', message });\n }\n });\n\n this._stateMachineObserverHandle = this._dotLottieCore.stateMachineSubscribe(smCallbackObserver);\n this._stateMachineInternalMessageObserver =\n this._dotLottieCore.stateMachineInternalSubscribe(smInternalMessageObserver);\n }\n\n private _cleanupStateMachineObservers(): void {\n if (this._stateMachineObserverHandle) {\n this._dotLottieCore?.stateMachineUnsubscribe(this._stateMachineObserverHandle);\n this._stateMachineObserverHandle.delete();\n this._stateMachineObserverHandle = null;\n }\n if (this._stateMachineInternalMessageObserver) {\n this._dotLottieCore?.stateMachineInternalUnsubscribe(this._stateMachineInternalMessageObserver);\n this._stateMachineInternalMessageObserver.delete();\n this._stateMachineInternalMessageObserver = null;\n }\n }\n\n /**\n * @experimental\n * Loads a state machine by its ID from the dotLottie manifest.\n * State machines enable interactive, event-driven animation behaviors.\n * @param stateMachineId - The ID of the state machine to load (must exist in manifest)\n * @returns True if the state machine was loaded successfully, false otherwise\n */\n public stateMachineLoad(stateMachineId: string): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n this._cleanupStateMachineObservers();\n\n const loaded = this._dotLottieCore.stateMachineLoad(stateMachineId);\n\n if (loaded) {\n this._setupStateMachineObservers();\n }\n\n return loaded;\n }\n\n /**\n * @experimental\n * Load a state machine from data string\n * @param stateMachineData - The state machine data as a string\n * @returns true if the state machine was loaded successfully\n */\n public stateMachineLoadData(stateMachineData: string): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n this._cleanupStateMachineObservers();\n\n const loaded = this._dotLottieCore.stateMachineLoadData(stateMachineData);\n\n if (loaded) {\n this._setupStateMachineObservers();\n }\n\n return loaded;\n }\n\n /**\n * @experimental\n * Set the state machine config\n * @param config - The state machine config\n */\n public stateMachineSetConfig(config: StateMachineConfig | null): void {\n this._stateMachineConfig = config;\n }\n\n /**\n * @experimental\n * Start the state machine\n * @returns true if the state machine was started successfully\n */\n public stateMachineStart(): boolean {\n if (DotLottie._wasmModule === null || this._dotLottieCore === null) return false;\n\n const coreOpenUrl = DotLottie._wasmModule.createDefaultOpenUrlPolicy();\n\n if (this._stateMachineConfig) {\n const openUrlPolicy = this._stateMachineConfig.openUrlPolicy;\n\n if (openUrlPolicy && typeof openUrlPolicy.requireUserInteraction === 'boolean') {\n coreOpenUrl.requireUserInteraction = openUrlPolicy.requireUserInteraction;\n }\n\n if (openUrlPolicy?.whitelist) {\n coreOpenUrl.whitelist = new DotLottie._wasmModule.VectorString();\n\n for (const url of openUrlPolicy.whitelist) {\n coreOpenUrl.whitelist.push_back(url);\n }\n }\n }\n\n const started = this._dotLottieCore.stateMachineStart(coreOpenUrl);\n\n if (started) {\n this._isStateMachineRunning = true;\n this._setupStateMachineListeners();\n this._startAnimationLoop();\n }\n\n return started;\n }\n\n /**\n * @experimental\n * Stop the state machine\n * @returns true if the state machine was stopped successfully\n */\n public stateMachineStop(): boolean {\n if (!this._dotLottieCore) return false;\n\n const stopped = this._dotLottieCore.stateMachineStop();\n\n if (stopped) {\n this._cleanupStateMachineObservers();\n this._isStateMachineRunning = false;\n this._cleanupStateMachineListeners();\n\n // Stop animation loop if animation is not playing\n if (!this._dotLottieCore.isPlaying()) {\n this._stopAnimationLoop();\n }\n }\n\n return stopped;\n }\n\n /**\n * @experimental\n * Get the current status of the state machine\n * @returns The current status of the state machine as a string\n */\n public stateMachineGetStatus(): string {\n return this._dotLottieCore?.stateMachineStatus() ?? '';\n }\n\n /**\n * @experimental\n * Get the current state of the state machine\n * @returns The current state of the state machine as a string\n */\n public stateMachineGetCurrentState(): string {\n return this._dotLottieCore?.stateMachineCurrentState() ?? '';\n }\n\n /**\n * @experimental\n * Get the active state machine ID\n * @returns The active state machine ID as a string\n */\n public stateMachineGetActiveId(): string {\n return this._dotLottieCore?.activeStateMachineId() ?? '';\n }\n\n /**\n * @experimental\n * Override the current state of the state machine\n * @param state - The state to override to\n * @param immediate - Whether to immediately transition to the state\n * @returns true if the state override was successful\n */\n public stateMachineOverrideState(state: string, immediate: boolean = false): boolean {\n return this._dotLottieCore?.stateMachineOverrideCurrentState(state, immediate) ?? false;\n }\n\n /**\n * @experimental\n * Get a specific state machine by ID\n * @param stateMachineId - The ID of the state machine to get\n * @returns The state machine data as a string\n */\n public stateMachineGet(stateMachineId: string): string {\n return this._dotLottieCore?.getStateMachine(stateMachineId) ?? '';\n }\n\n /**\n * @experimental\n * Get the list of state machine listeners\n * @returns Array of listener names\n */\n public stateMachineGetListeners(): string[] {\n if (!this._dotLottieCore) return [];\n\n const listenersVector = this._dotLottieCore.stateMachineFrameworkSetup();\n\n const listeners = [];\n\n for (let i = 0; i < listenersVector.size(); i += 1) {\n listeners.push(listenersVector.get(i) as string);\n }\n\n return listeners;\n }\n\n /**\n * @experimental\n * Set a boolean input value for the state machine\n * @param name - The name of the boolean input\n * @param value - The boolean value to set\n */\n public stateMachineSetBooleanInput(name: string, value: boolean): boolean {\n return this._dotLottieCore?.stateMachineSetBooleanInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Set a numeric input value for the state machine\n * @param name - The name of the numeric input\n * @param value - The numeric value to set\n */\n public stateMachineSetNumericInput(name: string, value: number): boolean {\n return this._dotLottieCore?.stateMachineSetNumericInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Set a string input value for the state machine\n * @param name - The name of the string input\n * @param value - The string value to set\n */\n public stateMachineSetStringInput(name: string, value: string): boolean {\n return this._dotLottieCore?.stateMachineSetStringInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Get a boolean input value from the state machine\n * @param name - The name of the boolean input\n * @returns The boolean value or undefined if not found\n */\n public stateMachineGetBooleanInput(name: string): boolean | undefined {\n return this._dotLottieCore?.stateMachineGetBooleanInput(name);\n }\n\n /**\n * @experimental\n * Get a numeric input value from the state machine\n * @param name - The name of the numeric input\n * @returns The numeric value or undefined if not found\n */\n public stateMachineGetNumericInput(name: string): number | undefined {\n return this._dotLottieCore?.stateMachineGetNumericInput(name);\n }\n\n /**\n * @experimental\n * Get a string input value from the state machine\n * @param name - The name of the string input\n * @returns The string value or undefined if not found\n */\n public stateMachineGetStringInput(name: string): string | undefined {\n return this._dotLottieCore?.stateMachineGetStringInput(name);\n }\n\n /**\n * @experimental\n * Get all the inputs of the current state machine. Returns the key name, followed by it's type as a string.\n * @returns An array of input keys followed by it's type at n+1.\n */\n public stateMachineGetInputs(): string[] {\n if (!this._dotLottieCore) return [];\n\n const inputsVector = this._dotLottieCore.stateMachineGetInputs();\n\n const inputs = [];\n\n for (let i = 0; i < inputsVector.size(); i += 1) {\n inputs.push(inputsVector.get(i) as string);\n }\n\n return inputs;\n }\n\n /**\n * @experimental\n * Fire an event in the state machine\n * @param name - The name of the event to fire\n */\n public stateMachineFireEvent(name: string): void {\n this._dotLottieCore?.stateMachineFireEvent(name);\n }\n\n /**\n * @experimental\n * Post a click event to the state machine\n * @param x - The x coordinate of the click\n * @param y - The y coordinate of the click\n * @returns The event result or undefined\n */\n public stateMachinePostClickEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostClickEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer up event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerUpEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerUpEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer down event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerDownEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerDownEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer move event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerMoveEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerMoveEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer enter event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerEnterEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerEnterEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer exit event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerExitEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerExitEvent(x, y);\n }\n\n private _onClick(event: MouseEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostClickEvent(position.x, position.y);\n }\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerUpEvent(position.x, position.y);\n }\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerDownEvent(position.x, position.y);\n }\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerMoveEvent(position.x, position.y);\n }\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerEnterEvent(position.x, position.y);\n }\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerExitEvent(position.x, position.y);\n }\n }\n\n private _setupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this._dotLottieCore !== null && this.isLoaded) {\n const listeners = this.stateMachineGetListeners();\n\n // Clean up any existing listeners first\n this._cleanupStateMachineListeners();\n\n if (listeners.includes('Click')) {\n this._boundOnClick = this._onClick.bind(this);\n this._canvas.addEventListener('click', this._boundOnClick);\n }\n if (listeners.includes('PointerUp')) {\n this._boundOnPointerUp = this._onPointerUp.bind(this);\n this._canvas.addEventListener('pointerup', this._boundOnPointerUp);\n }\n if (listeners.includes('PointerDown')) {\n this._boundOnPointerDown = this._onPointerDown.bind(this);\n this._canvas.addEventListener('pointerdown', this._boundOnPointerDown);\n }\n if (listeners.includes('PointerMove')) {\n this._boundOnPointerMove = this._onPointerMove.bind(this);\n this._canvas.addEventListener('pointermove', this._boundOnPointerMove);\n }\n if (listeners.includes('PointerEnter')) {\n this._boundOnPointerEnter = this._onPointerEnter.bind(this);\n this._canvas.addEventListener('pointerenter', this._boundOnPointerEnter);\n }\n if (listeners.includes('PointerExit')) {\n this._boundOnPointerLeave = this._onPointerLeave.bind(this);\n this._canvas.addEventListener('pointerleave', this._boundOnPointerLeave);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._boundOnClick) {\n this._canvas.removeEventListener('click', this._boundOnClick);\n this._boundOnClick = null;\n }\n if (this._boundOnPointerUp) {\n this._canvas.removeEventListener('pointerup', this._boundOnPointerUp);\n this._boundOnPointerUp = null;\n }\n if (this._boundOnPointerDown) {\n this._canvas.removeEventListener('pointerdown', this._boundOnPointerDown);\n this._boundOnPointerDown = null;\n }\n if (this._boundOnPointerMove) {\n this._canvas.removeEventListener('pointermove', this._boundOnPointerMove);\n this._boundOnPointerMove = null;\n }\n if (this._boundOnPointerEnter) {\n this._canvas.removeEventListener('pointerenter', this._boundOnPointerEnter);\n this._boundOnPointerEnter = null;\n }\n if (this._boundOnPointerLeave) {\n this._canvas.removeEventListener('pointerleave', this._boundOnPointerLeave);\n this._boundOnPointerLeave = null;\n }\n }\n }\n // #endregion\n}\n","// resolved to a Worker constructor by plugin-inline-worker\nimport DotLottieWebWorker from './dotlottie.worker?worker&inline';\nimport type { MethodParamsMap, RpcRequest } from './types';\n\nexport class WorkerManager {\n private readonly _workers = new Map<string, Worker>();\n\n private readonly _animationWorkerMap = new Map<string, string>();\n\n public getWorker(workerId: string): Worker {\n if (!this._workers.has(workerId)) {\n this._workers.set(workerId, new DotLottieWebWorker());\n }\n\n return this._workers.get(workerId) as Worker;\n }\n\n public assignAnimationToWorker(animationId: string, workerId: string): void {\n this._animationWorkerMap.set(animationId, workerId);\n }\n\n public unassignAnimationFromWorker(animationId: string): void {\n this._animationWorkerMap.delete(animationId);\n }\n\n public sendMessage(workerId: string, message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this.getWorker(workerId).postMessage(message, transfer || []);\n }\n\n public broadcastMessage(message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this._workers.forEach((worker) => {\n worker.postMessage(message, transfer || []);\n });\n }\n\n public terminateWorker(workerId: string): void {\n const worker = this._workers.get(workerId);\n\n if (worker) {\n worker.terminate();\n this._workers.delete(workerId);\n }\n }\n}\n","import { IS_BROWSER } from '../constants';\nimport type { Marker } from '../core/dotlottie-player.types';\nimport type { EventListener, EventType, FrameEvent, StateMachineInternalMessage } from '../event-manager';\nimport { EventManager } from '../event-manager';\nimport { OffscreenObserver } from '../offscreen-observer';\nimport { CanvasResizeObserver } from '../resize-observer';\nimport type { Config, Layout, Manifest, Mode, RenderConfig, StateMachineConfig, Transform } from '../types';\nimport { getDefaultDPR, getPointerPosition, handleOpenUrl, isElementInViewport } from '../utils';\n\nimport type { MethodParamsMap, MethodResultMap, RpcRequest, RpcResponse } from './types';\nimport { WorkerManager } from './worker-manager';\n\nfunction getCanvasSize(\n canvas: HTMLCanvasElement | OffscreenCanvas,\n devicePixelRatio: number,\n): { height: number; width: number } {\n if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement) {\n const { height: clientHeight, width: clientWidth } = canvas.getBoundingClientRect();\n\n if (clientHeight !== 0 && clientWidth !== 0) {\n return { width: clientWidth * devicePixelRatio, height: clientHeight * devicePixelRatio };\n }\n }\n\n return { width: canvas.width, height: canvas.height };\n}\n\nfunction generateUniqueId(): string {\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n\nexport interface DotLottieInstanceState {\n activeAnimationId: string | undefined;\n activeThemeId: string | undefined;\n autoplay: boolean;\n backgroundColor: string;\n currentFrame: number;\n duration: number;\n isFrozen: boolean;\n isLoaded: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n isReady: boolean;\n isStopped: boolean;\n layout: Layout | undefined;\n loop: boolean;\n loopCount: number;\n manifest: Manifest | null;\n marker: string | undefined;\n markers: Marker[];\n mode: Mode;\n renderConfig: RenderConfig;\n segment: [number, number] | undefined;\n segmentDuration: number;\n speed: number;\n totalFrames: number;\n useFrameInterpolation: boolean;\n}\n\n/**\n * Worker-based DotLottie player that offloads animation processing to a Web Worker thread.\n * Use this for better performance when rendering multiple animations or to keep the main thread responsive.\n * All methods are async (return Promises) due to worker communication. Requires HTMLCanvasElement or OffscreenCanvas.\n */\nexport class DotLottieWorker {\n private static readonly _workerManager = new WorkerManager();\n\n private readonly _eventManager = new EventManager();\n\n private readonly _id: string;\n\n private readonly _worker: Worker;\n\n private _canvas: HTMLCanvasElement | OffscreenCanvas | null;\n\n private _dotLottieInstanceState: DotLottieInstanceState = {\n loopCount: 0,\n markers: [],\n autoplay: false,\n backgroundColor: '',\n currentFrame: 0,\n duration: 0,\n loop: false,\n mode: 'forward',\n segment: [0, 0],\n segmentDuration: 0,\n speed: 1,\n totalFrames: 0,\n isLoaded: false,\n isPlaying: false,\n isPaused: false,\n isStopped: true,\n isFrozen: false,\n useFrameInterpolation: false,\n renderConfig: {\n devicePixelRatio: getDefaultDPR(),\n },\n activeAnimationId: '',\n activeThemeId: '',\n layout: undefined,\n marker: undefined,\n isReady: false,\n manifest: null,\n };\n\n private static _wasmUrl: string = '';\n\n private _created: boolean = false;\n\n // Bound event listeners for state machine\n private _boundOnClick: ((event: MouseEvent) => void) | null = null;\n\n private _boundOnPointerUp: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerDown: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerMove: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerEnter: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerLeave: ((event: PointerEvent) => void) | null = null;\n\n private _pendingConfig: Config | null = null;\n\n /**\n * Creates a worker-based DotLottie player instance that runs in a separate thread.\n * Use workerId to share a worker across multiple animations for better resource management.\n * @param config - Configuration with optional workerId to share worker threads\n * @throws Error if canvas is not HTMLCanvasElement or OffscreenCanvas\n */\n public constructor(config: Config & { workerId?: string }) {\n if (config.canvas) {\n const isHTMLCanvas = typeof HTMLCanvasElement !== 'undefined' && config.canvas instanceof HTMLCanvasElement;\n const isOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && config.canvas instanceof OffscreenCanvas;\n\n if (!isHTMLCanvas && !isOffscreenCanvas) {\n throw new Error('Worker-based DotLottie requires HTMLCanvasElement or OffscreenCanvas');\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this._canvas = (config.canvas as HTMLCanvasElement | OffscreenCanvas) ?? null;\n\n this._id = `dotlottie-${generateUniqueId()}`;\n const workerId = config.workerId || 'defaultWorker';\n\n // creates or gets the worker\n this._worker = DotLottieWorker._workerManager.getWorker(workerId);\n\n DotLottieWorker._workerManager.assignAnimationToWorker(this._id, workerId);\n\n if (DotLottieWorker._wasmUrl) {\n this._sendMessage('setWasmUrl', { url: DotLottieWorker._wasmUrl });\n }\n\n const fullConfig = {\n ...config,\n renderConfig: {\n ...config.renderConfig,\n devicePixelRatio: config.renderConfig?.devicePixelRatio || getDefaultDPR(),\n // freezeOnOffscreen is true by default to prevent unnecessary rendering when the canvas is offscreen\n freezeOnOffscreen: config.renderConfig?.freezeOnOffscreen ?? true,\n },\n };\n\n this._pendingConfig = fullConfig;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this._canvas) {\n this._create(fullConfig);\n this._pendingConfig = null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this._worker.addEventListener('message', this._handleWorkerEvent.bind(this));\n }\n\n private async _handleWorkerEvent(event: MessageEvent): Promise<void> {\n const rpcResponse: RpcResponse<\n | 'onComplete'\n | 'onLoad'\n | 'onDestroy'\n | 'onUnfreeze'\n | 'onFrame'\n | 'onRender'\n | 'onFreeze'\n | 'onPause'\n | 'onPlay'\n | 'onStop'\n | 'onLoadError'\n | 'onRenderError'\n | 'onReady'\n | 'onLoop'\n | 'onStateMachineStart'\n | 'onStateMachineStop'\n | 'onStateMachineTransition'\n | 'onStateMachineStateEntered'\n | 'onStateMachineStateExit'\n | 'onStateMachineCustomEvent'\n | 'onStateMachineError'\n | 'onStateMachineBooleanInputValueChange'\n // eslint-disable-next-line no-secrets/no-secrets\n | 'onStateMachineNumericInputValueChange'\n | 'onStateMachineStringInputValueChange'\n | 'onStateMachineInputFired'\n | 'onStateMachineInternalMessage'\n > = event.data;\n\n if (!rpcResponse.id) {\n if (rpcResponse.method === 'onLoad' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._dotLottieInstanceState.renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is initially offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n await this.freeze();\n }\n }\n\n if (this._dotLottieInstanceState.renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n }\n }\n\n if (rpcResponse.method === 'onComplete' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onDestroy' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onUnfreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._dotLottieInstanceState.isFrozen = false;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFrame' && rpcResponse.result.instanceId === this._id) {\n this._dotLottieInstanceState.currentFrame = (rpcResponse.result.event as FrameEvent).currentFrame;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRender' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPause' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPlay' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoadError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRenderError' && rpcResponse.result.instanceId === this._id) {\n // Dont update the instance, since the Core crashed its no long accessible. Calling _updateDotLottieInstanceState will cause it to hang indefinitely.\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onReady' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStart' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._setupStateMachineListeners();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._cleanupStateMachineListeners();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineTransition' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStateEntered' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStateExit' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineCustomEvent' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (\n rpcResponse.method === 'onStateMachineBooleanInputValueChange' &&\n rpcResponse.result.instanceId === this._id\n ) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (\n // eslint-disable-next-line no-secrets/no-secrets\n rpcResponse.method === 'onStateMachineNumericInputValueChange' &&\n rpcResponse.result.instanceId === this._id\n ) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStringInputValueChange' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineInputFired' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineInternalMessage' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n\n const internalEvent = rpcResponse.result.event as StateMachineInternalMessage;\n\n if (internalEvent.message.startsWith('OpenUrl: ')) {\n handleOpenUrl(internalEvent.message);\n }\n }\n }\n }\n\n private async _create(config: Config): Promise<void> {\n if (!this._canvas) {\n return;\n }\n\n let offscreen: OffscreenCanvas;\n\n if (this._canvas instanceof HTMLCanvasElement) {\n offscreen = this._canvas.transferControlToOffscreen();\n } else {\n offscreen = this._canvas;\n }\n\n const { instanceId } = await this._sendMessage(\n 'create',\n {\n instanceId: this._id,\n config: {\n ...config,\n canvas: offscreen as unknown as HTMLCanvasElement,\n },\n ...getCanvasSize(this._canvas, config.renderConfig?.devicePixelRatio || getDefaultDPR()),\n },\n [offscreen],\n );\n\n if (instanceId !== this._id) {\n throw new Error('Instance ID mismatch');\n }\n\n this._created = true;\n\n await this._updateDotLottieInstanceState();\n }\n\n public get loopCount(): number {\n return this._dotLottieInstanceState.loopCount;\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieInstanceState.isLoaded;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieInstanceState.isPlaying;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieInstanceState.isPaused;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieInstanceState.isStopped;\n }\n\n public get currentFrame(): number {\n return this._dotLottieInstanceState.currentFrame;\n }\n\n public get isFrozen(): boolean {\n return this._dotLottieInstanceState.isFrozen;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieInstanceState.segmentDuration;\n }\n\n public get totalFrames(): number {\n return this._dotLottieInstanceState.totalFrames;\n }\n\n public get segment(): [number, number] | undefined {\n return this._dotLottieInstanceState.segment;\n }\n\n public get speed(): number {\n return this._dotLottieInstanceState.speed;\n }\n\n public get duration(): number {\n return this._dotLottieInstanceState.duration;\n }\n\n public get isReady(): boolean {\n return this._dotLottieInstanceState.isReady;\n }\n\n public get mode(): Mode {\n return this._dotLottieInstanceState.mode;\n }\n\n public get canvas(): HTMLCanvasElement | OffscreenCanvas | null {\n return this._canvas;\n }\n\n /**\n * Sets the canvas element for rendering in the worker thread.\n * Cannot change canvas after worker instance is created with a different canvas.\n * @param canvas - HTMLCanvasElement or OffscreenCanvas to render to\n * @returns Promise that resolves when canvas has been set\n * @throws Error if canvas is not HTMLCanvasElement or OffscreenCanvas\n * @throws Error if trying to change canvas after instance is already created\n */\n public async setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void> {\n const isHTMLCanvas = typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement;\n const isOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas;\n\n if (!isHTMLCanvas && !isOffscreenCanvas) {\n throw new Error('Worker-based DotLottie requires HTMLCanvasElement or OffscreenCanvas');\n }\n\n if (this._canvas === canvas) return;\n\n if (this._created && this._canvas !== null) {\n throw new Error('Cannot change canvas after worker instance is already created with a different canvas.');\n }\n\n this._canvas = canvas;\n\n if (!this._created && this._pendingConfig) {\n await this._create(this._pendingConfig);\n this._pendingConfig = null;\n }\n }\n\n public get autoplay(): boolean {\n return this._dotLottieInstanceState.autoplay;\n }\n\n public get backgroundColor(): string {\n return this._dotLottieInstanceState.backgroundColor;\n }\n\n public get loop(): boolean {\n return this._dotLottieInstanceState.loop;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieInstanceState.useFrameInterpolation;\n }\n\n public get renderConfig(): RenderConfig {\n return this._dotLottieInstanceState.renderConfig;\n }\n\n public get manifest(): Manifest | null {\n return this._dotLottieInstanceState.manifest;\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieInstanceState.activeAnimationId;\n }\n\n public get marker(): string | undefined {\n return this._dotLottieInstanceState.marker;\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieInstanceState.activeThemeId;\n }\n\n public get layout(): Layout | undefined {\n return this._dotLottieInstanceState.layout;\n }\n\n /**\n * Starts or resumes animation playback in the worker thread.\n * Updates the internal playback state (e.g., isPlaying) to reflect that playback has started.\n * @returns Promise that resolves when playback has started and state has been updated\n */\n public async play(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('play', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n\n /*\n Check if the canvas is offscreen and freezing is enabled\n If freezeOnOffscreen is true and the canvas is currently outside the viewport,\n we immediately freeze the animation to avoid unnecessary rendering and performance overhead.\n */\n if (\n IS_BROWSER &&\n this._canvas instanceof HTMLCanvasElement &&\n this._dotLottieInstanceState.renderConfig.freezeOnOffscreen &&\n !isElementInViewport(this._canvas)\n ) {\n await this.freeze();\n }\n }\n\n /**\n * Pauses animation playback in the worker thread.\n * Awaits worker response before resolving. Updates isPaused state to true.\n * @returns Promise that resolves when playback has paused\n */\n public async pause(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('pause', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Stops animation playback and resets to start frame in the worker thread.\n * Awaits worker response before resolving. Updates isStopped state to true.\n * @returns Promise that resolves when playback has stopped\n */\n public async stop(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('stop', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Changes the animation playback speed in the worker thread.\n * Awaits worker response before resolving.\n * @param speed - Playback speed multiplier (e.g., 2 for 2x speed, 0.5 for half speed)\n * @returns Promise that resolves when speed has been updated\n */\n public async setSpeed(speed: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSpeed', { instanceId: this._id, speed });\n await this._updateDotLottieInstanceState();\n }\n\n public async setMode(mode: Mode): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMode', { instanceId: this._id, mode });\n await this._updateDotLottieInstanceState();\n }\n\n public async setFrame(frame: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setFrame', { frame, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSegment(start: number, end: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSegment', { instanceId: this._id, segment: [start, end] });\n await this._updateDotLottieInstanceState();\n }\n\n public async setRenderConfig(renderConfig: RenderConfig): Promise<void> {\n if (!this._created) return;\n\n const { devicePixelRatio, freezeOnOffscreen, quality, ...restConfig } = renderConfig;\n\n await this._sendMessage('setRenderConfig', {\n instanceId: this._id,\n renderConfig: {\n ...this._dotLottieInstanceState.renderConfig,\n ...restConfig,\n // devicePixelRatio is a special case, it should be set to the default value if it's not provided\n devicePixelRatio: devicePixelRatio || getDefaultDPR(),\n freezeOnOffscreen: freezeOnOffscreen ?? true,\n ...(quality !== undefined && { quality }),\n },\n });\n\n await this._updateDotLottieInstanceState();\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._dotLottieInstanceState.renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n } else {\n CanvasResizeObserver.unobserve(this._canvas);\n }\n\n if (this._dotLottieInstanceState.renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is currently offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n await this.freeze();\n }\n } else {\n OffscreenObserver.unobserve(this._canvas);\n // If the animation was previously frozen, we need to unfreeze it now\n // to ensure it resumes rendering when the canvas is back onscreen.\n if (this._dotLottieInstanceState.isFrozen) {\n await this.unfreeze();\n }\n }\n }\n }\n\n public async setUseFrameInterpolation(useFrameInterpolation: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setUseFrameInterpolation', { instanceId: this._id, useFrameInterpolation });\n await this._updateDotLottieInstanceState();\n }\n\n public async setTheme(themeId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = this._sendMessage('setTheme', { instanceId: this._id, themeId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * Dynamically loads a new animation in the worker thread, replacing the current one.\n * Awaits worker response before resolving. Stops current playback and cleans up resources.\n * @param config - Configuration for the new animation (all Config properties except canvas)\n * @returns Promise that resolves when animation has been loaded\n */\n public async load(config: Omit<Config, 'canvas'>): Promise<void> {\n if (!this._created) {\n if (this._pendingConfig) {\n this._pendingConfig = {\n ...this._pendingConfig,\n ...config,\n };\n }\n\n return;\n }\n\n await this._sendMessage('load', { config, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLoop(loop: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoop', { instanceId: this._id, loop });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Sets the number of additional times to replay the animation after the first play in the worker thread.\n * Requires loop to be true. A value of 0 means infinite replays; a positive value n means\n * the animation plays a total of n + 1 times (initial play + n replays).\n * @param loopCount - Number of additional replays (0 = infinite, 1 = plays twice, 2 = plays three times, etc.)\n * @returns Promise that resolves when loopCount has been updated\n */\n public async setLoopCount(loopCount: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoopCount', { instanceId: this._id, loopCount });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Recalculates and updates canvas dimensions in the worker thread.\n * Awaits worker response before resolving. Call when canvas container size changes.\n * @returns Promise that resolves when resize has completed\n */\n public async resize(): Promise<void> {\n if (!this._created || !this._canvas) return;\n\n const { height, width } = getCanvasSize(\n this._canvas,\n this._dotLottieInstanceState.renderConfig.devicePixelRatio || getDefaultDPR(),\n );\n\n await this._sendMessage('resize', { height, instanceId: this._id, width });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Cleans up and destroys the player instance in the worker thread, releasing resources.\n * Awaits worker response before resolving. Stops playback and removes event listeners.\n * @returns Promise that resolves when cleanup has completed\n */\n public async destroy(): Promise<void> {\n if (!this._created) return;\n\n this._created = false;\n\n await this._sendMessage('destroy', { instanceId: this._id });\n\n this._cleanupStateMachineListeners();\n\n DotLottieWorker._workerManager.unassignAnimationFromWorker(this._id);\n this._eventManager.removeAllEventListeners();\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n OffscreenObserver.unobserve(this._canvas);\n CanvasResizeObserver.unobserve(this._canvas);\n }\n }\n\n public async freeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('freeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async unfreeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('unfreeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setBackgroundColor(backgroundColor: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setBackgroundColor', { instanceId: this._id, backgroundColor });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadAnimation(animationId: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('loadAnimation', { animationId, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLayout(layout: Layout): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLayout', { instanceId: this._id, layout });\n await this._updateDotLottieInstanceState();\n }\n\n private async _updateDotLottieInstanceState(): Promise<void> {\n if (!this._created) return;\n\n const result = await this._sendMessage('getDotLottieInstanceState', { instanceId: this._id });\n\n this._dotLottieInstanceState = result.state;\n }\n\n public markers(): Marker[] {\n return this._dotLottieInstanceState.markers;\n }\n\n public async setMarker(marker: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMarker', { instanceId: this._id, marker });\n await this._updateDotLottieInstanceState();\n }\n\n public async setThemeData(themeData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const loaded = await this._sendMessage('setThemeData', { instanceId: this._id, themeData });\n\n await this._updateDotLottieInstanceState();\n\n return loaded;\n }\n\n public async setViewport(x: number, y: number, width: number, height: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setViewport', { x, y, width, height, instanceId: this._id });\n }\n\n public async animationSize(): Promise<{ height: number; width: number }> {\n if (!this._created) return { height: 0, width: 0 };\n\n return this._sendMessage('animationSize', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Start a tween animation between two frame values with custom easing\n * @param frame - Starting frame value\n * @param duration - Duration of the tween in seconds\n * @returns true if tween was started successfully\n */\n public async tween(frame: number, duration: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('tween', { instanceId: this._id, frame, duration });\n }\n\n /**\n * @experimental\n * Start a tween animation to a specific marker\n * @param marker - The marker name to tween to\n * @param duration - Duration of the tween in seconds\n * @returns true if tween was started successfully\n */\n public async tweenToMarker(marker: string, duration: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('tweenToMarker', { instanceId: this._id, marker, duration });\n }\n\n public async setTransform(transform: Transform): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setTransform', { instanceId: this._id, transform });\n }\n\n public async getTransform(): Promise<Transform | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('getTransform', { instanceId: this._id });\n }\n\n private async _sendMessage<T extends keyof MethodParamsMap>(\n method: T,\n params: MethodParamsMap[T],\n transfer?: Transferable[],\n ): Promise<MethodResultMap[T]> {\n const rpcRequest: RpcRequest<T> = {\n id: `dotlottie-request-${generateUniqueId()}`,\n method,\n params,\n };\n\n this._worker.postMessage(rpcRequest, transfer || []);\n\n return new Promise((resolve, reject) => {\n const onMessage = (event: MessageEvent): void => {\n const rpcResponse: RpcResponse<T> = event.data;\n\n // Check if the response corresponds to the request\n if (rpcResponse.id === rpcRequest.id) {\n this._worker.removeEventListener('message', onMessage);\n\n if (rpcResponse.error) {\n reject(new Error(`Failed to execute method ${method}: ${rpcResponse.error}`));\n } else {\n resolve(rpcResponse.result);\n }\n }\n };\n\n this._worker.addEventListener('message', onMessage);\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWorker._wasmUrl = url;\n }\n\n /**\n * @experimental\n *\n * Register a custom font for use in animations in worker contexts\n * @param fontName - The name of the font to register\n * @param fontSource - Either a URL string to fetch the font, or ArrayBuffer/Uint8Array of font data\n * @returns Promise<boolean> - true if registration message was sent successfully\n */\n public static async registerFont(fontName: string, fontSource: string | ArrayBuffer | Uint8Array): Promise<boolean> {\n try {\n const id = generateUniqueId();\n\n DotLottieWorker._workerManager.broadcastMessage({\n id,\n method: 'registerFont',\n params: {\n fontName,\n fontSource,\n },\n });\n\n // Note: we can't easily wait for responses from all workers in a broadcast,\n // so we return true if the broadcast was sent successfully\n return true;\n } catch (error) {\n console.error(`Error broadcasting registerFont for \"${fontName}\":`, error);\n\n return false;\n }\n }\n\n /**\n * @experimental\n * Load a state machine by ID\n * @param stateMachineId - The ID of the state machine to load\n * @returns true if the state machine was loaded successfully\n */\n public async stateMachineLoad(stateMachineId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('stateMachineLoad', { instanceId: this._id, stateMachineId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * @experimental\n * Load a state machine from data string\n * @param stateMachineData - The state machine data as a string\n * @returns true if the state machine was loaded successfully\n */\n public async stateMachineLoadData(stateMachineData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('stateMachineLoadData', { instanceId: this._id, stateMachineData });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * @experimental\n * Start the state machine\n * @returns true if the state machine was started successfully\n */\n public async stateMachineStart(): Promise<boolean> {\n if (!this._created) return false;\n\n const started = await this._sendMessage('stateMachineStart', { instanceId: this._id });\n\n if (started) {\n this._setupStateMachineListeners();\n await this._updateDotLottieInstanceState();\n }\n\n return started;\n }\n\n /**\n * @experimental\n * Stop the state machine\n * @returns true if the state machine was stopped successfully\n */\n public async stateMachineStop(): Promise<boolean> {\n if (!this._created) return false;\n\n this._cleanupStateMachineListeners();\n\n return this._sendMessage('stateMachineStop', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Set a numeric input value for the state machine\n * @param name - The name of the numeric input\n * @param value - The numeric value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetNumericInput(name: string, value: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetNumericInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Set a boolean input value for the state machine\n * @param name - The name of the boolean input\n * @param value - The boolean value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetBooleanInput(name: string, value: boolean): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetBooleanInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Set the state machine config\n * @param config - The state machine config\n */\n public async stateMachineSetConfig(config: StateMachineConfig | null): Promise<void> {\n if (!this._created) return;\n\n this._sendMessage('stateMachineSetConfig', { instanceId: this._id, config });\n }\n\n /**\n * @experimental\n * Set a string input value for the state machine\n * @param name - The name of the string input\n * @param value - The string value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetStringInput(name: string, value: string): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetStringInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Get a numeric input value from the state machine\n * @param name - The name of the numeric input\n * @returns The numeric value or undefined if not found\n */\n public async stateMachineGetNumericInput(name: string): Promise<number | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetNumericInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get a boolean input value from the state machine\n * @param name - The name of the boolean input\n * @returns The boolean value or undefined if not found\n */\n public async stateMachineGetBooleanInput(name: string): Promise<boolean | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetBooleanInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get a string input value from the state machine\n * @param name - The name of the string input\n * @returns The string value or undefined if not found\n */\n public async stateMachineGetStringInput(name: string): Promise<string | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetStringInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get all inputs\n * @returns All input keys, followed by their type\n */\n public async stateMachineGetInputs(): Promise<string[] | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetInputs', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Fire an event in the state machine\n * @param name - The name of the event to fire\n */\n public async stateMachineFireEvent(name: string): Promise<void> {\n if (!this._created) return;\n\n this._sendMessage('stateMachineFireEvent', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get the current status of the state machine\n * @returns The current status of the state machine as a string\n */\n public async stateMachineGetStatus(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetStatus', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Get the current state of the state machine\n * @returns The current state of the state machine as a string\n */\n public async stateMachineGetCurrentState(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetCurrentState', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Get the active state machine ID\n * @returns The active state machine ID as a string\n */\n public async stateMachineGetActiveId(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetActiveId', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Override the current state of the state machine\n * @param state - The state to override to\n * @param immediate - Whether to immediately transition to the state\n * @returns true if the state override was successful\n */\n public async stateMachineOverrideState(state: string, immediate: boolean = false): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineOverrideState', { instanceId: this._id, state, immediate });\n }\n\n /**\n * @experimental\n * Get a specific state machine by ID\n * @param stateMachineId - The ID of the state machine to get\n * @returns The state machine data as a string\n */\n public async stateMachineGet(stateMachineId: string): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGet', { instanceId: this._id, stateMachineId });\n }\n\n /**\n * @experimental\n * Get the list of state machine listeners\n * @returns Array of listener names\n */\n public async stateMachineGetListeners(): Promise<string[]> {\n if (!this._created) return [];\n\n return this._sendMessage('stateMachineGetListeners', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Post a click event to the state machine\n * @param x - The x coordinate of the click\n * @param y - The y coordinate of the click\n * @returns The event result or undefined\n */\n public async stateMachinePostClickEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostClickEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer up event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerUpEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerUpEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer down event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerDownEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerDownEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer move event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerMoveEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerMoveEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer enter event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerEnterEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerEnterEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer exit event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerExitEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerExitEvent', { instanceId: this._id, x, y });\n }\n\n private _onClick(event: MouseEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostClickEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerUpEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerDownEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerMoveEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerEnterEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerExitEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private async _setupStateMachineListeners(): Promise<void> {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n const listeners = await this._sendMessage('stateMachineGetListeners', { instanceId: this._id });\n\n if (listeners.length === 0) {\n return;\n }\n\n // Clean up any existing listeners first\n this._cleanupStateMachineListeners();\n\n if (listeners.includes('Click')) {\n this._boundOnClick = this._onClick.bind(this);\n this._canvas.addEventListener('click', this._boundOnClick);\n }\n\n if (listeners.includes('PointerUp')) {\n this._boundOnPointerUp = this._onPointerUp.bind(this);\n this._canvas.addEventListener('pointerup', this._boundOnPointerUp);\n }\n\n if (listeners.includes('PointerDown')) {\n this._boundOnPointerDown = this._onPointerDown.bind(this);\n this._canvas.addEventListener('pointerdown', this._boundOnPointerDown);\n }\n\n if (listeners.includes('PointerMove')) {\n this._boundOnPointerMove = this._onPointerMove.bind(this);\n this._canvas.addEventListener('pointermove', this._boundOnPointerMove);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._boundOnPointerEnter = this._onPointerEnter.bind(this);\n this._canvas.addEventListener('pointerenter', this._boundOnPointerEnter);\n }\n\n if (listeners.includes('PointerExit')) {\n this._boundOnPointerLeave = this._onPointerLeave.bind(this);\n this._canvas.addEventListener('pointerleave', this._boundOnPointerLeave);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._boundOnClick) {\n this._canvas.removeEventListener('click', this._boundOnClick);\n this._boundOnClick = null;\n }\n if (this._boundOnPointerUp) {\n this._canvas.removeEventListener('pointerup', this._boundOnPointerUp);\n this._boundOnPointerUp = null;\n }\n if (this._boundOnPointerDown) {\n this._canvas.removeEventListener('pointerdown', this._boundOnPointerDown);\n this._boundOnPointerDown = null;\n }\n if (this._boundOnPointerMove) {\n this._canvas.removeEventListener('pointermove', this._boundOnPointerMove);\n this._boundOnPointerMove = null;\n }\n if (this._boundOnPointerEnter) {\n this._canvas.removeEventListener('pointerenter', this._boundOnPointerEnter);\n this._boundOnPointerEnter = null;\n }\n if (this._boundOnPointerLeave) {\n this._canvas.removeEventListener('pointerleave', this._boundOnPointerLeave);\n this._boundOnPointerLeave = null;\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["DotLottieWebWorker"],"sources":["../src/animation-frame-manager.ts","../src/constants.ts","../src/core/dotlottie-player.js","../src/core/dotlottie-wasm-loader.ts","../src/event-manager.ts","../src/offscreen-observer.ts","../src/resize-observer.ts","../src/utils.ts","../src/utils/vector-char.ts","../src/dotlottie.ts","../src/worker/worker-manager.ts","../src/worker/dotlottie.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\ninterface AnimationFrameStrategy {\n cancelAnimationFrame(id: number): void;\n requestAnimationFrame(callback: (time: number) => void): number;\n}\n\nclass WebAnimationFrameStrategy implements AnimationFrameStrategy {\n public requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n cancelAnimationFrame(id);\n }\n}\n\nclass NodeAnimationFrameStrategy implements AnimationFrameStrategy {\n private _lastHandleId: number = 0;\n\n private _lastImmediate: NodeJS.Immediate | null = null;\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n if (this._lastHandleId >= Number.MAX_SAFE_INTEGER) {\n this._lastHandleId = 0;\n }\n\n this._lastHandleId += 1;\n\n this._lastImmediate = setImmediate(() => {\n callback(Date.now());\n });\n\n return this._lastHandleId;\n }\n\n public cancelAnimationFrame(_id: number): void {\n if (this._lastImmediate) {\n clearImmediate(this._lastImmediate);\n }\n }\n}\n\nexport class AnimationFrameManager {\n private readonly _strategy: AnimationFrameStrategy;\n\n public constructor() {\n this._strategy =\n typeof requestAnimationFrame === 'function' ? new WebAnimationFrameStrategy() : new NodeAnimationFrameStrategy();\n }\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n return this._strategy.requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n this._strategy.cancelAnimationFrame(id);\n }\n}\n","export const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport const MS_TO_SEC_FACTOR = 1000;\nexport const DEFAULT_BG_COLOR = '#00000000';\nexport const ZIP_SIGNATURE = new Uint8Array([0x50, 0x4b, 0x03, 0x04]);\nexport const LOTTIE_JSON_MANDATORY_FIELDS = ['v', 'ip', 'op', 'layers', 'fr', 'w', 'h'];\n\n// These values are replace during the build process with the package version and name\nexport const PACKAGE_VERSION = __PACKAGE_VERSION__;\nexport const PACKAGE_NAME = __PACKAGE_NAME__;\n\nexport const DEFAULT_DPR_FACTOR = 0.75;\n\nexport const BYTES_PER_PIXEL = 4;\n","\nvar createDotLottiePlayerModule = (() => {\n var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n \n return (\nfunction(moduleArg = {}) {\n var moduleRtn;\n\nfunction _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,\"string\");return\"symbol\"==typeof i?i:i+\"\"}function _toPrimitive(t,r){if(\"object\"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||\"default\");if(\"object\"!=typeof i)return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===r?String:Number)(t)}var k=moduleArg,aa,ba,ca=new Promise((a,b)=>{aa=a;ba=b}),fa=Object.assign({},k),ha=\"./this.program\",p=\"\",ia;\"undefined\"!=typeof document&&document.currentScript&&(p=document.currentScript.src);_scriptName&&(p=_scriptName);p.startsWith(\"blob:\")?p=\"\":p=p.substr(0,p.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1);ia=async a=>{a=await fetch(a,{credentials:\"same-origin\"});if(a.ok)return a.arrayBuffer();throw Error(a.status+\" : \"+a.url)};var t=k.printErr||console.error.bind(console);Object.assign(k,fa);fa=null;k.thisProgram&&(ha=k.thisProgram);var ja=k.wasmBinary,ka,la=!1,ma,u,x,y,z,C,D,na,oa;function pa(){var a=ka.buffer;k.HEAP8=u=new Int8Array(a);k.HEAP16=y=new Int16Array(a);k.HEAPU8=x=new Uint8Array(a);k.HEAPU16=z=new Uint16Array(a);k.HEAP32=C=new Int32Array(a);k.HEAPU32=D=new Uint32Array(a);k.HEAPF32=na=new Float32Array(a);k.HEAPF64=oa=new Float64Array(a)}var qa=[],ra=[],sa=[];function ta(){var a=k.preRun.shift();qa.unshift(a)}var F=0,G=null;function ua(a){var _k$onAbort;(_k$onAbort=k.onAbort)===null||_k$onAbort===void 0||_k$onAbort.call(k,a);a=\"Aborted(\"+a+\")\";t(a);la=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ba(a);throw a}var va=a=>a.startsWith(\"data:application/octet-stream;base64,\"),wa;async function xa(a){if(!ja)try{var b=await ia(a);return new Uint8Array(b)}catch{}if(a==wa&&ja)a=new Uint8Array(ja);else throw\"both async and sync fetching of the wasm failed\";return a}async function ya(a,b){try{var c=await xa(a);return await WebAssembly.instantiate(c,b)}catch(d){t(`failed to asynchronously prepare wasm: ${d}`),ua(d)}}async function za(a){var b=wa;if(!ja&&\"function\"==typeof WebAssembly.instantiateStreaming&&!va(b)&&\"function\"==typeof fetch)try{var c=fetch(b,{credentials:\"same-origin\"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){t(`wasm streaming compile failed: ${d}`),t(\"falling back to ArrayBuffer instantiation\")}return ya(b,a)}class Aa{constructor(a){_defineProperty(this,\"name\",\"ExitStatus\");this.message=`Program terminated with exit(${a})`;this.status=a}}var Ba=a=>{for(;0<a.length;)a.shift()(k)},Ca=k.noExitRuntime||!0,Da=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,Ea=function(){let a=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;let b=arguments.length>1&&arguments[1]!==undefined?arguments[1]:NaN;var c=x,d=a+b;for(b=a;c[b]&&!(b>=d);)++b;if(16<b-a&&c.buffer&&Da)return Da.decode(c.subarray(a,b));for(d=\"\";a<b;){var e=c[a++];if(e&128){var f=c[a++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var h=c[a++]&63;e=224==(e&240)?(e&15)<<12|f<<6|h:(e&7)<<18|f<<12|h<<6|c[a++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d};class Fa{constructor(a){this.Ca=a-24}}var Ga=0,Ha=0,H=(a,b,c)=>{var d=x;if(0<c){c=b+c-1;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var h=a.charCodeAt(++e);f=65536+((f&1023)<<10)|h&1023}if(127>=f){if(b>=c)break;d[b++]=f}else{if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6}else{if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63}d[b++]=128|f>>6&63}d[b++]=128|f&63}}d[b]=0}},Ia={},Ja=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function I(a){return this.fromWireType(D[a>>2])}var J={},K={},Ka={},L,N=(a,b,c)=>{function d(g){g=c(g);if(g.length!==a.length)throw new L(\"Mismatched type converter count\");for(var l=0;l<a.length;++l)M(a[l],g[l])}a.forEach(g=>Ka[g]=b);var e=Array(b.length),f=[],h=0;b.forEach((g,l)=>{K.hasOwnProperty(g)?e[l]=K[g]:(f.push(g),J.hasOwnProperty(g)||(J[g]=[]),J[g].push(()=>{e[l]=K[g];++h;h===f.length&&d(e)}))});0===f.length&&d(e)},La,O=a=>{for(var b=\"\";x[a];)b+=La[x[a++]];return b},P;function Ma(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var d=b.name;if(!a)throw new P(`type \"${d}\" must have a positive integer typeid pointer`);if(K.hasOwnProperty(a)){if(c.hb)return;throw new P(`Cannot register type '${d}' twice`)}K[a]=b;delete Ka[a];J.hasOwnProperty(a)&&(b=J[a],delete J[a],b.forEach(e=>e()))}function M(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};return Ma(a,b,c)}var Na=a=>{throw new P(a.Aa.Da.Ba.name+\" instance already deleted\")},Pa=!1,Qa=()=>{},Ra=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ga)return null;a=Ra(a,b,c.Ga);return null===a?null:c.$a(a)},Sa={},Ta={},Ua=(a,b)=>{if(void 0===b)throw new P(\"ptr should not be undefined\");for(;a.Ga;)b=a.Qa(b),a=a.Ga;return Ta[b]},Va=(a,b)=>{if(!b.Da||!b.Ca)throw new L(\"makeClassHandle requires ptr and ptrType\");if(!!b.Ha!==!!b.Fa)throw new L(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return Q(Object.create(a,{Aa:{value:b,writable:!0}}))},Q=a=>{if(\"undefined\"===typeof FinalizationRegistry)return Q=b=>b,a;Pa=new FinalizationRegistry(b=>{b=b.Aa;--b.count.value;0===b.count.value&&(b.Fa?b.Ha.Ka(b.Fa):b.Da.Ba.Ka(b.Ca))});Q=b=>{var c=b.Aa;c.Fa&&Pa.register(b,{Aa:c},b);return b};Qa=b=>{Pa.unregister(b)};return Q(a)},Wa=[];function Xa(){}var Ya=(a,b)=>Object.defineProperty(b,\"name\",{value:a}),Za=(a,b,c)=>{if(void 0===a[b].Ea){var d=a[b];a[b]=function(){for(var _len=arguments.length,e=new Array(_len),_key=0;_key<_len;_key++){e[_key]=arguments[_key]}if(!a[b].Ea.hasOwnProperty(e.length))throw new P(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ea})!`);return a[b].Ea[e.length].apply(this,e)};a[b].Ea=[];a[b].Ea[d.Na]=d}},$a=(a,b,c)=>{if(k.hasOwnProperty(a)){if(void 0===c||void 0!==k[a].Ea&&void 0!==k[a].Ea[c])throw new P(`Cannot register public name '${a}' twice`);Za(k,a,a);if(k[a].Ea.hasOwnProperty(c))throw new P(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);k[a].Ea[c]=b}else k[a]=b,k[a].Na=c},ab=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function bb(a,b,c,d,e,f,h,g){this.name=a;this.constructor=b;this.Ma=c;this.Ka=d;this.Ga=e;this.bb=f;this.Qa=h;this.$a=g;this.jb=[]}var cb=(a,b,c)=>{for(;b!==c;){if(!b.Qa)throw new P(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Qa(a);b=b.Ga}return a};function db(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);return 0}if(!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);return cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba)}function fb(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);if(this.Sa){var c=this.Ua();null!==a&&a.push(this.Ka,c);return c}return 0}if(!b||!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Ra&&b.Aa.Da.Ra)throw new P(`Cannot convert argument of type ${b.Aa.Ha?b.Aa.Ha.name:b.Aa.Da.name} to parameter type ${this.name}`);c=cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba);if(this.Sa){if(void 0===b.Aa.Fa)throw new P(\"Passing raw pointer to smart pointer is illegal\");switch(this.ob){case 0:if(b.Aa.Ha===this)c=b.Aa.Fa;else throw new P(`Cannot convert argument of type ${b.Aa.Ha?b.Aa.Ha.name:b.Aa.Da.name} to parameter type ${this.name}`);break;case 1:c=b.Aa.Fa;break;case 2:if(b.Aa.Ha===this)c=b.Aa.Fa;else{var d=b.clone();c=this.kb(c,gb(()=>d[\"delete\"]()));null!==a&&a.push(this.Ka,c)}break;default:throw new P(\"Unsupporting sharing policy\")}}return c}function hb(a,b){if(null===b){if(this.Ta)throw new P(`null is not a valid ${this.name}`);return 0}if(!b.Aa)throw new P(`Cannot pass \"${eb(b)}\" as a ${this.name}`);if(!b.Aa.Ca)throw new P(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Aa.Da.Ra)throw new P(`Cannot convert argument of type ${b.Aa.Da.name} to parameter type ${this.name}`);return cb(b.Aa.Ca,b.Aa.Da.Ba,this.Ba)}function ib(a,b,c,d,e,f,h,g,l,n,m){this.name=a;this.Ba=b;this.Ta=c;this.Ra=d;this.Sa=e;this.ib=f;this.ob=h;this.Ya=g;this.Ua=l;this.kb=n;this.Ka=m;e||void 0!==b.Ga?this.toWireType=fb:(this.toWireType=d?db:hb,this.Ja=null)}var jb=(a,b,c)=>{if(!k.hasOwnProperty(a))throw new L(\"Replacing nonexistent public symbol\");void 0!==k[a].Ea&&void 0!==c?k[a].Ea[c]=b:(k[a]=b,k[a].Na=c)},kb=[],lb,R=a=>{var b=kb[a];b||(a>=kb.length&&(kb.length=a+1),kb[a]=b=lb.get(a));return b},mb=function(a,b){let c=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];a.includes(\"j\")?(a=a.replace(/p/g,\"i\"),b=(0,k[\"dynCall_\"+a])(b,...c)):b=R(b)(...c);return b},nb=(a,b)=>function(){for(var _len2=arguments.length,c=new Array(_len2),_key2=0;_key2<_len2;_key2++){c[_key2]=arguments[_key2]}return mb(a,b,c)},S=(a,b)=>{a=O(a);var c=a.includes(\"j\")?nb(a,b):R(b);if(\"function\"!=typeof c)throw new P(`unknown function pointer with signature ${a}: ${b}`);return c},ob,qb=a=>{a=pb(a);var b=O(a);T(a);return b},rb=(a,b)=>{function c(f){e[f]||K[f]||(Ka[f]?Ka[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new ob(`${a}: `+d.map(qb).join([\", \"]))},sb=(a,b)=>{for(var c=[],d=0;d<a;d++)c.push(D[b+4*d>>2]);return c};function tb(a){for(var b=1;b<a.length;++b)if(null!==a[b]&&void 0===a[b].Ja)return!0;return!1}function ub(a,b,c,d,e){var f=b.length;if(2>f)throw new P(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var h=null!==b[1]&&null!==c,g=tb(b),l=\"void\"!==b[0].name,n=f-2,m=Array(n),q=[],r=[];return Ya(a,function(){for(var _len3=arguments.length,A=new Array(_len3),_key3=0;_key3<_len3;_key3++){A[_key3]=arguments[_key3]}r.length=0;q.length=h?2:1;q[0]=e;if(h){var v=b[1].toWireType(r,this);q[1]=v}for(var w=0;w<n;++w)m[w]=b[w+2].toWireType(r,A[w]),q.push(m[w]);A=d(...q);if(g)Ja(r);else for(w=h?1:2;w<b.length;w++){var E=1===w?v:m[w-2];null!==b[w].Ja&&b[w].Ja(E)}v=l?b[0].fromWireType(A):void 0;return v})}var vb=a=>{a=a.trim();const b=a.indexOf(\"(\");return-1!==b?a.substr(0,b):a},xb=[],U=[],yb=a=>{9<a&&0===--U[a+1]&&(U[a]=void 0,xb.push(a))},V=a=>{if(!a)throw new P(\"Cannot use deleted val. handle = \"+a);return U[a]},gb=a=>{switch(a){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:const b=xb.pop()||U.length;U[b]=a;U[b+1]=1;return b}},zb={name:\"emscripten::val\",fromWireType:a=>{var b=V(a);yb(a);return b},toWireType:(a,b)=>gb(b),Ia:8,readValueFromPointer:I,Ja:null},Ab=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(u[d])}:function(d){return this.fromWireType(x[d])};case 2:return c?function(d){return this.fromWireType(y[d>>1])}:function(d){return this.fromWireType(z[d>>1])};case 4:return c?function(d){return this.fromWireType(C[d>>2])}:function(d){return this.fromWireType(D[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`)}},Bb=(a,b)=>{var c=K[a];if(void 0===c)throw a=`${b} has unknown type ${qb(a)}`,new P(a);return c},eb=a=>{if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a},Cb=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(na[c>>2])};case 8:return function(c){return this.fromWireType(oa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`)}},Db=(a,b,c)=>{switch(b){case 1:return c?d=>u[d]:d=>x[d];case 2:return c?d=>y[d>>1]:d=>z[d>>1];case 4:return c?d=>C[d>>2]:d=>D[d>>2];default:throw new TypeError(`invalid integer width (${b}): ${a}`)}},Eb=Object.assign({optional:!0},zb),Fb=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-16le\"):void 0,Gb=(a,b)=>{var c=a>>1;for(var d=c+b/2;!(c>=d)&&z[c];)++c;c<<=1;if(32<c-a&&Fb)return Fb.decode(x.subarray(a,c));c=\"\";for(d=0;!(d>=b/2);++d){var e=y[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c},Hb=(a,b,c)=>{var _c;(_c=c)!==null&&_c!==void 0?_c:c=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)y[b>>1]=a.charCodeAt(e),b+=2;y[b>>1]=0;return b-d},Ib=a=>2*a.length,Jb=(a,b)=>{for(var c=0,d=\"\";!(c>=b/4);){var e=C[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},Kb=(a,b,c)=>{var _c2;(_c2=c)!==null&&_c2!==void 0?_c2:c=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var h=a.charCodeAt(++e);f=65536+((f&1023)<<10)|h&1023}C[b>>2]=f;b+=4;if(b+4>c)break}C[b>>2]=0;return b-d},Lb=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b},Mb=0,Nb=(a,b,c)=>{var d=[];a=a.toWireType(d,c);d.length&&(D[b>>2]=gb(d));return a},Ob=[],Pb=a=>{var b=Ob.length;Ob.push(a);return b},Qb=(a,b)=>{for(var c=Array(a),d=0;d<a;++d)c[d]=Bb(D[b+4*d>>2],\"parameter \"+d);return c},Rb=Reflect.construct,Sb={},Tb=a=>{if(!(a instanceof Aa||\"unwind\"==a))throw a},Ub=a=>{var _k$onExit;ma=a;Ca||0<Mb||((_k$onExit=k.onExit)!==null&&_k$onExit!==void 0&&_k$onExit.call(k,a),la=!0);throw new Aa(a)},Vb=a=>{if(!la)try{if(a(),!(Ca||0<Mb))try{ma=a=ma,Ub(a)}catch(b){Tb(b)}}catch(b){Tb(b)}},Wb={},Yb=()=>{if(!Xb){var a={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:ha||\"./this.program\"},b;for(b in Wb)void 0===Wb[b]?delete a[b]:a[b]=Wb[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Xb=c}return Xb},Xb,Zb=()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return a=>crypto.getRandomValues(a);ua(\"initRandomDevice\")},$b=a=>($b=Zb())(a);L=k.InternalError=class extends Error{constructor(a){super(a);this.name=\"InternalError\"}};for(var ac=Array(256),bc=0;256>bc;++bc)ac[bc]=String.fromCharCode(bc);La=ac;P=k.BindingError=class extends Error{constructor(a){super(a);this.name=\"BindingError\"}};Object.assign(Xa.prototype,{isAliasOf:function(a){if(!(this instanceof Xa&&a instanceof Xa))return!1;var b=this.Aa.Da.Ba,c=this.Aa.Ca;a.Aa=a.Aa;var d=a.Aa.Da.Ba;for(a=a.Aa.Ca;b.Ga;)c=b.Qa(c),b=b.Ga;for(;d.Ga;)a=d.Qa(a),d=d.Ga;return b===d&&c===a},clone:function(){this.Aa.Ca||Na(this);if(this.Aa.Pa)return this.Aa.count.value+=1,this;var a=Q,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.Aa;a=a(c.call(b,d,{Aa:{value:{count:e.count,Oa:e.Oa,Pa:e.Pa,Ca:e.Ca,Da:e.Da,Fa:e.Fa,Ha:e.Ha}}}));a.Aa.count.value+=1;a.Aa.Oa=!1;return a},[\"delete\"](){this.Aa.Ca||Na(this);if(this.Aa.Oa&&!this.Aa.Pa)throw new P(\"Object already scheduled for deletion\");Qa(this);var a=this.Aa;--a.count.value;0===a.count.value&&(a.Fa?a.Ha.Ka(a.Fa):a.Da.Ba.Ka(a.Ca));this.Aa.Pa||(this.Aa.Fa=void 0,this.Aa.Ca=void 0)},isDeleted:function(){return!this.Aa.Ca},deleteLater:function(){this.Aa.Ca||Na(this);if(this.Aa.Oa&&!this.Aa.Pa)throw new P(\"Object already scheduled for deletion\");Wa.push(this);this.Aa.Oa=!0;return this}});Object.assign(ib.prototype,{cb(a){this.Ya&&(a=this.Ya(a));return a},Wa(a){var _this$Ka;(_this$Ka=this.Ka)===null||_this$Ka===void 0||_this$Ka.call(this,a)},Ia:8,readValueFromPointer:I,fromWireType:function(a){function b(){return this.Sa?Va(this.Ba.Ma,{Da:this.ib,Ca:c,Ha:this,Fa:a}):Va(this.Ba.Ma,{Da:this,Ca:a})}var c=this.cb(a);if(!c)return this.Wa(a),null;var d=Ua(this.Ba,c);if(void 0!==d){if(0===d.Aa.count.value)return d.Aa.Ca=c,d.Aa.Fa=a,d.clone();d=d.clone();this.Wa(a);return d}d=this.Ba.bb(c);d=Sa[d];if(!d)return b.call(this);d=this.Ra?d.Za:d.pointerType;var e=Ra(c,this.Ba,d.Ba);return null===e?b.call(this):this.Sa?Va(d.Ba.Ma,{Da:d,Ca:e,Ha:this,Fa:a}):Va(d.Ba.Ma,{Da:d,Ca:e})}});ob=k.UnboundTypeError=((a,b)=>{var c=Ya(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,\"UnboundTypeError\");U.push(0,1,void 0,1,null,1,!0,1,!1,1);k.count_emval_handles=()=>U.length/2-5-xb.length;var nc={d:(a,b,c,d)=>ua(`Assertion failed: ${a?Ea(a):\"\"}, at: `+[b?b?Ea(b):\"\":\"unknown filename\",c,d?d?Ea(d):\"\":\"unknown function\"]),p:(a,b,c)=>{var d=new Fa(a);D[d.Ca+16>>2]=0;D[d.Ca+4>>2]=b;D[d.Ca+8>>2]=c;Ga=a;Ha++;throw Ga},S:()=>{},P:()=>{},Q:()=>{},U:function(){},R:()=>{},X:()=>ua(\"\"),C:a=>{var b=Ia[a];delete Ia[a];var c=b.Ua,d=b.Ka,e=b.Xa,f=e.map(h=>h.gb).concat(e.map(h=>h.mb));N([a],f,h=>{var g={};e.forEach((l,n)=>{var m=h[n],q=l.eb,r=l.fb,A=h[n+e.length],v=l.lb,w=l.nb;g[l.ab]={read:E=>m.fromWireType(q(r,E)),write:(E,da)=>{var B=[];v(w,E,A.toWireType(B,da));Ja(B)}}});return[{name:b.name,fromWireType:l=>{var n={},m;for(m in g)n[m]=g[m].read(l);d(l);return n},toWireType:(l,n)=>{for(var m in g)if(!(m in n))throw new TypeError(`Missing field: \"${m}\"`);var q=c();for(m in g)g[m].write(q,n[m]);null!==l&&l.push(d,q);return q},Ia:8,readValueFromPointer:I,Ja:d}]})},I:()=>{},ba:(a,b,c,d)=>{b=O(b);M(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},Ia:8,readValueFromPointer:function(e){return this.fromWireType(x[e])},Ja:null})},o:(a,b,c,d,e,f,h,g,l,n,m,q,r)=>{m=O(m);f=S(e,f);g&&(g=S(h,g));n&&(n=S(l,n));r=S(q,r);var A=ab(m);$a(A,function(){rb(`Cannot construct ${m} due to unbound types`,[d])});N([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Ba;var E=w.Ma}else E=Xa.prototype;v=Ya(m,function(){if(Object.getPrototypeOf(this)!==da)throw new P(\"Use 'new' to construct \"+m);if(void 0===B.La)throw new P(m+\" has no accessible constructor\");for(var _len4=arguments.length,Oa=new Array(_len4),_key4=0;_key4<_len4;_key4++){Oa[_key4]=arguments[_key4]}var wb=B.La[Oa.length];if(void 0===wb)throw new P(`Tried to invoke ctor of ${m} with invalid number of parameters (${Oa.length}) - expected (${Object.keys(B.La).toString()}) parameters instead!`);return wb.apply(this,Oa)});var da=Object.create(E,{constructor:{value:v}});v.prototype=da;var B=new bb(m,v,da,r,w,f,g,n);if(B.Ga){var _ea$Va;var ea;(_ea$Va=(ea=B.Ga).Va)!==null&&_ea$Va!==void 0?_ea$Va:ea.Va=[];B.Ga.Va.push(B)}w=new ib(m,B,!0,!1,!1);ea=new ib(m+\"*\",B,!1,!1,!1);E=new ib(m+\" const*\",B,!1,!0,!1);Sa[a]={pointerType:ea,Za:E};jb(A,v);return[w,ea,E]})},w:(a,b,c,d,e,f)=>{var h=sb(b,c);e=S(d,e);N([],[a],g=>{g=g[0];var l=`constructor ${g.name}`;void 0===g.Ba.La&&(g.Ba.La=[]);if(void 0!==g.Ba.La[b-1])throw new P(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${g.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);g.Ba.La[b-1]=()=>{rb(`Cannot construct ${g.name} due to unbound types`,h)};N([],h,n=>{n.splice(1,0,null);g.Ba.La[b-1]=ub(l,n,null,e,f);return[]});return[]})},a:(a,b,c,d,e,f,h,g)=>{var l=sb(c,d);b=O(b);b=vb(b);f=S(e,f);N([],[a],n=>{function m(){rb(`Cannot call ${q} due to unbound types`,l)}n=n[0];var q=`${n.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);g&&n.Ba.jb.push(b);var r=n.Ba.Ma,A=r[b];void 0===A||void 0===A.Ea&&A.className!==n.name&&A.Na===c-2?(m.Na=c-2,m.className=n.name,r[b]=m):(Za(r,b,q),r[b].Ea[c-2]=m);N([],l,v=>{v=ub(q,v,n,f,h);void 0===r[b].Ea?(v.Na=c-2,r[b]=v):r[b].Ea[c-2]=v;return[]});return[]})},$:a=>M(a,zb),H:(a,b,c,d)=>{function e(){}b=O(b);e.values={};M(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,h)=>h.value,Ia:8,readValueFromPointer:Ab(b,c,d),Ja:null});$a(b,e)},s:(a,b,c)=>{var d=Bb(a,\"enum\");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Ya(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},F:(a,b,c)=>{b=O(b);M(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,Ia:8,readValueFromPointer:Cb(b,c),Ja:null})},z:(a,b,c,d,e,f)=>{var h=sb(b,c);a=O(a);a=vb(a);e=S(d,e);$a(a,function(){rb(`Cannot call ${a} due to unbound types`,h)},b-1);N([],h,g=>{jb(a,ub(a,[g[0],null].concat(g.slice(1)),null,e,f),b-1);return[]})},v:(a,b,c,d,e)=>{b=O(b);-1===e&&(e=4294967295);e=g=>g;if(0===d){var f=32-8*c;e=g=>g<<f>>>f}var h=b.includes(\"unsigned\")?function(g,l){return l>>>0}:function(g,l){return l};M(a,{name:b,fromWireType:e,toWireType:h,Ia:8,readValueFromPointer:Db(b,c,0!==d),Ja:null})},l:(a,b,c)=>{function d(f){return new e(u.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);M(a,{name:c,fromWireType:d,Ia:8,readValueFromPointer:d},{hb:!0})},q:a=>{M(a,Eb)},B:(a,b,c,d,e,f,h,g,l,n,m,q)=>{c=O(c);f=S(e,f);g=S(h,g);n=S(l,n);q=S(m,q);N([a],[b],r=>{r=r[0];return[new ib(c,r.Ba,!1,!1,!0,r,d,f,g,n,q)]})},aa:(a,b)=>{b=O(b);M(a,{name:b,fromWireType:function(c){for(var d=D[c>>2],e=c+4,f,h=e,g=0;g<=d;++g){var l=e+g;if(g==d||0==x[l])h=h?Ea(h,l-h):\"\",void 0===f?f=h:(f+=String.fromCharCode(0),f+=h),h=l+1}T(c);return f},toWireType:function(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e,f=\"string\"==typeof d;if(!(f||d instanceof Uint8Array||d instanceof Uint8ClampedArray||d instanceof Int8Array))throw new P(\"Cannot pass non-string to std::string\");if(f)for(var h=e=0;h<d.length;++h){var g=d.charCodeAt(h);127>=g?e++:2047>=g?e+=2:55296<=g&&57343>=g?(e+=4,++h):e+=3}else e=d.length;h=cc(4+e+1);g=h+4;D[h>>2]=e;if(f)H(d,g,e+1);else if(f)for(f=0;f<e;++f){var l=d.charCodeAt(f);if(255<l)throw T(g),new P(\"String has UTF-16 code units that do not fit in 8 bits\");x[g+f]=l}else for(f=0;f<e;++f)x[g+f]=d[f];null!==c&&c.push(T,h);return h},Ia:8,readValueFromPointer:I,Ja(c){T(c)}})},E:(a,b,c)=>{c=O(c);if(2===b){var d=Gb;var e=Hb;var f=Ib;var h=g=>z[g>>1]}else 4===b&&(d=Jb,e=Kb,f=Lb,h=g=>D[g>>2]);M(a,{name:c,fromWireType:g=>{for(var l=D[g>>2],n,m=g+4,q=0;q<=l;++q){var r=g+4+q*b;if(q==l||0==h(r))m=d(m,r-m),void 0===n?n=m:(n+=String.fromCharCode(0),n+=m),m=r+b}T(g);return n},toWireType:(g,l)=>{if(\"string\"!=typeof l)throw new P(`Cannot pass non-string to C++ string type ${c}`);var n=f(l),m=cc(4+n+b);D[m>>2]=n/b;e(l,m+4,n+b);null!==g&&g.push(T,m);return m},Ia:8,readValueFromPointer:I,Ja(g){T(g)}})},D:(a,b,c,d,e,f)=>{Ia[a]={name:O(b),Ua:S(c,d),Ka:S(e,f),Xa:[]}},k:(a,b,c,d,e,f,h,g,l,n)=>{Ia[a].Xa.push({ab:O(b),gb:c,eb:S(d,e),fb:f,mb:h,lb:S(g,l),nb:n})},ca:(a,b)=>{b=O(b);M(a,{pb:!0,name:b,Ia:0,fromWireType:()=>{},toWireType:()=>{}})},V:(a,b,c)=>x.copyWithin(a,b,b+c),N:()=>{Ca=!1;Mb=0},L:()=>{throw Infinity},A:(a,b,c)=>{a=V(a);b=Bb(b,\"emval::as\");return Nb(b,c,a)},u:(a,b,c,d)=>{a=Ob[a];b=V(b);return a(null,b,c,d)},e:yb,x:(a,b)=>{a=V(a);b=V(b);return a==b},t:(a,b,c)=>{var d=Qb(a,b),e=d.shift();a--;var f=Array(a);b=`methodCaller<(${d.map(h=>h.name).join(\", \")}) => ${e.name}>`;return Pb(Ya(b,(h,g,l,n)=>{for(var m=0,q=0;q<a;++q)f[q]=d[q].readValueFromPointer(n+m),m+=d[q].Ia;h=1===c?Rb(g,f):g.apply(h,f);return Nb(e,l,h)}))},f:a=>{9<a&&(U[a+1]+=1)},n:a=>{var b=V(a);Ja(b);yb(a)},i:(a,b)=>{a=Bb(a,\"_emval_take_value\");a=a.readValueFromPointer(b);return gb(a)},J:(a,b)=>{Sb[a]&&(clearTimeout(Sb[a].id),delete Sb[a]);if(!b)return 0;var c=setTimeout(()=>{delete Sb[a];Vb(()=>dc(a,performance.now()))},b);Sb[a]={id:c,qb:b};return 0},K:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=new Date(e,0,1).getTimezoneOffset();e=new Date(e,6,1).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);C[b>>2]=Number(f!=e);b=h=>{var g=Math.abs(h);return`UTC${0<=h?\"-\":\"+\"}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`};a=b(f);b=b(e);e<f?(H(a,c,17),H(b,d,17)):(H(a,d,17),H(b,c,17))},m:()=>performance.now(),M:a=>{var b=x.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-ka.buffer.byteLength+65535)/65536|0;try{ka.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Z:(a,b)=>{var c=0;Yb().forEach((d,e)=>{var f=b+c;e=D[a+4*e>>2]=f;for(f=0;f<d.length;++f)u[e++]=d.charCodeAt(f);u[e]=0;c+=d.length+1});return 0},_:(a,b)=>{var c=Yb();D[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);D[b>>2]=d;return 0},W:()=>52,T:()=>52,r:ec,j:fc,g:gc,G:hc,da:ic,b:jc,c:kc,h:lc,y:mc,Y:Ub,O:(a,b)=>{$b(x.subarray(a,a+b));return 0}},W;(async function(_k$monitorRunDependen2,_wa){function a(d){var _k$monitorRunDependen;W=d.exports;ka=W.ea;pa();lb=W.ha;ra.unshift(W.fa);F--;(_k$monitorRunDependen=k.monitorRunDependencies)===null||_k$monitorRunDependen===void 0||_k$monitorRunDependen.call(k,F);0==F&&G&&(d=G,G=null,d());return W}F++;(_k$monitorRunDependen2=k.monitorRunDependencies)===null||_k$monitorRunDependen2===void 0||_k$monitorRunDependen2.call(k,F);var b={a:nc};if(k.instantiateWasm)try{return k.instantiateWasm(b,a)}catch(d){t(`Module.instantiateWasm callback failed with error: ${d}`),ba(d)}(_wa=wa)!==null&&_wa!==void 0?_wa:wa=va(\"DotLottiePlayer.wasm\")?\"DotLottiePlayer.wasm\":k.locateFile?k.locateFile(\"DotLottiePlayer.wasm\",p):p+\"DotLottiePlayer.wasm\";try{var c=await za(b);a(c.instance);return c}catch(d){ba(d)}})();var cc=a=>(cc=W.ga)(a),T=a=>(T=W.ia)(a),pb=a=>(pb=W.ja)(a),dc=(a,b)=>(dc=W.ka)(a,b),X=(a,b)=>(X=W.la)(a,b),Y=a=>(Y=W.ma)(a),Z=()=>(Z=W.na)();k.dynCall_jiii=(a,b,c,d)=>(k.dynCall_jiii=W.oa)(a,b,c,d);k.dynCall_vjii=(a,b,c,d,e)=>(k.dynCall_vjii=W.pa)(a,b,c,d,e);k.dynCall_vjfii=(a,b,c,d,e,f)=>(k.dynCall_vjfii=W.qa)(a,b,c,d,e,f);k.dynCall_vjiii=(a,b,c,d,e,f)=>(k.dynCall_vjiii=W.ra)(a,b,c,d,e,f);k.dynCall_vj=(a,b,c)=>(k.dynCall_vj=W.sa)(a,b,c);k.dynCall_vjiiiii=(a,b,c,d,e,f,h,g)=>(k.dynCall_vjiiiii=W.ta)(a,b,c,d,e,f,h,g);k.dynCall_vjiffii=(a,b,c,d,e,f,h,g)=>(k.dynCall_vjiffii=W.ua)(a,b,c,d,e,f,h,g);k.dynCall_vjiiii=(a,b,c,d,e,f,h)=>(k.dynCall_vjiiii=W.va)(a,b,c,d,e,f,h);k.dynCall_viijii=(a,b,c,d,e,f,h)=>(k.dynCall_viijii=W.wa)(a,b,c,d,e,f,h);k.dynCall_iiiiij=(a,b,c,d,e,f,h)=>(k.dynCall_iiiiij=W.xa)(a,b,c,d,e,f,h);k.dynCall_iiiiijj=(a,b,c,d,e,f,h,g,l)=>(k.dynCall_iiiiijj=W.ya)(a,b,c,d,e,f,h,g,l);k.dynCall_iiiiiijj=(a,b,c,d,e,f,h,g,l,n)=>(k.dynCall_iiiiiijj=W.za)(a,b,c,d,e,f,h,g,l,n);function ec(a,b){var c=Z();try{return R(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function hc(a,b,c,d,e,f){var h=Z();try{return R(a)(b,c,d,e,f)}catch(g){Y(h);if(g!==g+0)throw g;X(1,0)}}function jc(a,b){var c=Z();try{R(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function lc(a,b,c,d){var e=Z();try{R(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function fc(a,b,c){var d=Z();try{return R(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}}function kc(a,b,c){var d=Z();try{R(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}}function ic(a){var b=Z();try{R(a)()}catch(c){Y(b);if(c!==c+0)throw c;X(1,0)}}function gc(a,b,c,d){var e=Z();try{return R(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function mc(a,b,c,d,e){var f=Z();try{R(a)(b,c,d,e)}catch(h){Y(f);if(h!==h+0)throw h;X(1,0)}}var oc;G=function pc(){oc||qc();oc||(G=pc)};function qc(){function a(){if(!oc&&(oc=!0,k.calledRun=!0,!la)){var _k$onRuntimeInitializ;Ba(ra);aa(k);(_k$onRuntimeInitializ=k.onRuntimeInitialized)===null||_k$onRuntimeInitializ===void 0||_k$onRuntimeInitializ.call(k);if(k.postRun)for(\"function\"==typeof k.postRun&&(k.postRun=[k.postRun]);k.postRun.length;){var b=k.postRun.shift();sa.unshift(b)}Ba(sa)}}if(!(0<F)){if(k.preRun)for(\"function\"==typeof k.preRun&&(k.preRun=[k.preRun]);k.preRun.length;)ta();Ba(qa);0<F||(k.setStatus?(k.setStatus(\"Running...\"),setTimeout(()=>{setTimeout(()=>k.setStatus(\"\"),1);a()},1)):a())}}if(k.preInit)for(\"function\"==typeof k.preInit&&(k.preInit=[k.preInit]);0<k.preInit.length;)k.preInit.pop()();qc();moduleRtn=ca;\n\n\n return moduleRtn;\n}\n);\n})();\nexport default createDotLottiePlayerModule;\n","import { PACKAGE_NAME, PACKAGE_VERSION } from '../constants';\n\nimport createDotLottiePlayerModule from './dotlottie-player';\nimport type { MainModule } from './dotlottie-player.types';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class DotLottieWasmLoader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private static _ModulePromise: Promise<MainModule> | null = null;\n\n // URL for the WASM file, constructed using package information\n private static _wasmURL =\n `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n private constructor() {\n throw new Error('RendererLoader is a static class and cannot be instantiated.');\n }\n\n private static async _tryLoad(url: string): Promise<MainModule> {\n const module = await createDotLottiePlayerModule({ locateFile: () => url });\n\n return module;\n }\n\n /**\n * Tries to load the WASM module from the primary URL, falling back to a backup URL if necessary.\n * Throws an error if both URLs fail to load the module.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n private static async _loadWithBackup(): Promise<MainModule> {\n if (!DotLottieWasmLoader._ModulePromise) {\n DotLottieWasmLoader._ModulePromise = DotLottieWasmLoader._tryLoad(DotLottieWasmLoader._wasmURL).catch(\n async (initialError): Promise<MainModule> => {\n const backupUrl = `https://unpkg.com/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n console.warn(\n `Primary WASM load failed from ${DotLottieWasmLoader._wasmURL}. Error: ${(initialError as Error).message}`,\n );\n console.warn(`Attempting to load WASM from backup URL: ${backupUrl}`);\n\n try {\n return await DotLottieWasmLoader._tryLoad(backupUrl);\n } catch (backupError) {\n console.error(`Primary WASM URL failed: ${(initialError as Error).message}`);\n console.error(`Backup WASM URL failed: ${(backupError as Error).message}`);\n throw new Error('WASM loading failed from all sources.');\n }\n },\n );\n }\n\n return DotLottieWasmLoader._ModulePromise;\n }\n\n /**\n * Public method to load the WebAssembly module.\n * Utilizes a primary and backup URL for robustness.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n public static async load(): Promise<MainModule> {\n return DotLottieWasmLoader._loadWithBackup();\n }\n\n /**\n * Sets a new URL for the WASM file and invalidates the current module promise.\n *\n * @param string - The new URL for the WASM file.\n */\n public static setWasmUrl(url: string): void {\n if (url === DotLottieWasmLoader._wasmURL) return;\n\n DotLottieWasmLoader._wasmURL = url;\n // Invalidate current module promise\n DotLottieWasmLoader._ModulePromise = null;\n }\n}\n","/**\n * Represents the different types of events that can be dispatched.\n */\nexport type EventType =\n | 'complete'\n | 'frame'\n | 'load'\n | 'loadError'\n | 'renderError'\n | 'loop'\n | 'pause'\n | 'play'\n | 'stop'\n | 'destroy'\n | 'freeze'\n | 'unfreeze'\n | 'render'\n | 'ready'\n | 'stateMachineStart'\n | 'stateMachineStop'\n | 'stateMachineTransition'\n | 'stateMachineStateEntered'\n | 'stateMachineStateExit'\n | 'stateMachineCustomEvent'\n | 'stateMachineError'\n | 'stateMachineBooleanInputValueChange'\n | 'stateMachineNumericInputValueChange'\n | 'stateMachineStringInputValueChange'\n | 'stateMachineInputFired'\n | 'stateMachineInternalMessage';\n\n/**\n * Maps an event type string to its respective event interface.\n */\ntype EventByType<T extends EventType> = Extract<Event, { type: T }>;\n\n/**\n * Base interface for all events.\n */\nexport interface BaseEvent {\n type: EventType;\n}\n\nexport interface RenderEvent extends BaseEvent {\n currentFrame: number;\n type: 'render';\n}\n\nexport interface FreezeEvent extends BaseEvent {\n type: 'freeze';\n}\n\nexport interface UnfreezeEvent extends BaseEvent {\n type: 'unfreeze';\n}\n\n/*\n * Event fired when a destroy action occurs.\n */\nexport interface DestroyEvent extends BaseEvent {\n type: 'destroy';\n}\n\n/**\n * Event fired when a loop action occurs.\n */\nexport interface LoopEvent extends BaseEvent {\n loopCount: number;\n type: 'loop';\n}\n\n/**\n * Event fired during frame changes.\n */\nexport interface FrameEvent extends BaseEvent {\n currentFrame: number;\n type: 'frame';\n}\n\n/**\n * Event fired when a load action occurs.\n */\nexport interface LoadEvent extends BaseEvent {\n type: 'load';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface LoadErrorEvent extends BaseEvent {\n error: Error;\n type: 'loadError';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface RenderErrorEvent extends BaseEvent {\n error: Error;\n type: 'renderError';\n}\n\n/**\n * Event fired when a completion action occurs.\n */\nexport interface CompleteEvent extends BaseEvent {\n type: 'complete';\n}\n\n/**\n * Event fired when a pause action occurs.\n */\nexport interface PauseEvent extends BaseEvent {\n type: 'pause';\n}\n\n/**\n * Event fired when a play action occurs.\n */\nexport interface PlayEvent extends BaseEvent {\n type: 'play';\n}\n\n/**\n * Event fired when a stop action occurs.\n */\nexport interface StopEvent extends BaseEvent {\n type: 'stop';\n}\n\n/**\n * Event fired when a WASM module is initialized and ready.\n */\nexport interface ReadyEvent extends BaseEvent {\n type: 'ready';\n}\n\nexport interface StateMachineStartEvent extends BaseEvent {\n type: 'stateMachineStart';\n}\n\nexport interface StateMachineStopEvent extends BaseEvent {\n type: 'stateMachineStop';\n}\n\nexport interface StateMachineTransitionEvent extends BaseEvent {\n fromState: string;\n toState: string;\n type: 'stateMachineTransition';\n}\n\nexport interface StateMachineStateEnteredEvent extends BaseEvent {\n state: string;\n type: 'stateMachineStateEntered';\n}\n\nexport interface StateMachineStateExitEvent extends BaseEvent {\n state: string;\n type: 'stateMachineStateExit';\n}\n\nexport interface StateMachineCustomEvent extends BaseEvent {\n eventName: string;\n type: 'stateMachineCustomEvent';\n}\n\nexport interface StateMachineErrorEvent extends BaseEvent {\n error: string;\n type: 'stateMachineError';\n}\n\nexport interface StateMachineBooleanInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: boolean;\n oldValue: boolean;\n type: 'stateMachineBooleanInputValueChange';\n}\n\nexport interface StateMachineNumericInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: number;\n oldValue: number;\n type: 'stateMachineNumericInputValueChange';\n}\n\nexport interface StateMachineStringInputValueChangeEvent extends BaseEvent {\n inputName: string;\n newValue: string;\n oldValue: string;\n type: 'stateMachineStringInputValueChange';\n}\n\nexport interface StateMachineInputFiredEvent extends BaseEvent {\n inputName: string;\n type: 'stateMachineInputFired';\n}\n\nexport interface StateMachineInternalMessage extends BaseEvent {\n message: string;\n type: 'stateMachineInternalMessage';\n}\n\n/**\n * Type representing all possible event types.\n */\nexport type Event =\n | LoopEvent\n | FrameEvent\n | LoadEvent\n | LoadErrorEvent\n | RenderErrorEvent\n | CompleteEvent\n | PauseEvent\n | PlayEvent\n | StopEvent\n | DestroyEvent\n | FreezeEvent\n | UnfreezeEvent\n | RenderEvent\n | ReadyEvent\n | StateMachineStartEvent\n | StateMachineStopEvent\n | StateMachineTransitionEvent\n | StateMachineStateEnteredEvent\n | StateMachineStateExitEvent\n | StateMachineCustomEvent\n | StateMachineErrorEvent\n | StateMachineBooleanInputValueChangeEvent\n | StateMachineNumericInputValueChangeEvent\n | StateMachineStringInputValueChangeEvent\n | StateMachineInputFiredEvent\n | StateMachineInternalMessage;\n\nexport type EventListener<T extends EventType> = (event: EventByType<T>) => void;\n\n/**\n * Manages registration and dispatching of event listeners.\n */\nexport class EventManager {\n private readonly _eventListeners: Map<EventType, Set<EventListener<EventType>>> = new Map();\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n let listeners = this._eventListeners.get(type);\n\n if (!listeners) {\n listeners = new Set<EventListener<EventType>>();\n this._eventListeners.set(type, listeners);\n }\n\n listeners.add(listener as unknown as EventListener<EventType>);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n const listeners = this._eventListeners.get(type);\n\n if (!listeners) return;\n\n if (listener) {\n listeners.delete(listener as unknown as EventListener<EventType>);\n\n if (listeners.size === 0) {\n this._eventListeners.delete(type);\n }\n } else {\n this._eventListeners.delete(type);\n }\n }\n\n public dispatch<T extends EventType>(event: EventByType<T>): void {\n const listeners = this._eventListeners.get(event.type);\n\n listeners?.forEach((listener) => listener(event));\n }\n\n public removeAllEventListeners(): void {\n this._eventListeners.clear();\n }\n}\n","import type { DotLottie } from './dotlottie';\nimport type { DotLottieWorker } from './worker/dotlottie';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class OffscreenObserver {\n private static _observer: IntersectionObserver | null = null;\n\n private static readonly _observedCanvases = new Map<HTMLCanvasElement, DotLottie | DotLottieWorker>();\n\n private static _initializeObserver(): void {\n if (OffscreenObserver._observer) return;\n\n const intersectionObserverCallback = (entries: IntersectionObserverEntry[]): void => {\n entries.forEach((entry) => {\n const instance = OffscreenObserver._observedCanvases.get(entry.target as HTMLCanvasElement);\n\n if (instance) {\n if (entry.isIntersecting) {\n instance.unfreeze();\n } else {\n instance.freeze();\n }\n }\n });\n };\n\n OffscreenObserver._observer = new IntersectionObserver(intersectionObserverCallback, {\n threshold: 0,\n });\n }\n\n public static observe(canvas: HTMLCanvasElement, dotLottieInstance: DotLottie | DotLottieWorker): void {\n OffscreenObserver._initializeObserver();\n\n if (OffscreenObserver._observedCanvases.has(canvas)) return;\n\n OffscreenObserver._observedCanvases.set(canvas, dotLottieInstance);\n OffscreenObserver._observer?.observe(canvas);\n }\n\n public static unobserve(canvas: HTMLCanvasElement): void {\n OffscreenObserver._observer?.unobserve(canvas);\n OffscreenObserver._observedCanvases.delete(canvas);\n\n if (OffscreenObserver._observedCanvases.size === 0) {\n OffscreenObserver._observer?.disconnect();\n OffscreenObserver._observer = null;\n }\n }\n}\n","import type { DotLottie } from './dotlottie';\nimport type { DotLottieWorker } from './worker/dotlottie';\n\nexport const RESIZE_DEBOUNCE_TIME = 100;\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class CanvasResizeObserver {\n private static _observer: ResizeObserver | null = null;\n\n private static readonly _observedCanvases = new Map<HTMLCanvasElement, [DotLottie | DotLottieWorker, number]>();\n\n private static _initializeObserver(): void {\n if (CanvasResizeObserver._observer) return;\n\n const resizeHandler = (entries: ResizeObserverEntry[]): void => {\n entries.forEach((entry) => {\n const element = CanvasResizeObserver._observedCanvases.get(entry.target as HTMLCanvasElement);\n\n if (!element) return;\n\n const [dotLottieInstance, timeout] = element;\n\n clearTimeout(timeout);\n\n const newTimeout = setTimeout(() => {\n dotLottieInstance.resize();\n }, RESIZE_DEBOUNCE_TIME) as unknown as number;\n\n CanvasResizeObserver._observedCanvases.set(entry.target as HTMLCanvasElement, [dotLottieInstance, newTimeout]);\n });\n };\n\n CanvasResizeObserver._observer = new ResizeObserver(resizeHandler);\n }\n\n public static observe(canvas: HTMLCanvasElement, dotLottieInstance: DotLottie | DotLottieWorker): void {\n CanvasResizeObserver._initializeObserver();\n\n if (CanvasResizeObserver._observedCanvases.has(canvas)) return;\n\n CanvasResizeObserver._observedCanvases.set(canvas, [dotLottieInstance, 0]);\n CanvasResizeObserver._observer?.observe(canvas);\n }\n\n public static unobserve(canvas: HTMLCanvasElement): void {\n const element = CanvasResizeObserver._observedCanvases.get(canvas);\n\n if (element) {\n const timeoutId = element[1];\n\n if (timeoutId) clearTimeout(timeoutId);\n }\n\n CanvasResizeObserver._observer?.unobserve(canvas);\n CanvasResizeObserver._observedCanvases.delete(canvas);\n\n if (!CanvasResizeObserver._observedCanvases.size && CanvasResizeObserver._observer) {\n CanvasResizeObserver._observer.disconnect();\n CanvasResizeObserver._observer = null;\n }\n }\n}\n","import { DEFAULT_DPR_FACTOR, IS_BROWSER, LOTTIE_JSON_MANDATORY_FIELDS, ZIP_SIGNATURE } from './constants';\n\n/**\n * Validates if a string is a valid hex color in #RRGGBB or #RRGGBBAA format.\n * @param color - Color string to validate\n * @returns True if valid hex color format, false otherwise\n */\nexport function isHexColor(color: string): boolean {\n return /^#([\\da-f]{6}|[\\da-f]{8})$/iu.test(color);\n}\n\n/**\n * Converts a hex color string to an RGBA integer for WASM consumption.\n * Adds full opacity (alpha = 255, 0xFF in hex) if alpha channel is not specified.\n * @param colorHex - Hex color string (e.g., '#FFFFFF' or '#FFFFFFFF')\n * @returns RGBA value as a 32-bit integer, or 0 if invalid hex color\n */\nexport function hexStringToRGBAInt(colorHex: string): number {\n if (!isHexColor(colorHex)) {\n return 0;\n }\n\n let hex = colorHex.replace('#', '');\n\n // Add alpha if it's not included\n hex = hex.length === 6 ? `${hex}ff` : hex;\n\n return parseInt(hex, 16);\n}\n\n/**\n * Detects if file data is a .lottie file by checking for ZIP signature.\n * dotLottie files are ZIP archives containing Lottie JSON and metadata.\n * @param fileData - Raw file data as ArrayBuffer\n * @returns True if data starts with ZIP signature, false otherwise\n */\nexport function isDotLottie(fileData: ArrayBuffer): boolean {\n if (fileData.byteLength < 4) {\n return false;\n }\n\n const fileSignature = new Uint8Array(fileData.slice(0, ZIP_SIGNATURE.byteLength));\n\n for (let i = 0; i < ZIP_SIGNATURE.length; i += 1) {\n if (ZIP_SIGNATURE[i] !== fileSignature[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns whether the given object looks like a valid Lottie JSON structure.\n */\nexport function isLottieJSON(json: Record<string, unknown>): boolean {\n return LOTTIE_JSON_MANDATORY_FIELDS.every((field) => Object.hasOwn(json, field));\n}\n\n/**\n * Detects if data is a valid Lottie animation by checking for required JSON fields.\n * Accepts either a JSON string or a parsed object.\n * @param fileData - Lottie data as JSON string or parsed object\n * @returns True if data contains required Lottie fields, false otherwise\n */\nexport function isLottie(fileData: string | Record<string, unknown>): boolean {\n if (typeof fileData === 'string') {\n try {\n return isLottieJSON(JSON.parse(fileData));\n } catch (_e) {\n return false;\n }\n } else {\n return isLottieJSON(fileData);\n }\n}\n\n/**\n * Calculates the default device pixel ratio with a scaling factor.\n * Applies a factor to balance quality and performance on high-DPI displays.\n * @returns Adjusted device pixel ratio value\n */\nexport function getDefaultDPR(): number {\n const dpr = IS_BROWSER ? window.devicePixelRatio : 1;\n\n return 1 + (dpr - 1) * DEFAULT_DPR_FACTOR;\n}\n\n/**\n * Checks if an HTML element is currently visible within the browser viewport.\n * Used to determine when to freeze/unfreeze rendering for performance optimization.\n * @param element - HTMLElement to check visibility for\n * @returns True if element is at least partially visible in viewport, false otherwise\n */\nexport function isElementInViewport(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n\n return !(rect.bottom < 0 || rect.top > viewportHeight || rect.right < 0 || rect.left > viewportWidth);\n}\n\n/**\n * Calculate pointer position relative to the canvas coordinate system\n * @param event - The mouse or pointer event (target should be the canvas element)\n * @returns The calculated position or null if calculation fails or target is not a valid canvas\n */\nexport function getPointerPosition(event: MouseEvent | PointerEvent): { x: number; y: number } | null {\n const canvas = event.target;\n\n if (canvas instanceof HTMLCanvasElement) {\n const rect = canvas.getBoundingClientRect();\n\n if (rect.width === 0 || rect.height === 0 || canvas.width === 0 || canvas.height === 0) {\n return null;\n }\n\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n const x = (event.clientX - rect.left) * scaleX;\n const y = (event.clientY - rect.top) * scaleY;\n\n if (!Number.isFinite(x) || !Number.isFinite(y) || Number.isNaN(x) || Number.isNaN(y)) {\n return null;\n }\n\n return { x, y };\n }\n\n // Return null if target is not an HTMLCanvasElement or calculation fails\n return null;\n}\n\nexport function handleOpenUrl(message: string): void {\n const content = message.replace('OpenUrl: ', '');\n\n const targetSeparatorIndex = content.indexOf(' | Target: ');\n let urlToOpen: string;\n let target: string;\n\n if (targetSeparatorIndex === -1) {\n // Format: \"OpenUrl: {url}\"\n urlToOpen = content;\n target = '_blank';\n } else {\n // Format: \"OpenUrl: {url} | Target: {target}\"\n urlToOpen = content.substring(0, targetSeparatorIndex);\n target = content.substring(targetSeparatorIndex + ' | Target: '.length);\n }\n\n window.open(urlToOpen, target);\n}\n","import type { MainModule, VectorChar } from '../core/dotlottie-player.types';\n\nexport const toVectorChar = (module: MainModule, data: ArrayBuffer): VectorChar => {\n const vectorChar = new module.VectorChar();\n\n const uint8Array = new Uint8Array(data);\n\n for (let i = 0; i < uint8Array.length; i += 1) {\n const byte = uint8Array[i];\n\n if (byte !== undefined && typeof byte === 'number') {\n vectorChar.push_back(byte);\n }\n }\n\n return vectorChar;\n};\n","/* eslint-disable no-warning-comments */\nimport { AnimationFrameManager } from './animation-frame-manager';\nimport { BYTES_PER_PIXEL, IS_BROWSER } from './constants';\nimport type {\n Fit as CoreFit,\n Mode as CoreMode,\n DotLottiePlayer,\n MainModule,\n Marker,\n Observer,\n StateMachineInternalObserver,\n StateMachineObserver,\n VectorFloat,\n} from './core';\nimport { DotLottieWasmLoader } from './core';\nimport type { EventListener, EventType } from './event-manager';\nimport { EventManager } from './event-manager';\nimport { OffscreenObserver } from './offscreen-observer';\nimport { CanvasResizeObserver } from './resize-observer';\nimport type {\n ColorSlotValue,\n Config,\n Data,\n Fit,\n GradientSlotValue,\n Layout,\n Manifest,\n Mode,\n RenderConfig,\n RenderSurface,\n ScalarSlotValue,\n SlotType,\n StateMachineConfig,\n TextSlotValue,\n Theme,\n Transform,\n VectorSlotValue,\n} from './types';\nimport {\n getDefaultDPR,\n getPointerPosition,\n handleOpenUrl,\n hexStringToRGBAInt,\n isDotLottie,\n isElementInViewport,\n isLottie,\n} from './utils';\nimport { toVectorChar } from './utils/vector-char';\n\nconst createCoreMode = (mode: Mode, module: MainModule): CoreMode => {\n if (mode === 'reverse') {\n return module.Mode.Reverse;\n } else if (mode === 'bounce') {\n return module.Mode.Bounce;\n } else if (mode === 'reverse-bounce') {\n return module.Mode.ReverseBounce;\n } else {\n return module.Mode.Forward;\n }\n};\n\nconst createCoreFit = (fit: Fit, module: MainModule): CoreFit => {\n if (fit === 'contain') {\n return module.Fit.Contain;\n } else if (fit === 'cover') {\n return module.Fit.Cover;\n } else if (fit === 'fill') {\n return module.Fit.Fill;\n } else if (fit === 'fit-height') {\n return module.Fit.FitHeight;\n } else if (fit === 'fit-width') {\n return module.Fit.FitWidth;\n } else {\n return module.Fit.None;\n }\n};\n\nconst createCoreAlign = (align: [number, number], module: MainModule): VectorFloat => {\n const coreAlign = new module.VectorFloat();\n\n coreAlign.push_back(align[0]);\n coreAlign.push_back(align[1]);\n\n return coreAlign;\n};\n\nconst createCoreSegment = (segment: number[], module: MainModule): VectorFloat => {\n const coresegment = new module.VectorFloat();\n\n if (segment.length !== 2) return coresegment;\n\n coresegment.push_back(segment[0] as number);\n coresegment.push_back(segment[1] as number);\n\n return coresegment;\n};\n\nconst createCoreLayout = (layout: Layout | undefined, module: MainModule): { align: VectorFloat; fit: CoreFit } => {\n if (!layout) {\n return module.createDefaultLayout();\n }\n\n return {\n align: createCoreAlign(layout.align ?? [0.5, 0.5], module),\n fit: createCoreFit(layout.fit ?? 'contain', module),\n };\n};\n\nexport class DotLottie {\n private _canvas: HTMLCanvasElement | OffscreenCanvas | RenderSurface | null = null;\n\n private _pendingLoad: { data?: Data; src?: string } | null = null;\n\n private _context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null = null;\n\n private readonly _eventManager: EventManager;\n\n private _animationFrameId: number | null = null;\n\n private readonly _frameManager: AnimationFrameManager;\n\n private _dotLottieCore: DotLottiePlayer | null = null;\n\n private _stateMachineId: string = '';\n\n private _stateMachineConfig: StateMachineConfig | null = null;\n\n private _isStateMachineRunning: boolean = false;\n\n private _stateMachineObserverHandle: StateMachineObserver | null = null;\n\n private _stateMachineInternalMessageObserver: StateMachineInternalObserver | null = null;\n\n private _dotLottieObserverHandle: Observer | null = null;\n\n private static _wasmModule: MainModule | null = null;\n\n private _renderConfig: RenderConfig = {};\n\n private _isFrozen: boolean = false;\n\n private _backgroundColor: string | null = null;\n\n // Bound event listeners for state machine\n private _boundOnClick: ((event: MouseEvent) => void) | null = null;\n\n private _boundOnPointerUp: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerDown: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerMove: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerEnter: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerLeave: ((event: PointerEvent) => void) | null = null;\n\n private _bufferMismatchCount = 0;\n\n private _lastExpectedBufferSize = 0;\n\n /**\n * Creates a new DotLottie player instance for rendering Lottie animations.\n * Initializes the WASM module, event system, and loads animation if src or data is provided in config.\n * @param config - Configuration object specifying animation source, playback settings, and rendering options\n */\n public constructor(config: Config) {\n this._canvas = config.canvas ?? null;\n\n this._eventManager = new EventManager();\n this._frameManager = new AnimationFrameManager();\n this._renderConfig = {\n ...config.renderConfig,\n devicePixelRatio: config.renderConfig?.devicePixelRatio || getDefaultDPR(),\n // freezeOnOffscreen is true by default to prevent unnecessary rendering when the canvas is offscreen\n freezeOnOffscreen: config.renderConfig?.freezeOnOffscreen ?? true,\n };\n\n DotLottieWasmLoader.load()\n .then((module) => {\n DotLottie._wasmModule = module;\n\n const callbackObserver = new module.CallbackObserver();\n\n callbackObserver.setOnLoad(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'load',\n });\n }, 0);\n });\n callbackObserver.setOnLoadError(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error('failed to load'),\n });\n }, 0);\n });\n callbackObserver.setOnPlay(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'play',\n });\n }, 0);\n });\n callbackObserver.setOnPause(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'pause',\n });\n }, 0);\n });\n callbackObserver.setOnStop(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'stop',\n });\n }, 0);\n });\n callbackObserver.setOnLoop((loopCount: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'loop',\n loopCount,\n });\n }, 0);\n });\n callbackObserver.setOnComplete(() => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'complete',\n });\n }, 0);\n });\n callbackObserver.setOnFrame((currentFrame: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame,\n });\n }, 0);\n });\n callbackObserver.setOnRender((currentFrame: number) => {\n setTimeout(() => {\n this._eventManager.dispatch({\n type: 'render',\n currentFrame,\n });\n }, 0);\n });\n\n this._dotLottieCore = new module.DotLottiePlayer({\n animationId: config.animationId ?? '',\n themeId: config.themeId ?? '',\n // FIXME: state machine id is not useful, since the load and start of state machine require to be controlled by the framework\n stateMachineId: '',\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n loopCount: config.loopCount ?? 0,\n mode: createCoreMode(config.mode ?? 'forward', module),\n segment: createCoreSegment(config.segment ?? [], module),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: createCoreLayout(config.layout, module),\n });\n\n this._stateMachineId = config.stateMachineId ?? '';\n this._stateMachineConfig = config.stateMachineConfig ?? null;\n\n this._dotLottieObserverHandle = this._dotLottieCore.subscribe(callbackObserver);\n\n this._eventManager.dispatch({ type: 'ready' });\n\n if (config.data) {\n if (this._canvas) {\n this._loadFromData(config.data);\n } else {\n this._pendingLoad = { data: config.data };\n }\n } else if (config.src) {\n if (this._canvas) {\n this._loadFromSrc(config.src);\n } else {\n this._pendingLoad = { src: config.src };\n }\n }\n\n if (config.backgroundColor) {\n this.setBackgroundColor(config.backgroundColor);\n }\n })\n .catch((error) => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to load wasm module: ${error}`),\n });\n });\n }\n\n private _dispatchError(message: string): void {\n console.error(message);\n this._eventManager.dispatch({ type: 'loadError', error: new Error(message) });\n }\n\n private async _fetchData(src: string): Promise<string | ArrayBuffer> {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch animation data from URL: ${src}. ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.arrayBuffer();\n\n if (isDotLottie(data)) {\n return data;\n }\n\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n return new TextDecoder().decode(data);\n }\n\n private _loadFromData(data: Data): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n if (!this._canvas) {\n console.warn('[dotlottie-web] Cannot load animation without canvas. Call setCanvas() first.');\n\n return;\n }\n\n const width = this._canvas.width;\n const height = this._canvas.height;\n\n let loaded = false;\n\n if (typeof data === 'string') {\n if (!isLottie(data)) {\n this._dispatchError(\n 'Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(data, width, height);\n } else if (data instanceof ArrayBuffer) {\n if (!isDotLottie(data)) {\n this._dispatchError(\n 'Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadDotLottieData(toVectorChar(DotLottie._wasmModule, data), width, height);\n } else if (typeof data === 'object') {\n if (!isLottie(data as Record<string, unknown>)) {\n this._dispatchError(\n 'Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(JSON.stringify(data), width, height);\n } else {\n this._dispatchError(\n `Unsupported data type for animation data. Expected: \n - string (Lottie JSON),\n - ArrayBuffer (dotLottie),\n - object (Lottie JSON). \n Received: ${typeof data}`,\n );\n\n return;\n }\n\n if (loaded) {\n if (this._renderConfig.quality !== undefined) {\n this._dotLottieCore.setQuality(this._renderConfig.quality);\n }\n\n if (IS_BROWSER) {\n this.resize();\n }\n\n setTimeout(() => {\n // FIXME: frame is not triggered from the dotlottie-rs core\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this.currentFrame,\n });\n }, 0);\n\n this._dotLottieCore.render();\n\n this._draw();\n\n if (this._stateMachineId) {\n const smLoaded = this.stateMachineLoad(this._stateMachineId);\n\n if (smLoaded) {\n const smStarted = this.stateMachineStart();\n\n if (smStarted) {\n this._startAnimationLoop();\n }\n }\n } else if (this._dotLottieCore.isPlaying()) {\n this._startAnimationLoop();\n }\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is initially offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n }\n\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n }\n }\n }\n\n private _loadFromSrc(src: string): void {\n this._fetchData(src)\n .then((data) => this._loadFromData(data))\n .catch((error) => this._dispatchError(`Failed to load animation data from URL: ${src}. ${error}`));\n }\n\n /**\n * Gets the raw pixel buffer containing the rendered animation frame.\n * Returns RGBA pixel data as a Uint8Array for advanced image processing or custom rendering.\n */\n public get buffer(): Uint8Array | null {\n if (!this._dotLottieCore) return null;\n\n return this._dotLottieCore.buffer() as Uint8Array;\n }\n\n /**\n * Gets the ID of the currently active animation from a multi-animation dotLottie file.\n * Returns undefined if no specific animation is active or for single-animation files.\n */\n public get activeAnimationId(): string | undefined {\n return this._dotLottieCore?.activeAnimationId();\n }\n\n /**\n * Gets the ID of the currently active theme applied to the animation.\n * Returns undefined if no theme is active. Themes modify colors and visual properties.\n */\n public get activeThemeId(): string | undefined {\n return this._dotLottieCore?.activeThemeId();\n }\n\n /**\n * Gets the current layout configuration for positioning and scaling the animation.\n * Includes fit mode (contain, cover, fill, etc.) and alignment [x, y] values (0-1 range).\n */\n public get layout(): Layout | undefined {\n const layout = this._dotLottieCore?.config().layout;\n\n if (layout) {\n return {\n align: [layout.align.get(0) as number, layout.align.get(1) as number],\n fit: ((): Fit => {\n switch (layout.fit) {\n case DotLottie._wasmModule?.Fit.Contain:\n return 'contain';\n\n case DotLottie._wasmModule?.Fit.Cover:\n return 'cover';\n\n case DotLottie._wasmModule?.Fit.Fill:\n return 'fill';\n\n case DotLottie._wasmModule?.Fit.FitHeight:\n return 'fit-height';\n\n case DotLottie._wasmModule?.Fit.FitWidth:\n return 'fit-width';\n\n case DotLottie._wasmModule?.Fit.None:\n return 'none';\n\n default:\n return 'contain';\n }\n })(),\n };\n }\n\n return undefined;\n }\n\n /**\n * Gets the currently active marker name if a marker-based segment is set.\n * Returns undefined if no marker is active. Use setMarker() to activate a named segment.\n */\n public get marker(): string | undefined {\n const marker = this._dotLottieCore?.config().marker as string | undefined;\n\n return marker;\n }\n\n /**\n * Gets the animation manifest containing metadata about animations, themes, and states.\n * Returns null if no manifest is available or if the loaded animation doesn't include one.\n */\n public get manifest(): Manifest | null {\n try {\n const manifest = this._dotLottieCore?.manifestString();\n\n if (this._dotLottieCore === null || !manifest) return null;\n\n const manifestJson = JSON.parse(manifest);\n\n if (Object.keys(manifestJson).length === 0) return null;\n\n return manifestJson as Manifest;\n } catch (_err) {\n return null;\n }\n }\n\n /**\n * Gets the current rendering configuration.\n * Includes settings like devicePixelRatio, autoResize, and freezeOnOffscreen.\n */\n public get renderConfig(): RenderConfig {\n return this._renderConfig;\n }\n\n /**\n * Gets the currently active playback segment as [startFrame, endFrame].\n * If no segment is set, returns undefined and the full animation plays.\n */\n public get segment(): [number, number] | undefined {\n const segment = this._dotLottieCore?.config().segment;\n\n if (segment && segment.size() === 2) {\n return [segment.get(0) as number, segment.get(1) as number];\n }\n\n return undefined;\n }\n\n /**\n * Gets the current loop configuration.\n * Returns true if the animation is set to loop continuously.\n */\n public get loop(): boolean {\n return this._dotLottieCore?.config().loopAnimation ?? false;\n }\n\n /**\n * Gets the current playback mode.\n * Determines playback direction: 'forward', 'reverse', 'bounce' (forward then reverse), or 'reverse-bounce'.\n */\n public get mode(): Mode {\n const mode = this._dotLottieCore?.config().mode;\n\n if (mode === DotLottie._wasmModule?.Mode.Reverse) {\n return 'reverse';\n } else if (mode === DotLottie._wasmModule?.Mode.Bounce) {\n return 'bounce';\n } else if (mode === DotLottie._wasmModule?.Mode.ReverseBounce) {\n return 'reverse-bounce';\n } else {\n return 'forward';\n }\n }\n\n /**\n * Indicates whether rendering is currently frozen.\n * True when freeze() has been called and the rendering loop is paused to save resources.\n */\n public get isFrozen(): boolean {\n return this._isFrozen;\n }\n\n /**\n * Indicates whether a state machine is currently active and running.\n * True after stateMachineStart() is called and until stateMachineStop() is called.\n */\n public get isStateMachineRunning(): boolean {\n return this._isStateMachineRunning;\n }\n\n /**\n * Gets the current background color.\n * Returns the background color as a string (e.g., '#FFFFFF' or 'transparent').\n */\n public get backgroundColor(): string {\n return this._backgroundColor ?? '';\n }\n\n /**\n * Gets the autoplay configuration.\n * Returns true if the animation is configured to start playing automatically when loaded.\n */\n public get autoplay(): boolean {\n return this._dotLottieCore?.config().autoplay ?? false;\n }\n\n /**\n * Gets the frame interpolation setting.\n * Returns true if frame interpolation is enabled for smoother animation playback.\n */\n public get useFrameInterpolation(): boolean {\n return this._dotLottieCore?.config().useFrameInterpolation ?? false;\n }\n\n /**\n * Gets the current playback speed.\n * Returns the speed multiplier (1 = normal speed, 2 = double speed, 0.5 = half speed).\n */\n public get speed(): number {\n return this._dotLottieCore?.config().speed ?? 0;\n }\n\n /**\n * Indicates whether the WASM module and core player have been initialized.\n * Check this before performing operations that require the player to be ready.\n */\n public get isReady(): boolean {\n return this._dotLottieCore !== null;\n }\n\n /**\n * Indicates whether an animation has been successfully loaded and is ready for playback.\n * Check this before calling play() or other playback methods to ensure the animation is ready.\n */\n public get isLoaded(): boolean {\n return this._dotLottieCore?.isLoaded() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently playing.\n * True when animation is actively playing, false when paused, stopped, or not started.\n */\n public get isPlaying(): boolean {\n return this._dotLottieCore?.isPlaying() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently paused.\n * True when pause() has been called and animation is not playing or stopped.\n */\n public get isPaused(): boolean {\n return this._dotLottieCore?.isPaused() ?? false;\n }\n\n /**\n * Indicates whether the animation is currently stopped.\n * True when stop() has been called or animation hasn't started yet.\n */\n public get isStopped(): boolean {\n return this._dotLottieCore?.isStopped() ?? false;\n }\n\n /**\n * Gets the current frame number of the animation.\n * Useful for tracking playback position or implementing custom frame displays. Rounded to 2 decimal places.\n */\n public get currentFrame(): number {\n if (!this._dotLottieCore) return 0;\n\n return Math.round(this._dotLottieCore.currentFrame() * 100) / 100;\n }\n\n /**\n * Gets the number of times the animation has completed a loop during the current playback.\n * Increments each time the animation completes one full cycle.\n */\n public get loopCount(): number {\n return this._dotLottieCore?.loopCount() ?? 0;\n }\n\n /**\n * Gets the total number of frames in the animation.\n * Use with currentFrame to calculate playback progress as a percentage.\n */\n public get totalFrames(): number {\n return this._dotLottieCore?.totalFrames() ?? 0;\n }\n\n /**\n * Gets the total duration of the animation in seconds.\n * Represents the time to play from the first frame to the last at normal speed (speed = 1).\n */\n public get duration(): number {\n return this._dotLottieCore?.duration() ?? 0;\n }\n\n /**\n * Gets the duration of the currently active segment in seconds.\n * If no segment is set, returns the full animation duration.\n */\n public get segmentDuration(): number {\n return this._dotLottieCore?.segmentDuration() ?? 0;\n }\n\n /**\n * Gets the canvas element used for rendering the animation.\n * Returns the HTMLCanvasElement, OffscreenCanvas, or RenderSurface set during initialization.\n */\n public get canvas(): HTMLCanvasElement | OffscreenCanvas | RenderSurface | null {\n return this._canvas;\n }\n\n /**\n * Dynamically loads a new animation, replacing the current one if any.\n * Stops current playback, cleans up resources, and loads from the provided src or data.\n * @param config - Configuration for the new animation (all Config properties except canvas)\n */\n public load(config: Omit<Config, 'canvas'>): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._stopAnimationLoop();\n\n this._cleanupCanvas();\n\n this._isFrozen = false;\n\n this._dotLottieCore.setConfig({\n animationId: config.animationId ?? '',\n themeId: config.themeId ?? '',\n stateMachineId: '',\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n loopCount: config.loopCount ?? 0,\n mode: createCoreMode(config.mode ?? 'forward', DotLottie._wasmModule),\n segment: createCoreSegment(config.segment ?? [], DotLottie._wasmModule),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: createCoreLayout(config.layout, DotLottie._wasmModule),\n });\n\n if (config.data) {\n if (this._canvas) {\n this._loadFromData(config.data);\n } else {\n this._pendingLoad = { data: config.data };\n }\n } else if (config.src) {\n if (this._canvas) {\n this._loadFromSrc(config.src);\n } else {\n this._pendingLoad = { src: config.src };\n }\n }\n\n this.setBackgroundColor(config.backgroundColor ?? '');\n }\n\n private _draw(): void {\n if (this._dotLottieCore === null || this._canvas === null) return;\n\n // Only try to get context if canvas has getContext method and no context exists yet\n if (\n !this._context &&\n 'getContext' in this._canvas &&\n typeof this._canvas.getContext === 'function' &&\n ((typeof HTMLCanvasElement !== 'undefined' && this._canvas instanceof HTMLCanvasElement) ||\n (typeof OffscreenCanvas !== 'undefined' && this._canvas instanceof OffscreenCanvas))\n ) {\n this._context = this._canvas.getContext('2d') as\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D\n | null;\n }\n\n // Only process visual output if we have a canvas with a valid context\n if (this._context) {\n const buffer = this._dotLottieCore.buffer() as ArrayBuffer;\n\n const expectedLength = this._canvas.width * this._canvas.height * BYTES_PER_PIXEL;\n\n /* \n frame buffer size mismatch can occur temporarily during resize operations when the WASM buffer allocation hasn't completed yet\n */\n if (buffer.byteLength !== expectedLength) {\n if (this._lastExpectedBufferSize === expectedLength) {\n this._bufferMismatchCount += 1;\n } else {\n this._bufferMismatchCount = 1;\n this._lastExpectedBufferSize = expectedLength;\n }\n\n if (this._bufferMismatchCount === 10) {\n console.warn(\n `[dotlottie-web] Persistent buffer size mismatch detected. ` +\n `Expected ${expectedLength} bytes for canvas ${this._canvas.width}x${this._canvas.height}, ` +\n `but got ${buffer.byteLength} bytes. ` +\n `This may indicate a WASM memory allocation issue or invalid canvas dimensions.`,\n );\n }\n\n return;\n }\n\n this._bufferMismatchCount = 0;\n this._lastExpectedBufferSize = expectedLength;\n\n let imageData = null;\n\n const clampedBuffer = new Uint8ClampedArray(buffer, 0, buffer.byteLength);\n\n /* \n In Node.js, the ImageData constructor is not available. \n You can use createImageData function in the canvas context to create ImageData object.\n */\n if (typeof ImageData === 'undefined') {\n imageData = this._context.createImageData(this._canvas.width, this._canvas.height);\n imageData.data.set(clampedBuffer);\n } else {\n imageData = new ImageData(clampedBuffer, this._canvas.width, this._canvas.height);\n }\n\n this._context.putImageData(imageData, 0, 0);\n }\n }\n\n private _cleanupCanvas(): void {\n if (this._canvas && IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n OffscreenObserver.unobserve(this._canvas);\n CanvasResizeObserver.unobserve(this._canvas);\n this._cleanupStateMachineListeners();\n }\n }\n\n private _initializeCanvas(): void {\n this._context = null;\n\n if (this._canvas && IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n }\n\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n\n if (this._isStateMachineRunning) {\n this._setupStateMachineListeners();\n }\n }\n\n if (this._canvas && this._dotLottieCore && this.isLoaded) {\n const resized = this._dotLottieCore.resize(this._canvas.width, this._canvas.height);\n\n if (resized) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n }\n\n private _stopAnimationLoop(): void {\n if (this._animationFrameId !== null) {\n this._frameManager.cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n }\n\n private _startAnimationLoop(): void {\n // Start if we don't already have an active loop and either:\n // 1. The animation should be playing, OR\n // 2. The state machine is running\n if (\n this._animationFrameId === null &&\n this._dotLottieCore &&\n !this._isFrozen &&\n (this._dotLottieCore.isPlaying() || this._isStateMachineRunning)\n ) {\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._animationLoop.bind(this));\n }\n }\n\n private _animationLoop(): void {\n if (this._dotLottieCore === null) {\n this._stopAnimationLoop();\n\n return;\n }\n\n // Continue the loop if either the animation is playing OR the state machine is running\n if (!this._dotLottieCore.isPlaying() && !this._isStateMachineRunning) {\n this._stopAnimationLoop();\n\n return;\n }\n\n try {\n const advanced = this._dotLottieCore.tick();\n\n if (advanced) {\n this._draw();\n }\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._animationLoop.bind(this));\n } catch (error) {\n console.error('Error in animation frame:', error);\n\n this._eventManager.dispatch({ type: 'renderError', error: error as unknown as Error });\n\n // destroy the instance if it's a runtime error\n if (error instanceof WebAssembly.RuntimeError) {\n this.destroy();\n }\n }\n }\n\n /**\n * Starts or resumes animation playback from the current frame.\n * Unfreezes rendering if frozen and starts the animation loop. Updates isPlaying state to true.\n */\n public play(): void {\n if (this._dotLottieCore === null || !this.isLoaded) return;\n\n this._stopAnimationLoop();\n\n const playing = this._dotLottieCore.play();\n\n // Always unfreeze and start animation loop if core is playing, regardless of play() return value\n if (playing || this._dotLottieCore.isPlaying()) {\n this._isFrozen = false;\n this._startAnimationLoop();\n }\n\n /* \n Check if the canvas is offscreen and freezing is enabled\n If freezeOnOffscreen is true and the canvas is currently outside the viewport,\n we immediately freeze the animation to avoid unnecessary rendering and performance overhead.\n */\n if (\n this._canvas &&\n IS_BROWSER &&\n this._canvas instanceof HTMLCanvasElement &&\n this._renderConfig.freezeOnOffscreen &&\n !isElementInViewport(this._canvas)\n ) {\n this.freeze();\n }\n }\n\n /**\n * Pauses animation playback at the current frame.\n * Stops the animation loop while preserving the current frame position. Updates isPaused state to true.\n */\n public pause(): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.pause();\n\n this._stopAnimationLoop();\n }\n\n /**\n * Stops animation playback and resets to the start frame.\n * Halts the animation loop and returns to the beginning. Updates isStopped state to true.\n */\n public stop(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.stop();\n\n this._stopAnimationLoop();\n\n if (ok) {\n // FIXME: frame is not triggered from the dotlottie-rs core on stop()\n this._eventManager.dispatch({ type: 'frame', currentFrame: this.currentFrame });\n // FIXME: stop() doesn't trigger render() internally\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n /**\n * Seeks to a specific frame in the animation and renders it.\n * Useful for implementing custom scrubbing controls or precise frame positioning.\n * @param frame - The target frame number to seek to\n */\n public setFrame(frame: number): void {\n if (this._dotLottieCore === null) return;\n\n const frameUpdated = this._dotLottieCore.seek(frame);\n\n if (frameUpdated) {\n const rendered = this._dotLottieCore.render();\n\n if (rendered) {\n this._draw();\n }\n }\n }\n\n /**\n * Changes the animation playback speed.\n * Values above 1 speed up playback, below 1 slow it down.\n * @param speed - Playback speed multiplier (e.g., 2 for 2x speed, 0.5 for half speed)\n */\n public setSpeed(speed: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n speed,\n });\n }\n\n /**\n * Changes the background color of the canvas or animation.\n * For HTMLCanvasElement, sets the CSS background. For other surfaces, renders behind the animation.\n * @param color - CSS color string (e.g., '#FFFFFF', 'rgba(0,0,0,0.5)', 'transparent')\n */\n public setBackgroundColor(color: string): void {\n if (this._dotLottieCore === null) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.style.backgroundColor = color;\n } else {\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n backgroundColor: hexStringToRGBAInt(color),\n });\n }\n\n this._backgroundColor = color;\n }\n\n /**\n * Enables or disables continuous looping of the animation.\n * When enabled with loopCount set to 0, animation repeats indefinitely.\n * @param loop - True to enable looping, false to play once\n */\n public setLoop(loop: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopAnimation: loop,\n });\n }\n\n /**\n * Sets the number of additional times to replay the animation after the first play.\n * Requires loop to be true. A value of 0 means infinite replays; a positive value n means\n * the animation plays a total of n + 1 times (initial play + n replays).\n * @param loopCount - Number of additional replays (0 = infinite, 1 = plays twice, 2 = plays three times, etc.)\n */\n public setLoopCount(loopCount: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopCount,\n });\n }\n\n /**\n * Enables or disables frame interpolation for smoother playback.\n * When enabled, interpolates between frames. When disabled, shows exact frame-by-frame animation.\n * @param useFrameInterpolation - True for smooth interpolation, false for exact frames\n */\n public setUseFrameInterpolation(useFrameInterpolation: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n useFrameInterpolation,\n });\n }\n\n /**\n * Subscribes to animation events like play, pause, frame, complete, etc.\n * Use this to react to animation state changes and playback progress.\n * @param type - Event type to listen for (e.g., 'play', 'frame', 'complete')\n * @param listener - Callback function invoked when the event occurs\n */\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n /**\n * Unsubscribes from animation events.\n * If no listener is provided, removes all listeners for the given event type.\n * @param type - Event type to stop listening for\n * @param listener - Specific callback to remove, or undefined to remove all\n */\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n /**\n * Cleans up and destroys the player instance, releasing all resources.\n * Stops playback, removes event listeners, and frees WASM memory. Call when the player is no longer needed.\n */\n public destroy(): void {\n this._stopAnimationLoop();\n\n // Reset state machine status\n this._isStateMachineRunning = false;\n\n this._cleanupCanvas();\n\n if (this._stateMachineObserverHandle) {\n this._dotLottieCore?.stateMachineUnsubscribe(this._stateMachineObserverHandle);\n this._stateMachineObserverHandle.delete();\n this._stateMachineObserverHandle = null;\n }\n\n if (this._stateMachineInternalMessageObserver) {\n this._dotLottieCore?.stateMachineInternalUnsubscribe(this._stateMachineInternalMessageObserver);\n this._stateMachineInternalMessageObserver.delete();\n this._stateMachineInternalMessageObserver = null;\n }\n\n if (this._dotLottieObserverHandle) {\n this._dotLottieCore?.unsubscribe(this._dotLottieObserverHandle);\n this._dotLottieObserverHandle.delete();\n this._dotLottieObserverHandle = null;\n }\n\n this._dotLottieCore?.delete();\n this._dotLottieCore = null;\n this._context = null;\n\n this._eventManager.dispatch({\n type: 'destroy',\n });\n\n this._eventManager.removeAllEventListeners();\n this._cleanupStateMachineListeners();\n }\n\n /**\n * Pauses the rendering loop without changing playback state.\n * Useful for reducing CPU/GPU usage when the animation is offscreen or hidden. Dispatches 'freeze' event.\n */\n public freeze(): void {\n if (this._animationFrameId === null) return;\n\n this._stopAnimationLoop();\n\n this._isFrozen = true;\n\n this._eventManager.dispatch({ type: 'freeze' });\n }\n\n /**\n * Resumes the rendering loop after being frozen.\n * Restarts frame rendering while maintaining the current playback state. Dispatches 'unfreeze' event.\n */\n public unfreeze(): void {\n if (this._animationFrameId !== null) return;\n\n this._isFrozen = false;\n\n this._eventManager.dispatch({ type: 'unfreeze' });\n\n this._startAnimationLoop();\n }\n\n /**\n * Recalculates and updates canvas dimensions based on current size.\n * Call this when the canvas container size changes to maintain proper rendering. Usually handled by autoResize.\n */\n public resize(): void {\n if (!this._dotLottieCore || !this.isLoaded || !this._canvas) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n const dpr = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n\n const { height: clientHeight, width: clientWidth } = this._canvas.getBoundingClientRect();\n\n if (clientHeight !== 0 && clientWidth !== 0) {\n this._canvas.width = clientWidth * dpr;\n this._canvas.height = clientHeight * dpr;\n }\n }\n\n const resized = this._dotLottieCore.resize(this._canvas.width, this._canvas.height);\n\n if (resized) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n /**\n * Changes the canvas element used for rendering.\n * Useful for moving the animation to a different canvas without recreating the player instance.\n * @param canvas - New HTMLCanvasElement, OffscreenCanvas, or RenderSurface to render to\n */\n public setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas | RenderSurface): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!canvas || this._canvas === canvas) return;\n\n if (this._canvas) {\n this._cleanupCanvas();\n }\n\n this._canvas = canvas;\n\n this._initializeCanvas();\n\n if (this._pendingLoad) {\n const pending = this._pendingLoad;\n\n this._pendingLoad = null;\n\n if (pending.data) {\n this._loadFromData(pending.data);\n } else if (pending.src) {\n this._loadFromSrc(pending.src);\n }\n }\n }\n\n /**\n * Applies a 3x3 transformation matrix to the entire animation on the canvas.\n * Use this to translate, rotate, scale, or skew the animation rendering.\n * @param transform - 9-element array representing the transformation matrix in row-major order\n * @returns True if transformation was applied successfully, false otherwise\n */\n public setTransform(transform: Transform): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n const transformVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of transform) {\n transformVector.push_back(val);\n }\n\n const ok = this._dotLottieCore.setTransform(transformVector);\n\n if (ok && this._dotLottieCore.render()) {\n this._draw();\n }\n\n return ok;\n }\n\n /**\n * Gets the 3x3 transformation matrix applied to the animation.\n * Returns a 9-element array representing affine transformations (translation, rotation, scale, skew).\n * @returns Transform array of 9 numbers, or undefined if not available\n */\n public getTransform(): Transform | undefined {\n if (!this._dotLottieCore) return undefined;\n\n const transform: Transform = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n const transformVector = this._dotLottieCore.getTransform();\n\n for (let i = 0; i < transformVector.size(); i += 1) {\n transform[i] = transformVector.get(i) as number;\n }\n\n return transform;\n }\n\n /**\n * Sets a frame range to play instead of the full animation.\n * Useful for playing specific sections or creating animation sequences from subsections.\n * @param startFrame - Starting frame number (inclusive)\n * @param endFrame - Ending frame number (inclusive)\n */\n public setSegment(startFrame: number, endFrame: number): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n segment: createCoreSegment([startFrame, endFrame], DotLottie._wasmModule),\n });\n }\n\n /**\n * Changes the playback direction mode.\n * Controls whether animation plays forward, in reverse, or alternates (bounce).\n * @param mode - Playback mode: 'forward', 'reverse', 'bounce', or 'reverse-bounce'\n */\n public setMode(mode: Mode): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n mode: createCoreMode(mode, DotLottie._wasmModule),\n });\n }\n\n /**\n * Updates rendering configuration like autoResize, devicePixelRatio, and freezeOnOffscreen.\n * Dynamically changes how the canvas behaves without reloading the animation.\n * @param config - Partial RenderConfig with properties to update\n */\n public setRenderConfig(config: RenderConfig): void {\n const { devicePixelRatio, freezeOnOffscreen, quality, ...restConfig } = config;\n\n this._renderConfig = {\n ...this._renderConfig,\n ...restConfig,\n // devicePixelRatio is a special case, it should be set to the default value if it's not provided\n devicePixelRatio: devicePixelRatio || getDefaultDPR(),\n freezeOnOffscreen: freezeOnOffscreen ?? true,\n ...(quality !== undefined && { quality }),\n };\n\n if (quality !== undefined && this._dotLottieCore) {\n this._dotLottieCore.setQuality(quality);\n }\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n } else {\n CanvasResizeObserver.unobserve(this._canvas);\n }\n\n if (this._renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is currently offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n this.freeze();\n }\n } else {\n OffscreenObserver.unobserve(this._canvas);\n // If the animation was previously frozen, we need to unfreeze it now\n // to ensure it resumes rendering when the canvas is back onscreen.\n if (this._isFrozen) {\n this.unfreeze();\n }\n }\n }\n }\n\n /**\n * Switches to a different animation within a multi-animation dotLottie file.\n * Use this to load a different animation by its ID without creating a new player instance.\n * @param animationId - ID of the animation to load (must exist in the manifest)\n */\n public loadAnimation(animationId: string): void {\n if (this._dotLottieCore === null || this._dotLottieCore.activeAnimationId() === animationId || !this._canvas)\n return;\n\n const loaded = this._dotLottieCore.loadAnimation(animationId, this._canvas.width, this._canvas.height);\n\n if (loaded) {\n if (this._renderConfig.quality !== undefined) {\n this._dotLottieCore.setQuality(this._renderConfig.quality);\n }\n this.resize();\n }\n }\n\n /**\n * Activates a named marker to play only that marked segment.\n * Markers define named sections within an animation. Use markers() to list available markers.\n * @param marker - Name of the marker to activate\n */\n public setMarker(marker: string): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n marker,\n });\n }\n\n /**\n * Gets all markers defined in the animation with their time and duration.\n * Markers represent named sections that can be played using setMarker().\n * @returns Array of marker objects with name, time, and duration properties\n */\n public markers(): Marker[] {\n const markers = this._dotLottieCore?.markers();\n\n if (markers) {\n const result: Marker[] = [];\n\n for (let i = 0; i < markers.size(); i += 1) {\n const marker = markers.get(i) as Marker;\n\n result.push({\n name: marker.name,\n time: marker.time,\n duration: marker.duration,\n });\n }\n\n return result;\n }\n\n return [];\n }\n\n /**\n * Applies a theme to the animation, modifying colors and visual properties.\n * Themes are predefined in the dotLottie manifest. Returns true if theme was successfully loaded.\n * @param themeId - ID of the theme to apply (must exist in manifest)\n * @returns True if theme loaded successfully, false otherwise\n */\n public setTheme(themeId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeLoaded = this._dotLottieCore.setTheme(themeId);\n\n if (themeLoaded) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeLoaded;\n }\n\n /**\n * Removes the currently applied theme and restores original animation colors.\n * Use this to revert to the default appearance after applying a theme.\n * @returns True if theme was reset successfully, false otherwise\n */\n public resetTheme(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeReset = this._dotLottieCore.resetTheme();\n\n if (themeReset) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeReset;\n }\n\n /**\n * Applies a custom theme from theme data instead of manifest theme ID.\n * Useful for dynamically generated or user-created themes not in the manifest.\n *\n * @param themeData - Theme data as a JSON string or a structured Theme object\n * @returns True if theme loaded successfully, false otherwise\n *\n * @example\n * ```typescript\n * // Using a string (existing behavior)\n * dotLottie.setThemeData('{\"rules\":[{\"id\":\"bg\",\"type\":\"Color\",\"value\":[1,0,0]}]}');\n *\n * // Using a Theme object (new behavior)\n * dotLottie.setThemeData({\n * rules: [\n * {\n * id: 'background_color',\n * type: 'Color',\n * value: [0.2, 0.4, 0.8]\n * },\n * {\n * id: 'title',\n * type: 'Text',\n * value: {\n * text: 'Hello World',\n * fontSize: 48,\n * fillColor: [1, 1, 1]\n * }\n * }\n * ]\n * });\n * ```\n */\n public setThemeData(themeData: Theme | string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const themeDataString = typeof themeData === 'string' ? themeData : JSON.stringify(themeData);\n\n const themeLoaded = this._dotLottieCore.setThemeData(themeDataString);\n\n if (themeLoaded) {\n this._dotLottieCore.render();\n this._draw();\n }\n\n return themeLoaded;\n }\n\n /**\n * Sets multiple slot values at once for parameterized animations.\n * Slots allow runtime customization of colors, text, images, or other properties.\n * @param slots - Object mapping slot IDs to their values\n */\n public setSlots(slots: Record<string, unknown>): void {\n if (this._dotLottieCore === null) return;\n\n if (this._dotLottieCore.setSlots(JSON.stringify(slots))) {\n this._dotLottieCore.render();\n this._draw();\n }\n }\n\n // #region Typed Slot APIs\n\n /**\n * Check if value is an array of keyframes (has objects with 't' and 's' properties)\n */\n private _isKeyframeArray(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n value[0] !== null &&\n 't' in value[0] &&\n 's' in value[0]\n );\n }\n\n /**\n * Get all slot IDs in the animation\n * @returns Array of slot ID strings\n */\n public getSlotIds(): string[] {\n if (!this._dotLottieCore) return [];\n\n const idsVector = this._dotLottieCore.getSlotIds();\n const ids: string[] = [];\n\n for (let i = 0; i < idsVector.size(); i += 1) {\n ids.push(idsVector.get(i) as string);\n }\n\n return ids;\n }\n\n /**\n * Get the type of a slot\n * @param slotId - The slot ID to query\n * @returns The slot type ('color', 'gradient', 'text', 'scalar', 'vector', 'position', 'image') or undefined\n */\n public getSlotType(slotId: string): SlotType | undefined {\n if (!this._dotLottieCore) return undefined;\n\n const type = this._dotLottieCore.getSlotType(slotId);\n\n if (!type) return undefined;\n\n return type as SlotType;\n }\n\n /**\n * Get the current value of a slot\n * @param slotId - The slot ID to query\n * @returns The parsed slot value or undefined if not found\n */\n public getSlot(slotId: string): unknown {\n if (!this._dotLottieCore) return undefined;\n\n const slotStr = this._dotLottieCore.getSlotStr(slotId);\n\n if (!slotStr) return undefined;\n\n try {\n return JSON.parse(slotStr);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get all slots as an object with slot IDs as keys\n * @returns Object containing all slots, or empty object if not loaded\n * @example\n * const slots = dotLottie.getSlots();\n */\n public getSlots(): Record<string, unknown> {\n if (!this._dotLottieCore) return {};\n\n try {\n return JSON.parse(this._dotLottieCore.getSlotsStr());\n } catch {\n return {};\n }\n }\n\n /**\n * Set a color slot value\n * @param slotId - The slot ID to set\n * @param value - Static color [r, g, b, a] or array of keyframes\n * @returns true if successful\n * @example\n * // Static red color\n * dotLottie.setColorSlot('myColor', [1, 0, 0, 1]);\n * // Animated color (red to blue)\n * dotLottie.setColorSlot('myColor', [\\{ t: 0, s: [1, 0, 0, 1] \\}, \\{ t: 60, s: [0, 0, 1, 1] \\}]);\n */\n public setColorSlot(slotId: string, value: ColorSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a scalar slot value (single number like rotation, opacity)\n * @param slotId - The slot ID to set\n * @param value - Static number or array of keyframes\n * @returns true if successful\n * @example\n * // Static rotation\n * dotLottie.setScalarSlot('rotation', 45);\n * // Animated rotation\n * dotLottie.setScalarSlot('rotation', [\\{ t: 0, s: 0 \\}, \\{ t: 60, s: 360 \\}]);\n */\n public setScalarSlot(slotId: string, value: ScalarSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = typeof value !== 'number';\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a vector slot value (2D or 3D point for position, scale, etc.)\n * Handles both \"vector\" and \"position\" slot types\n * @param slotId - The slot ID to set\n * @param value - Static vector [x, y] or array of keyframes\n * @returns true if successful\n * @example\n * // Static scale\n * dotLottie.setVectorSlot('scale', [150, 150]);\n * // Animated position\n * dotLottie.setVectorSlot('position', [\\{ t: 0, s: [0, 0] \\}, \\{ t: 60, s: [100, 200] \\}]);\n */\n public setVectorSlot(slotId: string, value: VectorSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ a: isAnimated ? 1 : 0, k: value });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a gradient slot value\n * @param slotId - The slot ID to set\n * @param value - Static gradient or array of keyframes.\n * Color stops: [offset, r, g, b, ...] (4 floats per stop).\n * With opacity stops appended: [...color stops, offset, alpha, ...] (2 floats per opacity stop).\n * @param colorStopCount - Number of color stops (required to distinguish color data from opacity data)\n * @returns true if successful\n * @example\n * // Static red to blue gradient (2 color stops, no opacity)\n * dotLottie.setGradientSlot('myGradient', [0, 1, 0, 0, 1, 0, 0, 1], 2);\n * // Static gradient with opacity stops (2 color stops + 2 opacity stops)\n * dotLottie.setGradientSlot('myGradient', [\n * 0, 1, 0, 0, // color stop 1: red at position 0\n * 1, 0, 0, 1, // color stop 2: blue at position 1\n * 0, 0.8, // opacity stop 1: 80% at position 0\n * 1, 1, // opacity stop 2: 100% at position 1\n * ], 2);\n * // Animated gradient\n * dotLottie.setGradientSlot('myGradient', [\n * \\{ t: 0, s: [0, 1, 0, 0, 1, 0, 0, 1] \\},\n * \\{ t: 60, s: [0, 0, 1, 0, 1, 1, 0, 0] \\},\n * ], 2);\n */\n public setGradientSlot(slotId: string, value: GradientSlotValue, colorStopCount: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n const isAnimated = this._isKeyframeArray(value);\n const slotJson = JSON.stringify({ k: { a: isAnimated ? 1 : 0, k: value }, p: colorStopCount });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Set a text slot value (always static - text documents don't support animation)\n * Supports partial updates - only provided properties will be changed, others inherit from existing value\n * @param slotId - The slot ID to set\n * @param value - Text document properties (partial allowed)\n * @returns true if successful\n * @example\n * // Set all properties\n * dotLottie.setTextSlot('title', \\{ t: 'Hello World', s: 24, fc: [0, 0, 0, 1] \\});\n * // Partial update - only change text, keep existing font size, color, etc.\n * dotLottie.setTextSlot('title', \\{ t: 'New Text' \\});\n */\n public setTextSlot(slotId: string, value: TextSlotValue): boolean {\n if (this._dotLottieCore === null) return false;\n\n const existingValue = JSON.parse(this._dotLottieCore.getSlotStr(slotId));\n\n let mergedTextDoc = value;\n\n if (existingValue && 'k' in existingValue && Array.isArray(existingValue.k)) {\n const keyframe0 = existingValue.k[0] as Record<string, unknown>;\n\n if ('s' in keyframe0 && typeof keyframe0['s'] === 'object') {\n mergedTextDoc = {\n ...(keyframe0['s'] as Record<string, unknown>),\n ...value,\n };\n }\n }\n\n const slotJson = JSON.stringify({\n a: 0,\n k: [{ t: 0, s: mergedTextDoc }],\n });\n\n const result = this._dotLottieCore.setSlotStr(slotId, slotJson);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Reset a slot to its original value\n * @param slotId - The slot ID to reset\n * @returns true if successful\n */\n public resetSlot(slotId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.resetSlot(slotId);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Clear a slot's custom value\n * @param slotId - The slot ID to clear\n * @returns true if successful\n */\n public clearSlot(slotId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.clearSlot(slotId);\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Reset all slots to their original values\n * @returns true if successful\n */\n public resetSlots(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.resetSlots();\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n /**\n * Clear all slot custom values\n * @returns true if successful\n */\n public clearSlots(): boolean {\n if (this._dotLottieCore === null) return false;\n\n const result = this._dotLottieCore.clearSlots();\n\n this._dotLottieCore.render();\n this._draw();\n\n return result;\n }\n\n // #endregion\n\n /**\n * Updates the layout configuration for positioning and scaling the animation.\n * Changes how the animation fits and aligns within the canvas without requiring a reload.\n * @param layout - New layout configuration with fit mode and alignment values\n */\n public setLayout(layout: Layout): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n layout: createCoreLayout(layout, DotLottie._wasmModule),\n });\n }\n\n /**\n * Sets a custom viewport region for rendering a portion of the animation.\n * Defines a rectangular area to render, useful for implementing animation clipping or panning effects.\n * @param x - X coordinate of the viewport's top-left corner\n * @param y - Y coordinate of the viewport's top-left corner\n * @param width - Width of the viewport in pixels\n * @param height - Height of the viewport in pixels\n * @returns True if viewport was set successfully, false otherwise\n */\n public setViewport(x: number, y: number, width: number, height: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n return this._dotLottieCore.setViewport(x, y, width, height);\n }\n\n /**\n * Configures the URL for loading the WASM module.\n * Call this before creating any player instances to load the WASM from a custom CDN or local path.\n * @param url - URL pointing to the dotlottie WASM file\n */\n public static setWasmUrl(url: string): void {\n DotLottieWasmLoader.setWasmUrl(url);\n }\n\n /**\n * @experimental\n * Register a custom font for use in animations\n * @param fontName - The name of the font to register\n * @param fontSource - Either a URL string to fetch the font, or ArrayBuffer/Uint8Array of font data\n * @returns Promise<boolean> - true if registration succeeded, false otherwise\n */\n public static async registerFont(fontName: string, fontSource: string | ArrayBuffer | Uint8Array): Promise<boolean> {\n try {\n const module = await DotLottieWasmLoader.load();\n\n let fontData: ArrayBuffer;\n\n if (typeof fontSource === 'string') {\n const response = await fetch(fontSource);\n\n if (!response.ok) {\n console.error(`Failed to fetch font from URL: ${fontSource}. Status: ${response.status}`);\n\n return false;\n }\n fontData = await response.arrayBuffer();\n } else if (fontSource instanceof Uint8Array) {\n const tempBuffer = fontSource.buffer.slice(\n fontSource.byteOffset,\n fontSource.byteOffset + fontSource.byteLength,\n );\n\n if (tempBuffer instanceof ArrayBuffer) {\n fontData = tempBuffer;\n } else {\n fontData = new ArrayBuffer(fontSource.byteLength);\n new Uint8Array(fontData).set(fontSource);\n }\n } else {\n fontData = fontSource;\n }\n\n const success = module.registerFont(fontName, toVectorChar(module, fontData));\n\n if (!success) {\n console.error(`Failed to register font \"${fontName}\". Font data may be invalid.`);\n }\n\n return success;\n } catch (error) {\n console.error(`Error registering font \"${fontName}\":`, error);\n\n return false;\n }\n }\n\n /**\n * @experimental\n * Animates smoothly to a specific frame over a duration using linear easing.\n * Creates a tween animation transitioning from the current frame to the target frame.\n * @param frame - Target frame number to tween to\n * @param duration - Duration of the tween animation in seconds\n * @returns True if tween started successfully, false otherwise\n */\n public tween(frame: number, duration: number): boolean {\n if (!DotLottie._wasmModule) return false;\n\n // Default easing (linear)\n const easing = [0, 0, 1, 1];\n\n const easingVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of easing) {\n easingVector.push_back(val);\n }\n\n return this._dotLottieCore?.tween(frame, duration, easingVector) ?? false;\n }\n\n /**\n * @experimental\n * Start a tween animation to a specific marker\n * @param marker - The marker name to tween to\n * @param duration - Duration of the tween animation in seconds\n * @returns true if tween was started successfully\n */\n public tweenToMarker(marker: string, duration: number): boolean {\n if (!DotLottie._wasmModule) return false;\n\n const easing = [0, 0, 1, 1];\n\n const easingVector = new DotLottie._wasmModule.VectorFloat();\n\n for (const val of easing) {\n easingVector.push_back(val);\n }\n\n return this._dotLottieCore?.tweenToMarker(marker, duration, easingVector) ?? false;\n }\n\n /**\n * Gets the original dimensions of the animation as defined in the source file.\n * Returns width and height in pixels representing the animation's intrinsic size.\n * @returns Object with width and height properties in pixels\n */\n public animationSize(): { height: number; width: number } {\n const width = this._dotLottieCore?.animationSize().get(0) ?? 0;\n const height = this._dotLottieCore?.animationSize().get(1) ?? 0;\n\n return {\n width,\n height,\n };\n }\n\n /**\n * Gets the Oriented Bounding Box (OBB) points of a layer by its name.\n * Returns 8 numbers representing 4 corner points (x,y) in clockwise order from top-left: [x0, y0, x1, y1, x2, y2, x3, y3].\n * @param layerName - Name of the layer to get bounds for\n * @returns Array of 8 numbers representing the bounding box corners, or undefined if layer not found\n */\n public getLayerBoundingBox(layerName: string): number[] | undefined {\n const bounds = this._dotLottieCore?.getLayerBounds(layerName);\n\n if (!bounds) return undefined;\n\n if (bounds.size() !== 8) return undefined;\n\n const points: number[] = [];\n\n for (let i = 0; i < 8; i += 1) {\n points.push(bounds.get(i) as number);\n }\n\n return points;\n }\n\n /**\n * Converts theme data into Lottie slot format for dynamic content replacement.\n * Utility function for transforming theme definitions into slot-compatible data structures.\n * @param theme - Theme data as a JSON string\n * @param slots - Slot definitions as a JSON string\n * @returns Transformed slots data as a JSON string\n */\n public static transformThemeToLottieSlots(theme: string, slots: string): string {\n return DotLottie._wasmModule?.transformThemeToLottieSlots(theme, slots) ?? '';\n }\n\n // #region State Machine\n private _setupStateMachineObservers(): void {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return;\n\n const smCallbackObserver = new DotLottie._wasmModule.CallbackStateMachineObserver();\n\n smCallbackObserver.setOnStart(() => {\n setTimeout(() => {\n this._isStateMachineRunning = true;\n this._eventManager.dispatch({ type: 'stateMachineStart' });\n this._startAnimationLoop();\n }, 0);\n });\n smCallbackObserver.setOnStop(() => {\n setTimeout(() => {\n this._isStateMachineRunning = false;\n this._eventManager.dispatch({ type: 'stateMachineStop' });\n\n // Stop animation loop if animation is not playing\n if (!this._dotLottieCore?.isPlaying()) {\n this._stopAnimationLoop();\n }\n }, 0);\n });\n smCallbackObserver.setOnCustomEvent((eventName: string) => {\n this._eventManager.dispatch({ type: 'stateMachineCustomEvent', eventName });\n });\n smCallbackObserver.setOnBooleanInputValueChange((inputName: string, oldValue: boolean, newValue: boolean) => {\n this._eventManager.dispatch({ type: 'stateMachineBooleanInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnNumericInputValueChange((inputName: string, oldValue: number, newValue: number) => {\n this._eventManager.dispatch({ type: 'stateMachineNumericInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnStringInputValueChange((inputName: string, oldValue: string, newValue: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStringInputValueChange', inputName, newValue, oldValue });\n });\n smCallbackObserver.setOnInputFired((inputName: string) => {\n this._eventManager.dispatch({ type: 'stateMachineInputFired', inputName });\n });\n smCallbackObserver.setOnTransition((fromState: string, toState: string) => {\n this._eventManager.dispatch({ type: 'stateMachineTransition', fromState, toState });\n });\n smCallbackObserver.setOnStateEntered((state: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStateEntered', state });\n });\n smCallbackObserver.setOnStateExit((state: string) => {\n this._eventManager.dispatch({ type: 'stateMachineStateExit', state });\n });\n smCallbackObserver.setOnError((error: string) => {\n this._eventManager.dispatch({ type: 'stateMachineError', error });\n });\n\n const smInternalMessageObserver = new DotLottie._wasmModule.CallbackStateMachineInternalObserver();\n\n smInternalMessageObserver.setOnMessage((message: string) => {\n if (IS_BROWSER) {\n if (message.startsWith('OpenUrl: ')) {\n handleOpenUrl(message);\n }\n } else {\n this._eventManager.dispatch({ type: 'stateMachineInternalMessage', message });\n }\n });\n\n this._stateMachineObserverHandle = this._dotLottieCore.stateMachineSubscribe(smCallbackObserver);\n this._stateMachineInternalMessageObserver =\n this._dotLottieCore.stateMachineInternalSubscribe(smInternalMessageObserver);\n }\n\n private _cleanupStateMachineObservers(): void {\n if (this._stateMachineObserverHandle) {\n this._dotLottieCore?.stateMachineUnsubscribe(this._stateMachineObserverHandle);\n this._stateMachineObserverHandle.delete();\n this._stateMachineObserverHandle = null;\n }\n if (this._stateMachineInternalMessageObserver) {\n this._dotLottieCore?.stateMachineInternalUnsubscribe(this._stateMachineInternalMessageObserver);\n this._stateMachineInternalMessageObserver.delete();\n this._stateMachineInternalMessageObserver = null;\n }\n }\n\n /**\n * @experimental\n * Loads a state machine by its ID from the dotLottie manifest.\n * State machines enable interactive, event-driven animation behaviors.\n * @param stateMachineId - The ID of the state machine to load (must exist in manifest)\n * @returns True if the state machine was loaded successfully, false otherwise\n */\n public stateMachineLoad(stateMachineId: string): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n this._cleanupStateMachineObservers();\n\n const loaded = this._dotLottieCore.stateMachineLoad(stateMachineId);\n\n if (loaded) {\n this._setupStateMachineObservers();\n }\n\n return loaded;\n }\n\n /**\n * @experimental\n * Load a state machine from data string\n * @param stateMachineData - The state machine data as a string\n * @returns true if the state machine was loaded successfully\n */\n public stateMachineLoadData(stateMachineData: string): boolean {\n if (!this._dotLottieCore || !DotLottie._wasmModule) return false;\n\n this._cleanupStateMachineObservers();\n\n const loaded = this._dotLottieCore.stateMachineLoadData(stateMachineData);\n\n if (loaded) {\n this._setupStateMachineObservers();\n }\n\n return loaded;\n }\n\n /**\n * @experimental\n * Set the state machine config\n * @param config - The state machine config\n */\n public stateMachineSetConfig(config: StateMachineConfig | null): void {\n this._stateMachineConfig = config;\n }\n\n /**\n * @experimental\n * Start the state machine\n * @returns true if the state machine was started successfully\n */\n public stateMachineStart(): boolean {\n if (DotLottie._wasmModule === null || this._dotLottieCore === null) return false;\n\n const coreOpenUrl = DotLottie._wasmModule.createDefaultOpenUrlPolicy();\n\n if (this._stateMachineConfig) {\n const openUrlPolicy = this._stateMachineConfig.openUrlPolicy;\n\n if (openUrlPolicy && typeof openUrlPolicy.requireUserInteraction === 'boolean') {\n coreOpenUrl.requireUserInteraction = openUrlPolicy.requireUserInteraction;\n }\n\n if (openUrlPolicy?.whitelist) {\n coreOpenUrl.whitelist = new DotLottie._wasmModule.VectorString();\n\n for (const url of openUrlPolicy.whitelist) {\n coreOpenUrl.whitelist.push_back(url);\n }\n }\n }\n\n const started = this._dotLottieCore.stateMachineStart(coreOpenUrl);\n\n if (started) {\n this._isStateMachineRunning = true;\n this._setupStateMachineListeners();\n this._startAnimationLoop();\n }\n\n return started;\n }\n\n /**\n * @experimental\n * Stop the state machine\n * @returns true if the state machine was stopped successfully\n */\n public stateMachineStop(): boolean {\n if (!this._dotLottieCore) return false;\n\n const stopped = this._dotLottieCore.stateMachineStop();\n\n if (stopped) {\n this._cleanupStateMachineObservers();\n this._isStateMachineRunning = false;\n this._cleanupStateMachineListeners();\n\n // Stop animation loop if animation is not playing\n if (!this._dotLottieCore.isPlaying()) {\n this._stopAnimationLoop();\n }\n }\n\n return stopped;\n }\n\n /**\n * @experimental\n * Get the current status of the state machine\n * @returns The current status of the state machine as a string\n */\n public stateMachineGetStatus(): string {\n return this._dotLottieCore?.stateMachineStatus() ?? '';\n }\n\n /**\n * @experimental\n * Get the current state of the state machine\n * @returns The current state of the state machine as a string\n */\n public stateMachineGetCurrentState(): string {\n return this._dotLottieCore?.stateMachineCurrentState() ?? '';\n }\n\n /**\n * @experimental\n * Get the active state machine ID\n * @returns The active state machine ID as a string\n */\n public stateMachineGetActiveId(): string {\n return this._dotLottieCore?.activeStateMachineId() ?? '';\n }\n\n /**\n * @experimental\n * Override the current state of the state machine\n * @param state - The state to override to\n * @param immediate - Whether to immediately transition to the state\n * @returns true if the state override was successful\n */\n public stateMachineOverrideState(state: string, immediate: boolean = false): boolean {\n return this._dotLottieCore?.stateMachineOverrideCurrentState(state, immediate) ?? false;\n }\n\n /**\n * @experimental\n * Get a specific state machine by ID\n * @param stateMachineId - The ID of the state machine to get\n * @returns The state machine data as a string\n */\n public stateMachineGet(stateMachineId: string): string {\n return this._dotLottieCore?.getStateMachine(stateMachineId) ?? '';\n }\n\n /**\n * @experimental\n * Get the list of state machine listeners\n * @returns Array of listener names\n */\n public stateMachineGetListeners(): string[] {\n if (!this._dotLottieCore) return [];\n\n const listenersVector = this._dotLottieCore.stateMachineFrameworkSetup();\n\n const listeners = [];\n\n for (let i = 0; i < listenersVector.size(); i += 1) {\n listeners.push(listenersVector.get(i) as string);\n }\n\n return listeners;\n }\n\n /**\n * @experimental\n * Set a boolean input value for the state machine\n * @param name - The name of the boolean input\n * @param value - The boolean value to set\n */\n public stateMachineSetBooleanInput(name: string, value: boolean): boolean {\n return this._dotLottieCore?.stateMachineSetBooleanInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Set a numeric input value for the state machine\n * @param name - The name of the numeric input\n * @param value - The numeric value to set\n */\n public stateMachineSetNumericInput(name: string, value: number): boolean {\n return this._dotLottieCore?.stateMachineSetNumericInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Set a string input value for the state machine\n * @param name - The name of the string input\n * @param value - The string value to set\n */\n public stateMachineSetStringInput(name: string, value: string): boolean {\n return this._dotLottieCore?.stateMachineSetStringInput(name, value) ?? false;\n }\n\n /**\n * @experimental\n * Get a boolean input value from the state machine\n * @param name - The name of the boolean input\n * @returns The boolean value or undefined if not found\n */\n public stateMachineGetBooleanInput(name: string): boolean | undefined {\n return this._dotLottieCore?.stateMachineGetBooleanInput(name);\n }\n\n /**\n * @experimental\n * Get a numeric input value from the state machine\n * @param name - The name of the numeric input\n * @returns The numeric value or undefined if not found\n */\n public stateMachineGetNumericInput(name: string): number | undefined {\n return this._dotLottieCore?.stateMachineGetNumericInput(name);\n }\n\n /**\n * @experimental\n * Get a string input value from the state machine\n * @param name - The name of the string input\n * @returns The string value or undefined if not found\n */\n public stateMachineGetStringInput(name: string): string | undefined {\n return this._dotLottieCore?.stateMachineGetStringInput(name);\n }\n\n /**\n * @experimental\n * Get all the inputs of the current state machine. Returns the key name, followed by it's type as a string.\n * @returns An array of input keys followed by it's type at n+1.\n */\n public stateMachineGetInputs(): string[] {\n if (!this._dotLottieCore) return [];\n\n const inputsVector = this._dotLottieCore.stateMachineGetInputs();\n\n const inputs = [];\n\n for (let i = 0; i < inputsVector.size(); i += 1) {\n inputs.push(inputsVector.get(i) as string);\n }\n\n return inputs;\n }\n\n /**\n * @experimental\n * Fire an event in the state machine\n * @param name - The name of the event to fire\n */\n public stateMachineFireEvent(name: string): void {\n this._dotLottieCore?.stateMachineFireEvent(name);\n }\n\n /**\n * @experimental\n * Post a click event to the state machine\n * @param x - The x coordinate of the click\n * @param y - The y coordinate of the click\n * @returns The event result or undefined\n */\n public stateMachinePostClickEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostClickEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer up event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerUpEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerUpEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer down event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerDownEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerDownEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer move event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerMoveEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerMoveEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer enter event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerEnterEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerEnterEvent(x, y);\n }\n\n /**\n * @experimental\n * Post a pointer exit event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public stateMachinePostPointerExitEvent(x: number, y: number): void {\n this._dotLottieCore?.stateMachinePostPointerExitEvent(x, y);\n }\n\n private _onClick(event: MouseEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostClickEvent(position.x, position.y);\n }\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerUpEvent(position.x, position.y);\n }\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerDownEvent(position.x, position.y);\n }\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerMoveEvent(position.x, position.y);\n }\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerEnterEvent(position.x, position.y);\n }\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this.stateMachinePostPointerExitEvent(position.x, position.y);\n }\n }\n\n private _setupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this._dotLottieCore !== null && this.isLoaded) {\n const listeners = this.stateMachineGetListeners();\n\n // Clean up any existing listeners first\n this._cleanupStateMachineListeners();\n\n if (listeners.includes('Click')) {\n this._boundOnClick = this._onClick.bind(this);\n this._canvas.addEventListener('click', this._boundOnClick);\n }\n if (listeners.includes('PointerUp')) {\n this._boundOnPointerUp = this._onPointerUp.bind(this);\n this._canvas.addEventListener('pointerup', this._boundOnPointerUp);\n }\n if (listeners.includes('PointerDown')) {\n this._boundOnPointerDown = this._onPointerDown.bind(this);\n this._canvas.addEventListener('pointerdown', this._boundOnPointerDown);\n }\n if (listeners.includes('PointerMove')) {\n this._boundOnPointerMove = this._onPointerMove.bind(this);\n this._canvas.addEventListener('pointermove', this._boundOnPointerMove);\n }\n if (listeners.includes('PointerEnter')) {\n this._boundOnPointerEnter = this._onPointerEnter.bind(this);\n this._canvas.addEventListener('pointerenter', this._boundOnPointerEnter);\n }\n if (listeners.includes('PointerExit')) {\n this._boundOnPointerLeave = this._onPointerLeave.bind(this);\n this._canvas.addEventListener('pointerleave', this._boundOnPointerLeave);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._boundOnClick) {\n this._canvas.removeEventListener('click', this._boundOnClick);\n this._boundOnClick = null;\n }\n if (this._boundOnPointerUp) {\n this._canvas.removeEventListener('pointerup', this._boundOnPointerUp);\n this._boundOnPointerUp = null;\n }\n if (this._boundOnPointerDown) {\n this._canvas.removeEventListener('pointerdown', this._boundOnPointerDown);\n this._boundOnPointerDown = null;\n }\n if (this._boundOnPointerMove) {\n this._canvas.removeEventListener('pointermove', this._boundOnPointerMove);\n this._boundOnPointerMove = null;\n }\n if (this._boundOnPointerEnter) {\n this._canvas.removeEventListener('pointerenter', this._boundOnPointerEnter);\n this._boundOnPointerEnter = null;\n }\n if (this._boundOnPointerLeave) {\n this._canvas.removeEventListener('pointerleave', this._boundOnPointerLeave);\n this._boundOnPointerLeave = null;\n }\n }\n }\n // #endregion\n}\n","// resolved to a Worker constructor by plugin-inline-worker\nimport DotLottieWebWorker from './dotlottie.worker?worker&inline';\nimport type { MethodParamsMap, RpcRequest } from './types';\n\nexport class WorkerManager {\n private readonly _workers = new Map<string, Worker>();\n\n private readonly _animationWorkerMap = new Map<string, string>();\n\n public getWorker(workerId: string): Worker {\n if (!this._workers.has(workerId)) {\n this._workers.set(workerId, new DotLottieWebWorker());\n }\n\n return this._workers.get(workerId) as Worker;\n }\n\n public assignAnimationToWorker(animationId: string, workerId: string): void {\n this._animationWorkerMap.set(animationId, workerId);\n }\n\n public unassignAnimationFromWorker(animationId: string): void {\n this._animationWorkerMap.delete(animationId);\n }\n\n public sendMessage(workerId: string, message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this.getWorker(workerId).postMessage(message, transfer || []);\n }\n\n public broadcastMessage(message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this._workers.forEach((worker) => {\n worker.postMessage(message, transfer || []);\n });\n }\n\n public terminateWorker(workerId: string): void {\n const worker = this._workers.get(workerId);\n\n if (worker) {\n worker.terminate();\n this._workers.delete(workerId);\n }\n }\n}\n","import { IS_BROWSER } from '../constants';\nimport type { Marker } from '../core/dotlottie-player.types';\nimport type { EventListener, EventType, FrameEvent, StateMachineInternalMessage } from '../event-manager';\nimport { EventManager } from '../event-manager';\nimport { OffscreenObserver } from '../offscreen-observer';\nimport { CanvasResizeObserver } from '../resize-observer';\nimport type {\n ColorSlotValue,\n Config,\n GradientSlotValue,\n Layout,\n Manifest,\n Mode,\n RenderConfig,\n ScalarSlotValue,\n SlotType,\n StateMachineConfig,\n TextSlotValue,\n Transform,\n VectorSlotValue,\n} from '../types';\nimport { getDefaultDPR, getPointerPosition, handleOpenUrl, isElementInViewport } from '../utils';\n\nimport type { MethodParamsMap, MethodResultMap, RpcRequest, RpcResponse } from './types';\nimport { WorkerManager } from './worker-manager';\n\nfunction getCanvasSize(\n canvas: HTMLCanvasElement | OffscreenCanvas,\n devicePixelRatio: number,\n): { height: number; width: number } {\n if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement) {\n const { height: clientHeight, width: clientWidth } = canvas.getBoundingClientRect();\n\n if (clientHeight !== 0 && clientWidth !== 0) {\n return { width: clientWidth * devicePixelRatio, height: clientHeight * devicePixelRatio };\n }\n }\n\n return { width: canvas.width, height: canvas.height };\n}\n\nfunction generateUniqueId(): string {\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n\nexport interface DotLottieInstanceState {\n activeAnimationId: string | undefined;\n activeThemeId: string | undefined;\n autoplay: boolean;\n backgroundColor: string;\n currentFrame: number;\n duration: number;\n isFrozen: boolean;\n isLoaded: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n isReady: boolean;\n isStopped: boolean;\n layout: Layout | undefined;\n loop: boolean;\n loopCount: number;\n manifest: Manifest | null;\n marker: string | undefined;\n markers: Marker[];\n mode: Mode;\n renderConfig: RenderConfig;\n segment: [number, number] | undefined;\n segmentDuration: number;\n speed: number;\n totalFrames: number;\n useFrameInterpolation: boolean;\n}\n\n/**\n * Worker-based DotLottie player that offloads animation processing to a Web Worker thread.\n * Use this for better performance when rendering multiple animations or to keep the main thread responsive.\n * All methods are async (return Promises) due to worker communication. Requires HTMLCanvasElement or OffscreenCanvas.\n */\nexport class DotLottieWorker {\n private static readonly _workerManager = new WorkerManager();\n\n private readonly _eventManager = new EventManager();\n\n private readonly _id: string;\n\n private readonly _worker: Worker;\n\n private _canvas: HTMLCanvasElement | OffscreenCanvas | null;\n\n private _dotLottieInstanceState: DotLottieInstanceState = {\n loopCount: 0,\n markers: [],\n autoplay: false,\n backgroundColor: '',\n currentFrame: 0,\n duration: 0,\n loop: false,\n mode: 'forward',\n segment: [0, 0],\n segmentDuration: 0,\n speed: 1,\n totalFrames: 0,\n isLoaded: false,\n isPlaying: false,\n isPaused: false,\n isStopped: true,\n isFrozen: false,\n useFrameInterpolation: false,\n renderConfig: {\n devicePixelRatio: getDefaultDPR(),\n },\n activeAnimationId: '',\n activeThemeId: '',\n layout: undefined,\n marker: undefined,\n isReady: false,\n manifest: null,\n };\n\n private static _wasmUrl: string = '';\n\n private _created: boolean = false;\n\n // Bound event listeners for state machine\n private _boundOnClick: ((event: MouseEvent) => void) | null = null;\n\n private _boundOnPointerUp: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerDown: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerMove: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerEnter: ((event: PointerEvent) => void) | null = null;\n\n private _boundOnPointerLeave: ((event: PointerEvent) => void) | null = null;\n\n private _pendingConfig: Config | null = null;\n\n /**\n * Creates a worker-based DotLottie player instance that runs in a separate thread.\n * Use workerId to share a worker across multiple animations for better resource management.\n * @param config - Configuration with optional workerId to share worker threads\n * @throws Error if canvas is not HTMLCanvasElement or OffscreenCanvas\n */\n public constructor(config: Config & { workerId?: string }) {\n if (config.canvas) {\n const isHTMLCanvas = typeof HTMLCanvasElement !== 'undefined' && config.canvas instanceof HTMLCanvasElement;\n const isOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && config.canvas instanceof OffscreenCanvas;\n\n if (!isHTMLCanvas && !isOffscreenCanvas) {\n throw new Error('Worker-based DotLottie requires HTMLCanvasElement or OffscreenCanvas');\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this._canvas = (config.canvas as HTMLCanvasElement | OffscreenCanvas) ?? null;\n\n this._id = `dotlottie-${generateUniqueId()}`;\n const workerId = config.workerId || 'defaultWorker';\n\n // creates or gets the worker\n this._worker = DotLottieWorker._workerManager.getWorker(workerId);\n\n DotLottieWorker._workerManager.assignAnimationToWorker(this._id, workerId);\n\n if (DotLottieWorker._wasmUrl) {\n this._sendMessage('setWasmUrl', { url: DotLottieWorker._wasmUrl });\n }\n\n const fullConfig = {\n ...config,\n renderConfig: {\n ...config.renderConfig,\n devicePixelRatio: config.renderConfig?.devicePixelRatio || getDefaultDPR(),\n // freezeOnOffscreen is true by default to prevent unnecessary rendering when the canvas is offscreen\n freezeOnOffscreen: config.renderConfig?.freezeOnOffscreen ?? true,\n },\n };\n\n this._pendingConfig = fullConfig;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this._canvas) {\n this._create(fullConfig);\n this._pendingConfig = null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this._worker.addEventListener('message', this._handleWorkerEvent.bind(this));\n }\n\n private async _handleWorkerEvent(event: MessageEvent): Promise<void> {\n const rpcResponse: RpcResponse<\n | 'onComplete'\n | 'onLoad'\n | 'onDestroy'\n | 'onUnfreeze'\n | 'onFrame'\n | 'onRender'\n | 'onFreeze'\n | 'onPause'\n | 'onPlay'\n | 'onStop'\n | 'onLoadError'\n | 'onRenderError'\n | 'onReady'\n | 'onLoop'\n | 'onStateMachineStart'\n | 'onStateMachineStop'\n | 'onStateMachineTransition'\n | 'onStateMachineStateEntered'\n | 'onStateMachineStateExit'\n | 'onStateMachineCustomEvent'\n | 'onStateMachineError'\n | 'onStateMachineBooleanInputValueChange'\n // eslint-disable-next-line no-secrets/no-secrets\n | 'onStateMachineNumericInputValueChange'\n | 'onStateMachineStringInputValueChange'\n | 'onStateMachineInputFired'\n | 'onStateMachineInternalMessage'\n > = event.data;\n\n if (!rpcResponse.id) {\n if (rpcResponse.method === 'onLoad' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._dotLottieInstanceState.renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is initially offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n await this.freeze();\n }\n }\n\n if (this._dotLottieInstanceState.renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n }\n }\n }\n\n if (rpcResponse.method === 'onComplete' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onDestroy' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onUnfreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._dotLottieInstanceState.isFrozen = false;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFrame' && rpcResponse.result.instanceId === this._id) {\n this._dotLottieInstanceState.currentFrame = (rpcResponse.result.event as FrameEvent).currentFrame;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRender' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPause' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPlay' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoadError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRenderError' && rpcResponse.result.instanceId === this._id) {\n // Dont update the instance, since the Core crashed its no long accessible. Calling _updateDotLottieInstanceState will cause it to hang indefinitely.\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onReady' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStart' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._setupStateMachineListeners();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._cleanupStateMachineListeners();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineTransition' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStateEntered' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStateExit' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineCustomEvent' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (\n rpcResponse.method === 'onStateMachineBooleanInputValueChange' &&\n rpcResponse.result.instanceId === this._id\n ) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (\n // eslint-disable-next-line no-secrets/no-secrets\n rpcResponse.method === 'onStateMachineNumericInputValueChange' &&\n rpcResponse.result.instanceId === this._id\n ) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineStringInputValueChange' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineInputFired' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStateMachineInternalMessage' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n\n const internalEvent = rpcResponse.result.event as StateMachineInternalMessage;\n\n if (internalEvent.message.startsWith('OpenUrl: ')) {\n handleOpenUrl(internalEvent.message);\n }\n }\n }\n }\n\n private async _create(config: Config): Promise<void> {\n if (!this._canvas) {\n return;\n }\n\n let offscreen: OffscreenCanvas;\n\n if (this._canvas instanceof HTMLCanvasElement) {\n offscreen = this._canvas.transferControlToOffscreen();\n } else {\n offscreen = this._canvas;\n }\n\n const { instanceId } = await this._sendMessage(\n 'create',\n {\n instanceId: this._id,\n config: {\n ...config,\n canvas: offscreen as unknown as HTMLCanvasElement,\n },\n ...getCanvasSize(this._canvas, config.renderConfig?.devicePixelRatio || getDefaultDPR()),\n },\n [offscreen],\n );\n\n if (instanceId !== this._id) {\n throw new Error('Instance ID mismatch');\n }\n\n this._created = true;\n\n await this._updateDotLottieInstanceState();\n }\n\n public get loopCount(): number {\n return this._dotLottieInstanceState.loopCount;\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieInstanceState.isLoaded;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieInstanceState.isPlaying;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieInstanceState.isPaused;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieInstanceState.isStopped;\n }\n\n public get currentFrame(): number {\n return this._dotLottieInstanceState.currentFrame;\n }\n\n public get isFrozen(): boolean {\n return this._dotLottieInstanceState.isFrozen;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieInstanceState.segmentDuration;\n }\n\n public get totalFrames(): number {\n return this._dotLottieInstanceState.totalFrames;\n }\n\n public get segment(): [number, number] | undefined {\n return this._dotLottieInstanceState.segment;\n }\n\n public get speed(): number {\n return this._dotLottieInstanceState.speed;\n }\n\n public get duration(): number {\n return this._dotLottieInstanceState.duration;\n }\n\n public get isReady(): boolean {\n return this._dotLottieInstanceState.isReady;\n }\n\n public get mode(): Mode {\n return this._dotLottieInstanceState.mode;\n }\n\n public get canvas(): HTMLCanvasElement | OffscreenCanvas | null {\n return this._canvas;\n }\n\n /**\n * Sets the canvas element for rendering in the worker thread.\n * Cannot change canvas after worker instance is created with a different canvas.\n * @param canvas - HTMLCanvasElement or OffscreenCanvas to render to\n * @returns Promise that resolves when canvas has been set\n * @throws Error if canvas is not HTMLCanvasElement or OffscreenCanvas\n * @throws Error if trying to change canvas after instance is already created\n */\n public async setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void> {\n const isHTMLCanvas = typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement;\n const isOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas;\n\n if (!isHTMLCanvas && !isOffscreenCanvas) {\n throw new Error('Worker-based DotLottie requires HTMLCanvasElement or OffscreenCanvas');\n }\n\n if (this._canvas === canvas) return;\n\n if (this._created && this._canvas !== null) {\n throw new Error('Cannot change canvas after worker instance is already created with a different canvas.');\n }\n\n this._canvas = canvas;\n\n if (!this._created && this._pendingConfig) {\n await this._create(this._pendingConfig);\n this._pendingConfig = null;\n }\n }\n\n public get autoplay(): boolean {\n return this._dotLottieInstanceState.autoplay;\n }\n\n public get backgroundColor(): string {\n return this._dotLottieInstanceState.backgroundColor;\n }\n\n public get loop(): boolean {\n return this._dotLottieInstanceState.loop;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieInstanceState.useFrameInterpolation;\n }\n\n public get renderConfig(): RenderConfig {\n return this._dotLottieInstanceState.renderConfig;\n }\n\n public get manifest(): Manifest | null {\n return this._dotLottieInstanceState.manifest;\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieInstanceState.activeAnimationId;\n }\n\n public get marker(): string | undefined {\n return this._dotLottieInstanceState.marker;\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieInstanceState.activeThemeId;\n }\n\n public get layout(): Layout | undefined {\n return this._dotLottieInstanceState.layout;\n }\n\n /**\n * Starts or resumes animation playback in the worker thread.\n * Updates the internal playback state (e.g., isPlaying) to reflect that playback has started.\n * @returns Promise that resolves when playback has started and state has been updated\n */\n public async play(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('play', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n\n /*\n Check if the canvas is offscreen and freezing is enabled\n If freezeOnOffscreen is true and the canvas is currently outside the viewport,\n we immediately freeze the animation to avoid unnecessary rendering and performance overhead.\n */\n if (\n IS_BROWSER &&\n this._canvas instanceof HTMLCanvasElement &&\n this._dotLottieInstanceState.renderConfig.freezeOnOffscreen &&\n !isElementInViewport(this._canvas)\n ) {\n await this.freeze();\n }\n }\n\n /**\n * Pauses animation playback in the worker thread.\n * Awaits worker response before resolving. Updates isPaused state to true.\n * @returns Promise that resolves when playback has paused\n */\n public async pause(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('pause', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Stops animation playback and resets to start frame in the worker thread.\n * Awaits worker response before resolving. Updates isStopped state to true.\n * @returns Promise that resolves when playback has stopped\n */\n public async stop(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('stop', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Changes the animation playback speed in the worker thread.\n * Awaits worker response before resolving.\n * @param speed - Playback speed multiplier (e.g., 2 for 2x speed, 0.5 for half speed)\n * @returns Promise that resolves when speed has been updated\n */\n public async setSpeed(speed: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSpeed', { instanceId: this._id, speed });\n await this._updateDotLottieInstanceState();\n }\n\n public async setMode(mode: Mode): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMode', { instanceId: this._id, mode });\n await this._updateDotLottieInstanceState();\n }\n\n public async setFrame(frame: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setFrame', { frame, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSegment(start: number, end: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSegment', { instanceId: this._id, segment: [start, end] });\n await this._updateDotLottieInstanceState();\n }\n\n public async setRenderConfig(renderConfig: RenderConfig): Promise<void> {\n if (!this._created) return;\n\n const { devicePixelRatio, freezeOnOffscreen, quality, ...restConfig } = renderConfig;\n\n await this._sendMessage('setRenderConfig', {\n instanceId: this._id,\n renderConfig: {\n ...this._dotLottieInstanceState.renderConfig,\n ...restConfig,\n // devicePixelRatio is a special case, it should be set to the default value if it's not provided\n devicePixelRatio: devicePixelRatio || getDefaultDPR(),\n freezeOnOffscreen: freezeOnOffscreen ?? true,\n ...(quality !== undefined && { quality }),\n },\n });\n\n await this._updateDotLottieInstanceState();\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._dotLottieInstanceState.renderConfig.autoResize) {\n CanvasResizeObserver.observe(this._canvas, this);\n } else {\n CanvasResizeObserver.unobserve(this._canvas);\n }\n\n if (this._dotLottieInstanceState.renderConfig.freezeOnOffscreen) {\n OffscreenObserver.observe(this._canvas, this);\n\n // Check if canvas is currently offscreen and freeze if necessary\n if (!isElementInViewport(this._canvas)) {\n await this.freeze();\n }\n } else {\n OffscreenObserver.unobserve(this._canvas);\n // If the animation was previously frozen, we need to unfreeze it now\n // to ensure it resumes rendering when the canvas is back onscreen.\n if (this._dotLottieInstanceState.isFrozen) {\n await this.unfreeze();\n }\n }\n }\n }\n\n public async setUseFrameInterpolation(useFrameInterpolation: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setUseFrameInterpolation', { instanceId: this._id, useFrameInterpolation });\n await this._updateDotLottieInstanceState();\n }\n\n public async setTheme(themeId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = this._sendMessage('setTheme', { instanceId: this._id, themeId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * Dynamically loads a new animation in the worker thread, replacing the current one.\n * Awaits worker response before resolving. Stops current playback and cleans up resources.\n * @param config - Configuration for the new animation (all Config properties except canvas)\n * @returns Promise that resolves when animation has been loaded\n */\n public async load(config: Omit<Config, 'canvas'>): Promise<void> {\n if (!this._created) {\n if (this._pendingConfig) {\n this._pendingConfig = {\n ...this._pendingConfig,\n ...config,\n };\n }\n\n return;\n }\n\n await this._sendMessage('load', { config, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLoop(loop: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoop', { instanceId: this._id, loop });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Sets the number of additional times to replay the animation after the first play in the worker thread.\n * Requires loop to be true. A value of 0 means infinite replays; a positive value n means\n * the animation plays a total of n + 1 times (initial play + n replays).\n * @param loopCount - Number of additional replays (0 = infinite, 1 = plays twice, 2 = plays three times, etc.)\n * @returns Promise that resolves when loopCount has been updated\n */\n public async setLoopCount(loopCount: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoopCount', { instanceId: this._id, loopCount });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Recalculates and updates canvas dimensions in the worker thread.\n * Awaits worker response before resolving. Call when canvas container size changes.\n * @returns Promise that resolves when resize has completed\n */\n public async resize(): Promise<void> {\n if (!this._created || !this._canvas) return;\n\n const { height, width } = getCanvasSize(\n this._canvas,\n this._dotLottieInstanceState.renderConfig.devicePixelRatio || getDefaultDPR(),\n );\n\n await this._sendMessage('resize', { height, instanceId: this._id, width });\n await this._updateDotLottieInstanceState();\n }\n\n /**\n * Cleans up and destroys the player instance in the worker thread, releasing resources.\n * Awaits worker response before resolving. Stops playback and removes event listeners.\n * @returns Promise that resolves when cleanup has completed\n */\n public async destroy(): Promise<void> {\n if (!this._created) return;\n\n this._created = false;\n\n await this._sendMessage('destroy', { instanceId: this._id });\n\n this._cleanupStateMachineListeners();\n\n DotLottieWorker._workerManager.unassignAnimationFromWorker(this._id);\n this._eventManager.removeAllEventListeners();\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n OffscreenObserver.unobserve(this._canvas);\n CanvasResizeObserver.unobserve(this._canvas);\n }\n }\n\n public async freeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('freeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async unfreeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('unfreeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setBackgroundColor(backgroundColor: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setBackgroundColor', { instanceId: this._id, backgroundColor });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadAnimation(animationId: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('loadAnimation', { animationId, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLayout(layout: Layout): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLayout', { instanceId: this._id, layout });\n await this._updateDotLottieInstanceState();\n }\n\n // #region Slots API\n\n public async setSlots(slots: Record<string, unknown>): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSlots', { instanceId: this._id, slots });\n }\n\n public async getSlotIds(): Promise<string[]> {\n if (!this._created) return [];\n\n return this._sendMessage('getSlotIds', { instanceId: this._id });\n }\n\n public async getSlotType(slotId: string): Promise<SlotType | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('getSlotType', { instanceId: this._id, slotId });\n }\n\n public async getSlot(slotId: string): Promise<unknown> {\n if (!this._created) return undefined;\n\n return this._sendMessage('getSlot', { instanceId: this._id, slotId });\n }\n\n public async getSlots(): Promise<Record<string, unknown>> {\n if (!this._created) return {};\n\n return this._sendMessage('getSlots', { instanceId: this._id });\n }\n\n public async setColorSlot(slotId: string, value: ColorSlotValue): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setColorSlot', { instanceId: this._id, slotId, value });\n }\n\n public async setScalarSlot(slotId: string, value: ScalarSlotValue): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setScalarSlot', { instanceId: this._id, slotId, value });\n }\n\n public async setVectorSlot(slotId: string, value: VectorSlotValue): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setVectorSlot', { instanceId: this._id, slotId, value });\n }\n\n public async setGradientSlot(slotId: string, value: GradientSlotValue, colorStopCount: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setGradientSlot', { instanceId: this._id, slotId, value, colorStopCount });\n }\n\n public async setTextSlot(slotId: string, value: TextSlotValue): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setTextSlot', { instanceId: this._id, slotId, value });\n }\n\n public async resetSlot(slotId: string): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('resetSlot', { instanceId: this._id, slotId });\n }\n\n public async clearSlot(slotId: string): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('clearSlot', { instanceId: this._id, slotId });\n }\n\n public async resetSlots(): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('resetSlots', { instanceId: this._id });\n }\n\n public async clearSlots(): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('clearSlots', { instanceId: this._id });\n }\n\n // #endregion\n\n private async _updateDotLottieInstanceState(): Promise<void> {\n if (!this._created) return;\n\n const result = await this._sendMessage('getDotLottieInstanceState', { instanceId: this._id });\n\n this._dotLottieInstanceState = result.state;\n }\n\n public markers(): Marker[] {\n return this._dotLottieInstanceState.markers;\n }\n\n public async setMarker(marker: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMarker', { instanceId: this._id, marker });\n await this._updateDotLottieInstanceState();\n }\n\n public async setThemeData(themeData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const loaded = await this._sendMessage('setThemeData', { instanceId: this._id, themeData });\n\n await this._updateDotLottieInstanceState();\n\n return loaded;\n }\n\n public async setViewport(x: number, y: number, width: number, height: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setViewport', { x, y, width, height, instanceId: this._id });\n }\n\n public async animationSize(): Promise<{ height: number; width: number }> {\n if (!this._created) return { height: 0, width: 0 };\n\n return this._sendMessage('animationSize', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Start a tween animation between two frame values with custom easing\n * @param frame - Starting frame value\n * @param duration - Duration of the tween in seconds\n * @returns true if tween was started successfully\n */\n public async tween(frame: number, duration: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('tween', { instanceId: this._id, frame, duration });\n }\n\n /**\n * @experimental\n * Start a tween animation to a specific marker\n * @param marker - The marker name to tween to\n * @param duration - Duration of the tween in seconds\n * @returns true if tween was started successfully\n */\n public async tweenToMarker(marker: string, duration: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('tweenToMarker', { instanceId: this._id, marker, duration });\n }\n\n public async setTransform(transform: Transform): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setTransform', { instanceId: this._id, transform });\n }\n\n public async getTransform(): Promise<Transform | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('getTransform', { instanceId: this._id });\n }\n\n private async _sendMessage<T extends keyof MethodParamsMap>(\n method: T,\n params: MethodParamsMap[T],\n transfer?: Transferable[],\n ): Promise<MethodResultMap[T]> {\n const rpcRequest: RpcRequest<T> = {\n id: `dotlottie-request-${generateUniqueId()}`,\n method,\n params,\n };\n\n this._worker.postMessage(rpcRequest, transfer || []);\n\n return new Promise((resolve, reject) => {\n const onMessage = (event: MessageEvent): void => {\n const rpcResponse: RpcResponse<T> = event.data;\n\n // Check if the response corresponds to the request\n if (rpcResponse.id === rpcRequest.id) {\n this._worker.removeEventListener('message', onMessage);\n\n if (rpcResponse.error) {\n reject(new Error(`Failed to execute method ${method}: ${rpcResponse.error}`));\n } else {\n resolve(rpcResponse.result);\n }\n }\n };\n\n this._worker.addEventListener('message', onMessage);\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWorker._wasmUrl = url;\n }\n\n /**\n * @experimental\n *\n * Register a custom font for use in animations in worker contexts\n * @param fontName - The name of the font to register\n * @param fontSource - Either a URL string to fetch the font, or ArrayBuffer/Uint8Array of font data\n * @returns Promise<boolean> - true if registration message was sent successfully\n */\n public static async registerFont(fontName: string, fontSource: string | ArrayBuffer | Uint8Array): Promise<boolean> {\n try {\n const id = generateUniqueId();\n\n DotLottieWorker._workerManager.broadcastMessage({\n id,\n method: 'registerFont',\n params: {\n fontName,\n fontSource,\n },\n });\n\n // Note: we can't easily wait for responses from all workers in a broadcast,\n // so we return true if the broadcast was sent successfully\n return true;\n } catch (error) {\n console.error(`Error broadcasting registerFont for \"${fontName}\":`, error);\n\n return false;\n }\n }\n\n /**\n * @experimental\n * Load a state machine by ID\n * @param stateMachineId - The ID of the state machine to load\n * @returns true if the state machine was loaded successfully\n */\n public async stateMachineLoad(stateMachineId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('stateMachineLoad', { instanceId: this._id, stateMachineId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * @experimental\n * Load a state machine from data string\n * @param stateMachineData - The state machine data as a string\n * @returns true if the state machine was loaded successfully\n */\n public async stateMachineLoadData(stateMachineData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('stateMachineLoadData', { instanceId: this._id, stateMachineData });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n /**\n * @experimental\n * Start the state machine\n * @returns true if the state machine was started successfully\n */\n public async stateMachineStart(): Promise<boolean> {\n if (!this._created) return false;\n\n const started = await this._sendMessage('stateMachineStart', { instanceId: this._id });\n\n if (started) {\n this._setupStateMachineListeners();\n await this._updateDotLottieInstanceState();\n }\n\n return started;\n }\n\n /**\n * @experimental\n * Stop the state machine\n * @returns true if the state machine was stopped successfully\n */\n public async stateMachineStop(): Promise<boolean> {\n if (!this._created) return false;\n\n this._cleanupStateMachineListeners();\n\n return this._sendMessage('stateMachineStop', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Set a numeric input value for the state machine\n * @param name - The name of the numeric input\n * @param value - The numeric value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetNumericInput(name: string, value: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetNumericInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Set a boolean input value for the state machine\n * @param name - The name of the boolean input\n * @param value - The boolean value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetBooleanInput(name: string, value: boolean): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetBooleanInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Set the state machine config\n * @param config - The state machine config\n */\n public async stateMachineSetConfig(config: StateMachineConfig | null): Promise<void> {\n if (!this._created) return;\n\n this._sendMessage('stateMachineSetConfig', { instanceId: this._id, config });\n }\n\n /**\n * @experimental\n * Set a string input value for the state machine\n * @param name - The name of the string input\n * @param value - The string value to set\n * @returns true if the input was set successfully\n */\n public async stateMachineSetStringInput(name: string, value: string): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineSetStringInput', { instanceId: this._id, name, value });\n }\n\n /**\n * @experimental\n * Get a numeric input value from the state machine\n * @param name - The name of the numeric input\n * @returns The numeric value or undefined if not found\n */\n public async stateMachineGetNumericInput(name: string): Promise<number | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetNumericInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get a boolean input value from the state machine\n * @param name - The name of the boolean input\n * @returns The boolean value or undefined if not found\n */\n public async stateMachineGetBooleanInput(name: string): Promise<boolean | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetBooleanInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get a string input value from the state machine\n * @param name - The name of the string input\n * @returns The string value or undefined if not found\n */\n public async stateMachineGetStringInput(name: string): Promise<string | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetStringInput', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get all inputs\n * @returns All input keys, followed by their type\n */\n public async stateMachineGetInputs(): Promise<string[] | undefined> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachineGetInputs', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Fire an event in the state machine\n * @param name - The name of the event to fire\n */\n public async stateMachineFireEvent(name: string): Promise<void> {\n if (!this._created) return;\n\n this._sendMessage('stateMachineFireEvent', { instanceId: this._id, name });\n }\n\n /**\n * @experimental\n * Get the current status of the state machine\n * @returns The current status of the state machine as a string\n */\n public async stateMachineGetStatus(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetStatus', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Get the current state of the state machine\n * @returns The current state of the state machine as a string\n */\n public async stateMachineGetCurrentState(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetCurrentState', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Get the active state machine ID\n * @returns The active state machine ID as a string\n */\n public async stateMachineGetActiveId(): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGetActiveId', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Override the current state of the state machine\n * @param state - The state to override to\n * @param immediate - Whether to immediately transition to the state\n * @returns true if the state override was successful\n */\n public async stateMachineOverrideState(state: string, immediate: boolean = false): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('stateMachineOverrideState', { instanceId: this._id, state, immediate });\n }\n\n /**\n * @experimental\n * Get a specific state machine by ID\n * @param stateMachineId - The ID of the state machine to get\n * @returns The state machine data as a string\n */\n public async stateMachineGet(stateMachineId: string): Promise<string> {\n if (!this._created) return '';\n\n return this._sendMessage('stateMachineGet', { instanceId: this._id, stateMachineId });\n }\n\n /**\n * @experimental\n * Get the list of state machine listeners\n * @returns Array of listener names\n */\n public async stateMachineGetListeners(): Promise<string[]> {\n if (!this._created) return [];\n\n return this._sendMessage('stateMachineGetListeners', { instanceId: this._id });\n }\n\n /**\n * @experimental\n * Post a click event to the state machine\n * @param x - The x coordinate of the click\n * @param y - The y coordinate of the click\n * @returns The event result or undefined\n */\n public async stateMachinePostClickEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostClickEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer up event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerUpEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerUpEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer down event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerDownEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerDownEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer move event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerMoveEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerMoveEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer enter event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerEnterEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerEnterEvent', { instanceId: this._id, x, y });\n }\n\n /**\n * @experimental\n * Post a pointer exit event to the state machine\n * @param x - The x coordinate of the pointer\n * @param y - The y coordinate of the pointer\n * @returns The event result or undefined\n */\n public async stateMachinePostPointerExitEvent(x: number, y: number): Promise<void> {\n if (!this._created) return undefined;\n\n return this._sendMessage('stateMachinePostPointerExitEvent', { instanceId: this._id, x, y });\n }\n\n private _onClick(event: MouseEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostClickEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerUpEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerDownEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerMoveEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerEnterEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const position = getPointerPosition(event);\n\n if (position) {\n this._sendMessage('stateMachinePostPointerExitEvent', { instanceId: this._id, x: position.x, y: position.y });\n }\n }\n\n private async _setupStateMachineListeners(): Promise<void> {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n const listeners = await this._sendMessage('stateMachineGetListeners', { instanceId: this._id });\n\n if (listeners.length === 0) {\n return;\n }\n\n // Clean up any existing listeners first\n this._cleanupStateMachineListeners();\n\n if (listeners.includes('Click')) {\n this._boundOnClick = this._onClick.bind(this);\n this._canvas.addEventListener('click', this._boundOnClick);\n }\n\n if (listeners.includes('PointerUp')) {\n this._boundOnPointerUp = this._onPointerUp.bind(this);\n this._canvas.addEventListener('pointerup', this._boundOnPointerUp);\n }\n\n if (listeners.includes('PointerDown')) {\n this._boundOnPointerDown = this._onPointerDown.bind(this);\n this._canvas.addEventListener('pointerdown', this._boundOnPointerDown);\n }\n\n if (listeners.includes('PointerMove')) {\n this._boundOnPointerMove = this._onPointerMove.bind(this);\n this._canvas.addEventListener('pointermove', this._boundOnPointerMove);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._boundOnPointerEnter = this._onPointerEnter.bind(this);\n this._canvas.addEventListener('pointerenter', this._boundOnPointerEnter);\n }\n\n if (listeners.includes('PointerExit')) {\n this._boundOnPointerLeave = this._onPointerLeave.bind(this);\n this._canvas.addEventListener('pointerleave', this._boundOnPointerLeave);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n if (this._boundOnClick) {\n this._canvas.removeEventListener('click', this._boundOnClick);\n this._boundOnClick = null;\n }\n if (this._boundOnPointerUp) {\n this._canvas.removeEventListener('pointerup', this._boundOnPointerUp);\n this._boundOnPointerUp = null;\n }\n if (this._boundOnPointerDown) {\n this._canvas.removeEventListener('pointerdown', this._boundOnPointerDown);\n this._boundOnPointerDown = null;\n }\n if (this._boundOnPointerMove) {\n this._canvas.removeEventListener('pointermove', this._boundOnPointerMove);\n this._boundOnPointerMove = null;\n }\n if (this._boundOnPointerEnter) {\n this._canvas.removeEventListener('pointerenter', this._boundOnPointerEnter);\n this._boundOnPointerEnter = null;\n }\n if (this._boundOnPointerLeave) {\n this._canvas.removeEventListener('pointerleave', this._boundOnPointerLeave);\n this._boundOnPointerLeave = null;\n }\n }\n }\n}\n"],"mappings":"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"}