lvkun996 1 yıl önce
ebeveyn
işleme
edbbf34b9e

+ 12 - 0
index.html

@@ -16,8 +16,20 @@
     <!--preload-links-->
     <!--app-context-->
   </head>
+  <!-- <script src="./src/npm/rive.js"></script> -->
+
   <body>
     <div id="app"><!--app-html--></div>
     <script type="module" src="/src/main.ts"></script>
   </body>
+  <script src="src/static/rive.js"></script>
+  <script>
+    window['rive'] = rive.Rive
+    
+    console.log('rive.Rive:', rive.Rive);
+  </script>
+  <!-- <script>
+    window['rive'] = rive.Rive
+  </script> -->
+
 </html>

+ 3 - 5
package-lock.json

@@ -1083,11 +1083,6 @@
         "fastq": "^1.6.0"
       }
     },
-    "@rive-app/canvas": {
-      "version": "1.0.102",
-      "resolved": "https://registry.npmmirror.com/@rive-app/canvas/-/canvas-1.0.102.tgz",
-      "integrity": "sha512-EoJ+rNHh6ORn6wH1dKoI9trNddwSPkmYnGrVA7ShZwaDKl3LTDP8eWwSJp1wYmB2HE3dBjHZHQabQpFW8ohX7g=="
-    },
     "@rollup/pluginutils": {
       "version": "4.2.1",
       "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
@@ -2581,6 +2576,9 @@
       "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
       "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
     },
