From 21d7db5677d95fe6cdec968e78e44c716ca2f757 Mon Sep 17 00:00:00 2001 From: Zutatensuppe Date: Sat, 29 May 2021 23:14:19 +0200 Subject: [PATCH] sound when pieces connect --- build/public/assets/click.550555f3.mp3 | Bin 0 -> 6783 bytes build/public/assets/index.4d785533.js | 1 - build/public/assets/index.d7fe3ee6.js | 1 + ...{vendor.b622ee49.js => vendor.18cd2d7e.js} | 4 +- build/public/index.html | 4 +- build/server/main.js | 10 ++++- src/common/GameCommon.ts | 9 ++++- src/common/Protocol.ts | 2 + src/frontend/click.mp3 | Bin 0 -> 6783 bytes src/frontend/components/HelpOverlay.vue | 1 + src/frontend/components/SettingsOverlay.vue | 4 ++ src/frontend/game.ts | 35 +++++++++++++++++- src/frontend/views/Game.vue | 6 +++ src/frontend/views/Replay.vue | 6 +++ 14 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 build/public/assets/click.550555f3.mp3 delete mode 100644 build/public/assets/index.4d785533.js create mode 100644 build/public/assets/index.d7fe3ee6.js rename build/public/assets/{vendor.b622ee49.js => vendor.18cd2d7e.js} (74%) create mode 100644 src/frontend/click.mp3 diff --git a/build/public/assets/click.550555f3.mp3 b/build/public/assets/click.550555f3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..af958b7f947a40692fd0f3f03a0f84708936ed06 GIT binary patch literal 6783 zcmeI0XHb((|L+3?h=52{K#&$f73sZ54<(e)rFVjWz)eR@=phv89iPzlNhKU zo2ur3I)D1~2jnm~WI0x)^XN>Ti>`wCxmnl5{H2KAn?^Jad; zb#ZP5?K3Cac!`ItR^bnPUHr=b#UL^2^@}gXg-81wf!gq%9Fyy-tu^?yy8bzTW88W* z{OLZQSz}}KoZTDA7d-R>8KSM<)l=M-BA1PJ9r)f%IKTsUu7Yqpv)l7C%t4o_l9tW? zkX!EgRGePMRjNC81kTXyHQ3@m!Ht!UsEG&w@Bjip7HUFZ+SOglEGHti_&$ui1AbR8 zTWCfc2ue1c{RuzaL}IK5H6j`|(5=9p%x^`|5ZWg!0z|1c1!E=yLvtTLu%&vWLco{t zx;Gf)f#nXmZ&QQs#Ue1n1!Mc*5yIPv=M*JL35^mBEc9j>6H8QHq{+-uXoHtsWxYth~%q2 zu{~7*hh&4Zk@*yP$#2zyUP8y?rWujk+@+jmZT!NlH8VfXKhKX%vPOD!mp1Wy7i=^} z21zxU_OGNbmued|v^%H|WI8X(6(wiw1#Gx0(tIi;0gw>@i16?MC;^tt;BNAW)<2s& z*y??TVw!j$=U~zBGD0cL#HIpvqAhlf4&&x^N@;*MWLERZbz4Xbk%h!xBc)D~WHW^# z#;=M}hn}}TA-XpdHd4xx@~t&Jl)12Yk-vU_(aGgIn=j3gMevcQn@>?o#e@2Ecjj#yrck1boMf1HqdiV)(tkh*8k|WvRXgq+A-XgQ}R4y~s1yo1A zqQ=%3FcPh7>Sp{KA#xiN?AHMxeS7`aFTf$E!*jS1>kyu(0>krmRLG>zmb}n`E*EWm znxyxHv@xGypW(oTl)0Pc`58`VcH6`zWs~Y%?VwJYU2LZ2vsB|>-Mjw1INZ&6kIC9> z>i`=7`@e!IUL--jmK|Y)gq+7l-^Gt0>&*)ChX5IDKq^PC788rY7#l<=q!thy!<;Um z9{GSCjVfiOGNDnnRvs9&b><`?E6bp;iJ(NOed!vmxo-!72sDu-sOy11wdyfBj1s>i z?=k4vWHr*)))oOH@aXZ-0$93dvEU>EJTiMm3Zvdve6NbAxhW3%T)hgLa_`DM?#Zfr4r6sF!vxmS z;Z=82D3@7KuS#7^bSG5&z-Em^H_WVw^1&dMJMu%YE=+y8&w^|GL<=%=GL{;dX&|gu zATxF~>~oH^g!Wc-$MrPy2b;ISN~c+&uSB1T=D03rzMoHDh&8I8N;bgyGM+xv=N{xLhitvKCg!XSpJ<;d;ov~FtgovMjqwyZS=hCQ0t!t z&vJ#NwmOx%+eFBgoTbn z4fwE=sq1~)#h7iR>3BVfH4%N6?Ng&;{Hm`^)xv!oq#>C>&qxx#>(Sp<^d3mV| zuZ$|BI^KOP&<@&kXsZj7U-w^&47ylsH9puC7haqzn<awM~qb;b)=>oSq>{t1^`FtfpddUAMr@8CX;-{(D)9qHIE;oE3W~5>oO{af{U8_bq}cK&|Lv ztDgiesm>)~qVwx{7B+mCKVy3F9zf-a`Cuk80d=KdenCwtN=<0d<6wBQIQbtMg+inV zD=%EIH8+qnTpf2=WB(N&^3r(>X$Js!BU+d@asjj!Z{&Am?+r{BJ6#87_&>BPA*()C zVEB;~ai8BOvY^POir;W^`=kGRv?l*YTToM8feI`?Y$fy5tQ?0s)xlObX$F3SKzLqO zVHmj7R4Y3%N(+xjxa_BEg@*LURfiG+8HOh6P$5YP8u5$I z4IgVx)A|$H7pk07#~Lgjx2` z(As>&Lxo<;_X^jdxZ^aGXE$tAX5LU8l$F;T=uly0TZpz%)o5IZp1a4bg;T`OGY9wL zlTM8U?c*+gZ9NsUu-kw2aP@-_D!ldJuXxAR%Rk6zEefs^GctTux9x;l#V4dVO*i>pU?Oou5fnyvw}j*cb@qQ>%ZR)6q4vODpaP&AbnL z`)Xw$_Xk(z?EkOhhEc!`EuBlP`}rQvn{oEGui?uU3OnHOfwkhzm%kZ27k(6(9D?q? zCKCFx-GSTJOF$9C9oZk@>1KsjC}MK4pl?H5WGFf!y@$T~l2I0 zC2u)v3vPI7&MDu5jgQ^^zG5SjsCdczRkYM;>~gu?t1; zdDSm@dmp(`WD=6h?55`rcX{!J$?EzNBP0gUZjUTl<0V3UQqI>oIiBfBeT8Sj$nruP zO^<;+hymA4yCvqui-3cG@*_6n*#iV zahfz{-5KF`d+?5{4z7WPh6DX zKEkYHdgOlRLUJu9Ew8gI6DJ??+7@#iv$jVV8k7netq{?Z$>^3R1ypyO--H*cOpr96 zhjZ{n%JA2bbX&S?+{nqFX`YpphcQ8~C3@nXooDU1inU(0!?E%B4u1C@@+w+;63KA& zZOg!o3Oyu09!(?kO1q#K5W{z;$@c?QWF$N=7IcTu0Q0eRK;W* zz4|t>ING*ex977=I(`cmx-(`D=dF0vuUbb7pLc2)d)`a$h^28R=}~88?F}Ho{ z%k)QH&Ypc^{MT`-C}4^9SkOHUp;u%V%=XZ9xL&CIP7!6)@%xgigZ%LeKIm^tSy#7@ zuhL^!W1qN@CRS>QS{^QmmGu!9vWDo57NN=lWgx%bBm)-Q=-X& zr@y6lTC@Iy>VN*xcD1lsfG%y205EnKYOzehnkNHMo2Vo4n01}_F^LW_CIy3XBanR1O;!@6ud}-UxdM-Qt~(JsfK#}c4v<;-3~MAAtHCln_af|_e(FTi&o;wv8agV3cqux{ z&)Wz?K7D1Gmc?D>+Fzi6=K9(}WJ+Crq^3BVa1*^Xaq(S&VTE6i;(&;|)+qZtXE{7D zr3ec=N>uyoQblPgWzKf|zNzyblt%G2u(Ke_jeVk+uRKveYqwJRX^KO zIc14n$k$XA4qK_l^PdH{#6C^ZkP>!P)$sSWt3%LSvvzfSmH%cRrrDR5CMn1&&$0K- zO~beP=DJOGzb&gX^PYg3m3iZ7yRu}R>)um{!%yo0UQjZKf$2aUpC5}F2hr6qjDY3F zhNfntds)L&Z{GI(8+$fTz!7cDqjabTYWNq@A=Hv`mz{SP?1>R8Es_l-4-h?d(f~t9 zSoHV`KBv(%vM|Ou!t&$r2gtZQ#QeUm`x=u~AWhMP)hQm^(wJdN(p zuc*9;#f1JTygm;?2CfE(AUBNk5?#gYHL_Y{Wrq0#*J*gy@NC z7C1SJ@40+(IncSe`HHAz-si*&_b3aqL06#h9{5pRU3rP1c+)2s0(0#a8%dI!KI6xZ z;Z3nLK*G7Fo>8W|$!?62&z_pGyG)ysk}?kT1-48enqMZ_8a|>EC1OxP%aA;d(qkI9 z^8xF31lFxx;ch8h8-1)T-ytG90(&;R+~BiuxIrnrP{N4_xaoKy-f<-0&5*NCNeHbgQ+RRuyCW_ zqDhGQdmt~kJa}#$r+kP4qMS5??mYYvTOMF#gSOYJ%;DWBe1VaZ{MT^^(Kp_UXPcFN zS({VuD{{^u8Z&(X7PcU;@4cumf|3+2x~uz0DVUT|!hL&Ojq#XbLX+aE^R)DOkE3RY zYwK2()rJo8xc<%6?>PGjmJb|1u^XJ#~jK%9oeDqwSwC8%7T0SJ{D+5RkT3hH^{7on+lZRepPt!ONPuq=58H z*@W>oz~6TT31x#u3cP#ds*r)^B4T!2Zj8TteVd&JbL%YLObt$+o{Q=nhLgTXZdrBU z+rtD%ayso-uLo>YtYeXQ6m15>L;0#n2nr&aBD8?Qct^#YZKXk5F#AYd&9HR|?RW-i zC5a@9L5Ua^97FEY#haxB=hYQ0lio{O7@0EL?Q&%Ho(N7-T@49{(_n3cir12{JJ`_< z303ZSsL_||o6=J{_eiiUl^A~xG}Zbh%rjSf0Y1N6n&~hs9$f6OYJul&sjg1zaKhMp%HUG1_BBkHak;K+xA`Dh#Y}lZhZ5`!&&ONFtdLBGN z?UCKLeOu7tbUbAa4)~`gN|3j{7Vi6 z[S])),_:1})]),n("li",null,[n(g,{class:"btn",to:{name:"new-game"}},{default:o((()=>[P])),_:1})])])):i("",!0),n(p)])};const I=864e5,T=e=>{const t=Math.floor(e/I);e%=I;const n=Math.floor(e/36e5);e%=36e5;const o=Math.floor(e/6e4);e%=6e4;return`${t}d ${n}h ${o}m ${Math.floor(e/1e3)}s`};var _=1e3,D=()=>{const e=new Date;return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds())},B=(e,t)=>T(t-e),E=T,O=e({name:"game-teaser",props:{game:{type:Object,required:!0}},computed:{style(){return{"background-image":`url("${this.game.imageUrl.replace("uploads/","uploads/r/")+"-375x210.webp"}")`}}},methods:{time(e,t){const n=t?"🏁":"⏳",o=e,i=t||D();return`${n} ${B(o,i)}`}}});const N={class:"game-info-text"},U=n("br",null,null,-1),M=n("br",null,null,-1),G=n("br",null,null,-1),$=s(" β†ͺ️ Watch replay ");O.render=function(e,c,d,u,g,p){const h=l("router-link");return a(),t("div",{class:"game-teaser",style:e.style},[n(h,{class:"game-info",to:{name:"game",params:{id:e.game.id}}},{default:o((()=>[n("span",N,[s(" 🧩 "+r(e.game.tilesFinished)+"/"+r(e.game.tilesTotal),1),U,s(" πŸ‘₯ "+r(e.game.players),1),M,s(" "+r(e.time(e.game.started,e.game.finished)),1),G])])),_:1},8,["to"]),e.game.hasReplay?(a(),t(h,{key:0,class:"game-replay",to:{name:"replay",params:{id:e.game.id}}},{default:o((()=>[$])),_:1},8,["to"])):i("",!0)],4)};var R=e({components:{GameTeaser:O},data:()=>({gamesRunning:[],gamesFinished:[]}),async created(){const e=await fetch("/api/index-data"),t=await e.json();this.gamesRunning=t.gamesRunning,this.gamesFinished=t.gamesFinished}});const V=n("h1",null,"Running games",-1),j=n("h1",null,"Finished games",-1);R.render=function(e,o,i,s,r,u){const g=l("game-teaser");return a(),t("div",null,[V,(a(!0),t(c,null,d(e.gamesRunning,((e,o)=>(a(),t("div",{class:"game-teaser-wrap",key:o},[n(g,{game:e},null,8,["game"])])))),128)),j,(a(!0),t(c,null,d(e.gamesFinished,((e,o)=>(a(),t("div",{class:"game-teaser-wrap",key:o},[n(g,{game:e},null,8,["game"])])))),128))])};var F=e({name:"image-teaser",props:{image:{type:Object,required:!0}},computed:{style(){return{backgroundImage:`url("${this.image.url.replace("uploads/","uploads/r/")+"-150x100.webp"}")`}}},emits:{click:null,editClick:null},methods:{onClick(){this.$emit("click")},onEditClick(){this.$emit("editClick")}}});F.render=function(e,o,i,l,s,r){return a(),t("div",{class:"imageteaser",style:e.style,onClick:o[2]||(o[2]=(...t)=>e.onClick&&e.onClick(...t))},[n("div",{class:"btn edit",onClick:o[1]||(o[1]=u(((...t)=>e.onEditClick&&e.onEditClick(...t)),["stop"]))},"✏️")],4)};var L=e({name:"image-library",components:{ImageTeaser:F},props:{images:{type:Array,required:!0}},emits:{imageClicked:null,imageEditClicked:null},methods:{imageClicked(e){this.$emit("imageClicked",e)},imageEditClicked(e){this.$emit("imageEditClicked",e)}}});L.render=function(e,n,o,i,s,r){const u=l("image-teaser");return a(),t("div",null,[(a(!0),t(c,null,d(e.images,((n,o)=>(a(),t(u,{image:n,onClick:t=>e.imageClicked(n),onEditClick:t=>e.imageEditClicked(n),key:o},null,8,["image","onClick","onEditClick"])))),128))])};const W={name:"responsive-image",props:{src:String,title:{type:String,default:""},height:{type:String,default:"100%"},width:{type:String,default:"100%"}},computed:{style(){return{display:"inline-block",verticalAlign:"text-bottom",backgroundImage:`url('${this.src}')`,backgroundRepeat:"no-repeat",backgroundSize:"contain",backgroundPosition:"center",width:this.width,height:this.height}}}};W.render=function(e,n,o,i,l,s){return a(),t("div",{style:s.style,title:o.title},null,12,["title"])};var q=e({name:"tags-input",props:{modelValue:{type:Array,required:!0}},emits:{"update:modelValue":null},data:()=>({input:"",values:[]}),created(){this.values=this.modelValue},methods:{onKeyUp(e){if(","===e.key)return this.add(),e.stopPropagation(),!1},add(){const e=this.input.replace(/,/g,"").trim();e&&(this.values.includes(e)||this.values.push(e),this.input="",this.$emit("update:modelValue",this.values))},rm(e){this.values=this.values.filter((t=>t!==e)),this.$emit("update:modelValue",this.values)}}});const H=m()(((e,o,i,l,s,u)=>(a(),t("div",null,[g(n("input",{class:"input",type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.input=t),placeholder:"Plants, People",onKeydown:o[2]||(o[2]=h(((...t)=>e.add&&e.add(...t)),["enter"])),onKeyup:o[3]||(o[3]=(...t)=>e.onKeyUp&&e.onKeyUp(...t))},null,544),[[p,e.input]]),(a(!0),t(c,null,d(e.values,((n,o)=>(a(),t("span",{key:o,class:"bit",onClick:t=>e.rm(n)},r(n)+" βœ–",9,["onClick"])))),128))]))));q.render=H,q.__scopeId="data-v-771460ae";var Q=e({name:"new-image-dialog",components:{ResponsiveImage:W,TagsInput:q},emits:{bgclick:null,setupGameClick:null,postToGalleryClick:null},data:()=>({previewUrl:"",file:null,title:"",tags:[]}),computed:{canPostToGallery(){return!(!this.previewUrl||!this.file)},canSetupGameClick(){return!(!this.previewUrl||!this.file)}},methods:{preview(e){const t=e.target;if(!t.files)return;const n=t.files[0];if(!n)return;const o=new FileReader;o.readAsDataURL(n),o.onload=e=>{this.previewUrl=e.target.result,this.file=n}},postToGallery(){this.$emit("postToGalleryClick",{file:this.file,title:this.title,tags:this.tags})},setupGameClick(){this.$emit("setupGameClick",{file:this.file,title:this.title,tags:this.tags})}}});const Y={key:0,class:"has-image"},K={key:1},Z={class:"upload"},J=n("span",{class:"btn"},"Upload File",-1),X={class:"area-settings"},ee=n("td",null,[n("label",null,"Title")],-1),te=n("tr",null,[n("td",{colspan:"2"},[n("div",{class:"hint"},"Feel free to leave a credit to the artist/photographer in the title :)")])],-1),ne=n("td",null,[n("label",null,"Tags")],-1),oe={class:"area-buttons"},ie=s("🧩 Post to gallery "),le=n("br",null,null,-1),ae=s(" + set up game");Q.render=function(e,o,i,s,r,c){const d=l("responsive-image"),h=l("tags-input");return a(),t("div",{class:"overlay new-image-dialog",onClick:o[8]||(o[8]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[7]||(o[7]=u((()=>{}),["stop"]))},[n("div",{class:["area-image",{"has-image":!!e.previewUrl,"no-image":!e.previewUrl}]},[e.previewUrl?(a(),t("div",Y,[n("span",{class:"remove btn",onClick:o[1]||(o[1]=t=>e.previewUrl="")},"X"),n(d,{src:e.previewUrl},null,8,["src"])])):(a(),t("div",K,[n("label",Z,[n("input",{type:"file",style:{display:"none"},onChange:o[2]||(o[2]=(...t)=>e.preview&&e.preview(...t)),accept:"image/*"},null,32),J])]))],2),n("div",X,[n("table",null,[n("tr",null,[ee,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[3]||(o[3]=t=>e.title=t),placeholder:"Flower by @artist"},null,512),[[p,e.title]])])]),te,n("tr",null,[ne,n("td",null,[n(h,{modelValue:e.tags,"onUpdate:modelValue":o[4]||(o[4]=t=>e.tags=t)},null,8,["modelValue"])])])])]),n("div",oe,[n("button",{class:"btn",disabled:!e.canPostToGallery,onClick:o[5]||(o[5]=(...t)=>e.postToGallery&&e.postToGallery(...t))},"πŸ–ΌοΈ Post to gallery",8,["disabled"]),n("button",{class:"btn",disabled:!e.canSetupGameClick,onClick:o[6]||(o[6]=(...t)=>e.setupGameClick&&e.setupGameClick(...t))},[ie,le,ae],8,["disabled"])])])])};var se=e({name:"edit-image-dialog",components:{ResponsiveImage:W,TagsInput:q},props:{image:{type:Object,required:!0}},emits:{bgclick:null,saveClick:null},data:()=>({title:"",tags:[]}),created(){this.title=this.image.title,this.tags=this.image.tags.map((e=>e.title))},methods:{saveImage(){this.$emit("saveClick",{id:this.image.id,title:this.title,tags:this.tags})}}});const re={class:"area-image"},ce={class:"has-image"},de={class:"area-settings"},ue=n("td",null,[n("label",null,"Title")],-1),ge=n("tr",null,[n("td",{colspan:"2"},[n("div",{class:"hint"},"Feel free to leave a credit to the artist/photographer in the title :)")])],-1),pe=n("td",null,[n("label",null,"Tags")],-1),he={class:"area-buttons"};var me,ye,fe,we;se.render=function(e,o,i,s,r,c){const d=l("responsive-image"),h=l("tags-input");return a(),t("div",{class:"overlay edit-image-dialog",onClick:o[5]||(o[5]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[4]||(o[4]=u((()=>{}),["stop"]))},[n("div",re,[n("div",ce,[n(d,{src:e.image.url,title:e.image.title},null,8,["src","title"])])]),n("div",de,[n("table",null,[n("tr",null,[ue,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.title=t),placeholder:"Flower by @artist"},null,512),[[p,e.title]])])]),ge,n("tr",null,[pe,n("td",null,[n(h,{modelValue:e.tags,"onUpdate:modelValue":o[2]||(o[2]=t=>e.tags=t)},null,8,["modelValue"])])])])]),n("div",he,[n("button",{class:"btn",onClick:o[3]||(o[3]=(...t)=>e.saveImage&&e.saveImage(...t))},"πŸ–ΌοΈ Save image")])])])},(ye=me||(me={}))[ye.Flat=0]="Flat",ye[ye.Out=1]="Out",ye[ye.In=-1]="In",(we=fe||(fe={}))[we.FINAL=0]="FINAL",we[we.ANY=1]="ANY";var ve=e({name:"new-game-dialog",components:{ResponsiveImage:W},props:{image:{type:Object,required:!0}},emits:{newGame:null,bgclick:null},data:()=>({tiles:1e3,scoreMode:fe.ANY}),methods:{onNewGameClick(){this.$emit("newGame",{tiles:this.tilesInt,image:this.image,scoreMode:this.scoreModeInt})}},computed:{canStartNewGame(){return!!(this.tilesInt&&this.image&&this.image.url&&[0,1].includes(this.scoreModeInt))},scoreModeInt(){return parseInt(`${this.scoreMode}`,10)},tilesInt(){return parseInt(`${this.tiles}`,10)}}});const be={class:"area-image"},xe={class:"has-image"},Ce={class:"area-settings"},ke=n("td",null,[n("label",null,"Pieces")],-1),Ae=n("td",null,[n("label",null,"Scoring: ")],-1),ze=s(" Any (Score when pieces are connected to each other or on final location)"),Se=n("br",null,null,-1),Pe=s(" Final (Score when pieces are put to their final location)"),Ie={class:"area-buttons"};ve.render=function(e,o,i,s,r,c){const d=l("responsive-image");return a(),t("div",{class:"overlay new-game-dialog",onClick:o[6]||(o[6]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[5]||(o[5]=u((()=>{}),["stop"]))},[n("div",be,[n("div",xe,[n(d,{src:e.image.url,title:e.image.title},null,8,["src","title"])])]),n("div",Ce,[n("table",null,[n("tr",null,[ke,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.tiles=t)},null,512),[[p,e.tiles]])])]),n("tr",null,[Ae,n("td",null,[n("label",null,[g(n("input",{type:"radio","onUpdate:modelValue":o[2]||(o[2]=t=>e.scoreMode=t),value:"1"},null,512),[[y,e.scoreMode]]),ze]),Se,n("label",null,[g(n("input",{type:"radio","onUpdate:modelValue":o[3]||(o[3]=t=>e.scoreMode=t),value:"0"},null,512),[[y,e.scoreMode]]),Pe])])])])]),n("div",Ie,[n("button",{class:"btn",disabled:!e.canStartNewGame,onClick:o[4]||(o[4]=(...t)=>e.onNewGameClick&&e.onNewGameClick(...t))}," 🧩 Generate Puzzle ",8,["disabled"])])])])};class Te{constructor(e){this.rand_high=e||3735929054,this.rand_low=1231121986^e}random(e,t){this.rand_high=(this.rand_high<<16)+(this.rand_high>>16)+this.rand_low&4294967295,this.rand_low=this.rand_low+this.rand_high&4294967295;return e+(this.rand_high>>>0)/4294967295*(t-e+1)|0}choice(e){return e[this.random(0,e.length-1)]}shuffle(e){const t=e.slice();for(let n=0;n<=t.length-2;n++){const e=this.random(n,t.length-1),o=t[n];t[n]=t[e],t[e]=o}return t}static serialize(e){return{rand_high:e.rand_high,rand_low:e.rand_low}}static unserialize(e){const t=new Te(0);return t.rand_high=e.rand_high,t.rand_low=e.rand_low,t}}const _e=(e,t)=>{const n=`${e}`;return n.length>=t.length?n:t.substr(0,t.length-n.length)+n},De=(...e)=>{const t=t=>(...n)=>{const o=new Date,i=_e(o.getHours(),"00"),l=_e(o.getMinutes(),"00"),a=_e(o.getSeconds(),"00");console[t](`${i}:${l}:${a}`,...e,...n)};return{log:t("log"),error:t("error"),info:t("info")}};var Be={hash:e=>{let t=0;for(let n=0;n{let t=e.toLowerCase();return t=t.replace(/[^a-z0-9]+/g,"-"),t=t.replace(/^-|-$/,""),t},uniqId:()=>Date.now().toString(36)+Math.random().toString(36).substring(2),encodeShape:function(e){return e.top+1<<0|e.right+1<<2|e.bottom+1<<4|e.left+1<<6},decodeShape:function(e){return{top:(e>>0&3)-1,right:(e>>2&3)-1,bottom:(e>>4&3)-1,left:(e>>6&3)-1}},encodePiece:function(e){return[e.idx,e.pos.x,e.pos.y,e.z,e.owner,e.group]},decodePiece:function(e){return{idx:e[0],pos:{x:e[1],y:e[2]},z:e[3],owner:e[4],group:e[5]}},encodePlayer:function(e){return[e.id,e.x,e.y,e.d,e.name,e.color,e.bgcolor,e.points,e.ts]},decodePlayer:function(e){return{id:e[0],x:e[1],y:e[2],d:e[3],name:e[4],color:e[5],bgcolor:e[6],points:e[7],ts:e[8]}},encodeGame:function(e){return[e.id,e.rng.type||"",Te.serialize(e.rng.obj),e.puzzle,e.players,e.evtInfos,e.scoreMode||fe.FINAL]},decodeGame:function(e){return{id:e[0],rng:{type:e[1],obj:Te.unserialize(e[2])},puzzle:e[3],players:e[4],evtInfos:e[5],scoreMode:e[6]}},coordByPieceIdx:function(e,t){const n=e.width/e.tileSize;return{x:t%n,y:Math.floor(t/n)}},asQueryArgs:function(e){const t=[];for(const n in e){const o=[n,e[n]].map(encodeURIComponent);t.push(o.join("="))}return 0===t.length?"":`?${t.join("&")}`}},Ee=e({components:{ImageLibrary:L,NewImageDialog:Q,EditImageDialog:se,NewGameDialog:ve},data:()=>({filters:{sort:"date_desc",tags:[]},images:[],tags:[],image:{id:0,filename:"",file:"",url:"",title:"",tags:[],created:0},dialog:""}),async created(){await this.loadImages()},methods:{toggleTag(e){this.filters.tags.includes(e.slug)?this.filters.tags=this.filters.tags.filter((t=>t!==e.slug)):this.filters.tags.push(e.slug),this.filtersChanged()},async loadImages(){const e=await fetch(`/api/newgame-data${Be.asQueryArgs(this.filters)}`),t=await e.json();this.images=t.images,this.tags=t.tags},async filtersChanged(){await this.loadImages()},onImageClicked(e){this.image=e,this.dialog="new-game"},onImageEditClicked(e){this.image=e,this.dialog="edit-image"},async uploadImage(e){const t=new FormData;t.append("file",e.file,e.file.name),t.append("title",e.title),t.append("tags",e.tags);const n=await fetch("/api/upload",{method:"post",body:t});return await n.json()},async saveImage(e){const t=await fetch("/api/save-image",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({id:e.id,title:e.title,tags:e.tags})});return await t.json()},async onSaveImageClick(e){await this.saveImage(e),this.dialog="",await this.loadImages()},async postToGalleryClick(e){await this.uploadImage(e),this.dialog="",await this.loadImages()},async setupGameClick(e){const t=await this.uploadImage(e);this.loadImages(),this.image=t,this.dialog="new-game"},async onNewGame(e){const t=await fetch("/api/newgame",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)});if(200===t.status){const e=await t.json();this.$router.push({name:"game",params:{id:e.id}})}}}});const Oe={class:"upload-image-teaser"},Ne=n("div",{class:"hint"},"(The image you upload will be added to the public gallery.)",-1),Ue={key:0},Me=s(" Tags: "),Ge=s(" Sort by: "),$e=n("option",{value:"date_desc"},"Newest first",-1),Re=n("option",{value:"date_asc"},"Oldest first",-1),Ve=n("option",{value:"alpha_asc"},"A-Z",-1),je=n("option",{value:"alpha_desc"},"Z-A",-1);Ee.render=function(e,o,s,u,p,h){const m=l("image-library"),y=l("new-image-dialog"),w=l("edit-image-dialog"),v=l("new-game-dialog");return a(),t("div",null,[n("div",Oe,[n("div",{class:"btn btn-big",onClick:o[1]||(o[1]=t=>e.dialog="new-image")},"Upload your image"),Ne]),n("div",null,[e.tags.length>0?(a(),t("label",Ue,[Me,(a(!0),t(c,null,d(e.tags,((n,o)=>(a(),t("span",{class:["bit",{on:e.filters.tags.includes(n.slug)}],key:o,onClick:t=>e.toggleTag(n)},r(n.title),11,["onClick"])))),128))])):i("",!0),n("label",null,[Ge,g(n("select",{"onUpdate:modelValue":o[2]||(o[2]=t=>e.filters.sort=t),onChange:o[3]||(o[3]=(...t)=>e.filtersChanged&&e.filtersChanged(...t))},[$e,Re,Ve,je],544),[[f,e.filters.sort]])])]),n(m,{images:e.images,onImageClicked:e.onImageClicked,onImageEditClicked:e.onImageEditClicked},null,8,["images","onImageClicked","onImageEditClicked"]),"new-image"===e.dialog?(a(),t(y,{key:0,onBgclick:o[4]||(o[4]=t=>e.dialog=""),onPostToGalleryClick:e.postToGalleryClick,onSetupGameClick:e.setupGameClick},null,8,["onPostToGalleryClick","onSetupGameClick"])):i("",!0),"edit-image"===e.dialog?(a(),t(w,{key:1,onBgclick:o[5]||(o[5]=t=>e.dialog=""),onSaveClick:e.onSaveImageClick,image:e.image},null,8,["onSaveClick","image"])):i("",!0),e.image&&"new-game"===e.dialog?(a(),t(v,{key:2,onBgclick:o[6]||(o[6]=t=>e.dialog=""),onNewGame:e.onNewGame,image:e.image},null,8,["onNewGame","image"])):i("",!0)])};var Fe=e({name:"scores",props:{activePlayers:{type:Array,required:!0},idlePlayers:{type:Array,required:!0}},computed:{actives(){return this.activePlayers.sort(((e,t)=>t.points-e.points)),this.activePlayers},idles(){return this.idlePlayers.sort(((e,t)=>t.points-e.points)),this.idlePlayers}}});const Le={class:"scores"},We=n("div",null,"Scores",-1),qe=n("td",null,"⚑",-1),He=n("td",null,"πŸ’€",-1);Fe.render=function(e,o,i,l,s,u){return a(),t("div",Le,[We,n("table",null,[(a(!0),t(c,null,d(e.actives,((e,o)=>(a(),t("tr",{key:o,style:{color:e.color}},[qe,n("td",null,r(e.name),1),n("td",null,r(e.points),1)],4)))),128)),(a(!0),t(c,null,d(e.idles,((e,o)=>(a(),t("tr",{key:o,style:{color:e.color}},[He,n("td",null,r(e.name),1),n("td",null,r(e.points),1)],4)))),128))])])};var Qe=e({name:"puzzle-status",props:{finished:{type:Boolean,required:!0},duration:{type:Number,required:!0},piecesDone:{type:Number,required:!0},piecesTotal:{type:Number,required:!0}},computed:{icon(){return this.finished?"🏁":"⏳"},durationStr(){return E(this.duration)}}});const Ye={class:"timer"};Qe.render=function(e,o,i,l,s,c){return a(),t("div",Ye,[n("div",null," 🧩 "+r(e.piecesDone)+"/"+r(e.piecesTotal),1),n("div",null,r(e.icon)+" "+r(e.durationStr),1),w(e.$slots,"default")])};var Ke=e({name:"settings-overlay",emits:{bgclick:null,"update:modelValue":null},props:{modelValue:Object},created(){this.$watch("modelValue",(e=>{this.$emit("update:modelValue",e)}),{deep:!0})}});const Ze=n("td",null,[n("label",null,"Background: ")],-1),Je=n("td",null,[n("label",null,"Color: ")],-1),Xe=n("td",null,[n("label",null,"Name: ")],-1);Ke.render=function(e,o,i,l,s,r){return a(),t("div",{class:"overlay transparent",onClick:o[5]||(o[5]=t=>e.$emit("bgclick"))},[n("table",{class:"overlay-content settings",onClick:o[4]||(o[4]=u((()=>{}),["stop"]))},[n("tr",null,[Ze,n("td",null,[g(n("input",{type:"color","onUpdate:modelValue":o[1]||(o[1]=t=>e.modelValue.background=t)},null,512),[[p,e.modelValue.background]])])]),n("tr",null,[Je,n("td",null,[g(n("input",{type:"color","onUpdate:modelValue":o[2]||(o[2]=t=>e.modelValue.color=t)},null,512),[[p,e.modelValue.color]])])]),n("tr",null,[Xe,n("td",null,[g(n("input",{type:"text",maxLength:"16","onUpdate:modelValue":o[3]||(o[3]=t=>e.modelValue.name=t)},null,512),[[p,e.modelValue.name]])])])])])};var et=e({name:"preview-overlay",props:{img:String},emits:{bgclick:null},computed:{previewStyle(){return{backgroundImage:`url('${this.img}')`}}}});const tt={class:"preview"};et.render=function(e,o,i,l,s,r){return a(),t("div",{class:"overlay",onClick:o[1]||(o[1]=t=>e.$emit("bgclick"))},[n("div",tt,[n("div",{class:"img",style:e.previewStyle},null,4)])])};var nt=1,ot=4,it=2,lt=3,at=2,st=4,rt=3,ct=9,dt=1,ut=2,gt=3,pt=4,ht=5,mt=6,yt=7,ft=8,wt=10,vt=1,bt=2,xt=3;const Ct=De("Communication.js");let kt,At=[],zt=e=>{At.push(e)},St=[],Pt=e=>{St.push(e)};let It=0;const Tt=e=>{It!==e&&(It=e,Pt(e))};function _t(e){if(2===It)try{kt.send(JSON.stringify(e))}catch(t){Ct.info("unable to send message.. maybe because ws is invalid?")}}let Dt,Bt;var Et={connect:function(e,t,n){return Dt=0,Bt={},Tt(3),new Promise((o=>{kt=new WebSocket(e,n+"|"+t),kt.onopen=()=>{Tt(2),_t([lt])},kt.onmessage=e=>{const t=JSON.parse(e.data),i=t[0];if(i===ot){const e=t[1];o(e)}else{if(i!==nt)throw`[ 2021-05-09 invalid connect msgType ${i} ]`;{const e=t[1],o=t[2];if(e===n&&Bt[o])return void delete Bt[o];zt(t)}}},kt.onerror=()=>{throw Tt(1),"[ 2021-05-15 onerror ]"},kt.onclose=e=>{4e3===e.code||1001===e.code?Tt(4):Tt(1)}}))},requestReplayData:async function(e,t,n){const o={gameId:e,offset:t,size:n},i=await fetch(`/api/replay-data${Be.asQueryArgs(o)}`);return await i.json()},disconnect:function(){kt&&kt.close(4e3),Dt=0,Bt={}},sendClientEvent:function(e){Dt++,Bt[Dt]=e,_t([it,Dt,Bt[Dt]])},onServerChange:function(e){zt=e;for(const t of At)zt(t);At=[]},onConnectionStateChange:function(e){Pt=e;for(const t of St)Pt(t);St=[]},CODE_CUSTOM_DISCONNECT:4e3,CONN_STATE_NOT_CONNECTED:0,CONN_STATE_DISCONNECTED:1,CONN_STATE_CLOSED:4,CONN_STATE_CONNECTED:2,CONN_STATE_CONNECTING:3},Ot=e({name:"connection-overlay",emits:{reconnect:null},props:{connectionState:Number},computed:{lostConnection(){return this.connectionState===Et.CONN_STATE_DISCONNECTED},connecting(){return this.connectionState===Et.CONN_STATE_CONNECTING},show(){return!(!this.lostConnection&&!this.connecting)}}});const Nt={key:0,class:"overlay connection-lost"},Ut={key:0,class:"overlay-content"},Mt=n("div",null,"⁉️ LOST CONNECTION ⁉️",-1),Gt={key:1,class:"overlay-content"},$t=n("div",null,"Connecting...",-1);Ot.render=function(e,o,l,s,r,c){return e.show?(a(),t("div",Nt,[e.lostConnection?(a(),t("div",Ut,[Mt,n("span",{class:"btn",onClick:o[1]||(o[1]=t=>e.$emit("reconnect"))},"Reconnect")])):i("",!0),e.connecting?(a(),t("div",Gt,[$t])):i("",!0)])):i("",!0)};var Rt=e({name:"help-overlay",emits:{bgclick:null}});const Vt=n("tr",null,[n("td",null,"⬆️ Move up:"),n("td",null,[n("div",null,[n("kbd",null,"W"),s("/"),n("kbd",null,"↑"),s("/πŸ–±οΈ")])])],-1),jt=n("tr",null,[n("td",null,"⬇️ Move down:"),n("td",null,[n("div",null,[n("kbd",null,"S"),s("/"),n("kbd",null,"↓"),s("/πŸ–±οΈ")])])],-1),Ft=n("tr",null,[n("td",null,"⬅️ Move left:"),n("td",null,[n("div",null,[n("kbd",null,"A"),s("/"),n("kbd",null,"←"),s("/πŸ–±οΈ")])])],-1),Lt=n("tr",null,[n("td",null,"➑️ Move right:"),n("td",null,[n("div",null,[n("kbd",null,"D"),s("/"),n("kbd",null,"β†’"),s("/πŸ–±οΈ")])])],-1),Wt=n("tr",null,[n("td"),n("td",null,[n("div",null,[s("Move faster by holding "),n("kbd",null,"Shift")])])],-1),qt=n("tr",null,[n("td",null,"πŸ”+ Zoom in:"),n("td",null,[n("div",null,[n("kbd",null,"E"),s("/πŸ–±οΈ-Wheel")])])],-1),Ht=n("tr",null,[n("td",null,"πŸ”- Zoom out:"),n("td",null,[n("div",null,[n("kbd",null,"Q"),s("/πŸ–±οΈ-Wheel")])])],-1),Qt=n("tr",null,[n("td",null,"πŸ–ΌοΈ Toggle preview:"),n("td",null,[n("div",null,[n("kbd",null,"Space")])])],-1),Yt=n("tr",null,[n("td",null,"πŸ§©βœ”οΈ Toggle fixed pieces:"),n("td",null,[n("div",null,[n("kbd",null,"F")])])],-1),Kt=n("tr",null,[n("td",null,"πŸ§©β“ Toggle loose pieces:"),n("td",null,[n("div",null,[n("kbd",null,"G")])])],-1);Rt.render=function(e,o,i,l,s,r){return a(),t("div",{class:"overlay transparent",onClick:o[2]||(o[2]=t=>e.$emit("bgclick"))},[n("table",{class:"overlay-content help",onClick:o[1]||(o[1]=u((()=>{}),["stop"]))},[Vt,jt,Ft,Lt,Wt,qt,Ht,Qt,Yt,Kt])])};var Zt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAW0lEQVQ4je1RywrAIAxLxP//5exixRWlVgZelpOKeTQFfnDypgy3eLIkSLLL8mxGPoHsU2hPAgDHBLvRX6hZZw/fwT0BtlLSONqCbWAmEIqMZOCDDlaDR3N03gOyDCn+y4DWmAAAAABJRU5ErkJggg=="}),Jt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARElEQVQ4jWNgGAU0Af+hmBCbgYGBgYERhwHEAEYGBgYGJtIdiApYyLAZBVDsAqoagC1ACQJyY4ERg0GCISh6KA4DigEAou8LC+LnIJoAAAAASUVORK5CYII="}),Xt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVQ4ja1TQQ7AIAgD///n7jCozA2Hbk00jbG1KIrcARszTugoBs49qioZj7r2kKACptkyAOCJsJuA+GzglwHjvMSSWFVaENWVASxh5eRLiq5fN/ASjI89VcP2K3hHpq1cEXNaMfnrL3TDZP2tDuoOA6MzCCXWr38AAAAASUVORK5CYII="}),en=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAU0lEQVQ4jWNgoAH4D8X42HDARKlt5BoAd82AuQAOGLGIYQQUPv0wF5CiCQUge4EsQ5C9QI4BjMguwBYeBAElscCIy1ZivMKIwSDBEBQ9FCckigEAU3QOD7TGvY4AAAAASUVORK5CYII="});function tn(){let e=0,t=0,n=1;const o=(o,i)=>{e+=o/n,t+=i/n},i=e=>{const t=n+.05*n*("in"===e?1:-1);return Math.min(Math.max(t,.1),6)},l=o=>({x:o.x/n-e,y:o.y/n-t}),a=o=>({x:(o.x+e)*n,y:(o.y+t)*n}),s=e=>({w:e.w*n,h:e.h*n});return{move:o,canZoom:e=>n!=i(e),zoom:(e,t)=>((e,t)=>{if(n==e)return!1;const i=1-n/e;return o(-t.x*i,-t.y*i),n=e,!0})(i(e),t),worldToViewport:e=>{const{x:t,y:n}=a(e);return{x:Math.round(t),y:Math.round(n)}},worldToViewportRaw:a,worldDimToViewport:e=>{const{w:t,h:n}=s(e);return{w:Math.round(t),h:Math.round(n)}},worldDimToViewportRaw:s,viewportToWorld:e=>{const{x:t,y:n}=l(e);return{x:Math.round(t),y:Math.round(n)}},viewportToWorldRaw:l}}function nn(e=0,t=0){const n=document.createElement("canvas");return n.width=e,n.height=t,n}var on={createCanvas:nn,loadImageToBitmap:async function(e){return new Promise((t=>{const n=new Image;n.onload=()=>{createImageBitmap(n).then(t)},n.src=e}))},resizeBitmap:async function(e,t,n){const o=nn(t,n);return o.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t,n),await createImageBitmap(o)},colorizedCanvas:function(e,t,n){const o=nn(e.width,e.height),i=o.getContext("2d");return i.save(),i.drawImage(t,0,0),i.fillStyle=n,i.globalCompositeOperation="source-in",i.fillRect(0,0,t.width,t.height),i.restore(),i.save(),i.globalCompositeOperation="destination-over",i.drawImage(e,0,0),i.restore(),o}};const ln=De("Debug.js");let an=0,sn=0;var rn=e=>{an=performance.now(),sn=e},cn=e=>{const t=performance.now(),n=t-an;n>sn&&ln.log(e+": "+n),an=t};function dn(e,t){const n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function un(e){return{x:e.x+e.w/2,y:e.y+e.h/2}}var gn={pointSub:function(e,t){return{x:e.x-t.x,y:e.y-t.y}},pointAdd:function(e,t){return{x:e.x+t.x,y:e.y+t.y}},pointDistance:dn,pointInBounds:function(e,t){return e.x>=t.x&&e.x<=t.x+t.w&&e.y>=t.y&&e.y<=t.y+t.h},rectCenter:un,rectMoved:function(e,t,n){return{x:e.x+t,y:e.y+n,w:e.w,h:e.h}},rectCenterDistance:function(e,t){return dn(un(e),un(t))},rectsOverlap:function(e,t){return!(t.x>e.x+e.w||e.x>t.x+t.w||t.y>e.y+e.h||e.y>t.y+t.h)}};const pn=De("PuzzleGraphics.js");function hn(e,t){const n=Be.coordByPieceIdx(e,t);return{x:n.x*e.tileSize,y:n.y*e.tileSize,w:e.tileSize,h:e.tileSize}}var mn={loadPuzzleBitmaps:async function(e){const t=await on.loadImageToBitmap(e.info.imageUrl),n=await on.resizeBitmap(t,e.info.width,e.info.height);return await async function(e,t,n){pn.log("start createPuzzleTileBitmaps");const o=n.tileSize,i=n.tileMarginWidth,l=n.tileDrawSize,a=o/100,s=[0,0,40,15,37,5,37,5,40,0,38,-5,38,-5,20,-20,50,-20,50,-20,80,-20,62,-5,62,-5,60,0,63,5,63,5,65,15,100,0],r=new Array(t.length),c={};function d(e){const t=`${e.top}${e.right}${e.left}${e.bottom}`;if(c[t])return c[t];const n=new Path2D,l={x:i,y:i},r=gn.pointAdd(l,{x:o,y:0}),d=gn.pointAdd(r,{x:0,y:o}),u=gn.pointSub(d,{x:o,y:0});if(n.moveTo(l.x,l.y),0!==e.top)for(let o=0;oBe.decodePiece(yn[e].puzzle.tiles[t]),_n=(e,t)=>Tn(e,t).group,Dn=(e,t)=>{const n=yn[e].puzzle.info,o={x:(n.table.width-n.width)/2,y:(n.table.height-n.height)/2},i=function(e,t){const n=yn[e].puzzle.info,o=Be.coordByPieceIdx(n,t),i=o.x*n.tileSize,l=o.y*n.tileSize;return{x:i,y:l}}(e,t);return gn.pointAdd(o,i)},Bn=(e,t)=>Tn(e,t).pos,En=e=>{const t=Qn(e),n=Yn(e),o=Math.round(t/4),i=Math.round(n/4);return{x:0-o,y:0-i,w:t+2*o,h:n+2*i}},On=(e,t)=>{const n=Gn(e),o=Tn(e,t);return{x:o.pos.x,y:o.pos.y,w:n,h:n}},Nn=(e,t)=>Tn(e,t).z,Un=(e,t)=>{for(const n of yn[e].puzzle.tiles){const e=Be.decodePiece(n);if(e.owner===t)return e.idx}return-1},Mn=e=>yn[e].puzzle.info.tileDrawSize,Gn=e=>yn[e].puzzle.info.tileSize,$n=e=>yn[e].puzzle.data.maxGroup,Rn=e=>yn[e].puzzle.data.maxZ;function Vn(e,t){const n=yn[e].puzzle.info,o=Be.coordByPieceIdx(n,t);return[o.y>0?t-n.tilesX:-1,o.x0?t-1:-1]}const jn=(e,t,n)=>{for(const o of t)In(e,o,{z:n})},Fn=(e,t,n)=>{const o=Bn(e,t);In(e,t,{pos:gn.pointAdd(o,n)})},Ln=(e,t,n)=>{const o=Mn(e),i=En(e),l=n;for(const a of t){const t=Tn(e,a);t.pos.x+n.xi.x+i.w&&(l.x=Math.min(i.x+i.w-t.pos.x+o,l.x)),t.pos.y+n.yi.y+i.h&&(l.y=Math.min(i.y+i.h-t.pos.y+o,l.y))}for(const a of t)Fn(e,a,l)},Wn=(e,t,n)=>{for(const o of t)In(e,o,{owner:n})};function qn(e,t){const n=yn[e].puzzle.tiles,o=Be.decodePiece(n[t]),i=[];if(o.group)for(const l of n){const e=Be.decodePiece(l);e.group===o.group&&i.push(e.idx)}else i.push(o.idx);return i}const Hn=(e,t)=>{const n=wn(e,t);return n?n.points:0},Qn=e=>yn[e].puzzle.info.table.width,Yn=e=>yn[e].puzzle.info.table.height;var Kn={setGame:function(e,t){yn[e]=t},exists:function(e){return!!yn[e]||!1},playerExists:bn,getActivePlayers:function(e,t){const n=t-30*_;return xn(e).filter((e=>e.ts>=n))},getIdlePlayers:function(e,t){const n=t-30*_;return xn(e).filter((e=>e.ts0))},addPlayer:function(e,t,n){bn(e,t)?Sn(e,t,{ts:n}):vn(e,t,function(e,t){return{id:e,x:0,y:0,d:0,name:null,color:null,bgcolor:null,points:0,ts:t}}(t,n))},getFinishedPiecesCount:zn,getPieceCount:Cn,getImageUrl:function(e){return yn[e].puzzle.info.imageUrl},setImageUrl:function(e,t){yn[e].puzzle.info.imageUrl=t},get:function(e){return yn[e]||null},getAllGames:function(){return Object.values(yn).sort(((e,t)=>An(e.id)===An(t.id)?t.puzzle.data.started-e.puzzle.data.started:An(e.id)?1:-1))},getPlayerBgColor:(e,t)=>{const n=wn(e,t);return n?n.bgcolor:null},getPlayerColor:(e,t)=>{const n=wn(e,t);return n?n.color:null},getPlayerName:(e,t)=>{const n=wn(e,t);return n?n.name:null},getPlayerIndexById:fn,getPlayerIdByIndex:function(e,t){return yn[e].players.length>t?Be.decodePlayer(yn[e].players[t]).id:null},changePlayer:Sn,setPlayer:vn,setPiece:function(e,t,n){yn[e].puzzle.tiles[t]=Be.encodePiece(n)},setPuzzleData:function(e,t){yn[e].puzzle.data=t},getTableWidth:Qn,getTableHeight:Yn,getPuzzle:e=>yn[e].puzzle,getRng:e=>yn[e].rng.obj,getPuzzleWidth:e=>yn[e].puzzle.info.width,getPuzzleHeight:e=>yn[e].puzzle.info.height,getPiecesSortedByZIndex:function(e){return yn[e].puzzle.tiles.map(Be.decodePiece).sort(((e,t)=>e.z-t.z))},getFirstOwnedPiece:(e,t)=>{const n=Un(e,t);return n<0?null:yn[e].puzzle.tiles[n]},getPieceDrawOffset:e=>yn[e].puzzle.info.tileDrawOffset,getPieceDrawSize:Mn,getFinalPiecePos:Dn,getStartTs:e=>yn[e].puzzle.data.started,getFinishTs:e=>yn[e].puzzle.data.finished,handleInput:function(e,t,n,o){const i=yn[e].puzzle,l=function(e,t){return t in yn[e].evtInfos?yn[e].evtInfos[t]:{_last_mouse:null,_last_mouse_down:null}}(e,t),a=[],s=()=>{a.push([vt,i.data])},r=t=>{a.push([bt,Be.encodePiece(Tn(e,t))])},c=e=>{for(const t of e)r(t)},d=()=>{const n=wn(e,t);n&&a.push([xt,Be.encodePlayer(n)])},u=n[0];if(u===mt){const i=n[1];Sn(e,t,{bgcolor:i,ts:o}),d()}else if(u===yt){const i=n[1];Sn(e,t,{color:i,ts:o}),d()}else if(u===ft){const i=`${n[1]}`.substr(0,16);Sn(e,t,{name:i,ts:o}),d()}else if(u===dt){const i={x:n[1],y:n[2]};Sn(e,t,{d:1,ts:o}),d(),l._last_mouse_down=i;const a=((e,t)=>{const n=yn[e].puzzle.info,o=yn[e].puzzle.tiles;let i=-1,l=-1;for(let a=0;ai)&&(i=e.z,l=a)}return l})(e,i);if(a>=0){const n=Rn(e)+1;Pn(e,{maxZ:n}),s();const o=qn(e,a);jn(e,o,Rn(e)),Wn(e,o,t),c(o)}l._last_mouse=i}else if(u===gt){const i=n[1],a=n[2],s={x:i,y:a};if(null===l._last_mouse_down)Sn(e,t,{x:i,y:a,ts:o}),d();else{const n=Un(e,t);if(n>=0){Sn(e,t,{x:i,y:a,ts:o}),d();const r=qn(e,n);let u=gn.pointInBounds(s,En(e))&&gn.pointInBounds(l._last_mouse_down,En(e));for(const t of r){const n=On(e,t);if(gn.pointInBounds(s,n)){u=!0;break}}if(u){const t=i-l._last_mouse_down.x,n=a-l._last_mouse_down.y;Ln(e,r,{x:t,y:n}),c(r)}}else Sn(e,t,{ts:o}),d();l._last_mouse_down=s}l._last_mouse=s}else if(u===ut){const a={x:n[1],y:n[2]},u=0;l._last_mouse_down=null;const g=Un(e,t);if(g>=0){const n=qn(e,g);Wn(e,n,0),c(n);const l=Bn(e,g),a=Dn(e,g);if(gn.pointDistance(a,l){for(const n of t)In(e,n,{owner:-1,z:1})})(e,n),c(n);let r=Hn(e,t);kn(e)===fe.FINAL?r+=n.length:kn(e)===fe.ANY&&(r+=1),Sn(e,t,{d:u,ts:o,points:r}),d(),zn(e)===Cn(e)&&(Pn(e,{finished:o}),s())}else{const n=(e,t,n,o)=>{const i=yn[e].puzzle.info;if(n<0)return!1;if(((e,t,n)=>{const o=_n(e,t),i=_n(e,n);return!(!o||o!==i)})(e,t,n))return!1;const l=Bn(e,t),a=gn.pointAdd(Bn(e,n),{x:o[0]*i.tileSize,y:o[1]*i.tileSize});if(gn.pointDistance(l,a){const o=yn[e].puzzle.tiles,i=_n(e,t),l=_n(e,n);let a;const c=[];i&&c.push(i),l&&c.push(l),i?a=i:l?a=l:(Pn(e,{maxGroup:$n(e)+1}),s(),a=$n(e));if(In(e,t,{group:a}),r(t),In(e,n,{group:a}),r(n),c.length>0)for(const s of o){const t=Be.decodePiece(s);c.includes(t.group)&&(In(e,t.idx,{group:a}),r(t.idx))}})(e,t,n),i=qn(e,t);const d=((e,t)=>{let n=0;for(const o of t){const t=Nn(e,o);t>n&&(n=t)}return n})(e,i);return jn(e,i,d),c(i),!0}return!1};let i=!1;for(const t of qn(e,g)){const o=Vn(e,t);if(n(e,t,o[0],[0,1])||n(e,t,o[1],[-1,0])||n(e,t,o[2],[0,-1])||n(e,t,o[3],[1,0])){i=!0;break}}if(i&&kn(e)===fe.ANY){const n=Hn(e,t)+1;Sn(e,t,{d:u,ts:o,points:n}),d()}else Sn(e,t,{d:u,ts:o}),d()}}else Sn(e,t,{d:u,ts:o}),d();l._last_mouse=a}else if(u===pt){const i=n[1],a=n[2];Sn(e,t,{x:i,y:a,ts:o}),d(),l._last_mouse={x:i,y:a}}else if(u===ht){const i=n[1],a=n[2];Sn(e,t,{x:i,y:a,ts:o}),d(),l._last_mouse={x:i,y:a}}else Sn(e,t,{ts:o}),d();return function(e,t,n){yn[e].evtInfos[t]=n}(e,t,l),a}};let Zn=-10,Jn=20,Xn=2,eo=15;class to{constructor(e){this.radius=10,this.previousRadius=10,this.explodingDuration=100,this.hasExploded=!1,this.alive=!0,this.color=function(e){return"rgba("+e.random(0,255)+","+e.random(0,255)+","+e.random(0,255)+", 0.8)"}(e),this.px=window.innerWidth/4+Math.random()*window.innerWidth/2,this.py=window.innerHeight,this.vx=Zn+Math.random()*Jn,this.vy=-1*(Xn+Math.random()*eo),this.duration=0}update(e){if(this.hasExploded){const e=200-this.radius;this.previousRadius=this.radius,this.radius+=e/10,this.explodingDuration--,0==this.explodingDuration&&(this.alive=!1)}else this.vx+=0,this.vy+=1,this.vy>=0&&e&&this.explode(e),this.px+=this.vx,this.py+=this.vy}draw(e){e.beginPath(),e.arc(this.px,this.py,this.previousRadius,0,2*Math.PI,!1),this.hasExploded||(e.fillStyle=this.color,e.lineWidth=1,e.fill())}explode(e){this.hasExploded=!0;const t=3+Math.floor(3*Math.random());for(let n=0;n{this.resize()}))}setSpeedParams(){let e=0,t=0;for(;e=0;)t+=1,e+=t;Xn=t/2,eo=t-Xn;const n=1/4*this.canvas.width/(t/2);Zn=-n,Jn=2*n}resize(){this.setSpeedParams()}init(){this.readyBombs=[],this.explodedBombs=[],this.particles=[];for(let e=0;e<1;e++)this.readyBombs.push(new to(this.rng))}update(){100*Math.random()<5&&this.readyBombs.push(new to(this.rng));const e=[];for(;this.explodedBombs.length>0;){const t=this.explodedBombs.shift();if(!t)break;t.update(),t.alive&&e.push(t)}this.explodedBombs=e;const t=[];for(;this.readyBombs.length>0;){const e=this.readyBombs.shift();if(!e)break;e.update(this.particles),e.hasExploded?this.explodedBombs.push(e):t.push(e)}this.readyBombs=t;const n=[];for(;this.particles.length>0;){const e=this.particles.shift();if(!e)break;e.update(),e.alive&&n.push(e)}this.particles=n}render(){this.ctx.beginPath(),this.ctx.fillStyle="rgba(0, 0, 0, 0.1)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height);for(let e=0;e{const t=e.color+" "+e.d;if(!h[t]){const n=e.d?a:s;if(e.color){const o=e.d?r:c;h[t]=await createImageBitmap(on.colorizedCanvas(n,o,e.color))}else h[t]=n}return h[t]},y=function(e,t){return t.width=window.innerWidth,t.height=window.innerHeight,e.appendChild(t),window.addEventListener("resize",(()=>{t.width=window.innerWidth,t.height=window.innerHeight,so=!0})),t}(i,on.createCanvas()),f={final:!1,requesting:!0,log:[],logPointer:0,speeds:[.5,1,2,5,10,20,50,100,250,500],speedIdx:1,paused:!1,lastRealTs:0,lastGameTs:0,gameStartTs:0,dataOffset:0,dataSize:1e4};Et.onConnectionStateChange((e=>{l.setConnectionState(e)}));const w=async e=>{f.requesting=!0;const t=await Et.requestReplayData(e,f.dataOffset,f.dataSize);return f.dataOffset+=f.dataSize,f.requesting=!1,t};let v=()=>0;const b=async()=>{if("play"===o){const o=await Et.connect(n,e,t),i=Be.decodeGame(o);Kn.setGame(i.id,i),v=()=>D()}else{if("replay"!==o)throw"[ 2020-12-22 MODE invalid, must be play|replay ]";{const t=await w(e);if(!t.game)throw"[ 2021-05-29 no game received ]";const n=Be.decodeGame(t.game);Kn.setGame(n.id,n),f.requesting=!1,f.log=t.log,f.lastRealTs=D(),f.gameStartTs=parseInt(f.log[0][4],10),f.lastGameTs=f.gameStartTs,v=()=>f.lastGameTs}}so=!0};await b();const x=Kn.getPieceDrawOffset(e),C=Kn.getPieceDrawSize(e),k=Kn.getPuzzleWidth(e),A=Kn.getPuzzleHeight(e),z=Kn.getTableWidth(e),S=Kn.getTableHeight(e),P={x:(z-k)/2,y:(S-A)/2},I={w:k,h:A},T={w:C,h:C},_=await mn.loadPuzzleBitmaps(Kn.getPuzzle(e)),B=new oo(y,Kn.getRng(e));B.init();const E=y.getContext("2d");y.classList.add("loaded");const O=tn();O.move(-(z-y.width)/2,-(S-y.height)/2);const N=function(e,t,n){let o=[],i=!0,l=!1,a=!1,s=!1,r=!1,c=!1,d=!1,u=!1;const g=(e,t)=>{const o=n.viewportToWorld({x:e,y:t});return[o.x,o.y]},p=e=>g(e.offsetX,e.offsetY),h=()=>g(e.width/2,e.height/2),m=(e,t)=>{i&&("Shift"===t.key?u=e:"ArrowUp"===t.key||"w"===t.key||"W"===t.key?s=e:"ArrowDown"===t.key||"s"===t.key||"S"===t.key?r=e:"ArrowLeft"===t.key||"a"===t.key||"A"===t.key?l=e:"ArrowRight"===t.key||"d"===t.key||"D"===t.key?a=e:"q"===t.key?d=e:"e"===t.key&&(c=e))};e.addEventListener("mousedown",(e=>{0===e.button&&y([dt,...p(e)])})),e.addEventListener("mouseup",(e=>{0===e.button&&y([ut,...p(e)])})),e.addEventListener("mousemove",(e=>{y([gt,...p(e)])})),e.addEventListener("wheel",(e=>{if(n.canZoom(e.deltaY<0?"in":"out")){const t=e.deltaY<0?pt:ht;y([t,...p(e)])}})),t.addEventListener("keydown",(e=>m(!0,e))),t.addEventListener("keyup",(e=>m(!1,e))),t.addEventListener("keypress",(e=>{i&&(" "===e.key&&y([wt]),"F"!==e.key&&"f"!==e.key||(lo=!lo,so=!0),"G"!==e.key&&"g"!==e.key||(ao=!ao,so=!0))}));const y=e=>{o.push(e)};return{addEvent:y,consumeAll:()=>{if(0===o.length)return[];const e=o.slice();return o=[],e},createKeyEvents:()=>{const e=u?20:10,t=(l?e:0)-(a?e:0),o=(s?e:0)-(r?e:0);0===t&&0===o||y([ct,t,o]),c&&d||(c?n.canZoom("in")&&y([pt,...h()]):d&&n.canZoom("out")&&y([ht,...h()]))},setHotkeys:e=>{i=e}}}(y,window,O),U=Kn.getImageUrl(e),M=()=>{const t=Kn.getStartTs(e),n=Kn.getFinishTs(e),o=v();l.setFinished(!!n),l.setDuration((n||o)-t)};M(),l.setPiecesDone(Kn.getFinishedPiecesCount(e)),l.setPiecesTotal(Kn.getPieceCount(e));const G=v();l.setActivePlayers(Kn.getActivePlayers(e,G)),l.setIdlePlayers(Kn.getIdlePlayers(e,G));const $=!!Kn.getFinishTs(e);let R=$;const V=()=>R&&!$,j=()=>Kn.getPlayerBgColor(e,t)||localStorage.getItem("bg_color")||"#222222",F=()=>Kn.getPlayerColor(e,t)||localStorage.getItem("player_color")||"#ffffff";let L="",W="",q=!1;const H=e=>{q=e;const[t,n]=e?[L,"grab"]:[W,"default"];y.style.cursor=`url('${t}') ${u} ${p}, ${n}`},Q=e=>{L=on.colorizedCanvas(a,r,e).toDataURL(),W=on.colorizedCanvas(s,c,e).toDataURL(),H(q)};Q(F());const Y=()=>{l.setReplaySpeed&&l.setReplaySpeed(f.speeds[f.speedIdx]),l.setReplayPaused&&l.setReplayPaused(f.paused)};if("play"===o?setInterval(M,1e3):"replay"===o&&Y(),"play"===o)Et.onServerChange((n=>{n[0],n[1],n[2];const o=n[3];for(const[i,l]of o)switch(i){case xt:{const n=Be.decodePlayer(l);n.id!==t&&(Kn.setPlayer(e,n.id,n),so=!0)}break;case bt:{const t=Be.decodePiece(l);Kn.setPiece(e,t.idx,t),so=!0}break;case vt:Kn.setPuzzleData(e,l),so=!0}R=!!Kn.getFinishTs(e)}));else if("replay"===o){const t=setInterval((()=>{const n=D();if(f.requesting)return void(f.lastRealTs=n);if(f.logPointer+1>=f.log.length)return f.lastRealTs=n,void(async e=>{const t=await w(e);f.log=f.log.slice(f.logPointer),f.logPointer=0,f.log.push(...t.log),t.log.length=f.log.length){f.final&&clearInterval(t);break}const o=f.log[n],l=f.gameStartTs+o[o.length-1];if(l>i)break;const a=o.slice();if(a[0]===at){const t=a[1];Kn.addPlayer(e,t,l),so=!0}else if(a[0]===st){const t=Kn.getPlayerIdByIndex(e,a[1]);if(!t)throw"[ 2021-05-17 player not found (update player) ]";Kn.addPlayer(e,t,l),so=!0}else if(a[0]===rt){const t=Kn.getPlayerIdByIndex(e,a[1]);if(!t)throw"[ 2021-05-17 player not found (handle input) ]";const n=a[2];Kn.handleInput(e,t,n,l),so=!0}f.logPointer=n}f.lastRealTs=n,f.lastGameTs=i,M()}),50)}let K=null;return(e=>{const t=e.fps||60,n=e.slow||1,o=e.update,i=e.render,l=window.requestAnimationFrame,a=1/t,s=n*a;let r,c=0,d=window.performance.now();const u=()=>{for(r=window.performance.now(),c+=Math.min(1,(r-d)/1e3);c>s;)c-=s,o(a);i(c/n),d=r,l(u)};l(u)})({update:()=>{N.createKeyEvents();for(const n of N.consumeAll())if("play"===o){const o=n[0];if(o===ct){const e=n[1],t=n[2];so=!0,O.move(e,t)}else if(o===gt){if(K&&!Kn.getFirstOwnedPiece(e,t)){const e={x:n[1],y:n[2]},t=O.worldToViewport(e),o=Math.round(t.x-K.x),i=Math.round(t.y-K.y);so=!0,O.move(o,i),K=t}}else if(o===yt)Q(n[1]);else if(o===dt){const e={x:n[1],y:n[2]};K=O.worldToViewport(e),H(!0)}else if(o===ut)K=null,H(!1);else if(o===pt){const e={x:n[1],y:n[2]};so=!0,O.zoom("in",O.worldToViewport(e))}else if(o===ht){const e={x:n[1],y:n[2]};so=!0,O.zoom("out",O.worldToViewport(e))}else o===wt&&l.togglePreview();const i=v();Kn.handleInput(e,t,n,i).length>0&&(so=!0),Et.sendClientEvent(n)}else if("replay"===o){const e=n[0];if(e===ct){const e=n[1],t=n[2];so=!0,O.move(e,t)}else if(e===gt){if(K){const e={x:n[1],y:n[2]},t=O.worldToViewport(e),o=Math.round(t.x-K.x),i=Math.round(t.y-K.y);so=!0,O.move(o,i),K=t}}else if(e===dt){const e={x:n[1],y:n[2]};K=O.worldToViewport(e)}else if(e===ut)K=null;else if(e===pt){const e={x:n[1],y:n[2]};so=!0,O.zoom("in",O.worldToViewport(e))}else if(e===ht){const e={x:n[1],y:n[2]};so=!0,O.zoom("out",O.worldToViewport(e))}else e===wt&&l.togglePreview()}R=!!Kn.getFinishTs(e),V()&&(B.update(),so=!0)},render:async()=>{if(!so)return;const n=v();let i,a,s;window.DEBUG&&rn(0),E.fillStyle=j(),E.fillRect(0,0,y.width,y.height),window.DEBUG&&cn("clear done"),i=O.worldToViewportRaw(P),a=O.worldDimToViewportRaw(I),E.fillStyle="rgba(255, 255, 255, .3)",E.fillRect(i.x,i.y,a.w,a.h),window.DEBUG&&cn("board done");const r=Kn.getPiecesSortedByZIndex(e);window.DEBUG&&cn("get tiles done"),a=O.worldDimToViewportRaw(T);for(const e of r)(-1===e.owner?lo:ao)&&(s=_[e.idx],i=O.worldToViewportRaw({x:x+e.pos.x,y:x+e.pos.y}),E.drawImage(s,0,0,s.width,s.height,i.x,i.y,a.w,a.h));window.DEBUG&&cn("tiles done");const c=[];for(const l of Kn.getActivePlayers(e,n))d=l,("replay"===o||d.id!==t)&&(s=await m(l),i=O.worldToViewport(l),E.drawImage(s,i.x-u,i.y-p),c.push([`${l.name} (${l.points})`,i.x,i.y+g]));var d;E.fillStyle="white",E.textAlign="center";for(const[e,t,o]of c)E.fillText(e,t,o);window.DEBUG&&cn("players done"),l.setActivePlayers(Kn.getActivePlayers(e,n)),l.setIdlePlayers(Kn.getIdlePlayers(e,n)),l.setPiecesDone(Kn.getFinishedPiecesCount(e)),window.DEBUG&&cn("HUD done"),V()&&B.render(),so=!1}}),{setHotkeys:e=>{N.setHotkeys(e)},onBgChange:e=>{localStorage.setItem("bg_color",e),N.addEvent([mt,e])},onColorChange:e=>{localStorage.setItem("player_color",e),N.addEvent([yt,e])},onNameChange:e=>{localStorage.setItem("player_name",e),N.addEvent([ft,e])},replayOnSpeedUp:()=>{f.speedIdx+1{f.speedIdx>=1&&(f.speedIdx--,Y())},replayOnPauseToggle:()=>{f.paused=!f.paused,Y()},previewImageUrl:U,player:{background:j(),color:F(),name:Kn.getPlayerName(e,t)||localStorage.getItem("player_name")||"anon"},disconnect:Et.disconnect,connect:b}}var co=e({name:"game",components:{PuzzleStatus:Qe,Scores:Fe,SettingsOverlay:Ke,PreviewOverlay:et,ConnectionOverlay:Ot,HelpOverlay:Rt},data:()=>({activePlayers:[],idlePlayers:[],finished:!1,duration:0,piecesDone:0,piecesTotal:0,overlay:"",connectionState:0,g:{player:{background:"",color:"",name:""},previewImageUrl:"",setHotkeys:e=>{},onBgChange:e=>{},onColorChange:e=>{},onNameChange:e=>{},disconnect:()=>{},connect:()=>{}}}),async mounted(){this.$route.params.id&&(this.$watch((()=>this.g.player.background),(e=>{this.g.onBgChange(e)})),this.$watch((()=>this.g.player.color),(e=>{this.g.onColorChange(e)})),this.$watch((()=>this.g.player.name),(e=>{this.g.onNameChange(e)})),this.g=await ro(`${this.$route.params.id}`,this.$clientId,this.$config.WS_ADDRESS,"play",this.$el,{setActivePlayers:e=>{this.activePlayers=e},setIdlePlayers:e=>{this.idlePlayers=e},setFinished:e=>{this.finished=e},setDuration:e=>{this.duration=e},setPiecesDone:e=>{this.piecesDone=e},setPiecesTotal:e=>{this.piecesTotal=e},setConnectionState:e=>{this.connectionState=e},togglePreview:()=>{this.toggle("preview",!1)}}))},unmounted(){this.g.disconnect()},methods:{reconnect(){this.g.connect()},toggle(e,t){""===this.overlay?(this.overlay=e,t&&this.g.setHotkeys(!1)):(this.overlay="",t&&this.g.setHotkeys(!0))}}});const uo={id:"game"},go={class:"menu"},po={class:"tabs"},ho=s("🧩 Puzzles");co.render=function(e,i,s,r,c,d){const u=l("settings-overlay"),p=l("preview-overlay"),h=l("help-overlay"),m=l("connection-overlay"),y=l("puzzle-status"),f=l("router-link"),w=l("scores");return a(),t("div",uo,[g(n(u,{onBgclick:i[1]||(i[1]=t=>e.toggle("settings",!0)),modelValue:e.g.player,"onUpdate:modelValue":i[2]||(i[2]=t=>e.g.player=t)},null,8,["modelValue"]),[[v,"settings"===e.overlay]]),g(n(p,{onBgclick:i[3]||(i[3]=t=>e.toggle("preview",!1)),img:e.g.previewImageUrl},null,8,["img"]),[[v,"preview"===e.overlay]]),g(n(h,{onBgclick:i[4]||(i[4]=t=>e.toggle("help",!0))},null,512),[[v,"help"===e.overlay]]),n(m,{connectionState:e.connectionState,onReconnect:e.reconnect},null,8,["connectionState","onReconnect"]),n(y,{finished:e.finished,duration:e.duration,piecesDone:e.piecesDone,piecesTotal:e.piecesTotal},null,8,["finished","duration","piecesDone","piecesTotal"]),n("div",go,[n("div",po,[n(f,{class:"opener",to:{name:"index"},target:"_blank"},{default:o((()=>[ho])),_:1}),n("div",{class:"opener",onClick:i[5]||(i[5]=t=>e.toggle("preview",!1))},"πŸ–ΌοΈ Preview"),n("div",{class:"opener",onClick:i[6]||(i[6]=t=>e.toggle("settings",!0))},"πŸ› οΈ Settings"),n("div",{class:"opener",onClick:i[7]||(i[7]=t=>e.toggle("help",!0))},"ℹ️ Help")])]),n(w,{activePlayers:e.activePlayers,idlePlayers:e.idlePlayers},null,8,["activePlayers","idlePlayers"])])};var mo=e({name:"replay",components:{PuzzleStatus:Qe,Scores:Fe,SettingsOverlay:Ke,PreviewOverlay:et,HelpOverlay:Rt},data:()=>({activePlayers:[],idlePlayers:[],finished:!1,duration:0,piecesDone:0,piecesTotal:0,overlay:"",connectionState:0,g:{player:{background:"",color:"",name:""},previewImageUrl:"",setHotkeys:e=>{},onBgChange:e=>{},onColorChange:e=>{},onNameChange:e=>{},replayOnSpeedUp:()=>{},replayOnSpeedDown:()=>{},replayOnPauseToggle:()=>{},disconnect:()=>{}},replay:{speed:1,paused:!1}}),async mounted(){this.$route.params.id&&(this.$watch((()=>this.g.player.background),(e=>{this.g.onBgChange(e)})),this.$watch((()=>this.g.player.color),(e=>{this.g.onColorChange(e)})),this.$watch((()=>this.g.player.name),(e=>{this.g.onNameChange(e)})),this.g=await ro(`${this.$route.params.id}`,this.$clientId,this.$config.WS_ADDRESS,"replay",this.$el,{setActivePlayers:e=>{this.activePlayers=e},setIdlePlayers:e=>{this.idlePlayers=e},setFinished:e=>{this.finished=e},setDuration:e=>{this.duration=e},setPiecesDone:e=>{this.piecesDone=e},setPiecesTotal:e=>{this.piecesTotal=e},togglePreview:()=>{this.toggle("preview",!1)},setConnectionState:e=>{this.connectionState=e},setReplaySpeed:e=>{this.replay.speed=e},setReplayPaused:e=>{this.replay.paused=e}}))},unmounted(){this.g.disconnect()},methods:{toggle(e,t){""===this.overlay?(this.overlay=e,t&&this.g.setHotkeys(!1)):(this.overlay="",t&&this.g.setHotkeys(!0))}},computed:{replayText(){return"Replay-Speed: "+this.replay.speed+"x"+(this.replay.paused?" Paused":"")}}});const yo={id:"replay"},fo={class:"menu"},wo={class:"tabs"},vo=s("🧩 Puzzles");mo.render=function(e,i,s,c,d,u){const p=l("settings-overlay"),h=l("preview-overlay"),m=l("help-overlay"),y=l("puzzle-status"),f=l("router-link"),w=l("scores");return a(),t("div",yo,[g(n(p,{onBgclick:i[1]||(i[1]=t=>e.toggle("settings",!0)),modelValue:e.g.player,"onUpdate:modelValue":i[2]||(i[2]=t=>e.g.player=t)},null,8,["modelValue"]),[[v,"settings"===e.overlay]]),g(n(h,{onBgclick:i[3]||(i[3]=t=>e.toggle("preview",!1)),img:e.g.previewImageUrl},null,8,["img"]),[[v,"preview"===e.overlay]]),g(n(m,{onBgclick:i[4]||(i[4]=t=>e.toggle("help",!0))},null,512),[[v,"help"===e.overlay]]),n(y,{finished:e.finished,duration:e.duration,piecesDone:e.piecesDone,piecesTotal:e.piecesTotal},{default:o((()=>[n("div",null,[n("div",null,r(e.replayText),1),n("button",{class:"btn",onClick:i[5]||(i[5]=t=>e.g.replayOnSpeedUp())},"⏫"),n("button",{class:"btn",onClick:i[6]||(i[6]=t=>e.g.replayOnSpeedDown())},"⏬"),n("button",{class:"btn",onClick:i[7]||(i[7]=t=>e.g.replayOnPauseToggle())},"⏸️")])])),_:1},8,["finished","duration","piecesDone","piecesTotal"]),n("div",fo,[n("div",wo,[n(f,{class:"opener",to:{name:"index"},target:"_blank"},{default:o((()=>[vo])),_:1}),n("div",{class:"opener",onClick:i[8]||(i[8]=t=>e.toggle("preview",!1))},"πŸ–ΌοΈ Preview"),n("div",{class:"opener",onClick:i[9]||(i[9]=t=>e.toggle("settings",!0))},"πŸ› οΈ Settings"),n("div",{class:"opener",onClick:i[10]||(i[10]=t=>e.toggle("help",!0))},"ℹ️ Help")])]),n(w,{activePlayers:e.activePlayers,idlePlayers:e.idlePlayers},null,8,["activePlayers","idlePlayers"])])},(async()=>{const e=await fetch("/api/conf"),t=await e.json();const n=b({history:x(),routes:[{name:"index",path:"/",component:R},{name:"new-game",path:"/new-game",component:Ee},{name:"game",path:"/g/:id",component:co},{name:"replay",path:"/replay/:id",component:mo}]});n.beforeEach(((e,t)=>{t.name&&document.documentElement.classList.remove(`view-${String(t.name)}`),document.documentElement.classList.add(`view-${String(e.name)}`)}));const o=C(k);o.config.globalProperties.$config=t,o.config.globalProperties.$clientId=function(){let e=localStorage.getItem("ID");return e||(e=Be.uniqId(),localStorage.setItem("ID",e)),e}(),o.use(n),o.mount("#app")})(); diff --git a/build/public/assets/index.d7fe3ee6.js b/build/public/assets/index.d7fe3ee6.js new file mode 100644 index 0000000..6f2483d --- /dev/null +++ b/build/public/assets/index.d7fe3ee6.js @@ -0,0 +1 @@ +import{d as e,c as t,a as n,w as o,b as l,r as i,o as a,e as s,t as r,F as d,f as c,g as u,h as g,v as p,i as h,j as m,k as y,l as f,m as w,n as v,p as b,q as x,s as k,u as C}from"./vendor.18cd2d7e.js";var A=e({name:"app",computed:{showNav(){return!["game","replay"].includes(String(this.$route.name))}}});const S={id:"app"},z={key:0,class:"nav"},P=s("Index"),I=s("New game");A.render=function(e,s,r,d,c,u){const g=i("router-link"),p=i("router-view");return a(),t("div",S,[e.showNav?(a(),t("ul",z,[n("li",null,[n(g,{class:"btn",to:{name:"index"}},{default:o((()=>[P])),_:1})]),n("li",null,[n(g,{class:"btn",to:{name:"new-game"}},{default:o((()=>[I])),_:1})])])):l("",!0),n(p)])};const T=864e5,_=e=>{const t=Math.floor(e/T);e%=T;const n=Math.floor(e/36e5);e%=36e5;const o=Math.floor(e/6e4);e%=6e4;return`${t}d ${n}h ${o}m ${Math.floor(e/1e3)}s`};var E=1e3,D=()=>{const e=new Date;return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds())},B=(e,t)=>_(t-e),O=_,U=e({name:"game-teaser",props:{game:{type:Object,required:!0}},computed:{style(){return{"background-image":`url("${this.game.imageUrl.replace("uploads/","uploads/r/")+"-375x210.webp"}")`}}},methods:{time(e,t){const n=t?"🏁":"⏳",o=e,l=t||D();return`${n} ${B(o,l)}`}}});const N={class:"game-info-text"},M=n("br",null,null,-1),G=n("br",null,null,-1),$=n("br",null,null,-1),R=s(" β†ͺ️ Watch replay ");U.render=function(e,d,c,u,g,p){const h=i("router-link");return a(),t("div",{class:"game-teaser",style:e.style},[n(h,{class:"game-info",to:{name:"game",params:{id:e.game.id}}},{default:o((()=>[n("span",N,[s(" 🧩 "+r(e.game.tilesFinished)+"/"+r(e.game.tilesTotal),1),M,s(" πŸ‘₯ "+r(e.game.players),1),G,s(" "+r(e.time(e.game.started,e.game.finished)),1),$])])),_:1},8,["to"]),e.game.hasReplay?(a(),t(h,{key:0,class:"game-replay",to:{name:"replay",params:{id:e.game.id}}},{default:o((()=>[R])),_:1},8,["to"])):l("",!0)],4)};var V=e({components:{GameTeaser:U},data:()=>({gamesRunning:[],gamesFinished:[]}),async created(){const e=await fetch("/api/index-data"),t=await e.json();this.gamesRunning=t.gamesRunning,this.gamesFinished=t.gamesFinished}});const j=n("h1",null,"Running games",-1),F=n("h1",null,"Finished games",-1);V.render=function(e,o,l,s,r,u){const g=i("game-teaser");return a(),t("div",null,[j,(a(!0),t(d,null,c(e.gamesRunning,((e,o)=>(a(),t("div",{class:"game-teaser-wrap",key:o},[n(g,{game:e},null,8,["game"])])))),128)),F,(a(!0),t(d,null,c(e.gamesFinished,((e,o)=>(a(),t("div",{class:"game-teaser-wrap",key:o},[n(g,{game:e},null,8,["game"])])))),128))])};var L=e({name:"image-teaser",props:{image:{type:Object,required:!0}},computed:{style(){return{backgroundImage:`url("${this.image.url.replace("uploads/","uploads/r/")+"-150x100.webp"}")`}}},emits:{click:null,editClick:null},methods:{onClick(){this.$emit("click")},onEditClick(){this.$emit("editClick")}}});L.render=function(e,o,l,i,s,r){return a(),t("div",{class:"imageteaser",style:e.style,onClick:o[2]||(o[2]=(...t)=>e.onClick&&e.onClick(...t))},[n("div",{class:"btn edit",onClick:o[1]||(o[1]=u(((...t)=>e.onEditClick&&e.onEditClick(...t)),["stop"]))},"✏️")],4)};var W=e({name:"image-library",components:{ImageTeaser:L},props:{images:{type:Array,required:!0}},emits:{imageClicked:null,imageEditClicked:null},methods:{imageClicked(e){this.$emit("imageClicked",e)},imageEditClicked(e){this.$emit("imageEditClicked",e)}}});W.render=function(e,n,o,l,s,r){const u=i("image-teaser");return a(),t("div",null,[(a(!0),t(d,null,c(e.images,((n,o)=>(a(),t(u,{image:n,onClick:t=>e.imageClicked(n),onEditClick:t=>e.imageEditClicked(n),key:o},null,8,["image","onClick","onEditClick"])))),128))])};const q={name:"responsive-image",props:{src:String,title:{type:String,default:""},height:{type:String,default:"100%"},width:{type:String,default:"100%"}},computed:{style(){return{display:"inline-block",verticalAlign:"text-bottom",backgroundImage:`url('${this.src}')`,backgroundRepeat:"no-repeat",backgroundSize:"contain",backgroundPosition:"center",width:this.width,height:this.height}}}};q.render=function(e,n,o,l,i,s){return a(),t("div",{style:s.style,title:o.title},null,12,["title"])};var H=e({name:"tags-input",props:{modelValue:{type:Array,required:!0}},emits:{"update:modelValue":null},data:()=>({input:"",values:[]}),created(){this.values=this.modelValue},methods:{onKeyUp(e){if(","===e.key)return this.add(),e.stopPropagation(),!1},add(){const e=this.input.replace(/,/g,"").trim();e&&(this.values.includes(e)||this.values.push(e),this.input="",this.$emit("update:modelValue",this.values))},rm(e){this.values=this.values.filter((t=>t!==e)),this.$emit("update:modelValue",this.values)}}});const Q=m()(((e,o,l,i,s,u)=>(a(),t("div",null,[g(n("input",{class:"input",type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.input=t),placeholder:"Plants, People",onKeydown:o[2]||(o[2]=h(((...t)=>e.add&&e.add(...t)),["enter"])),onKeyup:o[3]||(o[3]=(...t)=>e.onKeyUp&&e.onKeyUp(...t))},null,544),[[p,e.input]]),(a(!0),t(d,null,c(e.values,((n,o)=>(a(),t("span",{key:o,class:"bit",onClick:t=>e.rm(n)},r(n)+" βœ–",9,["onClick"])))),128))]))));H.render=Q,H.__scopeId="data-v-771460ae";var Y=e({name:"new-image-dialog",components:{ResponsiveImage:q,TagsInput:H},emits:{bgclick:null,setupGameClick:null,postToGalleryClick:null},data:()=>({previewUrl:"",file:null,title:"",tags:[]}),computed:{canPostToGallery(){return!(!this.previewUrl||!this.file)},canSetupGameClick(){return!(!this.previewUrl||!this.file)}},methods:{preview(e){const t=e.target;if(!t.files)return;const n=t.files[0];if(!n)return;const o=new FileReader;o.readAsDataURL(n),o.onload=e=>{this.previewUrl=e.target.result,this.file=n}},postToGallery(){this.$emit("postToGalleryClick",{file:this.file,title:this.title,tags:this.tags})},setupGameClick(){this.$emit("setupGameClick",{file:this.file,title:this.title,tags:this.tags})}}});const K={key:0,class:"has-image"},Z={key:1},J={class:"upload"},X=n("span",{class:"btn"},"Upload File",-1),ee={class:"area-settings"},te=n("td",null,[n("label",null,"Title")],-1),ne=n("tr",null,[n("td",{colspan:"2"},[n("div",{class:"hint"},"Feel free to leave a credit to the artist/photographer in the title :)")])],-1),oe=n("td",null,[n("label",null,"Tags")],-1),le={class:"area-buttons"},ie=s("🧩 Post to gallery "),ae=n("br",null,null,-1),se=s(" + set up game");Y.render=function(e,o,l,s,r,d){const c=i("responsive-image"),h=i("tags-input");return a(),t("div",{class:"overlay new-image-dialog",onClick:o[8]||(o[8]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[7]||(o[7]=u((()=>{}),["stop"]))},[n("div",{class:["area-image",{"has-image":!!e.previewUrl,"no-image":!e.previewUrl}]},[e.previewUrl?(a(),t("div",K,[n("span",{class:"remove btn",onClick:o[1]||(o[1]=t=>e.previewUrl="")},"X"),n(c,{src:e.previewUrl},null,8,["src"])])):(a(),t("div",Z,[n("label",J,[n("input",{type:"file",style:{display:"none"},onChange:o[2]||(o[2]=(...t)=>e.preview&&e.preview(...t)),accept:"image/*"},null,32),X])]))],2),n("div",ee,[n("table",null,[n("tr",null,[te,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[3]||(o[3]=t=>e.title=t),placeholder:"Flower by @artist"},null,512),[[p,e.title]])])]),ne,n("tr",null,[oe,n("td",null,[n(h,{modelValue:e.tags,"onUpdate:modelValue":o[4]||(o[4]=t=>e.tags=t)},null,8,["modelValue"])])])])]),n("div",le,[n("button",{class:"btn",disabled:!e.canPostToGallery,onClick:o[5]||(o[5]=(...t)=>e.postToGallery&&e.postToGallery(...t))},"πŸ–ΌοΈ Post to gallery",8,["disabled"]),n("button",{class:"btn",disabled:!e.canSetupGameClick,onClick:o[6]||(o[6]=(...t)=>e.setupGameClick&&e.setupGameClick(...t))},[ie,ae,se],8,["disabled"])])])])};var re=e({name:"edit-image-dialog",components:{ResponsiveImage:q,TagsInput:H},props:{image:{type:Object,required:!0}},emits:{bgclick:null,saveClick:null},data:()=>({title:"",tags:[]}),created(){this.title=this.image.title,this.tags=this.image.tags.map((e=>e.title))},methods:{saveImage(){this.$emit("saveClick",{id:this.image.id,title:this.title,tags:this.tags})}}});const de={class:"area-image"},ce={class:"has-image"},ue={class:"area-settings"},ge=n("td",null,[n("label",null,"Title")],-1),pe=n("tr",null,[n("td",{colspan:"2"},[n("div",{class:"hint"},"Feel free to leave a credit to the artist/photographer in the title :)")])],-1),he=n("td",null,[n("label",null,"Tags")],-1),me={class:"area-buttons"};var ye,fe,we,ve;re.render=function(e,o,l,s,r,d){const c=i("responsive-image"),h=i("tags-input");return a(),t("div",{class:"overlay edit-image-dialog",onClick:o[5]||(o[5]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[4]||(o[4]=u((()=>{}),["stop"]))},[n("div",de,[n("div",ce,[n(c,{src:e.image.url,title:e.image.title},null,8,["src","title"])])]),n("div",ue,[n("table",null,[n("tr",null,[ge,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.title=t),placeholder:"Flower by @artist"},null,512),[[p,e.title]])])]),pe,n("tr",null,[he,n("td",null,[n(h,{modelValue:e.tags,"onUpdate:modelValue":o[2]||(o[2]=t=>e.tags=t)},null,8,["modelValue"])])])])]),n("div",me,[n("button",{class:"btn",onClick:o[3]||(o[3]=(...t)=>e.saveImage&&e.saveImage(...t))},"πŸ–ΌοΈ Save image")])])])},(fe=ye||(ye={}))[fe.Flat=0]="Flat",fe[fe.Out=1]="Out",fe[fe.In=-1]="In",(ve=we||(we={}))[ve.FINAL=0]="FINAL",ve[ve.ANY=1]="ANY";var be=e({name:"new-game-dialog",components:{ResponsiveImage:q},props:{image:{type:Object,required:!0}},emits:{newGame:null,bgclick:null},data:()=>({tiles:1e3,scoreMode:we.ANY}),methods:{onNewGameClick(){this.$emit("newGame",{tiles:this.tilesInt,image:this.image,scoreMode:this.scoreModeInt})}},computed:{canStartNewGame(){return!!(this.tilesInt&&this.image&&this.image.url&&[0,1].includes(this.scoreModeInt))},scoreModeInt(){return parseInt(`${this.scoreMode}`,10)},tilesInt(){return parseInt(`${this.tiles}`,10)}}});const xe={class:"area-image"},ke={class:"has-image"},Ce={class:"area-settings"},Ae=n("td",null,[n("label",null,"Pieces")],-1),Se=n("td",null,[n("label",null,"Scoring: ")],-1),ze=s(" Any (Score when pieces are connected to each other or on final location)"),Pe=n("br",null,null,-1),Ie=s(" Final (Score when pieces are put to their final location)"),Te={class:"area-buttons"};be.render=function(e,o,l,s,r,d){const c=i("responsive-image");return a(),t("div",{class:"overlay new-game-dialog",onClick:o[6]||(o[6]=t=>e.$emit("bgclick"))},[n("div",{class:"overlay-content",onClick:o[5]||(o[5]=u((()=>{}),["stop"]))},[n("div",xe,[n("div",ke,[n(c,{src:e.image.url,title:e.image.title},null,8,["src","title"])])]),n("div",Ce,[n("table",null,[n("tr",null,[Ae,n("td",null,[g(n("input",{type:"text","onUpdate:modelValue":o[1]||(o[1]=t=>e.tiles=t)},null,512),[[p,e.tiles]])])]),n("tr",null,[Se,n("td",null,[n("label",null,[g(n("input",{type:"radio","onUpdate:modelValue":o[2]||(o[2]=t=>e.scoreMode=t),value:"1"},null,512),[[y,e.scoreMode]]),ze]),Pe,n("label",null,[g(n("input",{type:"radio","onUpdate:modelValue":o[3]||(o[3]=t=>e.scoreMode=t),value:"0"},null,512),[[y,e.scoreMode]]),Ie])])])])]),n("div",Te,[n("button",{class:"btn",disabled:!e.canStartNewGame,onClick:o[4]||(o[4]=(...t)=>e.onNewGameClick&&e.onNewGameClick(...t))}," 🧩 Generate Puzzle ",8,["disabled"])])])])};class _e{constructor(e){this.rand_high=e||3735929054,this.rand_low=1231121986^e}random(e,t){this.rand_high=(this.rand_high<<16)+(this.rand_high>>16)+this.rand_low&4294967295,this.rand_low=this.rand_low+this.rand_high&4294967295;return e+(this.rand_high>>>0)/4294967295*(t-e+1)|0}choice(e){return e[this.random(0,e.length-1)]}shuffle(e){const t=e.slice();for(let n=0;n<=t.length-2;n++){const e=this.random(n,t.length-1),o=t[n];t[n]=t[e],t[e]=o}return t}static serialize(e){return{rand_high:e.rand_high,rand_low:e.rand_low}}static unserialize(e){const t=new _e(0);return t.rand_high=e.rand_high,t.rand_low=e.rand_low,t}}const Ee=(e,t)=>{const n=`${e}`;return n.length>=t.length?n:t.substr(0,t.length-n.length)+n},De=(...e)=>{const t=t=>(...n)=>{const o=new Date,l=Ee(o.getHours(),"00"),i=Ee(o.getMinutes(),"00"),a=Ee(o.getSeconds(),"00");console[t](`${l}:${i}:${a}`,...e,...n)};return{log:t("log"),error:t("error"),info:t("info")}};var Be={hash:e=>{let t=0;for(let n=0;n{let t=e.toLowerCase();return t=t.replace(/[^a-z0-9]+/g,"-"),t=t.replace(/^-|-$/,""),t},uniqId:()=>Date.now().toString(36)+Math.random().toString(36).substring(2),encodeShape:function(e){return e.top+1<<0|e.right+1<<2|e.bottom+1<<4|e.left+1<<6},decodeShape:function(e){return{top:(e>>0&3)-1,right:(e>>2&3)-1,bottom:(e>>4&3)-1,left:(e>>6&3)-1}},encodePiece:function(e){return[e.idx,e.pos.x,e.pos.y,e.z,e.owner,e.group]},decodePiece:function(e){return{idx:e[0],pos:{x:e[1],y:e[2]},z:e[3],owner:e[4],group:e[5]}},encodePlayer:function(e){return[e.id,e.x,e.y,e.d,e.name,e.color,e.bgcolor,e.points,e.ts]},decodePlayer:function(e){return{id:e[0],x:e[1],y:e[2],d:e[3],name:e[4],color:e[5],bgcolor:e[6],points:e[7],ts:e[8]}},encodeGame:function(e){return[e.id,e.rng.type||"",_e.serialize(e.rng.obj),e.puzzle,e.players,e.evtInfos,e.scoreMode||we.FINAL]},decodeGame:function(e){return{id:e[0],rng:{type:e[1],obj:_e.unserialize(e[2])},puzzle:e[3],players:e[4],evtInfos:e[5],scoreMode:e[6]}},coordByPieceIdx:function(e,t){const n=e.width/e.tileSize;return{x:t%n,y:Math.floor(t/n)}},asQueryArgs:function(e){const t=[];for(const n in e){const o=[n,e[n]].map(encodeURIComponent);t.push(o.join("="))}return 0===t.length?"":`?${t.join("&")}`}},Oe=e({components:{ImageLibrary:W,NewImageDialog:Y,EditImageDialog:re,NewGameDialog:be},data:()=>({filters:{sort:"date_desc",tags:[]},images:[],tags:[],image:{id:0,filename:"",file:"",url:"",title:"",tags:[],created:0},dialog:""}),async created(){await this.loadImages()},methods:{toggleTag(e){this.filters.tags.includes(e.slug)?this.filters.tags=this.filters.tags.filter((t=>t!==e.slug)):this.filters.tags.push(e.slug),this.filtersChanged()},async loadImages(){const e=await fetch(`/api/newgame-data${Be.asQueryArgs(this.filters)}`),t=await e.json();this.images=t.images,this.tags=t.tags},async filtersChanged(){await this.loadImages()},onImageClicked(e){this.image=e,this.dialog="new-game"},onImageEditClicked(e){this.image=e,this.dialog="edit-image"},async uploadImage(e){const t=new FormData;t.append("file",e.file,e.file.name),t.append("title",e.title),t.append("tags",e.tags);const n=await fetch("/api/upload",{method:"post",body:t});return await n.json()},async saveImage(e){const t=await fetch("/api/save-image",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({id:e.id,title:e.title,tags:e.tags})});return await t.json()},async onSaveImageClick(e){await this.saveImage(e),this.dialog="",await this.loadImages()},async postToGalleryClick(e){await this.uploadImage(e),this.dialog="",await this.loadImages()},async setupGameClick(e){const t=await this.uploadImage(e);this.loadImages(),this.image=t,this.dialog="new-game"},async onNewGame(e){const t=await fetch("/api/newgame",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)});if(200===t.status){const e=await t.json();this.$router.push({name:"game",params:{id:e.id}})}}}});const Ue={class:"upload-image-teaser"},Ne=n("div",{class:"hint"},"(The image you upload will be added to the public gallery.)",-1),Me={key:0},Ge=s(" Tags: "),$e=s(" Sort by: "),Re=n("option",{value:"date_desc"},"Newest first",-1),Ve=n("option",{value:"date_asc"},"Oldest first",-1),je=n("option",{value:"alpha_asc"},"A-Z",-1),Fe=n("option",{value:"alpha_desc"},"Z-A",-1);Oe.render=function(e,o,s,u,p,h){const m=i("image-library"),y=i("new-image-dialog"),w=i("edit-image-dialog"),v=i("new-game-dialog");return a(),t("div",null,[n("div",Ue,[n("div",{class:"btn btn-big",onClick:o[1]||(o[1]=t=>e.dialog="new-image")},"Upload your image"),Ne]),n("div",null,[e.tags.length>0?(a(),t("label",Me,[Ge,(a(!0),t(d,null,c(e.tags,((n,o)=>(a(),t("span",{class:["bit",{on:e.filters.tags.includes(n.slug)}],key:o,onClick:t=>e.toggleTag(n)},r(n.title),11,["onClick"])))),128))])):l("",!0),n("label",null,[$e,g(n("select",{"onUpdate:modelValue":o[2]||(o[2]=t=>e.filters.sort=t),onChange:o[3]||(o[3]=(...t)=>e.filtersChanged&&e.filtersChanged(...t))},[Re,Ve,je,Fe],544),[[f,e.filters.sort]])])]),n(m,{images:e.images,onImageClicked:e.onImageClicked,onImageEditClicked:e.onImageEditClicked},null,8,["images","onImageClicked","onImageEditClicked"]),"new-image"===e.dialog?(a(),t(y,{key:0,onBgclick:o[4]||(o[4]=t=>e.dialog=""),onPostToGalleryClick:e.postToGalleryClick,onSetupGameClick:e.setupGameClick},null,8,["onPostToGalleryClick","onSetupGameClick"])):l("",!0),"edit-image"===e.dialog?(a(),t(w,{key:1,onBgclick:o[5]||(o[5]=t=>e.dialog=""),onSaveClick:e.onSaveImageClick,image:e.image},null,8,["onSaveClick","image"])):l("",!0),e.image&&"new-game"===e.dialog?(a(),t(v,{key:2,onBgclick:o[6]||(o[6]=t=>e.dialog=""),onNewGame:e.onNewGame,image:e.image},null,8,["onNewGame","image"])):l("",!0)])};var Le=e({name:"scores",props:{activePlayers:{type:Array,required:!0},idlePlayers:{type:Array,required:!0}},computed:{actives(){return this.activePlayers.sort(((e,t)=>t.points-e.points)),this.activePlayers},idles(){return this.idlePlayers.sort(((e,t)=>t.points-e.points)),this.idlePlayers}}});const We={class:"scores"},qe=n("div",null,"Scores",-1),He=n("td",null,"⚑",-1),Qe=n("td",null,"πŸ’€",-1);Le.render=function(e,o,l,i,s,u){return a(),t("div",We,[qe,n("table",null,[(a(!0),t(d,null,c(e.actives,((e,o)=>(a(),t("tr",{key:o,style:{color:e.color}},[He,n("td",null,r(e.name),1),n("td",null,r(e.points),1)],4)))),128)),(a(!0),t(d,null,c(e.idles,((e,o)=>(a(),t("tr",{key:o,style:{color:e.color}},[Qe,n("td",null,r(e.name),1),n("td",null,r(e.points),1)],4)))),128))])])};var Ye=e({name:"puzzle-status",props:{finished:{type:Boolean,required:!0},duration:{type:Number,required:!0},piecesDone:{type:Number,required:!0},piecesTotal:{type:Number,required:!0}},computed:{icon(){return this.finished?"🏁":"⏳"},durationStr(){return O(this.duration)}}});const Ke={class:"timer"};Ye.render=function(e,o,l,i,s,d){return a(),t("div",Ke,[n("div",null," 🧩 "+r(e.piecesDone)+"/"+r(e.piecesTotal),1),n("div",null,r(e.icon)+" "+r(e.durationStr),1),w(e.$slots,"default")])};var Ze=e({name:"settings-overlay",emits:{bgclick:null,"update:modelValue":null},props:{modelValue:Object},created(){this.$watch("modelValue",(e=>{this.$emit("update:modelValue",e)}),{deep:!0})}});const Je=n("td",null,[n("label",null,"Background: ")],-1),Xe=n("td",null,[n("label",null,"Color: ")],-1),et=n("td",null,[n("label",null,"Name: ")],-1),tt=n("td",null,[n("label",null,"Sounds: ")],-1);Ze.render=function(e,o,l,i,s,r){return a(),t("div",{class:"overlay transparent",onClick:o[6]||(o[6]=t=>e.$emit("bgclick"))},[n("table",{class:"overlay-content settings",onClick:o[5]||(o[5]=u((()=>{}),["stop"]))},[n("tr",null,[Je,n("td",null,[g(n("input",{type:"color","onUpdate:modelValue":o[1]||(o[1]=t=>e.modelValue.background=t)},null,512),[[p,e.modelValue.background]])])]),n("tr",null,[Xe,n("td",null,[g(n("input",{type:"color","onUpdate:modelValue":o[2]||(o[2]=t=>e.modelValue.color=t)},null,512),[[p,e.modelValue.color]])])]),n("tr",null,[et,n("td",null,[g(n("input",{type:"text",maxLength:"16","onUpdate:modelValue":o[3]||(o[3]=t=>e.modelValue.name=t)},null,512),[[p,e.modelValue.name]])])]),n("tr",null,[tt,n("td",null,[g(n("input",{type:"checkbox","onUpdate:modelValue":o[4]||(o[4]=t=>e.modelValue.soundsEnabled=t)},null,512),[[v,e.modelValue.soundsEnabled]])])])])])};var nt=e({name:"preview-overlay",props:{img:String},emits:{bgclick:null},computed:{previewStyle(){return{backgroundImage:`url('${this.img}')`}}}});const ot={class:"preview"};nt.render=function(e,o,l,i,s,r){return a(),t("div",{class:"overlay",onClick:o[1]||(o[1]=t=>e.$emit("bgclick"))},[n("div",ot,[n("div",{class:"img",style:e.previewStyle},null,4)])])};var lt=1,it=4,at=2,st=3,rt=2,dt=4,ct=3,ut=9,gt=1,pt=2,ht=3,mt=4,yt=5,ft=6,wt=7,vt=8,bt=10,xt=11,kt=1,Ct=2,At=3;const St=De("Communication.js");let zt,Pt=[],It=e=>{Pt.push(e)},Tt=[],_t=e=>{Tt.push(e)};let Et=0;const Dt=e=>{Et!==e&&(Et=e,_t(e))};function Bt(e){if(2===Et)try{zt.send(JSON.stringify(e))}catch(t){St.info("unable to send message.. maybe because ws is invalid?")}}let Ot,Ut;var Nt={connect:function(e,t,n){return Ot=0,Ut={},Dt(3),new Promise((o=>{zt=new WebSocket(e,n+"|"+t),zt.onopen=()=>{Dt(2),Bt([st])},zt.onmessage=e=>{const t=JSON.parse(e.data),l=t[0];if(l===it){const e=t[1];o(e)}else{if(l!==lt)throw`[ 2021-05-09 invalid connect msgType ${l} ]`;{const e=t[1],o=t[2];if(e===n&&Ut[o])return void delete Ut[o];It(t)}}},zt.onerror=()=>{throw Dt(1),"[ 2021-05-15 onerror ]"},zt.onclose=e=>{4e3===e.code||1001===e.code?Dt(4):Dt(1)}}))},requestReplayData:async function(e,t,n){const o={gameId:e,offset:t,size:n},l=await fetch(`/api/replay-data${Be.asQueryArgs(o)}`);return await l.json()},disconnect:function(){zt&&zt.close(4e3),Ot=0,Ut={}},sendClientEvent:function(e){Ot++,Ut[Ot]=e,Bt([at,Ot,Ut[Ot]])},onServerChange:function(e){It=e;for(const t of Pt)It(t);Pt=[]},onConnectionStateChange:function(e){_t=e;for(const t of Tt)_t(t);Tt=[]},CODE_CUSTOM_DISCONNECT:4e3,CONN_STATE_NOT_CONNECTED:0,CONN_STATE_DISCONNECTED:1,CONN_STATE_CLOSED:4,CONN_STATE_CONNECTED:2,CONN_STATE_CONNECTING:3},Mt=e({name:"connection-overlay",emits:{reconnect:null},props:{connectionState:Number},computed:{lostConnection(){return this.connectionState===Nt.CONN_STATE_DISCONNECTED},connecting(){return this.connectionState===Nt.CONN_STATE_CONNECTING},show(){return!(!this.lostConnection&&!this.connecting)}}});const Gt={key:0,class:"overlay connection-lost"},$t={key:0,class:"overlay-content"},Rt=n("div",null,"⁉️ LOST CONNECTION ⁉️",-1),Vt={key:1,class:"overlay-content"},jt=n("div",null,"Connecting...",-1);Mt.render=function(e,o,i,s,r,d){return e.show?(a(),t("div",Gt,[e.lostConnection?(a(),t("div",$t,[Rt,n("span",{class:"btn",onClick:o[1]||(o[1]=t=>e.$emit("reconnect"))},"Reconnect")])):l("",!0),e.connecting?(a(),t("div",Vt,[jt])):l("",!0)])):l("",!0)};var Ft=e({name:"help-overlay",emits:{bgclick:null}});const Lt=n("tr",null,[n("td",null,"⬆️ Move up:"),n("td",null,[n("div",null,[n("kbd",null,"W"),s("/"),n("kbd",null,"↑"),s("/πŸ–±οΈ")])])],-1),Wt=n("tr",null,[n("td",null,"⬇️ Move down:"),n("td",null,[n("div",null,[n("kbd",null,"S"),s("/"),n("kbd",null,"↓"),s("/πŸ–±οΈ")])])],-1),qt=n("tr",null,[n("td",null,"⬅️ Move left:"),n("td",null,[n("div",null,[n("kbd",null,"A"),s("/"),n("kbd",null,"←"),s("/πŸ–±οΈ")])])],-1),Ht=n("tr",null,[n("td",null,"➑️ Move right:"),n("td",null,[n("div",null,[n("kbd",null,"D"),s("/"),n("kbd",null,"β†’"),s("/πŸ–±οΈ")])])],-1),Qt=n("tr",null,[n("td"),n("td",null,[n("div",null,[s("Move faster by holding "),n("kbd",null,"Shift")])])],-1),Yt=n("tr",null,[n("td",null,"πŸ”+ Zoom in:"),n("td",null,[n("div",null,[n("kbd",null,"E"),s("/πŸ–±οΈ-Wheel")])])],-1),Kt=n("tr",null,[n("td",null,"πŸ”- Zoom out:"),n("td",null,[n("div",null,[n("kbd",null,"Q"),s("/πŸ–±οΈ-Wheel")])])],-1),Zt=n("tr",null,[n("td",null,"πŸ–ΌοΈ Toggle preview:"),n("td",null,[n("div",null,[n("kbd",null,"Space")])])],-1),Jt=n("tr",null,[n("td",null,"πŸ§©βœ”οΈ Toggle fixed pieces:"),n("td",null,[n("div",null,[n("kbd",null,"F")])])],-1),Xt=n("tr",null,[n("td",null,"πŸ§©β“ Toggle loose pieces:"),n("td",null,[n("div",null,[n("kbd",null,"G")])])],-1),en=n("tr",null,[n("td",null,"πŸ”‰ Toggle sounds:"),n("td",null,[n("div",null,[n("kbd",null,"M")])])],-1);Ft.render=function(e,o,l,i,s,r){return a(),t("div",{class:"overlay transparent",onClick:o[2]||(o[2]=t=>e.$emit("bgclick"))},[n("table",{class:"overlay-content help",onClick:o[1]||(o[1]=u((()=>{}),["stop"]))},[Lt,Wt,qt,Ht,Qt,Yt,Kt,Zt,Jt,Xt,en])])};var tn=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"/assets/click.550555f3.mp3"}),nn=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAW0lEQVQ4je1RywrAIAxLxP//5exixRWlVgZelpOKeTQFfnDypgy3eLIkSLLL8mxGPoHsU2hPAgDHBLvRX6hZZw/fwT0BtlLSONqCbWAmEIqMZOCDDlaDR3N03gOyDCn+y4DWmAAAAABJRU5ErkJggg=="}),on=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARElEQVQ4jWNgGAU0Af+hmBCbgYGBgYERhwHEAEYGBgYGJtIdiApYyLAZBVDsAqoagC1ACQJyY4ERg0GCISh6KA4DigEAou8LC+LnIJoAAAAASUVORK5CYII="}),ln=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVQ4ja1TQQ7AIAgD///n7jCozA2Hbk00jbG1KIrcARszTugoBs49qioZj7r2kKACptkyAOCJsJuA+GzglwHjvMSSWFVaENWVASxh5eRLiq5fN/ASjI89VcP2K3hHpq1cEXNaMfnrL3TDZP2tDuoOA6MzCCXWr38AAAAASUVORK5CYII="}),an=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAU0lEQVQ4jWNgoAH4D8X42HDARKlt5BoAd82AuQAOGLGIYQQUPv0wF5CiCQUge4EsQ5C9QI4BjMguwBYeBAElscCIy1ZivMKIwSDBEBQ9FCckigEAU3QOD7TGvY4AAAAASUVORK5CYII="});function sn(){let e=0,t=0,n=1;const o=(o,l)=>{e+=o/n,t+=l/n},l=e=>{const t=n+.05*n*("in"===e?1:-1);return Math.min(Math.max(t,.1),6)},i=o=>({x:o.x/n-e,y:o.y/n-t}),a=o=>({x:(o.x+e)*n,y:(o.y+t)*n}),s=e=>({w:e.w*n,h:e.h*n});return{move:o,canZoom:e=>n!=l(e),zoom:(e,t)=>((e,t)=>{if(n==e)return!1;const l=1-n/e;return o(-t.x*l,-t.y*l),n=e,!0})(l(e),t),worldToViewport:e=>{const{x:t,y:n}=a(e);return{x:Math.round(t),y:Math.round(n)}},worldToViewportRaw:a,worldDimToViewport:e=>{const{w:t,h:n}=s(e);return{w:Math.round(t),h:Math.round(n)}},worldDimToViewportRaw:s,viewportToWorld:e=>{const{x:t,y:n}=i(e);return{x:Math.round(t),y:Math.round(n)}},viewportToWorldRaw:i}}function rn(e=0,t=0){const n=document.createElement("canvas");return n.width=e,n.height=t,n}var dn={createCanvas:rn,loadImageToBitmap:async function(e){return new Promise((t=>{const n=new Image;n.onload=()=>{createImageBitmap(n).then(t)},n.src=e}))},resizeBitmap:async function(e,t,n){const o=rn(t,n);return o.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t,n),await createImageBitmap(o)},colorizedCanvas:function(e,t,n){const o=rn(e.width,e.height),l=o.getContext("2d");return l.save(),l.drawImage(t,0,0),l.fillStyle=n,l.globalCompositeOperation="source-in",l.fillRect(0,0,t.width,t.height),l.restore(),l.save(),l.globalCompositeOperation="destination-over",l.drawImage(e,0,0),l.restore(),o}};const cn=De("Debug.js");let un=0,gn=0;var pn=e=>{un=performance.now(),gn=e},hn=e=>{const t=performance.now(),n=t-un;n>gn&&cn.log(e+": "+n),un=t};function mn(e,t){const n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function yn(e){return{x:e.x+e.w/2,y:e.y+e.h/2}}var fn={pointSub:function(e,t){return{x:e.x-t.x,y:e.y-t.y}},pointAdd:function(e,t){return{x:e.x+t.x,y:e.y+t.y}},pointDistance:mn,pointInBounds:function(e,t){return e.x>=t.x&&e.x<=t.x+t.w&&e.y>=t.y&&e.y<=t.y+t.h},rectCenter:yn,rectMoved:function(e,t,n){return{x:e.x+t,y:e.y+n,w:e.w,h:e.h}},rectCenterDistance:function(e,t){return mn(yn(e),yn(t))},rectsOverlap:function(e,t){return!(t.x>e.x+e.w||e.x>t.x+t.w||t.y>e.y+e.h||e.y>t.y+t.h)}};const wn=De("PuzzleGraphics.js");function vn(e,t){const n=Be.coordByPieceIdx(e,t);return{x:n.x*e.tileSize,y:n.y*e.tileSize,w:e.tileSize,h:e.tileSize}}var bn={loadPuzzleBitmaps:async function(e){const t=await dn.loadImageToBitmap(e.info.imageUrl),n=await dn.resizeBitmap(t,e.info.width,e.info.height);return await async function(e,t,n){wn.log("start createPuzzleTileBitmaps");const o=n.tileSize,l=n.tileMarginWidth,i=n.tileDrawSize,a=o/100,s=[0,0,40,15,37,5,37,5,40,0,38,-5,38,-5,20,-20,50,-20,50,-20,80,-20,62,-5,62,-5,60,0,63,5,63,5,65,15,100,0],r=new Array(t.length),d={};function c(e){const t=`${e.top}${e.right}${e.left}${e.bottom}`;if(d[t])return d[t];const n=new Path2D,i={x:l,y:l},r=fn.pointAdd(i,{x:o,y:0}),c=fn.pointAdd(r,{x:0,y:o}),u=fn.pointSub(c,{x:o,y:0});if(n.moveTo(i.x,i.y),0!==e.top)for(let o=0;oBe.decodePiece(xn[e].puzzle.tiles[t]),Un=(e,t)=>On(e,t).group,Nn=(e,t)=>{const n=xn[e].puzzle.info,o={x:(n.table.width-n.width)/2,y:(n.table.height-n.height)/2},l=function(e,t){const n=xn[e].puzzle.info,o=Be.coordByPieceIdx(n,t),l=o.x*n.tileSize,i=o.y*n.tileSize;return{x:l,y:i}}(e,t);return fn.pointAdd(o,l)},Mn=(e,t)=>On(e,t).pos,Gn=e=>{const t=Xn(e),n=eo(e),o=Math.round(t/4),l=Math.round(n/4);return{x:0-o,y:0-l,w:t+2*o,h:n+2*l}},$n=(e,t)=>{const n=Fn(e),o=On(e,t);return{x:o.pos.x,y:o.pos.y,w:n,h:n}},Rn=(e,t)=>On(e,t).z,Vn=(e,t)=>{for(const n of xn[e].puzzle.tiles){const e=Be.decodePiece(n);if(e.owner===t)return e.idx}return-1},jn=e=>xn[e].puzzle.info.tileDrawSize,Fn=e=>xn[e].puzzle.info.tileSize,Ln=e=>xn[e].puzzle.data.maxGroup,Wn=e=>xn[e].puzzle.data.maxZ;function qn(e,t){const n=xn[e].puzzle.info,o=Be.coordByPieceIdx(n,t);return[o.y>0?t-n.tilesX:-1,o.x0?t-1:-1]}const Hn=(e,t,n)=>{for(const o of t)Bn(e,o,{z:n})},Qn=(e,t,n)=>{const o=Mn(e,t);Bn(e,t,{pos:fn.pointAdd(o,n)})},Yn=(e,t,n)=>{const o=jn(e),l=Gn(e),i=n;for(const a of t){const t=On(e,a);t.pos.x+n.xl.x+l.w&&(i.x=Math.min(l.x+l.w-t.pos.x+o,i.x)),t.pos.y+n.yl.y+l.h&&(i.y=Math.min(l.y+l.h-t.pos.y+o,i.y))}for(const a of t)Qn(e,a,i)},Kn=(e,t,n)=>{for(const o of t)Bn(e,o,{owner:n})};function Zn(e,t){const n=xn[e].puzzle.tiles,o=Be.decodePiece(n[t]),l=[];if(o.group)for(const i of n){const e=Be.decodePiece(i);e.group===o.group&&l.push(e.idx)}else l.push(o.idx);return l}const Jn=(e,t)=>{const n=Cn(e,t);return n?n.points:0},Xn=e=>xn[e].puzzle.info.table.width,eo=e=>xn[e].puzzle.info.table.height;var to={setGame:function(e,t){xn[e]=t},exists:function(e){return!!xn[e]||!1},playerExists:Sn,getActivePlayers:function(e,t){const n=t-30*E;return zn(e).filter((e=>e.ts>=n))},getIdlePlayers:function(e,t){const n=t-30*E;return zn(e).filter((e=>e.ts0))},addPlayer:function(e,t,n){Sn(e,t)?En(e,t,{ts:n}):An(e,t,function(e,t){return{id:e,x:0,y:0,d:0,name:null,color:null,bgcolor:null,points:0,ts:t}}(t,n))},getFinishedPiecesCount:_n,getPieceCount:Pn,getImageUrl:function(e){return xn[e].puzzle.info.imageUrl},setImageUrl:function(e,t){xn[e].puzzle.info.imageUrl=t},get:function(e){return xn[e]||null},getAllGames:function(){return Object.values(xn).sort(((e,t)=>Tn(e.id)===Tn(t.id)?t.puzzle.data.started-e.puzzle.data.started:Tn(e.id)?1:-1))},getPlayerBgColor:(e,t)=>{const n=Cn(e,t);return n?n.bgcolor:null},getPlayerColor:(e,t)=>{const n=Cn(e,t);return n?n.color:null},getPlayerName:(e,t)=>{const n=Cn(e,t);return n?n.name:null},getPlayerIndexById:kn,getPlayerIdByIndex:function(e,t){return xn[e].players.length>t?Be.decodePlayer(xn[e].players[t]).id:null},changePlayer:En,setPlayer:An,setPiece:function(e,t,n){xn[e].puzzle.tiles[t]=Be.encodePiece(n)},setPuzzleData:function(e,t){xn[e].puzzle.data=t},getTableWidth:Xn,getTableHeight:eo,getPuzzle:e=>xn[e].puzzle,getRng:e=>xn[e].rng.obj,getPuzzleWidth:e=>xn[e].puzzle.info.width,getPuzzleHeight:e=>xn[e].puzzle.info.height,getPiecesSortedByZIndex:function(e){return xn[e].puzzle.tiles.map(Be.decodePiece).sort(((e,t)=>e.z-t.z))},getFirstOwnedPiece:(e,t)=>{const n=Vn(e,t);return n<0?null:xn[e].puzzle.tiles[n]},getPieceDrawOffset:e=>xn[e].puzzle.info.tileDrawOffset,getPieceDrawSize:jn,getFinalPiecePos:Nn,getStartTs:e=>xn[e].puzzle.data.started,getFinishTs:e=>xn[e].puzzle.data.finished,handleInput:function(e,t,n,o,l){const i=xn[e].puzzle,a=function(e,t){return t in xn[e].evtInfos?xn[e].evtInfos[t]:{_last_mouse:null,_last_mouse_down:null}}(e,t),s=[],r=()=>{s.push([kt,i.data])},d=t=>{s.push([Ct,Be.encodePiece(On(e,t))])},c=e=>{for(const t of e)d(t)},u=()=>{const n=Cn(e,t);n&&s.push([At,Be.encodePlayer(n)])},g=n[0];if(g===ft){const l=n[1];En(e,t,{bgcolor:l,ts:o}),u()}else if(g===wt){const l=n[1];En(e,t,{color:l,ts:o}),u()}else if(g===vt){const l=`${n[1]}`.substr(0,16);En(e,t,{name:l,ts:o}),u()}else if(g===gt){const l={x:n[1],y:n[2]};En(e,t,{d:1,ts:o}),u(),a._last_mouse_down=l;const i=((e,t)=>{const n=xn[e].puzzle.info,o=xn[e].puzzle.tiles;let l=-1,i=-1;for(let a=0;al)&&(l=e.z,i=a)}return i})(e,l);if(i>=0){const n=Wn(e)+1;Dn(e,{maxZ:n}),r();const o=Zn(e,i);Hn(e,o,Wn(e)),Kn(e,o,t),c(o)}a._last_mouse=l}else if(g===ht){const l=n[1],i=n[2],s={x:l,y:i};if(null===a._last_mouse_down)En(e,t,{x:l,y:i,ts:o}),u();else{const n=Vn(e,t);if(n>=0){En(e,t,{x:l,y:i,ts:o}),u();const r=Zn(e,n);let d=fn.pointInBounds(s,Gn(e))&&fn.pointInBounds(a._last_mouse_down,Gn(e));for(const t of r){const n=$n(e,t);if(fn.pointInBounds(s,n)){d=!0;break}}if(d){const t=l-a._last_mouse_down.x,n=i-a._last_mouse_down.y;Yn(e,r,{x:t,y:n}),c(r)}}else En(e,t,{ts:o}),u();a._last_mouse_down=s}a._last_mouse=s}else if(g===pt){const s={x:n[1],y:n[2]},g=0;a._last_mouse_down=null;const p=Vn(e,t);if(p>=0){const n=Zn(e,p);Kn(e,n,0),c(n);const a=Mn(e,p),s=Nn(e,p);if(fn.pointDistance(s,a){for(const n of t)Bn(e,n,{owner:-1,z:1})})(e,n),c(n);let d=Jn(e,t);In(e)===we.FINAL?d+=n.length:In(e)===we.ANY&&(d+=1),En(e,t,{d:g,ts:o,points:d}),u(),_n(e)===Pn(e)&&(Dn(e,{finished:o}),r()),l&&l(t)}else{const n=(e,t,n,o)=>{const l=xn[e].puzzle.info;if(n<0)return!1;if(((e,t,n)=>{const o=Un(e,t),l=Un(e,n);return!(!o||o!==l)})(e,t,n))return!1;const i=Mn(e,t),a=fn.pointAdd(Mn(e,n),{x:o[0]*l.tileSize,y:o[1]*l.tileSize});if(fn.pointDistance(i,a){const o=xn[e].puzzle.tiles,l=Un(e,t),i=Un(e,n);let a;const s=[];l&&s.push(l),i&&s.push(i),l?a=l:i?a=i:(Dn(e,{maxGroup:Ln(e)+1}),r(),a=Ln(e));if(Bn(e,t,{group:a}),d(t),Bn(e,n,{group:a}),d(n),s.length>0)for(const r of o){const t=Be.decodePiece(r);s.includes(t.group)&&(Bn(e,t.idx,{group:a}),d(t.idx))}})(e,t,n),l=Zn(e,t);const s=((e,t)=>{let n=0;for(const o of t){const t=Rn(e,o);t>n&&(n=t)}return n})(e,l);return Hn(e,l,s),c(l),!0}return!1};let i=!1;for(const t of Zn(e,p)){const o=qn(e,t);if(n(e,t,o[0],[0,1])||n(e,t,o[1],[-1,0])||n(e,t,o[2],[0,-1])||n(e,t,o[3],[1,0])){i=!0;break}}if(i&&In(e)===we.ANY){const n=Jn(e,t)+1;En(e,t,{d:g,ts:o,points:n}),u()}else En(e,t,{d:g,ts:o}),u();i&&l&&l(t)}}else En(e,t,{d:g,ts:o}),u();a._last_mouse=s}else if(g===mt){const l=n[1],i=n[2];En(e,t,{x:l,y:i,ts:o}),u(),a._last_mouse={x:l,y:i}}else if(g===yt){const l=n[1],i=n[2];En(e,t,{x:l,y:i,ts:o}),u(),a._last_mouse={x:l,y:i}}else En(e,t,{ts:o}),u();return function(e,t,n){xn[e].evtInfos[t]=n}(e,t,a),s}};let no=-10,oo=20,lo=2,io=15;class ao{constructor(e){this.radius=10,this.previousRadius=10,this.explodingDuration=100,this.hasExploded=!1,this.alive=!0,this.color=function(e){return"rgba("+e.random(0,255)+","+e.random(0,255)+","+e.random(0,255)+", 0.8)"}(e),this.px=window.innerWidth/4+Math.random()*window.innerWidth/2,this.py=window.innerHeight,this.vx=no+Math.random()*oo,this.vy=-1*(lo+Math.random()*io),this.duration=0}update(e){if(this.hasExploded){const e=200-this.radius;this.previousRadius=this.radius,this.radius+=e/10,this.explodingDuration--,0==this.explodingDuration&&(this.alive=!1)}else this.vx+=0,this.vy+=1,this.vy>=0&&e&&this.explode(e),this.px+=this.vx,this.py+=this.vy}draw(e){e.beginPath(),e.arc(this.px,this.py,this.previousRadius,0,2*Math.PI,!1),this.hasExploded||(e.fillStyle=this.color,e.lineWidth=1,e.fill())}explode(e){this.hasExploded=!0;const t=3+Math.floor(3*Math.random());for(let n=0;n{this.resize()}))}setSpeedParams(){let e=0,t=0;for(;e=0;)t+=1,e+=t;lo=t/2,io=t-lo;const n=1/4*this.canvas.width/(t/2);no=-n,oo=2*n}resize(){this.setSpeedParams()}init(){this.readyBombs=[],this.explodedBombs=[],this.particles=[];for(let e=0;e<1;e++)this.readyBombs.push(new ao(this.rng))}update(){100*Math.random()<5&&this.readyBombs.push(new ao(this.rng));const e=[];for(;this.explodedBombs.length>0;){const t=this.explodedBombs.shift();if(!t)break;t.update(),t.alive&&e.push(t)}this.explodedBombs=e;const t=[];for(;this.readyBombs.length>0;){const e=this.readyBombs.shift();if(!e)break;e.update(this.particles),e.hasExploded?this.explodedBombs.push(e):t.push(e)}this.readyBombs=t;const n=[];for(;this.particles.length>0;){const e=this.particles.shift();if(!e)break;e.update(),e.alive&&n.push(e)}this.particles=n}render(){this.ctx.beginPath(),this.ctx.fillStyle="rgba(0, 0, 0, 0.1)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height);for(let e=0;e{const t=e.color+" "+e.d;if(!y[t]){const n=e.d?r:d;if(e.color){const o=e.d?c:u;y[t]=await createImageBitmap(dn.colorizedCanvas(n,o,e.color))}else y[t]=n}return y[t]},w=function(e,t){return t.width=window.innerWidth,t.height=window.innerHeight,e.appendChild(t),window.addEventListener("resize",(()=>{t.width=window.innerWidth,t.height=window.innerHeight,ho=!0})),t}(l,dn.createCanvas()),v={final:!1,requesting:!0,log:[],logPointer:0,speeds:[.5,1,2,5,10,20,50,100,250,500],speedIdx:1,paused:!1,lastRealTs:0,lastGameTs:0,gameStartTs:0,dataOffset:0,dataSize:1e4};Nt.onConnectionStateChange((e=>{i.setConnectionState(e)}));const b=async e=>{v.requesting=!0;const t=await Nt.requestReplayData(e,v.dataOffset,v.dataSize);return v.dataOffset+=v.dataSize,v.requesting=!1,t};let x=()=>0;const k=async()=>{if("play"===o){const o=await Nt.connect(n,e,t),l=Be.decodeGame(o);to.setGame(l.id,l),x=()=>D()}else{if("replay"!==o)throw"[ 2020-12-22 MODE invalid, must be play|replay ]";{const t=await b(e);if(!t.game)throw"[ 2021-05-29 no game received ]";const n=Be.decodeGame(t.game);to.setGame(n.id,n),v.requesting=!1,v.log=t.log,v.lastRealTs=D(),v.gameStartTs=parseInt(v.log[0][4],10),v.lastGameTs=v.gameStartTs,x=()=>v.lastGameTs}}ho=!0};await k();const C=to.getPieceDrawOffset(e),A=to.getPieceDrawSize(e),S=to.getPuzzleWidth(e),z=to.getPuzzleHeight(e),P=to.getTableWidth(e),I=to.getTableHeight(e),T={x:(P-S)/2,y:(I-z)/2},_={w:S,h:z},E={w:A,h:A},B=await bn.loadPuzzleBitmaps(to.getPuzzle(e)),O=new ro(w,to.getRng(e));O.init();const U=w.getContext("2d");w.classList.add("loaded");const N=sn();N.move(-(P-w.width)/2,-(I-w.height)/2);const M=function(e,t,n){let o=[],l=!0,i=!1,a=!1,s=!1,r=!1,d=!1,c=!1,u=!1;const g=(e,t)=>{const o=n.viewportToWorld({x:e,y:t});return[o.x,o.y]},p=e=>g(e.offsetX,e.offsetY),h=()=>g(e.width/2,e.height/2),m=(e,t)=>{l&&("Shift"===t.key?u=e:"ArrowUp"===t.key||"w"===t.key||"W"===t.key?s=e:"ArrowDown"===t.key||"s"===t.key||"S"===t.key?r=e:"ArrowLeft"===t.key||"a"===t.key||"A"===t.key?i=e:"ArrowRight"===t.key||"d"===t.key||"D"===t.key?a=e:"q"===t.key?c=e:"e"===t.key&&(d=e))};e.addEventListener("mousedown",(e=>{0===e.button&&y([gt,...p(e)])})),e.addEventListener("mouseup",(e=>{0===e.button&&y([pt,...p(e)])})),e.addEventListener("mousemove",(e=>{y([ht,...p(e)])})),e.addEventListener("wheel",(e=>{if(n.canZoom(e.deltaY<0?"in":"out")){const t=e.deltaY<0?mt:yt;y([t,...p(e)])}})),t.addEventListener("keydown",(e=>m(!0,e))),t.addEventListener("keyup",(e=>m(!1,e))),t.addEventListener("keypress",(e=>{l&&(" "===e.key&&y([bt]),"F"!==e.key&&"f"!==e.key||(go=!go,ho=!0),"G"!==e.key&&"g"!==e.key||(po=!po,ho=!0),"M"!==e.key&&"m"!==e.key||y([xt]))}));const y=e=>{o.push(e)};return{addEvent:y,consumeAll:()=>{if(0===o.length)return[];const e=o.slice();return o=[],e},createKeyEvents:()=>{const e=u?20:10,t=(i?e:0)-(a?e:0),o=(s?e:0)-(r?e:0);0===t&&0===o||y([ut,t,o]),d&&c||(d?n.canZoom("in")&&y([mt,...h()]):c&&n.canZoom("out")&&y([yt,...h()]))},setHotkeys:e=>{l=e}}}(w,window,N),G=to.getImageUrl(e),$=()=>{const t=to.getStartTs(e),n=to.getFinishTs(e),o=x();i.setFinished(!!n),i.setDuration((n||o)-t)};$(),i.setPiecesDone(to.getFinishedPiecesCount(e)),i.setPiecesTotal(to.getPieceCount(e));const R=x();i.setActivePlayers(to.getActivePlayers(e,R)),i.setIdlePlayers(to.getIdlePlayers(e,R));const V=!!to.getFinishTs(e);let j=V;const F=()=>j&&!V,L=()=>{const e=localStorage.getItem("sound_enabled");return null!==e&&"1"===e},W=()=>to.getPlayerBgColor(e,t)||localStorage.getItem("bg_color")||"#222222",q=()=>to.getPlayerColor(e,t)||localStorage.getItem("player_color")||"#ffffff";let H="",Q="",Y=!1;const K=e=>{Y=e;const[t,n]=e?[H,"grab"]:[Q,"default"];w.style.cursor=`url('${t}') ${p} ${m}, ${n}`},Z=e=>{H=dn.colorizedCanvas(r,c,e).toDataURL(),Q=dn.colorizedCanvas(d,u,e).toDataURL(),K(Y)};Z(q());const J=()=>{i.setReplaySpeed&&i.setReplaySpeed(v.speeds[v.speedIdx]),i.setReplayPaused&&i.setReplayPaused(v.paused)};if("play"===o?setInterval($,1e3):"replay"===o&&J(),"play"===o)Nt.onServerChange((n=>{n[0],n[1],n[2];const o=n[3];for(const[l,i]of o)switch(l){case At:{const n=Be.decodePlayer(i);n.id!==t&&(to.setPlayer(e,n.id,n),ho=!0)}break;case Ct:{const t=Be.decodePiece(i);to.setPiece(e,t.idx,t),ho=!0}break;case kt:to.setPuzzleData(e,i),ho=!0}j=!!to.getFinishTs(e)}));else if("replay"===o){const t=setInterval((()=>{const n=D();if(v.requesting)return void(v.lastRealTs=n);if(v.logPointer+1>=v.log.length)return v.lastRealTs=n,void(async e=>{const t=await b(e);v.log=v.log.slice(v.logPointer),v.logPointer=0,v.log.push(...t.log),t.log.length=v.log.length){v.final&&clearInterval(t);break}const o=v.log[n],i=v.gameStartTs+o[o.length-1];if(i>l)break;const a=o.slice();if(a[0]===rt){const t=a[1];to.addPlayer(e,t,i),ho=!0}else if(a[0]===dt){const t=to.getPlayerIdByIndex(e,a[1]);if(!t)throw"[ 2021-05-17 player not found (update player) ]";to.addPlayer(e,t,i),ho=!0}else if(a[0]===ct){const t=to.getPlayerIdByIndex(e,a[1]);if(!t)throw"[ 2021-05-17 player not found (handle input) ]";const n=a[2];to.handleInput(e,t,n,i),ho=!0}v.logPointer=n}v.lastRealTs=n,v.lastGameTs=l,$()}),50)}let X=null;return(e=>{const t=e.fps||60,n=e.slow||1,o=e.update,l=e.render,i=window.requestAnimationFrame,a=1/t,s=n*a;let r,d=0,c=window.performance.now();const u=()=>{for(r=window.performance.now(),d+=Math.min(1,(r-c)/1e3);d>s;)d-=s,o(a);l(d/n),c=r,i(u)};i(u)})({update:()=>{M.createKeyEvents();for(const n of M.consumeAll())if("play"===o){const o=n[0];if(o===ut){const e=n[1],t=n[2];ho=!0,N.move(e,t)}else if(o===ht){if(X&&!to.getFirstOwnedPiece(e,t)){const e={x:n[1],y:n[2]},t=N.worldToViewport(e),o=Math.round(t.x-X.x),l=Math.round(t.y-X.y);ho=!0,N.move(o,l),X=t}}else if(o===wt)Z(n[1]);else if(o===gt){const e={x:n[1],y:n[2]};X=N.worldToViewport(e),K(!0)}else if(o===pt)X=null,K(!1);else if(o===mt){const e={x:n[1],y:n[2]};ho=!0,N.zoom("in",N.worldToViewport(e))}else if(o===yt){const e={x:n[1],y:n[2]};ho=!0,N.zoom("out",N.worldToViewport(e))}else o===bt?i.togglePreview():o===xt&&i.toggleSoundsEnabled();const l=x();to.handleInput(e,t,n,l,(e=>{L()&&s.play()})).length>0&&(ho=!0),Nt.sendClientEvent(n)}else if("replay"===o){const e=n[0];if(e===ut){const e=n[1],t=n[2];ho=!0,N.move(e,t)}else if(e===ht){if(X){const e={x:n[1],y:n[2]},t=N.worldToViewport(e),o=Math.round(t.x-X.x),l=Math.round(t.y-X.y);ho=!0,N.move(o,l),X=t}}else if(e===gt){const e={x:n[1],y:n[2]};X=N.worldToViewport(e)}else if(e===pt)X=null;else if(e===mt){const e={x:n[1],y:n[2]};ho=!0,N.zoom("in",N.worldToViewport(e))}else if(e===yt){const e={x:n[1],y:n[2]};ho=!0,N.zoom("out",N.worldToViewport(e))}else e===bt&&i.togglePreview()}j=!!to.getFinishTs(e),F()&&(O.update(),ho=!0)},render:async()=>{if(!ho)return;const n=x();let l,a,s;window.DEBUG&&pn(0),U.fillStyle=W(),U.fillRect(0,0,w.width,w.height),window.DEBUG&&hn("clear done"),l=N.worldToViewportRaw(T),a=N.worldDimToViewportRaw(_),U.fillStyle="rgba(255, 255, 255, .3)",U.fillRect(l.x,l.y,a.w,a.h),window.DEBUG&&hn("board done");const r=to.getPiecesSortedByZIndex(e);window.DEBUG&&hn("get tiles done"),a=N.worldDimToViewportRaw(E);for(const e of r)(-1===e.owner?go:po)&&(s=B[e.idx],l=N.worldToViewportRaw({x:C+e.pos.x,y:C+e.pos.y}),U.drawImage(s,0,0,s.width,s.height,l.x,l.y,a.w,a.h));window.DEBUG&&hn("tiles done");const d=[];for(const i of to.getActivePlayers(e,n))c=i,("replay"===o||c.id!==t)&&(s=await f(i),l=N.worldToViewport(i),U.drawImage(s,l.x-p,l.y-m),d.push([`${i.name} (${i.points})`,l.x,l.y+h]));var c;U.fillStyle="white",U.textAlign="center";for(const[e,t,o]of d)U.fillText(e,t,o);window.DEBUG&&hn("players done"),i.setActivePlayers(to.getActivePlayers(e,n)),i.setIdlePlayers(to.getIdlePlayers(e,n)),i.setPiecesDone(to.getFinishedPiecesCount(e)),window.DEBUG&&hn("HUD done"),F()&&O.render(),ho=!1}}),{setHotkeys:e=>{M.setHotkeys(e)},onBgChange:e=>{localStorage.setItem("bg_color",e),M.addEvent([ft,e])},onColorChange:e=>{localStorage.setItem("player_color",e),M.addEvent([wt,e])},onNameChange:e=>{localStorage.setItem("player_name",e),M.addEvent([vt,e])},onSoundsEnabledChange:e=>{localStorage.setItem("sound_enabled",e?"1":"0")},replayOnSpeedUp:()=>{v.speedIdx+1{v.speedIdx>=1&&(v.speedIdx--,J())},replayOnPauseToggle:()=>{v.paused=!v.paused,J()},previewImageUrl:G,player:{background:W(),color:q(),name:to.getPlayerName(e,t)||localStorage.getItem("player_name")||"anon",soundsEnabled:L()},disconnect:Nt.disconnect,connect:k}}var yo=e({name:"game",components:{PuzzleStatus:Ye,Scores:Le,SettingsOverlay:Ze,PreviewOverlay:nt,ConnectionOverlay:Mt,HelpOverlay:Ft},data:()=>({activePlayers:[],idlePlayers:[],finished:!1,duration:0,piecesDone:0,piecesTotal:0,overlay:"",connectionState:0,g:{player:{background:"",color:"",name:"",soundsEnabled:!1},previewImageUrl:"",setHotkeys:e=>{},onBgChange:e=>{},onColorChange:e=>{},onNameChange:e=>{},onSoundsEnabledChange:e=>{},disconnect:()=>{},connect:()=>{}}}),async mounted(){this.$route.params.id&&(this.$watch((()=>this.g.player.background),(e=>{this.g.onBgChange(e)})),this.$watch((()=>this.g.player.color),(e=>{this.g.onColorChange(e)})),this.$watch((()=>this.g.player.name),(e=>{this.g.onNameChange(e)})),this.$watch((()=>this.g.player.soundsEnabled),(e=>{this.g.onSoundsEnabledChange(e)})),this.g=await mo(`${this.$route.params.id}`,this.$clientId,this.$config.WS_ADDRESS,"play",this.$el,{setActivePlayers:e=>{this.activePlayers=e},setIdlePlayers:e=>{this.idlePlayers=e},setFinished:e=>{this.finished=e},setDuration:e=>{this.duration=e},setPiecesDone:e=>{this.piecesDone=e},setPiecesTotal:e=>{this.piecesTotal=e},setConnectionState:e=>{this.connectionState=e},togglePreview:()=>{this.toggle("preview",!1)},toggleSoundsEnabled:()=>{this.g.player.soundsEnabled=!this.g.player.soundsEnabled}}))},unmounted(){this.g.disconnect()},methods:{reconnect(){this.g.connect()},toggle(e,t){""===this.overlay?(this.overlay=e,t&&this.g.setHotkeys(!1)):(this.overlay="",t&&this.g.setHotkeys(!0))}}});const fo={id:"game"},wo={class:"menu"},vo={class:"tabs"},bo=s("🧩 Puzzles");yo.render=function(e,l,s,r,d,c){const u=i("settings-overlay"),p=i("preview-overlay"),h=i("help-overlay"),m=i("connection-overlay"),y=i("puzzle-status"),f=i("router-link"),w=i("scores");return a(),t("div",fo,[g(n(u,{onBgclick:l[1]||(l[1]=t=>e.toggle("settings",!0)),modelValue:e.g.player,"onUpdate:modelValue":l[2]||(l[2]=t=>e.g.player=t)},null,8,["modelValue"]),[[b,"settings"===e.overlay]]),g(n(p,{onBgclick:l[3]||(l[3]=t=>e.toggle("preview",!1)),img:e.g.previewImageUrl},null,8,["img"]),[[b,"preview"===e.overlay]]),g(n(h,{onBgclick:l[4]||(l[4]=t=>e.toggle("help",!0))},null,512),[[b,"help"===e.overlay]]),n(m,{connectionState:e.connectionState,onReconnect:e.reconnect},null,8,["connectionState","onReconnect"]),n(y,{finished:e.finished,duration:e.duration,piecesDone:e.piecesDone,piecesTotal:e.piecesTotal},null,8,["finished","duration","piecesDone","piecesTotal"]),n("div",wo,[n("div",vo,[n(f,{class:"opener",to:{name:"index"},target:"_blank"},{default:o((()=>[bo])),_:1}),n("div",{class:"opener",onClick:l[5]||(l[5]=t=>e.toggle("preview",!1))},"πŸ–ΌοΈ Preview"),n("div",{class:"opener",onClick:l[6]||(l[6]=t=>e.toggle("settings",!0))},"πŸ› οΈ Settings"),n("div",{class:"opener",onClick:l[7]||(l[7]=t=>e.toggle("help",!0))},"ℹ️ Help")])]),n(w,{activePlayers:e.activePlayers,idlePlayers:e.idlePlayers},null,8,["activePlayers","idlePlayers"])])};var xo=e({name:"replay",components:{PuzzleStatus:Ye,Scores:Le,SettingsOverlay:Ze,PreviewOverlay:nt,HelpOverlay:Ft},data:()=>({activePlayers:[],idlePlayers:[],finished:!1,duration:0,piecesDone:0,piecesTotal:0,overlay:"",connectionState:0,g:{player:{background:"",color:"",name:"",soundsEnabled:!1},previewImageUrl:"",setHotkeys:e=>{},onBgChange:e=>{},onColorChange:e=>{},onNameChange:e=>{},onSoundsEnabledChange:e=>{},replayOnSpeedUp:()=>{},replayOnSpeedDown:()=>{},replayOnPauseToggle:()=>{},disconnect:()=>{}},replay:{speed:1,paused:!1}}),async mounted(){this.$route.params.id&&(this.$watch((()=>this.g.player.background),(e=>{this.g.onBgChange(e)})),this.$watch((()=>this.g.player.color),(e=>{this.g.onColorChange(e)})),this.$watch((()=>this.g.player.name),(e=>{this.g.onNameChange(e)})),this.$watch((()=>this.g.player.soundsEnabled),(e=>{this.g.onSoundsEnabledChange(e)})),this.g=await mo(`${this.$route.params.id}`,this.$clientId,this.$config.WS_ADDRESS,"replay",this.$el,{setActivePlayers:e=>{this.activePlayers=e},setIdlePlayers:e=>{this.idlePlayers=e},setFinished:e=>{this.finished=e},setDuration:e=>{this.duration=e},setPiecesDone:e=>{this.piecesDone=e},setPiecesTotal:e=>{this.piecesTotal=e},togglePreview:()=>{this.toggle("preview",!1)},setConnectionState:e=>{this.connectionState=e},setReplaySpeed:e=>{this.replay.speed=e},setReplayPaused:e=>{this.replay.paused=e},toggleSoundsEnabled:()=>{this.g.player.soundsEnabled=!this.g.player.soundsEnabled}}))},unmounted(){this.g.disconnect()},methods:{toggle(e,t){""===this.overlay?(this.overlay=e,t&&this.g.setHotkeys(!1)):(this.overlay="",t&&this.g.setHotkeys(!0))}},computed:{replayText(){return"Replay-Speed: "+this.replay.speed+"x"+(this.replay.paused?" Paused":"")}}});const ko={id:"replay"},Co={class:"menu"},Ao={class:"tabs"},So=s("🧩 Puzzles");xo.render=function(e,l,s,d,c,u){const p=i("settings-overlay"),h=i("preview-overlay"),m=i("help-overlay"),y=i("puzzle-status"),f=i("router-link"),w=i("scores");return a(),t("div",ko,[g(n(p,{onBgclick:l[1]||(l[1]=t=>e.toggle("settings",!0)),modelValue:e.g.player,"onUpdate:modelValue":l[2]||(l[2]=t=>e.g.player=t)},null,8,["modelValue"]),[[b,"settings"===e.overlay]]),g(n(h,{onBgclick:l[3]||(l[3]=t=>e.toggle("preview",!1)),img:e.g.previewImageUrl},null,8,["img"]),[[b,"preview"===e.overlay]]),g(n(m,{onBgclick:l[4]||(l[4]=t=>e.toggle("help",!0))},null,512),[[b,"help"===e.overlay]]),n(y,{finished:e.finished,duration:e.duration,piecesDone:e.piecesDone,piecesTotal:e.piecesTotal},{default:o((()=>[n("div",null,[n("div",null,r(e.replayText),1),n("button",{class:"btn",onClick:l[5]||(l[5]=t=>e.g.replayOnSpeedUp())},"⏫"),n("button",{class:"btn",onClick:l[6]||(l[6]=t=>e.g.replayOnSpeedDown())},"⏬"),n("button",{class:"btn",onClick:l[7]||(l[7]=t=>e.g.replayOnPauseToggle())},"⏸️")])])),_:1},8,["finished","duration","piecesDone","piecesTotal"]),n("div",Co,[n("div",Ao,[n(f,{class:"opener",to:{name:"index"},target:"_blank"},{default:o((()=>[So])),_:1}),n("div",{class:"opener",onClick:l[8]||(l[8]=t=>e.toggle("preview",!1))},"πŸ–ΌοΈ Preview"),n("div",{class:"opener",onClick:l[9]||(l[9]=t=>e.toggle("settings",!0))},"πŸ› οΈ Settings"),n("div",{class:"opener",onClick:l[10]||(l[10]=t=>e.toggle("help",!0))},"ℹ️ Help")])]),n(w,{activePlayers:e.activePlayers,idlePlayers:e.idlePlayers},null,8,["activePlayers","idlePlayers"])])},(async()=>{const e=await fetch("/api/conf"),t=await e.json();const n=x({history:k(),routes:[{name:"index",path:"/",component:V},{name:"new-game",path:"/new-game",component:Oe},{name:"game",path:"/g/:id",component:yo},{name:"replay",path:"/replay/:id",component:xo}]});n.beforeEach(((e,t)=>{t.name&&document.documentElement.classList.remove(`view-${String(t.name)}`),document.documentElement.classList.add(`view-${String(e.name)}`)}));const o=C(A);o.config.globalProperties.$config=t,o.config.globalProperties.$clientId=function(){let e=localStorage.getItem("ID");return e||(e=Be.uniqId(),localStorage.setItem("ID",e)),e}(),o.use(n),o.mount("#app")})(); diff --git a/build/public/assets/vendor.b622ee49.js b/build/public/assets/vendor.18cd2d7e.js similarity index 74% rename from build/public/assets/vendor.b622ee49.js rename to build/public/assets/vendor.18cd2d7e.js index 3b5cc43..aafe16c 100644 --- a/build/public/assets/vendor.b622ee49.js +++ b/build/public/assets/vendor.18cd2d7e.js @@ -1,6 +1,6 @@ -function e(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[e.toLowerCase()]:e=>!!n[e]}const t=e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),n=e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function r(e){if(E(e)){const t={};for(let n=0;n{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function i(e){let t="";if(R(e))t=e;else if(E(e))for(let n=0;nc(e,t)))}const u=e=>null==e?"":P(e)?JSON.stringify(e,f,2):String(e),f=(e,t)=>k(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:S(t)?{[`Set(${t.size})`]:[...t.values()]}:!P(t)||E(t)||M(t)?t:String(t),p={},d=[],h=()=>{},m=()=>!1,g=/^on[^a-z]/,v=e=>g.test(e),y=e=>e.startsWith("onUpdate:"),b=Object.assign,_=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},w=Object.prototype.hasOwnProperty,x=(e,t)=>w.call(e,t),E=Array.isArray,k=e=>"[object Map]"===$(e),S=e=>"[object Set]"===$(e),O=e=>e instanceof Date,C=e=>"function"==typeof e,R=e=>"string"==typeof e,A=e=>"symbol"==typeof e,P=e=>null!==e&&"object"==typeof e,F=e=>P(e)&&C(e.then)&&C(e.catch),j=Object.prototype.toString,$=e=>j.call(e),M=e=>"[object Object]"===$(e),I=e=>R(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,T=e(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),U=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},V=/-(\w)/g,N=U((e=>e.replace(V,((e,t)=>t?t.toUpperCase():"")))),L=/\B([A-Z])/g,B=U((e=>e.replace(L,"-$1").toLowerCase())),D=U((e=>e.charAt(0).toUpperCase()+e.slice(1))),q=U((e=>e?`on${D(e)}`:"")),z=(e,t)=>e!==t&&(e==e||t==t),W=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},G=e=>{const t=parseFloat(e);return isNaN(t)?e:t},H=new WeakMap,X=[];let J;const Q=Symbol(""),Y=Symbol("");function Z(e,t=p){(function(e){return e&&!0===e._isEffect})(e)&&(e=e.raw);const n=function(e,t){const n=function(){if(!n.active)return t.scheduler?void 0:e();if(!X.includes(n)){ne(n);try{return oe.push(re),re=!0,X.push(n),J=n,e()}finally{X.pop(),le(),J=X[X.length-1]}}};return n.id=te++,n.allowRecurse=!!t.allowRecurse,n._isEffect=!0,n.active=!0,n.raw=e,n.deps=[],n.options=t,n}(e,t);return t.lazy||n(),n}function ee(e){e.active&&(ne(e),e.options.onStop&&e.options.onStop(),e.active=!1)}let te=0;function ne(e){const{deps:t}=e;if(t.length){for(let n=0;n{e&&e.forEach((e=>{(e!==J||e.allowRecurse)&&i.add(e)}))};if("clear"===t)l.forEach(c);else if("length"===n&&E(e))l.forEach(((e,t)=>{("length"===t||t>=r)&&c(e)}));else switch(void 0!==n&&c(l.get(n)),t){case"add":E(e)?I(n)&&c(l.get("length")):(c(l.get(Q)),k(e)&&c(l.get(Y)));break;case"delete":E(e)||(c(l.get(Q)),k(e)&&c(l.get(Y)));break;case"set":k(e)&&c(l.get(Q))}i.forEach((e=>{e.options.scheduler?e.options.scheduler(e):e()}))}const ae=e("__proto__,__v_isRef,__isVue"),ue=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(A)),fe=ge(),pe=ge(!1,!0),de=ge(!0),he=ge(!0,!0),me={};function ge(e=!1,t=!1){return function(n,r,o){if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_raw"===r&&o===(e?t?Ke:We:t?ze:qe).get(n))return n;const s=E(n);if(!e&&s&&x(me,r))return Reflect.get(me,r,o);const l=Reflect.get(n,r,o);if(A(r)?ue.has(r):ae(r))return l;if(e||ie(n,0,r),t)return l;if(nt(l)){return!s||!I(r)?l.value:l}return P(l)?e?Xe(l):He(l):l}}["includes","indexOf","lastIndexOf"].forEach((e=>{const t=Array.prototype[e];me[e]=function(...e){const n=et(this);for(let t=0,o=this.length;t{const t=Array.prototype[e];me[e]=function(...e){se();const n=t.apply(this,e);return le(),n}}));function ve(e=!1){return function(t,n,r,o){let s=t[n];if(!e&&(r=et(r),s=et(s),!E(t)&&nt(s)&&!nt(r)))return s.value=r,!0;const l=E(t)&&I(n)?Number(n)!0,deleteProperty:(e,t)=>!0},_e=b({},ye,{get:pe,set:ve(!0)});b({},be,{get:he});const we=e=>P(e)?He(e):e,xe=e=>P(e)?Xe(e):e,Ee=e=>e,ke=e=>Reflect.getPrototypeOf(e);function Se(e,t,n=!1,r=!1){const o=et(e=e.__v_raw),s=et(t);t!==s&&!n&&ie(o,0,t),!n&&ie(o,0,s);const{has:l}=ke(o),i=r?Ee:n?xe:we;return l.call(o,t)?i(e.get(t)):l.call(o,s)?i(e.get(s)):void 0}function Oe(e,t=!1){const n=this.__v_raw,r=et(n),o=et(e);return e!==o&&!t&&ie(r,0,e),!t&&ie(r,0,o),e===o?n.has(e):n.has(e)||n.has(o)}function Ce(e,t=!1){return e=e.__v_raw,!t&&ie(et(e),0,Q),Reflect.get(e,"size",e)}function Re(e){e=et(e);const t=et(this);return ke(t).has.call(t,e)||(t.add(e),ce(t,"add",e,e)),this}function Ae(e,t){t=et(t);const n=et(this),{has:r,get:o}=ke(n);let s=r.call(n,e);s||(e=et(e),s=r.call(n,e));const l=o.call(n,e);return n.set(e,t),s?z(t,l)&&ce(n,"set",e,t):ce(n,"add",e,t),this}function Pe(e){const t=et(this),{has:n,get:r}=ke(t);let o=n.call(t,e);o||(e=et(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&ce(t,"delete",e,void 0),s}function Fe(){const e=et(this),t=0!==e.size,n=e.clear();return t&&ce(e,"clear",void 0,void 0),n}function je(e,t){return function(n,r){const o=this,s=o.__v_raw,l=et(s),i=t?Ee:e?xe:we;return!e&&ie(l,0,Q),s.forEach(((e,t)=>n.call(r,i(e),i(t),o)))}}function $e(e,t,n){return function(...r){const o=this.__v_raw,s=et(o),l=k(s),i="entries"===e||e===Symbol.iterator&&l,c="keys"===e&&l,a=o[e](...r),u=n?Ee:t?xe:we;return!t&&ie(s,0,c?Y:Q),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:i?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Me(e){return function(...t){return"delete"!==e&&this}}const Ie={get(e){return Se(this,e)},get size(){return Ce(this)},has:Oe,add:Re,set:Ae,delete:Pe,clear:Fe,forEach:je(!1,!1)},Te={get(e){return Se(this,e,!1,!0)},get size(){return Ce(this)},has:Oe,add:Re,set:Ae,delete:Pe,clear:Fe,forEach:je(!1,!0)},Ue={get(e){return Se(this,e,!0)},get size(){return Ce(this,!0)},has(e){return Oe.call(this,e,!0)},add:Me("add"),set:Me("set"),delete:Me("delete"),clear:Me("clear"),forEach:je(!0,!1)},Ve={get(e){return Se(this,e,!0,!0)},get size(){return Ce(this,!0)},has(e){return Oe.call(this,e,!0)},add:Me("add"),set:Me("set"),delete:Me("delete"),clear:Me("clear"),forEach:je(!0,!0)};function Ne(e,t){const n=t?e?Ve:Te:e?Ue:Ie;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(x(n,r)&&r in t?n:t,r,o)}["keys","values","entries",Symbol.iterator].forEach((e=>{Ie[e]=$e(e,!1,!1),Ue[e]=$e(e,!0,!1),Te[e]=$e(e,!1,!0),Ve[e]=$e(e,!0,!0)}));const Le={get:Ne(!1,!1)},Be={get:Ne(!1,!0)},De={get:Ne(!0,!1)},qe=new WeakMap,ze=new WeakMap,We=new WeakMap,Ke=new WeakMap;function Ge(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>$(e).slice(8,-1))(e))}function He(e){return e&&e.__v_isReadonly?e:Je(e,!1,ye,Le,qe)}function Xe(e){return Je(e,!0,be,De,We)}function Je(e,t,n,r,o){if(!P(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const l=Ge(e);if(0===l)return e;const i=new Proxy(e,2===l?r:n);return o.set(e,i),i}function Qe(e){return Ye(e)?Qe(e.__v_raw):!(!e||!e.__v_isReactive)}function Ye(e){return!(!e||!e.__v_isReadonly)}function Ze(e){return Qe(e)||Ye(e)}function et(e){return e&&et(e.__v_raw)||e}const tt=e=>P(e)?He(e):e;function nt(e){return Boolean(e&&!0===e.__v_isRef)}class rt{constructor(e,t=!1){this._rawValue=e,this._shallow=t,this.__v_isRef=!0,this._value=t?e:tt(e)}get value(){return ie(et(this),0,"value"),this._value}set value(e){z(et(e),this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:tt(e),ce(et(this),"set","value",e))}}function ot(e,t=!1){return nt(e)?e:new rt(e,t)}function st(e){return nt(e)?e.value:e}const lt={get:(e,t,n)=>st(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return nt(o)&&!nt(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function it(e){return Qe(e)?e:new Proxy(e,lt)}class ct{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}class at{constructor(e,t,n){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=Z(e,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,ce(et(this),"set","value"))}}),this.__v_isReadonly=n}get value(){const e=et(this);return e._dirty&&(e._value=this.effect(),e._dirty=!1),ie(e,0,"value"),e._value}set value(e){this._setter(e)}}function ut(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){pt(s,t,n)}return o}function ft(e,t,n,r){if(C(e)){const o=ut(e,t,n,r);return o&&F(o)&&o.catch((e=>{pt(e,t,n)})),o}const o=[];for(let s=0;s>>1;jt(mt[e])-1?mt.splice(t,0,e):mt.push(e),Rt()}}function Rt(){dt||ht||(ht=!0,kt=Et.then($t))}function At(e,t,n,r){E(e)?n.push(...e):t&&t.includes(e,e.allowRecurse?r+1:r)||n.push(e),Rt()}function Pt(e,t=null){if(vt.length){for(St=t,yt=[...new Set(vt)],vt.length=0,bt=0;btjt(e)-jt(t))),xt=0;xtnull==e.id?1/0:e.id;function $t(e){ht=!1,dt=!0,Pt(e),mt.sort(((e,t)=>jt(e)-jt(t)));try{for(gt=0;gte.trim())):t&&(o=n.map(G))}let i,c=r[i=q(t)]||r[i=q(N(t))];!c&&s&&(c=r[i=q(B(t))]),c&&ft(c,e,6,o);const a=r[i+"Once"];if(a){if(e.emitted){if(e.emitted[i])return}else(e.emitted={})[i]=!0;ft(a,e,6,o)}}function It(e,t,n=!1){if(!t.deopt&&void 0!==e.__emits)return e.__emits;const r=e.emits;let o={},s=!1;if(!C(e)){const r=e=>{const n=It(e,t,!0);n&&(s=!0,b(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return r||s?(E(r)?r.forEach((e=>o[e]=null)):b(o,r),e.__emits=o):e.__emits=null}function Tt(e,t){return!(!e||!v(t))&&(t=t.slice(2).replace(/Once$/,""),x(e,t[0].toLowerCase()+t.slice(1))||x(e,B(t))||x(e,t))}let Ut=0;const Vt=e=>Ut+=e;function Nt(e,t,n={},r,o){let s=e[t];Ut++,Qn();const l=s&&Lt(s(n)),i=Zn(Wn,{key:n.key||`_${t}`},l||(r?r():[]),l&&1===e._?64:-2);return!o&&i.scopeId&&(i.slotScopeIds=[i.scopeId+"-s"]),Ut--,i}function Lt(e){return e.some((e=>!er(e)||e.type!==Gn&&!(e.type===Wn&&!Lt(e.children))))?e:null}let Bt=null,Dt=null;function qt(e){const t=Bt;return Bt=e,Dt=e&&e.type.__scopeId||null,t}const zt=e=>Wt;function Wt(e,t=Bt){if(!t)return e;const n=(...n)=>{Ut||Qn(!0);const r=qt(t),o=e(...n);return qt(r),Ut||Yn(),o};return n._c=!0,n}function Kt(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[l],slots:i,attrs:c,emit:a,render:u,renderCache:f,data:p,setupState:d,ctx:h}=e;let m;const g=qt(e);try{let e;if(4&n.shapeFlag){const t=o||r;m=ar(u.call(t,t,f,s,d,p,h)),e=c}else{const n=t;0,m=ar(n.length>1?n(s,{attrs:c,slots:i,emit:a}):n(s,null)),e=t.props?c:Ht(c)}let g=m;if(!1!==t.inheritAttrs&&e){const t=Object.keys(e),{shapeFlag:n}=g;t.length&&(1&n||6&n)&&(l&&t.some(y)&&(e=Xt(e,l)),g=lr(g,e))}n.dirs&&(g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),m=g}catch(v){Xn.length=0,pt(v,e,1),m=sr(Gn)}return qt(g),m}function Gt(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||v(n))&&((t||(t={}))[n]=e[n]);return t},Xt=(e,t)=>{const n={};for(const r in e)y(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Jt(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;o{l=!0;const[n,r]=tn(e,t,!0);b(o,n),r&&s.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!r&&!l)return e.__props=d;if(E(r))for(let i=0;i-1,n[1]=r<0||t-1||x(n,"default"))&&s.push(e)}}}return e.__props=[o,s]}function nn(e){return"$"!==e[0]}function rn(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function on(e,t){return rn(e)===rn(t)}function sn(e,t){return E(t)?t.findIndex((t=>on(t,e))):C(t)&&on(t,e)?0:-1}function ln(e,t,n=Rr,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;se(),Ar(n);const o=ft(t,n,e,r);return Ar(null),le(),o});return r?o.unshift(s):o.push(s),s}}const cn=e=>(t,n=Rr)=>!Fr&&ln(e,t,n),an=cn("bm"),un=cn("m"),fn=cn("bu"),pn=cn("u"),dn=cn("bum"),hn=cn("um"),mn=cn("rtg"),gn=cn("rtc"),vn={};function yn(e,t,n){return bn(e,t,n)}function bn(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:l}=p,i=Rr){let c,a,u=!1;if(nt(e)?(c=()=>e.value,u=!!e._shallow):Qe(e)?(c=()=>e,r=!0):c=E(e)?()=>e.map((e=>nt(e)?e.value:Qe(e)?wn(e):C(e)?ut(e,i,2,[i&&i.proxy]):void 0)):C(e)?t?()=>ut(e,i,2,[i&&i.proxy]):()=>{if(!i||!i.isUnmounted)return a&&a(),ft(e,i,3,[f])}:h,t&&r){const e=c;c=()=>wn(e())}let f=e=>{a=v.options.onStop=()=>{ut(e,i,4)}},d=E(e)?[]:vn;const m=()=>{if(v.active)if(t){const e=v();(r||u||z(e,d))&&(a&&a(),ft(t,i,3,[e,d===vn?void 0:d,f]),d=e)}else v()};let g;m.allowRecurse=!!t,g="sync"===o?m:"post"===o?()=>Un(m,i&&i.suspense):()=>{!i||i.isMounted?function(e){At(e,yt,vt,bt)}(m):m()};const v=Z(c,{lazy:!0,onTrack:s,onTrigger:l,scheduler:g});return Mr(v,i),t?n?m():d=v():"post"===o?Un(v,i&&i.suspense):v(),()=>{ee(v),i&&_(i.effects,v)}}function _n(e,t,n){const r=this.proxy;return bn(R(e)?()=>r[e]:e.bind(r),t.bind(r),n,this)}function wn(e,t=new Set){if(!P(e)||t.has(e))return e;if(t.add(e),nt(e))wn(e.value,t);else if(E(e))for(let n=0;n{wn(e,t)}));else for(const n in e)wn(e[n],t);return e}const xn=e=>e.type.__isKeepAlive;function En(e,t,n=Rr){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}e()});if(ln(t,r,n),n){let e=n.parent;for(;e&&e.parent;)xn(e.parent.vnode)&&kn(r,t,n,e),e=e.parent}}function kn(e,t,n,r){const o=ln(t,e,r,!0);hn((()=>{_(r[t],o)}),n)}const Sn=e=>"_"===e[0]||"$stable"===e,On=e=>E(e)?e.map(ar):[ar(e)],Cn=(e,t,n)=>Wt((e=>On(t(e))),n),Rn=(e,t)=>{const n=e._ctx;for(const r in e){if(Sn(r))continue;const o=e[r];if(C(o))t[r]=Cn(0,o,n);else if(null!=o){const e=On(o);t[r]=()=>e}}},An=(e,t)=>{const n=On(t);e.slots.default=()=>n};function Pn(e,t){if(null===Bt)return e;const n=Bt.proxy,r=e.dirs||(e.dirs=[]);for(let o=0;o(s.has(e)||(e&&C(e.install)?(s.add(e),e.install(i,...t)):C(e)&&(s.add(e),e(i,...t))),i),mixin:e=>(o.mixins.includes(e)||(o.mixins.push(e),(e.props||e.emits)&&(o.deopt=!0)),i),component:(e,t)=>t?(o.components[e]=t,i):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,i):o.directives[e],mount(s,c,a){if(!l){const u=sr(n,r);return u.appContext=o,c&&t?t(u,s):e(u,s,a),l=!0,i._container=s,s.__vue_app__=i,u.component.proxy}},unmount(){l&&(e(null,i._container),delete i._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,i)};return i}}function In(e){return C(e)?{setup:e,name:e.name}:e}const Tn={scheduler:Ct,allowRecurse:!0},Un=function(e,t){t&&t.pendingBranch?E(e)?t.effects.push(...e):t.effects.push(e):At(e,wt,_t,xt)},Vn=(e,t,n,r)=>{if(E(e))return void e.forEach(((e,o)=>Vn(e,t&&(E(t)?t[o]:t),n,r)));let o;if(r){if(r.type.__asyncLoader)return;o=4&r.shapeFlag?r.component.exposed||r.component.proxy:r.el}else o=null;const{i:s,r:l}=e,i=t&&t.r,c=s.refs===p?s.refs={}:s.refs,a=s.setupState;if(null!=i&&i!==l&&(R(i)?(c[i]=null,x(a,i)&&(a[i]=null)):nt(i)&&(i.value=null)),R(l)){const e=()=>{c[l]=o,x(a,l)&&(a[l]=o)};o?(e.id=-1,Un(e,n)):e()}else if(nt(l)){const e=()=>{l.value=o};o?(e.id=-1,Un(e,n)):e()}else C(l)&&ut(l,s,12,[o,c])};function Nn(e){return function(e,t){const{insert:n,remove:r,patchProp:o,forcePatchProp:s,createElement:l,createText:i,createComment:c,setText:a,setElementText:u,parentNode:f,nextSibling:m,setScopeId:g=h,cloneNode:v,insertStaticContent:y}=e,_=(e,t,n,r=null,o=null,s=null,l=!1,i=null,c=!1)=>{e&&!tr(e,t)&&(r=re(e),J(e,o,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:f}=t;switch(a){case Kn:w(e,t,n,r);break;case Gn:E(e,t,n,r);break;case Hn:null==e&&k(t,n,r,l);break;case Wn:I(e,t,n,r,o,s,l,i,c);break;default:1&f?C(e,t,n,r,o,s,l,i,c):6&f?U(e,t,n,r,o,s,l,i,c):(64&f||128&f)&&a.process(e,t,n,r,o,s,l,i,c,ie)}null!=u&&o&&Vn(u,e&&e.ref,s,t)},w=(e,t,r,o)=>{if(null==e)n(t.el=i(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&a(n,t.children)}},E=(e,t,r,o)=>{null==e?n(t.el=c(t.children||""),r,o):t.el=e.el},k=(e,t,n,r)=>{[e.el,e.anchor]=y(e.children,t,n,r)},S=({el:e,anchor:t},r,o)=>{let s;for(;e&&e!==t;)s=m(e),n(e,r,o),e=s;n(t,r,o)},O=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=m(e),r(e),e=n;r(t)},C=(e,t,n,r,o,s,l,i,c)=>{l=l||"svg"===t.type,null==e?R(t,n,r,o,s,l,i,c):j(e,t,o,s,l,i,c)},R=(e,t,r,s,i,c,a,f)=>{let p,d;const{type:h,props:m,shapeFlag:g,transition:y,patchFlag:b,dirs:_}=e;if(e.el&&void 0!==v&&-1===b)p=e.el=v(e.el);else{if(p=e.el=l(e.type,c,m&&m.is,m),8&g?u(p,e.children):16&g&&P(e.children,p,null,s,i,c&&"foreignObject"!==h,a,f||!!e.dynamicChildren),_&&Fn(e,null,s,"created"),m){for(const t in m)T(t)||o(p,t,null,m[t],c,e.children,s,i,ne);(d=m.onVnodeBeforeMount)&&Ln(d,s,e)}A(p,e,e.scopeId,a,s)}_&&Fn(e,null,s,"beforeMount");const w=(!i||i&&!i.pendingBranch)&&y&&!y.persisted;w&&y.beforeEnter(p),n(p,t,r),((d=m&&m.onVnodeMounted)||w||_)&&Un((()=>{d&&Ln(d,s,e),w&&y.enter(p),_&&Fn(e,null,s,"mounted")}),i)},A=(e,t,n,r,o)=>{if(n&&g(e,n),r)for(let s=0;s{for(let a=c;a{const a=t.el=e.el;let{patchFlag:f,dynamicChildren:d,dirs:h}=t;f|=16&e.patchFlag;const m=e.props||p,g=t.props||p;let v;if((v=g.onVnodeBeforeUpdate)&&Ln(v,n,t,e),h&&Fn(t,e,n,"beforeUpdate"),f>0){if(16&f)M(a,t,m,g,n,r,l);else if(2&f&&m.class!==g.class&&o(a,"class",null,g.class,l),4&f&&o(a,"style",m.style,g.style,l),8&f){const i=t.dynamicProps;for(let t=0;t{v&&Ln(v,n,t,e),h&&Fn(t,e,n,"updated")}),r)},$=(e,t,n,r,o,s,l)=>{for(let i=0;i{if(n!==r){for(const a in r){if(T(a))continue;const u=r[a],f=n[a];(u!==f||s&&s(e,a))&&o(e,a,f,u,c,t.children,l,i,ne)}if(n!==p)for(const s in n)T(s)||s in r||o(e,s,n[s],null,c,t.children,l,i,ne)}},I=(e,t,r,o,s,l,c,a,u)=>{const f=t.el=e?e.el:i(""),p=t.anchor=e?e.anchor:i("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;d>0&&(u=!0),m&&(a=a?a.concat(m):m),null==e?(n(f,r,o),n(p,r,o),P(t.children,r,p,s,l,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?($(e.dynamicChildren,h,r,s,l,c,a),(null!=t.key||s&&t===s.subTree)&&Bn(e,t,!0)):z(e,t,r,p,s,l,c,a,u)},U=(e,t,n,r,o,s,l,i,c)=>{t.slotScopeIds=i,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,l,c):V(t,n,r,o,s,l,c):L(e,t,c)},V=(e,t,n,r,o,s,l)=>{const i=e.component=function(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||Or,s={uid:Cr++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:tn(r,o),emitsOptions:It(r,o),emit:null,emitted:null,propsDefaults:p,ctx:p,data:p,props:p,attrs:p,slots:p,refs:p,setupState:p,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=Mt.bind(null,s),s}(e,r,o);if(xn(e)&&(i.ctx.renderer=ie),function(e,t=!1){Fr=t;const{props:n,children:r}=e.vnode,o=Pr(e);Yt(e,n,o,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=t,K(t,"_",n)):Rn(t,e.slots={})}else e.slots={},t&&An(e,t);K(e.slots,nr,1)})(e,r);const s=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,kr);const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?function(e){const t=t=>{e.exposed=it(t)};return{attrs:e.attrs,slots:e.slots,emit:e.emit,expose:t}}(e):null;Rr=e,se();const o=ut(r,e,0,[e.props,n]);if(le(),Rr=null,F(o)){if(t)return o.then((t=>{jr(e,t)})).catch((t=>{pt(t,e,0)}));e.asyncDep=o}else jr(e,o)}else $r(e)}(e,t):void 0;Fr=!1}(i),i.asyncDep){if(o&&o.registerDep(i,D),!e.el){const e=i.subTree=sr(Gn);E(null,e,t,n)}}else D(i,e,t,n,o,s,l)},L=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:s}=e,{props:l,children:i,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!o&&!i||i&&i.$stable)||r!==l&&(r?!l||Jt(r,l,a):!!l);if(1024&c)return!0;if(16&c)return r?Jt(r,l,a):!!l;if(8&c){const e=t.dynamicProps;for(let t=0;tgt&&mt.splice(t,1)}(r.update),r.update()}else t.component=e.component,t.el=e.el,r.vnode=t},D=(e,t,n,r,o,s,l)=>{e.update=Z((function(){if(e.isMounted){let t,{next:n,bu:r,u:i,parent:c,vnode:a}=e,u=n;n?(n.el=a.el,q(e,n,l)):n=a,r&&W(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Ln(t,c,n,a);const p=Kt(e),d=e.subTree;e.subTree=p,_(d,p,f(d.el),re(d),e,o,s),n.el=p.el,null===u&&function({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}(e,p.el),i&&Un(i,o),(t=n.props&&n.props.onVnodeUpdated)&&Un((()=>{Ln(t,c,n,a)}),o)}else{let l;const{el:i,props:c}=t,{bm:a,m:u,parent:f}=e;a&&W(a),(l=c&&c.onVnodeBeforeMount)&&Ln(l,f,t);const p=e.subTree=Kt(e);if(i&&ue?ue(t.el,p,e,o,null):(_(null,p,n,r,e,o,s),t.el=p.el),u&&Un(u,o),l=c&&c.onVnodeMounted){const e=t;Un((()=>{Ln(l,f,e)}),o)}const{a:d}=e;d&&256&t.shapeFlag&&Un(d,o),e.isMounted=!0,t=n=r=null}}),Tn)},q=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:l}}=e,i=et(o),[c]=e.propsOptions;if(!(r||l>0)||16&l){let r;Zt(e,t,o,s);for(const s in i)t&&(x(t,s)||(r=B(s))!==s&&x(t,r))||(c?!n||void 0===n[s]&&void 0===n[r]||(o[s]=en(c,t||p,s,void 0,e)):delete o[s]);if(s!==i)for(const e in s)t&&x(t,e)||delete s[e]}else if(8&l){const n=e.vnode.dynamicProps;for(let r=0;r{const{vnode:r,slots:o}=e;let s=!0,l=p;if(32&r.shapeFlag){const e=t._;e?n&&1===e?s=!1:(b(o,t),n||1!==e||delete o._):(s=!t.$stable,Rn(t,o)),l=t}else t&&(An(e,t),l={default:1});if(s)for(const i in o)Sn(i)||i in l||delete o[i]})(e,t.children,n),se(),Pt(void 0,e.update),le()},z=(e,t,n,r,o,s,l,i,c=!1)=>{const a=e&&e.children,f=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void H(a,p,n,r,o,s,l,i,c);if(256&d)return void G(a,p,n,r,o,s,l,i,c)}8&h?(16&f&&ne(a,o,s),p!==a&&u(n,p)):16&f?16&h?H(a,p,n,r,o,s,l,i,c):ne(a,o,s,!0):(8&f&&u(n,""),16&h&&P(p,n,r,o,s,l,i,c))},G=(e,t,n,r,o,s,l,i,c)=>{t=t||d;const a=(e=e||d).length,u=t.length,f=Math.min(a,u);let p;for(p=0;pu?ne(e,o,s,!0,!1,f):P(t,n,r,o,s,l,i,c,f)},H=(e,t,n,r,o,s,l,i,c)=>{let a=0;const u=t.length;let f=e.length-1,p=u-1;for(;a<=f&&a<=p;){const r=e[a],u=t[a]=c?ur(t[a]):ar(t[a]);if(!tr(r,u))break;_(r,u,n,null,o,s,l,i,c),a++}for(;a<=f&&a<=p;){const r=e[f],a=t[p]=c?ur(t[p]):ar(t[p]);if(!tr(r,a))break;_(r,a,n,null,o,s,l,i,c),f--,p--}if(a>f){if(a<=p){const e=p+1,f=ep)for(;a<=f;)J(e[a],o,s,!0),a++;else{const h=a,m=a,g=new Map;for(a=m;a<=p;a++){const e=t[a]=c?ur(t[a]):ar(t[a]);null!=e.key&&g.set(e.key,a)}let v,y=0;const b=p-m+1;let w=!1,x=0;const E=new Array(b);for(a=0;a=b){J(r,o,s,!0);continue}let u;if(null!=r.key)u=g.get(r.key);else for(v=m;v<=p;v++)if(0===E[v-m]&&tr(r,t[v])){u=v;break}void 0===u?J(r,o,s,!0):(E[u-m]=a+1,u>=x?x=u:w=!0,_(r,t[u],n,null,o,s,l,i,c),y++)}const k=w?function(e){const t=e.slice(),n=[0];let r,o,s,l,i;const c=e.length;for(r=0;r0&&(t[r]=n[s-1]),n[s]=r)}}s=n.length,l=n[s-1];for(;s-- >0;)n[s]=l,l=t[l];return n}(E):d;for(v=k.length-1,a=b-1;a>=0;a--){const e=m+a,f=t[e],p=e+1{const{el:l,type:i,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void X(e.component.subTree,t,r,o);if(128&u)return void e.suspense.move(t,r,o);if(64&u)return void i.move(e,t,r,ie);if(i===Wn){n(l,t,r);for(let e=0;ec.enter(l)),s);else{const{leave:e,delayLeave:o,afterLeave:s}=c,i=()=>n(l,t,r),a=()=>{e(l,(()=>{i(),s&&s()}))};o?o(l,i,a):a()}else n(l,t,r)},J=(e,t,n,r=!1,o=!1)=>{const{type:s,props:l,ref:i,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:f,dirs:p}=e;if(null!=i&&Vn(i,null,n,null),256&u)return void t.ctx.deactivate(e);const d=1&u&&p;let h;if((h=l&&l.onVnodeBeforeUnmount)&&Ln(h,t,e),6&u)te(e.component,n,r);else{if(128&u)return void e.suspense.unmount(n,r);d&&Fn(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,o,ie,r):a&&(s!==Wn||f>0&&64&f)?ne(a,t,n,!1,!0):(s===Wn&&(128&f||256&f)||!o&&16&u)&&ne(c,t,n),r&&Q(e)}((h=l&&l.onVnodeUnmounted)||d)&&Un((()=>{h&&Ln(h,t,e),d&&Fn(e,null,t,"unmounted")}),n)},Q=e=>{const{type:t,el:n,anchor:o,transition:s}=e;if(t===Wn)return void Y(n,o);if(t===Hn)return void O(e);const l=()=>{r(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:r}=s,o=()=>t(n,l);r?r(e.el,l,o):o()}else l()},Y=(e,t)=>{let n;for(;e!==t;)n=m(e),r(e),e=n;r(t)},te=(e,t,n)=>{const{bum:r,effects:o,update:s,subTree:l,um:i}=e;if(r&&W(r),o)for(let c=0;c{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},ne=(e,t,n,r=!1,o=!1,s=0)=>{for(let l=s;l6&e.shapeFlag?re(e.component.subTree):128&e.shapeFlag?e.suspense.next():m(e.anchor||e.el),oe=(e,t,n)=>{null==e?t._vnode&&J(t._vnode,null,null,!0):_(t._vnode||null,e,t,null,null,null,n),Ft(),t._vnode=e},ie={p:_,um:J,m:X,r:Q,mt:V,mc:P,pc:z,pbc:$,n:re,o:e};let ae,ue;t&&([ae,ue]=t(ie));return{render:oe,hydrate:ae,createApp:Mn(oe,ae)}}(e)}function Ln(e,t,n,r=null){ft(e,t,7,[n,r])}function Bn(e,t,n=!1){const r=e.children,o=t.children;if(E(r)&&E(o))for(let s=0;snull!=e?e:null,or=({ref:e})=>null!=e?R(e)||nt(e)||C(e)?{i:Bt,r:e}:e:null,sr=function(e,t=null,n=null,o=0,s=null,l=!1){e&&e!==qn||(e=Gn);if(er(e)){const r=lr(e,t,!0);return n&&fr(r,n),r}c=e,C(c)&&"__vccOpts"in c&&(e=e.__vccOpts);var c;if(t){(Ze(t)||nr in t)&&(t=b({},t));let{class:e,style:n}=t;e&&!R(e)&&(t.class=i(e)),P(n)&&(Ze(n)&&!E(n)&&(n=b({},n)),t.style=r(n))}const a=R(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:P(e)?4:C(e)?2:0,u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&rr(t),ref:t&&or(t),scopeId:Dt,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null};if(fr(u,n),128&a){const{content:e,fallback:t}=function(e){const{shapeFlag:t,children:n}=e;let r,o;return 32&t?(r=Qt(n.default),o=Qt(n.fallback)):(r=Qt(n),o=ar(null)),{content:r,fallback:o}}(u);u.ssContent=e,u.ssFallback=t}!l&&Jn&&(o>0||6&a)&&32!==o&&Jn.push(u);return u};function lr(e,t,n=!1){const{props:o,ref:s,patchFlag:l,children:c}=e,a=t?function(...e){const t=b({},e[0]);for(let n=1;n1)return n&&C(t)?t():t}}let hr=!0;function mr(e,t,n=[],r=[],o=[],s=!1){const{mixins:l,extends:i,data:c,computed:a,methods:u,watch:f,provide:d,inject:m,components:g,directives:v,beforeMount:y,mounted:_,beforeUpdate:w,updated:x,activated:k,deactivated:S,beforeDestroy:O,beforeUnmount:R,destroyed:A,unmounted:F,render:j,renderTracked:$,renderTriggered:M,errorCaptured:I,expose:T}=t,U=e.proxy,V=e.ctx,N=e.appContext.mixins;if(s&&j&&e.render===h&&(e.render=j),s||(hr=!1,gr("beforeCreate","bc",t,e,N),hr=!0,yr(e,N,n,r,o)),i&&mr(e,i,n,r,o,!0),l&&yr(e,l,n,r,o),m)if(E(m))for(let p=0;pbr(e,t,U))),c&&br(e,c,U)),a)for(const p in a){const e=a[p],t=Tr({get:C(e)?e.bind(U,U):C(e.get)?e.get.bind(U,U):h,set:!C(e)&&C(e.set)?e.set.bind(U):h});Object.defineProperty(V,p,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e})}var L;if(f&&r.push(f),!s&&r.length&&r.forEach((e=>{for(const t in e)_r(e[t],V,U,t)})),d&&o.push(d),!s&&o.length&&o.forEach((e=>{const t=C(e)?e.call(U):e;Reflect.ownKeys(t).forEach((e=>{pr(e,t[e])}))})),s&&(g&&b(e.components||(e.components=b({},e.type.components)),g),v&&b(e.directives||(e.directives=b({},e.type.directives)),v)),s||gr("created","c",t,e,N),y&&an(y.bind(U)),_&&un(_.bind(U)),w&&fn(w.bind(U)),x&&pn(x.bind(U)),k&&En(k.bind(U),"a",L),S&&function(e,t){En(e,"da",t)}(S.bind(U)),I&&((e,t=Rr)=>{ln("ec",e,t)})(I.bind(U)),$&&gn($.bind(U)),M&&mn(M.bind(U)),R&&dn(R.bind(U)),F&&hn(F.bind(U)),E(T)&&!s)if(T.length){const t=e.exposed||(e.exposed=it({}));T.forEach((e=>{t[e]=function(e,t){return nt(e[t])?e[t]:new ct(e,t)}(U,e)}))}else e.exposed||(e.exposed=p)}function gr(e,t,n,r,o){for(let s=0;s{let t=e;for(let e=0;en[r];if(R(e)){const n=t[e];C(n)&&yn(o,n)}else if(C(e))yn(o,e.bind(n));else if(P(e))if(E(e))e.forEach((e=>_r(e,t,n,r)));else{const r=C(e.handler)?e.handler.bind(n):t[e.handler];C(r)&&yn(o,r,e)}}function wr(e,t,n){const r=n.appContext.config.optionMergeStrategies,{mixins:o,extends:s}=t;s&&wr(e,s,n),o&&o.forEach((t=>wr(e,t,n)));for(const l in t)r&&x(r,l)?e[l]=r[l](e[l],t[l],n.proxy,l):e[l]=t[l]}const xr=e=>e?Pr(e)?e.exposed?e.exposed:e.proxy:xr(e.parent):null,Er=b(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xr(e.parent),$root:e=>xr(e.root),$emit:e=>e.emit,$options:e=>function(e){const t=e.type,{__merged:n,mixins:r,extends:o}=t;if(n)return n;const s=e.appContext.mixins;if(!s.length&&!r&&!o)return t;const l={};return s.forEach((t=>wr(l,t,e))),wr(l,t,e),t.__merged=l}(e),$forceUpdate:e=>()=>Ct(e.update),$nextTick:e=>Ot.bind(e.proxy),$watch:e=>_n.bind(e)}),kr={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:l,type:i,appContext:c}=e;if("__v_skip"===t)return!0;let a;if("$"!==t[0]){const i=l[t];if(void 0!==i)switch(i){case 0:return r[t];case 1:return o[t];case 3:return n[t];case 2:return s[t]}else{if(r!==p&&x(r,t))return l[t]=0,r[t];if(o!==p&&x(o,t))return l[t]=1,o[t];if((a=e.propsOptions[0])&&x(a,t))return l[t]=2,s[t];if(n!==p&&x(n,t))return l[t]=3,n[t];hr&&(l[t]=4)}}const u=Er[t];let f,d;return u?("$attrs"===t&&ie(e,0,t),u(e)):(f=i.__cssModules)&&(f=f[t])?f:n!==p&&x(n,t)?(l[t]=3,n[t]):(d=c.config.globalProperties,x(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;if(o!==p&&x(o,t))o[t]=n;else if(r!==p&&x(r,t))r[t]=n;else if(x(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},l){let i;return void 0!==n[l]||e!==p&&x(e,l)||t!==p&&x(t,l)||(i=s[0])&&x(i,l)||x(r,l)||x(Er,l)||x(o.config.globalProperties,l)}},Sr=b({},kr,{get(e,t){if(t!==Symbol.unscopables)return kr.get(e,t,e)},has:(e,n)=>"_"!==n[0]&&!t(n)}),Or=jn();let Cr=0;let Rr=null;const Ar=e=>{Rr=e};function Pr(e){return 4&e.vnode.shapeFlag}let Fr=!1;function jr(e,t,n){C(t)?e.render=t:P(t)&&(e.setupState=it(t)),$r(e)}function $r(e,t){const n=e.type;e.render||(e.render=n.render||h,e.render._rc&&(e.withProxy=new Proxy(e.ctx,Sr))),Rr=e,se(),mr(e,n),le(),Rr=null}function Mr(e,t=Rr){t&&(t.effects||(t.effects=[])).push(e)}function Ir(e){return C(e)&&e.displayName||e.name}function Tr(e){const t=function(e){let t,n;return C(e)?(t=e,n=h):(t=e.get,n=e.set),new at(t,n,C(e)||!e.set)}(e);return Mr(t.effect),t}function Ur(e,t,n){const r=arguments.length;return 2===r?P(t)&&!E(t)?er(t)?sr(e,null,[t]):sr(e,t):sr(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&er(n)&&(n=[n]),sr(e,t,n))}function Vr(e,t){let n;if(E(e)||R(e)){n=new Array(e.length);for(let r=0,o=e.length;r{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Br.createElementNS(Lr,e):Br.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Br.createTextNode(e),createComment:e=>Br.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Br.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,r){const o=r?qr||(qr=Br.createElementNS(Lr,"svg")):Dr||(Dr=Br.createElement("div"));o.innerHTML=e;const s=o.firstChild;let l=s,i=l;for(;l;)i=l,zr.insert(l,t,n),l=o.firstChild;return[s,i]}};const Wr=/\s*!important$/;function Kr(e,t,n){if(E(n))n.forEach((n=>Kr(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=Hr[t];if(n)return n;let r=N(t);if("filter"!==r&&r in e)return Hr[t]=r;r=D(r);for(let o=0;odocument.createEvent("Event").timeStamp&&(Jr=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);Qr=!!(e&&Number(e[1])<=53)}let Yr=0;const Zr=Promise.resolve(),eo=()=>{Yr=0};function to(e,t,n,r){e.addEventListener(t,n,r)}function no(e,t,n,r,o=null){const s=e._vei||(e._vei={}),l=s[t];if(r&&l)l.value=r;else{const[n,i]=function(e){let t;if(ro.test(e)){let n;for(t={};n=e.match(ro);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[B(e.slice(2)),t]}(t);if(r){to(e,n,s[t]=function(e,t){const n=e=>{const r=e.timeStamp||Jr();(Qr||r>=n.attached-1)&&ft(function(e,t){if(E(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>Yr||(Zr.then(eo),Yr=Jr()))(),n}(r,o),i)}else l&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,l,i),s[t]=void 0)}}const ro=/(?:Once|Passive|Capture)$/;const oo=/^on[a-z]/;const so=e=>{const t=e.props["onUpdate:modelValue"];return E(t)?e=>W(t,e):t};function lo(e){e.target.composing=!0}function io(e){const t=e.target;t.composing&&(t.composing=!1,function(e,t){const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,"input"))}const co={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e._assign=so(o);const s=r||"number"===e.type;to(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n?r=r.trim():s&&(r=G(r)),e._assign(r)})),n&&to(e,"change",(()=>{e.value=e.value.trim()})),t||(to(e,"compositionstart",lo),to(e,"compositionend",io),to(e,"change",io))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{trim:n,number:r}},o){if(e._assign=so(o),e.composing)return;if(document.activeElement===e){if(n&&e.value.trim()===t)return;if((r||"number"===e.type)&&G(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},ao={created(e,{value:t},n){e.checked=c(t,n.props.value),e._assign=so(n),to(e,"change",(()=>{e._assign(po(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e._assign=so(r),t!==n&&(e.checked=c(t,r.props.value))}},uo={created(e,{value:t,modifiers:{number:n}},r){const o=S(t);to(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?G(po(e)):po(e)));e._assign(e.multiple?o?new Set(t):t:t[0])})),e._assign=so(r)},mounted(e,{value:t}){fo(e,t)},beforeUpdate(e,t,n){e._assign=so(n)},updated(e,{value:t}){fo(e,t)}};function fo(e,t){const n=e.multiple;if(!n||E(t)||S(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(s);else if(c(po(o),t))return void(e.selectedIndex=r)}n||(e.selectedIndex=-1)}}function po(e){return"_value"in e?e._value:e.value}const ho=["ctrl","shift","alt","meta"],mo={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ho.some((n=>e[`${n}Key`]&&!t.includes(n)))},go=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=B(n.key);return t.some((e=>e===r||vo[e]===r))?e(n):void 0},bo={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):_o(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),_o(e,!0),r.enter(e)):r.leave(e,(()=>{_o(e,!1)})):_o(e,t))},beforeUnmount(e,{value:t}){_o(e,t)}};function _o(e,t){e.style.display=t?e._vod:"none"}const wo=b({patchProp:(e,t,r,o,s=!1,l,i,c,a)=>{switch(t){case"class":!function(e,t,n){if(null==t&&(t=""),n)e.setAttribute("class",t);else{const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),e.className=t}}(e,o,s);break;case"style":!function(e,t,n){const r=e.style;if(n)if(R(n)){if(t!==n){const t=r.display;r.cssText=n,"_vod"in e&&(r.display=t)}}else{for(const e in n)Kr(r,e,n[e]);if(t&&!R(t))for(const e in t)null==n[e]&&Kr(r,e,"")}else e.removeAttribute("style")}(e,r,o);break;default:v(t)?y(t)||no(e,t,0,o,i):function(e,t,n,r){if(r)return"innerHTML"===t||!!(t in e&&oo.test(t)&&C(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(oo.test(t)&&R(n))return!1;return t in e}(e,t,o,s)?function(e,t,n,r,o,s,l){if("innerHTML"===t||"textContent"===t)return r&&l(r,o,s),void(e[t]=null==n?"":n);if("value"!==t||"PROGRESS"===e.tagName){if(""===n||null==n){const r=typeof e[t];if(""===n&&"boolean"===r)return void(e[t]=!0);if(null==n&&"string"===r)return e[t]="",void e.removeAttribute(t);if("number"===r)return e[t]=0,void e.removeAttribute(t)}try{e[t]=n}catch(i){}}else{e._value=n;const t=null==n?"":n;e.value!==t&&(e.value=t)}}(e,t,o,l,i,c,a):("true-value"===t?e._trueValue=o:"false-value"===t&&(e._falseValue=o),function(e,t,r,o){if(o&&t.startsWith("xlink:"))null==r?e.removeAttributeNS(Xr,t.slice(6,t.length)):e.setAttributeNS(Xr,t,r);else{const o=n(t);null==r||o&&!1===r?e.removeAttribute(t):e.setAttribute(t,o?"":r)}}(e,t,o,s))}},forcePatchProp:(e,t)=>"value"===t},zr);let xo;const Eo=(...e)=>{const t=(xo||(xo=Nn(wo))).createApp(...e),{mount:n}=t;return t.mount=e=>{const r=function(e){if(R(e)){return document.querySelector(e)}return e} +function e(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[e.toLowerCase()]:e=>!!n[e]}const t=e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),n=e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function r(e){if(E(e)){const t={};for(let n=0;n{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function i(e){let t="";if(R(e))t=e;else if(E(e))for(let n=0;nc(e,t)))}const u=e=>null==e?"":P(e)?JSON.stringify(e,f,2):String(e),f=(e,t)=>k(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:S(t)?{[`Set(${t.size})`]:[...t.values()]}:!P(t)||E(t)||M(t)?t:String(t),p={},d=[],h=()=>{},m=()=>!1,g=/^on[^a-z]/,v=e=>g.test(e),y=e=>e.startsWith("onUpdate:"),b=Object.assign,_=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},w=Object.prototype.hasOwnProperty,x=(e,t)=>w.call(e,t),E=Array.isArray,k=e=>"[object Map]"===$(e),S=e=>"[object Set]"===$(e),O=e=>e instanceof Date,C=e=>"function"==typeof e,R=e=>"string"==typeof e,A=e=>"symbol"==typeof e,P=e=>null!==e&&"object"==typeof e,F=e=>P(e)&&C(e.then)&&C(e.catch),j=Object.prototype.toString,$=e=>j.call(e),M=e=>"[object Object]"===$(e),I=e=>R(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,T=e(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),V=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},U=/-(\w)/g,N=V((e=>e.replace(U,((e,t)=>t?t.toUpperCase():"")))),L=/\B([A-Z])/g,B=V((e=>e.replace(L,"-$1").toLowerCase())),D=V((e=>e.charAt(0).toUpperCase()+e.slice(1))),q=V((e=>e?`on${D(e)}`:"")),z=(e,t)=>e!==t&&(e==e||t==t),W=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},G=e=>{const t=parseFloat(e);return isNaN(t)?e:t},H=new WeakMap,X=[];let J;const Q=Symbol(""),Y=Symbol("");function Z(e,t=p){(function(e){return e&&!0===e._isEffect})(e)&&(e=e.raw);const n=function(e,t){const n=function(){if(!n.active)return t.scheduler?void 0:e();if(!X.includes(n)){ne(n);try{return oe.push(re),re=!0,X.push(n),J=n,e()}finally{X.pop(),le(),J=X[X.length-1]}}};return n.id=te++,n.allowRecurse=!!t.allowRecurse,n._isEffect=!0,n.active=!0,n.raw=e,n.deps=[],n.options=t,n}(e,t);return t.lazy||n(),n}function ee(e){e.active&&(ne(e),e.options.onStop&&e.options.onStop(),e.active=!1)}let te=0;function ne(e){const{deps:t}=e;if(t.length){for(let n=0;n{e&&e.forEach((e=>{(e!==J||e.allowRecurse)&&i.add(e)}))};if("clear"===t)l.forEach(c);else if("length"===n&&E(e))l.forEach(((e,t)=>{("length"===t||t>=r)&&c(e)}));else switch(void 0!==n&&c(l.get(n)),t){case"add":E(e)?I(n)&&c(l.get("length")):(c(l.get(Q)),k(e)&&c(l.get(Y)));break;case"delete":E(e)||(c(l.get(Q)),k(e)&&c(l.get(Y)));break;case"set":k(e)&&c(l.get(Q))}i.forEach((e=>{e.options.scheduler?e.options.scheduler(e):e()}))}const ae=e("__proto__,__v_isRef,__isVue"),ue=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(A)),fe=ge(),pe=ge(!1,!0),de=ge(!0),he=ge(!0,!0),me={};function ge(e=!1,t=!1){return function(n,r,o){if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_raw"===r&&o===(e?t?Ke:We:t?ze:qe).get(n))return n;const s=E(n);if(!e&&s&&x(me,r))return Reflect.get(me,r,o);const l=Reflect.get(n,r,o);if(A(r)?ue.has(r):ae(r))return l;if(e||ie(n,0,r),t)return l;if(nt(l)){return!s||!I(r)?l.value:l}return P(l)?e?Xe(l):He(l):l}}["includes","indexOf","lastIndexOf"].forEach((e=>{const t=Array.prototype[e];me[e]=function(...e){const n=et(this);for(let t=0,o=this.length;t{const t=Array.prototype[e];me[e]=function(...e){se();const n=t.apply(this,e);return le(),n}}));function ve(e=!1){return function(t,n,r,o){let s=t[n];if(!e&&(r=et(r),s=et(s),!E(t)&&nt(s)&&!nt(r)))return s.value=r,!0;const l=E(t)&&I(n)?Number(n)!0,deleteProperty:(e,t)=>!0},_e=b({},ye,{get:pe,set:ve(!0)});b({},be,{get:he});const we=e=>P(e)?He(e):e,xe=e=>P(e)?Xe(e):e,Ee=e=>e,ke=e=>Reflect.getPrototypeOf(e);function Se(e,t,n=!1,r=!1){const o=et(e=e.__v_raw),s=et(t);t!==s&&!n&&ie(o,0,t),!n&&ie(o,0,s);const{has:l}=ke(o),i=r?Ee:n?xe:we;return l.call(o,t)?i(e.get(t)):l.call(o,s)?i(e.get(s)):void 0}function Oe(e,t=!1){const n=this.__v_raw,r=et(n),o=et(e);return e!==o&&!t&&ie(r,0,e),!t&&ie(r,0,o),e===o?n.has(e):n.has(e)||n.has(o)}function Ce(e,t=!1){return e=e.__v_raw,!t&&ie(et(e),0,Q),Reflect.get(e,"size",e)}function Re(e){e=et(e);const t=et(this);return ke(t).has.call(t,e)||(t.add(e),ce(t,"add",e,e)),this}function Ae(e,t){t=et(t);const n=et(this),{has:r,get:o}=ke(n);let s=r.call(n,e);s||(e=et(e),s=r.call(n,e));const l=o.call(n,e);return n.set(e,t),s?z(t,l)&&ce(n,"set",e,t):ce(n,"add",e,t),this}function Pe(e){const t=et(this),{has:n,get:r}=ke(t);let o=n.call(t,e);o||(e=et(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&ce(t,"delete",e,void 0),s}function Fe(){const e=et(this),t=0!==e.size,n=e.clear();return t&&ce(e,"clear",void 0,void 0),n}function je(e,t){return function(n,r){const o=this,s=o.__v_raw,l=et(s),i=t?Ee:e?xe:we;return!e&&ie(l,0,Q),s.forEach(((e,t)=>n.call(r,i(e),i(t),o)))}}function $e(e,t,n){return function(...r){const o=this.__v_raw,s=et(o),l=k(s),i="entries"===e||e===Symbol.iterator&&l,c="keys"===e&&l,a=o[e](...r),u=n?Ee:t?xe:we;return!t&&ie(s,0,c?Y:Q),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:i?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Me(e){return function(...t){return"delete"!==e&&this}}const Ie={get(e){return Se(this,e)},get size(){return Ce(this)},has:Oe,add:Re,set:Ae,delete:Pe,clear:Fe,forEach:je(!1,!1)},Te={get(e){return Se(this,e,!1,!0)},get size(){return Ce(this)},has:Oe,add:Re,set:Ae,delete:Pe,clear:Fe,forEach:je(!1,!0)},Ve={get(e){return Se(this,e,!0)},get size(){return Ce(this,!0)},has(e){return Oe.call(this,e,!0)},add:Me("add"),set:Me("set"),delete:Me("delete"),clear:Me("clear"),forEach:je(!0,!1)},Ue={get(e){return Se(this,e,!0,!0)},get size(){return Ce(this,!0)},has(e){return Oe.call(this,e,!0)},add:Me("add"),set:Me("set"),delete:Me("delete"),clear:Me("clear"),forEach:je(!0,!0)};function Ne(e,t){const n=t?e?Ue:Te:e?Ve:Ie;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(x(n,r)&&r in t?n:t,r,o)}["keys","values","entries",Symbol.iterator].forEach((e=>{Ie[e]=$e(e,!1,!1),Ve[e]=$e(e,!0,!1),Te[e]=$e(e,!1,!0),Ue[e]=$e(e,!0,!0)}));const Le={get:Ne(!1,!1)},Be={get:Ne(!1,!0)},De={get:Ne(!0,!1)},qe=new WeakMap,ze=new WeakMap,We=new WeakMap,Ke=new WeakMap;function Ge(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>$(e).slice(8,-1))(e))}function He(e){return e&&e.__v_isReadonly?e:Je(e,!1,ye,Le,qe)}function Xe(e){return Je(e,!0,be,De,We)}function Je(e,t,n,r,o){if(!P(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const l=Ge(e);if(0===l)return e;const i=new Proxy(e,2===l?r:n);return o.set(e,i),i}function Qe(e){return Ye(e)?Qe(e.__v_raw):!(!e||!e.__v_isReactive)}function Ye(e){return!(!e||!e.__v_isReadonly)}function Ze(e){return Qe(e)||Ye(e)}function et(e){return e&&et(e.__v_raw)||e}const tt=e=>P(e)?He(e):e;function nt(e){return Boolean(e&&!0===e.__v_isRef)}class rt{constructor(e,t=!1){this._rawValue=e,this._shallow=t,this.__v_isRef=!0,this._value=t?e:tt(e)}get value(){return ie(et(this),0,"value"),this._value}set value(e){z(et(e),this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:tt(e),ce(et(this),"set","value",e))}}function ot(e,t=!1){return nt(e)?e:new rt(e,t)}function st(e){return nt(e)?e.value:e}const lt={get:(e,t,n)=>st(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return nt(o)&&!nt(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function it(e){return Qe(e)?e:new Proxy(e,lt)}class ct{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}class at{constructor(e,t,n){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=Z(e,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,ce(et(this),"set","value"))}}),this.__v_isReadonly=n}get value(){const e=et(this);return e._dirty&&(e._value=this.effect(),e._dirty=!1),ie(e,0,"value"),e._value}set value(e){this._setter(e)}}function ut(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){pt(s,t,n)}return o}function ft(e,t,n,r){if(C(e)){const o=ut(e,t,n,r);return o&&F(o)&&o.catch((e=>{pt(e,t,n)})),o}const o=[];for(let s=0;s>>1;jt(mt[e])-1?mt.splice(t,0,e):mt.push(e),Rt()}}function Rt(){dt||ht||(ht=!0,kt=Et.then($t))}function At(e,t,n,r){E(e)?n.push(...e):t&&t.includes(e,e.allowRecurse?r+1:r)||n.push(e),Rt()}function Pt(e,t=null){if(vt.length){for(St=t,yt=[...new Set(vt)],vt.length=0,bt=0;btjt(e)-jt(t))),xt=0;xtnull==e.id?1/0:e.id;function $t(e){ht=!1,dt=!0,Pt(e),mt.sort(((e,t)=>jt(e)-jt(t)));try{for(gt=0;gte.trim())):t&&(o=n.map(G))}let i,c=r[i=q(t)]||r[i=q(N(t))];!c&&s&&(c=r[i=q(B(t))]),c&&ft(c,e,6,o);const a=r[i+"Once"];if(a){if(e.emitted){if(e.emitted[i])return}else(e.emitted={})[i]=!0;ft(a,e,6,o)}}function It(e,t,n=!1){if(!t.deopt&&void 0!==e.__emits)return e.__emits;const r=e.emits;let o={},s=!1;if(!C(e)){const r=e=>{const n=It(e,t,!0);n&&(s=!0,b(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return r||s?(E(r)?r.forEach((e=>o[e]=null)):b(o,r),e.__emits=o):e.__emits=null}function Tt(e,t){return!(!e||!v(t))&&(t=t.slice(2).replace(/Once$/,""),x(e,t[0].toLowerCase()+t.slice(1))||x(e,B(t))||x(e,t))}let Vt=0;const Ut=e=>Vt+=e;function Nt(e,t,n={},r,o){let s=e[t];Vt++,Qn();const l=s&&Lt(s(n)),i=Zn(Wn,{key:n.key||`_${t}`},l||(r?r():[]),l&&1===e._?64:-2);return!o&&i.scopeId&&(i.slotScopeIds=[i.scopeId+"-s"]),Vt--,i}function Lt(e){return e.some((e=>!er(e)||e.type!==Gn&&!(e.type===Wn&&!Lt(e.children))))?e:null}let Bt=null,Dt=null;function qt(e){const t=Bt;return Bt=e,Dt=e&&e.type.__scopeId||null,t}const zt=e=>Wt;function Wt(e,t=Bt){if(!t)return e;const n=(...n)=>{Vt||Qn(!0);const r=qt(t),o=e(...n);return qt(r),Vt||Yn(),o};return n._c=!0,n}function Kt(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[l],slots:i,attrs:c,emit:a,render:u,renderCache:f,data:p,setupState:d,ctx:h}=e;let m;const g=qt(e);try{let e;if(4&n.shapeFlag){const t=o||r;m=ar(u.call(t,t,f,s,d,p,h)),e=c}else{const n=t;0,m=ar(n.length>1?n(s,{attrs:c,slots:i,emit:a}):n(s,null)),e=t.props?c:Ht(c)}let g=m;if(!1!==t.inheritAttrs&&e){const t=Object.keys(e),{shapeFlag:n}=g;t.length&&(1&n||6&n)&&(l&&t.some(y)&&(e=Xt(e,l)),g=lr(g,e))}n.dirs&&(g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),m=g}catch(v){Xn.length=0,pt(v,e,1),m=sr(Gn)}return qt(g),m}function Gt(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||v(n))&&((t||(t={}))[n]=e[n]);return t},Xt=(e,t)=>{const n={};for(const r in e)y(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Jt(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;o{l=!0;const[n,r]=tn(e,t,!0);b(o,n),r&&s.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!r&&!l)return e.__props=d;if(E(r))for(let i=0;i-1,n[1]=r<0||t-1||x(n,"default"))&&s.push(e)}}}return e.__props=[o,s]}function nn(e){return"$"!==e[0]}function rn(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function on(e,t){return rn(e)===rn(t)}function sn(e,t){return E(t)?t.findIndex((t=>on(t,e))):C(t)&&on(t,e)?0:-1}function ln(e,t,n=Rr,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;se(),Ar(n);const o=ft(t,n,e,r);return Ar(null),le(),o});return r?o.unshift(s):o.push(s),s}}const cn=e=>(t,n=Rr)=>!Fr&&ln(e,t,n),an=cn("bm"),un=cn("m"),fn=cn("bu"),pn=cn("u"),dn=cn("bum"),hn=cn("um"),mn=cn("rtg"),gn=cn("rtc"),vn={};function yn(e,t,n){return bn(e,t,n)}function bn(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:l}=p,i=Rr){let c,a,u=!1;if(nt(e)?(c=()=>e.value,u=!!e._shallow):Qe(e)?(c=()=>e,r=!0):c=E(e)?()=>e.map((e=>nt(e)?e.value:Qe(e)?wn(e):C(e)?ut(e,i,2,[i&&i.proxy]):void 0)):C(e)?t?()=>ut(e,i,2,[i&&i.proxy]):()=>{if(!i||!i.isUnmounted)return a&&a(),ft(e,i,3,[f])}:h,t&&r){const e=c;c=()=>wn(e())}let f=e=>{a=v.options.onStop=()=>{ut(e,i,4)}},d=E(e)?[]:vn;const m=()=>{if(v.active)if(t){const e=v();(r||u||z(e,d))&&(a&&a(),ft(t,i,3,[e,d===vn?void 0:d,f]),d=e)}else v()};let g;m.allowRecurse=!!t,g="sync"===o?m:"post"===o?()=>Vn(m,i&&i.suspense):()=>{!i||i.isMounted?function(e){At(e,yt,vt,bt)}(m):m()};const v=Z(c,{lazy:!0,onTrack:s,onTrigger:l,scheduler:g});return Mr(v,i),t?n?m():d=v():"post"===o?Vn(v,i&&i.suspense):v(),()=>{ee(v),i&&_(i.effects,v)}}function _n(e,t,n){const r=this.proxy;return bn(R(e)?()=>r[e]:e.bind(r),t.bind(r),n,this)}function wn(e,t=new Set){if(!P(e)||t.has(e))return e;if(t.add(e),nt(e))wn(e.value,t);else if(E(e))for(let n=0;n{wn(e,t)}));else for(const n in e)wn(e[n],t);return e}const xn=e=>e.type.__isKeepAlive;function En(e,t,n=Rr){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}e()});if(ln(t,r,n),n){let e=n.parent;for(;e&&e.parent;)xn(e.parent.vnode)&&kn(r,t,n,e),e=e.parent}}function kn(e,t,n,r){const o=ln(t,e,r,!0);hn((()=>{_(r[t],o)}),n)}const Sn=e=>"_"===e[0]||"$stable"===e,On=e=>E(e)?e.map(ar):[ar(e)],Cn=(e,t,n)=>Wt((e=>On(t(e))),n),Rn=(e,t)=>{const n=e._ctx;for(const r in e){if(Sn(r))continue;const o=e[r];if(C(o))t[r]=Cn(0,o,n);else if(null!=o){const e=On(o);t[r]=()=>e}}},An=(e,t)=>{const n=On(t);e.slots.default=()=>n};function Pn(e,t){if(null===Bt)return e;const n=Bt.proxy,r=e.dirs||(e.dirs=[]);for(let o=0;o(s.has(e)||(e&&C(e.install)?(s.add(e),e.install(i,...t)):C(e)&&(s.add(e),e(i,...t))),i),mixin:e=>(o.mixins.includes(e)||(o.mixins.push(e),(e.props||e.emits)&&(o.deopt=!0)),i),component:(e,t)=>t?(o.components[e]=t,i):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,i):o.directives[e],mount(s,c,a){if(!l){const u=sr(n,r);return u.appContext=o,c&&t?t(u,s):e(u,s,a),l=!0,i._container=s,s.__vue_app__=i,u.component.proxy}},unmount(){l&&(e(null,i._container),delete i._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,i)};return i}}function In(e){return C(e)?{setup:e,name:e.name}:e}const Tn={scheduler:Ct,allowRecurse:!0},Vn=function(e,t){t&&t.pendingBranch?E(e)?t.effects.push(...e):t.effects.push(e):At(e,wt,_t,xt)},Un=(e,t,n,r)=>{if(E(e))return void e.forEach(((e,o)=>Un(e,t&&(E(t)?t[o]:t),n,r)));let o;if(r){if(r.type.__asyncLoader)return;o=4&r.shapeFlag?r.component.exposed||r.component.proxy:r.el}else o=null;const{i:s,r:l}=e,i=t&&t.r,c=s.refs===p?s.refs={}:s.refs,a=s.setupState;if(null!=i&&i!==l&&(R(i)?(c[i]=null,x(a,i)&&(a[i]=null)):nt(i)&&(i.value=null)),R(l)){const e=()=>{c[l]=o,x(a,l)&&(a[l]=o)};o?(e.id=-1,Vn(e,n)):e()}else if(nt(l)){const e=()=>{l.value=o};o?(e.id=-1,Vn(e,n)):e()}else C(l)&&ut(l,s,12,[o,c])};function Nn(e){return function(e,t){const{insert:n,remove:r,patchProp:o,forcePatchProp:s,createElement:l,createText:i,createComment:c,setText:a,setElementText:u,parentNode:f,nextSibling:m,setScopeId:g=h,cloneNode:v,insertStaticContent:y}=e,_=(e,t,n,r=null,o=null,s=null,l=!1,i=null,c=!1)=>{e&&!tr(e,t)&&(r=re(e),J(e,o,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:f}=t;switch(a){case Kn:w(e,t,n,r);break;case Gn:E(e,t,n,r);break;case Hn:null==e&&k(t,n,r,l);break;case Wn:I(e,t,n,r,o,s,l,i,c);break;default:1&f?C(e,t,n,r,o,s,l,i,c):6&f?V(e,t,n,r,o,s,l,i,c):(64&f||128&f)&&a.process(e,t,n,r,o,s,l,i,c,ie)}null!=u&&o&&Un(u,e&&e.ref,s,t)},w=(e,t,r,o)=>{if(null==e)n(t.el=i(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&a(n,t.children)}},E=(e,t,r,o)=>{null==e?n(t.el=c(t.children||""),r,o):t.el=e.el},k=(e,t,n,r)=>{[e.el,e.anchor]=y(e.children,t,n,r)},S=({el:e,anchor:t},r,o)=>{let s;for(;e&&e!==t;)s=m(e),n(e,r,o),e=s;n(t,r,o)},O=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=m(e),r(e),e=n;r(t)},C=(e,t,n,r,o,s,l,i,c)=>{l=l||"svg"===t.type,null==e?R(t,n,r,o,s,l,i,c):j(e,t,o,s,l,i,c)},R=(e,t,r,s,i,c,a,f)=>{let p,d;const{type:h,props:m,shapeFlag:g,transition:y,patchFlag:b,dirs:_}=e;if(e.el&&void 0!==v&&-1===b)p=e.el=v(e.el);else{if(p=e.el=l(e.type,c,m&&m.is,m),8&g?u(p,e.children):16&g&&P(e.children,p,null,s,i,c&&"foreignObject"!==h,a,f||!!e.dynamicChildren),_&&Fn(e,null,s,"created"),m){for(const t in m)T(t)||o(p,t,null,m[t],c,e.children,s,i,ne);(d=m.onVnodeBeforeMount)&&Ln(d,s,e)}A(p,e,e.scopeId,a,s)}_&&Fn(e,null,s,"beforeMount");const w=(!i||i&&!i.pendingBranch)&&y&&!y.persisted;w&&y.beforeEnter(p),n(p,t,r),((d=m&&m.onVnodeMounted)||w||_)&&Vn((()=>{d&&Ln(d,s,e),w&&y.enter(p),_&&Fn(e,null,s,"mounted")}),i)},A=(e,t,n,r,o)=>{if(n&&g(e,n),r)for(let s=0;s{for(let a=c;a{const a=t.el=e.el;let{patchFlag:f,dynamicChildren:d,dirs:h}=t;f|=16&e.patchFlag;const m=e.props||p,g=t.props||p;let v;if((v=g.onVnodeBeforeUpdate)&&Ln(v,n,t,e),h&&Fn(t,e,n,"beforeUpdate"),f>0){if(16&f)M(a,t,m,g,n,r,l);else if(2&f&&m.class!==g.class&&o(a,"class",null,g.class,l),4&f&&o(a,"style",m.style,g.style,l),8&f){const i=t.dynamicProps;for(let t=0;t{v&&Ln(v,n,t,e),h&&Fn(t,e,n,"updated")}),r)},$=(e,t,n,r,o,s,l)=>{for(let i=0;i{if(n!==r){for(const a in r){if(T(a))continue;const u=r[a],f=n[a];(u!==f||s&&s(e,a))&&o(e,a,f,u,c,t.children,l,i,ne)}if(n!==p)for(const s in n)T(s)||s in r||o(e,s,n[s],null,c,t.children,l,i,ne)}},I=(e,t,r,o,s,l,c,a,u)=>{const f=t.el=e?e.el:i(""),p=t.anchor=e?e.anchor:i("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;d>0&&(u=!0),m&&(a=a?a.concat(m):m),null==e?(n(f,r,o),n(p,r,o),P(t.children,r,p,s,l,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?($(e.dynamicChildren,h,r,s,l,c,a),(null!=t.key||s&&t===s.subTree)&&Bn(e,t,!0)):z(e,t,r,p,s,l,c,a,u)},V=(e,t,n,r,o,s,l,i,c)=>{t.slotScopeIds=i,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,l,c):U(t,n,r,o,s,l,c):L(e,t,c)},U=(e,t,n,r,o,s,l)=>{const i=e.component=function(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||Or,s={uid:Cr++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:tn(r,o),emitsOptions:It(r,o),emit:null,emitted:null,propsDefaults:p,ctx:p,data:p,props:p,attrs:p,slots:p,refs:p,setupState:p,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=Mt.bind(null,s),s}(e,r,o);if(xn(e)&&(i.ctx.renderer=ie),function(e,t=!1){Fr=t;const{props:n,children:r}=e.vnode,o=Pr(e);Yt(e,n,o,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=t,K(t,"_",n)):Rn(t,e.slots={})}else e.slots={},t&&An(e,t);K(e.slots,nr,1)})(e,r);const s=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,kr);const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?function(e){const t=t=>{e.exposed=it(t)};return{attrs:e.attrs,slots:e.slots,emit:e.emit,expose:t}}(e):null;Rr=e,se();const o=ut(r,e,0,[e.props,n]);if(le(),Rr=null,F(o)){if(t)return o.then((t=>{jr(e,t)})).catch((t=>{pt(t,e,0)}));e.asyncDep=o}else jr(e,o)}else $r(e)}(e,t):void 0;Fr=!1}(i),i.asyncDep){if(o&&o.registerDep(i,D),!e.el){const e=i.subTree=sr(Gn);E(null,e,t,n)}}else D(i,e,t,n,o,s,l)},L=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:s}=e,{props:l,children:i,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!o&&!i||i&&i.$stable)||r!==l&&(r?!l||Jt(r,l,a):!!l);if(1024&c)return!0;if(16&c)return r?Jt(r,l,a):!!l;if(8&c){const e=t.dynamicProps;for(let t=0;tgt&&mt.splice(t,1)}(r.update),r.update()}else t.component=e.component,t.el=e.el,r.vnode=t},D=(e,t,n,r,o,s,l)=>{e.update=Z((function(){if(e.isMounted){let t,{next:n,bu:r,u:i,parent:c,vnode:a}=e,u=n;n?(n.el=a.el,q(e,n,l)):n=a,r&&W(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Ln(t,c,n,a);const p=Kt(e),d=e.subTree;e.subTree=p,_(d,p,f(d.el),re(d),e,o,s),n.el=p.el,null===u&&function({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}(e,p.el),i&&Vn(i,o),(t=n.props&&n.props.onVnodeUpdated)&&Vn((()=>{Ln(t,c,n,a)}),o)}else{let l;const{el:i,props:c}=t,{bm:a,m:u,parent:f}=e;a&&W(a),(l=c&&c.onVnodeBeforeMount)&&Ln(l,f,t);const p=e.subTree=Kt(e);if(i&&ue?ue(t.el,p,e,o,null):(_(null,p,n,r,e,o,s),t.el=p.el),u&&Vn(u,o),l=c&&c.onVnodeMounted){const e=t;Vn((()=>{Ln(l,f,e)}),o)}const{a:d}=e;d&&256&t.shapeFlag&&Vn(d,o),e.isMounted=!0,t=n=r=null}}),Tn)},q=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:l}}=e,i=et(o),[c]=e.propsOptions;if(!(r||l>0)||16&l){let r;Zt(e,t,o,s);for(const s in i)t&&(x(t,s)||(r=B(s))!==s&&x(t,r))||(c?!n||void 0===n[s]&&void 0===n[r]||(o[s]=en(c,t||p,s,void 0,e)):delete o[s]);if(s!==i)for(const e in s)t&&x(t,e)||delete s[e]}else if(8&l){const n=e.vnode.dynamicProps;for(let r=0;r{const{vnode:r,slots:o}=e;let s=!0,l=p;if(32&r.shapeFlag){const e=t._;e?n&&1===e?s=!1:(b(o,t),n||1!==e||delete o._):(s=!t.$stable,Rn(t,o)),l=t}else t&&(An(e,t),l={default:1});if(s)for(const i in o)Sn(i)||i in l||delete o[i]})(e,t.children,n),se(),Pt(void 0,e.update),le()},z=(e,t,n,r,o,s,l,i,c=!1)=>{const a=e&&e.children,f=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void H(a,p,n,r,o,s,l,i,c);if(256&d)return void G(a,p,n,r,o,s,l,i,c)}8&h?(16&f&&ne(a,o,s),p!==a&&u(n,p)):16&f?16&h?H(a,p,n,r,o,s,l,i,c):ne(a,o,s,!0):(8&f&&u(n,""),16&h&&P(p,n,r,o,s,l,i,c))},G=(e,t,n,r,o,s,l,i,c)=>{t=t||d;const a=(e=e||d).length,u=t.length,f=Math.min(a,u);let p;for(p=0;pu?ne(e,o,s,!0,!1,f):P(t,n,r,o,s,l,i,c,f)},H=(e,t,n,r,o,s,l,i,c)=>{let a=0;const u=t.length;let f=e.length-1,p=u-1;for(;a<=f&&a<=p;){const r=e[a],u=t[a]=c?ur(t[a]):ar(t[a]);if(!tr(r,u))break;_(r,u,n,null,o,s,l,i,c),a++}for(;a<=f&&a<=p;){const r=e[f],a=t[p]=c?ur(t[p]):ar(t[p]);if(!tr(r,a))break;_(r,a,n,null,o,s,l,i,c),f--,p--}if(a>f){if(a<=p){const e=p+1,f=ep)for(;a<=f;)J(e[a],o,s,!0),a++;else{const h=a,m=a,g=new Map;for(a=m;a<=p;a++){const e=t[a]=c?ur(t[a]):ar(t[a]);null!=e.key&&g.set(e.key,a)}let v,y=0;const b=p-m+1;let w=!1,x=0;const E=new Array(b);for(a=0;a=b){J(r,o,s,!0);continue}let u;if(null!=r.key)u=g.get(r.key);else for(v=m;v<=p;v++)if(0===E[v-m]&&tr(r,t[v])){u=v;break}void 0===u?J(r,o,s,!0):(E[u-m]=a+1,u>=x?x=u:w=!0,_(r,t[u],n,null,o,s,l,i,c),y++)}const k=w?function(e){const t=e.slice(),n=[0];let r,o,s,l,i;const c=e.length;for(r=0;r0&&(t[r]=n[s-1]),n[s]=r)}}s=n.length,l=n[s-1];for(;s-- >0;)n[s]=l,l=t[l];return n}(E):d;for(v=k.length-1,a=b-1;a>=0;a--){const e=m+a,f=t[e],p=e+1{const{el:l,type:i,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void X(e.component.subTree,t,r,o);if(128&u)return void e.suspense.move(t,r,o);if(64&u)return void i.move(e,t,r,ie);if(i===Wn){n(l,t,r);for(let e=0;ec.enter(l)),s);else{const{leave:e,delayLeave:o,afterLeave:s}=c,i=()=>n(l,t,r),a=()=>{e(l,(()=>{i(),s&&s()}))};o?o(l,i,a):a()}else n(l,t,r)},J=(e,t,n,r=!1,o=!1)=>{const{type:s,props:l,ref:i,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:f,dirs:p}=e;if(null!=i&&Un(i,null,n,null),256&u)return void t.ctx.deactivate(e);const d=1&u&&p;let h;if((h=l&&l.onVnodeBeforeUnmount)&&Ln(h,t,e),6&u)te(e.component,n,r);else{if(128&u)return void e.suspense.unmount(n,r);d&&Fn(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,o,ie,r):a&&(s!==Wn||f>0&&64&f)?ne(a,t,n,!1,!0):(s===Wn&&(128&f||256&f)||!o&&16&u)&&ne(c,t,n),r&&Q(e)}((h=l&&l.onVnodeUnmounted)||d)&&Vn((()=>{h&&Ln(h,t,e),d&&Fn(e,null,t,"unmounted")}),n)},Q=e=>{const{type:t,el:n,anchor:o,transition:s}=e;if(t===Wn)return void Y(n,o);if(t===Hn)return void O(e);const l=()=>{r(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:r}=s,o=()=>t(n,l);r?r(e.el,l,o):o()}else l()},Y=(e,t)=>{let n;for(;e!==t;)n=m(e),r(e),e=n;r(t)},te=(e,t,n)=>{const{bum:r,effects:o,update:s,subTree:l,um:i}=e;if(r&&W(r),o)for(let c=0;c{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},ne=(e,t,n,r=!1,o=!1,s=0)=>{for(let l=s;l6&e.shapeFlag?re(e.component.subTree):128&e.shapeFlag?e.suspense.next():m(e.anchor||e.el),oe=(e,t,n)=>{null==e?t._vnode&&J(t._vnode,null,null,!0):_(t._vnode||null,e,t,null,null,null,n),Ft(),t._vnode=e},ie={p:_,um:J,m:X,r:Q,mt:U,mc:P,pc:z,pbc:$,n:re,o:e};let ae,ue;t&&([ae,ue]=t(ie));return{render:oe,hydrate:ae,createApp:Mn(oe,ae)}}(e)}function Ln(e,t,n,r=null){ft(e,t,7,[n,r])}function Bn(e,t,n=!1){const r=e.children,o=t.children;if(E(r)&&E(o))for(let s=0;snull!=e?e:null,or=({ref:e})=>null!=e?R(e)||nt(e)||C(e)?{i:Bt,r:e}:e:null,sr=function(e,t=null,n=null,o=0,s=null,l=!1){e&&e!==qn||(e=Gn);if(er(e)){const r=lr(e,t,!0);return n&&fr(r,n),r}c=e,C(c)&&"__vccOpts"in c&&(e=e.__vccOpts);var c;if(t){(Ze(t)||nr in t)&&(t=b({},t));let{class:e,style:n}=t;e&&!R(e)&&(t.class=i(e)),P(n)&&(Ze(n)&&!E(n)&&(n=b({},n)),t.style=r(n))}const a=R(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:P(e)?4:C(e)?2:0,u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&rr(t),ref:t&&or(t),scopeId:Dt,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null};if(fr(u,n),128&a){const{content:e,fallback:t}=function(e){const{shapeFlag:t,children:n}=e;let r,o;return 32&t?(r=Qt(n.default),o=Qt(n.fallback)):(r=Qt(n),o=ar(null)),{content:r,fallback:o}}(u);u.ssContent=e,u.ssFallback=t}!l&&Jn&&(o>0||6&a)&&32!==o&&Jn.push(u);return u};function lr(e,t,n=!1){const{props:o,ref:s,patchFlag:l,children:c}=e,a=t?function(...e){const t=b({},e[0]);for(let n=1;n1)return n&&C(t)?t():t}}let hr=!0;function mr(e,t,n=[],r=[],o=[],s=!1){const{mixins:l,extends:i,data:c,computed:a,methods:u,watch:f,provide:d,inject:m,components:g,directives:v,beforeMount:y,mounted:_,beforeUpdate:w,updated:x,activated:k,deactivated:S,beforeDestroy:O,beforeUnmount:R,destroyed:A,unmounted:F,render:j,renderTracked:$,renderTriggered:M,errorCaptured:I,expose:T}=t,V=e.proxy,U=e.ctx,N=e.appContext.mixins;if(s&&j&&e.render===h&&(e.render=j),s||(hr=!1,gr("beforeCreate","bc",t,e,N),hr=!0,yr(e,N,n,r,o)),i&&mr(e,i,n,r,o,!0),l&&yr(e,l,n,r,o),m)if(E(m))for(let p=0;pbr(e,t,V))),c&&br(e,c,V)),a)for(const p in a){const e=a[p],t=Tr({get:C(e)?e.bind(V,V):C(e.get)?e.get.bind(V,V):h,set:!C(e)&&C(e.set)?e.set.bind(V):h});Object.defineProperty(U,p,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e})}var L;if(f&&r.push(f),!s&&r.length&&r.forEach((e=>{for(const t in e)_r(e[t],U,V,t)})),d&&o.push(d),!s&&o.length&&o.forEach((e=>{const t=C(e)?e.call(V):e;Reflect.ownKeys(t).forEach((e=>{pr(e,t[e])}))})),s&&(g&&b(e.components||(e.components=b({},e.type.components)),g),v&&b(e.directives||(e.directives=b({},e.type.directives)),v)),s||gr("created","c",t,e,N),y&&an(y.bind(V)),_&&un(_.bind(V)),w&&fn(w.bind(V)),x&&pn(x.bind(V)),k&&En(k.bind(V),"a",L),S&&function(e,t){En(e,"da",t)}(S.bind(V)),I&&((e,t=Rr)=>{ln("ec",e,t)})(I.bind(V)),$&&gn($.bind(V)),M&&mn(M.bind(V)),R&&dn(R.bind(V)),F&&hn(F.bind(V)),E(T)&&!s)if(T.length){const t=e.exposed||(e.exposed=it({}));T.forEach((e=>{t[e]=function(e,t){return nt(e[t])?e[t]:new ct(e,t)}(V,e)}))}else e.exposed||(e.exposed=p)}function gr(e,t,n,r,o){for(let s=0;s{let t=e;for(let e=0;en[r];if(R(e)){const n=t[e];C(n)&&yn(o,n)}else if(C(e))yn(o,e.bind(n));else if(P(e))if(E(e))e.forEach((e=>_r(e,t,n,r)));else{const r=C(e.handler)?e.handler.bind(n):t[e.handler];C(r)&&yn(o,r,e)}}function wr(e,t,n){const r=n.appContext.config.optionMergeStrategies,{mixins:o,extends:s}=t;s&&wr(e,s,n),o&&o.forEach((t=>wr(e,t,n)));for(const l in t)r&&x(r,l)?e[l]=r[l](e[l],t[l],n.proxy,l):e[l]=t[l]}const xr=e=>e?Pr(e)?e.exposed?e.exposed:e.proxy:xr(e.parent):null,Er=b(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xr(e.parent),$root:e=>xr(e.root),$emit:e=>e.emit,$options:e=>function(e){const t=e.type,{__merged:n,mixins:r,extends:o}=t;if(n)return n;const s=e.appContext.mixins;if(!s.length&&!r&&!o)return t;const l={};return s.forEach((t=>wr(l,t,e))),wr(l,t,e),t.__merged=l}(e),$forceUpdate:e=>()=>Ct(e.update),$nextTick:e=>Ot.bind(e.proxy),$watch:e=>_n.bind(e)}),kr={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:l,type:i,appContext:c}=e;if("__v_skip"===t)return!0;let a;if("$"!==t[0]){const i=l[t];if(void 0!==i)switch(i){case 0:return r[t];case 1:return o[t];case 3:return n[t];case 2:return s[t]}else{if(r!==p&&x(r,t))return l[t]=0,r[t];if(o!==p&&x(o,t))return l[t]=1,o[t];if((a=e.propsOptions[0])&&x(a,t))return l[t]=2,s[t];if(n!==p&&x(n,t))return l[t]=3,n[t];hr&&(l[t]=4)}}const u=Er[t];let f,d;return u?("$attrs"===t&&ie(e,0,t),u(e)):(f=i.__cssModules)&&(f=f[t])?f:n!==p&&x(n,t)?(l[t]=3,n[t]):(d=c.config.globalProperties,x(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;if(o!==p&&x(o,t))o[t]=n;else if(r!==p&&x(r,t))r[t]=n;else if(x(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},l){let i;return void 0!==n[l]||e!==p&&x(e,l)||t!==p&&x(t,l)||(i=s[0])&&x(i,l)||x(r,l)||x(Er,l)||x(o.config.globalProperties,l)}},Sr=b({},kr,{get(e,t){if(t!==Symbol.unscopables)return kr.get(e,t,e)},has:(e,n)=>"_"!==n[0]&&!t(n)}),Or=jn();let Cr=0;let Rr=null;const Ar=e=>{Rr=e};function Pr(e){return 4&e.vnode.shapeFlag}let Fr=!1;function jr(e,t,n){C(t)?e.render=t:P(t)&&(e.setupState=it(t)),$r(e)}function $r(e,t){const n=e.type;e.render||(e.render=n.render||h,e.render._rc&&(e.withProxy=new Proxy(e.ctx,Sr))),Rr=e,se(),mr(e,n),le(),Rr=null}function Mr(e,t=Rr){t&&(t.effects||(t.effects=[])).push(e)}function Ir(e){return C(e)&&e.displayName||e.name}function Tr(e){const t=function(e){let t,n;return C(e)?(t=e,n=h):(t=e.get,n=e.set),new at(t,n,C(e)||!e.set)}(e);return Mr(t.effect),t}function Vr(e,t,n){const r=arguments.length;return 2===r?P(t)&&!E(t)?er(t)?sr(e,null,[t]):sr(e,t):sr(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&er(n)&&(n=[n]),sr(e,t,n))}function Ur(e,t){let n;if(E(e)||R(e)){n=new Array(e.length);for(let r=0,o=e.length;r{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Br.createElementNS(Lr,e):Br.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Br.createTextNode(e),createComment:e=>Br.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Br.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,r){const o=r?qr||(qr=Br.createElementNS(Lr,"svg")):Dr||(Dr=Br.createElement("div"));o.innerHTML=e;const s=o.firstChild;let l=s,i=l;for(;l;)i=l,zr.insert(l,t,n),l=o.firstChild;return[s,i]}};const Wr=/\s*!important$/;function Kr(e,t,n){if(E(n))n.forEach((n=>Kr(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=Hr[t];if(n)return n;let r=N(t);if("filter"!==r&&r in e)return Hr[t]=r;r=D(r);for(let o=0;odocument.createEvent("Event").timeStamp&&(Jr=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);Qr=!!(e&&Number(e[1])<=53)}let Yr=0;const Zr=Promise.resolve(),eo=()=>{Yr=0};function to(e,t,n,r){e.addEventListener(t,n,r)}function no(e,t,n,r,o=null){const s=e._vei||(e._vei={}),l=s[t];if(r&&l)l.value=r;else{const[n,i]=function(e){let t;if(ro.test(e)){let n;for(t={};n=e.match(ro);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[B(e.slice(2)),t]}(t);if(r){to(e,n,s[t]=function(e,t){const n=e=>{const r=e.timeStamp||Jr();(Qr||r>=n.attached-1)&&ft(function(e,t){if(E(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>Yr||(Zr.then(eo),Yr=Jr()))(),n}(r,o),i)}else l&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,l,i),s[t]=void 0)}}const ro=/(?:Once|Passive|Capture)$/;const oo=/^on[a-z]/;const so=e=>{const t=e.props["onUpdate:modelValue"];return E(t)?e=>W(t,e):t};function lo(e){e.target.composing=!0}function io(e){const t=e.target;t.composing&&(t.composing=!1,function(e,t){const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,"input"))}const co={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e._assign=so(o);const s=r||"number"===e.type;to(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n?r=r.trim():s&&(r=G(r)),e._assign(r)})),n&&to(e,"change",(()=>{e.value=e.value.trim()})),t||(to(e,"compositionstart",lo),to(e,"compositionend",io),to(e,"change",io))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{trim:n,number:r}},o){if(e._assign=so(o),e.composing)return;if(document.activeElement===e){if(n&&e.value.trim()===t)return;if((r||"number"===e.type)&&G(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},ao={created(e,t,n){e._assign=so(n),to(e,"change",(()=>{const t=e._modelValue,n=mo(e),r=e.checked,o=e._assign;if(E(t)){const e=a(t,n),s=-1!==e;if(r&&!s)o(t.concat(n));else if(!r&&s){const n=[...t];n.splice(e,1),o(n)}}else if(S(t)){const e=new Set(t);r?e.add(n):e.delete(n),o(e)}else o(go(e,r))}))},mounted:uo,beforeUpdate(e,t,n){e._assign=so(n),uo(e,t,n)}};function uo(e,{value:t,oldValue:n},r){e._modelValue=t,E(t)?e.checked=a(t,r.props.value)>-1:S(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=c(t,go(e,!0)))}const fo={created(e,{value:t},n){e.checked=c(t,n.props.value),e._assign=so(n),to(e,"change",(()=>{e._assign(mo(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e._assign=so(r),t!==n&&(e.checked=c(t,r.props.value))}},po={created(e,{value:t,modifiers:{number:n}},r){const o=S(t);to(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?G(mo(e)):mo(e)));e._assign(e.multiple?o?new Set(t):t:t[0])})),e._assign=so(r)},mounted(e,{value:t}){ho(e,t)},beforeUpdate(e,t,n){e._assign=so(n)},updated(e,{value:t}){ho(e,t)}};function ho(e,t){const n=e.multiple;if(!n||E(t)||S(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(s);else if(c(mo(o),t))return void(e.selectedIndex=r)}n||(e.selectedIndex=-1)}}function mo(e){return"_value"in e?e._value:e.value}function go(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const vo=["ctrl","shift","alt","meta"],yo={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>vo.some((n=>e[`${n}Key`]&&!t.includes(n)))},bo=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=B(n.key);return t.some((e=>e===r||_o[e]===r))?e(n):void 0},xo={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Eo(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Eo(e,!0),r.enter(e)):r.leave(e,(()=>{Eo(e,!1)})):Eo(e,t))},beforeUnmount(e,{value:t}){Eo(e,t)}};function Eo(e,t){e.style.display=t?e._vod:"none"}const ko=b({patchProp:(e,t,r,o,s=!1,l,i,c,a)=>{switch(t){case"class":!function(e,t,n){if(null==t&&(t=""),n)e.setAttribute("class",t);else{const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),e.className=t}}(e,o,s);break;case"style":!function(e,t,n){const r=e.style;if(n)if(R(n)){if(t!==n){const t=r.display;r.cssText=n,"_vod"in e&&(r.display=t)}}else{for(const e in n)Kr(r,e,n[e]);if(t&&!R(t))for(const e in t)null==n[e]&&Kr(r,e,"")}else e.removeAttribute("style")}(e,r,o);break;default:v(t)?y(t)||no(e,t,0,o,i):function(e,t,n,r){if(r)return"innerHTML"===t||!!(t in e&&oo.test(t)&&C(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(oo.test(t)&&R(n))return!1;return t in e}(e,t,o,s)?function(e,t,n,r,o,s,l){if("innerHTML"===t||"textContent"===t)return r&&l(r,o,s),void(e[t]=null==n?"":n);if("value"!==t||"PROGRESS"===e.tagName){if(""===n||null==n){const r=typeof e[t];if(""===n&&"boolean"===r)return void(e[t]=!0);if(null==n&&"string"===r)return e[t]="",void e.removeAttribute(t);if("number"===r)return e[t]=0,void e.removeAttribute(t)}try{e[t]=n}catch(i){}}else{e._value=n;const t=null==n?"":n;e.value!==t&&(e.value=t)}}(e,t,o,l,i,c,a):("true-value"===t?e._trueValue=o:"false-value"===t&&(e._falseValue=o),function(e,t,r,o){if(o&&t.startsWith("xlink:"))null==r?e.removeAttributeNS(Xr,t.slice(6,t.length)):e.setAttributeNS(Xr,t,r);else{const o=n(t);null==r||o&&!1===r?e.removeAttribute(t):e.setAttribute(t,o?"":r)}}(e,t,o,s))}},forcePatchProp:(e,t)=>"value"===t},zr);let So;const Oo=(...e)=>{const t=(So||(So=Nn(ko))).createApp(...e),{mount:n}=t;return t.mount=e=>{const r=function(e){if(R(e)){return document.querySelector(e)}return e} /*! * vue-router v4.0.8 * (c) 2021 Eduardo San Martin Morote * @license MIT - */(e);if(!r)return;const o=t._component;C(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const s=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),s},t};const ko="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,So=e=>ko?Symbol(e):"_vr_"+e,Oo=So("rvlm"),Co=So("rvd"),Ro=So("r"),Ao=So("rl"),Po=So("rvl"),Fo="undefined"!=typeof window;const jo=Object.assign;function $o(e,t){const n={};for(const r in t){const o=t[r];n[r]=Array.isArray(o)?o.map(e):e(o)}return n}let Mo=()=>{};const Io=/\/$/;function To(e,t,n="/"){let r,o={},s="",l="";const i=t.indexOf("?"),c=t.indexOf("#",i>-1?i:0);return i>-1&&(r=t.slice(0,i),s=t.slice(i+1,c>-1?c:t.length),o=e(s)),c>-1&&(r=r||t.slice(0,c),l=t.slice(c,t.length)),r=function(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let o,s,l=n.length-1;for(o=0;oe===t[n])):1===e.length&&e[0]===t}var Do,qo,zo,Wo;function Ko(e){if(!e)if(Fo){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),e.replace(Io,"")}(qo=Do||(Do={})).pop="pop",qo.push="push",(Wo=zo||(zo={})).back="back",Wo.forward="forward",Wo.unknown="";const Go=/^[^#]+#/;function Ho(e,t){return e.replace(Go,"#")+t}const Xo=()=>({left:window.pageXOffset,top:window.pageYOffset});function Jo(e){let t;if("el"in e){let n=e.el;const r="string"==typeof n&&n.startsWith("#"),o="string"==typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function Qo(e,t){return(history.state?history.state.position-t:-1)+e}const Yo=new Map;function Zo(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let t=o.includes(e.slice(s))?e.slice(s).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),Uo(n,"")}return Uo(n,e)+r+o}function es(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Xo():null}}function ts(e){const{history:t,location:n}=window;let r={value:Zo(e,n)},o={value:t.state};function s(r,s,l){const i=e.indexOf("#"),c=i>-1?(n.host&&document.querySelector("base")?e:e.slice(i))+r:location.protocol+"//"+location.host+e+r;try{t[l?"replaceState":"pushState"](s,"",c),o.value=s}catch(a){console.error(a),n[l?"replace":"assign"](c)}}return o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:function(e,n){const l=jo({},o.value,t.state,{forward:e,scroll:Xo()});s(l.current,l,!0),s(e,jo({},es(r.value,e,null),{position:l.position+1},n),!1),r.value=e},replace:function(e,n){s(e,jo({},t.state,es(o.value.back,e,o.value.forward,!0),n,{position:o.value.position}),!0),r.value=e}}}function ns(e){const t=ts(e=Ko(e)),n=function(e,t,n,r){let o=[],s=[],l=null;const i=({state:s})=>{const i=Zo(e,location),c=n.value,a=t.value;let u=0;if(s){if(n.value=i,t.value=s,l&&l===c)return void(l=null);u=a?s.position-a.position:0}else r(i);o.forEach((e=>{e(n.value,c,{delta:u,type:Do.pop,direction:u?u>0?zo.forward:zo.back:zo.unknown})}))};function c(){const{history:e}=window;e.state&&e.replaceState(jo({},e.state,{scroll:Xo()}),"")}return window.addEventListener("popstate",i),window.addEventListener("beforeunload",c),{pauseListeners:function(){l=n.value},listen:function(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return s.push(t),t},destroy:function(){for(const e of s)e();s=[],window.removeEventListener("popstate",i),window.removeEventListener("beforeunload",c)}}}(e,t.state,t.location,t.replace);const r=jo({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:Ho.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function rs(e){return(e=location.host?e||location.pathname+location.search:"").indexOf("#")<0&&(e+="#"),ns(e)}function os(e){return"string"==typeof e||"symbol"==typeof e}const ss={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},ls=So("nf");var is,cs;function as(e,t){return jo(new Error,{type:e,[ls]:!0},t)}function us(e,t){return e instanceof Error&&ls in e&&(null==t||!!(e.type&t))}(cs=is||(is={}))[cs.aborted=4]="aborted",cs[cs.cancelled=8]="cancelled",cs[cs.duplicated=16]="duplicated";const fs={sensitive:!1,strict:!1,start:!0,end:!0},ps=/[.+*?^${}()[\]/\\]/g;function ds(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function hs(e,t){let n=0;const r=e.score,o=t.score;for(;n1&&("*"===i||"+"===i)&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:a,regexp:u,repeatable:"*"===i||"+"===i,optional:"*"===i||"?"===i})):t("Invalid state to consume buffer"),a="")}function p(){a+=i}for(;c{s(p)}:Mo}function s(e){if(os(e)){const t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(s),t.alias.forEach(s))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(s),e.alias.forEach(s))}}function l(e){let t=0;for(;t=0;)t++;n.splice(t,0,e),e.record.name&&!_s(e)&&r.set(e.record.name,e)}return t=xs({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>o(e))),{addRoute:o,resolve:function(e,t){let o,s,l,i={};if("name"in e&&e.name){if(o=r.get(e.name),!o)throw as(1,{location:e});l=o.record.name,i=jo(function(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}(t.params,o.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params),s=o.stringify(i)}else if("path"in e)s=e.path,o=n.find((e=>e.re.test(s))),o&&(i=o.parse(s),l=o.record.name);else{if(o=t.name?r.get(t.name):n.find((e=>e.re.test(t.path))),!o)throw as(1,{location:e,currentLocation:t});l=o.record.name,i=jo({},t.params,e.params),s=o.stringify(i)}const c=[];let a=o;for(;a;)c.unshift(a.record),a=a.parent;return{name:l,path:s,params:i,matched:c,meta:ws(c)}},removeRoute:s,getRoutes:function(){return n},getRecordMatcher:function(e){return r.get(e)}}}function bs(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(let r in e.components)t[r]="boolean"==typeof n?n:n[r];return t}function _s(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ws(e){return e.reduce(((e,t)=>jo(e,t.meta)),{})}function xs(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}const Es=/#/g,ks=/&/g,Ss=/\//g,Os=/=/g,Cs=/\?/g,Rs=/\+/g,As=/%5B/g,Ps=/%5D/g,Fs=/%5E/g,js=/%60/g,$s=/%7B/g,Ms=/%7C/g,Is=/%7D/g,Ts=/%20/g;function Us(e){return encodeURI(""+e).replace(Ms,"|").replace(As,"[").replace(Ps,"]")}function Vs(e){return Us(e).replace(Rs,"%2B").replace(Ts,"+").replace(Es,"%23").replace(ks,"%26").replace(js,"`").replace($s,"{").replace(Is,"}").replace(Fs,"^")}function Ns(e){return function(e){return Us(e).replace(Es,"%23").replace(Cs,"%3F")}(e).replace(Ss,"%2F")}function Ls(e){try{return decodeURIComponent(""+e)}catch(t){}return""+e}function Bs(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let r=0;re&&Vs(e))):[r&&Vs(r)]).forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))}))}return t}function qs(e){const t={};for(let n in e){let r=e[n];void 0!==r&&(t[n]=Array.isArray(r)?r.map((e=>null==e?null:""+e)):null==r?r:""+r)}return t}function zs(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e,reset:function(){e=[]}}}function Ws(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise(((l,i)=>{const c=e=>{var c;!1===e?i(as(4,{from:n,to:t})):e instanceof Error?i(e):"string"==typeof(c=e)||c&&"object"==typeof c?i(as(2,{from:t,to:e})):(s&&r.enterCallbacks[o]===s&&"function"==typeof e&&s.push(e),l())},a=e.call(r&&r.instances[o],t,n,c);let u=Promise.resolve(a);e.length<3&&(u=u.then(c)),u.catch((e=>i(e)))}))}function Ks(e,t,n,r){const o=[];for(const l of e)for(const e in l.components){let i=l.components[e];if("beforeRouteEnter"===t||l.instances[e])if("object"==typeof(s=i)||"displayName"in s||"props"in s||"__vccOpts"in s){const s=(i.__vccOpts||i)[t];s&&o.push(Ws(s,n,r,l,e))}else{let s=i();s=s.catch(console.error),o.push((()=>s.then((o=>{if(!o)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${l.path}"`));const s=(i=o).__esModule||ko&&"Module"===i[Symbol.toStringTag]?o.default:o;var i;l.components[e]=s;const c=(s.__vccOpts||s)[t];return c&&Ws(c,n,r,l,e)()}))))}}var s;return o}function Gs(e){const t=dr(Ro),n=dr(Ao),r=Tr((()=>t.resolve(st(e.to)))),o=Tr((()=>{let{matched:e}=r.value,{length:t}=e;const o=e[t-1];let s=n.matched;if(!o||!s.length)return-1;let l=s.findIndex(Vo.bind(null,o));if(l>-1)return l;let i=Xs(e[t-2]);return t>1&&Xs(o)===i&&s[s.length-1].path!==i?s.findIndex(Vo.bind(null,e[t-2])):l})),s=Tr((()=>o.value>-1&&function(e,t){for(let n in t){let r=t[n],o=e[n];if("string"==typeof r){if(r!==o)return!1}else if(!Array.isArray(o)||o.length!==r.length||r.some(((e,t)=>e!==o[t])))return!1}return!0}(n.params,r.value.params))),l=Tr((()=>o.value>-1&&o.value===n.matched.length-1&&No(n.params,r.value.params)));return{route:r,href:Tr((()=>r.value.href)),isActive:s,isExactActive:l,navigate:function(n={}){return function(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(void 0!==e.button&&0!==e.button)return;if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}e.preventDefault&&e.preventDefault();return!0}(n)?t[st(e.replace)?"replace":"push"](st(e.to)):Promise.resolve()}}}const Hs=In({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},setup(e,{slots:t}){const n=He(Gs(e)),{options:r}=dr(Ro),o=Tr((()=>({[Js(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Js(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const r=t.default&&t.default(n);return e.custom?r:Ur("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},r)}}});function Xs(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Js=(e,t,n)=>null!=e?e:null!=t?t:n;function Qs(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const Ys=In({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const r=dr(Po),o=Tr((()=>e.route||r.value)),s=dr(Co,0),l=Tr((()=>o.value.matched[s]));pr(Co,s+1),pr(Oo,l),pr(Po,o);const i=ot(c);var c;return yn((()=>[i.value,l.value,e.name]),(([e,t,n],[r,o,s])=>{t&&(t.instances[n]=e,o&&o!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=o.leaveGuards),t.updateGuards.size||(t.updateGuards=o.updateGuards))),!e||!t||o&&Vo(t,o)&&r||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const r=o.value,s=l.value,c=s&&s.components[e.name],a=e.name;if(!c)return Qs(n.default,{Component:c,route:r});const u=s.props[e.name],f=u?!0===u?r.params:"function"==typeof u?u(r):u:null,p=Ur(c,jo({},f,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(s.instances[a]=null)},ref:i}));return Qs(n.default,{Component:p,route:r})||p}}});function Zs(e){const t=ys(e.routes,e);let n=e.parseQuery||Bs,r=e.stringifyQuery||Ds,o=e.history;const s=zs(),l=zs(),i=zs(),c=ot(ss,!0);let a=ss;Fo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=$o.bind(null,(e=>""+e)),f=$o.bind(null,Ns),p=$o.bind(null,Ls);function d(e,s){if(s=jo({},s||c.value),"string"==typeof e){let r=To(n,e,s.path),l=t.resolve({path:r.path},s),i=o.createHref(r.fullPath);return jo(r,l,{params:p(l.params),hash:Ls(r.hash),redirectedFrom:void 0,href:i})}let l;"path"in e?l=jo({},e,{path:To(n,e.path,s.path).path}):(l=jo({},e,{params:f(e.params)}),s.params=f(s.params));let i=t.resolve(l,s);const a=e.hash||"";i.params=u(p(i.params));const d=function(e,t){let n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(r,jo({},e,{hash:(h=a,Us(h).replace($s,"{").replace(Is,"}").replace(Fs,"^")),path:i.path}));var h;let m=o.createHref(d);return jo({fullPath:d,hash:a,query:r===Ds?qs(e.query):e.query},i,{redirectedFrom:void 0,href:m})}function h(e){return"string"==typeof e?To(n,e,c.value.path):jo({},e)}function m(e,t){if(a!==e)return as(8,{from:t,to:e})}function g(e){return y(e)}function v(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let r="function"==typeof n?n(e):n;return"string"==typeof r&&(r=r.indexOf("?")>-1||r.indexOf("#")>-1?r=h(r):{path:r}),jo({query:e.query,hash:e.hash,params:e.params},r)}}function y(e,t){const n=a=d(e),o=c.value,s=e.state,l=e.force,i=!0===e.replace,u=v(n);if(u)return y(jo(h(u),{state:s,force:l,replace:i}),t||n);const f=n;let p;return f.redirectedFrom=t,!l&&function(e,t,n){let r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Vo(t.matched[r],n.matched[o])&&No(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(r,o,n)&&(p=as(16,{to:f,from:o}),P(o,o,!0,!1)),(p?Promise.resolve(p):_(f,o)).catch((e=>us(e)?e:R(e))).then((e=>{if(e){if(us(e,2))return y(jo(h(e.to),{state:s,force:l,replace:i}),t||f)}else e=x(f,o,!0,i,s);return w(f,o,e),e}))}function b(e,t){const n=m(e,t);return n?Promise.reject(n):Promise.resolve()}function _(e,t){let n;const[r,o,i]=function(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let l=0;lVo(e,s)))?r.push(s):n.push(s));const i=e.matched[l];i&&(t.matched.find((e=>Vo(e,i)))||o.push(i))}return[n,r,o]}(e,t);n=Ks(r.reverse(),"beforeRouteLeave",e,t);for(const s of r)s.leaveGuards.forEach((r=>{n.push(Ws(r,e,t))}));const c=b.bind(null,e,t);return n.push(c),el(n).then((()=>{n=[];for(const r of s.list())n.push(Ws(r,e,t));return n.push(c),el(n)})).then((()=>{n=Ks(o,"beforeRouteUpdate",e,t);for(const r of o)r.updateGuards.forEach((r=>{n.push(Ws(r,e,t))}));return n.push(c),el(n)})).then((()=>{n=[];for(const r of e.matched)if(r.beforeEnter&&t.matched.indexOf(r)<0)if(Array.isArray(r.beforeEnter))for(const o of r.beforeEnter)n.push(Ws(o,e,t));else n.push(Ws(r.beforeEnter,e,t));return n.push(c),el(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=Ks(i,"beforeRouteEnter",e,t),n.push(c),el(n)))).then((()=>{n=[];for(const r of l.list())n.push(Ws(r,e,t));return n.push(c),el(n)})).catch((e=>us(e,8)?e:Promise.reject(e)))}function w(e,t,n){for(const r of i.list())r(e,t,n)}function x(e,t,n,r,s){const l=m(e,t);if(l)return l;const i=t===ss,a=Fo?history.state:{};n&&(r||i?o.replace(e.fullPath,jo({scroll:i&&a&&a.scroll},s)):o.push(e.fullPath,s)),c.value=e,P(e,t,n,i),A()}let E;function k(){E=o.listen(((e,t,n)=>{let r=d(e);const s=v(r);if(s)return void y(jo(s,{replace:!0}),r).catch(Mo);a=r;const l=c.value;var i,u;Fo&&(i=Qo(l.fullPath,n.delta),u=Xo(),Yo.set(i,u)),_(r,l).catch((e=>us(e,12)?e:us(e,2)?(y(e.to,r).catch(Mo),Promise.reject()):(n.delta&&o.go(-n.delta,!1),R(e)))).then((e=>{(e=e||x(r,l,!1))&&n.delta&&o.go(-n.delta,!1),w(r,l,e)})).catch(Mo)}))}let S,O=zs(),C=zs();function R(e){return A(e),C.list().forEach((t=>t(e))),Promise.reject(e)}function A(e){S||(S=!0,k(),O.list().forEach((([t,n])=>e?n(e):t())),O.reset())}function P(t,n,r,o){const{scrollBehavior:s}=e;if(!Fo||!s)return Promise.resolve();let l=!r&&function(e){const t=Yo.get(e);return Yo.delete(e),t}(Qo(t.fullPath,0))||(o||!r)&&history.state&&history.state.scroll||null;return Ot().then((()=>s(t,n,l))).then((e=>e&&Jo(e))).catch(R)}const F=e=>o.go(e);let j;const $=new Set;return{currentRoute:c,addRoute:function(e,n){let r,o;return os(e)?(r=t.getRecordMatcher(e),o=n):o=e,t.addRoute(o,r)},removeRoute:function(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)},hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:d,options:e,push:g,replace:function(e){return g(jo(h(e),{replace:!0}))},go:F,back:()=>F(-1),forward:()=>F(1),beforeEach:s.add,beforeResolve:l.add,afterEach:i.add,onError:C.add,isReady:function(){return S&&c.value!==ss?Promise.resolve():new Promise(((e,t)=>{O.add([e,t])}))},install(e){e.component("RouterLink",Hs),e.component("RouterView",Ys),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>st(c)}),Fo&&!j&&c.value===ss&&(j=!0,g(o.location).catch((e=>{})));const t={};for(let r in ss)t[r]=Tr((()=>c.value[r]));e.provide(Ro,this),e.provide(Ao,He(t)),e.provide(Po,c);let n=e.unmount;$.add(e),e.unmount=function(){$.delete(e),$.size<1&&(E(),c.value=ss,j=!1,S=!1),n()}}}}function el(e){return e.reduce(((e,t)=>e.then((()=>t()))),Promise.resolve())}export{Wn as F,sr as a,cr as b,Zn as c,In as d,ir as e,Vr as f,go as g,Pn as h,yo as i,zt as j,ao as k,uo as l,Nt as m,bo as n,Qn as o,Zs as p,rs as q,Dn as r,Eo as s,u as t,co as v,Wt as w}; + */(e);if(!r)return;const o=t._component;C(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const s=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),s},t};const Co="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,Ro=e=>Co?Symbol(e):"_vr_"+e,Ao=Ro("rvlm"),Po=Ro("rvd"),Fo=Ro("r"),jo=Ro("rl"),$o=Ro("rvl"),Mo="undefined"!=typeof window;const Io=Object.assign;function To(e,t){const n={};for(const r in t){const o=t[r];n[r]=Array.isArray(o)?o.map(e):e(o)}return n}let Vo=()=>{};const Uo=/\/$/;function No(e,t,n="/"){let r,o={},s="",l="";const i=t.indexOf("?"),c=t.indexOf("#",i>-1?i:0);return i>-1&&(r=t.slice(0,i),s=t.slice(i+1,c>-1?c:t.length),o=e(s)),c>-1&&(r=r||t.slice(0,c),l=t.slice(c,t.length)),r=function(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let o,s,l=n.length-1;for(o=0;oe===t[n])):1===e.length&&e[0]===t}var Wo,Ko,Go,Ho;function Xo(e){if(!e)if(Mo){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),e.replace(Uo,"")}(Ko=Wo||(Wo={})).pop="pop",Ko.push="push",(Ho=Go||(Go={})).back="back",Ho.forward="forward",Ho.unknown="";const Jo=/^[^#]+#/;function Qo(e,t){return e.replace(Jo,"#")+t}const Yo=()=>({left:window.pageXOffset,top:window.pageYOffset});function Zo(e){let t;if("el"in e){let n=e.el;const r="string"==typeof n&&n.startsWith("#"),o="string"==typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function es(e,t){return(history.state?history.state.position-t:-1)+e}const ts=new Map;function ns(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let t=o.includes(e.slice(s))?e.slice(s).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),Lo(n,"")}return Lo(n,e)+r+o}function rs(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Yo():null}}function os(e){const{history:t,location:n}=window;let r={value:ns(e,n)},o={value:t.state};function s(r,s,l){const i=e.indexOf("#"),c=i>-1?(n.host&&document.querySelector("base")?e:e.slice(i))+r:location.protocol+"//"+location.host+e+r;try{t[l?"replaceState":"pushState"](s,"",c),o.value=s}catch(a){console.error(a),n[l?"replace":"assign"](c)}}return o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:function(e,n){const l=Io({},o.value,t.state,{forward:e,scroll:Yo()});s(l.current,l,!0),s(e,Io({},rs(r.value,e,null),{position:l.position+1},n),!1),r.value=e},replace:function(e,n){s(e,Io({},t.state,rs(o.value.back,e,o.value.forward,!0),n,{position:o.value.position}),!0),r.value=e}}}function ss(e){const t=os(e=Xo(e)),n=function(e,t,n,r){let o=[],s=[],l=null;const i=({state:s})=>{const i=ns(e,location),c=n.value,a=t.value;let u=0;if(s){if(n.value=i,t.value=s,l&&l===c)return void(l=null);u=a?s.position-a.position:0}else r(i);o.forEach((e=>{e(n.value,c,{delta:u,type:Wo.pop,direction:u?u>0?Go.forward:Go.back:Go.unknown})}))};function c(){const{history:e}=window;e.state&&e.replaceState(Io({},e.state,{scroll:Yo()}),"")}return window.addEventListener("popstate",i),window.addEventListener("beforeunload",c),{pauseListeners:function(){l=n.value},listen:function(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return s.push(t),t},destroy:function(){for(const e of s)e();s=[],window.removeEventListener("popstate",i),window.removeEventListener("beforeunload",c)}}}(e,t.state,t.location,t.replace);const r=Io({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:Qo.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function ls(e){return(e=location.host?e||location.pathname+location.search:"").indexOf("#")<0&&(e+="#"),ss(e)}function is(e){return"string"==typeof e||"symbol"==typeof e}const cs={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},as=Ro("nf");var us,fs;function ps(e,t){return Io(new Error,{type:e,[as]:!0},t)}function ds(e,t){return e instanceof Error&&as in e&&(null==t||!!(e.type&t))}(fs=us||(us={}))[fs.aborted=4]="aborted",fs[fs.cancelled=8]="cancelled",fs[fs.duplicated=16]="duplicated";const hs={sensitive:!1,strict:!1,start:!0,end:!0},ms=/[.+*?^${}()[\]/\\]/g;function gs(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function vs(e,t){let n=0;const r=e.score,o=t.score;for(;n1&&("*"===i||"+"===i)&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:a,regexp:u,repeatable:"*"===i||"+"===i,optional:"*"===i||"?"===i})):t("Invalid state to consume buffer"),a="")}function p(){a+=i}for(;c{s(p)}:Vo}function s(e){if(is(e)){const t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(s),t.alias.forEach(s))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(s),e.alias.forEach(s))}}function l(e){let t=0;for(;t=0;)t++;n.splice(t,0,e),e.record.name&&!Es(e)&&r.set(e.record.name,e)}return t=Ss({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>o(e))),{addRoute:o,resolve:function(e,t){let o,s,l,i={};if("name"in e&&e.name){if(o=r.get(e.name),!o)throw ps(1,{location:e});l=o.record.name,i=Io(function(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}(t.params,o.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params),s=o.stringify(i)}else if("path"in e)s=e.path,o=n.find((e=>e.re.test(s))),o&&(i=o.parse(s),l=o.record.name);else{if(o=t.name?r.get(t.name):n.find((e=>e.re.test(t.path))),!o)throw ps(1,{location:e,currentLocation:t});l=o.record.name,i=Io({},t.params,e.params),s=o.stringify(i)}const c=[];let a=o;for(;a;)c.unshift(a.record),a=a.parent;return{name:l,path:s,params:i,matched:c,meta:ks(c)}},removeRoute:s,getRoutes:function(){return n},getRecordMatcher:function(e){return r.get(e)}}}function xs(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(let r in e.components)t[r]="boolean"==typeof n?n:n[r];return t}function Es(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ks(e){return e.reduce(((e,t)=>Io(e,t.meta)),{})}function Ss(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}const Os=/#/g,Cs=/&/g,Rs=/\//g,As=/=/g,Ps=/\?/g,Fs=/\+/g,js=/%5B/g,$s=/%5D/g,Ms=/%5E/g,Is=/%60/g,Ts=/%7B/g,Vs=/%7C/g,Us=/%7D/g,Ns=/%20/g;function Ls(e){return encodeURI(""+e).replace(Vs,"|").replace(js,"[").replace($s,"]")}function Bs(e){return Ls(e).replace(Fs,"%2B").replace(Ns,"+").replace(Os,"%23").replace(Cs,"%26").replace(Is,"`").replace(Ts,"{").replace(Us,"}").replace(Ms,"^")}function Ds(e){return function(e){return Ls(e).replace(Os,"%23").replace(Ps,"%3F")}(e).replace(Rs,"%2F")}function qs(e){try{return decodeURIComponent(""+e)}catch(t){}return""+e}function zs(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let r=0;re&&Bs(e))):[r&&Bs(r)]).forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))}))}return t}function Ks(e){const t={};for(let n in e){let r=e[n];void 0!==r&&(t[n]=Array.isArray(r)?r.map((e=>null==e?null:""+e)):null==r?r:""+r)}return t}function Gs(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e,reset:function(){e=[]}}}function Hs(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise(((l,i)=>{const c=e=>{var c;!1===e?i(ps(4,{from:n,to:t})):e instanceof Error?i(e):"string"==typeof(c=e)||c&&"object"==typeof c?i(ps(2,{from:t,to:e})):(s&&r.enterCallbacks[o]===s&&"function"==typeof e&&s.push(e),l())},a=e.call(r&&r.instances[o],t,n,c);let u=Promise.resolve(a);e.length<3&&(u=u.then(c)),u.catch((e=>i(e)))}))}function Xs(e,t,n,r){const o=[];for(const l of e)for(const e in l.components){let i=l.components[e];if("beforeRouteEnter"===t||l.instances[e])if("object"==typeof(s=i)||"displayName"in s||"props"in s||"__vccOpts"in s){const s=(i.__vccOpts||i)[t];s&&o.push(Hs(s,n,r,l,e))}else{let s=i();s=s.catch(console.error),o.push((()=>s.then((o=>{if(!o)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${l.path}"`));const s=(i=o).__esModule||Co&&"Module"===i[Symbol.toStringTag]?o.default:o;var i;l.components[e]=s;const c=(s.__vccOpts||s)[t];return c&&Hs(c,n,r,l,e)()}))))}}var s;return o}function Js(e){const t=dr(Fo),n=dr(jo),r=Tr((()=>t.resolve(st(e.to)))),o=Tr((()=>{let{matched:e}=r.value,{length:t}=e;const o=e[t-1];let s=n.matched;if(!o||!s.length)return-1;let l=s.findIndex(Bo.bind(null,o));if(l>-1)return l;let i=Ys(e[t-2]);return t>1&&Ys(o)===i&&s[s.length-1].path!==i?s.findIndex(Bo.bind(null,e[t-2])):l})),s=Tr((()=>o.value>-1&&function(e,t){for(let n in t){let r=t[n],o=e[n];if("string"==typeof r){if(r!==o)return!1}else if(!Array.isArray(o)||o.length!==r.length||r.some(((e,t)=>e!==o[t])))return!1}return!0}(n.params,r.value.params))),l=Tr((()=>o.value>-1&&o.value===n.matched.length-1&&Do(n.params,r.value.params)));return{route:r,href:Tr((()=>r.value.href)),isActive:s,isExactActive:l,navigate:function(n={}){return function(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(void 0!==e.button&&0!==e.button)return;if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}e.preventDefault&&e.preventDefault();return!0}(n)?t[st(e.replace)?"replace":"push"](st(e.to)):Promise.resolve()}}}const Qs=In({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},setup(e,{slots:t}){const n=He(Js(e)),{options:r}=dr(Fo),o=Tr((()=>({[Zs(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Zs(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const r=t.default&&t.default(n);return e.custom?r:Vr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},r)}}});function Ys(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Zs=(e,t,n)=>null!=e?e:null!=t?t:n;function el(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const tl=In({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const r=dr($o),o=Tr((()=>e.route||r.value)),s=dr(Po,0),l=Tr((()=>o.value.matched[s]));pr(Po,s+1),pr(Ao,l),pr($o,o);const i=ot(c);var c;return yn((()=>[i.value,l.value,e.name]),(([e,t,n],[r,o,s])=>{t&&(t.instances[n]=e,o&&o!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=o.leaveGuards),t.updateGuards.size||(t.updateGuards=o.updateGuards))),!e||!t||o&&Bo(t,o)&&r||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const r=o.value,s=l.value,c=s&&s.components[e.name],a=e.name;if(!c)return el(n.default,{Component:c,route:r});const u=s.props[e.name],f=u?!0===u?r.params:"function"==typeof u?u(r):u:null,p=Vr(c,Io({},f,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(s.instances[a]=null)},ref:i}));return el(n.default,{Component:p,route:r})||p}}});function nl(e){const t=ws(e.routes,e);let n=e.parseQuery||zs,r=e.stringifyQuery||Ws,o=e.history;const s=Gs(),l=Gs(),i=Gs(),c=ot(cs,!0);let a=cs;Mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=To.bind(null,(e=>""+e)),f=To.bind(null,Ds),p=To.bind(null,qs);function d(e,s){if(s=Io({},s||c.value),"string"==typeof e){let r=No(n,e,s.path),l=t.resolve({path:r.path},s),i=o.createHref(r.fullPath);return Io(r,l,{params:p(l.params),hash:qs(r.hash),redirectedFrom:void 0,href:i})}let l;"path"in e?l=Io({},e,{path:No(n,e.path,s.path).path}):(l=Io({},e,{params:f(e.params)}),s.params=f(s.params));let i=t.resolve(l,s);const a=e.hash||"";i.params=u(p(i.params));const d=function(e,t){let n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(r,Io({},e,{hash:(h=a,Ls(h).replace(Ts,"{").replace(Us,"}").replace(Ms,"^")),path:i.path}));var h;let m=o.createHref(d);return Io({fullPath:d,hash:a,query:r===Ws?Ks(e.query):e.query},i,{redirectedFrom:void 0,href:m})}function h(e){return"string"==typeof e?No(n,e,c.value.path):Io({},e)}function m(e,t){if(a!==e)return ps(8,{from:t,to:e})}function g(e){return y(e)}function v(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let r="function"==typeof n?n(e):n;return"string"==typeof r&&(r=r.indexOf("?")>-1||r.indexOf("#")>-1?r=h(r):{path:r}),Io({query:e.query,hash:e.hash,params:e.params},r)}}function y(e,t){const n=a=d(e),o=c.value,s=e.state,l=e.force,i=!0===e.replace,u=v(n);if(u)return y(Io(h(u),{state:s,force:l,replace:i}),t||n);const f=n;let p;return f.redirectedFrom=t,!l&&function(e,t,n){let r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Bo(t.matched[r],n.matched[o])&&Do(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(r,o,n)&&(p=ps(16,{to:f,from:o}),P(o,o,!0,!1)),(p?Promise.resolve(p):_(f,o)).catch((e=>ds(e)?e:R(e))).then((e=>{if(e){if(ds(e,2))return y(Io(h(e.to),{state:s,force:l,replace:i}),t||f)}else e=x(f,o,!0,i,s);return w(f,o,e),e}))}function b(e,t){const n=m(e,t);return n?Promise.reject(n):Promise.resolve()}function _(e,t){let n;const[r,o,i]=function(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let l=0;lBo(e,s)))?r.push(s):n.push(s));const i=e.matched[l];i&&(t.matched.find((e=>Bo(e,i)))||o.push(i))}return[n,r,o]}(e,t);n=Xs(r.reverse(),"beforeRouteLeave",e,t);for(const s of r)s.leaveGuards.forEach((r=>{n.push(Hs(r,e,t))}));const c=b.bind(null,e,t);return n.push(c),rl(n).then((()=>{n=[];for(const r of s.list())n.push(Hs(r,e,t));return n.push(c),rl(n)})).then((()=>{n=Xs(o,"beforeRouteUpdate",e,t);for(const r of o)r.updateGuards.forEach((r=>{n.push(Hs(r,e,t))}));return n.push(c),rl(n)})).then((()=>{n=[];for(const r of e.matched)if(r.beforeEnter&&t.matched.indexOf(r)<0)if(Array.isArray(r.beforeEnter))for(const o of r.beforeEnter)n.push(Hs(o,e,t));else n.push(Hs(r.beforeEnter,e,t));return n.push(c),rl(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=Xs(i,"beforeRouteEnter",e,t),n.push(c),rl(n)))).then((()=>{n=[];for(const r of l.list())n.push(Hs(r,e,t));return n.push(c),rl(n)})).catch((e=>ds(e,8)?e:Promise.reject(e)))}function w(e,t,n){for(const r of i.list())r(e,t,n)}function x(e,t,n,r,s){const l=m(e,t);if(l)return l;const i=t===cs,a=Mo?history.state:{};n&&(r||i?o.replace(e.fullPath,Io({scroll:i&&a&&a.scroll},s)):o.push(e.fullPath,s)),c.value=e,P(e,t,n,i),A()}let E;function k(){E=o.listen(((e,t,n)=>{let r=d(e);const s=v(r);if(s)return void y(Io(s,{replace:!0}),r).catch(Vo);a=r;const l=c.value;var i,u;Mo&&(i=es(l.fullPath,n.delta),u=Yo(),ts.set(i,u)),_(r,l).catch((e=>ds(e,12)?e:ds(e,2)?(y(e.to,r).catch(Vo),Promise.reject()):(n.delta&&o.go(-n.delta,!1),R(e)))).then((e=>{(e=e||x(r,l,!1))&&n.delta&&o.go(-n.delta,!1),w(r,l,e)})).catch(Vo)}))}let S,O=Gs(),C=Gs();function R(e){return A(e),C.list().forEach((t=>t(e))),Promise.reject(e)}function A(e){S||(S=!0,k(),O.list().forEach((([t,n])=>e?n(e):t())),O.reset())}function P(t,n,r,o){const{scrollBehavior:s}=e;if(!Mo||!s)return Promise.resolve();let l=!r&&function(e){const t=ts.get(e);return ts.delete(e),t}(es(t.fullPath,0))||(o||!r)&&history.state&&history.state.scroll||null;return Ot().then((()=>s(t,n,l))).then((e=>e&&Zo(e))).catch(R)}const F=e=>o.go(e);let j;const $=new Set;return{currentRoute:c,addRoute:function(e,n){let r,o;return is(e)?(r=t.getRecordMatcher(e),o=n):o=e,t.addRoute(o,r)},removeRoute:function(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)},hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:d,options:e,push:g,replace:function(e){return g(Io(h(e),{replace:!0}))},go:F,back:()=>F(-1),forward:()=>F(1),beforeEach:s.add,beforeResolve:l.add,afterEach:i.add,onError:C.add,isReady:function(){return S&&c.value!==cs?Promise.resolve():new Promise(((e,t)=>{O.add([e,t])}))},install(e){e.component("RouterLink",Qs),e.component("RouterView",tl),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>st(c)}),Mo&&!j&&c.value===cs&&(j=!0,g(o.location).catch((e=>{})));const t={};for(let r in cs)t[r]=Tr((()=>c.value[r]));e.provide(Fo,this),e.provide(jo,He(t)),e.provide($o,c);let n=e.unmount;$.add(e),e.unmount=function(){$.delete(e),$.size<1&&(E(),c.value=cs,j=!1,S=!1),n()}}}}function rl(e){return e.reduce(((e,t)=>e.then((()=>t()))),Promise.resolve())}export{Wn as F,sr as a,cr as b,Zn as c,In as d,ir as e,Ur as f,bo as g,Pn as h,wo as i,zt as j,fo as k,po as l,Nt as m,ao as n,Qn as o,xo as p,nl as q,Dn as r,ls as s,u as t,Oo as u,co as v,Wt as w}; diff --git a/build/public/index.html b/build/public/index.html index 186b755..4579d2b 100644 --- a/build/public/index.html +++ b/build/public/index.html @@ -4,8 +4,8 @@ 🧩 jigsaw.hyottoko.club - - + + diff --git a/build/server/main.js b/build/server/main.js index 5cdd983..108304e 100644 --- a/build/server/main.js +++ b/build/server/main.js @@ -344,6 +344,7 @@ const INPUT_EV_PLAYER_COLOR = 7; const INPUT_EV_PLAYER_NAME = 8; const INPUT_EV_MOVE = 9; const INPUT_EV_TOGGLE_PREVIEW = 10; +const INPUT_EV_TOGGLE_SOUNDS = 11; const CHANGE_DATA = 1; const CHANGE_TILE = 2; const CHANGE_PLAYER = 3; @@ -366,6 +367,7 @@ var Protocol = { INPUT_EV_PLAYER_COLOR, INPUT_EV_PLAYER_NAME, INPUT_EV_TOGGLE_PREVIEW, + INPUT_EV_TOGGLE_SOUNDS, CHANGE_DATA, CHANGE_TILE, CHANGE_PLAYER, @@ -871,7 +873,7 @@ const getPuzzleWidth = (gameId) => { const getPuzzleHeight = (gameId) => { return GAMES[gameId].puzzle.info.height; }; -function handleInput$1(gameId, playerId, input, ts) { +function handleInput$1(gameId, playerId, input, ts, onSnap) { const puzzle = GAMES[gameId].puzzle; const evtInfo = getEvtInfo(gameId, playerId); const changes = []; @@ -1054,6 +1056,9 @@ function handleInput$1(gameId, playerId, input, ts) { changeData(gameId, { finished: ts }); _dataChange(); } + if (onSnap) { + onSnap(playerId); + } } else { // Snap to other tiles @@ -1101,6 +1106,9 @@ function handleInput$1(gameId, playerId, input, ts) { changePlayer(gameId, playerId, { d, ts }); _playerChange(); } + if (snapped && onSnap) { + onSnap(playerId); + } } } else { diff --git a/src/common/GameCommon.ts b/src/common/GameCommon.ts index 629248a..6e7f701 100644 --- a/src/common/GameCommon.ts +++ b/src/common/GameCommon.ts @@ -530,7 +530,8 @@ function handleInput( gameId: string, playerId: string, input: Input, - ts: Timestamp + ts: Timestamp, + onSnap?: (playerId: string) => void ): Array { const puzzle = GAMES[gameId].puzzle const evtInfo = getEvtInfo(gameId, playerId) @@ -734,6 +735,9 @@ function handleInput( changeData(gameId, { finished: ts }) _dataChange() } + if (onSnap) { + onSnap(playerId) + } } else { // Snap to other tiles const check = ( @@ -789,6 +793,9 @@ function handleInput( changePlayer(gameId, playerId, { d, ts }) _playerChange() } + if (snapped && onSnap) { + onSnap(playerId) + } } } else { changePlayer(gameId, playerId, { d, ts }) diff --git a/src/common/Protocol.ts b/src/common/Protocol.ts index 421b80a..1a5e124 100644 --- a/src/common/Protocol.ts +++ b/src/common/Protocol.ts @@ -58,6 +58,7 @@ const INPUT_EV_PLAYER_COLOR = 7 const INPUT_EV_PLAYER_NAME = 8 const INPUT_EV_MOVE = 9 const INPUT_EV_TOGGLE_PREVIEW = 10 +const INPUT_EV_TOGGLE_SOUNDS = 11 const CHANGE_DATA = 1 const CHANGE_TILE = 2 @@ -87,6 +88,7 @@ export default { INPUT_EV_PLAYER_NAME, INPUT_EV_TOGGLE_PREVIEW, + INPUT_EV_TOGGLE_SOUNDS, CHANGE_DATA, CHANGE_TILE, diff --git a/src/frontend/click.mp3 b/src/frontend/click.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..af958b7f947a40692fd0f3f03a0f84708936ed06 GIT binary patch literal 6783 zcmeI0XHb((|L+3?h=52{K#&$f73sZ54<(e)rFVjWz)eR@=phv89iPzlNhKU zo2ur3I)D1~2jnm~WI0x)^XN>Ti>`wCxmnl5{H2KAn?^Jad; zb#ZP5?K3Cac!`ItR^bnPUHr=b#UL^2^@}gXg-81wf!gq%9Fyy-tu^?yy8bzTW88W* z{OLZQSz}}KoZTDA7d-R>8KSM<)l=M-BA1PJ9r)f%IKTsUu7Yqpv)l7C%t4o_l9tW? zkX!EgRGePMRjNC81kTXyHQ3@m!Ht!UsEG&w@Bjip7HUFZ+SOglEGHti_&$ui1AbR8 zTWCfc2ue1c{RuzaL}IK5H6j`|(5=9p%x^`|5ZWg!0z|1c1!E=yLvtTLu%&vWLco{t zx;Gf)f#nXmZ&QQs#Ue1n1!Mc*5yIPv=M*JL35^mBEc9j>6H8QHq{+-uXoHtsWxYth~%q2 zu{~7*hh&4Zk@*yP$#2zyUP8y?rWujk+@+jmZT!NlH8VfXKhKX%vPOD!mp1Wy7i=^} z21zxU_OGNbmued|v^%H|WI8X(6(wiw1#Gx0(tIi;0gw>@i16?MC;^tt;BNAW)<2s& z*y??TVw!j$=U~zBGD0cL#HIpvqAhlf4&&x^N@;*MWLERZbz4Xbk%h!xBc)D~WHW^# z#;=M}hn}}TA-XpdHd4xx@~t&Jl)12Yk-vU_(aGgIn=j3gMevcQn@>?o#e@2Ecjj#yrck1boMf1HqdiV)(tkh*8k|WvRXgq+A-XgQ}R4y~s1yo1A zqQ=%3FcPh7>Sp{KA#xiN?AHMxeS7`aFTf$E!*jS1>kyu(0>krmRLG>zmb}n`E*EWm znxyxHv@xGypW(oTl)0Pc`58`VcH6`zWs~Y%?VwJYU2LZ2vsB|>-Mjw1INZ&6kIC9> z>i`=7`@e!IUL--jmK|Y)gq+7l-^Gt0>&*)ChX5IDKq^PC788rY7#l<=q!thy!<;Um z9{GSCjVfiOGNDnnRvs9&b><`?E6bp;iJ(NOed!vmxo-!72sDu-sOy11wdyfBj1s>i z?=k4vWHr*)))oOH@aXZ-0$93dvEU>EJTiMm3Zvdve6NbAxhW3%T)hgLa_`DM?#Zfr4r6sF!vxmS z;Z=82D3@7KuS#7^bSG5&z-Em^H_WVw^1&dMJMu%YE=+y8&w^|GL<=%=GL{;dX&|gu zATxF~>~oH^g!Wc-$MrPy2b;ISN~c+&uSB1T=D03rzMoHDh&8I8N;bgyGM+xv=N{xLhitvKCg!XSpJ<;d;ov~FtgovMjqwyZS=hCQ0t!t z&vJ#NwmOx%+eFBgoTbn z4fwE=sq1~)#h7iR>3BVfH4%N6?Ng&;{Hm`^)xv!oq#>C>&qxx#>(Sp<^d3mV| zuZ$|BI^KOP&<@&kXsZj7U-w^&47ylsH9puC7haqzn<awM~qb;b)=>oSq>{t1^`FtfpddUAMr@8CX;-{(D)9qHIE;oE3W~5>oO{af{U8_bq}cK&|Lv ztDgiesm>)~qVwx{7B+mCKVy3F9zf-a`Cuk80d=KdenCwtN=<0d<6wBQIQbtMg+inV zD=%EIH8+qnTpf2=WB(N&^3r(>X$Js!BU+d@asjj!Z{&Am?+r{BJ6#87_&>BPA*()C zVEB;~ai8BOvY^POir;W^`=kGRv?l*YTToM8feI`?Y$fy5tQ?0s)xlObX$F3SKzLqO zVHmj7R4Y3%N(+xjxa_BEg@*LURfiG+8HOh6P$5YP8u5$I z4IgVx)A|$H7pk07#~Lgjx2` z(As>&Lxo<;_X^jdxZ^aGXE$tAX5LU8l$F;T=uly0TZpz%)o5IZp1a4bg;T`OGY9wL zlTM8U?c*+gZ9NsUu-kw2aP@-_D!ldJuXxAR%Rk6zEefs^GctTux9x;l#V4dVO*i>pU?Oou5fnyvw}j*cb@qQ>%ZR)6q4vODpaP&AbnL z`)Xw$_Xk(z?EkOhhEc!`EuBlP`}rQvn{oEGui?uU3OnHOfwkhzm%kZ27k(6(9D?q? zCKCFx-GSTJOF$9C9oZk@>1KsjC}MK4pl?H5WGFf!y@$T~l2I0 zC2u)v3vPI7&MDu5jgQ^^zG5SjsCdczRkYM;>~gu?t1; zdDSm@dmp(`WD=6h?55`rcX{!J$?EzNBP0gUZjUTl<0V3UQqI>oIiBfBeT8Sj$nruP zO^<;+hymA4yCvqui-3cG@*_6n*#iV zahfz{-5KF`d+?5{4z7WPh6DX zKEkYHdgOlRLUJu9Ew8gI6DJ??+7@#iv$jVV8k7netq{?Z$>^3R1ypyO--H*cOpr96 zhjZ{n%JA2bbX&S?+{nqFX`YpphcQ8~C3@nXooDU1inU(0!?E%B4u1C@@+w+;63KA& zZOg!o3Oyu09!(?kO1q#K5W{z;$@c?QWF$N=7IcTu0Q0eRK;W* zz4|t>ING*ex977=I(`cmx-(`D=dF0vuUbb7pLc2)d)`a$h^28R=}~88?F}Ho{ z%k)QH&Ypc^{MT`-C}4^9SkOHUp;u%V%=XZ9xL&CIP7!6)@%xgigZ%LeKIm^tSy#7@ zuhL^!W1qN@CRS>QS{^QmmGu!9vWDo57NN=lWgx%bBm)-Q=-X& zr@y6lTC@Iy>VN*xcD1lsfG%y205EnKYOzehnkNHMo2Vo4n01}_F^LW_CIy3XBanR1O;!@6ud}-UxdM-Qt~(JsfK#}c4v<;-3~MAAtHCln_af|_e(FTi&o;wv8agV3cqux{ z&)Wz?K7D1Gmc?D>+Fzi6=K9(}WJ+Crq^3BVa1*^Xaq(S&VTE6i;(&;|)+qZtXE{7D zr3ec=N>uyoQblPgWzKf|zNzyblt%G2u(Ke_jeVk+uRKveYqwJRX^KO zIc14n$k$XA4qK_l^PdH{#6C^ZkP>!P)$sSWt3%LSvvzfSmH%cRrrDR5CMn1&&$0K- zO~beP=DJOGzb&gX^PYg3m3iZ7yRu}R>)um{!%yo0UQjZKf$2aUpC5}F2hr6qjDY3F zhNfntds)L&Z{GI(8+$fTz!7cDqjabTYWNq@A=Hv`mz{SP?1>R8Es_l-4-h?d(f~t9 zSoHV`KBv(%vM|Ou!t&$r2gtZQ#QeUm`x=u~AWhMP)hQm^(wJdN(p zuc*9;#f1JTygm;?2CfE(AUBNk5?#gYHL_Y{Wrq0#*J*gy@NC z7C1SJ@40+(IncSe`HHAz-si*&_b3aqL06#h9{5pRU3rP1c+)2s0(0#a8%dI!KI6xZ z;Z3nLK*G7Fo>8W|$!?62&z_pGyG)ysk}?kT1-48enqMZ_8a|>EC1OxP%aA;d(qkI9 z^8xF31lFxx;ch8h8-1)T-ytG90(&;R+~BiuxIrnrP{N4_xaoKy-f<-0&5*NCNeHbgQ+RRuyCW_ zqDhGQdmt~kJa}#$r+kP4qMS5??mYYvTOMF#gSOYJ%;DWBe1VaZ{MT^^(Kp_UXPcFN zS({VuD{{^u8Z&(X7PcU;@4cumf|3+2x~uz0DVUT|!hL&Ojq#XbLX+aE^R)DOkE3RY zYwK2()rJo8xc<%6?>PGjmJb|1u^XJ#~jK%9oeDqwSwC8%7T0SJ{D+5RkT3hH^{7on+lZRepPt!ONPuq=58H z*@W>oz~6TT31x#u3cP#ds*r)^B4T!2Zj8TteVd&JbL%YLObt$+o{Q=nhLgTXZdrBU z+rtD%ayso-uLo>YtYeXQ6m15>L;0#n2nr&aBD8?Qct^#YZKXk5F#AYd&9HR|?RW-i zC5a@9L5Ua^97FEY#haxB=hYQ0lio{O7@0EL?Q&%Ho(N7-T@49{(_n3cir12{JJ`_< z303ZSsL_||o6=J{_eiiUl^A~xG}Zbh%rjSf0Y1N6n&~hs9$f6OYJul&sjg1zaKhMp%HUG1_BBkHak;K+xA`Dh#Y}lZhZ5`!&&ONFtdLBGN z?UCKLeOu7tbUbAa4)~`gN|3j{7Vi6 zπŸ–ΌοΈ Toggle preview:
Space
πŸ§©βœ”οΈ Toggle fixed pieces:
F
πŸ§©β“ Toggle loose pieces:
G
+ πŸ”‰ Toggle sounds:
M
diff --git a/src/frontend/components/SettingsOverlay.vue b/src/frontend/components/SettingsOverlay.vue index 4a940db..01155e4 100644 --- a/src/frontend/components/SettingsOverlay.vue +++ b/src/frontend/components/SettingsOverlay.vue @@ -13,6 +13,10 @@ + + + + diff --git a/src/frontend/game.ts b/src/frontend/game.ts index b253bb9..002a26e 100644 --- a/src/frontend/game.ts +++ b/src/frontend/game.ts @@ -31,6 +31,9 @@ declare global { // @ts-ignore const images = import.meta.globEager('./*.png') +// @ts-ignore +const sounds = import.meta.globEager('./*.mp3') + export const MODE_PLAY = 'play' export const MODE_REPLAY = 'replay' @@ -46,6 +49,7 @@ interface Hud { setPiecesTotal: (v: number) => void setConnectionState: (v: number) => void togglePreview: () => void + toggleSoundsEnabled: () => void setReplaySpeed?: (v: number) => void setReplayPaused?: (v: boolean) => void } @@ -171,6 +175,9 @@ function EventAdapter (canvas: HTMLCanvasElement, window: any, viewport: any) { PIECE_VIEW_LOOSE = !PIECE_VIEW_LOOSE RERENDER = true } + if (ev.key === 'M' || ev.key === 'm') { + addEvent([Protocol.INPUT_EV_TOGGLE_SOUNDS]) + } }) const addEvent = (event: GameEvent) => { @@ -233,6 +240,9 @@ export async function main( return MODE === MODE_REPLAY || player.id !== clientId } + const click = sounds['./click.mp3'].default + const clickAudio = new Audio(click) + const cursorGrab = await Graphics.loadImageToBitmap(images['./grab.png'].default) const cursorHand = await Graphics.loadImageToBitmap(images['./hand.png'].default) const cursorGrabMask = await Graphics.loadImageToBitmap(images['./grab_mask.png'].default) @@ -404,6 +414,13 @@ export async function main( let finished = longFinished const justFinished = () => finished && !longFinished + const playerSoundEnabled = (): boolean => { + const enabled = localStorage.getItem('sound_enabled') + if (enabled === null) { + return false + } + return enabled === '1' + } const playerBgColor = () => { return (Game.getPlayerBgColor(gameId, clientId) || localStorage.getItem('bg_color') @@ -614,12 +631,24 @@ export async function main( viewport.zoom('out', viewport.worldToViewport(pos)) } else if (type === Protocol.INPUT_EV_TOGGLE_PREVIEW) { HUD.togglePreview() + } else if (type === Protocol.INPUT_EV_TOGGLE_SOUNDS) { + HUD.toggleSoundsEnabled() } // LOCAL + SERVER CHANGES // ------------------------------------------------------------- const ts = TIME() - const changes = Game.handleInput(gameId, clientId, evt, ts) + const changes = Game.handleInput( + gameId, + clientId, + evt, + ts, + (playerId: string) => { + if (playerSoundEnabled()) { + clickAudio.play() + } + } + ) if (changes.length > 0) { RERENDER = true } @@ -787,6 +816,9 @@ export async function main( localStorage.setItem('player_name', value) evts.addEvent([Protocol.INPUT_EV_PLAYER_NAME, value]) }, + onSoundsEnabledChange: (value: boolean) => { + localStorage.setItem('sound_enabled', value ? '1' : '0') + }, replayOnSpeedUp, replayOnSpeedDown, replayOnPauseToggle, @@ -795,6 +827,7 @@ export async function main( background: playerBgColor(), color: playerColor(), name: playerName(), + soundsEnabled: playerSoundEnabled(), }, disconnect: Communication.disconnect, connect: connect, diff --git a/src/frontend/views/Game.vue b/src/frontend/views/Game.vue index 51ec604..fbe3b77 100644 --- a/src/frontend/views/Game.vue +++ b/src/frontend/views/Game.vue @@ -70,12 +70,14 @@ export default defineComponent({ background: '', color: '', name: '', + soundsEnabled: false, }, previewImageUrl: '', setHotkeys: (v: boolean) => {}, onBgChange: (v: string) => {}, onColorChange: (v: string) => {}, onNameChange: (v: string) => {}, + onSoundsEnabledChange: (v: boolean) => {}, disconnect: () => {}, connect: () => {}, }, @@ -94,6 +96,9 @@ export default defineComponent({ this.$watch(() => this.g.player.name, (value: string) => { this.g.onNameChange(value) }) + this.$watch(() => this.g.player.soundsEnabled, (value: boolean) => { + this.g.onSoundsEnabledChange(value) + }) this.g = await main( `${this.$route.params.id}`, // @ts-ignore @@ -111,6 +116,7 @@ export default defineComponent({ setPiecesTotal: (v: number) => { this.piecesTotal = v }, setConnectionState: (v: number) => { this.connectionState = v }, togglePreview: () => { this.toggle('preview', false) }, + toggleSoundsEnabled: () => { this.g.player.soundsEnabled = !this.g.player.soundsEnabled }, } ) }, diff --git a/src/frontend/views/Replay.vue b/src/frontend/views/Replay.vue index c4e1d33..23c13c5 100644 --- a/src/frontend/views/Replay.vue +++ b/src/frontend/views/Replay.vue @@ -69,12 +69,14 @@ export default defineComponent({ background: '', color: '', name: '', + soundsEnabled: false, }, previewImageUrl: '', setHotkeys: (v: boolean) => {}, onBgChange: (v: string) => {}, onColorChange: (v: string) => {}, onNameChange: (v: string) => {}, + onSoundsEnabledChange: (v: boolean) => {}, replayOnSpeedUp: () => {}, replayOnSpeedDown: () => {}, replayOnPauseToggle: () => {}, @@ -100,6 +102,9 @@ export default defineComponent({ this.$watch(() => this.g.player.name, (value: string) => { this.g.onNameChange(value) }) + this.$watch(() => this.g.player.soundsEnabled, (value: boolean) => { + this.g.onSoundsEnabledChange(value) + }) this.g = await main( `${this.$route.params.id}`, // @ts-ignore @@ -119,6 +124,7 @@ export default defineComponent({ setConnectionState: (v: number) => { this.connectionState = v }, setReplaySpeed: (v: number) => { this.replay.speed = v }, setReplayPaused: (v: boolean) => { this.replay.paused = v }, + toggleSoundsEnabled: () => { this.g.player.soundsEnabled = !this.g.player.soundsEnabled }, } ) },