From 22ac06ecd77358f09194a95173c3ed76573f88a1 Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Tue, 12 May 2026 20:53:21 +0000 Subject: [PATCH] feat(client): add PWA support with installability and cover caching Add vite-plugin-pwa with Workbox in generateSW mode. Includes a web app manifest (standalone display, shortcuts for Dashboard/Libraries/Settings), iOS meta tags, and a service worker that pre-caches the app shell and uses CacheFirst for book cover and thumbnail endpoints (max 200 entries, 30-day TTL). Add useInstallPrompt composable that captures the beforeinstallprompt event and exposes isInstallable/installApp. Wire an install button into SidebarFooter that appears only when the browser signals the app is installable. Generate PWA icons (64, 192, 512, maskable-512, apple-touch-icon-180) from a new pwa-icon-source.svg using @vite-pwa/assets-generator with minimal2023Preset. Add dev-dist to .gitignore to exclude the dev-mode SW output. --- .gitignore | 3 + client/index.html | 7 +- client/package.json | 5 +- client/public/apple-touch-icon-180x180.png | Bin 0 -> 2009 bytes client/public/favicon.ico | Bin 4286 -> 962 bytes client/public/maskable-icon-512x512.png | Bin 0 -> 9852 bytes client/public/pwa-192x192.png | Bin 0 -> 2971 bytes client/public/pwa-512x512.png | Bin 0 -> 8460 bytes client/public/pwa-64x64.png | Bin 0 -> 816 bytes client/public/pwa-icon-source.svg | 25 + client/pwa-assets.config.ts | 6 + client/src/components/AppSidebar.vue | 9 + .../__tests__/useInstallPrompt.test.ts | 108 + .../pwa/composables/useInstallPrompt.ts | 45 + client/vite.config.ts | 113 +- pnpm-lock.yaml | 3818 +++++++++++++++++ 16 files changed, 4136 insertions(+), 3 deletions(-) create mode 100644 client/public/apple-touch-icon-180x180.png create mode 100644 client/public/maskable-icon-512x512.png create mode 100644 client/public/pwa-192x192.png create mode 100644 client/public/pwa-512x512.png create mode 100644 client/public/pwa-64x64.png create mode 100644 client/public/pwa-icon-source.svg create mode 100644 client/pwa-assets.config.ts create mode 100644 client/src/features/pwa/composables/__tests__/useInstallPrompt.test.ts create mode 100644 client/src/features/pwa/composables/useInstallPrompt.ts diff --git a/.gitignore b/.gitignore index 9040ee054..dc7305a7a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ test-results/ # IDE .idea/ + +# vite-plugin-pwa dev service worker output +dev-dist diff --git a/client/index.html b/client/index.html index e793e3160..f3962579a 100644 --- a/client/index.html +++ b/client/index.html @@ -2,8 +2,13 @@ - + + + + + + BookOrbit diff --git a/client/package.json b/client/package.json index c2619443b..730e7331e 100644 --- a/client/package.json +++ b/client/package.json @@ -20,7 +20,8 @@ "lint:eslint:check": "eslint src --cache", "lint:eslint:fix": "eslint src --fix --cache", "format": "prettier --write --experimental-cli src/", - "format:check": "prettier --check src/" + "format:check": "prettier --check src/", + "generate-pwa-icons": "pwa-assets-generator --config pwa-assets.config.ts" }, "dependencies": { "@bookorbit/types": "workspace:*", @@ -44,6 +45,7 @@ "socket.io-client": "^4.8.3", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.4", + "vite-plugin-pwa": "^1.3.0", "vue": "^3.5.33", "vue-draggable-plus": "^0.6.1", "vue-echarts": "8.1.0-beta.2", @@ -56,6 +58,7 @@ "@types/dompurify": "^3.2.0", "@types/jsdom": "^28.0.1", "@types/node": "^25.6.0", + "@vite-pwa/assets-generator": "^1.0.2", "@vitejs/plugin-vue": "^6.0.6", "@vitest/coverage-v8": "^4.1.5", "@vitest/eslint-plugin": "^1.6.16", diff --git a/client/public/apple-touch-icon-180x180.png b/client/public/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..01f6ef9011de598b7e5d5bd8b90ddb1f17f81f69 GIT binary patch literal 2009 zcmaKt{XY|k1IH&hOl!$Zo}0MuqEcZ*huX&0+D=_jE2GGo*^$S2xGBohzDUZ`4K?dX zQP`B_;gp@Hwb_)_q@$dTh?(QIzhAG<>+}03+mGN20-6B<000P!L7n_+ z?ziY^ez2WAR8MSlaopu4w;x3!)BLvcX!#DkNp01rXPhl z8v_7nE5AjHmwb{60O*EdQAbYE+YzgjL2JW@=os*orb zdj*J$of=I#GD3200osO+{9j6D-*F-0(qQwj`v`wkmVX9n7Tshmheu09dmc=uu3WHq zaQV{EB+1z(tf38@qyMF};}*)I5$BJd$=tx$h%l82`PiO*?{>{du#VCVkW zdZ@Q0GQ2Z*vfy;z%zz`aJrGZ(v$M>Ebj>np_c6V8TY`e|olg)2Js<$QI}ILkdF zW+;W@r4Sx>@3-+y@9)RI#A{{BFhRztnWdv^Mb*61%lj|&ix~Wp`Jge1c~q4=ytj4{ zGP6DGS}0xO5NJvfi`@XwY%A*3ujEBdBaJdgPOOH6pt7*?cSc+2E_%KCl zQn)VIvf1BW;zIUJR_4SUv&)M2GQ2+vb{_2SER|T*(qgsW#Xc!jS+56>;;7Q(aP z4bfa4m!%-AwDmSuwqSG(ljwtcFD3sOOT7|iOS^(hfCe=C1^TqIoXja;`Hi|W2O5=# zQssWbF}xH}_6b5v;=lPk|D>F6Tl`*g77Y0I|C=-q#SMadXY7_Wp{dX4+t$uH^CMw&V%1Nxq$ z#-4&$KvggPB3CF^hDRCSL&_g*L&-P|@jmZ7YOJ-skliJ0d({GOJVE9Mi@SpkmzGq@ zP$n5xwsnSVyp)|?*1A}O$sg7Zmp-ecpaMXA=;Xa@y2^QuPCS)dhGu=qI1KMwxA?rW z`EF+^D|UNeVUcXD_?E#kAnL^=v>^AUoI$jd4JcIp4_Cl+26SoJGIg!DLx~eT&-LS1o_wWw2KA7BN9|gHl z0Rjm$rnS@gq=Gi4+|^a^Ce+(2qBq=oolQe0jcO_0QpU zK&jmnm+KDB=nlO&>&84B?bc~WoRDnYeRLy&6xn0$g`CGNwm7ihKF z%r8-TfU5^bf3iQ&Ss`{Rfw^DtYUg#^|v z9X0XBF(iUyqj!DD3}Mbt6Q|H_;)b|=M?{z#GLaFIBy3NkDKP)M+-49nr_4K^6R&0o z8mr$d=xl9b$ue0T_8|pol$Axp!mInX9UtE(bdUV)C_YrUgKs|fv!gswSenH>$CoO1 zlkbjh2~*A2WU{arN0QYWC%wK>6#rcNwi#10P?|A1)#A(2|Go;=GCr$M?i44^xeIhz z*DBRY!JX(5H9M5gbZ~q;7U$-8(Z8#>A@2%F^4Rhv@9C|=rqE}L2-5!ZBO-5Du_|q> jumh?|3{vtE-3B>rr4Go&Uu0bSDx}6py71 z`YYkJB~C&fORoSZb%7JS>-RI^^;k%46##W1c#7|W*Mo@jNN~@4ZF4Q?OX2lkr_(hN zw9YMMUh8$2=MTpqE0KWx95SEx@H7fu0k@j@{5%3@0dvWG&O)gl|EvNo%{;cPs!g}u zzID6ZpJQOTEMKn%pZ75la7pF?-8Apr;qccPIHuWc%ktGJ&Idmc;L4^1ylp=QNGwAL zWu8U?zuZdZeogZ}5*UIX2}rdJz&HS)B%Vjc`F?FL1j|x*tAJE^%C7W+rG2;Cx4}vz z0^%g_S+*Pti19oD;G{TV3_Rbzsy4%Vx_%@A06!5B<9W(_EIju=C7`M{qtV21B=A-N zlAxiEwT&6Jiq*Cs-fMuvCkdd;;pEq7QdOUQ1SJORB=AWBC~Ki=11n;Luss6HW)CpS zWyO*sfsYmd02*exR$L{L*LQ9Y-mpwat=GeTIDQB|T7YRESLS(5$3DD6lX#cM8#clr z_-FyJ0S*qox;#zWP(!j^wAjWaV8{AH2tHbX*?fGJh1Ykoi_hbEpKYF`n-ailze_-# zKST*o>i+92#Qp8EP?jyl76N>f05gLw0he6FS+*RFUU@#%vB%uvKg6x|?|X+vCjbBd07*qoM6N<$g3P6^4*&oF literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/client/public/maskable-icon-512x512.png b/client/public/maskable-icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..658051280d8740fee270ea5826b349532bdabcd5 GIT binary patch literal 9852 zcmdVA`9GB38$W*Txo5-3Sjti{+EB7rQkh#NN`+FqLNiKeV_NO*+fr$z6_rd;w4s$s z%`Fur(L&0;Wyvmv+0NJd^GAF?kIxV1an9phkLz*Hbv~@2I_b92NmW@-833TV z)_L_N04S3~3Sgp>UCEs}Ws{wb+jBgYxq3kBkhz`Ec!j z97+P`{|*6wcKxp*&muSN1%LzAu6FPU``zbz@>ZQO>(U+$gryZj7j)*tlFd5aJ)@G} z4Z$gXHX3%#8NY6;_TsS!`5Ev7fQ2xG)9!=0-5AgbkkOmGQ=BTWz<^k^J>AR-M~bVN;VB^mkmWqR_KBwtic6P zErG&c$lN~X(R~Brbsjf&VClRbgUAM4JYAmG3MsVZZ&Zw^WNXL8z7HU0C!vP)PKSAU z5%Vc;GDLX%%(Y;wNTD;r-2nJ`(gB;?rqMCETQ}pDS`#K@;+7sZjQAjkmGAHM@dM97G}afM%4WW20In!6Y#qO zP4E7WdLq2Xnu%OlV|3lSr@RcED%! zu216=P0wF3_~v%yvSqWuhYW7a7OoR&_I_oO6fcY*Mjf+n3KJ8CCOHP65#k(;H>H}l zK^G1FkM8VmqR&7q5Ts29E>YR%ow2RVU=a*9fV?3^#vc0%RK%Up_(W zH=@9f6t8*t_aS2?vVKKSx5~LF{o{`)?Ax5=QMvaMhxcWJ1p{#RwA64!;|)tIE0zMS4 zyNC2v1B)Z1%g#Q>G#6;e2#hBd}|WJ7U!1`VkE z1gEm}g)3lopQ5)Pz1j#5q*KV+=|3#UR5vzV9R$R44b{DtKqp^uUramTETlGm06UGr z2X*W>MaLS1E9V5@yHdvUBrsM{l3W$L7>q|1tVam)BrK~NS!h@-as4T4sD_@CGMi9y z1Ay0F!te!wfM$bO&jis61CQ^po1TDFtw-wj3eqW2M_69~L8{`;O!5HDVN~K84MUR@ zsgGTAb}I75BGHy1hg1L>-*IVQ5j0XPAi}lnH=b+^B*IwworAY4wur&mG?nw zzGw;RFB8>SLRaUEgoGmsypKNXPnQ{m@1@7STN=_Y_gEws1iop2_a8&@gUsD|Qr+j$ zyP!Upy**B($IYDZ6^9E}>IbC&@NUS!KtE_m;eq~}hFCbGk6Fog5Xoma@fxOVd$aYK z!G1}`Ny?Nd#M6ol3v89V;LB{;Q>xDQES?oJYblE9G%GsFfLGbbjh&mIw^(Fykh}2$ z*x3k)y`yLBDBh#E9__Gati_I57KgsHFBI-<%liTQ#_mIxm*iS*6oVvRT^BthMocR5kn~B)n$GV_a znH#o}_BxPQ7tM+M0Uh;#^)X_hB;z!t%HRfKOmnl$zpXGhGMlWoAH{82F3OhWz5`ip zrxW3nQFxCcC=d^F%^I4#;N~jOUj_Ik{5q;vg)A?3HrDeOCT}GA@4$-%V7VRWa&c{w zIsMpADbphQJYm5)+A~XV{Wy}^V6eZhDNTZ>!%%58eD7=UTQ^^CAR~w{@d2BDoyc7X zJ!4q@YIS|SkWqLR;p8DTlNOq7Z9%ZdkKBc&y)xGVT+XwDyR^`v0~Yag=gr&=6S!PD zz?^h7aBr^EvkPB?l3J|f!$iSt`0Qn#w@%eoSQ;GLbq8jab4}2vZ(zr1GD}04{uj3D z5y$KD{6Q3cOlcUT|4~f)ge{Z84-zgXldC7eA7vo{2ap35ogc(--`uc2U7-)5%bJy| zHp7q`h()++>IuZIKkhQ;aV&j1OvlwyD@JiFgKF0UzguA0r$X%D{ok-Dss6;Pg?Agc zozaN$Q$|07P!>&%Z%kY_YO`)*g|-0O-hmf-Ujuwp=z z+p=WoCGU&$DEU^``{*s{z>^-t&fx}z{rE@~gf)A96wkwr|p!41l}qA3x6^1yBh z?uxe-dt|4d85KxQY()6M@wY5NPZsj8#Lo7_m>+|_xXcD7Am}o9QHxn8de`fTl#lZFt$D_yf7N)DRc?;DhO?<>5Sz1&@1^jF zBKPpThbPonw6OiN)|SEDHe@d=zqCIj`;LGAzXgBb9Km2u{>mT7Tsl#10eW-@U*wKw z`-&jA3dwDaHatl)D*=;{(YOV111?lJ{}@rN!+FprXTAwRr>E+J=%a9WI)C?kGU=sk zUwBhz(yJ}yz|9hTQ3LN9wVM5>2;Q`e-`o$E908|ZTID2BnrG=v#(l)E{X#24apHtA zjk?|6{^H4A^RIt-Rp1E^Tls4DqS~e6Ch=EoHd!-*aIWNJA$5lbP7y zkX#gEQ~3Ly;`jvjwl>G$Y{+n&a-kMlm^-<)bB#I+eZdqrRkxD*Oqu0haRD z^)J_$6LtUJ&p$+0JFhe=LL*o_W3>m1;IlYq7&}6diQ|8HH{pNEgB>0Q<7jl$`pbXCyVOZb;BySo z`%svS0~zr^^mMpe>Ng)r{uye+wxQ<)fTNVG^1mXXPhZwm_{E)Y{g_@keC)9s|LQ8U zcVNFZzR0d>Q5C*HR#{1zC;6h1^!mmBah@o;9lx!Bl$A5Ny=}i$Rwmv`m|*Toj=>YVr@v z9|6;u&F@%l0_E%AU#+#G(gHg)&qAsfW=IbTqd4#8cx2=A+wd}XaF?+|i728u>+wc$#7@n?>prBZu48d7k9TKf)8zAO)+(JzBX6yw9XNQS@MkuG>&qc&L3 z36FcPq3p|oBUaegm4{^6YvsTiu~npi1PW#AvK1i*w&YlF`mI>PH}KqR*(O@y-^cWo zSEXC0h3(cHjCd&C@QFfp=B*y_5~j@yJvZKw_EQ@9>s^yQG%sk~ zdA$+upw8fFMFoI;U*L#qe6SCN_={=<+DkORETiUMb>{?=XCj6NX4!fu1GksNs0!hX zq%But5NhhC_fz2omRmRMF6&G(63pHXIKQN-{szWX69c)&5uc>LF%fjO3hA>3Iet%u z-yP40hz^ImFG>#(c={0$FiGMhbc^g%dC&8ih3WtET20QM z+FPt6Y>}Iv2V1D%nH2AK5!f4Ccf>By=j@Ej1;j!{(|L9F1B$T|aPv>d8ao}%Dmxc3 z)#+kZQmiFS*#B2oNB9w{xFR>-BE%;~ejT^_5dVWpS?1cdktE}0D^^u0JRQ%e|IjH4 zLv0ISK_TpRpiroahErRLJ*&Xk*_ehAc^o)|!qXbWe#-k(3#;mbuVVJvLa{s}7P%_p zN>97F0O5W4w8KrOG;PXppU2i+HzbE#UYL%zv+}E9DSC613Z~BG>}dBanD}eL(hb{3ukDA2GIblqq-t5J#`~uvM9{sW&&igw9pj%UE9l)}w{1(I4og zBzrD=Rph%kEXPYxu}HF9kyC8nyw9B|nzn5NaO1~@IC>uFbQ#8-=r%`4B&c_C^I1RYd@A&uU$=n9`q`Ih}{o2vK*_Z=b+C#Jn5Sw2hKow*Y^h3ojjU zYebCX51J9;{s>K_QCD-#kJ~Fm=Q$bXDwS&iTM|Vq0BSqF{p5zuTxLEm5iK3?|IK|eL%*I}PiC>2 z3%`XJ*)v~VpjJ)b2TIQHDsatdA}bYgi#vId@z!>#ZQU8pKE2M%A1OpC8gQ%l^YQau zH6v*&87EQW-GFGB#a~AkeA~u05qTy9w+L1kWM|c7jDca-V}?ijqO{0Ggyb{@OM|7q zi-oyeaQA8;JN2S;6xRku^6iG2DqF3H>Dd$`e_-?s|2QXk0~*Vj=t@o{?MK(5e4S!8 zQ8$zx1b)M{3W|2R`lT0R;VT7k)SN+>HW9}PEpOu+W+GOnn?BqnyLHHpJ>2jaSpQt( z5$5$V$mo|HazRqV=LmNJ6nhJ9{X10cK>QrXIdXXJn%T&j6NB~I37Bvb%JPW4Xi1dQ zks}~y82(eY&@-R+dc^L{qf8x|4)~_)aO#_Dwkjnm9tQ5f%q#JWP6$1@*1jBk(IM*b z>@kGn7&{-DFO+QCpBlUVt`j>7+lW@3C)-*{6CKPNJf5YRd~IazIDYeim;2xXt;1W^ zAYmJTv$)Bm5nAmgx>C0&GQ3-E_d&JZ)RcN}5LlvtSbt_-Xo80wz$tg(TNwYe+x3@} zabv|Yca%BJObHArJl_Kr;CQoiCUC7aktx~4slQxHZCaF3)B};P7HE~{MJn+%V}<`< za-^HbA_dK!UH=Y*Eu!=LMUAL)TJvMbvm`nt(H>0xl4B}*L_ejt_%4}Q$((;S=G{?1 ze1faY(z14dyj{ehT$tY^8_&r4(79 z{u&^{gi|<~__I)CRLqNupyr%Ix-`#Qg8w8dml4xf3qAFtO@~+AteE|TEhK@DY2qEk zi!RvUM=Yp3P8`{Rm4H3KV-L}ld0DOSuvYV)Ke1Ob39?L71Ox9OMG@ngS|cEeNk}hI zXX0K@>)N5qN#PEexsuWfbds`Q3g^&`q2D0q7o(Da8g2J@fz@4b9O);=L3PY#mMIn+bS>SV!~8EHx0(>L8nGt8KD z&AY+RgF}aChCAlDeFHiP@)dLG%$0t&^R{5&^YTv#7n%weD0zE=RWB+_V*>`KFKIhn z4SXp4(T3Xy`6I5iriQc~bPcgD;8ZOf)gtz}2l+tV&98~mr>7me@I810e7XN8UQ37Y zZo04qRvNti!MR?6@)MM{B^`e8cu>{V;l&4bau39wgxVQjCoV3I84SjLAT_#APtvUN z9LNuf-g}`&&!mALMAi@ecF5IoA3JpKCAT2Wt%0z{f~cg8Ae;tdPKdsCDfbqe5|ds~ zi{AQ#F1@BvGj}TUYfotyBmY)~i#{w%8b32{^#8dLFD=Y=6Qky zad$FL$2J<3shvEvQxx=lui4Bl^JQ~CkE$c~QjYBP7>%C%;T@u@Is4qn@=!4UK9aj= z-k1GhRJY|!quJZT=w)4`$o;_Ai|1^Oty-C7+4$I3;`Lu6fr9$IwFv`_seplYkndPO?~}B`X$QOtqCC&w9%g5-o4rW^#8*(YM6;~oG-CyN=?QZ0m|;8L z5>32LEv)*KdPiDm7RgFePg+XvN&v3f2!9@{EC7kyuUfZVgT0zgYM@U!q?6(H{W|=; zZSx02YpAy85%4`HISqQ{!3hQYp(2ze?@=J&%v+xktO#SP7+Xm8hV_+HylY>MXGfor|}+AF?ZFZuZnN!e~N5Yd1i zjkf)9-L?Y^Ix?vlH8C|(z_nr)vC(8x#bWySf(hk&ZJr|N_hMSs6NarO5Po5VX;~|J zy3Ir5u2`^(+REjREOd%6&n)f|$p1q-T?3yOx_kdxm286#Ew(rie z2JPNu&-y10Y|d`rdR0dYt6=Q!^~uwFkxBIMbgh#=80~ghCOkhabnqeRxP(oQB%T0} z|7L!|zNEeWK(Ey>ysmWp6iz2_{-n+V@=b`tCu)x?*LUm{-SLeW-Ey+Hg({c=uxqUK zDTzNDV_Fj2?fg7^CMbw4ioK!>tp;B&Z8mJt|I;Iboff)$emKkP8!N|<=+_w30^ly4 zGx6!iKl{e3w>bSXUx)euiR9W9I5m~epcE>jve$#j)8A(u(ARPM0zd5~)(0?cvpac(PY>o$R zRzz>_Wn1Plb+QP6xpe1}Ja0v=hyuPXuT@rc+sF9k2xea(wAr!u5zs^*>^L-x$8bDr zwC_fJyymiV6Ul05 zzCwoTfP)-%8+2B1xnbcyyDGzz!YDE0@$o)8k}Lpb$TD^yt~s=_fOjigL>sqN4}+Ws z<~BX0#q0DqBZs!=G+&uHlU%x*Z=&FpG)uJx8F7cdWTqUC+;uSGIxPL*$q$(F3u9Oq zf*u*}F{oQHAuXpz98B1LUZtu7(QCzz>fE&k?G79%?wl=JogLXW;rsQ>+#q0lG}^CZ zBIz*rjsTCMh_Oh3!-&`3%82b>{9#)ClIscAl=#F-5VM z;rKta#M3LQfLl16%xHdmXWk%j&1NIVQVjMDgP33cf$Q#6N(IPWW0$j7bUD!4+8z6^ zb7#3+Jc*TG!;clbB-!R%AntH#nG7qIP*~Ug!SRs{9`)3dM!||y z+wYzAW|NHT12)n?&Ian81r9cz*F0nA(#a1?GK`^iLTM0+ZO}08A3gSOQT|LYVT|pe zRZEHbHXempMkiZ64TiB*$|(JuIeH^d>9t ziMVM`Xbz?L*q%c-q=Tij*?0u3q~Cny@{sM?$tU63b~UBFPlFZz*q6bbj*LYEa>wB& zPlYQ5RK17)(G$h6##APWOs-DPr7NX2SUz4Ncb!IG`G|HsH@-7K^z!%FN)MF3v!-c5 zRRC}X!W?N_eH+JDv)_Ah%(~l6`&8Ja)ZC{#KTTTC@ZCw(ck+8Z`_4b}qOnU$>=)FD ztV6lRW97Oa3^4VHrm-*C$Z+L~G-=Y)KQ02~7FF=3h}ZA*6YoLP-Rj58LJ+rb#Ne*{ zxfB;oIK0^Y4J6Y*z8Oem0C)X0*xcJk75 z_*PYLK+UV|i@|wnjY?DZ4%?VhPHjVxlM%n;2EHC8SO~(*R4yESle=-nTgoY4pM_&1 zZ5b{oXrh?iIC`M3bYwTt%UahHo!UY4&ndt^TqVuLBMn&f>E;`6nqMz6?HfC31FpD) z-&v;6T?9C@QbwE}MLInLX1_*{sk1IrWGHM(xha!bYOb;z!!v%G<1XUmPgumn+L*T+ zqWuA&DgIXra3r@0(E-m{iN@y9xpm;>jo!7oggrIAZP?Y$fbbbrmEy6s;5bsVdXRCk zDn>Ge1o@W{ep_Sc?rQ7#x)$yHP!aMn<}tXb2Sd{TmOOo*@)>@(?B%gytik-vD%-~! zE+~DjhWsbWZq}gSU&mDTa2}rbvpC*BemET5R2Vs|IxATaL|j#vALhlU?R#lqk;2IN zhX2KqlPLMQgHqpECY?|ZK{QazyEogP=>47d`wAPy3LMV=;s|4rFjYcuVU@kZPG`H} zUDjxFoVgxN%ZQu~CdKoX;U^I@zs)u$KC$vYLhVJEpY*#)Ex+a}xnmJF6&1LX&l}X} zMBkssqmAC%@!yjvFx%Rldipbf+df%+Gd!dx+|>-v{J9fAoK=YCDHAn*7@b(51MIB9 zzv;ByAZT&r?da!L;L;+}u~j5`dwdm&?UU^*f;-%G&QdTh2|*`HEXV+8?ufknAMaPd zw4)PKSXgrM(w0L9Fk2h2I?V+AK*%CO?+Nz~4T=m&$*I>18@nCDPs z#RywaH?HlN$$2$JVZ~=M806!JW7=D)R~%HSop4!sB_3_Qri9gd!Mr5OXLJS=_*tXa zT-4_iEujSE7jKwJPF;8_#8;*6c?o zex3*A{$O0YXAIx>s z%Lzm|3(J7E7zR&-ZUjY_uxE5^M3Ie$ZmiM>)79Vf~_np+r`Sc0{1Amw%C&QKt8 zz#cFPAHya%j#G$b)EnEdOeA-XJm!FmOCeWHiJ-1QeQKa|Ff)F9D(H`}2s_XxeJ>NK zlvkc>2?b#D{sky?RAS|Br{Q;q5Pz@otTGW97j4c$*FOfD4D^gTNTq*j0 ktHkO5k6NoKdmwUiukQX|;ii+7VgRgl+_*Y-B|q-}10%`*82|tP literal 0 HcmV?d00001 diff --git a/client/public/pwa-192x192.png b/client/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..5160e8ae4600ab94c2347636bbe5ef691acb760e GIT binary patch literal 2971 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 + + + + + + + + + + + + + + + + + diff --git a/client/pwa-assets.config.ts b/client/pwa-assets.config.ts new file mode 100644 index 000000000..6e49bdb26 --- /dev/null +++ b/client/pwa-assets.config.ts @@ -0,0 +1,6 @@ +import { defineConfig, minimal2023Preset } from '@vite-pwa/assets-generator/config' + +export default defineConfig({ + preset: minimal2023Preset, + images: ['public/pwa-icon-source.svg'], +}) diff --git a/client/src/components/AppSidebar.vue b/client/src/components/AppSidebar.vue index b669b981c..cc21d6f42 100644 --- a/client/src/components/AppSidebar.vue +++ b/client/src/components/AppSidebar.vue @@ -6,6 +6,7 @@ import { VueDraggable } from 'vue-draggable-plus' import { Sidebar, SidebarContent, + SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarHeader, @@ -28,6 +29,7 @@ import CreateSmartScopeDialog from '@/features/smart-scope/components/CreateSmar import CreateCollectionDialog from '@/features/collection/components/CreateCollectionDialog.vue' import LibraryCreatorModal from '@/features/library/components/LibraryCreatorModal.vue' import { useLibraryCreationRedirect } from '@/features/library/composables/useLibraryCreationRedirect' +import { useInstallPrompt } from '@/features/pwa/composables/useInstallPrompt' import { useThemeStore } from '@/stores/theme' function resolveIcon(name: string | null | undefined, fallback: Component): Component { @@ -54,6 +56,7 @@ const { hasPermission } = usePermissions() const { subscribeLibrary, getProgress, progressMap } = useScanProgress() const { handleLibraryCreated } = useLibraryCreationRedirect() const themeStore = useThemeStore() +const { isInstallable, installApp } = useInstallPrompt() const iconRadiusClass = computed(() => (themeStore.radius === 'sharp' ? 'rounded-none' : 'rounded-full')) @@ -430,6 +433,12 @@ onUnmounted(() => stopLibraryUploadListener()) + + + + + + diff --git a/client/src/features/pwa/composables/__tests__/useInstallPrompt.test.ts b/client/src/features/pwa/composables/__tests__/useInstallPrompt.test.ts new file mode 100644 index 000000000..6f01479a0 --- /dev/null +++ b/client/src/features/pwa/composables/__tests__/useInstallPrompt.test.ts @@ -0,0 +1,108 @@ +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' +import { useInstallPrompt, _resetInstallPromptForTest } from '../useInstallPrompt' + +// The composable uses module-level singleton state for the deferred prompt. +// Each test resets that state via the exported helper before running. + +function makePromptEvent(outcome: 'accepted' | 'dismissed' = 'accepted'): Event & { + prompt: ReturnType + userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }> + preventDefault: ReturnType +} { + let resolveChoice!: (v: { outcome: 'accepted' | 'dismissed' }) => void + const userChoice = new Promise<{ outcome: 'accepted' | 'dismissed' }>((res) => { + resolveChoice = res + }) + + const evt = new Event('beforeinstallprompt') as Event & { + prompt: ReturnType + userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }> + preventDefault: ReturnType + } + evt.preventDefault = vi.fn<() => void>() + evt.prompt = vi.fn<() => Promise>(() => { + resolveChoice({ outcome }) + return Promise.resolve() + }) + Object.defineProperty(evt, 'userChoice', { get: () => userChoice }) + return evt +} + +describe('useInstallPrompt', () => { + beforeEach(() => { + _resetInstallPromptForTest() + }) + + afterEach(() => { + vi.restoreAllMocks() + }) + + it('isInstallable is false before beforeinstallprompt fires', () => { + const { isInstallable } = useInstallPrompt() + expect(isInstallable.value).toBe(false) + }) + + it('isInstallable becomes true after beforeinstallprompt fires', () => { + const { isInstallable } = useInstallPrompt() + const evt = makePromptEvent() + window.dispatchEvent(evt) + expect(isInstallable.value).toBe(true) + }) + + it('preventDefault is called on beforeinstallprompt', () => { + const evt = makePromptEvent() + window.dispatchEvent(evt) + expect(evt.preventDefault).toHaveBeenCalledOnce() + }) + + it('installApp calls prompt() on the deferred event', async () => { + const { installApp } = useInstallPrompt() + const evt = makePromptEvent('accepted') + window.dispatchEvent(evt) + await installApp() + expect(evt.prompt).toHaveBeenCalledOnce() + }) + + it('isInstallable resets to false after user accepts', async () => { + const { isInstallable, installApp } = useInstallPrompt() + const evt = makePromptEvent('accepted') + window.dispatchEvent(evt) + expect(isInstallable.value).toBe(true) + await installApp() + expect(isInstallable.value).toBe(false) + }) + + it('isInstallable stays true after user dismisses', async () => { + const { isInstallable, installApp } = useInstallPrompt() + const evt = makePromptEvent('dismissed') + window.dispatchEvent(evt) + expect(isInstallable.value).toBe(true) + await installApp() + expect(isInstallable.value).toBe(true) + }) + + it('isInstallable resets to false on appinstalled event', () => { + const { isInstallable } = useInstallPrompt() + const evt = makePromptEvent() + window.dispatchEvent(evt) + expect(isInstallable.value).toBe(true) + window.dispatchEvent(new Event('appinstalled')) + expect(isInstallable.value).toBe(false) + }) + + it('installApp is a no-op when isInstallable is false', async () => { + const { isInstallable, installApp } = useInstallPrompt() + expect(isInstallable.value).toBe(false) + await expect(installApp()).resolves.toBeUndefined() + }) + + it('prompt is not called again after app was accepted and installed', async () => { + const { installApp } = useInstallPrompt() + const evt = makePromptEvent('accepted') + window.dispatchEvent(evt) + await installApp() + // prompt was cleared - second call is a no-op + await installApp() + expect(evt.prompt).toHaveBeenCalledOnce() + }) +}) diff --git a/client/src/features/pwa/composables/useInstallPrompt.ts b/client/src/features/pwa/composables/useInstallPrompt.ts new file mode 100644 index 000000000..3288b9e06 --- /dev/null +++ b/client/src/features/pwa/composables/useInstallPrompt.ts @@ -0,0 +1,45 @@ +import { computed, ref } from 'vue' + +interface BeforeInstallPromptEvent extends Event { + prompt(): Promise + readonly userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }> +} + +const _deferredPrompt = ref(null) + +function _onBeforeInstallPrompt(e: Event) { + e.preventDefault() + _deferredPrompt.value = e as BeforeInstallPromptEvent +} + +function _onAppInstalled() { + _deferredPrompt.value = null +} + +if (typeof window !== 'undefined') { + window.addEventListener('beforeinstallprompt', _onBeforeInstallPrompt) + window.addEventListener('appinstalled', _onAppInstalled) +} + +export function useInstallPrompt() { + const isInstallable = computed(() => _deferredPrompt.value !== null) + + async function installApp(): Promise { + const prompt = _deferredPrompt.value + if (!prompt) return + + await prompt.prompt() + + const { outcome } = await prompt.userChoice + if (outcome === 'accepted') { + _deferredPrompt.value = null + } + } + + return { isInstallable, installApp } +} + +/** Resets module-level singleton state. For use in tests only. */ +export function _resetInstallPromptForTest() { + _deferredPrompt.value = null +} diff --git a/client/vite.config.ts b/client/vite.config.ts index bea4af7c0..44c2138f8 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -4,10 +4,121 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' import tailwindcss from '@tailwindcss/vite' +import { VitePWA } from 'vite-plugin-pwa' // https://vite.dev/config/ export default defineConfig({ - plugins: [vue(), vueDevTools(), tailwindcss()], + plugins: [ + vue(), + vueDevTools(), + tailwindcss(), + VitePWA({ + registerType: 'autoUpdate', + injectRegister: 'auto', + includeAssets: [ + 'favicon.ico', + 'pwa-icon-source.svg', + 'apple-touch-icon-180x180.png', + 'pwa-64x64.png', + 'pwa-192x192.png', + 'pwa-512x512.png', + 'maskable-icon-512x512.png', + ], + manifest: { + name: 'BookOrbit', + short_name: 'BookOrbit', + description: 'Your personal book library and reading space', + theme_color: '#1e1e18', + background_color: '#fafaf8', + display: 'standalone', + start_url: '/', + scope: '/', + orientation: 'any', + icons: [ + { + src: 'pwa-64x64.png', + sizes: '64x64', + type: 'image/png', + }, + { + src: 'pwa-192x192.png', + sizes: '192x192', + type: 'image/png', + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + }, + { + src: 'maskable-icon-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'maskable', + }, + ], + shortcuts: [ + { + name: 'Dashboard', + short_name: 'Dashboard', + url: '/dashboard', + icons: [{ src: 'pwa-192x192.png', sizes: '192x192' }], + }, + { + name: 'Libraries', + short_name: 'Libraries', + url: '/libraries', + icons: [{ src: 'pwa-192x192.png', sizes: '192x192' }], + }, + { + name: 'Settings', + short_name: 'Settings', + url: '/settings', + icons: [{ src: 'pwa-192x192.png', sizes: '192x192' }], + }, + ], + }, + workbox: { + globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}'], + navigateFallback: 'index.html', + navigateFallbackDenylist: [/^\/api\//], + runtimeCaching: [ + { + urlPattern: /^.*\/api\/v1\/books\/\d+\/cover(\?.*)?$/, + handler: 'CacheFirst', + options: { + cacheName: 'book-covers', + expiration: { + maxEntries: 200, + maxAgeSeconds: 60 * 60 * 24 * 30, + }, + cacheableResponse: { + statuses: [0, 200], + }, + }, + }, + { + urlPattern: /^.*\/api\/v1\/books\/\d+\/thumbnail(\?.*)?$/, + handler: 'CacheFirst', + options: { + cacheName: 'book-thumbnails', + expiration: { + maxEntries: 200, + maxAgeSeconds: 60 * 60 * 24 * 30, + }, + cacheableResponse: { + statuses: [0, 200], + }, + }, + }, + ], + }, + devOptions: { + enabled: true, + type: 'module', + }, + }), + ], resolve: { dedupe: ['vue'], alias: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 987ff5378..046a4be06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,6 +112,9 @@ importers: tailwindcss: specifier: ^4.2.4 version: 4.2.4 + vite-plugin-pwa: + specifier: ^1.3.0 + version: 1.3.0(@vite-pwa/assets-generator@1.0.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1) vue: specifier: ^3.5.33 version: 3.5.33(typescript@5.9.3) @@ -143,6 +146,9 @@ importers: "@types/node": specifier: ^25.6.0 version: 25.6.0 + "@vite-pwa/assets-generator": + specifier: ^1.0.2 + version: 1.0.2 "@vitejs/plugin-vue": specifier: ^6.0.6 version: 6.0.6(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3)) @@ -517,6 +523,15 @@ packages: yarn: ">= 1.13.0", } + "@apideck/better-ajv-errors@0.3.7": + resolution: + { + integrity: sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==, + } + engines: { node: ">=10" } + peerDependencies: + ajv: ">=8" + "@asamuzakjp/css-color@5.1.11": resolution: { @@ -558,6 +573,13 @@ packages: } engines: { node: ">=6.9.0" } + "@babel/compat-data@7.29.3": + resolution: + { + integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==, + } + engines: { node: ">=6.9.0" } + "@babel/core@7.29.0": resolution: { @@ -595,6 +617,23 @@ packages: peerDependencies: "@babel/core": ^7.0.0 + "@babel/helper-create-regexp-features-plugin@7.28.5": + resolution: + { + integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-define-polyfill-provider@0.6.8": + resolution: + { + integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + "@babel/helper-globals@7.28.0": resolution: { @@ -639,6 +678,15 @@ packages: } engines: { node: ">=6.9.0" } + "@babel/helper-remap-async-to-generator@7.27.1": + resolution: + { + integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + "@babel/helper-replace-supers@7.28.6": resolution: { @@ -676,6 +724,13 @@ packages: } engines: { node: ">=6.9.0" } + "@babel/helper-wrap-function@7.28.6": + resolution: + { + integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==, + } + engines: { node: ">=6.9.0" } + "@babel/helpers@7.29.2": resolution: { @@ -699,6 +754,60 @@ packages: engines: { node: ">=6.0.0" } hasBin: true + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5": + resolution: + { + integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1": + resolution: + { + integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1": + resolution: + { + integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.3": + resolution: + { + integrity: sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1": + resolution: + { + integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.13.0 + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6": + resolution: + { + integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + "@babel/plugin-proposal-decorators@7.29.0": resolution: { @@ -708,6 +817,15 @@ packages: peerDependencies: "@babel/core": ^7.0.0-0 + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + resolution: + { + integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + "@babel/plugin-syntax-decorators@7.28.6": resolution: { @@ -717,6 +835,15 @@ packages: peerDependencies: "@babel/core": ^7.0.0-0 + "@babel/plugin-syntax-import-assertions@7.28.6": + resolution: + { + integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + "@babel/plugin-syntax-import-attributes@7.28.6": resolution: { @@ -752,6 +879,438 @@ packages: peerDependencies: "@babel/core": ^7.0.0-0 + "@babel/plugin-syntax-unicode-sets-regex@7.18.6": + resolution: + { + integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-arrow-functions@7.27.1": + resolution: + { + integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-async-generator-functions@7.29.0": + resolution: + { + integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-async-to-generator@7.28.6": + resolution: + { + integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-block-scoped-functions@7.27.1": + resolution: + { + integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-block-scoping@7.28.6": + resolution: + { + integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-class-properties@7.28.6": + resolution: + { + integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-class-static-block@7.28.6": + resolution: + { + integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.12.0 + + "@babel/plugin-transform-classes@7.28.6": + resolution: + { + integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-computed-properties@7.28.6": + resolution: + { + integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-destructuring@7.28.5": + resolution: + { + integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-dotall-regex@7.28.6": + resolution: + { + integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-duplicate-keys@7.27.1": + resolution: + { + integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0": + resolution: + { + integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-dynamic-import@7.27.1": + resolution: + { + integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-explicit-resource-management@7.28.6": + resolution: + { + integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-exponentiation-operator@7.28.6": + resolution: + { + integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-export-namespace-from@7.27.1": + resolution: + { + integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-for-of@7.27.1": + resolution: + { + integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-function-name@7.27.1": + resolution: + { + integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-json-strings@7.28.6": + resolution: + { + integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-literals@7.27.1": + resolution: + { + integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-logical-assignment-operators@7.28.6": + resolution: + { + integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-member-expression-literals@7.27.1": + resolution: + { + integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-amd@7.27.1": + resolution: + { + integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-commonjs@7.28.6": + resolution: + { + integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-systemjs@7.29.4": + resolution: + { + integrity: sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-umd@7.27.1": + resolution: + { + integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-named-capturing-groups-regex@7.29.0": + resolution: + { + integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-new-target@7.27.1": + resolution: + { + integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-nullish-coalescing-operator@7.28.6": + resolution: + { + integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-numeric-separator@7.28.6": + resolution: + { + integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-object-rest-spread@7.28.6": + resolution: + { + integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-object-super@7.27.1": + resolution: + { + integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-optional-catch-binding@7.28.6": + resolution: + { + integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-optional-chaining@7.28.6": + resolution: + { + integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-parameters@7.27.7": + resolution: + { + integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-private-methods@7.28.6": + resolution: + { + integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-private-property-in-object@7.28.6": + resolution: + { + integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-property-literals@7.27.1": + resolution: + { + integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-regenerator@7.29.0": + resolution: + { + integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-regexp-modifiers@7.28.6": + resolution: + { + integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-reserved-words@7.27.1": + resolution: + { + integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-shorthand-properties@7.27.1": + resolution: + { + integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-spread@7.28.6": + resolution: + { + integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-sticky-regex@7.27.1": + resolution: + { + integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-template-literals@7.27.1": + resolution: + { + integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-typeof-symbol@7.27.1": + resolution: + { + integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + "@babel/plugin-transform-typescript@7.28.6": resolution: { @@ -761,6 +1320,66 @@ packages: peerDependencies: "@babel/core": ^7.0.0-0 + "@babel/plugin-transform-unicode-escapes@7.27.1": + resolution: + { + integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-property-regex@7.28.6": + resolution: + { + integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-regex@7.27.1": + resolution: + { + integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-sets-regex@7.28.6": + resolution: + { + integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/preset-env@7.29.5": + resolution: + { + integrity: sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/preset-modules@0.1.6-no-external-plugins": + resolution: + { + integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + "@babel/runtime@7.29.2": + resolution: + { + integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==, + } + engines: { node: ">=6.9.0" } + "@babel/template@7.28.6": resolution: { @@ -802,6 +1421,12 @@ packages: } hasBin: true + "@canvas/image-data@1.1.0": + resolution: + { + integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==, + } + "@colors/colors@1.5.0": resolution: { @@ -2395,6 +3020,15 @@ packages: } engines: { node: ">=18" } + "@img/sharp-darwin-arm64@0.33.5": + resolution: + { + integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [darwin] + "@img/sharp-darwin-arm64@0.34.5": resolution: { @@ -2404,6 +3038,15 @@ packages: cpu: [arm64] os: [darwin] + "@img/sharp-darwin-x64@0.33.5": + resolution: + { + integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [darwin] + "@img/sharp-darwin-x64@0.34.5": resolution: { @@ -2413,6 +3056,14 @@ packages: cpu: [x64] os: [darwin] + "@img/sharp-libvips-darwin-arm64@1.0.4": + resolution: + { + integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==, + } + cpu: [arm64] + os: [darwin] + "@img/sharp-libvips-darwin-arm64@1.2.4": resolution: { @@ -2421,6 +3072,14 @@ packages: cpu: [arm64] os: [darwin] + "@img/sharp-libvips-darwin-x64@1.0.4": + resolution: + { + integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==, + } + cpu: [x64] + os: [darwin] + "@img/sharp-libvips-darwin-x64@1.2.4": resolution: { @@ -2429,6 +3088,15 @@ packages: cpu: [x64] os: [darwin] + "@img/sharp-libvips-linux-arm64@1.0.4": + resolution: + { + integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==, + } + cpu: [arm64] + os: [linux] + libc: [glibc] + "@img/sharp-libvips-linux-arm64@1.2.4": resolution: { @@ -2438,6 +3106,15 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-libvips-linux-arm@1.0.5": + resolution: + { + integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==, + } + cpu: [arm] + os: [linux] + libc: [glibc] + "@img/sharp-libvips-linux-arm@1.2.4": resolution: { @@ -2465,6 +3142,15 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-libvips-linux-s390x@1.0.4": + resolution: + { + integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==, + } + cpu: [s390x] + os: [linux] + libc: [glibc] + "@img/sharp-libvips-linux-s390x@1.2.4": resolution: { @@ -2474,6 +3160,15 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-libvips-linux-x64@1.0.4": + resolution: + { + integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==, + } + cpu: [x64] + os: [linux] + libc: [glibc] + "@img/sharp-libvips-linux-x64@1.2.4": resolution: { @@ -2483,6 +3178,15 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + resolution: + { + integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==, + } + cpu: [arm64] + os: [linux] + libc: [musl] + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": resolution: { @@ -2492,6 +3196,15 @@ packages: os: [linux] libc: [musl] + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + resolution: + { + integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==, + } + cpu: [x64] + os: [linux] + libc: [musl] + "@img/sharp-libvips-linuxmusl-x64@1.2.4": resolution: { @@ -2501,6 +3214,16 @@ packages: os: [linux] libc: [musl] + "@img/sharp-linux-arm64@0.33.5": + resolution: + { + integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + "@img/sharp-linux-arm64@0.34.5": resolution: { @@ -2511,6 +3234,16 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-linux-arm@0.33.5": + resolution: + { + integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + libc: [glibc] + "@img/sharp-linux-arm@0.34.5": resolution: { @@ -2541,6 +3274,16 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-linux-s390x@0.33.5": + resolution: + { + integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + "@img/sharp-linux-s390x@0.34.5": resolution: { @@ -2551,6 +3294,16 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-linux-x64@0.33.5": + resolution: + { + integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + "@img/sharp-linux-x64@0.34.5": resolution: { @@ -2561,6 +3314,16 @@ packages: os: [linux] libc: [glibc] + "@img/sharp-linuxmusl-arm64@0.33.5": + resolution: + { + integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + "@img/sharp-linuxmusl-arm64@0.34.5": resolution: { @@ -2571,6 +3334,16 @@ packages: os: [linux] libc: [musl] + "@img/sharp-linuxmusl-x64@0.33.5": + resolution: + { + integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [musl] + "@img/sharp-linuxmusl-x64@0.34.5": resolution: { @@ -2581,6 +3354,14 @@ packages: os: [linux] libc: [musl] + "@img/sharp-wasm32@0.33.5": + resolution: + { + integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + "@img/sharp-wasm32@0.34.5": resolution: { @@ -2598,6 +3379,15 @@ packages: cpu: [arm64] os: [win32] + "@img/sharp-win32-ia32@0.33.5": + resolution: + { + integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ia32] + os: [win32] + "@img/sharp-win32-ia32@0.34.5": resolution: { @@ -2607,6 +3397,15 @@ packages: cpu: [ia32] os: [win32] + "@img/sharp-win32-x64@0.33.5": + resolution: + { + integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [win32] + "@img/sharp-win32-x64@0.34.5": resolution: { @@ -2829,6 +3628,13 @@ packages: } engines: { node: ">=12" } + "@isaacs/cliui@9.0.0": + resolution: + { + integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==, + } + engines: { node: ">=18" } + "@jridgewell/gen-mapping@0.3.13": resolution: { @@ -3807,6 +4613,12 @@ packages: integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, } + "@quansync/fs@1.0.0": + resolution: + { + integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==, + } + "@rolldown/binding-android-arm64@1.0.0-rc.17": resolution: { @@ -3959,6 +4771,283 @@ packages: integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==, } + "@rollup/plugin-babel@6.1.0": + resolution: + { + integrity: sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + "@babel/core": ^7.0.0 + "@types/babel__core": ^7.1.9 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + "@types/babel__core": + optional: true + rollup: + optional: true + + "@rollup/plugin-node-resolve@16.0.3": + resolution: + { + integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-replace@6.0.3": + resolution: + { + integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-terser@1.0.0": + resolution: + { + integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==, + } + engines: { node: ">=20.0.0" } + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/pluginutils@5.3.0": + resolution: + { + integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/rollup-android-arm-eabi@4.60.3": + resolution: + { + integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.60.3": + resolution: + { + integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.60.3": + resolution: + { + integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==, + } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.60.3": + resolution: + { + integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==, + } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-freebsd-arm64@4.60.3": + resolution: + { + integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==, + } + cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.60.3": + resolution: + { + integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==, + } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-linux-arm-gnueabihf@4.60.3": + resolution: + { + integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==, + } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm-musleabihf@4.60.3": + resolution: + { + integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==, + } + cpu: [arm] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-arm64-gnu@4.60.3": + resolution: + { + integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==, + } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm64-musl@4.60.3": + resolution: + { + integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==, + } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-loong64-gnu@4.60.3": + resolution: + { + integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==, + } + cpu: [loong64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-loong64-musl@4.60.3": + resolution: + { + integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==, + } + cpu: [loong64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-ppc64-gnu@4.60.3": + resolution: + { + integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==, + } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-ppc64-musl@4.60.3": + resolution: + { + integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==, + } + cpu: [ppc64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-riscv64-gnu@4.60.3": + resolution: + { + integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==, + } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-riscv64-musl@4.60.3": + resolution: + { + integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==, + } + cpu: [riscv64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-s390x-gnu@4.60.3": + resolution: + { + integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==, + } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-x64-gnu@4.60.3": + resolution: + { + integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==, + } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-x64-musl@4.60.3": + resolution: + { + integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==, + } + cpu: [x64] + os: [linux] + libc: [musl] + + "@rollup/rollup-openbsd-x64@4.60.3": + resolution: + { + integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==, + } + cpu: [x64] + os: [openbsd] + + "@rollup/rollup-openharmony-arm64@4.60.3": + resolution: + { + integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==, + } + cpu: [arm64] + os: [openharmony] + + "@rollup/rollup-win32-arm64-msvc@4.60.3": + resolution: + { + integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==, + } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.60.3": + resolution: + { + integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==, + } + cpu: [ia32] + os: [win32] + + "@rollup/rollup-win32-x64-gnu@4.60.3": + resolution: + { + integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==, + } + cpu: [x64] + os: [win32] + + "@rollup/rollup-win32-x64-msvc@4.60.3": + resolution: + { + integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==, + } + cpu: [x64] + os: [win32] + "@sec-ant/readable-stream@0.4.1": resolution: { @@ -4396,6 +5485,13 @@ packages: integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, } + "@trickfilm400/rollup-plugin-off-main-thread@3.0.0-pre1": + resolution: + { + integrity: sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==, + } + engines: { node: ">=12" } + "@tsconfig/node10@1.0.12": resolution: { @@ -4649,6 +5745,12 @@ packages: integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==, } + "@types/resolve@1.20.2": + resolution: + { + integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==, + } + "@types/send@1.2.1": resolution: { @@ -4893,6 +5995,14 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@vite-pwa/assets-generator@1.0.2": + resolution: + { + integrity: sha512-MCbrb508JZHqe7bUibmZj/lyojdhLRnfkmyXnkrCM2zVrjTgL89U8UEfInpKTvPeTnxsw2hmyZxnhsdNR6yhwg==, + } + engines: { node: ">=16.14.0" } + hasBin: true + "@vitejs/plugin-vue@6.0.6": resolution: { @@ -5637,6 +6747,13 @@ packages: } engines: { node: ">= 0.4" } + array-buffer-byte-length@1.0.2: + resolution: + { + integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, + } + engines: { node: ">= 0.4" } + array-ify@1.0.0: resolution: { @@ -5649,6 +6766,13 @@ packages: integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==, } + arraybuffer.prototype.slice@1.0.4: + resolution: + { + integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, + } + engines: { node: ">= 0.4" } + asap@2.0.6: resolution: { @@ -5682,6 +6806,13 @@ packages: } engines: { node: ">=20.19.0" } + async-function@1.0.0: + resolution: + { + integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, + } + engines: { node: ">= 0.4" } + async@3.2.6: resolution: { @@ -5694,6 +6825,13 @@ packages: integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, } + at-least-node@1.0.0: + resolution: + { + integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, + } + engines: { node: ">= 4.0.0" } + atomic-sleep@1.0.0: resolution: { @@ -5701,6 +6839,13 @@ packages: } engines: { node: ">=8.0.0" } + available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } + avvio@9.2.0: resolution: { @@ -5732,6 +6877,30 @@ packages: react-native-b4a: optional: true + babel-plugin-polyfill-corejs2@0.4.17: + resolution: + { + integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.14.2: + resolution: + { + integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.8: + resolution: + { + integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + balanced-match@1.0.2: resolution: { @@ -5980,6 +7149,13 @@ packages: } engines: { node: ">=20" } + cac@6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + cacheable-lookup@7.0.0: resolution: { @@ -6001,6 +7177,13 @@ packages: } engines: { node: ">= 0.4" } + call-bind@1.0.9: + resolution: + { + integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==, + } + engines: { node: ">= 0.4" } + call-bound@1.0.4: resolution: { @@ -6244,6 +7427,19 @@ packages: integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, } + color-string@1.9.1: + resolution: + { + integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, + } + + color@4.2.3: + resolution: + { + integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==, + } + engines: { node: ">=12.5.0" } + colorette@2.0.20: resolution: { @@ -6305,6 +7501,13 @@ packages: } engines: { node: ">= 6" } + common-tags@1.8.2: + resolution: + { + integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, + } + engines: { node: ">=4.0.0" } + compare-func@2.0.0: resolution: { @@ -6476,6 +7679,12 @@ packages: } engines: { node: ">=18" } + core-js-compat@3.49.0: + resolution: + { + integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==, + } + core-util-is@1.0.3: resolution: { @@ -6559,6 +7768,13 @@ packages: } engines: { node: ">= 8" } + crypto-random-string@2.0.0: + resolution: + { + integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, + } + engines: { node: ">=8" } + crypto-random-string@4.0.0: resolution: { @@ -6614,6 +7830,27 @@ packages: } engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + data-view-buffer@1.0.2: + resolution: + { + integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-length@1.0.2: + resolution: + { + integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-offset@1.0.1: + resolution: + { + integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, + } + engines: { node: ">= 0.4" } + dateformat@4.6.3: resolution: { @@ -6638,6 +7875,20 @@ packages: integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==, } + decode-bmp@0.2.1: + resolution: + { + integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==, + } + engines: { node: ">=8.6.0" } + + decode-ico@0.4.1: + resolution: + { + integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==, + } + engines: { node: ">=8.6" } + decompress-response@10.0.0: resolution: { @@ -6692,6 +7943,13 @@ packages: } engines: { node: ">=16" } + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + define-lazy-prop@3.0.0: resolution: { @@ -6699,6 +7957,13 @@ packages: } engines: { node: ">=12" } + define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } + defu@6.1.7: resolution: { @@ -6984,6 +8249,14 @@ packages: engines: { node: ">=14" } hasBin: true + ejs@3.1.10: + resolution: + { + integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==, + } + engines: { node: ">=0.10.0" } + hasBin: true + electron-to-chromium@1.5.335: resolution: { @@ -7114,6 +8387,13 @@ packages: integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==, } + es-abstract@1.24.2: + resolution: + { + integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==, + } + engines: { node: ">= 0.4" } + es-define-property@1.0.1: resolution: { @@ -7148,6 +8428,13 @@ packages: } engines: { node: ">= 0.4" } + es-to-primitive@1.3.0: + resolution: + { + integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==, + } + engines: { node: ">= 0.4" } + esbuild@0.25.12: resolution: { @@ -7383,6 +8670,13 @@ packages: } engines: { node: ">=0.10.0" } + eta@4.6.0: + resolution: + { + integrity: sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==, + } + engines: { node: ">=20" } + event-target-shim@5.0.1: resolution: { @@ -7607,6 +8901,12 @@ packages: } engines: { node: ">=20" } + filelist@1.0.6: + resolution: + { + integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==, + } + filename-reserved-regex@4.0.0: resolution: { @@ -7683,6 +8983,13 @@ packages: integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, } + for-each@0.3.5: + resolution: + { + integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, + } + engines: { node: ">= 0.4" } + foreground-child@3.3.1: resolution: { @@ -7741,6 +9048,13 @@ packages: } engines: { node: ">=14.14" } + fs-extra@9.1.0: + resolution: + { + integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, + } + engines: { node: ">=10" } + fs-monkey@1.1.0: resolution: { @@ -7768,12 +9082,32 @@ packages: } engines: { node: ">=18" } + function.prototype.name@1.1.8: + resolution: + { + integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==, + } + engines: { node: ">= 0.4" } + + functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + generate-function@2.3.1: resolution: { integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==, } + generator-function@2.0.1: + resolution: + { + integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, + } + engines: { node: ">= 0.4" } + gensync@1.0.0-beta.2: resolution: { @@ -7802,6 +9136,12 @@ packages: } engines: { node: ">= 0.4" } + get-own-enumerable-property-symbols@3.0.2: + resolution: + { + integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, + } + get-proto@1.0.1: resolution: { @@ -7837,6 +9177,13 @@ packages: } engines: { node: ">=18" } + get-symbol-description@1.1.0: + resolution: + { + integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, + } + engines: { node: ">= 0.4" } + get-tsconfig@4.13.7: resolution: { @@ -7886,6 +9233,15 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@11.1.0: + resolution: + { + integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==, + } + engines: { node: 20 || >=22 } + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + glob@13.0.6: resolution: { @@ -7914,6 +9270,13 @@ packages: } engines: { node: ">=18" } + globalthis@1.0.4: + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: ">= 0.4" } + gopd@1.2.0: resolution: { @@ -7948,6 +9311,13 @@ packages: engines: { node: ">=0.4.7" } hasBin: true + has-bigints@1.1.0: + resolution: + { + integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, + } + engines: { node: ">= 0.4" } + has-flag@3.0.0: resolution: { @@ -7962,6 +9332,19 @@ packages: } engines: { node: ">=8" } + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + + has-proto@1.2.0: + resolution: + { + integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, + } + engines: { node: ">= 0.4" } + has-symbols@1.1.0: resolution: { @@ -7983,6 +9366,13 @@ packages: } engines: { node: ">= 0.4" } + hasown@2.0.3: + resolution: + { + integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==, + } + engines: { node: ">= 0.4" } + helmet@8.1.0: resolution: { @@ -8110,6 +9500,12 @@ packages: engines: { node: ">=18" } hasBin: true + ico-endec@0.1.6: + resolution: + { + integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==, + } + iconv-lite@0.6.3: resolution: { @@ -8124,6 +9520,12 @@ packages: } engines: { node: ">=0.10.0" } + idb@7.1.1: + resolution: + { + integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==, + } + ieee754@1.2.1: resolution: { @@ -8210,6 +9612,13 @@ packages: integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==, } + internal-slot@1.1.0: + resolution: + { + integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, + } + engines: { node: ">= 0.4" } + into-stream@7.0.0: resolution: { @@ -8224,12 +9633,74 @@ packages: } engines: { node: ">= 10" } + is-array-buffer@3.0.5: + resolution: + { + integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, + } + engines: { node: ">= 0.4" } + is-arrayish@0.2.1: resolution: { integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, } + is-arrayish@0.3.4: + resolution: + { + integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==, + } + + is-async-function@2.1.1: + resolution: + { + integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, + } + engines: { node: ">= 0.4" } + + is-bigint@1.1.0: + resolution: + { + integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, + } + engines: { node: ">= 0.4" } + + is-boolean-object@1.2.2: + resolution: + { + integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, + } + engines: { node: ">= 0.4" } + + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + + is-core-module@2.16.2: + resolution: + { + integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==, + } + engines: { node: ">= 0.4" } + + is-data-view@1.0.2: + resolution: + { + integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, + } + engines: { node: ">= 0.4" } + + is-date-object@1.1.0: + resolution: + { + integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, + } + engines: { node: ">= 0.4" } + is-docker@3.0.0: resolution: { @@ -8245,6 +9716,13 @@ packages: } engines: { node: ">=0.10.0" } + is-finalizationregistry@1.1.1: + resolution: + { + integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, + } + engines: { node: ">= 0.4" } + is-fullwidth-code-point@3.0.0: resolution: { @@ -8259,6 +9737,13 @@ packages: } engines: { node: ">=18" } + is-generator-function@1.1.2: + resolution: + { + integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, + } + engines: { node: ">= 0.4" } + is-glob@4.0.3: resolution: { @@ -8281,6 +9766,33 @@ packages: } engines: { node: ">=8" } + is-map@2.0.3: + resolution: + { + integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, + } + engines: { node: ">= 0.4" } + + is-module@1.0.0: + resolution: + { + integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, + } + + is-negative-zero@2.0.3: + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: ">= 0.4" } + + is-number-object@1.1.1: + resolution: + { + integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, + } + engines: { node: ">= 0.4" } + is-number@7.0.0: resolution: { @@ -8288,6 +9800,13 @@ packages: } engines: { node: ">=0.12.0" } + is-obj@1.0.1: + resolution: + { + integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, + } + engines: { node: ">=0.10.0" } + is-obj@2.0.0: resolution: { @@ -8327,6 +9846,41 @@ packages: integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, } + is-regex@1.2.1: + resolution: + { + integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, + } + engines: { node: ">= 0.4" } + + is-regexp@1.0.0: + resolution: + { + integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, + } + engines: { node: ">=0.10.0" } + + is-set@2.0.3: + resolution: + { + integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, + } + engines: { node: ">= 0.4" } + + is-shared-array-buffer@1.0.4: + resolution: + { + integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, + } + engines: { node: ">= 0.4" } + + is-stream@2.0.1: + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: ">=8" } + is-stream@3.0.0: resolution: { @@ -8341,6 +9895,20 @@ packages: } engines: { node: ">=18" } + is-string@1.1.1: + resolution: + { + integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, + } + engines: { node: ">= 0.4" } + + is-symbol@1.1.1: + resolution: + { + integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, + } + engines: { node: ">= 0.4" } + is-text-path@2.0.0: resolution: { @@ -8348,6 +9916,13 @@ packages: } engines: { node: ">=8" } + is-typed-array@1.1.15: + resolution: + { + integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, + } + engines: { node: ">= 0.4" } + is-unicode-supported@0.1.0: resolution: { @@ -8362,6 +9937,27 @@ packages: } engines: { node: ">=18" } + is-weakmap@2.0.2: + resolution: + { + integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, + } + engines: { node: ">= 0.4" } + + is-weakref@1.1.1: + resolution: + { + integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, + } + engines: { node: ">= 0.4" } + + is-weakset@2.0.4: + resolution: + { + integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, + } + engines: { node: ">= 0.4" } + is-what@5.5.0: resolution: { @@ -8382,6 +9978,12 @@ packages: integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, } + isarray@2.0.5: + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } + isexe@2.0.0: resolution: { @@ -8443,6 +10045,21 @@ packages: integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, } + jackspeak@4.2.3: + resolution: + { + integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==, + } + engines: { node: 20 || >=22 } + + jake@10.9.4: + resolution: + { + integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==, + } + engines: { node: ">=10" } + hasBin: true + java-properties@1.0.2: resolution: { @@ -8613,6 +10230,13 @@ packages: } engines: { "0": node >= 0.2.0 } + jsonpointer@5.0.1: + resolution: + { + integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==, + } + engines: { node: ">=0.10.0" } + jsonwebtoken@9.0.3: resolution: { @@ -8664,6 +10288,13 @@ packages: } engines: { node: ">= 0.6.3" } + leven@3.1.0: + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: ">=6" } + levn@0.4.1: resolution: { @@ -8887,6 +10518,12 @@ packages: integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==, } + lodash.debounce@4.0.8: + resolution: + { + integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, + } + lodash.escaperegexp@4.1.2: resolution: { @@ -8959,6 +10596,12 @@ packages: integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==, } + lodash.sortby@4.7.0: + resolution: + { + integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, + } + lodash.startcase@4.4.0: resolution: { @@ -9273,6 +10916,13 @@ packages: integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, } + minimatch@5.1.9: + resolution: + { + integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==, + } + engines: { node: ">=10" } + minimatch@9.0.9: resolution: { @@ -9611,6 +11261,20 @@ packages: } engines: { node: ">= 0.4" } + object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + + object.assign@4.1.7: + resolution: + { + integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, + } + engines: { node: ">= 0.4" } + obug@2.1.1: resolution: { @@ -9686,6 +11350,13 @@ packages: } engines: { node: ">=10" } + own-keys@1.0.1: + resolution: + { + integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, + } + engines: { node: ">= 0.4" } + oxlint@1.62.0: resolution: { @@ -9961,6 +11632,12 @@ packages: } engines: { node: ">=12" } + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + path-scurry@1.11.1: resolution: { @@ -10199,6 +11876,13 @@ packages: } engines: { node: ">=4" } + possible-typed-array-names@1.1.0: + resolution: + { + integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, + } + engines: { node: ">= 0.4" } + postcss-selector-parser@7.1.1: resolution: { @@ -10269,6 +11953,20 @@ packages: engines: { node: ">=14" } hasBin: true + pretty-bytes@5.6.0: + resolution: + { + integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, + } + engines: { node: ">=6" } + + pretty-bytes@6.1.1: + resolution: + { + integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==, + } + engines: { node: ^14.13.1 || >=16.0.0 } + pretty-ms@9.3.0: resolution: { @@ -10339,6 +12037,12 @@ packages: integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==, } + quansync@1.0.0: + resolution: + { + integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==, + } + queue-microtask@1.2.3: resolution: { @@ -10462,6 +12166,40 @@ packages: integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==, } + reflect.getprototypeof@1.0.10: + resolution: + { + integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, + } + engines: { node: ">= 0.4" } + + regenerate-unicode-properties@10.2.2: + resolution: + { + integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==, + } + engines: { node: ">=4" } + + regenerate@1.4.2: + resolution: + { + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, + } + + regexp.prototype.flags@1.5.4: + resolution: + { + integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, + } + engines: { node: ">= 0.4" } + + regexpu-core@6.4.0: + resolution: + { + integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==, + } + engines: { node: ">=4" } + registry-auth-token@5.1.1: resolution: { @@ -10469,6 +12207,19 @@ packages: } engines: { node: ">=14" } + regjsgen@0.8.0: + resolution: + { + integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, + } + + regjsparser@0.13.1: + resolution: + { + integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==, + } + hasBin: true + reka-ui@2.9.6: resolution: { @@ -10517,6 +12268,14 @@ packages: integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, } + resolve@1.22.12: + resolution: + { + integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==, + } + engines: { node: ">= 0.4" } + hasBin: true + responselike@4.0.2: resolution: { @@ -10566,6 +12325,14 @@ packages: engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true + rollup@4.60.3: + resolution: + { + integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + run-applescript@7.1.0: resolution: { @@ -10591,6 +12358,13 @@ packages: integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, } + safe-array-concat@1.1.4: + resolution: + { + integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==, + } + engines: { node: ">=0.4" } + safe-buffer@5.1.2: resolution: { @@ -10603,6 +12377,20 @@ packages: integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, } + safe-push-apply@1.0.0: + resolution: + { + integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, + } + engines: { node: ">= 0.4" } + + safe-regex-test@1.1.0: + resolution: + { + integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, + } + engines: { node: ">= 0.4" } + safe-regex2@5.1.0: resolution: { @@ -10714,18 +12502,59 @@ packages: engines: { node: ">=10" } hasBin: true + serialize-javascript@7.0.5: + resolution: + { + integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==, + } + engines: { node: ">=20.0.0" } + set-cookie-parser@2.7.2: resolution: { integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==, } + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + + set-function-name@2.0.2: + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: ">= 0.4" } + + set-proto@1.0.0: + resolution: + { + integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, + } + engines: { node: ">= 0.4" } + setprototypeof@1.2.0: resolution: { integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, } + sharp-ico@0.1.5: + resolution: + { + integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==, + } + + sharp@0.33.5: + resolution: + { + integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + sharp@0.34.5: resolution: { @@ -10808,6 +12637,12 @@ packages: } engines: { node: ">=6" } + simple-swizzle@0.2.4: + resolution: + { + integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==, + } + sirv@3.0.2: resolution: { @@ -10843,6 +12678,13 @@ packages: } engines: { node: ">=20" } + smob@1.6.1: + resolution: + { + integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==, + } + engines: { node: ">=20.0.0" } + socket.io-adapter@2.5.6: resolution: { @@ -10924,6 +12766,14 @@ packages: } engines: { node: ">= 12" } + source-map@0.8.0-beta.0: + resolution: + { + integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==, + } + engines: { node: ">= 8" } + deprecated: The work that was done in this beta branch won't be included in future versions + spawn-error-forwarder@1.0.0: resolution: { @@ -11000,6 +12850,13 @@ packages: integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==, } + stop-iteration-iterator@1.1.0: + resolution: + { + integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, + } + engines: { node: ">= 0.4" } + stream-combiner2@1.1.1: resolution: { @@ -11053,6 +12910,34 @@ packages: } engines: { node: ">=20" } + string.prototype.matchall@4.0.12: + resolution: + { + integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==, + } + engines: { node: ">= 0.4" } + + string.prototype.trim@1.2.10: + resolution: + { + integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimend@1.0.9: + resolution: + { + integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimstart@1.0.8: + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: ">= 0.4" } + string_decoder@1.1.1: resolution: { @@ -11065,6 +12950,13 @@ packages: integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, } + stringify-object@3.3.0: + resolution: + { + integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, + } + engines: { node: ">=4" } + strip-ansi@6.0.1: resolution: { @@ -11086,6 +12978,13 @@ packages: } engines: { node: ">=4" } + strip-comments@2.0.1: + resolution: + { + integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==, + } + engines: { node: ">=10" } + strip-dirs@3.0.0: resolution: { @@ -11196,6 +13095,13 @@ packages: } engines: { node: ">=14.18" } + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + svelte@5.55.5: resolution: { @@ -11260,6 +13166,13 @@ packages: integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==, } + temp-dir@2.0.0: + resolution: + { + integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==, + } + engines: { node: ">=8" } + temp-dir@3.0.0: resolution: { @@ -11267,6 +13180,13 @@ packages: } engines: { node: ">=14.16" } + tempy@0.6.0: + resolution: + { + integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==, + } + engines: { node: ">=10" } + tempy@3.2.0: resolution: { @@ -11393,6 +13313,12 @@ packages: } hasBin: true + to-data-view@1.1.0: + resolution: + { + integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==, + } + to-regex-range@5.0.1: resolution: { @@ -11435,6 +13361,12 @@ packages: } engines: { node: ">=16" } + tr46@1.0.1: + resolution: + { + integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, + } + tr46@6.0.0: resolution: { @@ -11545,6 +13477,13 @@ packages: } engines: { node: ">= 0.8.0" } + type-fest@0.16.0: + resolution: + { + integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==, + } + engines: { node: ">=10" } + type-fest@0.20.2: resolution: { @@ -11573,6 +13512,34 @@ packages: } engines: { node: ">=16" } + typed-array-buffer@1.0.3: + resolution: + { + integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-length@1.0.3: + resolution: + { + integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-offset@1.0.4: + resolution: + { + integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, + } + engines: { node: ">= 0.4" } + + typed-array-length@1.0.7: + resolution: + { + integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==, + } + engines: { node: ">= 0.4" } + typescript-eslint@8.59.0: resolution: { @@ -11629,12 +13596,31 @@ packages: } engines: { node: ">=18" } + unbox-primitive@1.1.0: + resolution: + { + integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, + } + engines: { node: ">= 0.4" } + unbzip2-stream@1.4.3: resolution: { integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, } + unconfig-core@7.5.0: + resolution: + { + integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==, + } + + unconfig@7.5.0: + resolution: + { + integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==, + } + undici-types@7.19.2: resolution: { @@ -11661,6 +13647,13 @@ packages: } engines: { node: ">=20.18.1" } + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: + { + integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, + } + engines: { node: ">=4" } + unicode-emoji-modifier-base@1.0.0: resolution: { @@ -11668,6 +13661,27 @@ packages: } engines: { node: ">=4" } + unicode-match-property-ecmascript@2.0.0: + resolution: + { + integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, + } + engines: { node: ">=4" } + + unicode-match-property-value-ecmascript@2.2.1: + resolution: + { + integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==, + } + engines: { node: ">=4" } + + unicode-property-aliases-ecmascript@2.2.0: + resolution: + { + integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==, + } + engines: { node: ">=4" } + unicorn-magic@0.1.0: resolution: { @@ -11682,6 +13696,13 @@ packages: } engines: { node: ">=18" } + unique-string@2.0.0: + resolution: + { + integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, + } + engines: { node: ">=8" } + unique-string@3.0.0: resolution: { @@ -11722,6 +13743,13 @@ packages: integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==, } + upath@1.2.0: + resolution: + { + integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, + } + engines: { node: ">=4" } + update-browserslist-db@1.2.3: resolution: { @@ -11812,6 +13840,21 @@ packages: "@nuxt/kit": optional: true + vite-plugin-pwa@1.3.0: + resolution: + { + integrity: sha512-c5kMgN+ITrOtHXp8PAtk2uOIEea6XjP/unCGxOWWBzQ6qa65qj/awHg0wf+QF9E/2u9vh86LqxPwzEPNbM2r5A==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@vite-pwa/assets-generator": ^1.0.0 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + workbox-build: ^7.4.1 + workbox-window: ^7.4.1 + peerDependenciesMeta: + "@vite-pwa/assets-generator": + optional: true + vite-plugin-vue-devtools@8.1.1: resolution: { @@ -12064,6 +14107,12 @@ packages: integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==, } + webidl-conversions@4.0.2: + resolution: + { + integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, + } + webidl-conversions@8.0.1: resolution: { @@ -12133,6 +14182,40 @@ packages: } engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + whatwg-url@7.1.0: + resolution: + { + integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, + } + + which-boxed-primitive@1.1.1: + resolution: + { + integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, + } + engines: { node: ">= 0.4" } + + which-builtin-type@1.2.1: + resolution: + { + integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, + } + engines: { node: ">= 0.4" } + + which-collection@1.0.2: + resolution: + { + integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, + } + engines: { node: ">= 0.4" } + + which-typed-array@1.1.20: + resolution: + { + integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==, + } + engines: { node: ">= 0.4" } + which@2.0.2: resolution: { @@ -12177,6 +14260,103 @@ packages: integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, } + workbox-background-sync@7.4.1: + resolution: + { + integrity: sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==, + } + + workbox-broadcast-update@7.4.1: + resolution: + { + integrity: sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==, + } + + workbox-build@7.4.1: + resolution: + { + integrity: sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==, + } + engines: { node: ">=20.0.0" } + + workbox-cacheable-response@7.4.1: + resolution: + { + integrity: sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==, + } + + workbox-core@7.4.1: + resolution: + { + integrity: sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==, + } + + workbox-expiration@7.4.1: + resolution: + { + integrity: sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==, + } + + workbox-google-analytics@7.4.1: + resolution: + { + integrity: sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==, + } + + workbox-navigation-preload@7.4.1: + resolution: + { + integrity: sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==, + } + + workbox-precaching@7.4.1: + resolution: + { + integrity: sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==, + } + + workbox-range-requests@7.4.1: + resolution: + { + integrity: sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==, + } + + workbox-recipes@7.4.1: + resolution: + { + integrity: sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==, + } + + workbox-routing@7.4.1: + resolution: + { + integrity: sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==, + } + + workbox-strategies@7.4.1: + resolution: + { + integrity: sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==, + } + + workbox-streams@7.4.1: + resolution: + { + integrity: sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==, + } + + workbox-sw@7.4.1: + resolution: + { + integrity: sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==, + } + + workbox-window@7.4.1: + resolution: + { + integrity: sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==, + } + wrap-ansi@6.2.0: resolution: { @@ -12421,6 +14601,12 @@ snapshots: transitivePeerDependencies: - chokidar + "@apideck/better-ajv-errors@0.3.7(ajv@8.18.0)": + dependencies: + ajv: 8.18.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + "@asamuzakjp/css-color@5.1.11": dependencies: "@asamuzakjp/generational-cache": 1.0.1 @@ -12449,6 +14635,8 @@ snapshots: "@babel/compat-data@7.29.0": {} + "@babel/compat-data@7.29.3": {} + "@babel/core@7.29.0": dependencies: "@babel/code-frame": 7.29.0 @@ -12502,6 +14690,24 @@ snapshots: transitivePeerDependencies: - supports-color + "@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-annotate-as-pure": 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + "@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-compilation-targets": 7.28.6 + "@babel/helper-plugin-utils": 7.28.6 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + "@babel/helper-globals@7.28.0": {} "@babel/helper-member-expression-to-functions@7.28.5": @@ -12533,6 +14739,15 @@ snapshots: "@babel/helper-plugin-utils@7.28.6": {} + "@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-wrap-function": 7.28.6 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + "@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)": dependencies: "@babel/core": 7.29.0 @@ -12555,6 +14770,14 @@ snapshots: "@babel/helper-validator-option@7.27.1": {} + "@babel/helper-wrap-function@7.28.6": + dependencies: + "@babel/template": 7.28.6 + "@babel/traverse": 7.29.0 + "@babel/types": 7.29.0 + transitivePeerDependencies: + - supports-color + "@babel/helpers@7.29.2": dependencies: "@babel/template": 7.28.6 @@ -12568,6 +14791,49 @@ snapshots: dependencies: "@babel/types": 7.29.0 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.3(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/plugin-transform-optional-chaining": 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + "@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)": dependencies: "@babel/core": 7.29.0 @@ -12577,11 +14843,20 @@ snapshots: transitivePeerDependencies: - supports-color + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)": dependencies: "@babel/core": 7.29.0 "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)": dependencies: "@babel/core": 7.29.0 @@ -12602,6 +14877,322 @@ snapshots: "@babel/core": 7.29.0 "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-remap-async-to-generator": 7.27.1(@babel/core@7.29.0) + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-imports": 7.28.6 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-remap-async-to-generator": 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-class-features-plugin": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-class-features-plugin": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-compilation-targets": 7.28.6 + "@babel/helper-globals": 7.28.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-replace-supers": 7.28.6(@babel/core@7.29.0) + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/template": 7.28.6 + + "@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-transform-destructuring": 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-compilation-targets": 7.28.6 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-validator-identifier": 7.28.5 + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-compilation-targets": 7.28.6 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-transform-destructuring": 7.28.5(@babel/core@7.29.0) + "@babel/plugin-transform-parameters": 7.27.7(@babel/core@7.29.0) + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-replace-supers": 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-class-features-plugin": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-create-class-features-plugin": 7.28.6(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)": dependencies: "@babel/core": 7.29.0 @@ -12613,6 +15204,115 @@ snapshots: transitivePeerDependencies: - supports-color + "@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-create-regexp-features-plugin": 7.28.5(@babel/core@7.29.0) + "@babel/helper-plugin-utils": 7.28.6 + + "@babel/preset-env@7.29.5(@babel/core@7.29.0)": + dependencies: + "@babel/compat-data": 7.29.3 + "@babel/core": 7.29.0 + "@babel/helper-compilation-targets": 7.28.6 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/helper-validator-option": 7.27.1 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": 7.28.5(@babel/core@7.29.0) + "@babel/plugin-bugfix-safari-class-field-initializer-scope": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": 7.29.3(@babel/core@7.29.0) + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + "@babel/plugin-syntax-import-assertions": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-syntax-import-attributes": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-syntax-unicode-sets-regex": 7.18.6(@babel/core@7.29.0) + "@babel/plugin-transform-arrow-functions": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-async-generator-functions": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-transform-async-to-generator": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-block-scoped-functions": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-block-scoping": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-class-properties": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-class-static-block": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-classes": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-computed-properties": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-destructuring": 7.28.5(@babel/core@7.29.0) + "@babel/plugin-transform-dotall-regex": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-duplicate-keys": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-transform-dynamic-import": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-explicit-resource-management": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-exponentiation-operator": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-export-namespace-from": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-for-of": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-function-name": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-json-strings": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-literals": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-logical-assignment-operators": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-member-expression-literals": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-modules-amd": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-modules-commonjs": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-modules-systemjs": 7.29.4(@babel/core@7.29.0) + "@babel/plugin-transform-modules-umd": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-named-capturing-groups-regex": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-transform-new-target": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-nullish-coalescing-operator": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-numeric-separator": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-object-rest-spread": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-object-super": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-optional-catch-binding": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-optional-chaining": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-parameters": 7.27.7(@babel/core@7.29.0) + "@babel/plugin-transform-private-methods": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-private-property-in-object": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-property-literals": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-regenerator": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-transform-regexp-modifiers": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-reserved-words": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-shorthand-properties": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-spread": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-sticky-regex": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-template-literals": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-typeof-symbol": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-unicode-escapes": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-unicode-property-regex": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-unicode-regex": 7.27.1(@babel/core@7.29.0) + "@babel/plugin-transform-unicode-sets-regex": 7.28.6(@babel/core@7.29.0) + "@babel/preset-modules": 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/types": 7.29.0 + esutils: 2.0.3 + + "@babel/runtime@7.29.2": {} + "@babel/template@7.28.6": dependencies: "@babel/code-frame": 7.29.0 @@ -12644,6 +15344,8 @@ snapshots: dependencies: css-tree: 3.2.1 + "@canvas/image-data@1.1.0": {} + "@colors/colors@1.5.0": optional: true @@ -13634,25 +16336,47 @@ snapshots: "@img/colour@1.1.0": {} + "@img/sharp-darwin-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.0.4 + optional: true + "@img/sharp-darwin-arm64@0.34.5": optionalDependencies: "@img/sharp-libvips-darwin-arm64": 1.2.4 optional: true + "@img/sharp-darwin-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.0.4 + optional: true + "@img/sharp-darwin-x64@0.34.5": optionalDependencies: "@img/sharp-libvips-darwin-x64": 1.2.4 optional: true + "@img/sharp-libvips-darwin-arm64@1.0.4": + optional: true + "@img/sharp-libvips-darwin-arm64@1.2.4": optional: true + "@img/sharp-libvips-darwin-x64@1.0.4": + optional: true + "@img/sharp-libvips-darwin-x64@1.2.4": optional: true + "@img/sharp-libvips-linux-arm64@1.0.4": + optional: true + "@img/sharp-libvips-linux-arm64@1.2.4": optional: true + "@img/sharp-libvips-linux-arm@1.0.5": + optional: true + "@img/sharp-libvips-linux-arm@1.2.4": optional: true @@ -13662,23 +16386,45 @@ snapshots: "@img/sharp-libvips-linux-riscv64@1.2.4": optional: true + "@img/sharp-libvips-linux-s390x@1.0.4": + optional: true + "@img/sharp-libvips-linux-s390x@1.2.4": optional: true + "@img/sharp-libvips-linux-x64@1.0.4": + optional: true + "@img/sharp-libvips-linux-x64@1.2.4": optional: true + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + optional: true + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": optional: true + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + optional: true + "@img/sharp-libvips-linuxmusl-x64@1.2.4": optional: true + "@img/sharp-linux-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.0.4 + optional: true + "@img/sharp-linux-arm64@0.34.5": optionalDependencies: "@img/sharp-libvips-linux-arm64": 1.2.4 optional: true + "@img/sharp-linux-arm@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.0.5 + optional: true + "@img/sharp-linux-arm@0.34.5": optionalDependencies: "@img/sharp-libvips-linux-arm": 1.2.4 @@ -13694,26 +16440,51 @@ snapshots: "@img/sharp-libvips-linux-riscv64": 1.2.4 optional: true + "@img/sharp-linux-s390x@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.0.4 + optional: true + "@img/sharp-linux-s390x@0.34.5": optionalDependencies: "@img/sharp-libvips-linux-s390x": 1.2.4 optional: true + "@img/sharp-linux-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.0.4 + optional: true + "@img/sharp-linux-x64@0.34.5": optionalDependencies: "@img/sharp-libvips-linux-x64": 1.2.4 optional: true + "@img/sharp-linuxmusl-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + optional: true + "@img/sharp-linuxmusl-arm64@0.34.5": optionalDependencies: "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 optional: true + "@img/sharp-linuxmusl-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + optional: true + "@img/sharp-linuxmusl-x64@0.34.5": optionalDependencies: "@img/sharp-libvips-linuxmusl-x64": 1.2.4 optional: true + "@img/sharp-wasm32@0.33.5": + dependencies: + "@emnapi/runtime": 1.10.0 + optional: true + "@img/sharp-wasm32@0.34.5": dependencies: "@emnapi/runtime": 1.10.0 @@ -13722,9 +16493,15 @@ snapshots: "@img/sharp-win32-arm64@0.34.5": optional: true + "@img/sharp-win32-ia32@0.33.5": + optional: true + "@img/sharp-win32-ia32@0.34.5": optional: true + "@img/sharp-win32-x64@0.33.5": + optional: true + "@img/sharp-win32-x64@0.34.5": optional: true @@ -13885,6 +16662,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + "@isaacs/cliui@9.0.0": {} + "@jridgewell/gen-mapping@0.3.13": dependencies: "@jridgewell/sourcemap-codec": 1.5.5 @@ -14398,6 +17177,10 @@ snapshots: "@polka/url@1.0.0-next.29": {} + "@quansync/fs@1.0.0": + dependencies: + quansync: 1.0.0 + "@rolldown/binding-android-arm64@1.0.0-rc.17": optional: true @@ -14451,6 +17234,124 @@ snapshots: "@rolldown/pluginutils@1.0.0-rc.17": {} + "@rollup/plugin-babel@6.1.0(@babel/core@7.29.0)(rollup@4.60.3)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-imports": 7.28.6 + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + optionalDependencies: + rollup: 4.60.3 + transitivePeerDependencies: + - supports-color + + "@rollup/plugin-node-resolve@16.0.3(rollup@4.60.3)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + "@types/resolve": 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.12 + optionalDependencies: + rollup: 4.60.3 + + "@rollup/plugin-replace@6.0.3(rollup@4.60.3)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + magic-string: 0.30.21 + optionalDependencies: + rollup: 4.60.3 + + "@rollup/plugin-terser@1.0.0(rollup@4.60.3)": + dependencies: + serialize-javascript: 7.0.5 + smob: 1.6.1 + terser: 5.46.1 + optionalDependencies: + rollup: 4.60.3 + + "@rollup/pluginutils@5.3.0(rollup@4.60.3)": + dependencies: + "@types/estree": 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.3 + + "@rollup/rollup-android-arm-eabi@4.60.3": + optional: true + + "@rollup/rollup-android-arm64@4.60.3": + optional: true + + "@rollup/rollup-darwin-arm64@4.60.3": + optional: true + + "@rollup/rollup-darwin-x64@4.60.3": + optional: true + + "@rollup/rollup-freebsd-arm64@4.60.3": + optional: true + + "@rollup/rollup-freebsd-x64@4.60.3": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.60.3": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.60.3": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.60.3": + optional: true + + "@rollup/rollup-linux-loong64-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-loong64-musl@4.60.3": + optional: true + + "@rollup/rollup-linux-ppc64-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-ppc64-musl@4.60.3": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-riscv64-musl@4.60.3": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.60.3": + optional: true + + "@rollup/rollup-linux-x64-musl@4.60.3": + optional: true + + "@rollup/rollup-openbsd-x64@4.60.3": + optional: true + + "@rollup/rollup-openharmony-arm64@4.60.3": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.60.3": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.60.3": + optional: true + + "@rollup/rollup-win32-x64-gnu@4.60.3": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.60.3": + optional: true + "@sec-ant/readable-stream@0.4.1": {} "@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.3))": @@ -14715,6 +17616,13 @@ snapshots: "@tokenizer/token@0.3.0": {} + "@trickfilm400/rollup-plugin-off-main-thread@3.0.0-pre1": + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.30.21 + string.prototype.matchall: 4.0.12 + "@tsconfig/node10@1.0.12": {} "@tsconfig/node12@1.0.11": {} @@ -14861,6 +17769,8 @@ snapshots: dependencies: "@types/node": 25.6.0 + "@types/resolve@1.20.2": {} + "@types/send@1.2.1": dependencies: "@types/node": 25.6.0 @@ -15099,6 +18009,15 @@ snapshots: "@typescript-eslint/types": 8.59.1 eslint-visitor-keys: 5.0.1 + "@vite-pwa/assets-generator@1.0.2": + dependencies: + cac: 6.7.14 + colorette: 2.0.20 + consola: 3.4.2 + sharp: 0.33.5 + sharp-ico: 0.1.5 + unconfig: 7.5.0 + "@vitejs/plugin-vue@6.0.6(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))": dependencies: "@rolldown/pluginutils": 1.0.0-rc.13 @@ -15673,10 +18592,25 @@ snapshots: aria-query@5.3.1: {} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + array-ify@1.0.0: {} array-timsort@1.0.3: {} + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + asap@2.0.6: {} assertion-error@2.0.1: {} @@ -15697,12 +18631,20 @@ snapshots: "@babel/parser": 7.29.3 ast-kit: 2.2.0 + async-function@1.0.0: {} + async@3.2.6: {} asynckit@0.4.0: {} + at-least-node@1.0.0: {} + atomic-sleep@1.0.0: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + avvio@9.2.0: dependencies: "@fastify/error": 4.2.0 @@ -15714,6 +18656,30 @@ snapshots: b4a@1.8.1: {} + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + dependencies: + "@babel/compat-data": 7.29.3 + "@babel/core": 7.29.0 + "@babel/helper-define-polyfill-provider": 0.6.8(@babel/core@7.29.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-define-polyfill-provider": 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-define-polyfill-provider": 0.6.8(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -15849,6 +18815,8 @@ snapshots: byte-counter@0.1.0: {} + cac@6.7.14: {} + cacheable-lookup@7.0.0: {} cacheable-request@13.0.18: @@ -15866,6 +18834,13 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -16009,6 +18984,16 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + colorette@2.0.20: {} combined-stream@1.0.8: @@ -16032,6 +19017,8 @@ snapshots: array-timsort: 1.0.3 esprima: 4.0.1 + common-tags@1.8.2: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -16125,6 +19112,10 @@ snapshots: dependencies: is-what: 5.5.0 + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + core-util-is@1.0.3: {} cors@2.8.6: @@ -16177,6 +19168,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypto-random-string@2.0.0: {} + crypto-random-string@4.0.0: dependencies: type-fest: 1.4.0 @@ -16209,6 +19202,24 @@ snapshots: transitivePeerDependencies: - "@noble/hashes" + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dateformat@4.6.3: {} debug@4.4.3: @@ -16217,6 +19228,17 @@ snapshots: decimal.js@10.6.0: {} + decode-bmp@0.2.1: + dependencies: + "@canvas/image-data": 1.1.0 + to-data-view: 1.1.0 + + decode-ico@0.4.1: + dependencies: + "@canvas/image-data": 1.1.0 + decode-bmp: 0.2.1 + to-data-view: 1.1.0 + decompress-response@10.0.0: dependencies: mimic-response: 4.0.0 @@ -16240,8 +19262,20 @@ snapshots: defaults@2.0.2: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + defu@6.1.7: {} delayed-stream@1.0.0: {} @@ -16358,6 +19392,10 @@ snapshots: minimatch: 9.0.9 semver: 7.7.4 + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.335: {} emoji-regex@10.6.0: {} @@ -16436,6 +19474,63 @@ snapshots: error-stack-parser-es@1.0.5: {} + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.3 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.20 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -16453,6 +19548,12 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + esbuild@0.25.12: optionalDependencies: "@esbuild/aix-ppc64": 0.25.12 @@ -16650,6 +19751,8 @@ snapshots: esutils@2.0.3: {} + eta@4.6.0: {} + event-target-shim@5.0.1: {} eventemitter3@5.0.4: {} @@ -16805,6 +19908,10 @@ snapshots: transitivePeerDependencies: - supports-color + filelist@1.0.6: + dependencies: + minimatch: 5.1.9 + filename-reserved-regex@4.0.0: {} filenamify@7.0.1: @@ -16850,6 +19957,10 @@ snapshots: flatted@3.4.2: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -16905,6 +20016,13 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs-monkey@1.1.0: {} fsevents@2.3.3: @@ -16914,10 +20032,23 @@ snapshots: function-timeout@1.0.2: {} + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.3 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + generate-function@2.3.1: dependencies: is-property: 1.0.2 + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -16937,6 +20068,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-own-enumerable-property-symbols@3.0.2: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -16953,6 +20086,12 @@ snapshots: "@sec-ant/readable-stream": 0.4.1 is-stream: 4.0.1 + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -16991,6 +20130,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.5 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.2 + glob@13.0.6: dependencies: minimatch: 10.2.5 @@ -17005,6 +20153,11 @@ snapshots: globals@17.5.0: {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + gopd@1.2.0: {} got@14.6.6: @@ -17035,10 +20188,20 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 + has-bigints@1.1.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -17049,6 +20212,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + helmet@8.1.0: {} help-me@5.0.0: {} @@ -17119,6 +20286,8 @@ snapshots: husky@9.1.7: {} + ico-endec@0.1.6: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -17127,6 +20296,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb@7.1.1: {} + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -17163,6 +20334,12 @@ snapshots: dependencies: kind-of: 6.0.3 + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.3 + side-channel: 1.1.0 + into-stream@7.0.0: dependencies: from2: 2.3.0 @@ -17170,18 +20347,72 @@ snapshots: ipaddr.js@2.3.0: {} + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-arrayish@0.2.1: {} + is-arrayish@0.3.4: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.3 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-docker@3.0.0: {} is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.5.0 + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -17192,8 +20423,21 @@ snapshots: is-interactive@1.0.0: {} + is-map@2.0.3: {} + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} + is-obj@1.0.1: {} + is-obj@2.0.0: {} is-plain-obj@1.1.0: {} @@ -17208,18 +20452,61 @@ snapshots: dependencies: "@types/estree": 1.0.8 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.3 + + is-regexp@1.0.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@2.0.1: {} + is-stream@3.0.0: {} is-stream@4.0.1: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.20 + is-unicode-supported@0.1.0: {} is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-what@5.5.0: {} is-wsl@3.1.1: @@ -17228,6 +20515,8 @@ snapshots: isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} isexe@3.1.5: {} @@ -17263,6 +20552,16 @@ snapshots: optionalDependencies: "@pkgjs/parseargs": 0.11.0 + jackspeak@4.2.3: + dependencies: + "@isaacs/cliui": 9.0.0 + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.6 + picocolors: 1.1.1 + java-properties@1.0.2: {} jest-worker@27.5.1: @@ -17355,6 +20654,8 @@ snapshots: jsonparse@1.3.1: {} + jsonpointer@5.0.1: {} + jsonwebtoken@9.0.3: dependencies: jws: 4.0.1 @@ -17395,6 +20696,8 @@ snapshots: dependencies: readable-stream: 2.3.8 + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -17515,6 +20818,8 @@ snapshots: lodash.capitalize@4.2.1: {} + lodash.debounce@4.0.8: {} + lodash.escaperegexp@4.1.2: {} lodash.includes@4.3.0: {} @@ -17539,6 +20844,8 @@ snapshots: lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} lodash.uniq@4.5.0: {} @@ -17680,6 +20987,10 @@ snapshots: dependencies: brace-expansion: 1.1.13 + minimatch@5.1.9: + dependencies: + brace-expansion: 2.0.3 + minimatch@9.0.9: dependencies: brace-expansion: 2.0.3 @@ -17815,6 +21126,17 @@ snapshots: object-inspect@1.13.4: {} + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + obug@2.1.1: {} ohash@2.0.11: {} @@ -17867,6 +21189,12 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + oxlint@1.62.0: optionalDependencies: "@oxlint/binding-android-arm-eabi": 1.62.0 @@ -18015,6 +21343,8 @@ snapshots: path-key@4.0.0: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -18170,6 +21500,8 @@ snapshots: pluralize@8.0.0: {} + possible-typed-array-names@1.1.0: {} + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 @@ -18201,6 +21533,10 @@ snapshots: prettier@3.8.3: {} + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 @@ -18234,6 +21570,8 @@ snapshots: quansync@0.2.11: {} + quansync@1.0.0: {} + queue-microtask@1.2.3: {} quick-format-unescaped@4.0.4: {} @@ -18311,10 +21649,51 @@ snapshots: reflect-metadata@0.2.2: {} + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + registry-auth-token@5.1.1: dependencies: "@pnpm/npm-conf": 3.0.2 + regjsgen@0.8.0: {} + + regjsparser@0.13.1: + dependencies: + jsesc: 3.1.0 + reka-ui@2.9.6(vue@3.5.33(typescript@5.9.3)): dependencies: "@floating-ui/dom": 1.7.6 @@ -18343,6 +21722,13 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + responselike@4.0.2: dependencies: lowercase-keys: 3.0.0 @@ -18384,6 +21770,37 @@ snapshots: "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.17 "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.17 + rollup@4.60.3: + dependencies: + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.60.3 + "@rollup/rollup-android-arm64": 4.60.3 + "@rollup/rollup-darwin-arm64": 4.60.3 + "@rollup/rollup-darwin-x64": 4.60.3 + "@rollup/rollup-freebsd-arm64": 4.60.3 + "@rollup/rollup-freebsd-x64": 4.60.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.60.3 + "@rollup/rollup-linux-arm-musleabihf": 4.60.3 + "@rollup/rollup-linux-arm64-gnu": 4.60.3 + "@rollup/rollup-linux-arm64-musl": 4.60.3 + "@rollup/rollup-linux-loong64-gnu": 4.60.3 + "@rollup/rollup-linux-loong64-musl": 4.60.3 + "@rollup/rollup-linux-ppc64-gnu": 4.60.3 + "@rollup/rollup-linux-ppc64-musl": 4.60.3 + "@rollup/rollup-linux-riscv64-gnu": 4.60.3 + "@rollup/rollup-linux-riscv64-musl": 4.60.3 + "@rollup/rollup-linux-s390x-gnu": 4.60.3 + "@rollup/rollup-linux-x64-gnu": 4.60.3 + "@rollup/rollup-linux-x64-musl": 4.60.3 + "@rollup/rollup-openbsd-x64": 4.60.3 + "@rollup/rollup-openharmony-arm64": 4.60.3 + "@rollup/rollup-win32-arm64-msvc": 4.60.3 + "@rollup/rollup-win32-ia32-msvc": 4.60.3 + "@rollup/rollup-win32-x64-gnu": 4.60.3 + "@rollup/rollup-win32-x64-msvc": 4.60.3 + fsevents: 2.3.3 + run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -18398,10 +21815,29 @@ snapshots: dependencies: tslib: 2.8.1 + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safe-regex2@5.1.0: dependencies: ret: 0.5.0 @@ -18486,10 +21922,66 @@ snapshots: semver@7.7.4: {} + serialize-javascript@7.0.5: {} + set-cookie-parser@2.7.2: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} + sharp-ico@0.1.5: + dependencies: + decode-ico: 0.4.1 + ico-endec: 0.1.6 + sharp: 0.34.5 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.33.5 + "@img/sharp-darwin-x64": 0.33.5 + "@img/sharp-libvips-darwin-arm64": 1.0.4 + "@img/sharp-libvips-darwin-x64": 1.0.4 + "@img/sharp-libvips-linux-arm": 1.0.5 + "@img/sharp-libvips-linux-arm64": 1.0.4 + "@img/sharp-libvips-linux-s390x": 1.0.4 + "@img/sharp-libvips-linux-x64": 1.0.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + "@img/sharp-linux-arm": 0.33.5 + "@img/sharp-linux-arm64": 0.33.5 + "@img/sharp-linux-s390x": 0.33.5 + "@img/sharp-linux-x64": 0.33.5 + "@img/sharp-linuxmusl-arm64": 0.33.5 + "@img/sharp-linuxmusl-x64": 0.33.5 + "@img/sharp-wasm32": 0.33.5 + "@img/sharp-win32-ia32": 0.33.5 + "@img/sharp-win32-x64": 0.33.5 + sharp@0.34.5: dependencies: "@img/colour": 1.1.0 @@ -18569,6 +22061,10 @@ snapshots: figures: 2.0.0 pkg-conf: 2.1.0 + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + sirv@3.0.2: dependencies: "@polka/url": 1.0.0-next.29 @@ -18591,6 +22087,8 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 + smob@1.6.1: {} + socket.io-adapter@2.5.6: dependencies: debug: 4.4.3 @@ -18657,6 +22155,10 @@ snapshots: source-map@0.7.6: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + spawn-error-forwarder@1.0.0: {} spdx-correct@3.2.0: @@ -18689,6 +22191,11 @@ snapshots: std-env@4.1.0: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + stream-combiner2@1.1.1: dependencies: duplexer2: 0.1.4 @@ -18730,6 +22237,45 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.2.0 + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -18738,6 +22284,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -18748,6 +22300,8 @@ snapshots: strip-bom@3.0.0: {} + strip-comments@2.0.1: {} + strip-dirs@3.0.0: dependencies: inspect-with-kind: 1.0.5 @@ -18818,6 +22372,8 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} + svelte@5.55.5(@typescript-eslint/types@8.59.1): dependencies: "@jridgewell/remapping": 2.3.5 @@ -18880,8 +22436,17 @@ snapshots: - bare-abort-controller - react-native-b4a + temp-dir@2.0.0: {} + temp-dir@3.0.0: {} + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + tempy@3.2.0: dependencies: is-stream: 3.0.0 @@ -18955,6 +22520,8 @@ snapshots: dependencies: tldts-core: 7.0.29 + to-data-view@1.1.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -18975,6 +22542,10 @@ snapshots: dependencies: tldts: 7.0.29 + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -19049,6 +22620,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.16.0: {} + type-fest@0.20.2: {} type-fest@1.4.0: {} @@ -19057,6 +22630,39 @@ snapshots: type-fest@4.41.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typescript-eslint@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): dependencies: "@typescript-eslint/eslint-plugin": 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) @@ -19092,11 +22698,31 @@ snapshots: uint8array-extras@1.5.0: {} + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 + unconfig-core@7.5.0: + dependencies: + "@quansync/fs": 1.0.0 + quansync: 1.0.0 + + unconfig@7.5.0: + dependencies: + "@quansync/fs": 1.0.0 + defu: 6.1.7 + jiti: 2.6.1 + quansync: 1.0.0 + unconfig-core: 7.5.0 + undici-types@7.19.2: {} undici-types@7.24.7: {} @@ -19105,12 +22731,27 @@ snapshots: undici@7.25.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-emoji-modifier-base@1.0.0: {} + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -19138,6 +22779,8 @@ snapshots: graceful-fs: 4.2.11 node-int64: 0.4.0 + upath@1.2.0: {} + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 @@ -19190,6 +22833,19 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-pwa@1.3.0(@vite-pwa/assets-generator@1.0.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1): + dependencies: + debug: 4.4.3 + pretty-bytes: 6.1.1 + tinyglobby: 0.2.16 + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + workbox-build: 7.4.1 + workbox-window: 7.4.1 + optionalDependencies: + "@vite-pwa/assets-generator": 1.0.2 + transitivePeerDependencies: + - supports-color + vite-plugin-vue-devtools@8.1.1(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3)): dependencies: "@vue/devtools-core": 8.1.1(vue@3.5.33(typescript@5.9.3)) @@ -19354,6 +23010,8 @@ snapshots: web-worker@1.5.0: {} + webidl-conversions@4.0.2: {} + webidl-conversions@8.0.1: {} webpack-node-externals@3.0.0: {} @@ -19410,6 +23068,53 @@ snapshots: transitivePeerDependencies: - "@noble/hashes" + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.20 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.20: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -19431,6 +23136,119 @@ snapshots: wordwrap@1.0.0: {} + workbox-background-sync@7.4.1: + dependencies: + idb: 7.1.1 + workbox-core: 7.4.1 + + workbox-broadcast-update@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-build@7.4.1: + dependencies: + "@apideck/better-ajv-errors": 0.3.7(ajv@8.18.0) + "@babel/core": 7.29.0 + "@babel/preset-env": 7.29.5(@babel/core@7.29.0) + "@babel/runtime": 7.29.2 + "@rollup/plugin-babel": 6.1.0(@babel/core@7.29.0)(rollup@4.60.3) + "@rollup/plugin-node-resolve": 16.0.3(rollup@4.60.3) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.3) + "@rollup/plugin-terser": 1.0.0(rollup@4.60.3) + "@trickfilm400/rollup-plugin-off-main-thread": 3.0.0-pre1 + ajv: 8.18.0 + common-tags: 1.8.2 + eta: 4.6.0 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 11.1.0 + pretty-bytes: 5.6.0 + rollup: 4.60.3 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.4.1 + workbox-broadcast-update: 7.4.1 + workbox-cacheable-response: 7.4.1 + workbox-core: 7.4.1 + workbox-expiration: 7.4.1 + workbox-google-analytics: 7.4.1 + workbox-navigation-preload: 7.4.1 + workbox-precaching: 7.4.1 + workbox-range-requests: 7.4.1 + workbox-recipes: 7.4.1 + workbox-routing: 7.4.1 + workbox-strategies: 7.4.1 + workbox-streams: 7.4.1 + workbox-sw: 7.4.1 + workbox-window: 7.4.1 + transitivePeerDependencies: + - "@types/babel__core" + - supports-color + + workbox-cacheable-response@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-core@7.4.1: {} + + workbox-expiration@7.4.1: + dependencies: + idb: 7.1.1 + workbox-core: 7.4.1 + + workbox-google-analytics@7.4.1: + dependencies: + workbox-background-sync: 7.4.1 + workbox-core: 7.4.1 + workbox-routing: 7.4.1 + workbox-strategies: 7.4.1 + + workbox-navigation-preload@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-precaching@7.4.1: + dependencies: + workbox-core: 7.4.1 + workbox-routing: 7.4.1 + workbox-strategies: 7.4.1 + + workbox-range-requests@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-recipes@7.4.1: + dependencies: + workbox-cacheable-response: 7.4.1 + workbox-core: 7.4.1 + workbox-expiration: 7.4.1 + workbox-precaching: 7.4.1 + workbox-routing: 7.4.1 + workbox-strategies: 7.4.1 + + workbox-routing@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-strategies@7.4.1: + dependencies: + workbox-core: 7.4.1 + + workbox-streams@7.4.1: + dependencies: + workbox-core: 7.4.1 + workbox-routing: 7.4.1 + + workbox-sw@7.4.1: {} + + workbox-window@7.4.1: + dependencies: + "@types/trusted-types": 2.0.7 + workbox-core: 7.4.1 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0