+    "my-rive": {
+      "version": "file:src/npm"
+    },
     "nanoid": {
       "version": "3.3.6",
       "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",

+ 1 - 1
package.json

@@ -51,11 +51,11 @@
     "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3061620221230002",
     "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3061620221230002",
     "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3061620221230002",
-    "@rive-app/canvas": "^1.0.102",
     "hammerjs": "^2.0.8",
     "js-base64": "^3.7.5",
     "less-loader": "^6.2.0",
     "lottie-web": "^5.12.2",
+    "my-rive": "file:src/npm",
     "pinia": "^2.0.33",
     "vconsole": "^3.15.0",
     "vue": "^3.2.45",

+ 17 - 5
src/components/luojigou-board-v2/luojigou-board-v2.vue

@@ -70,6 +70,7 @@ import successMp3 from '@/audio/success.mp3'
 import wrongMp3 from '@/audio/wrong.mp3'
 import timeoutMp3 from '@/audio/timeout.mp3'
 import lottie from 'lottie-web'
+import { onHide, onShow } from '@dcloudio/uni-app';
 
 interface IProps {
   card: {
@@ -136,8 +137,6 @@ const answerPictureList = ref<string[]>([])
 
 const tipState = ref<boolean>(false)
 
-
-
 const questionAni = ref(['ques-url'])
 
 const ansResultClass = ref(['result'])
@@ -150,8 +149,6 @@ const previewState = ref(false)
 
 const widget = { boardWidth: 581 / (812 / windowWidth),  boardHeight: 398 / (812 / windowWidth)}
 
-
-
 const emits = defineEmits(['loadingStart', 'loadingEnd', 'gameover'])
 
 const readState = ref(false)
@@ -278,7 +275,7 @@ const selectAnswer = (record: {isAns: boolean, select: boolean}) => {
       ansResultClass.value.pop()
       ans.value = 0
     }, 2000)
-    
+    lottieWrongRef.value.stop()
     lottieWrongRef.value.play()
 
   }
@@ -479,6 +476,21 @@ document.body.addEventListener('click', () => {
   stx.start()
 })
 
+onShow(() => {
+  audioMange.setVolume(1)
+})
+
+onHide(() => {
+  audioMange.setVolume(0)
+})
+// window['stopScheduler'] = () => {
+//   audioMange.setVolume(0)
+// }
+
+// window['playScheduler'] = () => {
+//   audioMange.setVolume(1)
+// }
+
 </script>
 
 <style lang="less" scoped >

+ 15 - 11
src/components/rive-ani/rive-ani.vue

@@ -27,14 +27,15 @@
   </view>
 </template>
 
-
 <script setup lang="ts" name="rive " >
 import { onMounted, ref, reactive, getCurrentInstance, defineExpose, nextTick} from 'vue'
-import { Rive } from "@rive-app/canvas"
+
+// import { Rive } from "@rive-app/canvas"
 import { useStaticImg, useQueryElInfo, useSchedulerOnce, useNavbarInfo } from '@/hooks/index'
 import { useWisdomCoinStore } from '@/store'
 import { AudioController } from '@/controller/AudioController';
-// import threeStarRiv from '@/ani/three_star.riv'
+// @ts-ignore
+// import rive from 'my-rive'
 
 enum AniEnum {
   'one',
@@ -83,7 +84,7 @@ const navbarInfo = useNavbarInfo()
 
 const coinLoginRef = ref()
 
-let rive: Rive
+let _rive = null
 
 let _resolve: any
 
@@ -100,7 +101,8 @@ const initHeartbeatAni = () => {
 
 // 1. 初始化rive动画
 const initRive = () => {
-
+  console.log('初始化rive');
+  
   const canvas = document.createElement('canvas')
   // const scale = window.devicePixelRatio;
   const scale = 1;
@@ -114,21 +116,23 @@ const initRive = () => {
   
   document.getElementById('rive-ani')?.appendChild(canvas)
   
-  rive = new Rive({
+  _rive = new window['rive']({
     // src: "https://res-game.luojigou.vip/coin1234.riv",
     src: 'https://res-game.luojigou.vip/three_star.riv',
+    // src: '@/rive/three_star.riv',
     canvas: canvas,
     autoplay: false,
     stateMachines: "bumpy",
     // artboard: state.cardType === 0 ? 'si-xing' : 'six-xing',
     artboard: 'Three Star Board',
     onLoad: () => {
+      console.log('rive加载');
       
-      rive.resizeToCanvas()
+      _rive.resizeToCanvas()
 
-      console.log(rive);
+      console.log(_rive);
 
-      rive.play(AniEnum[state.cointCount! - 1])
+      _rive.play(AniEnum[state.cointCount! - 1])
       // rive.play('one')
       
       for (let i = 0; i < state.cointCount!; i++) {
@@ -151,7 +155,7 @@ const initRive = () => {
       
     }
   });
-
+  
 }
 
 const createAnimationStep = (animation: UniApp.Animation, count: number) => {
@@ -352,4 +356,4 @@ onMounted(() => {
   width: 1000px !important;
 }
 
-</style>
+</style>@/npm/rive.js

+ 8 - 0
src/hooks/index.ts

@@ -172,9 +172,16 @@ export const useAudioMange = (src?: string) => {
     console.log(e);
   })
 
+  
+
   const onplayend = (cb: Function) => audioInstance.value?.onEnded(() => {
     cb && cb()
   })
+  
+  const setVolume = (volume: number) => {
+    audioInstance.value!.volume = volume
+  }
+
 
   onUnmounted(() => {
     destroy()
@@ -185,6 +192,7 @@ export const useAudioMange = (src?: string) => {
     destroy,
     play,
     onplayend,
+    setVolume
   }
 
   return atx

+ 8 - 1
src/main.ts

@@ -4,9 +4,16 @@ import * as Pinia from 'pinia'
 import staticImg from '@/utils/static'
 import VConsole from "vconsole"
 
-
 new VConsole()
 
+// console.log('rive:', rive.Rive);
+
+// window['rive'] = rive.Rive
+
+// const script = document.createElement('script')
+
+// script.src = './src/npm/rive.js'
+// window['rive'] = rive.Rive
 
 export function createApp() {
   const app = createSSRApp(App);

BIN
src/npm/my-rive-1.0.0.tgz


+ 11 - 0
src/npm/package.json

@@ -0,0 +1,11 @@
+{
+  "name": "my-rive",
+  "version": "1.0.0",
+  "description": "",
+  "main": "rive.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC"
+}

+ 7 - 6
src/pages/GameViewV2/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <view class="game-view-v2" :style="{pointerEvents: screenTouchState ? 'none' : 'all'}" >
+  <view class="game-view-v2" id="game-view-v2" :style="{pointerEvents: screenTouchState ? 'none' : 'all'}" >
     <image @click="backPage" class="back-icon" :src="staticImg.backIcon" />
     <view class="rockon-by-time" >
       {{rockonByTimeRef}}s
@@ -25,10 +25,7 @@ import { useAppBridge } from '@/hooks/app'
 import { onLoad } from '@dcloudio/uni-app';
 import { CardModeEnum, OpraModeEnum } from '@/enum/constant';
 import {
-  usePracticeStore, 
-  useOpraRecordStore, 
-  useGameCountdownStore, 
-  useCalcQuantityStore, 
+  usePracticeStore,
   useWisdomCoinStore,
   useCalcQuantityV2Store
 } from '@/store'
@@ -147,7 +144,7 @@ const submitQuestionCardData = async () => {
           capability: state.card.cardAble
         }
       }),
-      "winWisdomCoin":  wisdomCoinStore.itemCoin
+      "winWisdomCoin":  calcQuantityV2Store.userCardAnswerList.map(item  => item.correctQuantity).reduce((pre, next) => pre + next)
     }
   }
   console.log('提交');
@@ -200,8 +197,11 @@ onLoad(query => {
   GetCollectionDetailById()
 })
 
+
 onMounted(() => {
   stx.start()
+  
+
 })
 
 </script>
@@ -266,4 +266,5 @@ onMounted(() => {
   }
 }
 
+
 </style>

BIN
src/rive/three_star.riv


+ 4 - 0
src/service/index.ts

@@ -43,6 +43,10 @@ export const request = async <T>(
   })
 
   return response as API.Response<T>
+
+
+
+  
 }
 
 

+ 2388 - 0
src/static/rive.js

@@ -0,0 +1,2388 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["rive"] = factory();
+	else
+		root["rive"] = factory();
+})(this, () => {
+return /******/ (() => { // webpackBootstrap
+/******/ 	"use strict";
+/******/ 	var __webpack_modules__ = ([
+/* 0 */,
+/* 1 */
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+
+var Rive = (() => {
+  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
+  
+  return (
+function(moduleArg = {}) {
+
+var h=moduleArg,ba,ca;h.ready=new Promise((b,a)=>{ba=b;ca=a});
+function da(){function b(m){const l=d;c=a=0;d=new Map;l.forEach(p=>{try{p(m)}catch(k){console.error(k)}});this.fb();e&&e.Db()}let a=0,c=0,d=new Map,e=null,f=null;this.requestAnimationFrame=function(m){a||(a=requestAnimationFrame(b.bind(this)));const l=++c;d.set(l,m);return l};this.cancelAnimationFrame=function(m){d.delete(m);a&&0==d.size&&(cancelAnimationFrame(a),a=0)};this.Bb=function(m){f&&(document.body.remove(f),f=null);m||(f=document.createElement("div"),f.style.backgroundColor="black",f.style.position=
+"fixed",f.style.right=0,f.style.top=0,f.style.color="white",f.style.padding="4px",f.innerHTML="RIVE FPS",m=function(l){f.innerHTML="RIVE FPS "+l.toFixed(1)},document.body.appendChild(f));e=new function(){let l=0,p=0;this.Db=function(){var k=performance.now();p?(++l,k-=p,1E3<k&&(m(1E3*l/k),l=p=0)):(p=k,l=0)}}};this.yb=function(){f&&(document.body.remove(f),f=null);e=null};this.fb=function(){}}
+function ea(b){console.assert(!0);const a=new Map;let c=-Infinity;this.push=function(d){d=d+((1<<b)-1)>>b;a.has(d)&&clearTimeout(a.get(d));a.set(d,setTimeout(function(){a.delete(d);0==a.length?c=-Infinity:d==c&&(c=Math.max(...a.keys()),console.assert(c<d))},1E3));c=Math.max(d,c);return c<<b}}
+const ha="createConicGradient createImageData createLinearGradient createPattern createRadialGradient getContextAttributes getImageData getLineDash getTransform isContextLost isPointInPath isPointInStroke measureText".split(" "),ka=new function(){function b(){if(!a){var t=document.createElement("canvas"),g={alpha:1,depth:0,stencil:0,antialias:0,premultipliedAlpha:1,preserveDrawingBuffer:0,preferLowPowerToHighPerformance:0,failIfMajorPerformanceCaveat:0,enableExtensionsByDefault:1,explicitSwapControl:1,
+renderViaOffscreenBackBuffer:1};let n=t.getContext("webgl2",g);if(n)c=2;else if(n=t.getContext("webgl",g))c=1;else return console.log("No WebGL support. Image mesh will not be drawn."),!1;d=Math.min(n.getParameter(n.MAX_RENDERBUFFER_SIZE),n.getParameter(n.MAX_TEXTURE_SIZE));function w(H,x,A){x=n.createShader(x);n.shaderSource(x,A);n.compileShader(x);A=n.getShaderInfoLog(x);if(0<A.length)throw A;n.attachShader(H,x)}t=n.createProgram();w(t,n.VERTEX_SHADER,"attribute vec2 vertex;\n                attribute vec2 uv;\n                uniform vec4 mat;\n                uniform vec2 translate;\n                varying vec2 st;\n                void main() {\n                    st = uv;\n                    gl_Position = vec4(mat2(mat) * vertex + translate, 0, 1);\n                }");
+w(t,n.FRAGMENT_SHADER,"precision highp float;\n                uniform sampler2D image;\n                varying vec2 st;\n                void main() {\n                    gl_FragColor = texture2D(image, st);\n                }");n.bindAttribLocation(t,0,"vertex");n.bindAttribLocation(t,1,"uv");n.linkProgram(t);g=n.getProgramInfoLog(t);if(0<g.trim().length)throw g;e=n.getUniformLocation(t,"mat");f=n.getUniformLocation(t,"translate");n.useProgram(t);n.bindBuffer(n.ARRAY_BUFFER,n.createBuffer());
+n.enableVertexAttribArray(0);n.enableVertexAttribArray(1);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,n.createBuffer());n.uniform1i(n.getUniformLocation(t,"image"),0);n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);a=n}return!0}let a=null,c=0,d=0,e=null,f=null,m=0,l=0;this.Mb=function(){b();return d};this.vb=function(t){if(!b())return null;const g=a.createTexture();a.bindTexture(a.TEXTURE_2D,g);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,t);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);
+a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);2==c?(a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR_MIPMAP_LINEAR),a.generateMipmap(a.TEXTURE_2D)):a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);return g};const p=new ea(8),k=new ea(8),r=new ea(10),u=new ea(10);this.Ab=function(t,g,n,w,H){if(b()){var x=p.push(t),A=k.push(g);if(a.canvas.width!=x||a.canvas.height!=A)a.canvas.width=x,a.canvas.height=A;
+a.viewport(0,A-g,t,g);a.disable(a.SCISSOR_TEST);a.clearColor(0,0,0,0);a.clear(a.COLOR_BUFFER_BIT);a.enable(a.SCISSOR_TEST);n.sort((B,fa)=>fa.jb-B.jb);x=r.push(w);m!=x&&(a.bufferData(a.ARRAY_BUFFER,8*x,a.DYNAMIC_DRAW),m=x);x=0;for(var J of n)a.bufferSubData(a.ARRAY_BUFFER,x,J.Ra),x+=4*J.Ra.length;console.assert(x==4*w);for(var Q of n)a.bufferSubData(a.ARRAY_BUFFER,x,Q.mb),x+=4*Q.mb.length;console.assert(x==8*w);x=u.push(H);l!=x&&(a.bufferData(a.ELEMENT_ARRAY_BUFFER,2*x,a.DYNAMIC_DRAW),l=x);J=0;for(var aa of n)a.bufferSubData(a.ELEMENT_ARRAY_BUFFER,
+J,aa.indices),J+=2*aa.indices.length;console.assert(J==2*H);aa=0;Q=!0;x=J=0;for(const B of n){B.image.Ma!=aa&&(a.bindTexture(a.TEXTURE_2D,B.image.rb||null),aa=B.image.Ma);B.Pb?(a.scissor(B.Va,A-B.Wa-B.cb,B.$b,B.cb),Q=!0):Q&&(a.scissor(0,A-g,t,g),Q=!1);n=2/t;const fa=-2/g;a.uniform4f(e,B.xa[0]*n*B.Ga,B.xa[1]*fa*B.Ha,B.xa[2]*n*B.Ga,B.xa[3]*fa*B.Ha);a.uniform2f(f,B.xa[4]*n*B.Ga+n*(B.Va-B.Nb*B.Ga)-1,B.xa[5]*fa*B.Ha+fa*(B.Wa-B.Ob*B.Ha)+1);a.vertexAttribPointer(0,2,a.FLOAT,!1,0,x);a.vertexAttribPointer(1,
+2,a.FLOAT,!1,0,x+4*w);a.drawElements(a.TRIANGLES,B.indices.length,a.UNSIGNED_SHORT,J);x+=4*B.Ra.length;J+=2*B.indices.length}console.assert(x==4*w);console.assert(J==2*H)}};this.canvas=function(){return b()&&a.canvas}},la=h.onRuntimeInitialized;
+h.onRuntimeInitialized=function(){function b(q){switch(q){case k.srcOver:return"source-over";case k.screen:return"screen";case k.overlay:return"overlay";case k.darken:return"darken";case k.lighten:return"lighten";case k.colorDodge:return"color-dodge";case k.colorBurn:return"color-burn";case k.hardLight:return"hard-light";case k.softLight:return"soft-light";case k.difference:return"difference";case k.exclusion:return"exclusion";case k.multiply:return"multiply";case k.hue:return"hue";case k.saturation:return"saturation";
+case k.color:return"color";case k.luminosity:return"luminosity"}}function a(q){return"rgba("+((16711680&q)>>>16)+","+((65280&q)>>>8)+","+((255&q)>>>0)+","+((4278190080&q)>>>24)/255+")"}function c(){0<J.length&&(ka.Ab(A.drawWidth(),A.drawHeight(),J,Q,aa),J=[],aa=Q=0,A.reset(512,512));for(const q of x){for(const v of q.ja)v();q.ja=[]}x.clear()}la&&la();var d=h.RenderPaintStyle;const e=h.RenderPath,f=h.RenderPaint,m=h.Renderer,l=h.StrokeCap,p=h.StrokeJoin,k=h.BlendMode,r=d.fill,u=d.stroke,t=h.FillRule.evenOdd;
+let g=1;var n=h.RenderImage.extend("CanvasRenderImage",{__construct:function({Aa:q,Fa:v}={}){this.__parent.__construct.call(this);this.Ma=g;g=g+1&2147483647||1;this.Aa=q;this.Fa=v},decode:function(q){var v=this;v.Fa&&v.Fa(v);var C=new Image;C.src=URL.createObjectURL(new Blob([q],{type:"image/png"}));C.onload=function(){v.ob=C;v.rb=ka.vb(C);v.size(C.width,C.height);v.Aa&&v.Aa(v)}}}),w=e.extend("CanvasRenderPath",{__construct:function(){this.__parent.__construct.call(this);this.pa=new Path2D},rewind:function(){this.pa=
+new Path2D},addPath:function(q,v,C,D,z,E,F){var G=this.pa,T=G.addPath;q=q.pa;const K=new DOMMatrix;K.a=v;K.b=C;K.c=D;K.d=z;K.e=E;K.f=F;T.call(G,q,K)},fillRule:function(q){this.Ta=q},moveTo:function(q,v){this.pa.moveTo(q,v)},lineTo:function(q,v){this.pa.lineTo(q,v)},cubicTo:function(q,v,C,D,z,E){this.pa.bezierCurveTo(q,v,C,D,z,E)},close:function(){this.pa.closePath()}}),H=f.extend("CanvasRenderPaint",{color:function(q){this.Ua=a(q)},thickness:function(q){this.sb=q},join:function(q){switch(q){case p.miter:this.La=
+"miter";break;case p.round:this.La="round";break;case p.bevel:this.La="bevel"}},cap:function(q){switch(q){case l.butt:this.Ka="butt";break;case l.round:this.Ka="round";break;case l.square:this.Ka="square"}},style:function(q){this.qb=q},blendMode:function(q){this.nb=b(q)},clearGradient:function(){this.za=null},linearGradient:function(q,v,C,D){this.za={kb:q,lb:v,Za:C,$a:D,Pa:[]}},radialGradient:function(q,v,C,D){this.za={kb:q,lb:v,Za:C,$a:D,Pa:[],Kb:!0}},addStop:function(q,v){this.za.Pa.push({color:q,
+stop:v})},completeGradient:function(){},draw:function(q,v,C){let D=this.qb;var z=this.Ua,E=this.za;q.globalCompositeOperation=this.nb;if(null!=E){z=E.kb;var F=E.lb;const T=E.Za;var G=E.$a;const K=E.Pa;E.Kb?(E=T-z,G-=F,z=q.createRadialGradient(z,F,0,z,F,Math.sqrt(E*E+G*G))):z=q.createLinearGradient(z,F,T,G);for(let W=0,N=K.length;W<N;W++)F=K[W],z.addColorStop(F.stop,a(F.color));this.Ua=z;this.za=null}switch(D){case u:q.strokeStyle=z;q.lineWidth=this.sb;q.lineCap=this.Ka;q.lineJoin=this.La;q.stroke(v);
+break;case r:q.fillStyle=z,q.fill(v,C)}}});const x=new Set;let A=null,J=[],Q=0,aa=0;var B=h.CanvasRenderer=m.extend("Renderer",{__construct:function(q){this.__parent.__construct.call(this);this.oa=[1,0,0,1,0,0];this.ha=q.getContext("2d");this.Sa=q;this.ja=[]},save:function(){this.oa.push(...this.oa.slice(this.oa.length-6));this.ja.push(this.ha.save.bind(this.ha))},restore:function(){const q=this.oa.length-6;if(6>q)throw"restore() called without matching save().";this.oa.splice(q);this.ja.push(this.ha.restore.bind(this.ha))},
+transform:function(q,v,C,D,z,E){const F=this.oa,G=F.length-6;F.splice(G,6,F[G]*q+F[G+2]*v,F[G+1]*q+F[G+3]*v,F[G]*C+F[G+2]*D,F[G+1]*C+F[G+3]*D,F[G]*z+F[G+2]*E+F[G+4],F[G+1]*z+F[G+3]*E+F[G+5]);this.ja.push(this.ha.transform.bind(this.ha,q,v,C,D,z,E))},rotate:function(q){const v=Math.sin(q);q=Math.cos(q);this.transform(q,v,-v,q,0,0)},_drawPath:function(q,v){this.ja.push(v.draw.bind(v,this.ha,q.pa,q.Ta===t?"evenodd":"nonzero"))},_drawRiveImage:function(q,v,C){var D=q.ob;if(D){var z=this.ha,E=b(v);this.ja.push(function(){z.globalCompositeOperation=
+E;z.globalAlpha=C;z.drawImage(D,0,0);z.globalAlpha=1})}},_getMatrix:function(q){const v=this.oa,C=v.length-6;for(let D=0;6>D;++D)q[D]=v[C+D]},_drawImageMesh:function(q,v,C,D,z,E,F,G,T,K){var W=this.ha.canvas.width,N=this.ha.canvas.height;const sb=T-F,tb=K-G;F=Math.max(F,0);G=Math.max(G,0);T=Math.min(T,W);K=Math.min(K,N);const ua=T-F,va=K-G;console.assert(ua<=Math.min(sb,W));console.assert(va<=Math.min(tb,N));if(!(0>=ua||0>=va)){T=ua<sb||va<tb;W=K=1;var ia=Math.ceil(ua*K),ja=Math.ceil(va*W);N=ka.Mb();
+ia>N&&(K*=N/ia,ia=N);ja>N&&(W*=N/ja,ja=N);A||(A=new h.DynamicRectanizer(N),A.reset(512,512));N=A.addRect(ia,ja);0>N&&(c(),x.add(this),N=A.addRect(ia,ja),console.assert(0<=N));var ub=N&65535,vb=N>>16;J.push({xa:this.oa.slice(this.oa.length-6),image:q,Va:ub,Wa:vb,Nb:F,Ob:G,$b:ia,cb:ja,Ga:K,Ha:W,Ra:new Float32Array(D),mb:new Float32Array(z),indices:new Uint16Array(E),Pb:T,jb:q.Ma<<1|(T?1:0)});Q+=D.length;aa+=E.length;var oa=this.ha,kc=b(v);this.ja.push(function(){oa.save();oa.resetTransform();oa.globalCompositeOperation=
+kc;oa.globalAlpha=C;oa.drawImage(ka.canvas(),ub,vb,ia,ja,F,G,ua,va);oa.restore()})}},_clipPath:function(q){this.ja.push(this.ha.clip.bind(this.ha,q.pa,q.Ta===t?"evenodd":"nonzero"))},clear:function(){x.add(this);this.ja.push(this.ha.clearRect.bind(this.ha,0,0,this.Sa.width,this.Sa.height))},flush:function(){},translate:function(q,v){this.transform(1,0,0,1,q,v)}});h.makeRenderer=function(q){const v=new B(q),C=v.ha;return new Proxy(v,{get(D,z){if("function"===typeof D[z])return function(...E){return D[z].apply(D,
+E)};if("function"===typeof C[z]){if(-1<ha.indexOf(z))throw Error("RiveException: Method call to '"+z+"()' is not allowed, as the renderer cannot immediately pass through the return                 values of any canvas 2d context methods.");return function(...E){v.ja.push(C[z].bind(C,...E))}}return D[z]},set(D,z,E){if(z in C)return C[z]=E,!0}})};h.decodeImage=function(q,v){(new n({Aa:v})).decode(q)};h.renderFactory={makeRenderPaint:function(){return new H},makeRenderPath:function(){return new w},makeRenderImage:function(){let q=
+Za;return new n({Fa:()=>{q.total++},Aa:()=>{q.loaded++;if(q.loaded===q.total){const v=q.ready;v&&(v(),q.ready=null)}}})}};let fa=h.load,Za=null;h.load=function(q,v,C=!0){const D=new h.FallbackFileAssetLoader;void 0!==v&&D.addLoader(v);C&&(v=new h.CDNFileAssetLoader,D.addLoader(v));return new Promise(function(z){let E=null;Za={total:0,loaded:0,ready:function(){z(E)}};E=fa(q,D);0==Za.total&&z(E)})};d=new da;h.requestAnimationFrame=d.requestAnimationFrame.bind(d);h.cancelAnimationFrame=d.cancelAnimationFrame.bind(d);
+h.enableFPSCounter=d.Bb.bind(d);h.disableFPSCounter=d.yb;d.fb=c;h.cleanup=function(){A&&A.delete()}};const ma=h.onRuntimeInitialized;
+h.onRuntimeInitialized=function(){ma&&ma();let b=h.decodeFont;h.decodeFont=function(c,d){c=b(c);d(c)};const a=h.FileAssetLoader;h.ptrToAsset=c=>{let d=h.ptrToFileAsset(c);return d.isImage?h.ptrToImageAsset(c):d.isFont?h.ptrToFontAsset(c):d};h.CustomFileAssetLoader=a.extend("CustomFileAssetLoader",{__construct:function({loadContents:c}){this.__parent.__construct.call(this);this.pb=c},loadContents:function(c,d){c=h.ptrToAsset(c);return this.pb(c,d)}});h.CDNFileAssetLoader=a.extend("CDNFileAssetLoader",
+{__construct:function(){this.__parent.__construct.call(this)},loadContents:function(c){let d=h.ptrToAsset(c);c=d.cdnUuid;if(""===c)return!1;(function(e,f){var m=new XMLHttpRequest;m.responseType="arraybuffer";m.onreadystatechange=function(){4==m.readyState&&200==m.status&&f(m)};m.open("GET",e,!0);m.send(null)})(d.cdnBaseUrl+"/"+c,e=>{d.decode(new Uint8Array(e.response))});return!0}});h.FallbackFileAssetLoader=a.extend("FallbackFileAssetLoader",{__construct:function(){this.__parent.__construct.call(this);
+this.eb=[]},addLoader:function(c){this.eb.push(c)},loadContents:function(c,d){for(let e of this.eb)if(e.loadContents(c,d))return!0;return!1}})};var na=Object.assign({},h),pa="./this.program",qa="object"==typeof window,ra="function"==typeof importScripts,y="",sa,ta;
+if(qa||ra)ra?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),_scriptDir&&(y=_scriptDir),0!==y.indexOf("blob:")?y=y.substr(0,y.replace(/[?#].*/,"").lastIndexOf("/")+1):y="",ra&&(ta=b=>{var a=new XMLHttpRequest;a.open("GET",b,!1);a.responseType="arraybuffer";a.send(null);return new Uint8Array(a.response)}),sa=(b,a,c)=>{var d=new XMLHttpRequest;d.open("GET",b,!0);d.responseType="arraybuffer";d.onload=()=>{200==d.status||0==d.status&&d.response?
+a(d.response):c()};d.onerror=c;d.send(null)};var wa=h.print||console.log.bind(console),xa=h.printErr||console.error.bind(console);Object.assign(h,na);na=null;h.thisProgram&&(pa=h.thisProgram);var ya;h.wasmBinary&&(ya=h.wasmBinary);var noExitRuntime=h.noExitRuntime||!0;"object"!=typeof WebAssembly&&za("no native wasm support detected");var Aa,I,Ba=!1,Ca,L,Da,Ea,M,O,Fa,Ga;
+function Ha(){var b=Aa.buffer;h.HEAP8=Ca=new Int8Array(b);h.HEAP16=Da=new Int16Array(b);h.HEAP32=M=new Int32Array(b);h.HEAPU8=L=new Uint8Array(b);h.HEAPU16=Ea=new Uint16Array(b);h.HEAPU32=O=new Uint32Array(b);h.HEAPF32=Fa=new Float32Array(b);h.HEAPF64=Ga=new Float64Array(b)}var Ia,Ja=[],Ka=[],La=[];function Ma(){var b=h.preRun.shift();Ja.unshift(b)}var Na=0,Oa=null,Pa=null;
+function za(b){if(h.onAbort)h.onAbort(b);b="Aborted("+b+")";xa(b);Ba=!0;b=new WebAssembly.RuntimeError(b+". Build with -sASSERTIONS for more info.");ca(b);throw b;}function Qa(b){return b.startsWith("data:application/octet-stream;base64,")}var Ra;Ra="canvas_advanced.wasm";if(!Qa(Ra)){var Sa=Ra;Ra=h.locateFile?h.locateFile(Sa,y):y+Sa}function Ta(b){if(b==Ra&&ya)return new Uint8Array(ya);if(ta)return ta(b);throw"both async and sync fetching of the wasm failed";}
+function Ua(b){if(!ya&&(qa||ra)){if("function"==typeof fetch&&!b.startsWith("file://"))return fetch(b,{credentials:"same-origin"}).then(a=>{if(!a.ok)throw"failed to load wasm binary file at '"+b+"'";return a.arrayBuffer()}).catch(()=>Ta(b));if(sa)return new Promise((a,c)=>{sa(b,d=>a(new Uint8Array(d)),c)})}return Promise.resolve().then(()=>Ta(b))}function Va(b,a,c){return Ua(b).then(d=>WebAssembly.instantiate(d,a)).then(d=>d).then(c,d=>{xa("failed to asynchronously prepare wasm: "+d);za(d)})}
+function Wa(b,a){var c=Ra;return ya||"function"!=typeof WebAssembly.instantiateStreaming||Qa(c)||c.startsWith("file://")||"function"!=typeof fetch?Va(c,b,a):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,b).then(a,function(e){xa("wasm streaming compile failed: "+e);xa("falling back to ArrayBuffer instantiation");return Va(c,b,a)}))}var Xa=b=>{for(;0<b.length;)b.shift()(h)};
+function Ya(b){if(void 0===b)return"_unknown";b=b.replace(/[^a-zA-Z0-9_]/g,"$");var a=b.charCodeAt(0);return 48<=a&&57>=a?`_${b}`:b}function $a(b,a){b=Ya(b);return{[b]:function(){return a.apply(this,arguments)}}[b]}function ab(){this.qa=[void 0];this.bb=[]}var P=new ab,bb=void 0;function R(b){throw new bb(b);}
+var S=b=>{b||R("Cannot use deleted val. handle = "+b);return P.get(b).value},U=b=>{switch(b){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:return P.tb({ib:1,value:b})}};
+function cb(b){var a=Error,c=$a(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}var db=void 0,eb=void 0;function V(b){for(var a="";L[b];)a+=eb[L[b++]];return a}var fb=[];
+function gb(){for(;fb.length;){var b=fb.pop();b.ba.wa=!1;b["delete"]()}}var hb=void 0,ib={};function jb(b,a){for(void 0===a&&R("ptr should not be undefined");b.fa;)a=b.Ba(a),b=b.fa;return a}var kb={};function lb(b){b=mb(b);var a=V(b);nb(b);return a}function ob(b,a){var c=kb[b];void 0===c&&R(a+" has unknown type "+lb(b));return c}function pb(){}var qb=!1;function rb(b){--b.count.value;0===b.count.value&&(b.ia?b.la.ra(b.ia):b.ea.ca.ra(b.da))}
+function wb(b,a,c){if(a===c)return b;if(void 0===c.fa)return null;b=wb(b,a,c.fa);return null===b?null:c.zb(b)}var xb={};function yb(b,a){a=jb(b,a);return ib[a]}var zb=void 0;function Ab(b){throw new zb(b);}function Bb(b,a){a.ea&&a.da||Ab("makeClassHandle requires ptr and ptrType");!!a.la!==!!a.ia&&Ab("Both smartPtrType and smartPtr must be specified");a.count={value:1};return Cb(Object.create(b,{ba:{value:a}}))}
+function Cb(b){if("undefined"===typeof FinalizationRegistry)return Cb=a=>a,b;qb=new FinalizationRegistry(a=>{rb(a.ba)});Cb=a=>{var c=a.ba;c.ia&&qb.register(a,{ba:c},a);return a};pb=a=>{qb.unregister(a)};return Cb(b)}var Db={};function Eb(b){for(;b.length;){var a=b.pop();b.pop()(a)}}function Fb(b){return this.fromWireType(M[b>>2])}var Gb={},Hb={};
+function X(b,a,c){function d(l){l=c(l);l.length!==b.length&&Ab("Mismatched type converter count");for(var p=0;p<b.length;++p)Y(b[p],l[p])}b.forEach(function(l){Hb[l]=a});var e=Array(a.length),f=[],m=0;a.forEach((l,p)=>{kb.hasOwnProperty(l)?e[p]=kb[l]:(f.push(l),Gb.hasOwnProperty(l)||(Gb[l]=[]),Gb[l].push(()=>{e[p]=kb[l];++m;m===f.length&&d(e)}))});0===f.length&&d(e)}
+function Ib(b){switch(b){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(`Unknown type size: ${b}`);}}function Jb(b,a,c={}){var d=a.name;b||R(`type "${d}" must have a positive integer typeid pointer`);if(kb.hasOwnProperty(b)){if(c.Jb)return;R(`Cannot register type '${d}' twice`)}kb[b]=a;delete Hb[b];Gb.hasOwnProperty(b)&&(a=Gb[b],delete Gb[b],a.forEach(e=>e()))}
+function Y(b,a,c={}){if(!("argPackAdvance"in a))throw new TypeError("registerType registeredInstance requires argPackAdvance");Jb(b,a,c)}function Kb(b){R(b.ba.ea.ca.name+" instance already deleted")}function Lb(){}
+function Mb(b,a,c){if(void 0===b[a].ga){var d=b[a];b[a]=function(){b[a].ga.hasOwnProperty(arguments.length)||R(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${b[a].ga})!`);return b[a].ga[arguments.length].apply(this,arguments)};b[a].ga=[];b[a].ga[d.va]=d}}
+function Nb(b,a,c){h.hasOwnProperty(b)?((void 0===c||void 0!==h[b].ga&&void 0!==h[b].ga[c])&&R(`Cannot register public name '${b}' twice`),Mb(h,b,b),h.hasOwnProperty(c)&&R(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),h[b].ga[c]=a):(h[b]=a,void 0!==c&&(h[b].ac=c))}function Ob(b,a,c,d,e,f,m,l){this.name=b;this.constructor=a;this.ma=c;this.ra=d;this.fa=e;this.Eb=f;this.Ba=m;this.zb=l;this.gb=[]}
+function Pb(b,a,c){for(;a!==c;)a.Ba||R(`Expected null or instance of ${c.name}, got an instance of ${a.name}`),b=a.Ba(b),a=a.fa;return b}function Qb(b,a){if(null===a)return this.Na&&R(`null is not a valid ${this.name}`),0;a.ba||R(`Cannot pass "${Rb(a)}" as a ${this.name}`);a.ba.da||R(`Cannot pass deleted object as a pointer of type ${this.name}`);return Pb(a.ba.da,a.ba.ea.ca,this.ca)}
+function Sb(b,a){if(null===a){this.Na&&R(`null is not a valid ${this.name}`);if(this.Ea){var c=this.Oa();null!==b&&b.push(this.ra,c);return c}return 0}a.ba||R(`Cannot pass "${Rb(a)}" as a ${this.name}`);a.ba.da||R(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.Da&&a.ba.ea.Da&&R(`Cannot convert argument of type ${a.ba.la?a.ba.la.name:a.ba.ea.name} to parameter type ${this.name}`);c=Pb(a.ba.da,a.ba.ea.ca,this.ca);if(this.Ea)switch(void 0===a.ba.ia&&R("Passing raw pointer to smart pointer is illegal"),
+this.Vb){case 0:a.ba.la===this?c=a.ba.ia:R(`Cannot convert argument of type ${a.ba.la?a.ba.la.name:a.ba.ea.name} to parameter type ${this.name}`);break;case 1:c=a.ba.ia;break;case 2:if(a.ba.la===this)c=a.ba.ia;else{var d=a.clone();c=this.Rb(c,U(function(){d["delete"]()}));null!==b&&b.push(this.ra,c)}break;default:R("Unsupporting sharing policy")}return c}
+function Tb(b,a){if(null===a)return this.Na&&R(`null is not a valid ${this.name}`),0;a.ba||R(`Cannot pass "${Rb(a)}" as a ${this.name}`);a.ba.da||R(`Cannot pass deleted object as a pointer of type ${this.name}`);a.ba.ea.Da&&R(`Cannot convert argument of type ${a.ba.ea.name} to parameter type ${this.name}`);return Pb(a.ba.da,a.ba.ea.ca,this.ca)}
+function Ub(b,a,c,d){this.name=b;this.ca=a;this.Na=c;this.Da=d;this.Ea=!1;this.ra=this.Rb=this.Oa=this.hb=this.Vb=this.Qb=void 0;void 0!==a.fa?this.toWireType=Sb:(this.toWireType=d?Qb:Tb,this.ka=null)}function Vb(b,a,c){h.hasOwnProperty(b)||Ab("Replacing nonexistant public symbol");void 0!==h[b].ga&&void 0!==c?h[b].ga[c]=a:(h[b]=a,h[b].va=c)}
+var Wb=(b,a)=>{var c=[];return function(){c.length=0;Object.assign(c,arguments);if(b.includes("j")){var d=h["dynCall_"+b];d=c&&c.length?d.apply(null,[a].concat(c)):d.call(null,a)}else d=Ia.get(a).apply(null,c);return d}};function Z(b,a){b=V(b);var c=b.includes("j")?Wb(b,a):Ia.get(a);"function"!=typeof c&&R(`unknown function pointer with signature ${b}: ${a}`);return c}var Xb=void 0;
+function Yb(b,a){function c(f){e[f]||kb[f]||(Hb[f]?Hb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};a.forEach(c);throw new Xb(`${b}: `+d.map(lb).join([", "]));}
+function Zb(b,a,c,d,e){var f=a.length;2>f&&R("argTypes array size mismatch! Must at least get return value and 'this' types!");var m=null!==a[1]&&null!==c,l=!1;for(c=1;c<a.length;++c)if(null!==a[c]&&void 0===a[c].ka){l=!0;break}var p="void"!==a[0].name,k=f-2,r=Array(k),u=[],t=[];return function(){arguments.length!==k&&R(`function ${b} called with ${arguments.length} arguments, expected ${k} args!`);t.length=0;u.length=m?2:1;u[0]=e;if(m){var g=a[1].toWireType(t,this);u[1]=g}for(var n=0;n<k;++n)r[n]=
+a[n+2].toWireType(t,arguments[n]),u.push(r[n]);n=d.apply(null,u);if(l)Eb(t);else for(var w=m?1:2;w<a.length;w++){var H=1===w?g:r[w-2];null!==a[w].ka&&a[w].ka(H)}g=p?a[0].fromWireType(n):void 0;return g}}function $b(b,a){for(var c=[],d=0;d<b;d++)c.push(O[a+4*d>>2]);return c}
+function ac(b,a,c){b instanceof Object||R(`${c} with invalid "this": ${b}`);b instanceof a.ca.constructor||R(`${c} incompatible with "this" of type ${b.constructor.name}`);b.ba.da||R(`cannot call emscripten binding method ${c} on deleted object`);return Pb(b.ba.da,b.ba.ea.ca,a.ca)}function bc(b){b>=P.Xa&&0===--P.get(b).ib&&P.wb(b)}
+function cc(b,a,c){switch(a){case 0:return function(d){return this.fromWireType((c?Ca:L)[d])};case 1:return function(d){return this.fromWireType((c?Da:Ea)[d>>1])};case 2:return function(d){return this.fromWireType((c?M:O)[d>>2])};default:throw new TypeError("Unknown integer type: "+b);}}function Rb(b){if(null===b)return"null";var a=typeof b;return"object"===a||"array"===a||"function"===a?b.toString():""+b}
+function dc(b,a){switch(a){case 2:return function(c){return this.fromWireType(Fa[c>>2])};case 3:return function(c){return this.fromWireType(Ga[c>>3])};default:throw new TypeError("Unknown float type: "+b);}}
+function ec(b,a,c){switch(a){case 0:return c?function(d){return Ca[d]}:function(d){return L[d]};case 1:return c?function(d){return Da[d>>1]}:function(d){return Ea[d>>1]};case 2:return c?function(d){return M[d>>2]}:function(d){return O[d>>2]};default:throw new TypeError("Unknown integer type: "+b);}}
+var fc=(b,a,c,d)=>{if(0<d){d=c+d-1;for(var e=0;e<b.length;++e){var f=b.charCodeAt(e);if(55296<=f&&57343>=f){var m=b.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}if(127>=f){if(c>=d)break;a[c++]=f}else{if(2047>=f){if(c+1>=d)break;a[c++]=192|f>>6}else{if(65535>=f){if(c+2>=d)break;a[c++]=224|f>>12}else{if(c+3>=d)break;a[c++]=240|f>>18;a[c++]=128|f>>12&63}a[c++]=128|f>>6&63}a[c++]=128|f&63}}a[c]=0}},gc=b=>{for(var a=0,c=0;c<b.length;++c){var d=b.charCodeAt(c);127>=d?a++:2047>=d?a+=2:55296<=d&&57343>=
+d?(a+=4,++c):a+=3}return a},hc="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,ic=(b,a,c)=>{var d=a+c;for(c=a;b[c]&&!(c>=d);)++c;if(16<c-a&&b.buffer&&hc)return hc.decode(b.subarray(a,c));for(d="";a<c;){var e=b[a++];if(e&128){var f=b[a++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var m=b[a++]&63;e=224==(e&240)?(e&15)<<12|f<<6|m:(e&7)<<18|f<<12|m<<6|b[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},
+jc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,lc=(b,a)=>{var c=b>>1;for(var d=c+a/2;!(c>=d)&&Ea[c];)++c;c<<=1;if(32<c-b&&jc)return jc.decode(L.subarray(b,c));c="";for(d=0;!(d>=a/2);++d){var e=Da[b+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c},mc=(b,a,c)=>{void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=a;c=c<2*b.length?c/2:b.length;for(var e=0;e<c;++e)Da[a>>1]=b.charCodeAt(e),a+=2;Da[a>>1]=0;return a-d},nc=b=>2*b.length,oc=(b,a)=>{for(var c=0,d="";!(c>=a/
+4);){var e=M[b+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},pc=(b,a,c)=>{void 0===c&&(c=2147483647);if(4>c)return 0;var d=a;c=d+c-4;for(var e=0;e<b.length;++e){var f=b.charCodeAt(e);if(55296<=f&&57343>=f){var m=b.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}M[a>>2]=f;a+=4;if(a+4>c)break}M[a>>2]=0;return a-d},qc=b=>{for(var a=0,c=0;c<b.length;++c){var d=b.charCodeAt(c);55296<=d&&57343>=d&&++c;a+=4}return a},rc={};
+function sc(b){var a=rc[b];return void 0===a?V(b):a}var tc=[];function uc(b){var a=tc.length;tc.push(b);return a}function vc(b,a){for(var c=Array(b),d=0;d<b;++d)c[d]=ob(O[a+4*d>>2],"parameter "+d);return c}
+var wc=[],xc={},zc=()=>{if(!yc){var b={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",_:pa||"./this.program"},a;for(a in xc)void 0===xc[a]?delete b[a]:b[a]=xc[a];var c=[];for(a in b)c.push(`${a}=${b[a]}`);yc=c}return yc},yc,Ac=[null,[],[]],Bc=b=>0===b%4&&(0!==b%100||0===b%400),Cc=[31,29,31,30,31,30,31,31,30,31,30,31],Dc=[31,28,31,30,31,30,31,31,30,31,30,31];
+function Ec(b){var a=Array(gc(b)+1);fc(b,a,0,a.length);return a}
+var Fc=(b,a,c,d)=>{function e(g,n,w){for(g="number"==typeof g?g.toString():g||"";g.length<n;)g=w[0]+g;return g}function f(g,n){return e(g,n,"0")}function m(g,n){function w(x){return 0>x?-1:0<x?1:0}var H;0===(H=w(g.getFullYear()-n.getFullYear()))&&0===(H=w(g.getMonth()-n.getMonth()))&&(H=w(g.getDate()-n.getDate()));return H}function l(g){switch(g.getDay()){case 0:return new Date(g.getFullYear()-1,11,29);case 1:return g;case 2:return new Date(g.getFullYear(),0,3);case 3:return new Date(g.getFullYear(),
+0,2);case 4:return new Date(g.getFullYear(),0,1);case 5:return new Date(g.getFullYear()-1,11,31);case 6:return new Date(g.getFullYear()-1,11,30)}}function p(g){var n=g.ta;for(g=new Date((new Date(g.ua+1900,0,1)).getTime());0<n;){var w=g.getMonth(),H=(Bc(g.getFullYear())?Cc:Dc)[w];if(n>H-g.getDate())n-=H-g.getDate()+1,g.setDate(1),11>w?g.setMonth(w+1):(g.setMonth(0),g.setFullYear(g.getFullYear()+1));else{g.setDate(g.getDate()+n);break}}w=new Date(g.getFullYear()+1,0,4);n=l(new Date(g.getFullYear(),
+0,4));w=l(w);return 0>=m(n,g)?0>=m(w,g)?g.getFullYear()+1:g.getFullYear():g.getFullYear()-1}var k=M[d+40>>2];d={Yb:M[d>>2],Xb:M[d+4>>2],Ia:M[d+8>>2],Qa:M[d+12>>2],Ja:M[d+16>>2],ua:M[d+20>>2],na:M[d+24>>2],ta:M[d+28>>2],bc:M[d+32>>2],Wb:M[d+36>>2],Zb:k?k?ic(L,k):"":""};c=c?ic(L,c):"";k={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y",
+"%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var r in k)c=c.replace(new RegExp(r,"g"),k[r]);var u="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),t="January February March April May June July August September October November December".split(" ");k={"%a":g=>u[g.na].substring(0,3),"%A":g=>u[g.na],"%b":g=>t[g.Ja].substring(0,3),"%B":g=>t[g.Ja],"%C":g=>f((g.ua+1900)/
+100|0,2),"%d":g=>f(g.Qa,2),"%e":g=>e(g.Qa,2," "),"%g":g=>p(g).toString().substring(2),"%G":g=>p(g),"%H":g=>f(g.Ia,2),"%I":g=>{g=g.Ia;0==g?g=12:12<g&&(g-=12);return f(g,2)},"%j":g=>{for(var n=0,w=0;w<=g.Ja-1;n+=(Bc(g.ua+1900)?Cc:Dc)[w++]);return f(g.Qa+n,3)},"%m":g=>f(g.Ja+1,2),"%M":g=>f(g.Xb,2),"%n":()=>"\n","%p":g=>0<=g.Ia&&12>g.Ia?"AM":"PM","%S":g=>f(g.Yb,2),"%t":()=>"\t","%u":g=>g.na||7,"%U":g=>f(Math.floor((g.ta+7-g.na)/7),2),"%V":g=>{var n=Math.floor((g.ta+7-(g.na+6)%7)/7);2>=(g.na+371-g.ta-
+2)%7&&n++;if(n)53==n&&(w=(g.na+371-g.ta)%7,4==w||3==w&&Bc(g.ua)||(n=1));else{n=52;var w=(g.na+7-g.ta-1)%7;(4==w||5==w&&Bc(g.ua%400-1))&&n++}return f(n,2)},"%w":g=>g.na,"%W":g=>f(Math.floor((g.ta+7-(g.na+6)%7)/7),2),"%y":g=>(g.ua+1900).toString().substring(2),"%Y":g=>g.ua+1900,"%z":g=>{g=g.Wb;var n=0<=g;g=Math.abs(g)/60;return(n?"+":"-")+String("0000"+(g/60*100+g%60)).slice(-4)},"%Z":g=>g.Zb,"%%":()=>"%"};c=c.replace(/%%/g,"\x00\x00");for(r in k)c.includes(r)&&(c=c.replace(new RegExp(r,"g"),k[r](d)));
+c=c.replace(/\0\0/g,"%");r=Ec(c);if(r.length>a)return 0;Ca.set(r,b);return r.length-1};Object.assign(ab.prototype,{get(b){return this.qa[b]},has(b){return void 0!==this.qa[b]},tb(b){var a=this.bb.pop()||this.qa.length;this.qa[a]=b;return a},wb(b){this.qa[b]=void 0;this.bb.push(b)}});bb=h.BindingError=class extends Error{constructor(b){super(b);this.name="BindingError"}};P.qa.push({value:void 0},{value:null},{value:!0},{value:!1});P.Xa=P.qa.length;
+h.count_emval_handles=function(){for(var b=0,a=P.Xa;a<P.qa.length;++a)void 0!==P.qa[a]&&++b;return b};db=h.PureVirtualError=cb("PureVirtualError");for(var Gc=Array(256),Hc=0;256>Hc;++Hc)Gc[Hc]=String.fromCharCode(Hc);eb=Gc;h.getInheritedInstanceCount=function(){return Object.keys(ib).length};h.getLiveInheritedInstances=function(){var b=[],a;for(a in ib)ib.hasOwnProperty(a)&&b.push(ib[a]);return b};h.flushPendingDeletes=gb;h.setDelayFunction=function(b){hb=b;fb.length&&hb&&hb(gb)};
+zb=h.InternalError=class extends Error{constructor(b){super(b);this.name="InternalError"}};Lb.prototype.isAliasOf=function(b){if(!(this instanceof Lb&&b instanceof Lb))return!1;var a=this.ba.ea.ca,c=this.ba.da,d=b.ba.ea.ca;for(b=b.ba.da;a.fa;)c=a.Ba(c),a=a.fa;for(;d.fa;)b=d.Ba(b),d=d.fa;return a===d&&c===b};
+Lb.prototype.clone=function(){this.ba.da||Kb(this);if(this.ba.ya)return this.ba.count.value+=1,this;var b=Cb,a=Object,c=a.create,d=Object.getPrototypeOf(this),e=this.ba;b=b(c.call(a,d,{ba:{value:{count:e.count,wa:e.wa,ya:e.ya,da:e.da,ea:e.ea,ia:e.ia,la:e.la}}}));b.ba.count.value+=1;b.ba.wa=!1;return b};Lb.prototype["delete"]=function(){this.ba.da||Kb(this);this.ba.wa&&!this.ba.ya&&R("Object already scheduled for deletion");pb(this);rb(this.ba);this.ba.ya||(this.ba.ia=void 0,this.ba.da=void 0)};
+Lb.prototype.isDeleted=function(){return!this.ba.da};Lb.prototype.deleteLater=function(){this.ba.da||Kb(this);this.ba.wa&&!this.ba.ya&&R("Object already scheduled for deletion");fb.push(this);1===fb.length&&hb&&hb(gb);this.ba.wa=!0;return this};Ub.prototype.Fb=function(b){this.hb&&(b=this.hb(b));return b};Ub.prototype.Ya=function(b){this.ra&&this.ra(b)};Ub.prototype.argPackAdvance=8;Ub.prototype.readValueFromPointer=Fb;Ub.prototype.deleteObject=function(b){if(null!==b)b["delete"]()};
+Ub.prototype.fromWireType=function(b){function a(){return this.Ea?Bb(this.ca.ma,{ea:this.Qb,da:c,la:this,ia:b}):Bb(this.ca.ma,{ea:this,da:b})}var c=this.Fb(b);if(!c)return this.Ya(b),null;var d=yb(this.ca,c);if(void 0!==d){if(0===d.ba.count.value)return d.ba.da=c,d.ba.ia=b,d.clone();d=d.clone();this.Ya(b);return d}d=this.ca.Eb(c);d=xb[d];if(!d)return a.call(this);d=this.Da?d.ub:d.pointerType;var e=wb(c,this.ca,d.ca);return null===e?a.call(this):this.Ea?Bb(d.ca.ma,{ea:d,da:e,la:this,ia:b}):Bb(d.ca.ma,
+{ea:d,da:e})};Xb=h.UnboundTypeError=cb("UnboundTypeError");
+var Jc={N:function(b,a,c){b=V(b);a=ob(a,"wrapper");c=S(c);var d=[].slice,e=a.ca,f=e.ma,m=e.fa.ma,l=e.fa.constructor;b=$a(b,function(){e.fa.gb.forEach(function(k){if(this[k]===m[k])throw new db(`Pure virtual function ${k} must be implemented in JavaScript`);}.bind(this));Object.defineProperty(this,"__parent",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&R("Pass correct 'this' to __construct");var k=l.implement.apply(void 0,[this].concat(d.call(arguments)));
+pb(k);var r=k.ba;k.notifyOnDestruction();r.ya=!0;Object.defineProperties(this,{ba:{value:r}});Cb(this);k=r.da;k=jb(e,k);ib.hasOwnProperty(k)?R(`Tried to register registered instance: ${k}`):ib[k]=this};f.__destruct=function(){this===f&&R("Pass correct 'this' to __destruct");pb(this);var k=this.ba.da;k=jb(e,k);ib.hasOwnProperty(k)?delete ib[k]:R(`Tried to unregister unregistered instance: ${k}`)};b.prototype=Object.create(f);for(var p in c)b.prototype[p]=c[p];return U(b)},O:function(b){var a=Db[b];
+delete Db[b];var c=a.Oa,d=a.ra,e=a.ab,f=e.map(m=>m.Ib).concat(e.map(m=>m.Tb));X([b],f,m=>{var l={};e.forEach((p,k)=>{var r=m[k],u=p.Gb,t=p.Hb,g=m[k+e.length],n=p.Sb,w=p.Ub;l[p.Cb]={read:H=>r.fromWireType(u(t,H)),write:(H,x)=>{var A=[];n(w,H,g.toWireType(A,x));Eb(A)}}});return[{name:a.name,fromWireType:function(p){var k={},r;for(r in l)k[r]=l[r].read(p);d(p);return k},toWireType:function(p,k){for(var r in l)if(!(r in k))throw new TypeError(`Missing field: "${r}"`);var u=c();for(r in l)l[r].write(u,
+k[r]);null!==p&&p.push(d,u);return u},argPackAdvance:8,readValueFromPointer:Fb,ka:d}]})},C:function(){},K:function(b,a,c,d,e){var f=Ib(c);a=V(a);Y(b,{name:a,fromWireType:function(m){return!!m},toWireType:function(m,l){return l?d:e},argPackAdvance:8,readValueFromPointer:function(m){if(1===c)var l=Ca;else if(2===c)l=Da;else if(4===c)l=M;else throw new TypeError("Unknown boolean type size: "+a);return this.fromWireType(l[m>>f])},ka:null})},f:function(b,a,c,d,e,f,m,l,p,k,r,u,t){r=V(r);f=Z(e,f);l&&(l=
+Z(m,l));k&&(k=Z(p,k));t=Z(u,t);var g=Ya(r);Nb(g,function(){Yb(`Cannot construct ${r} due to unbound types`,[d])});X([b,a,c],d?[d]:[],function(n){n=n[0];if(d){var w=n.ca;var H=w.ma}else H=Lb.prototype;n=$a(g,function(){if(Object.getPrototypeOf(this)!==x)throw new bb("Use 'new' to construct "+r);if(void 0===A.sa)throw new bb(r+" has no accessible constructor");var Q=A.sa[arguments.length];if(void 0===Q)throw new bb(`Tried to invoke ctor of ${r} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(A.sa).toString()}) parameters instead!`);
+return Q.apply(this,arguments)});var x=Object.create(H,{constructor:{value:n}});n.prototype=x;var A=new Ob(r,n,x,t,w,f,l,k);A.fa&&(void 0===A.fa.Ca&&(A.fa.Ca=[]),A.fa.Ca.push(A));w=new Ub(r,A,!0,!1);H=new Ub(r+"*",A,!1,!1);var J=new Ub(r+" const*",A,!1,!0);xb[b]={pointerType:H,ub:J};Vb(g,n);return[w,H,J]})},j:function(b,a,c,d,e,f,m){var l=$b(c,d);a=V(a);f=Z(e,f);X([],[b],function(p){function k(){Yb(`Cannot call ${r} due to unbound types`,l)}p=p[0];var r=`${p.name}.${a}`;a.startsWith("@@")&&(a=Symbol[a.substring(2)]);
+var u=p.ca.constructor;void 0===u[a]?(k.va=c-1,u[a]=k):(Mb(u,a,r),u[a].ga[c-1]=k);X([],l,function(t){t=Zb(r,[t[0],null].concat(t.slice(1)),null,f,m);void 0===u[a].ga?(t.va=c-1,u[a]=t):u[a].ga[c-1]=t;if(p.ca.Ca)for(const g of p.ca.Ca)g.constructor.hasOwnProperty(a)||(g.constructor[a]=t);return[]});return[]})},x:function(b,a,c,d,e,f,m,l){a=V(a);f=Z(e,f);X([],[b],function(p){p=p[0];var k=`${p.name}.${a}`,r={get(){Yb(`Cannot access ${k} due to unbound types`,[c])},enumerable:!0,configurable:!0};r.set=
+l?()=>{Yb(`Cannot access ${k} due to unbound types`,[c])}:()=>{R(`${k} is a read-only property`)};Object.defineProperty(p.ca.constructor,a,r);X([],[c],function(u){u=u[0];var t={get(){return u.fromWireType(f(d))},enumerable:!0};l&&(l=Z(m,l),t.set=g=>{var n=[];l(d,u.toWireType(n,g));Eb(n)});Object.defineProperty(p.ca.constructor,a,t);return[]});return[]})},s:function(b,a,c,d,e,f){var m=$b(a,c);e=Z(d,e);X([],[b],function(l){l=l[0];var p=`constructor ${l.name}`;void 0===l.ca.sa&&(l.ca.sa=[]);if(void 0!==
+l.ca.sa[a-1])throw new bb(`Cannot register multiple constructors with identical number of parameters (${a-1}) for class '${l.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);l.ca.sa[a-1]=()=>{Yb(`Cannot construct ${l.name} due to unbound types`,m)};X([],m,function(k){k.splice(1,0,null);l.ca.sa[a-1]=Zb(p,k,null,e,f);return[]});return[]})},a:function(b,a,c,d,e,f,m,l){var p=$b(c,d);a=V(a);f=Z(e,f);X([],[b],function(k){function r(){Yb(`Cannot call ${u} due to unbound types`,
+p)}k=k[0];var u=`${k.name}.${a}`;a.startsWith("@@")&&(a=Symbol[a.substring(2)]);l&&k.ca.gb.push(a);var t=k.ca.ma,g=t[a];void 0===g||void 0===g.ga&&g.className!==k.name&&g.va===c-2?(r.va=c-2,r.className=k.name,t[a]=r):(Mb(t,a,u),t[a].ga[c-2]=r);X([],p,function(n){n=Zb(u,n,k,f,m);void 0===t[a].ga?(n.va=c-2,t[a]=n):t[a].ga[c-2]=n;return[]});return[]})},e:function(b,a,c,d,e,f,m,l,p,k){a=V(a);e=Z(d,e);X([],[b],function(r){r=r[0];var u=`${r.name}.${a}`,t={get(){Yb(`Cannot access ${u} due to unbound types`,
+[c,m])},enumerable:!0,configurable:!0};t.set=p?()=>{Yb(`Cannot access ${u} due to unbound types`,[c,m])}:()=>{R(u+" is a read-only property")};Object.defineProperty(r.ca.ma,a,t);X([],p?[c,m]:[c],function(g){var n=g[0],w={get(){var x=ac(this,r,u+" getter");return n.fromWireType(e(f,x))},enumerable:!0};if(p){p=Z(l,p);var H=g[1];w.set=function(x){var A=ac(this,r,u+" setter"),J=[];p(k,A,H.toWireType(J,x));Eb(J)}}Object.defineProperty(r.ca.ma,a,w);return[]});return[]})},J:function(b,a){a=V(a);Y(b,{name:a,
+fromWireType:function(c){var d=S(c);bc(c);return d},toWireType:function(c,d){return U(d)},argPackAdvance:8,readValueFromPointer:Fb,ka:null})},p:function(b,a,c,d){function e(){}c=Ib(c);a=V(a);e.values={};Y(b,{name:a,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:function(f,m){return m.value},argPackAdvance:8,readValueFromPointer:cc(a,c,d),ka:null});Nb(a,e)},d:function(b,a,c){var d=ob(b,"enum");a=V(a);b=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},
+constructor:{value:$a(`${d.name}_${a}`,function(){})}});b.values[c]=d;b[a]=d},y:function(b,a,c){c=Ib(c);a=V(a);Y(b,{name:a,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:dc(a,c),ka:null})},m:function(b,a,c,d,e,f){var m=$b(a,c);b=V(b);e=Z(d,e);Nb(b,function(){Yb(`Cannot call ${b} due to unbound types`,m)},a-1);X([],m,function(l){Vb(b,Zb(b,[l[0],null].concat(l.slice(1)),null,e,f),a-1);return[]})},l:function(b,a,c,d,e){a=V(a);-1===e&&(e=4294967295);
+e=Ib(c);var f=l=>l;if(0===d){var m=32-8*c;f=l=>l<<m>>>m}c=a.includes("unsigned")?function(l,p){return p>>>0}:function(l,p){return p};Y(b,{name:a,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:ec(a,e,0!==d),ka:null})},g:function(b,a,c){function d(f){f>>=2;var m=O;return new e(m.buffer,m[f+1],m[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][a];c=V(c);Y(b,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Jb:!0})},
+z:function(b,a){a=V(a);var c="std::string"===a;Y(b,{name:a,fromWireType:function(d){var e=O[d>>2],f=d+4;if(c)for(var m=f,l=0;l<=e;++l){var p=f+l;if(l==e||0==L[p]){m=m?ic(L,m,p-m):"";if(void 0===k)var k=m;else k+=String.fromCharCode(0),k+=m;m=p+1}}else{k=Array(e);for(l=0;l<e;++l)k[l]=String.fromCharCode(L[f+l]);k=k.join("")}nb(d);return k},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f="string"==typeof e;f||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof
+Int8Array||R("Cannot pass non-string to std::string");var m=c&&f?gc(e):e.length;var l=Ic(4+m+1),p=l+4;O[l>>2]=m;if(c&&f)fc(e,L,p,m+1);else if(f)for(f=0;f<m;++f){var k=e.charCodeAt(f);255<k&&(nb(p),R("String has UTF-16 code units that do not fit in 8 bits"));L[p+f]=k}else for(f=0;f<m;++f)L[p+f]=e[f];null!==d&&d.push(nb,l);return l},argPackAdvance:8,readValueFromPointer:Fb,ka:function(d){nb(d)}})},u:function(b,a,c){c=V(c);if(2===a){var d=lc;var e=mc;var f=nc;var m=()=>Ea;var l=1}else 4===a&&(d=oc,e=
+pc,f=qc,m=()=>O,l=2);Y(b,{name:c,fromWireType:function(p){for(var k=O[p>>2],r=m(),u,t=p+4,g=0;g<=k;++g){var n=p+4+g*a;if(g==k||0==r[n>>l])t=d(t,n-t),void 0===u?u=t:(u+=String.fromCharCode(0),u+=t),t=n+a}nb(p);return u},toWireType:function(p,k){"string"!=typeof k&&R(`Cannot pass non-string to C++ string type ${c}`);var r=f(k),u=Ic(4+r+a);O[u>>2]=r>>l;e(k,u+4,r+a);null!==p&&p.push(nb,u);return u},argPackAdvance:8,readValueFromPointer:Fb,ka:function(p){nb(p)}})},Q:function(b,a,c,d,e,f){Db[b]={name:V(a),
+Oa:Z(c,d),ra:Z(e,f),ab:[]}},P:function(b,a,c,d,e,f,m,l,p,k){Db[b].ab.push({Cb:V(a),Ib:c,Gb:Z(d,e),Hb:f,Tb:m,Sb:Z(l,p),Ub:k})},L:function(b,a){a=V(a);Y(b,{Lb:!0,name:a,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},v:function(b,a,c){b=S(b);a=ob(a,"emval::as");var d=[],e=U(d);O[c>>2]=e;return a.toWireType(d,b)},w:function(b,a,c,d,e){b=tc[b];a=S(a);c=sc(c);var f=[];O[d>>2]=U(f);return b(a,c,f,e)},i:function(b,a,c,d){b=tc[b];a=S(a);c=sc(c);b(a,c,null,d)},c:bc,h:function(b,a){var c=
+vc(b,a),d=c[0];a=d.name+"_$"+c.slice(1).map(function(m){return m.name}).join("_")+"$";var e=wc[a];if(void 0!==e)return e;var f=Array(b-1);e=uc((m,l,p,k)=>{for(var r=0,u=0;u<b-1;++u)f[u]=c[u+1].readValueFromPointer(k+r),r+=c[u+1].argPackAdvance;m=m[l].apply(m,f);for(u=0;u<b-1;++u)c[u+1].xb&&c[u+1].xb(f[u]);if(!d.Lb)return d.toWireType(p,m)});return wc[a]=e},t:function(b){b=sc(b);return U(h[b])},M:function(b,a){b=S(b);a=S(a);return U(b[a])},n:function(b){4<b&&(P.get(b).ib+=1)},o:function(b){return U(sc(b))},
+A:function(){return U({})},q:function(b){var a=S(b);Eb(a);bc(b)},k:function(b,a,c){b=S(b);a=S(a);c=S(c);b[a]=c},r:function(b,a){b=ob(b,"_emval_take_value");b=b.readValueFromPointer(a);return U(b)},b:()=>{za("")},E:b=>{var a=L.length;b>>>=0;if(2147483648<b)return!1;for(var c=1;4>=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);var e=Math;d=Math.max(b,d);a:{e=e.min.call(e,2147483648,d+(65536-d%65536)%65536)-Aa.buffer.byteLength+65535>>>16;try{Aa.grow(e);Ha();var f=1;break a}catch(m){}f=void 0}if(f)return!0}return!1},
+F:(b,a)=>{var c=0;zc().forEach(function(d,e){var f=a+c;e=O[b+4*e>>2]=f;for(f=0;f<d.length;++f)Ca[e++>>0]=d.charCodeAt(f);Ca[e>>0]=0;c+=d.length+1});return 0},G:(b,a)=>{var c=zc();O[b>>2]=c.length;var d=0;c.forEach(function(e){d+=e.length+1});O[a>>2]=d;return 0},H:()=>52,B:function(){return 70},I:(b,a,c,d)=>{for(var e=0,f=0;f<c;f++){var m=O[a>>2],l=O[a+4>>2];a+=8;for(var p=0;p<l;p++){var k=L[m+p],r=Ac[b];0===k||10===k?((1===b?wa:xa)(ic(r,0)),r.length=0):r.push(k)}e+=l}O[d>>2]=e;return 0},D:(b,a,c,
+d)=>Fc(b,a,c,d)};(function(){function b(c){I=c=c.exports;Aa=I.R;Ha();Ia=I.X;Ka.unshift(I.S);Na--;h.monitorRunDependencies&&h.monitorRunDependencies(Na);if(0==Na&&(null!==Oa&&(clearInterval(Oa),Oa=null),Pa)){var d=Pa;Pa=null;d()}return c}var a={a:Jc};Na++;h.monitorRunDependencies&&h.monitorRunDependencies(Na);if(h.instantiateWasm)try{return h.instantiateWasm(a,b)}catch(c){xa("Module.instantiateWasm callback failed with error: "+c),ca(c)}Wa(a,function(c){b(c.instance)}).catch(ca);return{}})();
+var nb=b=>(nb=I.T)(b),Ic=b=>(Ic=I.U)(b),mb=b=>(mb=I.V)(b);h.__embind_initialize_bindings=()=>(h.__embind_initialize_bindings=I.W)();h.dynCall_jiji=(b,a,c,d,e)=>(h.dynCall_jiji=I.Y)(b,a,c,d,e);h.dynCall_viijii=(b,a,c,d,e,f,m)=>(h.dynCall_viijii=I.Z)(b,a,c,d,e,f,m);h.dynCall_iiiiij=(b,a,c,d,e,f,m)=>(h.dynCall_iiiiij=I._)(b,a,c,d,e,f,m);h.dynCall_iiiiijj=(b,a,c,d,e,f,m,l,p)=>(h.dynCall_iiiiijj=I.$)(b,a,c,d,e,f,m,l,p);
+h.dynCall_iiiiiijj=(b,a,c,d,e,f,m,l,p,k)=>(h.dynCall_iiiiiijj=I.aa)(b,a,c,d,e,f,m,l,p,k);var Kc;Pa=function Lc(){Kc||Mc();Kc||(Pa=Lc)};
+function Mc(){function b(){if(!Kc&&(Kc=!0,h.calledRun=!0,!Ba)){Xa(Ka);ba(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var a=h.postRun.shift();La.unshift(a)}Xa(La)}}if(!(0<Na)){if(h.preRun)for("function"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)Ma();Xa(Ja);0<Na||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1);b()},1)):b())}}
+if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mc();
+
+
+  return moduleArg.ready
+}
+
+);
+})();
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Rive);
+
+
+
+/***/ }),
+/* 2 */
+/***/ ((module) => {
+
+module.exports = JSON.parse('{"name":"@rive-app/canvas","version":"2.7.0","description":"Rive\'s canvas based web api.","main":"rive.js","homepage":"https://rive.app","repository":{"type":"git","url":"https://github.com/rive-app/rive-wasm/tree/master/js"},"keywords":["rive","animation"],"author":"Rive","contributors":["Luigi Rosso <luigi@rive.app> (https://rive.app)","Maxwell Talbot <max@rive.app> (https://rive.app)","Arthur Vivian <arthur@rive.app> (https://rive.app)","Umberto Sonnino <umberto@rive.app> (https://rive.app)","Matthew Sullivan <matt.j.sullivan@gmail.com> (mailto:matt.j.sullivan@gmail.com)"],"license":"MIT","files":["rive.js","rive.js.map","rive.wasm","rive.d.ts","rive_advanced.mjs.d.ts"],"typings":"rive.d.ts","dependencies":{},"browser":{"fs":false,"path":false}}');
+
+/***/ }),
+/* 3 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   BLANK_URL: () => (/* reexport safe */ _sanitizeUrl__WEBPACK_IMPORTED_MODULE_1__.BLANK_URL),
+/* harmony export */   registerTouchInteractions: () => (/* reexport safe */ _registerTouchInteractions__WEBPACK_IMPORTED_MODULE_0__.registerTouchInteractions),
+/* harmony export */   sanitizeUrl: () => (/* reexport safe */ _sanitizeUrl__WEBPACK_IMPORTED_MODULE_1__.sanitizeUrl)
+/* harmony export */ });
+/* harmony import */ var _registerTouchInteractions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
+/* harmony import */ var _sanitizeUrl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+
+
+
+
+/***/ }),
+/* 4 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   registerTouchInteractions: () => (/* binding */ registerTouchInteractions)
+/* harmony export */ });
+var _this = undefined;
+/**
+ * Returns the clientX and clientY properties from touch or mouse events. Also
+ * calls preventDefault() on the event if it is a touchstart or touchmove to prevent
+ * scrolling the page on mobile devices
+ * @param event - Either a TouchEvent or a MouseEvent
+ * @returns - Coordinates of the clientX and clientY properties from the touch/mouse event
+ */
+var getClientCoordinates = function (event) {
+    var _a, _b;
+    if (["touchstart", "touchmove"].indexOf(event.type) > -1 &&
+        ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length)) {
+        event.preventDefault();
+        return {
+            clientX: event.touches[0].clientX,
+            clientY: event.touches[0].clientY,
+        };
+    }
+    else if (event.type === "touchend" &&
+        ((_b = event.changedTouches) === null || _b === void 0 ? void 0 : _b.length)) {
+        return {
+            clientX: event.changedTouches[0].clientX,
+            clientY: event.changedTouches[0].clientY,
+        };
+    }
+    else {
+        return {
+            clientX: event.clientX,
+            clientY: event.clientY,
+        };
+    }
+};
+/**
+ * Registers mouse move/up/down callback handlers on the canvas to send meaningful coordinates to
+ * the state machine pointer move/up/down functions based on cursor interaction
+ */
+var registerTouchInteractions = function (_a) {
+    var canvas = _a.canvas, artboard = _a.artboard, _b = _a.stateMachines, stateMachines = _b === void 0 ? [] : _b, renderer = _a.renderer, rive = _a.rive, fit = _a.fit, alignment = _a.alignment;
+    if (!canvas ||
+        !stateMachines.length ||
+        !renderer ||
+        !rive ||
+        !artboard ||
+        typeof window === "undefined") {
+        return null;
+    }
+    var processEventCallback = function (event) {
+        var boundingRect = event.currentTarget.getBoundingClientRect();
+        var _a = getClientCoordinates(event), clientX = _a.clientX, clientY = _a.clientY;
+        if (!clientX && !clientY) {
+            return;
+        }
+        var canvasX = clientX - boundingRect.left;
+        var canvasY = clientY - boundingRect.top;
+        var forwardMatrix = rive.computeAlignment(fit, alignment, {
+            minX: 0,
+            minY: 0,
+            maxX: boundingRect.width,
+            maxY: boundingRect.height,
+        }, artboard.bounds);
+        var invertedMatrix = new rive.Mat2D();
+        forwardMatrix.invert(invertedMatrix);
+        var canvasCoordinatesVector = new rive.Vec2D(canvasX, canvasY);
+        var transformedVector = rive.mapXY(invertedMatrix, canvasCoordinatesVector);
+        var transformedX = transformedVector.x();
+        var transformedY = transformedVector.y();
+        transformedVector.delete();
+        invertedMatrix.delete();
+        canvasCoordinatesVector.delete();
+        forwardMatrix.delete();
+        switch (event.type) {
+            // Pointer moving/hovering on the canvas
+            case "touchmove":
+            case "mouseover":
+            case "mouseout":
+            case "mousemove": {
+                for (var _i = 0, stateMachines_1 = stateMachines; _i < stateMachines_1.length; _i++) {
+                    var stateMachine = stateMachines_1[_i];
+                    stateMachine.pointerMove(transformedX, transformedY);
+                }
+                break;
+            }
+            // Pointer click initiated but not released yet on the canvas
+            case "touchstart":
+            case "mousedown": {
+                for (var _b = 0, stateMachines_2 = stateMachines; _b < stateMachines_2.length; _b++) {
+                    var stateMachine = stateMachines_2[_b];
+                    stateMachine.pointerDown(transformedX, transformedY);
+                }
+                break;
+            }
+            // Pointer click released on the canvas
+            case "touchend":
+            case "mouseup": {
+                for (var _c = 0, stateMachines_3 = stateMachines; _c < stateMachines_3.length; _c++) {
+                    var stateMachine = stateMachines_3[_c];
+                    stateMachine.pointerUp(transformedX, transformedY);
+                }
+                break;
+            }
+            default:
+        }
+    };
+    var callback = processEventCallback.bind(_this);
+    canvas.addEventListener("mouseover", callback);
+    canvas.addEventListener("mouseout", callback);
+    canvas.addEventListener("mousemove", callback);
+    canvas.addEventListener("mousedown", callback);
+    canvas.addEventListener("mouseup", callback);
+    canvas.addEventListener("touchmove", callback);
+    canvas.addEventListener("touchstart", callback);
+    canvas.addEventListener("touchend", callback);
+    return function () {
+        canvas.removeEventListener("mouseover", callback);
+        canvas.removeEventListener("mouseout", callback);
+        canvas.removeEventListener("mousemove", callback);
+        canvas.removeEventListener("mousedown", callback);
+        canvas.removeEventListener("mouseup", callback);
+        canvas.removeEventListener("touchmove", callback);
+        canvas.removeEventListener("touchstart", callback);
+        canvas.removeEventListener("touchend", callback);
+    };
+};
+
+
+/***/ }),
+/* 5 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   BLANK_URL: () => (/* binding */ BLANK_URL),
+/* harmony export */   sanitizeUrl: () => (/* binding */ sanitizeUrl)
+/* harmony export */ });
+// Reference: https://github.com/braintree/sanitize-url/tree/main
+var invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im;
+var htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g;
+var htmlCtrlEntityRegex = /&(newline|tab);/gi;
+var ctrlCharactersRegex = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
+var urlSchemeRegex = /^.+(:|&colon;)/gim;
+var relativeFirstCharacters = [".", "/"];
+var BLANK_URL = "about:blank";
+function isRelativeUrlWithoutProtocol(url) {
+    return relativeFirstCharacters.indexOf(url[0]) > -1;
+}
+// adapted from https://stackoverflow.com/a/29824550/2601552
+function decodeHtmlCharacters(str) {
+    var removedNullByte = str.replace(ctrlCharactersRegex, "");
+    return removedNullByte.replace(htmlEntitiesRegex, function (match, dec) {
+        return String.fromCharCode(dec);
+    });
+}
+function sanitizeUrl(url) {
+    if (!url) {
+        return BLANK_URL;
+    }
+    var sanitizedUrl = decodeHtmlCharacters(url)
+        .replace(htmlCtrlEntityRegex, "")
+        .replace(ctrlCharactersRegex, "")
+        .trim();
+    if (!sanitizedUrl) {
+        return BLANK_URL;
+    }
+    if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {
+        return sanitizedUrl;
+    }
+    var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);
+    if (!urlSchemeParseResults) {
+        return sanitizedUrl;
+    }
+    var urlScheme = urlSchemeParseResults[0];
+    if (invalidProtocolRegex.test(urlScheme)) {
+        return BLANK_URL;
+    }
+    return sanitizedUrl;
+}
+
+
+/***/ })
+/******/ 	]);
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
+/******/ 		if (cachedModule !== undefined) {
+/******/ 			return cachedModule.exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/make namespace object */
+/******/ 	(() => {
+/******/ 		// define __esModule on exports
+/******/ 		__webpack_require__.r = (exports) => {
+/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 			}
+/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   Alignment: () => (/* binding */ Alignment),
+/* harmony export */   EventType: () => (/* binding */ EventType),
+/* harmony export */   Fit: () => (/* binding */ Fit),
+/* harmony export */   Layout: () => (/* binding */ Layout),
+/* harmony export */   LoopType: () => (/* binding */ LoopType),
+/* harmony export */   Rive: () => (/* binding */ Rive),
+/* harmony export */   RiveEventType: () => (/* binding */ RiveEventType),
+/* harmony export */   RuntimeLoader: () => (/* binding */ RuntimeLoader),
+/* harmony export */   StateMachineInput: () => (/* binding */ StateMachineInput),
+/* harmony export */   StateMachineInputType: () => (/* binding */ StateMachineInputType),
+/* harmony export */   Testing: () => (/* binding */ Testing),
+/* harmony export */   decodeFont: () => (/* binding */ decodeFont),
+/* harmony export */   decodeImage: () => (/* binding */ decodeImage)
+/* harmony export */ });
+/* harmony import */ var _rive_advanced_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
+/* harmony import */ var package_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
+/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3);
+var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (g && (g = 0, op[0] && (_ = 0)), _) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+
+
+
+// #region layout
+// Fit options for the canvas
+var Fit;
+(function (Fit) {
+    Fit["Cover"] = "cover";
+    Fit["Contain"] = "contain";
+    Fit["Fill"] = "fill";
+    Fit["FitWidth"] = "fitWidth";
+    Fit["FitHeight"] = "fitHeight";
+    Fit["None"] = "none";
+    Fit["ScaleDown"] = "scaleDown";
+})(Fit || (Fit = {}));
+// Alignment options for the canvas
+var Alignment;
+(function (Alignment) {
+    Alignment["Center"] = "center";
+    Alignment["TopLeft"] = "topLeft";
+    Alignment["TopCenter"] = "topCenter";
+    Alignment["TopRight"] = "topRight";
+    Alignment["CenterLeft"] = "centerLeft";
+    Alignment["CenterRight"] = "centerRight";
+    Alignment["BottomLeft"] = "bottomLeft";
+    Alignment["BottomCenter"] = "bottomCenter";
+    Alignment["BottomRight"] = "bottomRight";
+})(Alignment || (Alignment = {}));
+// Alignment options for Rive animations in a HTML canvas
+var Layout = /** @class */ (function () {
+    function Layout(params) {
+        var _a, _b, _c, _d, _e, _f;
+        this.fit = (_a = params === null || params === void 0 ? void 0 : params.fit) !== null && _a !== void 0 ? _a : Fit.Contain;
+        this.alignment = (_b = params === null || params === void 0 ? void 0 : params.alignment) !== null && _b !== void 0 ? _b : Alignment.Center;
+        this.minX = (_c = params === null || params === void 0 ? void 0 : params.minX) !== null && _c !== void 0 ? _c : 0;
+        this.minY = (_d = params === null || params === void 0 ? void 0 : params.minY) !== null && _d !== void 0 ? _d : 0;
+        this.maxX = (_e = params === null || params === void 0 ? void 0 : params.maxX) !== null && _e !== void 0 ? _e : 0;
+        this.maxY = (_f = params === null || params === void 0 ? void 0 : params.maxY) !== null && _f !== void 0 ? _f : 0;
+    }
+    // Alternative constructor to build a Layout from an interface/object
+    Layout.new = function (_a) {
+        var fit = _a.fit, alignment = _a.alignment, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
+        console.warn("This function is deprecated: please use `new Layout({})` instead");
+        return new Layout({ fit: fit, alignment: alignment, minX: minX, minY: minY, maxX: maxX, maxY: maxY });
+    };
+    /**
+     * Makes a copy of the layout, replacing any specified parameters
+     */
+    Layout.prototype.copyWith = function (_a) {
+        var fit = _a.fit, alignment = _a.alignment, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
+        return new Layout({
+            fit: fit !== null && fit !== void 0 ? fit : this.fit,
+            alignment: alignment !== null && alignment !== void 0 ? alignment : this.alignment,
+            minX: minX !== null && minX !== void 0 ? minX : this.minX,
+            minY: minY !== null && minY !== void 0 ? minY : this.minY,
+            maxX: maxX !== null && maxX !== void 0 ? maxX : this.maxX,
+            maxY: maxY !== null && maxY !== void 0 ? maxY : this.maxY,
+        });
+    };
+    // Returns fit for the Wasm runtime format
+    Layout.prototype.runtimeFit = function (rive) {
+        if (this.cachedRuntimeFit)
+            return this.cachedRuntimeFit;
+        var fit;
+        if (this.fit === Fit.Cover)
+            fit = rive.Fit.cover;
+        else if (this.fit === Fit.Contain)
+            fit = rive.Fit.contain;
+        else if (this.fit === Fit.Fill)
+            fit = rive.Fit.fill;
+        else if (this.fit === Fit.FitWidth)
+            fit = rive.Fit.fitWidth;
+        else if (this.fit === Fit.FitHeight)
+            fit = rive.Fit.fitHeight;
+        else if (this.fit === Fit.ScaleDown)
+            fit = rive.Fit.scaleDown;
+        else
+            fit = rive.Fit.none;
+        this.cachedRuntimeFit = fit;
+        return fit;
+    };
+    // Returns alignment for the Wasm runtime format
+    Layout.prototype.runtimeAlignment = function (rive) {
+        if (this.cachedRuntimeAlignment)
+            return this.cachedRuntimeAlignment;
+        var alignment;
+        if (this.alignment === Alignment.TopLeft)
+            alignment = rive.Alignment.topLeft;
+        else if (this.alignment === Alignment.TopCenter)
+            alignment = rive.Alignment.topCenter;
+        else if (this.alignment === Alignment.TopRight)
+            alignment = rive.Alignment.topRight;
+        else if (this.alignment === Alignment.CenterLeft)
+            alignment = rive.Alignment.centerLeft;
+        else if (this.alignment === Alignment.CenterRight)
+            alignment = rive.Alignment.centerRight;
+        else if (this.alignment === Alignment.BottomLeft)
+            alignment = rive.Alignment.bottomLeft;
+        else if (this.alignment === Alignment.BottomCenter)
+            alignment = rive.Alignment.bottomCenter;
+        else if (this.alignment === Alignment.BottomRight)
+            alignment = rive.Alignment.bottomRight;
+        else
+            alignment = rive.Alignment.center;
+        this.cachedRuntimeAlignment = alignment;
+        return alignment;
+    };
+    return Layout;
+}());
+
+// Runtime singleton; use getInstance to provide a callback that returns the
+// Rive runtime
+var RuntimeLoader = /** @class */ (function () {
+    // Class is never instantiated
+    function RuntimeLoader() {
+    }
+    // Loads the runtime
+    RuntimeLoader.loadRuntime = function () {
+        _rive_advanced_mjs__WEBPACK_IMPORTED_MODULE_0__["default"]({
+            // Loads Wasm bundle
+            locateFile: function () { return RuntimeLoader.wasmURL; },
+        })
+            .then(function (rive) {
+            var _a;
+            RuntimeLoader.runtime = rive;
+            // Fire all the callbacks
+            while (RuntimeLoader.callBackQueue.length > 0) {
+                (_a = RuntimeLoader.callBackQueue.shift()) === null || _a === void 0 ? void 0 : _a(RuntimeLoader.runtime);
+            }
+        })
+            .catch(function () {
+            // In case unpkg fails or goes down, we should try to load from jsdelivr
+            var backupJsdelivrUrl = "https://cdn.jsdelivr.net/npm/".concat(package_json__WEBPACK_IMPORTED_MODULE_1__.name, "@").concat(package_json__WEBPACK_IMPORTED_MODULE_1__.version, "/rive.wasm");
+            if (RuntimeLoader.wasmURL.toLowerCase() !== backupJsdelivrUrl) {
+                console.warn("Failed to load WASM from ".concat(RuntimeLoader.wasmURL, ", trying jsdelivr as a backup"));
+                RuntimeLoader.setWasmUrl(backupJsdelivrUrl);
+                RuntimeLoader.loadRuntime();
+            }
+            else {
+                console.error("Could not load Rive WASM file from unpkg or jsdelivr, network connection may be down, or \
+        you may need to call set a new WASM source via RuntimeLoader.setWasmUrl() and call \
+        RuntimeLoader.loadRuntime() again");
+            }
+        });
+    };
+    // Provides a runtime instance via a callback
+    RuntimeLoader.getInstance = function (callback) {
+        // If it's not loading, start loading runtime
+        if (!RuntimeLoader.isLoading) {
+            RuntimeLoader.isLoading = true;
+            RuntimeLoader.loadRuntime();
+        }
+        if (!RuntimeLoader.runtime) {
+            RuntimeLoader.callBackQueue.push(callback);
+        }
+        else {
+            callback(RuntimeLoader.runtime);
+        }
+    };
+    // Provides a runtime instance via a promise
+    RuntimeLoader.awaitInstance = function () {
+        return new Promise(function (resolve) {
+            return RuntimeLoader.getInstance(function (rive) { return resolve(rive); });
+        });
+    };
+    // Manually sets the wasm url
+    RuntimeLoader.setWasmUrl = function (url) {
+        RuntimeLoader.wasmURL = url;
+    };
+    // Flag to indicate that loading has started/completed
+    RuntimeLoader.isLoading = false;
+    // List of callbacks for the runtime that come in while loading
+    RuntimeLoader.callBackQueue = [];
+    // Path to the Wasm file; default path works for testing only;
+    // if embedded wasm is used then this is never used.
+    RuntimeLoader.wasmURL = "https://unpkg.com/".concat(package_json__WEBPACK_IMPORTED_MODULE_1__.name, "@").concat(package_json__WEBPACK_IMPORTED_MODULE_1__.version, "/rive.wasm");
+    return RuntimeLoader;
+}());
+
+// #endregion
+// #region animations
+// Wraps animations and instances from the runtime and keeps track of playback
+// state
+var Animation = /** @class */ (function () {
+    /**
+     * Constructs a new animation
+     * @constructor
+     * @param {any} animation: runtime animation object
+     * @param {any} instance: runtime animation instance object
+     */
+    function Animation(animation, artboard, runtime, playing) {
+        this.animation = animation;
+        this.artboard = artboard;
+        this.playing = playing;
+        this.loopCount = 0;
+        // Time to which the animation should move to on the next render
+        this.scrubTo = null;
+        this.instance = new runtime.LinearAnimationInstance(animation, artboard);
+    }
+    Object.defineProperty(Animation.prototype, "name", {
+        // Returns the animation's name
+        get: function () {
+            return this.animation.name;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Animation.prototype, "time", {
+        // Returns the animation's current time
+        get: function () {
+            return this.instance.time;
+        },
+        // Sets the animation's current time
+        set: function (value) {
+            this.instance.time = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Animation.prototype, "loopValue", {
+        // Returns the animation's loop type
+        get: function () {
+            return this.animation.loopValue;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Advances the animation by the give time. If the animation needs scrubbing,
+     * time is ignored and the stored scrub value is used.
+     * @param time the time to advance the animation by if no scrubbing required
+     */
+    Animation.prototype.advance = function (time) {
+        if (this.scrubTo === null) {
+            this.instance.advance(time);
+        }
+        else {
+            this.instance.time = 0;
+            this.instance.advance(this.scrubTo);
+            this.scrubTo = null;
+        }
+    };
+    /**
+     * Apply interpolated keyframe values to the artboard. This should be called after calling
+     * .advance() on an animation instance so that new values are applied to properties.
+     *
+     * Note: This does not advance the artboard, which updates all objects on the artboard
+     * @param mix - Mix value for the animation from 0 to 1
+     */
+    Animation.prototype.apply = function (mix) {
+        this.instance.apply(mix);
+    };
+    Object.defineProperty(Animation.prototype, "needsScrub", {
+        get: function () {
+            return this.scrubTo !== null;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Deletes the backing Wasm animation instance; once this is called, this
+     * animation is no more.
+     */
+    Animation.prototype.cleanup = function () {
+        this.instance.delete();
+    };
+    return Animation;
+}());
+// #endregion
+// #region state machines
+var StateMachineInputType;
+(function (StateMachineInputType) {
+    StateMachineInputType[StateMachineInputType["Number"] = 56] = "Number";
+    StateMachineInputType[StateMachineInputType["Trigger"] = 58] = "Trigger";
+    StateMachineInputType[StateMachineInputType["Boolean"] = 59] = "Boolean";
+})(StateMachineInputType || (StateMachineInputType = {}));
+/**
+ * An input for a state machine
+ */
+var StateMachineInput = /** @class */ (function () {
+    function StateMachineInput(type, runtimeInput) {
+        this.type = type;
+        this.runtimeInput = runtimeInput;
+    }
+    Object.defineProperty(StateMachineInput.prototype, "name", {
+        /**
+         * Returns the name of the input
+         */
+        get: function () {
+            return this.runtimeInput.name;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(StateMachineInput.prototype, "value", {
+        /**
+         * Returns the current value of the input
+         */
+        get: function () {
+            return this.runtimeInput.value;
+        },
+        /**
+         * Sets the value of the input
+         */
+        set: function (value) {
+            this.runtimeInput.value = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Fires a trigger; does nothing on Number or Boolean input types
+     */
+    StateMachineInput.prototype.fire = function () {
+        if (this.type === StateMachineInputType.Trigger) {
+            this.runtimeInput.fire();
+        }
+    };
+    return StateMachineInput;
+}());
+
+var RiveEventType;
+(function (RiveEventType) {
+    RiveEventType[RiveEventType["General"] = 128] = "General";
+    RiveEventType[RiveEventType["OpenUrl"] = 131] = "OpenUrl";
+})(RiveEventType || (RiveEventType = {}));
+var StateMachine = /** @class */ (function () {
+    /**
+     * @constructor
+     * @param stateMachine runtime state machine object
+     * @param instance runtime state machine instance object
+     */
+    function StateMachine(stateMachine, runtime, playing, artboard) {
+        this.stateMachine = stateMachine;
+        this.playing = playing;
+        this.artboard = artboard;
+        /**
+         * Caches the inputs from the runtime
+         */
+        this.inputs = [];
+        this.instance = new runtime.StateMachineInstance(stateMachine, artboard);
+        this.initInputs(runtime);
+    }
+    Object.defineProperty(StateMachine.prototype, "name", {
+        get: function () {
+            return this.stateMachine.name;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(StateMachine.prototype, "statesChanged", {
+        /**
+         * Returns a list of state names that have changed on this frame
+         */
+        get: function () {
+            var names = [];
+            for (var i = 0; i < this.instance.stateChangedCount(); i++) {
+                names.push(this.instance.stateChangedNameByIndex(i));
+            }
+            return names;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Advances the state machine instance by a given time.
+     * @param time - the time to advance the animation by in seconds
+     */
+    StateMachine.prototype.advance = function (time) {
+        this.instance.advance(time);
+    };
+    /**
+     * Returns the number of events reported from the last advance call
+     * @returns Number of events reported
+     */
+    StateMachine.prototype.reportedEventCount = function () {
+        return this.instance.reportedEventCount();
+    };
+    /**
+     * Returns a RiveEvent object emitted from the last advance call at the given index
+     * of a list of potentially multiple events. If an event at the index is not found,
+     * undefined is returned.
+     * @param i index of the event reported in a list of potentially multiple events
+     * @returns RiveEvent or extended RiveEvent object returned, or undefined
+     */
+    StateMachine.prototype.reportedEventAt = function (i) {
+        return this.instance.reportedEventAt(i);
+    };
+    /**
+     * Fetches references to the state machine's inputs and caches them
+     * @param runtime an instance of the runtime; needed for the SMIInput types
+     */
+    StateMachine.prototype.initInputs = function (runtime) {
+        // Fetch the inputs from the runtime if we don't have them
+        for (var i = 0; i < this.instance.inputCount(); i++) {
+            var input = this.instance.input(i);
+            this.inputs.push(this.mapRuntimeInput(input, runtime));
+        }
+    };
+    /**
+     * Maps a runtime input to it's appropriate type
+     * @param input
+     */
+    StateMachine.prototype.mapRuntimeInput = function (input, runtime) {
+        if (input.type === runtime.SMIInput.bool) {
+            return new StateMachineInput(StateMachineInputType.Boolean, input.asBool());
+        }
+        else if (input.type === runtime.SMIInput.number) {
+            return new StateMachineInput(StateMachineInputType.Number, input.asNumber());
+        }
+        else if (input.type === runtime.SMIInput.trigger) {
+            return new StateMachineInput(StateMachineInputType.Trigger, input.asTrigger());
+        }
+    };
+    /**
+     * Deletes the backing Wasm state machine instance; once this is called, this
+     * state machine is no more.
+     */
+    StateMachine.prototype.cleanup = function () {
+        this.instance.delete();
+    };
+    return StateMachine;
+}());
+// #endregion
+// #region animator
+/**
+ * Manages animation
+ */
+var Animator = /** @class */ (function () {
+    /**
+     * Constructs a new animator
+     * @constructor
+     * @param runtime Rive runtime; needed to instance animations & state machines
+     * @param artboard the artboard that holds all animations and state machines
+     * @param animations optional list of animations
+     * @param stateMachines optional list of state machines
+     */
+    function Animator(runtime, artboard, eventManager, animations, stateMachines) {
+        if (animations === void 0) { animations = []; }
+        if (stateMachines === void 0) { stateMachines = []; }
+        this.runtime = runtime;
+        this.artboard = artboard;
+        this.eventManager = eventManager;
+        this.animations = animations;
+        this.stateMachines = stateMachines;
+    }
+    /**
+     * Adds animations and state machines by their names. If names are shared
+     * between animations & state machines, then the first one found will be
+     * created. Best not to use the same names for these in your Rive file.
+     * @param animatable the name(s) of animations and state machines to add
+     * @returns a list of names of the playing animations and state machines
+     */
+    Animator.prototype.add = function (animatables, playing, fireEvent) {
+        if (fireEvent === void 0) { fireEvent = true; }
+        animatables = mapToStringArray(animatables);
+        // If animatables is empty, play or pause everything
+        if (animatables.length === 0) {
+            this.animations.forEach(function (a) { return (a.playing = playing); });
+            this.stateMachines.forEach(function (m) { return (m.playing = playing); });
+        }
+        else {
+            // Play/pause already instanced items, or create new instances
+            var instancedAnimationNames = this.animations.map(function (a) { return a.name; });
+            var instancedMachineNames = this.stateMachines.map(function (m) { return m.name; });
+            for (var i = 0; i < animatables.length; i++) {
+                var aIndex = instancedAnimationNames.indexOf(animatables[i]);
+                var mIndex = instancedMachineNames.indexOf(animatables[i]);
+                if (aIndex >= 0 || mIndex >= 0) {
+                    if (aIndex >= 0) {
+                        // Animation is instanced, play/pause it
+                        this.animations[aIndex].playing = playing;
+                    }
+                    else {
+                        // State machine is instanced, play/pause it
+                        this.stateMachines[mIndex].playing = playing;
+                    }
+                }
+                else {
+                    // Try to create a new animation instance
+                    var anim = this.artboard.animationByName(animatables[i]);
+                    if (anim) {
+                        var newAnimation = new Animation(anim, this.artboard, this.runtime, playing);
+                        // Display the first frame of the specified animation
+                        newAnimation.advance(0);
+                        newAnimation.apply(1.0);
+                        this.animations.push(newAnimation);
+                    }
+                    else {
+                        // Try to create a new state machine instance
+                        var sm = this.artboard.stateMachineByName(animatables[i]);
+                        if (sm) {
+                            var newStateMachine = new StateMachine(sm, this.runtime, playing, this.artboard);
+                            this.stateMachines.push(newStateMachine);
+                        }
+                    }
+                }
+            }
+        }
+        // Fire play/paused events for animations
+        if (fireEvent) {
+            if (playing) {
+                this.eventManager.fire({
+                    type: EventType.Play,
+                    data: this.playing,
+                });
+            }
+            else {
+                this.eventManager.fire({
+                    type: EventType.Pause,
+                    data: this.paused,
+                });
+            }
+        }
+        return playing ? this.playing : this.paused;
+    };
+    /**
+     * Adds linear animations by their names.
+     * @param animatables the name(s) of animations to add
+     * @param playing whether animations should play on instantiation
+     */
+    Animator.prototype.initLinearAnimations = function (animatables, playing) {
+        // Play/pause already instanced items, or create new instances
+        // This validation is kept to maintain compatibility with current behavior.
+        // But given that it this is called during artboard initialization
+        // it should probably be safe to remove.
+        var instancedAnimationNames = this.animations.map(function (a) { return a.name; });
+        for (var i = 0; i < animatables.length; i++) {
+            var aIndex = instancedAnimationNames.indexOf(animatables[i]);
+            if (aIndex >= 0) {
+                this.animations[aIndex].playing = playing;
+            }
+            else {
+                // Try to create a new animation instance
+                var anim = this.artboard.animationByName(animatables[i]);
+                if (anim) {
+                    var newAnimation = new Animation(anim, this.artboard, this.runtime, playing);
+                    // Display the first frame of the specified animation
+                    newAnimation.advance(0);
+                    newAnimation.apply(1.0);
+                    this.animations.push(newAnimation);
+                }
+            }
+        }
+    };
+    /**
+     * Adds state machines by their names.
+     * @param animatables the name(s) of state machines to add
+     * @param playing whether state machines should play on instantiation
+     */
+    Animator.prototype.initStateMachines = function (animatables, playing) {
+        // Play/pause already instanced items, or create new instances
+        // This validation is kept to maintain compatibility with current behavior.
+        // But given that it this is called during artboard initialization
+        // it should probably be safe to remove.
+        var instancedStateMachineNames = this.stateMachines.map(function (a) { return a.name; });
+        for (var i = 0; i < animatables.length; i++) {
+            var aIndex = instancedStateMachineNames.indexOf(animatables[i]);
+            if (aIndex >= 0) {
+                this.stateMachines[aIndex].playing = playing;
+            }
+            else {
+                // Try to create a new state machine instance
+                var sm = this.artboard.stateMachineByName(animatables[i]);
+                if (sm) {
+                    var newStateMachine = new StateMachine(sm, this.runtime, playing, this.artboard);
+                    this.stateMachines.push(newStateMachine);
+                }
+                else {
+                    // In order to maintain compatibility with current behavior, if a state machine is not found
+                    // we look for an animation with the same name
+                    this.initLinearAnimations([animatables[i]], playing);
+                }
+            }
+        }
+    };
+    /**
+     * Play the named animations/state machines
+     * @param animatables the names of the animations/machines to play; plays all if empty
+     * @returns a list of the playing items
+     */
+    Animator.prototype.play = function (animatables) {
+        return this.add(animatables, true);
+    };
+    /**
+     * Pauses named animations and state machines, or everything if nothing is
+     * specified
+     * @param animatables names of the animations and state machines to pause
+     * @returns a list of names of the animations and state machines paused
+     */
+    Animator.prototype.pause = function (animatables) {
+        return this.add(animatables, false);
+    };
+    /**
+     * Set time of named animations
+     * @param animations names of the animations to scrub
+     * @param value time scrub value, a floating point number to which the playhead is jumped
+     * @returns a list of names of the animations that were scrubbed
+     */
+    Animator.prototype.scrub = function (animatables, value) {
+        var forScrubbing = this.animations.filter(function (a) {
+            return animatables.includes(a.name);
+        });
+        forScrubbing.forEach(function (a) { return (a.scrubTo = value); });
+        return forScrubbing.map(function (a) { return a.name; });
+    };
+    Object.defineProperty(Animator.prototype, "playing", {
+        /**
+         * Returns a list of names of all animations and state machines currently
+         * playing
+         */
+        get: function () {
+            return this.animations
+                .filter(function (a) { return a.playing; })
+                .map(function (a) { return a.name; })
+                .concat(this.stateMachines.filter(function (m) { return m.playing; }).map(function (m) { return m.name; }));
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Animator.prototype, "paused", {
+        /**
+         * Returns a list of names of all animations and state machines currently
+         * paused
+         */
+        get: function () {
+            return this.animations
+                .filter(function (a) { return !a.playing; })
+                .map(function (a) { return a.name; })
+                .concat(this.stateMachines.filter(function (m) { return !m.playing; }).map(function (m) { return m.name; }));
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Stops and removes all named animations and state machines
+     * @param animatables animations and state machines to remove
+     * @returns a list of names of removed items
+     */
+    Animator.prototype.stop = function (animatables) {
+        var _this = this;
+        animatables = mapToStringArray(animatables);
+        // If nothing's specified, wipe them out, all of them
+        var removedNames = [];
+        // Stop everything
+        if (animatables.length === 0) {
+            removedNames = this.animations
+                .map(function (a) { return a.name; })
+                .concat(this.stateMachines.map(function (m) { return m.name; }));
+            // Clean up before emptying the arrays
+            this.animations.forEach(function (a) { return a.cleanup(); });
+            this.stateMachines.forEach(function (m) { return m.cleanup(); });
+            // Empty out the arrays
+            this.animations.splice(0, this.animations.length);
+            this.stateMachines.splice(0, this.stateMachines.length);
+        }
+        else {
+            // Remove only the named animations/state machines
+            var animationsToRemove = this.animations.filter(function (a) {
+                return animatables.includes(a.name);
+            });
+            animationsToRemove.forEach(function (a) {
+                a.cleanup();
+                _this.animations.splice(_this.animations.indexOf(a), 1);
+            });
+            var machinesToRemove = this.stateMachines.filter(function (m) {
+                return animatables.includes(m.name);
+            });
+            machinesToRemove.forEach(function (m) {
+                m.cleanup();
+                _this.stateMachines.splice(_this.stateMachines.indexOf(m), 1);
+            });
+            removedNames = animationsToRemove
+                .map(function (a) { return a.name; })
+                .concat(machinesToRemove.map(function (m) { return m.name; }));
+        }
+        this.eventManager.fire({
+            type: EventType.Stop,
+            data: removedNames,
+        });
+        // Return the list of animations removed
+        return removedNames;
+    };
+    Object.defineProperty(Animator.prototype, "isPlaying", {
+        /**
+         * Returns true if at least one animation is active
+         */
+        get: function () {
+            return (this.animations.reduce(function (acc, curr) { return acc || curr.playing; }, false) ||
+                this.stateMachines.reduce(function (acc, curr) { return acc || curr.playing; }, false));
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Animator.prototype, "isPaused", {
+        /**
+         * Returns true if all animations are paused and there's at least one animation
+         */
+        get: function () {
+            return (!this.isPlaying &&
+                (this.animations.length > 0 || this.stateMachines.length > 0));
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Animator.prototype, "isStopped", {
+        /**
+         * Returns true if there are no playing or paused animations/state machines
+         */
+        get: function () {
+            return this.animations.length === 0 && this.stateMachines.length === 0;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * If there are no animations or state machines, add the first one found
+     * @returns the name of the animation or state machine instanced
+     */
+    Animator.prototype.atLeastOne = function (playing, fireEvent) {
+        if (fireEvent === void 0) { fireEvent = true; }
+        var instancedName;
+        if (this.animations.length === 0 && this.stateMachines.length === 0) {
+            if (this.artboard.animationCount() > 0) {
+                // Add the first animation
+                this.add([(instancedName = this.artboard.animationByIndex(0).name)], playing, fireEvent);
+            }
+            else if (this.artboard.stateMachineCount() > 0) {
+                // Add the first state machine
+                this.add([(instancedName = this.artboard.stateMachineByIndex(0).name)], playing, fireEvent);
+            }
+        }
+        return instancedName;
+    };
+    /**
+     * Checks if any animations have looped and if so, fire the appropriate event
+     */
+    Animator.prototype.handleLooping = function () {
+        for (var _i = 0, _a = this.animations.filter(function (a) { return a.playing; }); _i < _a.length; _i++) {
+            var animation = _a[_i];
+            // Emit if the animation looped
+            if (animation.loopValue === 0 && animation.loopCount) {
+                animation.loopCount = 0;
+                // This is a one-shot; if it has ended, delete the instance
+                this.stop(animation.name);
+            }
+            else if (animation.loopValue === 1 && animation.loopCount) {
+                this.eventManager.fire({
+                    type: EventType.Loop,
+                    data: { animation: animation.name, type: LoopType.Loop },
+                });
+                animation.loopCount = 0;
+            }
+            // Wasm indicates a loop at each time the animation
+            // changes direction, so a full loop/lap occurs every
+            // two loop counts
+            else if (animation.loopValue === 2 && animation.loopCount > 1) {
+                this.eventManager.fire({
+                    type: EventType.Loop,
+                    data: { animation: animation.name, type: LoopType.PingPong },
+                });
+                animation.loopCount = 0;
+            }
+        }
+    };
+    /**
+     * Checks if states have changed in state machines and fires a statechange
+     * event
+     */
+    Animator.prototype.handleStateChanges = function () {
+        var statesChanged = [];
+        for (var _i = 0, _a = this.stateMachines.filter(function (sm) { return sm.playing; }); _i < _a.length; _i++) {
+            var stateMachine = _a[_i];
+            statesChanged.push.apply(statesChanged, stateMachine.statesChanged);
+        }
+        if (statesChanged.length > 0) {
+            this.eventManager.fire({
+                type: EventType.StateChange,
+                data: statesChanged,
+            });
+        }
+    };
+    Animator.prototype.handleAdvancing = function (time) {
+        this.eventManager.fire({
+            type: EventType.Advance,
+            data: time,
+        });
+    };
+    return Animator;
+}());
+// #endregion
+// #region events
+/**
+ * Supported event types triggered in Rive
+ */
+var EventType;
+(function (EventType) {
+    EventType["Load"] = "load";
+    EventType["LoadError"] = "loaderror";
+    EventType["Play"] = "play";
+    EventType["Pause"] = "pause";
+    EventType["Stop"] = "stop";
+    EventType["Loop"] = "loop";
+    EventType["Draw"] = "draw";
+    EventType["Advance"] = "advance";
+    EventType["StateChange"] = "statechange";
+    EventType["RiveEvent"] = "riveevent";
+})(EventType || (EventType = {}));
+/**
+ * Looping types: one-shot, loop, and ping-pong
+ */
+var LoopType;
+(function (LoopType) {
+    LoopType["OneShot"] = "oneshot";
+    LoopType["Loop"] = "loop";
+    LoopType["PingPong"] = "pingpong";
+})(LoopType || (LoopType = {}));
+// Manages Rive events and listeners
+var EventManager = /** @class */ (function () {
+    function EventManager(listeners) {
+        if (listeners === void 0) { listeners = []; }
+        this.listeners = listeners;
+    }
+    // Gets listeners of specified type
+    EventManager.prototype.getListeners = function (type) {
+        return this.listeners.filter(function (e) { return e.type === type; });
+    };
+    // Adds a listener
+    EventManager.prototype.add = function (listener) {
+        if (!this.listeners.includes(listener)) {
+            this.listeners.push(listener);
+        }
+    };
+    /**
+     * Removes a listener
+     * @param listener the listener with the callback to be removed
+     */
+    EventManager.prototype.remove = function (listener) {
+        // We can't simply look for the listener as it'll be a different instance to
+        // one originally subscribed. Find all the listeners of the right type and
+        // then check their callbacks which should match.
+        for (var i = 0; i < this.listeners.length; i++) {
+            var currentListener = this.listeners[i];
+            if (currentListener.type === listener.type) {
+                if (currentListener.callback === listener.callback) {
+                    this.listeners.splice(i, 1);
+                    break;
+                }
+            }
+        }
+    };
+    /**
+     * Clears all listeners of specified type, or every listener if no type is
+     * specified
+     * @param type the type of listeners to clear, or all listeners if not
+     * specified
+     */
+    EventManager.prototype.removeAll = function (type) {
+        var _this = this;
+        if (!type) {
+            this.listeners.splice(0, this.listeners.length);
+        }
+        else {
+            this.listeners
+                .filter(function (l) { return l.type === type; })
+                .forEach(function (l) { return _this.remove(l); });
+        }
+    };
+    // Fires an event
+    EventManager.prototype.fire = function (event) {
+        var eventListeners = this.getListeners(event.type);
+        eventListeners.forEach(function (listener) { return listener.callback(event); });
+    };
+    return EventManager;
+}());
+// Manages a queue of tasks
+var TaskQueueManager = /** @class */ (function () {
+    function TaskQueueManager(eventManager) {
+        this.eventManager = eventManager;
+        this.queue = [];
+    }
+    // Adds a task top the queue
+    TaskQueueManager.prototype.add = function (task) {
+        this.queue.push(task);
+    };
+    // Processes all tasks in the queue
+    TaskQueueManager.prototype.process = function () {
+        while (this.queue.length > 0) {
+            var task = this.queue.shift();
+            if (task === null || task === void 0 ? void 0 : task.action) {
+                task.action();
+            }
+            if (task === null || task === void 0 ? void 0 : task.event) {
+                this.eventManager.fire(task.event);
+            }
+        }
+    };
+    return TaskQueueManager;
+}());
+var Rive = /** @class */ (function () {
+    function Rive(params) {
+        var _a;
+        // Tracks if a Rive file is loaded
+        this.loaded = false;
+        /**
+         * Tracks if a Rive file is loaded; we need this in addition to loaded as some
+         * commands (e.g. contents) can be called as soon as the file is loaded.
+         * However, playback commands need to be queued and run in order once initial
+         * animations and autoplay has been sorted out. This applies to play, pause,
+         * and start.
+         */
+        this.readyForPlaying = false;
+        // Runtime artboard
+        this.artboard = null;
+        // place to clear up event listeners
+        this.eventCleanup = null;
+        this.shouldDisableRiveListeners = false;
+        this.automaticallyHandleEvents = false;
+        // Allow the runtime to automatically load assets hosted in Rive's runtime.
+        this.enableRiveAssetCDN = true;
+        // Durations to generate a frame for the last second. Used for performance profiling.
+        this.durations = [];
+        this.frameTimes = [];
+        this.frameCount = 0;
+        /**
+         * Used be draw to track when a second of active rendering time has passed.
+         * Used for debugging purposes
+         */
+        this.renderSecondTimer = 0;
+        this.canvas = params.canvas;
+        this.src = params.src;
+        this.buffer = params.buffer;
+        this.layout = (_a = params.layout) !== null && _a !== void 0 ? _a : new Layout();
+        this.shouldDisableRiveListeners = !!params.shouldDisableRiveListeners;
+        this.automaticallyHandleEvents = !!params.automaticallyHandleEvents;
+        this.enableRiveAssetCDN =
+            params.enableRiveAssetCDN === undefined
+                ? true
+                : params.enableRiveAssetCDN;
+        // New event management system
+        this.eventManager = new EventManager();
+        if (params.onLoad)
+            this.on(EventType.Load, params.onLoad);
+        if (params.onLoadError)
+            this.on(EventType.LoadError, params.onLoadError);
+        if (params.onPlay)
+            this.on(EventType.Play, params.onPlay);
+        if (params.onPause)
+            this.on(EventType.Pause, params.onPause);
+        if (params.onStop)
+            this.on(EventType.Stop, params.onStop);
+        if (params.onLoop)
+            this.on(EventType.Loop, params.onLoop);
+        if (params.onStateChange)
+            this.on(EventType.StateChange, params.onStateChange);
+        if (params.onAdvance)
+            this.on(EventType.Advance, params.onAdvance);
+        /**
+         * @deprecated Use camelCase'd versions instead.
+         */
+        if (params.onload && !params.onLoad)
+            this.on(EventType.Load, params.onload);
+        if (params.onloaderror && !params.onLoadError)
+            this.on(EventType.LoadError, params.onloaderror);
+        if (params.onplay && !params.onPlay)
+            this.on(EventType.Play, params.onplay);
+        if (params.onpause && !params.onPause)
+            this.on(EventType.Pause, params.onpause);
+        if (params.onstop && !params.onStop)
+            this.on(EventType.Stop, params.onstop);
+        if (params.onloop && !params.onLoop)
+            this.on(EventType.Loop, params.onloop);
+        if (params.onstatechange && !params.onStateChange)
+            this.on(EventType.StateChange, params.onstatechange);
+        /**
+         * Asset loading
+         */
+        if (params.assetLoader)
+            this.assetLoader = params.assetLoader;
+        // Hook up the task queue
+        this.taskQueue = new TaskQueueManager(this.eventManager);
+        this.init({
+            src: this.src,
+            buffer: this.buffer,
+            autoplay: params.autoplay,
+            animations: params.animations,
+            stateMachines: params.stateMachines,
+            artboard: params.artboard,
+            useOffscreenRenderer: params.useOffscreenRenderer,
+        });
+    }
+    // Alternative constructor to build a Rive instance from an interface/object
+    Rive.new = function (params) {
+        console.warn("This function is deprecated: please use `new Rive({})` instead");
+        return new Rive(params);
+    };
+    // Initializes the Rive object either from constructor or load()
+    Rive.prototype.init = function (_a) {
+        var _this = this;
+        var src = _a.src, buffer = _a.buffer, animations = _a.animations, stateMachines = _a.stateMachines, artboard = _a.artboard, _b = _a.autoplay, autoplay = _b === void 0 ? false : _b, _c = _a.useOffscreenRenderer, useOffscreenRenderer = _c === void 0 ? false : _c;
+        this.src = src;
+        this.buffer = buffer;
+        // If no source file url specified, it's a bust
+        if (!this.src && !this.buffer) {
+            throw new Error(Rive.missingErrorMessage);
+        }
+        // List of animations that should be initialized.
+        var startingAnimationNames = mapToStringArray(animations);
+        // List of state machines that should be initialized
+        var startingStateMachineNames = mapToStringArray(stateMachines);
+        // Ensure loaded is marked as false if loading new file
+        this.loaded = false;
+        this.readyForPlaying = false;
+        // Ensure the runtime is loaded
+        RuntimeLoader.awaitInstance()
+            .then(function (runtime) {
+            _this.runtime = runtime;
+            // Get the canvas where you want to render the animation and create a renderer
+            _this.renderer = _this.runtime.makeRenderer(_this.canvas, useOffscreenRenderer);
+            // Initial size adjustment based on devicePixelRatio if no width/height are
+            // specified explicitly
+            if (!(_this.canvas.width || _this.canvas.height)) {
+                _this.resizeDrawingSurfaceToCanvas();
+            }
+            // Load Rive data from a source uri or a data buffer
+            _this.initData(artboard, startingAnimationNames, startingStateMachineNames, autoplay)
+                .then(function () { return _this.setupRiveListeners(); })
+                .catch(function (e) {
+                console.error(e);
+            });
+        })
+            .catch(function (e) {
+            console.error(e);
+        });
+    };
+    Rive.prototype.setupRiveListeners = function () {
+        var _this = this;
+        if (!this.shouldDisableRiveListeners) {
+            var activeStateMachines = (this.animator.stateMachines || [])
+                .filter(function (sm) { return sm.playing && _this.runtime.hasListeners(sm.instance); })
+                .map(function (sm) { return sm.instance; });
+            this.eventCleanup = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.registerTouchInteractions)({
+                canvas: this.canvas,
+                artboard: this.artboard,
+                stateMachines: activeStateMachines,
+                renderer: this.renderer,
+                rive: this.runtime,
+                fit: this._layout.runtimeFit(this.runtime),
+                alignment: this._layout.runtimeAlignment(this.runtime),
+            });
+        }
+    };
+    // Initializes runtime with Rive data and preps for playing
+    Rive.prototype.initData = function (artboardName, animationNames, stateMachineNames, autoplay) {
+        var _a;
+        return __awaiter(this, void 0, void 0, function () {
+            var _b, loader, _c, msg;
+            return __generator(this, function (_d) {
+                switch (_d.label) {
+                    case 0:
+                        if (!this.src) return [3 /*break*/, 2];
+                        _b = this;
+                        return [4 /*yield*/, loadRiveFile(this.src)];
+                    case 1:
+                        _b.buffer = _d.sent();
+                        _d.label = 2;
+                    case 2:
+                        if (this.assetLoader) {
+                            loader = new this.runtime.CustomFileAssetLoader({
+                                loadContents: this.assetLoader,
+                            });
+                        }
+                        // Load the Rive file
+                        _c = this;
+                        return [4 /*yield*/, this.runtime.load(new Uint8Array(this.buffer), loader, this.enableRiveAssetCDN)];
+                    case 3:
+                        // Load the Rive file
+                        _c.file = _d.sent();
+                        if (this.file) {
+                            // Initialize and draw frame
+                            this.initArtboard(artboardName, animationNames, stateMachineNames, autoplay);
+                            // Everything's set up, emit a load event
+                            this.loaded = true;
+                            this.eventManager.fire({
+                                type: EventType.Load,
+                                data: (_a = this.src) !== null && _a !== void 0 ? _a : "buffer",
+                            });
+                            // Flag ready for playback commands and clear the task queue; this order
+                            // is important or it may infinitely recurse
+                            this.readyForPlaying = true;
+                            this.taskQueue.process();
+                            this.drawFrame();
+                            return [2 /*return*/, Promise.resolve()];
+                        }
+                        else {
+                            msg = "Problem loading file; may be corrupt!";
+                            console.warn(msg);
+                            this.eventManager.fire({ type: EventType.LoadError, data: msg });
+                            return [2 /*return*/, Promise.reject(msg)];
+                        }
+                        return [2 /*return*/];
+                }
+            });
+        });
+    };
+    // Initialize for playback
+    Rive.prototype.initArtboard = function (artboardName, animationNames, stateMachineNames, autoplay) {
+        // Fetch the artboard
+        var rootArtboard = artboardName
+            ? this.file.artboardByName(artboardName)
+            : this.file.defaultArtboard();
+        // Check we have a working artboard
+        if (!rootArtboard) {
+            var msg = "Invalid artboard name or no default artboard";
+            console.warn(msg);
+            this.eventManager.fire({ type: EventType.LoadError, data: msg });
+            return;
+        }
+        this.artboard = rootArtboard;
+        // Check that the artboard has at least 1 animation
+        if (this.artboard.animationCount() < 1) {
+            var msg = "Artboard has no animations";
+            this.eventManager.fire({ type: EventType.LoadError, data: msg });
+            throw msg;
+        }
+        // Initialize the animator
+        this.animator = new Animator(this.runtime, this.artboard, this.eventManager);
+        // Initialize the animations; as loaded hasn't happened yet, we need to
+        // suppress firing the play/pause events until the load event has fired. To
+        // do this we tell the animator to suppress firing events, and add event
+        // firing to the task queue.
+        var instanceNames;
+        if (animationNames.length > 0 || stateMachineNames.length > 0) {
+            instanceNames = animationNames.concat(stateMachineNames);
+            this.animator.initLinearAnimations(animationNames, autoplay);
+            this.animator.initStateMachines(stateMachineNames, autoplay);
+        }
+        else {
+            instanceNames = [this.animator.atLeastOne(autoplay, false)];
+        }
+        // Queue up firing the playback events
+        this.taskQueue.add({
+            event: {
+                type: autoplay ? EventType.Play : EventType.Pause,
+                data: instanceNames,
+            },
+        });
+    };
+    // Draws the current artboard frame
+    Rive.prototype.drawFrame = function () {
+        this.startRendering();
+    };
+    /**
+     * Draw rendering loop; renders animation frames at the correct time interval.
+     * @param time the time at which to render a frame
+     */
+    Rive.prototype.draw = function (time, onSecond) {
+        var before = performance.now();
+        // Clear the frameRequestId, as we're now rendering a fresh frame
+        this.frameRequestId = null;
+        // On the first pass, make sure lastTime has a valid value
+        if (!this.lastRenderTime) {
+            this.lastRenderTime = time;
+        }
+        // Handle the onSecond callback
+        this.renderSecondTimer += time - this.lastRenderTime;
+        if (this.renderSecondTimer > 5000) {
+            this.renderSecondTimer = 0;
+            onSecond === null || onSecond === void 0 ? void 0 : onSecond();
+        }
+        // Calculate the elapsed time between frames in seconds
+        var elapsedTime = (time - this.lastRenderTime) / 1000;
+        this.lastRenderTime = time;
+        // - Advance non-paused animations by the elapsed number of seconds
+        // - Advance any animations that require scrubbing
+        // - Advance to the first frame even when autoplay is false
+        var activeAnimations = this.animator.animations
+            .filter(function (a) { return a.playing || a.needsScrub; })
+            // The scrubbed animations must be applied first to prevent weird artifacts
+            // if the playing animations conflict with the scrubbed animating attribuates.
+            .sort(function (first) { return (first.needsScrub ? -1 : 1); });
+        for (var _i = 0, activeAnimations_1 = activeAnimations; _i < activeAnimations_1.length; _i++) {
+            var animation = activeAnimations_1[_i];
+            animation.advance(elapsedTime);
+            if (animation.instance.didLoop) {
+                animation.loopCount += 1;
+            }
+            animation.apply(1.0);
+        }
+        // - Advance non-paused state machines by the elapsed number of seconds
+        // - Advance to the first frame even when autoplay is false
+        var activeStateMachines = this.animator.stateMachines.filter(function (a) { return a.playing; });
+        for (var _a = 0, activeStateMachines_1 = activeStateMachines; _a < activeStateMachines_1.length; _a++) {
+            var stateMachine = activeStateMachines_1[_a];
+            // Check for events before the current frame's state machine advance
+            var numEventsReported = stateMachine.reportedEventCount();
+            if (numEventsReported) {
+                for (var i = 0; i < numEventsReported; i++) {
+                    var event_1 = stateMachine.reportedEventAt(i);
+                    if (event_1) {
+                        if (event_1.type === RiveEventType.OpenUrl) {
+                            this.eventManager.fire({
+                                type: EventType.RiveEvent,
+                                data: event_1,
+                            });
+                            // Handle the event side effect if explicitly enabled
+                            if (this.automaticallyHandleEvents) {
+                                var newAnchorTag = document.createElement("a");
+                                var _b = event_1, url = _b.url, target = _b.target;
+                                var sanitizedUrl = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.sanitizeUrl)(url);
+                                url && newAnchorTag.setAttribute("href", sanitizedUrl);
+                                target && newAnchorTag.setAttribute("target", target);
+                                if (sanitizedUrl && sanitizedUrl !== _utils__WEBPACK_IMPORTED_MODULE_2__.BLANK_URL) {
+                                    newAnchorTag.click();
+                                }
+                            }
+                        }
+                        else {
+                            this.eventManager.fire({
+                                type: EventType.RiveEvent,
+                                data: event_1,
+                            });
+                        }
+                    }
+                }
+            }
+            stateMachine.advance(elapsedTime);
+            // stateMachine.instance.apply(this.artboard);
+        }
+        // Once the animations have been applied to the artboard, advance it
+        // by the elapsed time.
+        this.artboard.advance(elapsedTime);
+        var renderer = this.renderer;
+        // Canvas must be wiped to prevent artifacts
+        renderer.clear();
+        renderer.save();
+        // Update the renderer alignment if necessary
+        this.alignRenderer();
+        this.artboard.draw(renderer);
+        renderer.restore();
+        renderer.flush();
+        // Check for any animations that looped
+        this.animator.handleLooping();
+        // Check for any state machines that had a state change
+        this.animator.handleStateChanges();
+        // Report advanced time
+        this.animator.handleAdvancing(elapsedTime);
+        // Add duration to create frame to durations array
+        this.frameCount++;
+        var after = performance.now();
+        this.frameTimes.push(after);
+        this.durations.push(after - before);
+        while (this.frameTimes[0] <= after - 1000) {
+            this.frameTimes.shift();
+            this.durations.shift();
+        }
+        // Calling requestAnimationFrame will rerun draw() at the correct rate:
+        // https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations
+        if (this.animator.isPlaying) {
+            // Request a new rendering frame
+            this.startRendering();
+        }
+        else if (this.animator.isPaused) {
+            // Reset the end time so on playback it starts at the correct frame
+            this.lastRenderTime = 0;
+        }
+        else if (this.animator.isStopped) {
+            // Reset animation instances, artboard and time
+            // TODO: implement this properly when we have instancing
+            // this.initArtboard();
+            // this.drawFrame();
+            this.lastRenderTime = 0;
+        }
+    };
+    /**
+     * Align the renderer
+     */
+    Rive.prototype.alignRenderer = function () {
+        var _a = this, renderer = _a.renderer, runtime = _a.runtime, _layout = _a._layout, artboard = _a.artboard;
+        // Align things up safe in the knowledge we can restore if changed
+        renderer.align(_layout.runtimeFit(runtime), _layout.runtimeAlignment(runtime), {
+            minX: _layout.minX,
+            minY: _layout.minY,
+            maxX: _layout.maxX,
+            maxY: _layout.maxY,
+        }, artboard.bounds);
+    };
+    Object.defineProperty(Rive.prototype, "fps", {
+        get: function () {
+            return this.durations.length;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "frameTime", {
+        get: function () {
+            if (this.durations.length === 0) {
+                return 0;
+            }
+            return (this.durations.reduce(function (a, b) { return a + b; }, 0) / this.durations.length).toFixed(4);
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Cleans up all Wasm-generated objects that need to be manually destroyed:
+     * artboard instances, animation instances, state machine instances,
+     * renderer instance, file and runtime.
+     *
+     * Once this is called, you will need to initialise a new instance of the
+     * Rive class
+     */
+    Rive.prototype.cleanup = function () {
+        var _a, _b;
+        // Stop the renderer if it hasn't already been stopped.
+        this.stopRendering();
+        // Clean up any artboard, animation or state machine instances.
+        this.cleanupInstances();
+        // Delete the renderer
+        (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.delete();
+        this.renderer = null;
+        // Delete the rive file
+        (_b = this.file) === null || _b === void 0 ? void 0 : _b.delete();
+        this.file = null;
+    };
+    /**
+     * Cleans up any Wasm-generated objects that need to be manually destroyed:
+     * artboard instances, animation instances, state machine instances.
+     *
+     * Once this is called, things will need to be reinitialized or bad things
+     * might happen.
+     */
+    Rive.prototype.cleanupInstances = function () {
+        if (this.eventCleanup !== null) {
+            this.eventCleanup();
+        }
+        // Delete all animation and state machine instances
+        this.stop();
+        if (this.artboard) {
+            this.artboard.delete();
+            this.artboard = null;
+        }
+    };
+    /**
+     * Tries to query the setup Artboard for a text run node with the given name.
+     *
+     * @param textRunName - Name of the text run node associated with a text object
+     * @returns - TextValueRun node or undefined if the text run cannot be queried
+     */
+    Rive.prototype.retrieveTextRun = function (textRunName) {
+        var _a;
+        if (!textRunName) {
+            console.warn("No text run name provided");
+            return;
+        }
+        if (!this.artboard) {
+            console.warn("Tried to access text run, but the Artboard is null");
+            return;
+        }
+        var textRun = this.artboard.textRun(textRunName);
+        if (!textRun) {
+            console.warn("Could not access a text run with name '".concat(textRunName, "' in the '").concat((_a = this.artboard) === null || _a === void 0 ? void 0 : _a.name, "' Artboard. Note that you must rename a text run node in the Rive editor to make it queryable at runtime."));
+            return;
+        }
+        return textRun;
+    };
+    /**
+     * Returns a string from a given text run node name, or undefined if the text run
+     * cannot be queried.
+     *
+     * @param textRunName - Name of the text run node associated with a text object
+     * @returns - String value of the text run node or undefined
+     */
+    Rive.prototype.getTextRunValue = function (textRunName) {
+        var textRun = this.retrieveTextRun(textRunName);
+        return textRun ? textRun.text : undefined;
+    };
+    /**
+     * Sets a text value for a given text run node name if possible
+     *
+     * @param textRunName - Name of the text run node associated with a text object
+     * @param textRunValue - String value to set on the text run node
+     */
+    Rive.prototype.setTextRunValue = function (textRunName, textRunValue) {
+        var textRun = this.retrieveTextRun(textRunName);
+        if (textRun) {
+            textRun.text = textRunValue;
+        }
+    };
+    // Plays specified animations; if none specified, it unpauses everything.
+    Rive.prototype.play = function (animationNames, autoplay) {
+        var _this = this;
+        animationNames = mapToStringArray(animationNames);
+        // If the file's not loaded, queue up the play
+        if (!this.readyForPlaying) {
+            this.taskQueue.add({
+                action: function () { return _this.play(animationNames, autoplay); },
+            });
+            return;
+        }
+        this.animator.play(animationNames);
+        if (this.eventCleanup) {
+            this.eventCleanup();
+        }
+        this.setupRiveListeners();
+        this.startRendering();
+    };
+    // Pauses specified animations; if none specified, pauses all.
+    Rive.prototype.pause = function (animationNames) {
+        var _this = this;
+        animationNames = mapToStringArray(animationNames);
+        // If the file's not loaded, early out, nothing to pause
+        if (!this.readyForPlaying) {
+            this.taskQueue.add({
+                action: function () { return _this.pause(animationNames); },
+            });
+            return;
+        }
+        if (this.eventCleanup) {
+            this.eventCleanup();
+        }
+        this.animator.pause(animationNames);
+    };
+    Rive.prototype.scrub = function (animationNames, value) {
+        var _this = this;
+        animationNames = mapToStringArray(animationNames);
+        // If the file's not loaded, early out, nothing to pause
+        if (!this.readyForPlaying) {
+            this.taskQueue.add({
+                action: function () { return _this.scrub(animationNames, value); },
+            });
+            return;
+        }
+        // Scrub the animation time; we draw a single frame here so that if
+        // nothing's currently playing, the scrubbed animation is still rendered/
+        this.animator.scrub(animationNames, value || 0);
+        this.drawFrame();
+    };
+    // Stops specified animations; if none specifies, stops them all.
+    Rive.prototype.stop = function (animationNames) {
+        var _this = this;
+        animationNames = mapToStringArray(animationNames);
+        // If the file's not loaded, early out, nothing to pause
+        if (!this.readyForPlaying) {
+            this.taskQueue.add({
+                action: function () { return _this.stop(animationNames); },
+            });
+            return;
+        }
+        this.animator.stop(animationNames);
+        if (this.eventCleanup) {
+            this.eventCleanup();
+        }
+    };
+    /**
+     * Resets the animation
+     * @param artboard the name of the artboard, or default if none given
+     * @param animations the names of animations for playback
+     * @param stateMachines the names of state machines for playback
+     * @param autoplay whether to autoplay when reset, defaults to false
+     *
+     */
+    Rive.prototype.reset = function (params) {
+        var _a;
+        // Get the current artboard, animations, state machines, and playback states
+        var artBoardName = params === null || params === void 0 ? void 0 : params.artboard;
+        var animationNames = mapToStringArray(params === null || params === void 0 ? void 0 : params.animations);
+        var stateMachineNames = mapToStringArray(params === null || params === void 0 ? void 0 : params.stateMachines);
+        var autoplay = (_a = params === null || params === void 0 ? void 0 : params.autoplay) !== null && _a !== void 0 ? _a : false;
+        // Stop everything and clean up
+        this.cleanupInstances();
+        // Reinitialize an artboard instance with the state
+        this.initArtboard(artBoardName, animationNames, stateMachineNames, autoplay);
+        this.taskQueue.process();
+    };
+    // Loads a new Rive file, keeping listeners in place
+    Rive.prototype.load = function (params) {
+        // Stop all animations
+        this.stop();
+        // Reinitialize
+        this.init(params);
+    };
+    Object.defineProperty(Rive.prototype, "layout", {
+        /**
+         * Returns the current layout. Note that layout should be treated as
+         * immutable. If you want to change the layout, create a new one use the
+         * layout setter
+         */
+        get: function () {
+            return this._layout;
+        },
+        // Sets a new layout
+        set: function (layout) {
+            this._layout = layout;
+            // If the maxX or maxY are 0, then set them to the canvas width and height
+            if (!layout.maxX || !layout.maxY) {
+                this.resizeToCanvas();
+            }
+            if (this.loaded && !this.animator.isPlaying) {
+                this.drawFrame();
+            }
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Sets the layout bounds to the current canvas size; this is typically called
+     * when the canvas is resized
+     */
+    Rive.prototype.resizeToCanvas = function () {
+        this._layout = this.layout.copyWith({
+            minX: 0,
+            minY: 0,
+            maxX: this.canvas.width,
+            maxY: this.canvas.height,
+        });
+    };
+    /**
+     * Accounts for devicePixelRatio as a multiplier to render the size of the canvas drawing surface.
+     * Uses the size of the backing canvas to set new width/height attributes. Need to re-render
+     * and resize the layout to match the new drawing surface afterwards.
+     * Useful function for consumers to include in a window resize listener
+     */
+    Rive.prototype.resizeDrawingSurfaceToCanvas = function () {
+        if (this.canvas instanceof HTMLCanvasElement && !!window) {
+            var _a = this.canvas.getBoundingClientRect(), width = _a.width, height = _a.height;
+            var dpr = window.devicePixelRatio || 1;
+            this.canvas.width = dpr * width;
+            this.canvas.height = dpr * height;
+            this.startRendering();
+            this.resizeToCanvas();
+        }
+    };
+    Object.defineProperty(Rive.prototype, "source", {
+        // Returns the animation source, which may be undefined
+        get: function () {
+            return this.src;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "activeArtboard", {
+        /**
+         * Returns the name of the active artboard
+         */
+        get: function () {
+            return this.artboard ? this.artboard.name : "";
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "animationNames", {
+        // Returns a list of animation names on the chosen artboard
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            var animationNames = [];
+            for (var i = 0; i < this.artboard.animationCount(); i++) {
+                animationNames.push(this.artboard.animationByIndex(i).name);
+            }
+            return animationNames;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "stateMachineNames", {
+        /**
+         * Returns a list of state machine names from the current artboard
+         */
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            var stateMachineNames = [];
+            for (var i = 0; i < this.artboard.stateMachineCount(); i++) {
+                stateMachineNames.push(this.artboard.stateMachineByIndex(i).name);
+            }
+            return stateMachineNames;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Returns the inputs for the specified instanced state machine, or an empty
+     * list if the name is invalid or the state machine is not instanced
+     * @param name the state machine name
+     * @returns the inputs for the named state machine
+     */
+    Rive.prototype.stateMachineInputs = function (name) {
+        // If the file's not loaded, early out, nothing to pause
+        if (!this.loaded) {
+            return;
+        }
+        var stateMachine = this.animator.stateMachines.find(function (m) { return m.name === name; });
+        return stateMachine === null || stateMachine === void 0 ? void 0 : stateMachine.inputs;
+    };
+    Object.defineProperty(Rive.prototype, "playingStateMachineNames", {
+        // Returns a list of playing machine names
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            return this.animator.stateMachines
+                .filter(function (m) { return m.playing; })
+                .map(function (m) { return m.name; });
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "playingAnimationNames", {
+        // Returns a list of playing animation names
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            return this.animator.animations.filter(function (a) { return a.playing; }).map(function (a) { return a.name; });
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "pausedAnimationNames", {
+        // Returns a list of paused animation names
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            return this.animator.animations
+                .filter(function (a) { return !a.playing; })
+                .map(function (a) { return a.name; });
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "pausedStateMachineNames", {
+        /**
+         *  Returns a list of paused machine names
+         * @returns a list of state machine names that are paused
+         */
+        get: function () {
+            // If the file's not loaded, we got nothing to return
+            if (!this.loaded) {
+                return [];
+            }
+            return this.animator.stateMachines
+                .filter(function (m) { return !m.playing; })
+                .map(function (m) { return m.name; });
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "isPlaying", {
+        /**
+         * @returns true if any animation is playing
+         */
+        get: function () {
+            return this.animator.isPlaying;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "isPaused", {
+        /**
+         * @returns true if all instanced animations are paused
+         */
+        get: function () {
+            return this.animator.isPaused;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "isStopped", {
+        /**
+         * @returns true if no animations are playing or paused
+         */
+        get: function () {
+            return this.animator.isStopped;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(Rive.prototype, "bounds", {
+        /**
+         * @returns the bounds of the current artboard, or undefined if the artboard
+         * isn't loaded yet.
+         */
+        get: function () {
+            return this.artboard ? this.artboard.bounds : undefined;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    /**
+     * Subscribe to Rive-generated events
+     * @param type the type of event to subscribe to
+     * @param callback callback to fire when the event occurs
+     */
+    Rive.prototype.on = function (type, callback) {
+        this.eventManager.add({
+            type: type,
+            callback: callback,
+        });
+    };
+    /**
+     * Unsubscribes from a Rive-generated event
+     * @param type the type of event to unsubscribe from
+     * @param callback the callback to unsubscribe
+     */
+    Rive.prototype.off = function (type, callback) {
+        this.eventManager.remove({
+            type: type,
+            callback: callback,
+        });
+    };
+    /**
+     * Unsubscribes from a Rive-generated event
+     * @deprecated
+     * @param callback the callback to unsubscribe from
+     */
+    Rive.prototype.unsubscribe = function (type, callback) {
+        console.warn("This function is deprecated: please use `off()` instead.");
+        this.off(type, callback);
+    };
+    /**
+     * Unsubscribes all Rive listeners from an event type, or everything if no type is
+     * given
+     * @param type the type of event to unsubscribe from, or all types if
+     * undefined
+     */
+    Rive.prototype.removeAllRiveEventListeners = function (type) {
+        this.eventManager.removeAll(type);
+    };
+    /**
+     * Unsubscribes all listeners from an event type, or everything if no type is
+     * given
+     * @deprecated
+     * @param type the type of event to unsubscribe from, or all types if
+     * undefined
+     */
+    Rive.prototype.unsubscribeAll = function (type) {
+        console.warn("This function is deprecated: please use `removeAllRiveEventListeners()` instead.");
+        this.removeAllRiveEventListeners(type);
+    };
+    /**
+     * Stops the rendering loop; this is different from pausing in that it doesn't
+     * change the state of any animation. It stops rendering from occurring. This
+     * is designed for situations such as when Rive isn't visible.
+     *
+     * The only way to start rendering again is to call `startRendering`.
+     * Animations that are marked as playing will start from the position that
+     * they would have been at if rendering had not been stopped.
+     */
+    Rive.prototype.stopRendering = function () {
+        if (this.loaded && this.frameRequestId) {
+            if (this.runtime.cancelAnimationFrame) {
+                this.runtime.cancelAnimationFrame(this.frameRequestId);
+            }
+            else {
+                cancelAnimationFrame(this.frameRequestId);
+            }
+            this.frameRequestId = null;
+        }
+    };
+    /**
+     * Starts the rendering loop if it has been previously stopped. If the
+     * renderer is already active, then this will have zero effect.
+     */
+    Rive.prototype.startRendering = function () {
+        if (this.loaded && this.artboard && !this.frameRequestId) {
+            if (this.runtime.requestAnimationFrame) {
+                this.frameRequestId = this.runtime.requestAnimationFrame(this.draw.bind(this));
+            }
+            else {
+                this.frameRequestId = requestAnimationFrame(this.draw.bind(this));
+            }
+        }
+    };
+    /**
+     * Enables frames-per-second (FPS) reporting for the runtime
+     * If no callback is provided, Rive will append a fixed-position div at the top-right corner of
+     * the page with the FPS reading
+     * @param fpsCallback - Callback from the runtime during the RAF loop that supplies the FPS value
+     */
+    Rive.prototype.enableFPSCounter = function (fpsCallback) {
+        this.runtime.enableFPSCounter(fpsCallback);
+    };
+    /**
+     * Disables frames-per-second (FPS) reporting for the runtime
+     */
+    Rive.prototype.disableFPSCounter = function () {
+        this.runtime.disableFPSCounter();
+    };
+    Object.defineProperty(Rive.prototype, "contents", {
+        /**
+         * Returns the contents of a Rive file: the artboards, animations, and state machines
+         */
+        get: function () {
+            if (!this.loaded) {
+                return undefined;
+            }
+            var riveContents = {
+                artboards: [],
+            };
+            for (var i = 0; i < this.file.artboardCount(); i++) {
+                var artboard = this.file.artboardByIndex(i);
+                var artboardContents = {
+                    name: artboard.name,
+                    animations: [],
+                    stateMachines: [],
+                };
+                for (var j = 0; j < artboard.animationCount(); j++) {
+                    var animation = artboard.animationByIndex(j);
+                    artboardContents.animations.push(animation.name);
+                }
+                for (var k = 0; k < artboard.stateMachineCount(); k++) {
+                    var stateMachine = artboard.stateMachineByIndex(k);
+                    var name_1 = stateMachine.name;
+                    var instance = new this.runtime.StateMachineInstance(stateMachine, artboard);
+                    var inputContents = [];
+                    for (var l = 0; l < instance.inputCount(); l++) {
+                        var input = instance.input(l);
+                        inputContents.push({ name: input.name, type: input.type });
+                    }
+                    artboardContents.stateMachines.push({
+                        name: name_1,
+                        inputs: inputContents,
+                    });
+                }
+                riveContents.artboards.push(artboardContents);
+            }
+            return riveContents;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    // Error message for missing source or buffer
+    Rive.missingErrorMessage = "Rive source file or data buffer required";
+    return Rive;
+}());
+
+// Loads Rive data from a URI via fetch.
+var loadRiveFile = function (src) { return __awaiter(void 0, void 0, void 0, function () {
+    var req, res, buffer;
+    return __generator(this, function (_a) {
+        switch (_a.label) {
+            case 0:
+                req = new Request(src);
+                return [4 /*yield*/, fetch(req)];
+            case 1:
+                res = _a.sent();
+                return [4 /*yield*/, res.arrayBuffer()];
+            case 2:
+                buffer = _a.sent();
+                return [2 /*return*/, buffer];
+        }
+    });
+}); };
+// #endregion
+// #region utility functions
+/*
+ * Utility function to ensure an object is a string array
+ */
+var mapToStringArray = function (obj) {
+    if (typeof obj === "string") {
+        return [obj];
+    }
+    else if (obj instanceof Array) {
+        return obj;
+    }
+    // If obj is undefined, return empty array
+    return [];
+};
+// #endregion
+// #region testing utilities
+// Exports to only be used for tests
+var Testing = {
+    EventManager: EventManager,
+    TaskQueueManager: TaskQueueManager,
+};
+// #endregion
+// #region asset loaders
+/**
+ * Decodes bytes into an image.
+ *
+ * Be sure to call `.dispose()` on the image once it is no longer needed. This
+ * allows the engine to clean it up when it is not used by any more animations.
+ */
+var decodeImage = function (bytes) {
+    return new Promise(function (resolve) {
+        return RuntimeLoader.getInstance(function (rive) {
+            rive.decodeImage(bytes, resolve);
+        });
+    });
+};
+/**
+ * Decodes bytes into a font.
+ *
+ * Be sure to call `.dispose()` on the font once it is no longer needed. This
+ * allows the engine to clean it up when it is not used by any more animations.
+ */
+var decodeFont = function (bytes) {
+    return new Promise(function (resolve) {
+        return RuntimeLoader.getInstance(function (rive) {
+            rive.decodeFont(bytes, resolve);
+        });
+    });
+};
+// #endregion
+
+})();
+
+/******/ 	return __webpack_exports__;
+/******/ })()
+;
+});
+//# sourceMappingURL=rive.js.map

+ 1 - 1
tsconfig.json

@@ -10,5 +10,5 @@
     "types": ["@dcloudio/types"],
     "typeRoots": ["./node_modules/@types", "./src/typing.d.ts"]
   },
-  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
+  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/static/rive.js"]
 }