From c14efe86ccacad2bffdb2c441f75225d3c3ee19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 27 Sep 2025 16:07:45 -0500 Subject: [PATCH] fix: update errors --- bun.lockb | Bin 549473 -> 555062 bytes packages/i18n/src/unwrapper.ts | 8 +-- packages/website/package.json | 3 + .../Armor/components/ModelTankWrapper.tsx | 13 ++-- .../Armor/components/PrimaryArmorScene.tsx | 52 +++++++-------- .../Armor/components/SpacedArmorScene.tsx | 60 +++++++++--------- .../Armor/components/StaticArmor.tsx | 4 +- .../components/StaticArmorSceneComponent.tsx | 8 +-- packages/website/src/components/Footer.astro | 60 +++++++++--------- .../website/src/components/Gallery/Card.tsx | 30 ++++----- .../src/components/HelpingSpotLight.tsx | 5 +- .../components/Home/HomeLocaleSwitcher.tsx | 14 ++-- packages/website/src/components/LinkI18n.tsx | 10 +-- .../src/components/LocaleRedirector.astro | 7 +- .../website/src/components/Nivo/ThemedBar.tsx | 19 ------ .../src/components/Nivo/ThemedLine.tsx | 15 ----- .../src/components/Performance/RowLoader.tsx | 12 ++-- .../website/src/components/SmartCanvas.tsx | 12 ++-- .../components/SkeletonTankCard.tsx | 10 +-- .../Characteristics/components/Info.tsx | 2 +- .../TankSandbox/components/TankModel.tsx | 4 +- .../components/TransitionSkeleton/index.tsx | 4 +- .../Tankopedia/HeroSection/index.tsx | 2 +- .../website/src/core/blitzkit/jsxTree.tsx | 19 ++++-- .../website/src/core/i18n/getBestLocale.ts | 12 ++-- packages/website/src/core/nivo/theme.ts | 39 ------------ packages/website/src/hooks/useIntersection.ts | 6 +- packages/website/src/hooks/useLocale.tsx | 11 ++-- packages/website/src/hooks/useOnScreen.ts | 8 +-- packages/website/src/layouts/BaseLayout.astro | 3 +- .../[...locale]/embed/[embed]/_index.tsx | 2 +- .../src/pages/[...locale]/mixer/_index.tsx | 2 +- .../src/pages/[...locale]/settings/_index.tsx | 3 +- .../[...locale]/tanks/[slug]/index.astro | 38 +++++------ 34 files changed, 217 insertions(+), 280 deletions(-) delete mode 100644 packages/website/src/components/Nivo/ThemedBar.tsx delete mode 100644 packages/website/src/components/Nivo/ThemedLine.tsx delete mode 100644 packages/website/src/core/nivo/theme.ts diff --git a/bun.lockb b/bun.lockb index 90fba2261e6f9085fedea2875914cf8e7add1af3..00fca5d1352ff0f6ddc53c6864f9d837d2425dfc 100755 GIT binary patch delta 51741 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 QKTZFNuBK*|ep~l{1KxJphX4Qo delta 48380 zcmeFacYGDq+J-$l$qw0QKsurK-rG)q&=CSeq=!y`Kmvr`TS8F?7$I(O(Gd{^6a*0i zDt4qODppWYv7-k&M-Y+ky7#ONIlP?no$q^p?|<%}H_v*m^{g^$)~uO5vok*RQ^m8d zR9soF=F?ZNmUwpewzg?k_bhFEdGe51Z`Dtped6ptN{t=Ub?5vMPo7MUa`f@%^eZ3s zQT4qu-zwqjf5CBlj+41D(7$9SPpiO|lI7zzUv!*;upDdwtci1+QrM_JT%K<2OV&~&#*ifUwjCD47Lrn9Cj^Sb|$tW_RonV^+Jyo^#r$WleMb@vr2dOR0|v{-KmzZl*hT18orNl?Zo7< z6Et$a;}?d1hP?%QGA7WxOu0gbZP?T)wN%$sg32fR( z4H$D0UxW2-C3o}p+qk7z&6LT3n&ql{1_yeSD^YP?Lzhi>zzNndC4EA$lA>@8RYD-E zT&J*4n+D!4*DParV~aFq{DhEGb_o;{s(gp})s!l&jjhCv^2V zjqr!I@;EiI-?sBO@z}?)ao8EySZsT26Kp|iKWgjx+go^?s_^ajjj_|Qs&85kk5dcV zucybU<2V_a4M|i36vOJs>0kqkU>oAU+1t$@(Z`)OpSN-ON^E`dhhytun^+rZ?djGY zr!IUKmWDDHVzu!}SaqOY&}J}On|qu}fC!uMAzQ3~y>`o&THDOp0@xble;x1I=d8Wo z+6h>VerIbdTKh*!m%oeE2Je>5AhFbf;nudawggr~_=_FN6V@)Wb|_YdSqp1RSoomwyM33n%dEW}s|~J-jo19xn(Fqbdzw4Jy<}8?e;wx@fk&~LUpuYM#%j(q37o80 zKjW5h?qM_0(t%jb>Xa$drlyUX;`~y{7(T{vz93(#%VBGC zu{zFoSQ}o^oz^8T?kso= ztG#Nl+WL7|t%XBbKsbg6W>%f!Ht;c49e4w)ie^k9g3pqG|PVFY+$8!aw0ExOk*{Y8f+S_;^(?GG+KQPO(lh`5K3wSWScX?sm(KPnnvYJY}p? zaf#c(9a!z45=-6s9q)eVXVRGG+nIATA8~BkpHSo#3u04s>o*uWtZQyJ2)lhLN)`+mH z#!pM9Q}}A|A1htkD93GQV%n%#f!@`M_WYO(&Dl`Tp1;o>+KFl7$EKw?&J*~-DTP%7 zuiN<0+)uZB7hJofeP-b4YUMKCS?$i)v?P9%*i=UDC-E8+d zV#PYQf*-NkQ?ct^f7#Iv)NivJ5{uR3nmVQK#0e==ohA>sT^Z(a_iY#QHN<;21xnSZ zma&x@RMY)f;Y$y?OZt;o`86MMt1XGu5G~#6#uwS9r5Li^fu{ z%71S8n^<;1M&`#fq&fH^Ru^4!>4+|#-rVjE&BWj)vaf7MA7m&rL^)Vh$bJrXbV~Bn z2^?Ea^GDt7t%lW*mB1=KHDzYq$)krm1@JYrNnH2&bW}P3jllVx?xg6m%N@WG$>}NM z(q^Z8X!+|{#pPnPes0C8feMeimj$CnjZ2=&9PR~IgI%y{s0~*8xbj}N+y{Hyju((0 zJSqX2jo(_k?g_Wz1Nf?lJ(-?1GiCA-d=2Ri%dhTpmyPeR>QJyk?0WLm(P`sHrj1}k z?#0)xJh0#G(D0Or$!X)KI#uY{C^hg*u6y2FkF9_|$J&9`w!~_EDr@c4r`)scS!-Xx zY8O6Y?Q*OxlqO-dD+}!0x31PFCH7^udm;b6J&D`HqZap>_E*pH9WL%m>M<-VDz;CF zVxK2gt-kL-uREXj4d?vTf>K2SIRpK^hpp!Xa*p_YXYm@7=M9|P;P;K@J3@QB@IaxF ze&0^KW_S@n?=!qcL9fRGzpwD`j?*14GSFj;-yc05^}bfF z#2=1xJ6=SfN1ER^*Lsn`T25LoEVvORF1s5M8915j_avCClAhMS`+z;KRrV#Gy6ZMu z?oY?*g69k5O!xaz@zlY5ftqb;oOkM-PYiz1i{t*@Ij7UL(~6?$K`ZG%>z1p4Og) zCIRDn{;Jzaws^eXcL}cnk?f4VeqT+;6Wnc4ft-_m-%vcYOE$ApINw;@ zxK$)=>5oWub!oMTYo*7Mw8fqzX^VNh*Ju}#-Q8kqN!oy~N!ohrMqZ1ZPSW=3nd>wn z-?d^rNZMj+NZRgvLDKf2PSmy7StKoeiKJVvC!aZ1g#n7r?{SjNi7E`xc#;F%Uy%nZP$uzA!&Q_2T2>-zfh1?r#Gbf1uO9R3VVWw zG)L_)zqf#7QVTpVu@l^8sqmqiPtP};;9zi??^QXL=S1x_4Wyg>HQ z7QSMoJWd;;!U8>5VEb5)4vzPGR-0oD)oWn4V6QcZg-W~M^w}_0mF{?2+VB{c)p+#+ z(Sus}UM8j0IJju|F5tPlfd$Z0(_}TKn1+aOJ#$=Wa)#eSTlxa(1VhlMNZ#b+}r>SThIty{GV6 z2D1CI&-i+#<;EM__;GmJ&hX$0c>qs~mJ?jUzQxlr#rCB8!)sOW1eOnu_Z_Mb>apfd zQbo7Xe8CPqi#aoh%!vd~%P3N+$&I?FipSxMO}#luu_hso?Mkcaak$*0 z;gd)FVF#<4<8iEkKI3c7pb>-drB!q13PUxNRTEFs%Ii*~k8m|G)X5&ISl!(d;ej5* z{k~p!{m3gA$l2)+J6qixZ^43JzQ(nA$t37+y$Hp4HkquJv>08JYX=H4Gd9FV;4p$8 zw+MT@rs)z-4ZlGKk?n5Powf3Mk6DlYa8`<{%`!tI$4MD>%_Q9VxKV)~hy1=Hc$%|n z#qTRo#}hnBxf_y#ckPJsZN$?q<-#D@@B7GloUz#ZF?B2^}~# zhBsmk1`?U6_mR@TxEBqd<8{X4*kBLUG6@~2X@<$dgniW59Pj99<&A4XUrb_0P6iny zhXqdj+QR!OsZr*HV8^B&XMmgBOtOs|`Wwk^f$T3@c-u5%HoN(YNwy1?f0a~AH!{r6 zoH2=gSd~d7nZ)sKs*TB}df&Ui;3PCXB0RAXvFt6AIEW!6rGv~J=!f!p-kx}rTe`{@frnA%xcLsM3+SNZ=)`p0?FnA zFvag%jptshaN+1ZiDx^vrK`ue+wEudZXRc(awjXiNa89yvU zeY=#@&;$w%_It}FUmLyU*OQm7Cr1yz7VzHnWcv~9RJWDKuO~~7yhfJltf~iN2g}@+W&*#l(&0B9I~0wBv4u z6R8BBY9=|^Q{A_ZY+V^~?ZWBz9G(_MPV#&?96W*H4thEXzJ_NnyjTFd6R%xNjE#-L zxwh8(GXBLojMpL90E>gyHz~M?X?5#FvJDwrI2`tSmKfhiM({AOr8yDLdY^^w>oD0} zAM%+(%eer<)4~^FPBw8pT?KHCh>ad_2=u0r*gq7L+`zK%>vQGT6kX})kqg*-hT#DiHBSGT1|87aj*JT;pyZO z^uoTJX1b)ZzsgS!^+SthKRk_~+g1*qwx83{K!4cD>848>JF$q#N@E=En87#&5;wH) z-9t(j+R2V-9f=^_LiG5kr$cnydN zUf_lOKF@TSL`={5?&F|BfgS_>-fehY0@(vw_iEi1-vwt#D;B%CQDS2?qMZ`?BY{Zix4-glgu}6E3M=wI1J=U-kQ{ zEeOq3UHA^ev$G+^?_Gn(x9`3!!rotC@=v4pl^42gv+w%)y~%iO0@3|ic(;(MXR-^h zZoEmdW#GifmJy3=XFThiKiCa8x!|hFL>d_W z8a%BR+$^Dz&+xQIn9*EOm(Ow!R=hW2qi|FsS6kElVcW7ym$?l5Rj4ZC=$^=RZ1ZKI z{iL;MGM>5=JX*Z3;x!K>o^0WBmb+2K1382IVX@22@p(-4S<6lS`Pdhin=V*y*gcAm zp4~EnM1$b>sd1z1Fl*S==b?bZFdciBKu-{jh z{0r%N{7R;K@bH;LN|NZXF z3a;7SbUeNY`Z-@J6)em8>OCLiiKF4h-8=3YpM|Fzbsm$GpX+G6Iy%06;cG%eNXx#F zc$B`lAhtTA1d(WSy`L!Hnr&%krLU5LA*2d(GcQuy_nrxQ-yb)jZd zZX=$W34ZDF{(;A0#NCnG*N2+dU4UhH4K!oIo?dU3-9zgU8*F>-7t~g`?ufGGVY4@w zF4+Vffa-u}Rx%I%Qjy@kiQQ;VoWa?;7*C_dDnp0f##4vF126WjZ(g|9(>bitCX;`K zXTJB)CVF8`G-eQ-&F1(DS{S=Iv|n^adj?N4#GR5?@ceiT!kd0y>jy&nKx=r;HIHLE z?9B&EmmF$qxW(;>dlXH=(=vv~0lF2hDPE!A7ll)J`l`vSOZA6EK4_NRr$gmIZhV;R zd|Xbxh;6gzaKA-JeDaIruc{4P2j{c-XE2Xr{y?!u-?}v%J%_4 zBU><7QO#}c$dw9u)9|_mE7I1#fTzd;!AAbHkugE9^TY0zai46w-@6B|Z}2#be8e5G zTY~j<#?yBtUvNoYg4Yp`^8~fOjyC`=+7wFT2-?nV$7^|W@OtCjqHv^DMcAB9@yP4<7ra4hi|@J?g1FQcjOz5=iUorGrjxp zVuLgN`(5VvdY16!yG{NLbUbsnCwR}^F*)-+v7X&#nP|($xqc3|Lr=ptJZ|!DguVrJ zFEliC#rL><39hnXckVIEi1Ehmqjjo$z|VFlMJU;TaV8Nof@jmEpSF8UtFQzX|Ehy7vYo-|z^puw3>5)+_7 z?+c_lnZ$*xRr}q&?lFbtd;DSD_M0wS2wed7YncjralbhZ3A?c0~E;^jM-H!l@W-wW77lsob-UbUyWoqR2C(Z6_~;SIc&*W#JH z-u-y}ujT!Srzsn3A*{o*xy!bB{wR^b<2@&Tq~nBPZ^h~(%N%vOV)Zq-r{%Kx($Wj7 zuge>d+I(3regG@9)^b_Zv(EbKA}J-XUcjV3=P8j;36<-{#{1R?{t6)N)q%Dxwsz52YdRiGPzp9N3 zT9f#qr+jc9R<~GI)zz@JrscBYwXFZ2td6mI#A!Pl+IU%&Z-iAhnpoQ`9|yHQB>sn0 z1#xg?wXp@-*|@y6D*2<~YIrP`XaCMjtQwqU<7MT~#;V?V)}Nn`_LY%gLGV@|zN}`~ z-B^8YW>ry^&ChF9-!fa@a%=CgakA>@N^4iCVSQHpf3T`x4e=Vvb+(+W8eVVh25UE3 zy9uifZ?XP^Sk;s9FbRF~T4n6C0lRI!tQy>7?Gu*Es^NWDt)mC9{K~>PV*S^#`sB5$ z|1Fni1QV+GZGhNmTR>Jl{urx@&tlck=UBymiPc9|ao<>e&f4!S|H1k{VLK7$=QN}8 zaXQ^-{wbjfT4L3+Hdr;(7OOeX39FB+3MN=TuT^{(%kx_Cu9nNH{_a@S(*ql>`QKX! zY(JaP-}-~B9csCLlCQXt){eG34XcXNvHa&uvwQ|t9hiw#{#?uFTYn+8rZVm(p^CGx zDzFTz9^Pa53i)Q^VNdyn3R`FKMyv*CtFp1%EZ>e*wU3FL^M^ep+N#)oTuy{t@dRmv1`0>ZzWgYCf>pr?G0~jP*aY_AFL$Ut0fb>z}j!_tyWx+Mg}| z)!GYKZPjJ0KC^8iB-8(Hh-0N ztO8bBa5JldYslA@t-~sQJyx@HD^~dr+x+cVePk8C)B1U>%0FuPqq?+LMf+@l{We2Z z6(7K=$In_Ws|pTb)xh&u#l2+n{~N3NUbXdP9I=U`wgOpIeBAo7YVbAd%gTQpt7GjX zRu#Ty^YdE8y>Gd!>OEzBS@JWS(-!2lD)^!0vKpb!-2%=RmglvK|I%_*OE?)C$|$S?^V>jK z`L|kMR$CHn{k&GQz6e}fUc$zev^K`Z%c{Q8)|U+~Y&vPmjj)PqY`LubCe}91uY1LONc_KA6>MhXWYw`)tQu-*{Z?4*l8#t?g4UdW zovUpX?`*NG20YRFvZ}5-R(rgs<+9?vu`1uk<|o#Of% zTQILx15+)Rl|SA3d96A&%kuxms-8JEeop@2e$ETXwE^05O9|8#WZ42Yvl`fyNV7*tq|#E%om!$bEX7=lI|ESlsdd`yLCE zj?WvB_K3OJ-J!qlv1o{N??s1f0WA#HYLWW;9*et1{(X<-?|UqN-(&gv9*esg{C$tb zy;T4E9*a94x^mU4E9t!VR&*AX|Mxu>U03{lkLB-sEV|dC%gg_CZ$(Fq@^v)*eUIhu zdo1>j!Q?zvQ{(S@EdST{SYrO|J(eYxE_reF){e zXOcXCLx8ZWVJ3fAcwZA021ySi#A6PI5pqDFY&am?q=f@g!vQA*ye1|BP%;8AF9N`y zr3xGssOtsz%q%ZprWbHV;1*Le5>O)&kR1t#Hm3zn3B>0E6f{}+088@$&I=SWaZ!NS zD8R-jKoN6J;9G%2AE207>jSLu0j>z}*Hrldo$~{B-08$G8P6$*rF$Kf>d8(O7 zGS$s7nHr|zZJ3&7mP{>kQl_@4SqM|dERd;dPRrCY4GUxHn=F|I=B!LZ6ITS&$mGa0 zHs@rTn6^bRP0d=FX69!ZKY!(pi8Whf;>;zP=B7t+ObfF^rls+ez{H#WGOf&BnbyWv z64S;c%d|BIG3G!?ZDkA_)!wAVz&n^1WjdOeQkdJ#B$-a;m`rC=u{0*Z%)*$Nr73!* zG)23bnq}bK%mSH2a~fk#l_5L6EZN;nR$2I+=B!K)6ITw?)8xqXGUsG^o3`aKeau>! zzUF6{ekP#;6?LvaMY}3cQGatu;G)3bihzM;M@7K)ih$@!fWfAJB|uUoz#)O5##b2- zRT+?88IWua3LFq9TLmz}q*Vc=Rsoz4NHH;00VS&f=2ZoZHpc{x3e>FzNHepl0cKVM zoDmpnYE}o-s1C@k4oEkr1x^XX*8of~Sv3GlYXHs*Ofqpb0kJg!8*2ilm~#T(3MAG7 zOfze10oK$4ToIUI5^4iF*9PpW4VYyv30xEyTn8}6?5G3SUI!3e7ckHCuM0@33pgZ@ z!QU$bqUr(C>j4&+g8~Nx%GL)gGHLYzsr3OT1nx314FDw@0OmCSEHTFfjtbOm2*@(C z8UkiE1e_6AZfZ6H)My0AZUo3Srv*+4#5V@4;7^4COB(~u3*?x%CVfSD};X9ONKHRAy_;sM$5fL-Raz$tfHFtZcjjKFKAW@kW+&VcOBfD`7lz$t=HfmVJ< zpp}y*t_vWx3lST;5b=&VC-AL6VpqU>W^Gr%ny!E=0w0)!Zh+3+0K2*YPMb>t7X=0< z0zNW35&_#20nv8=&Y1pp0Fv$i91{4{___n4x&zX?1J0U*0tW=j-U;}^q}>Tfy%TUk z;42f;15mODU|tWvH|ChYQGvQW0q4xDo`9J>0cQlhH#K_!YV-nR_X3x4^#R280c`98_|=>f_*NjXFW`b%+ZV8=FW`#6?E9oa)E{sN5Oy`(B=VDJb)X|rPlVEYI_^hiKi(|;r&X(Zr~KzZX!0Ys$$(o+Bx%|U?! z0%b=5Dx0)XfYecd69QFD%xFN#(SUiQ0oBbhfujO-Qvo&2tW?0vRKOX5+NNe2phg-X zI}K3RoEA7G5I+V`-(-yeEFA+lFVN7$jRnMx1#BD(Xl%|2d@GPR4$#!B9S2x54sb=l zZxYf0oznrk(gAVilE6iQ!Q%lf%#QJZ?c)K_69Dn1{{%qN1i&GI*2Xsx5H%5yJ`vE? z927VpP<9fay-Aw{NSy>YA<)spOa_#k445|=(8(MVI4V$g3LwGEngW~5#4P}%&IN2-07x*)2Be!EivgzuqVEDsF#YcWEX@QQ5}0IscLQP<0MhRUOfd%q zz7;6D1Tf8{Edi`q2sj}y!^A8FbY29Qw-hkT922-GP&W%O$IQwCY+npGBQVd@Tn0$G z3y{4GkYP>>MBNRDUk+GcvX%o52%HyKWa91tq%Hw$ya#ZXIVVtZDIhT$u*9s*1{@W* zB9LVg?gh-u0_?gMu-se{sId$%cm*Ka>{tOfB@n$5u)_3T30S%ua7ZA>_;LWT_W;s! z00DDQ;9G&R_W@R$wEF;SvH>RqjEM;VI^PSJ7XYj^#{@14)LjKwZ)U9mY+nI5Be2ob zTn$KC3CLaz*lbPBWV zjtX26;6*WO0W((tcC7_GYAy-XSPdAw4zSDYSO+*I5WODoxaq$hu=IYwA%VTdw*e4q z0O=b5`^-UsZw1P31nf6y8v$$908R+xnwU+1&T9elHUSQrV*(ci>TU)+V`gmzY+naB zBXG#nd;pNN9+3S2;CXXeAZi03ehc75leGnKK;XQ<%O>tYKk1%{hURn*fPh z0Y}W*t$?Efhh_tgnV$t_ZU*#u2=JQO@(`fL0|4(fzzNf18{m|{et|cQ=V8FoEr67V z0VmB~f!GHD#U25?W0D^Md@FER;5}1lJ7CRLz_jgv56p`KogV^J-2pglChY)Rd?>Vj zd}J!_1Z>|H0%y!gfux5i()3Y^d})9^9C0fE(z0lqM21yZ*II_?5| zWpZ`_O6~w$5ctNl-3>UpgH|5e&9ZgQ{46kYC!qJ^fbY$g#{o4SrHFSAMb4WZdjO{d z_6z)IJbM949|NT91^jIG3dHUL6nlb8gI^=e@F%!5_*Uew$b|?~cpqfVZpgHKkl!QB zOCp^ghg5wMaw)=0eiCv~hPia-z!PlJ@*l(7n)LbMw{R_TRy1`VVI2<;<~2D7041LUToA}-+8zWP71(wV z;4?o9%-j#?^EBWVv*l?(ji&(KX8_Tr$1{La0{aCD8qc$UrMa{{@>zznkl8B`dw_^y zhlnU*k`DpC6*vqCE9PC@lm4$c2q^m;5hYC8b3}B08gN1&#>6}ixF|61c|d7%Okn#n zfVwXL%9>d(0Fs^soDnE*YQ6}FIt0jm5m3>b7C0af{}Q0G$$ANp`W)cAKvfg>GN9!1 zfQ>H$s+)5HM+FjJ0n{{WU*XGmE%UQXZIf^qQ^#zPscSCD)H6L^#nd-DWEvRH5llnV zU#5}SE7REcj$)daWSOSsAjYhDB|JK}?6L4qTin+tB6q{v;ZJ(Z${)j1gZ~8H>U}HN z4Eij580i`cdEvA0pMoJRm9wEp#IWn}|1K4)f)k@79te-QTGf4jqi$A?NgkVmae~Yw zzZ zC7))N$&Cy$eiG!jP!A<8yPb1lEz_@5_p2p7`dPL*r~03=tT{}bQ{P@g`n0rh`gP#L zLE<>^mg)Czk66}9Og~A|v%wBXmAAHm1xSZ}VAlqwM)a2;^Xw?JvvIe<##`3jGG1-! z^s}skWg5{ImUXm@z3F7=hmG2p+bt|gT0eTkbvjw5zd8KK4r^!2io?!WmS9;4*r%3t zu}nX#8e&;j%VJ=>!9br3r<;ZP`@Mp8KP6hGKOC!V*&Q&ALK)P^vO8@YZxD4FTh_y} za zY*}s6dnv13KOClASqJe)#P%ccY^C%(P5F?O>Wvvn=BcYr)^9(`kPMRFc`1@sNqh$eG zn7?;-T51;YSq0PHiATL{oUw7d8^ft@VXwV{bN{;Y*ewT!=4cV4vYIa}Wl*sGR3Z|fTh zI}FQE;g@XTVWgk6fv;GW40{Ep&#Sh=;iL!9D;+{dY}^RaL)23~$86k4(t|8JZsSs5 zgDrbKg8i@IABDQohz_e01nM{*jr!V#KY(dBrlJ9seGF4QX=spTpISBsHp;TkVQOP6 z>R{OyFpc0i&A;hN@%hRIrjynm+3MK++OqMa`_Niz>^HXX1k!&{wk`IYjhje%0f$&S z?01$;BK@PCgx^~>8TJ&cllK2VESy66Ascw!vZ=7GFdcqBST>DxXPAzHA7SeMbfnX@ zK0n*I8KiX@*5?{xiB3Wnh5IPLNv!R zk7bKs`hzpYg;}C3tmPe3rpDw1HfA?D`Nv!!J;iIYuRd8 zAXK()JNYrm`ctjRME!OfrV-RZw5wLST6`!r(xliHGpYogH_M4u&IR)11nqB%(6#d7wwk#E!z(B*|=DkCf5!WVOa|s zw-a{RmThU-qp*55E+gK;$AGmgY-QOlSnx6y(;B9Iw;L6=acwPo99F_Ioo+SMdyvPn zPBv~YtiELlFh(`Qc>?&C?O_)eI{RRCY+zT*o`l6%*3Gj0u=18A!ZZp`A+Ke3+PGX; zRm*x@34 zvW&yPq81Lb@Ksnf%aScS0=vbs;g%hRRj_P?WyfH@+76C{X=IM03zm(t>^0cWp;uO< z+QP2`_3ndIY?=)`LHbF{#=^9Z-$0vTY1r|Wy-9kzZDf+I?=9FE%O>0UPQqT)aPXPx zW&bPvHqr|;D@C30ocW0K5X&-c+{Z9|_tUw5fn{e%54Uj( zZ5yA!M! zYuPd{?Q8hILh~(LPM}8NYm{kOwk`Y(Oy39fx!1C9NiVc)g=Obpl`LCn*>|uX*qyrA z$+7HvZGQth8Sb<29|Y*F5jx!lVEpHtM~QZ(uK}ooKOntrLZ{JnHtt8#dewqHn{C`r zq%$qsV%g6yy*a{Y{I}Y|zmVPm)ag+ZMUDK5p0kB_!ZiDTLmnSrFtEE|>i-24X4!6- zHvXR|c()4kgpK>1G%sHWmfZ)_TyicV1Jvp906>jgLV7pGX6!RC#r=Ukf^EmX08k^B zk=`C5_KJ=Blk|@;oj;DjRNoc!3~V>{b<6(J{L2OE1o9?OTXGfcx9lxjp)&pf(@Et$ zTi65J4AVK_6il57gKf0zV_P;HHU_38`z#FCiQu2ojMg#j|IdLMYA>(^P@gX?i-bkP zv|4=)QzQ9cCs`}BSbb+%6ihE+5&OZG^}+Pw7kz$$;X3*GNAJ(k=VvkP|672QfLg77 zv4OY3w12d?{AyV=>`~HMTz<2x0PHc+`dqNAAZ!n5Eja(Q>^4{wy*~x}-LgWkjK(-x zTrOfY3Wb5XB-7&Zhh;@zf3Xv_ko*b5b&B$jt_8J_T(NP*U}tIMQ`l7-R~%N7^k*== z$U$wCfa#+4toDDHg(ZPL;1>i$SQZ1*mx`}c7KZDT;-Am7ANb_6aiwAV?XL6LxH7P( zEYpkDRJJVte85QS5Wgi@mhmqKeBZ)o8(1Fpj%5XcfllzI!JSMbtp&Hi)Q5`1b+@dj zjjLoE(fUx_GJTU$8)7A4xK0)Rc}Fkn5R9>bJTP!tQK1%+(l)RfY%xp=Ng2zk!xq8x zDGSpfRs*)s##MkZm`+WYwpa^JRhWjq7EGNH%cyQEtPRu_3)ZlKbzqw5T9|6Vw8eE{ zn(1QoY+OCqL>ks&)xg$QA2!)`u%V69N;}Ci-LA#WaCp+;jJJiG0M+Y8ur@HQbaA$D zW0+pPqgAbijcWqa)@fC1W8<2_v~^EP?Bup?pWU;=5iq2*ccD%2$GLYg)>{z>SLCdTQ? zKWap5oDJ+oT600`_;||_Nne0z$({()#Jq!aVUBk#*;8$O-ASuqE!le4p&GuEv^Gv` zhW;cR>-6BCIY52%GDNYS{PQ^7*AhF+vRnBf6^Ub`Yg1K46t!p9~RlTfuxrZr}g13 z%Lb8NYS|K)){4O}y{Rfgfy->*5Ypxr%8KcgkQiqK|7hd1W~|bCC^ZZtai#;cXxvYrMlOZ)G|TkfNX3nU&46hk*u`M=kjLyF*ti@%kg=0ypu-G@LfukXD6a zyDghaS`~^tZrL=_s!zxL9?Pa%)(NY(YN~x_2LGs$&e$hx;7rnLL~NgBvq-BEu_rB? zOn207JJx|uVa{8j? zC=Tg)vfc|+A2mP?QF&Aj-G&OG!bq=s(&OWgkscX;g7ld9GjtYdDrxFys^lU~kAsos z?Y`cgZS@MN0cao^ga#u$P9BO{pm@|AHDh+%N;#dhJ0qQ_bum}KtnKIR0E7IQ}-k+5be4wi5r+Qwh=c9TRWLva`ZblnX zb4IWwibtdId!s%m3F)drR}llzAT$^aLCKMo-Kzne>F-3k#?j?V11iyT&w8kqIWfRn zIYTco?#!vDB&ZR#1hx*gI9BgwEr!DJe_^%IQ%_wJq$6Di=)6Ax>0GZ1h}(!Qi1eP4 zejMvMW9n(=x9A-D4tB7j20k0$D4*`qFLHqydW?50<{mY zZ=-k6yGYO2^!!ZE%k+Fqi}U;FBzg;dirzt=qYuz2^e%c2eTdGWkI={H6Z8f85`Bf< zMyJtdy4*QSBALeeqV7n~(^8P0p$$ZOZq^QUL&H&Llz{r6JCUBDbwoqZP&5MFf%>6g zXe3HPgHcb^3-w36QI{zGX^T?L&x5_?Ggi@;)ySZO?5C&EO8M9|NLMMtkS;Eoqf!(t zjmn_1s647DF<_NYWz+-JN7JdN5PA8Ln!N?xit-^J;_}X{7~(yYp?9k3kBuFy{y6y$ zbQxVif1z98dgGj4oA)Tv1FOAg8@d}UMOkPWx(lsF1|`vnQ`q;=DH_a1_o91{9^>e- zO;f!GQ_p4e7^Vi&qZd7D(W4bTO3|YeJu0b!^dzJh(vuE7+0c^=J-E<=3O$(6g9tr% z(1V8RNY4@U+(6F>B9NW~=)QmOHa}Lk@k{6qxbD;IzPxV3>$baYv+K6HZlmkAc`0<2 zJlzG?U2omx)?IDg#nw%0-K5q{Y2Ad@O=sO?);(q2L)Jax3g}nzbr1NT=nDE7EkX-4 zrxv12^e}n^=|1jgqiJuZ8NM zSW|U`x2tEanKZ)NzUh95?mgt9?Pv#zr*?f~*Oy{_3BHI5z-LpFzIxO(=T!6ns4ZFT zP8+fw1~-7V zApOO(e$k`1>m4CPiXg2wEPjDTp?0V?9je9r)lX8w&~Gfr-xyDd*JM0Ict@)y*jv#{ z6nPnKK%3D*G#%+NsUC~IiuBm?Idlj;k6u8}qNkDGoRNSA(v*H!po>slbiRS~yMRR0 z3GEEye+u1@gr3FMMfH%L!7m`NuxUEV+co(1%Ri~>RrDO%g&sn4(Ht}z^`n?>?SDj7 zAEHmuar7EGiuA4f4fHws0)2x*&FQ)EaHL1Y!_W=enDK8n@)s)k6a9vMM?axlv=8Y4 z#{+0H+Jw?j6FS-q=@Gr2O@umq6<^=jbi40o)XP}q}MX* z*7FZYx105T`7B+sJ8XH#&!& zK*!N)6hWsx#Xg2UKrf(s(7R|IDnov0R2-E=x~qJ$3B&pp+KL`R58jY|41Xe;gx=!d zSA0{mI?X#J;{%fKqj%AJ=pA$??Q};s%WDO1i58=U|0d=nb*MWN$sdo>k-n?vJv5Gx zKT~I|n>F$^nO~tV(arL2tmtMjp=0lL>bNm|J)S)m+UmSP|4jqhqR@eTf%HF7LH5RN zs1PcQt~cbi6N=wWr{*G`xofOd1|=q38{}Y98gaa^8u2oJ;k?x|?-Afzb=q8JgnSn2gW?7|Og^;hV7= zMmm4VNLvEf# zhk^BDybsZU+$-a~zn93+qiX%YT0gwj53-kW?zzl)YZ~Q$$6i7@Z!4We-a>So1#SU0 z6TLwCd88|zE5z)@?m_yw^lt25u*b0T@pod^QSVx$pH5fNuS&NA*P{slJ*rxT#*;3F za!9X4<47;Xj>X=M9fM6nsi+*%T`7IDEJei;`1*D_8kI$(PzutOz&7%Ag58WQgDoB2 zk3u9$QMe?w1S&4!>uO48@IMjmwVrE>?#I{GuEDNGR1@rc5dv>R#Y~T--Xg_|QpE>k z6~XGkq}w-BV5+xxhN^dv2Sp-1S-lNg5cyCP%7?rtl&^Hi&u`NOu+iuibgPx(LvgCN zkoA>*5FO_fUNFmB$Wz!<%<{IVsLhT+`umRZ*w%=h<5WNz-?C<2mbY;+Wyw{TzQ9#N z70t0M@96whN$NVSy2mtM=IvXh4e7NE&?o476uMsghO{nk^p(r(UFPj-E-&-?;^j); z+VIdN+fdjLr0?1KzAgW(tzrb}k*K0+yWCsEmrimnnrM=jdrM?YBRLsOMU&7J>knb` z<;&`K{^zMp&j600(6&v4FGh>dUFdG4ZC;99f|grf$BAZx{|I%aVQM40j4EPzjGaYS5k08ZpyR;3vwHQ2ZVW@(T zRUe;18ZNFC)dPp;wU_QGH@+CseoU z4c3`K;u!jj3N-X8^bP4yU}!7kzhU!3dFoK!d{wH^3k`2*WYx)MN9Y*x?!1p!P%Fh81`t3w0)M+<9B+jj^E(P=|lAG1>^l{ffkY(Ioqs#Em`E z)+z88r2J52c{}w_%N6%K$~!XJ-{N`8snh>s12oBQ43e)3@@{3QpehyDJP2dwhPFO$ zY-nr6G~54)Zq|nKGeQ|RHlV{ObeJemeke9?1OJYxK9vjQ{~Md}KLSD>2^G$}#s8*~ z;QqWZ@5Xv=+z5Ar*#Du1^usq*qM;SjqEH#8Wj1f+>X6n2#e^o3%7kJOS#zQ^3GWV5v#sEFpPiZmjvDH-aj{vK0*r`ZIBmX(lwhq$-V z9<&v;CZ-)~i`t;}NPqEAg}QIYcGMq}C?U`tdk4~=I&?+dkgi29Fcy8VDO9LaY3TYi zbWN&G_9y>k>PW)&L;Cwa#fCZ^vL0Oy=ehPh6~RvUfMEWt#d!^FM^z~JFg6G25C2A> zWV9X)Lxa&E6yn-h;$lOQe&4B6i9W+gm!Ll7EABq5>Yao16U~ts{G*H2Fdf@oa08XlxAk&{9;9EzH6;vg!GBhOa@_D!CV)jnpY=9l9R{&?>YVtw9E@MH;DXXbaNU zi4EARS2M0&{S;?2&L*@GJ%F~N2hl_55tNHwK~JLHNE7xk?4xK0+KG0deduu{uFgDx z_Mp8;bv%Xk=dlMgR4=0!kcRqs^bC3$9YoKeN^JQd?6ar_>FTH&dI|qUl)$K{j2bwO z)W9)x7#%^cB3Zvcjz4Y7JY-hMqi=w)cFba4EhXxspJ1FiBB!~9Qy^*>5C6JiP>2H2Qv0`OVh5|a%b5#(k zToo%&L8_=S(hp24qAT=Van(tO8dqH27>$%hrzyM%(hpV}p@ygds*mcSx?ZP*Q-?%t zR0};|?^iteVD5l*-l-d!7U$=Lw>nN{sbWMxBEoPtn|bv60!~o@!=wi%9;5&8A_? z$i}=$s$i$c5@v48$T7SC>YJA249Hy+ANg~b8xfOxZ=1-T9$x-)wk>sSHkaE*?)OBQ zz3nJG*nEX4ll}+$nBLs`%jkwL)?9pRm}f|{dJXC|;voIQ+|fR=WY|l8l|6kY`Hx$-P0+Tjui8FM_y%LnXaFE{kdfJ4fAv{xm{>$sQF%I zT5kESk>MU*;90pF9Z52$yFq7~=tO$A)>Kc7ObpBQndymH0T~#vh!ggN)S*!$72K5@UE*CL( z+{suxRm3cmeW6J1Q+Gy&d77=}E)%yGGhf+PYaM}?h?F%yTfn?H*&ANPtZS?2o~PjKS? zqw48VKMd}3DOf`THpKZo#@yCBvLx@2$>|*#W7_qOEEV>Bj2Y59vXRTq@xrt@eb`H# z&FVhv*`nrHpUA}01IoKQ>!DhoET5K8vkNt{r?e|ZnTCA{pJqJ$sBmQ8$im(g75Jad zo8%FZB`Y+p*NnA@v#E}wuOHc)JFnuCF%)j5!-(s#;Oq}?;1o0`sHJonBDLv{^tdOk zd(m18iS!4j1iOIxYx`;uP>+BOW=j&SZa3ZgMV|F7spQd1F)~+~xFq_#$)uB6`X{)% zTgmKBW#GT4WLou)ELr*&BDF5O^4SBEHxK=#OmLVqrTNY}sXrYqVwTHPH91Q$e)IFt z$e5-Hm3cD?rAA$Ovs<;dh6gCsl&L_e!Q>Ppr{JR1A2*Cztoj<%(~NW`o9F@beJKH& z?iUvP@l{fj%L&)Jw#l?5AZ&kSGiU%);sk*u3A|W7Wo$F;An=|S~A_1idXmP0gmU|oD(VC(S zwFQm&-A18-k)y*dRLPw^kQL6e(|k23@*L*P!3^v^ZldTI*co}DbcKfhOjS8|Ry|wY zL=1`SP~|ugS_0m$;qIfYW2R4=_1D0%Zs$1OoiA&caYNVzKh!XH4`CMDed`+Yk0Ftz zN)P0>>bFqIPnTzGj=gIFYg%v=*|Jfl;!qYWd;BzgfIuxP14|!yYG%{Fz6-VzTuAqk zqg`}*X|=yv4P5HG-cz@sFgp|ME@cX8^i7pvoCf}-M>q3InHPsec8uD~uUQMxhH3Ma zx0I=o968Jv-@u)DMNLj}>HK5d%& z@Tkatcx)p#bjo~|daXC6Xd3AzrhZyv^SmEoGX#V+I!(bE5>T!0u-7FZxL6U0L zW6CTet}=0Vf8;-2qtJWJueY?Txp|AGn!aTtVqfjlv-8f^lCL-QD>+pto3Zqkvx_2T zoV#AOgeg0g3EZNE8}O%7cju*lbmHV2+Ki#52LZhDZ>-FAQ*aIk)rl77fw8ps3&pBZ z?{hit%o^JJft>5bO0;xyI<3#{+5PgFCD(IWn)7OLI04ltIwmSUZR>a5G1mi@nu_CS zV|Po_avTTlyEf3<{`A>QvRX;f#%|-YVbwdPHZNv-{Wn zfsb1~GT?g71apW+n%z%84T`?7XyWq2pMJLHdcbowr^o5!7yPd`edK!1*YW1oboOik z{sci~_iR4c%XuPe$MuM2rgb`lHPoa}X2&fht|oEsyqe+6e6H9x*W>oKGWV*c4~eKn z#Hc0%^Tl~OXLK6XI{~-?>U^OiAdfXO5IJ`xF?p`%UkvzH6tqadePw~hXBt?^QhuJ zCyp~i=D}L4%l>#^)e~W!=OLPyMa-w_Lx;8=hm&~b?{^N~_+9TsuU@Zcy3Kii`!|Pj zPpq7MJ!iYAJAt}CBA^LH-%s&nb-FddaRXvmbD-*{U3f7&b*@(FDO*MXRmj zil}XAT@aLFb(FE%-#Fs{t@E9{hnaD-<)6oW=iIZObI-j=E}w5}9~n}nPHN-uR|}zo zW62PVkhl+wQNZ|kguT9EgSb%b0!3av zQC;7nt3Z&Cqlf$mA?q;oED{x(7KQ>Oh6t|yY`aqMr1CIfx;)r~|J~%R0z^XqvR^Hz z#oY5DZMdN37wfs@h!K3~3?rCC!|?X-b6P zLRZ2Bce=0!v&CtAn`*eQOK~}XnxX_1bLwKvrEHPODuR1nvrS@|`Eq)^77|ECs#pnX z6_LVFsaA=i#zMf9DA-M;cmKbzHB`J_=t_&%37Mi6j0pXwW*y zc_R`$+QkZbQB_xpj24yy9bWR2;|9(*;;`IAZx9?6=W#pT1|b0V%ii4}jN>6nd4PSL zuUOWCA-o6jlvYs3qBMW4ab=6{`;sg(v^(Lh1HXJ`_-~Xo{^z87(#x_GQ7+Ay&ftUB0pL`Hz|6u7B9{Wu)w;09P>ney05u^VmqVWMJOKvldY zUeB&1!xjYiv6XaT3j(|!{kjDkH*b1>E8Xvi8hFgI_plOdkW?O$W-7ZH#TpLy4E}HgOg=F*<31aey;$+ zUEjCblgr25N*!W>Jcy)95LQ}6iS66q=7Q`08Z>DwFu1RWsoO`TrC_tuC5qH|DqHUs zoZR`uqwyX=({3mU|@C~{AQjJhbwOc7jy_JJg~YF~bq-g0NmocRj*JZ$)wq}xxfxJCkqtvQVF*TPww9nT?aK8Y6L7|5^-4#Ago;X)wk1!x0~$@YEX?k>zDYF zf2z<`^LiG)LnxZEQw5#kcodEN94e2Dp%8vfh@m~73-=Y9VkmJ36xK+Xr}RdX{>yiwv!yItocuxsp+s@+_$d1bhfce)Ko2aa03qSI|IUdHir*p z=I47j*O?(^-?nIJ5@A;l8ajTKZ@`Va*o2PVNdD;slZ@oqxBOuQ9uT09^On9{1j<-reQk4O;e5UUa)9o zrr_bVE?*R38uFWk4hBJvk(zF6MzzF->;(j?ClmCDqXZpHlO0DVbuiWbIJ&`O=XkQ) zC6p<;Y@yS;z{s$b24&*?(XAAi31y16(Sc0hmv5tU7%P8D5S^m)zxvCZsf^VO2gd0N^x@RBDO0{4dOQuXcj9m!~dthWfj&qg$yeig$ zQIkwp^e}cKFxc2i!_)5J1Ha>zKw73%DKsq$Tvnuty0y0{$epJ?a|9SZp4@%NV3q7F zSfezR9%VtNFH^}j8@iSx)5vTzaIcstZD9LRa5k2JKSJQNI01^vU-7*gwngEU+12eX zIBtgwd@2GN5N7Rjz`N~E>XQTep4~}_Igshwom7Ldaxi`azkO#MGb>a^0N4=-VT#vxJz`#Kai$~{REDSK$u7}_@n8RAPOcl4uNNWI3<%eXjQUCSJ2jQQ5(IrHXesxCh9t2j99$XG zcVM;q>Y;TVBuoVG>D{6{K|i{tqy{=X07R-cUG${iE4XMD>P3u%F8cC)&A#e>tc$Ow zA3o>-gxwZ3>EHA3c;$GQA?CD*)>9+qD${_$%U8qootwVZXWj0J@Dt-NPftDa1+BuU zr`&uva%h%#)YRj4-{}rnZv7#L6sQxksP{hDVJ0xRtgGYSYf5TpAC7`A=8Nq0bJf|D zun%0ya>=d$x}3@tk1XQqPlj13S7Fa7MF-6@cJelIzRAb7?N- zD&zA+JFL%qp1#y-)@;UL*Llf6J(;Or1_lRXPU)CSbpy}yaRr~qf_gn5_JG(&gc|e5 zbsq-^*F4z&mprP)T!mr}we0_0E-rg$5M%V;Bif<^Osbty=#9CUg=poCMBk$aIx(>9 zZnZ7z=?UNX@C|dnS#?Q$RffMPT{fRE*fD z#F+Em=G_Hrj2UPL@*^wj|r(L@8;AA}aW45Ak4Et&O|^(Aa+ zlv@tI{eZ9p_ugpn>Qz@;1&GR%PwHex45T$;?p0S2!}VNB+gqCqSipS{i$3T~&SEY* zATPw}?3%c3DurAP2$DnggMkbNMDl%Lu#F-P*HmAt>p4s0i#0;lY@pjLnH|3S$*ps_ zqk8+PyQk4Qd!tA(^Yi8?KsbL8q2=Z(o`t<6e3KSYXB_~l4B`IiFomDWe9w_3lmH5?(S>nHnvTXDXy zuU^9uSr3kl;HU{bEbb4SI=Te=8~b~;K^4~U=NGbVfGFXC@WsP^Y|OjUV1evAOrIWt zk4^)FYixVl#p9KJk+?Us|E7>FjZi#(#<4py!tOp4eEQ!YPGMn}5TC5hX#Y4_G-ZyuGfM1+vRTZ(30KXU4n zZX0UBu;t(TKK`3`GsGRh$rJf2I?bIhXgbE6KcVk`cyz$Z zVe1!S%r&j>#904}(KDWWf-z^nyUpjECfwNievo61SYUcIjPY($-1&w(#*APa(=xec z!`$meX>lHSF>vM`Z?yu~`sndZM!3=RvdVY`f7Am2EdudVsCMq3zPuk&$ax28XRO>6X~mT9ZwQ N&2Ur1$F?Wh{|BgN0<{1D diff --git a/packages/i18n/src/unwrapper.ts b/packages/i18n/src/unwrapper.ts index 7c18ae5ba..d293dc9d4 100644 --- a/packages/i18n/src/unwrapper.ts +++ b/packages/i18n/src/unwrapper.ts @@ -1,12 +1,12 @@ -import { I18nString } from '@blitzkit/core'; -import { DEFAULT_LOCALE } from './strings'; +import { I18nString } from "@blitzkit/core"; +import locales from "@blitzkit/i18n/locales.json"; -export function unwrapper(locale: string) { +export function unwrapper(locale = locales.default) { return function (i18nString: I18nString) { if (locale in i18nString.locales) { return i18nString.locales[locale]; } - return i18nString.locales[DEFAULT_LOCALE]; + return i18nString.locales[locales.default]; }; } diff --git a/packages/website/package.json b/packages/website/package.json index b760100a3..8e33fa9f2 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -5,16 +5,19 @@ "dev": "astro dev", "build": "astro build", "preview": "astro preview", + "lint": "astro check", "astro": "astro" }, "dependencies": { "@astrojs/react": "^4.4.0", "@radix-ui/colors": "^3.0.0", + "@react-three/fiber": "^9.3.0", "@types/react": "^19.1.14", "@types/react-dom": "^19.1.9", "@vite-pwa/astro": "^1.1.0", "astro": "^5.14.1", "astro-favicons": "^3.1.5", + "fuzzysort": "^3.1.0", "react": "^19.1.1", "react-dom": "^19.1.1" } diff --git a/packages/website/src/components/Armor/components/ModelTankWrapper.tsx b/packages/website/src/components/Armor/components/ModelTankWrapper.tsx index 9d0a9bdfe..dc3a7934c 100644 --- a/packages/website/src/components/Armor/components/ModelTankWrapper.tsx +++ b/packages/website/src/components/Armor/components/ModelTankWrapper.tsx @@ -1,7 +1,8 @@ -import type { GroupProps } from '@react-three/fiber'; -import { forwardRef } from 'react'; -import { Group } from 'three'; +import { forwardRef, type ComponentProps } from "react"; +import { Group } from "three"; -export const ModelTankWrapper = forwardRef((props, ref) => { - return ; -}); +export const ModelTankWrapper = forwardRef>( + (props, ref) => { + return ; + } +); diff --git a/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx b/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx index b333781c0..5d016e978 100644 --- a/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx +++ b/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx @@ -1,19 +1,19 @@ -import { memo, useRef } from 'react'; -import { Group } from 'three'; -import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; -import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; -import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; -import { useArmor } from '../../../hooks/useArmor'; -import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; -import { useTankTransform } from '../../../hooks/useTankTransform'; -import { Duel } from '../../../stores/duel'; -import { ModelTankWrapper } from './ModelTankWrapper'; -import { PrimaryArmorSceneComponent } from './PrimaryArmorSceneComponent'; +import { memo, useRef } from "react"; +import { Group } from "three"; +import { correctZYTuple } from "../../../core/blitz/correctZYTuple"; +import { nameToArmorId } from "../../../core/blitzkit/nameToArmorId"; +import { resolveArmor } from "../../../core/blitzkit/resolveThickness"; +import { useArmor } from "../../../hooks/useArmor"; +import { useTankModelDefinition } from "../../../hooks/useTankModelDefinition"; +import { useTankTransform } from "../../../hooks/useTankTransform"; +import { Duel } from "../../../stores/duel"; +import { ModelTankWrapper } from "./ModelTankWrapper"; +import { PrimaryArmorSceneComponent } from "./PrimaryArmorSceneComponent"; export const PrimaryArmorScene = memo(() => { const wrapper = useRef(null); - const turretContainer = useRef(null); - const gunContainer = useRef(null); + const turretContainer = useRef(null!); + const gunContainer = useRef(null!); const tank = Duel.use((state) => state.protagonist.tank); const track = Duel.use((state) => state.protagonist.track); const turret = Duel.use((state) => state.protagonist.turret); @@ -28,7 +28,7 @@ export const PrimaryArmorScene = memo(() => { const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin); const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin); const isDynamicArmorActive = Duel.use((state) => - state.protagonist.consumables.includes(73), + state.protagonist.consumables.includes(73) ); useTankTransform(track, turret, turretContainer, gunContainer); @@ -37,20 +37,20 @@ export const PrimaryArmorScene = memo(() => { {armorNodes.map((node) => { - const isHull = node.name.startsWith('hull_'); + const isHull = node.name.startsWith("hull_"); const isVisible = isHull; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( tankModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || spaced || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_01')) || - (!isDynamicArmorActive && node.name.includes('state_00')) + (isDynamicArmorActive && node.name.includes("state_01")) || + (!isDynamicArmorActive && node.name.includes("state_00")) ) return null; @@ -67,21 +67,21 @@ export const PrimaryArmorScene = memo(() => { {armorNodes.map((node) => { const isCurrentTurret = node.name.startsWith( - `turret_${turretModelDefinition.model_id.toString().padStart(2, '0')}`, + `turret_${turretModelDefinition.model_id.toString().padStart(2, "0")}` ); const isVisible = isCurrentTurret; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( turretModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || spaced || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_01')) || - (!isDynamicArmorActive && node.name.includes('state_00')) + (isDynamicArmorActive && node.name.includes("state_01")) || + (!isDynamicArmorActive && node.name.includes("state_00")) ) return null; @@ -101,21 +101,21 @@ export const PrimaryArmorScene = memo(() => { {armorNodes.map((node) => { const isCurrentGun = node.name.startsWith( - `gun_${gunModelDefinition.model_id.toString().padStart(2, '0')}`, + `gun_${gunModelDefinition.model_id.toString().padStart(2, "0")}` ); const isVisible = isCurrentGun; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( gunModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || spaced || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_01')) || - (!isDynamicArmorActive && node.name.includes('state_00')) + (isDynamicArmorActive && node.name.includes("state_01")) || + (!isDynamicArmorActive && node.name.includes("state_00")) ) return null; diff --git a/packages/website/src/components/Armor/components/SpacedArmorScene.tsx b/packages/website/src/components/Armor/components/SpacedArmorScene.tsx index a6954b82e..50cc38348 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorScene.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorScene.tsx @@ -1,15 +1,15 @@ -import { memo, useRef } from 'react'; -import { Group, Plane, Scene, Vector3 } from 'three'; -import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; -import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; -import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; -import { useArmor } from '../../../hooks/useArmor'; -import { useModel } from '../../../hooks/useModel'; -import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; -import { useTankTransform } from '../../../hooks/useTankTransform'; -import { Duel } from '../../../stores/duel'; -import { ModelTankWrapper } from './ModelTankWrapper'; -import { SpacedArmorSceneComponent } from './SpacedArmorSceneComponent'; +import { memo, useRef } from "react"; +import { Group, Plane, Scene, Vector3 } from "three"; +import { correctZYTuple } from "../../../core/blitz/correctZYTuple"; +import { nameToArmorId } from "../../../core/blitzkit/nameToArmorId"; +import { resolveArmor } from "../../../core/blitzkit/resolveThickness"; +import { useArmor } from "../../../hooks/useArmor"; +import { useModel } from "../../../hooks/useModel"; +import { useTankModelDefinition } from "../../../hooks/useTankModelDefinition"; +import { useTankTransform } from "../../../hooks/useTankTransform"; +import { Duel } from "../../../stores/duel"; +import { ModelTankWrapper } from "./ModelTankWrapper"; +import { SpacedArmorSceneComponent } from "./SpacedArmorSceneComponent"; export enum ArmorType { Primary, @@ -23,8 +23,8 @@ interface SpacedArmorSceneProps { export const SpacedArmorScene = memo(({ scene }) => { const wrapper = useRef(null); - const turretContainer = useRef(null); - const gunContainer = useRef(null); + const turretContainer = useRef(null!); + const gunContainer = useRef(null!); const tank = Duel.use((state) => state.protagonist.tank); const track = Duel.use((state) => state.protagonist.track); const turret = Duel.use((state) => state.protagonist.turret); @@ -45,7 +45,7 @@ export const SpacedArmorScene = memo(({ scene }) => { ? undefined : gunModelDefinition.mask + hullOrigin.y + turretOrigin.y + gunOrigin.y; const isDynamicArmorActive = Duel.use((state) => - state.protagonist.consumables.includes(73), + state.protagonist.consumables.includes(73) ); useTankTransform(track, turret, turretContainer, gunContainer); @@ -54,19 +54,19 @@ export const SpacedArmorScene = memo(({ scene }) => { {armorNodes.map((node) => { - const isHull = node.name.startsWith('hull_'); + const isHull = node.name.startsWith("hull_"); const isVisible = isHull; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( tankModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_00')) || - (!isDynamicArmorActive && node.name.includes('state_01')) + (isDynamicArmorActive && node.name.includes("state_00")) || + (!isDynamicArmorActive && node.name.includes("state_01")) ) return null; @@ -83,8 +83,8 @@ export const SpacedArmorScene = memo(({ scene }) => { {modelNodes.map((node) => { - const isWheel = node.name.startsWith('chassis_wheel_'); - const isTrack = node.name.startsWith('chassis_track_'); + const isWheel = node.name.startsWith("chassis_wheel_"); + const isTrack = node.name.startsWith("chassis_track_"); const isVisible = isWheel || isTrack; if (!isVisible) return null; @@ -104,20 +104,20 @@ export const SpacedArmorScene = memo(({ scene }) => { {armorNodes.map((node) => { const isCurrentTurret = node.name.startsWith( - `turret_${turretModelDefinition.model_id.toString().padStart(2, '0')}`, + `turret_${turretModelDefinition.model_id.toString().padStart(2, "0")}` ); const isVisible = isCurrentTurret; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( turretModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_00')) || - (!isDynamicArmorActive && node.name.includes('state_01')) + (isDynamicArmorActive && node.name.includes("state_00")) || + (!isDynamicArmorActive && node.name.includes("state_01")) ) return null; @@ -139,20 +139,20 @@ export const SpacedArmorScene = memo(({ scene }) => { {armorNodes.map((node) => { const isCurrentGun = node.name.startsWith( - `gun_${gunModelDefinition.model_id.toString().padStart(2, '0')}`, + `gun_${gunModelDefinition.model_id.toString().padStart(2, "0")}` ); const isVisible = isCurrentGun; const armorId = nameToArmorId(node.name); const { spaced, thickness } = resolveArmor( gunModelDefinition.armor, - armorId, + armorId ); if ( !isVisible || thickness === undefined || - (isDynamicArmorActive && node.name.includes('state_00')) || - (!isDynamicArmorActive && node.name.includes('state_01')) + (isDynamicArmorActive && node.name.includes("state_00")) || + (!isDynamicArmorActive && node.name.includes("state_01")) ) return null; @@ -173,7 +173,7 @@ export const SpacedArmorScene = memo(({ scene }) => { {modelNodes.map((node) => { const gunString = `gun_${gunModelDefinition.model_id .toString() - .padStart(2, '0')}`; + .padStart(2, "0")}`; const isCurrentGun = gunModelDefinition.mask ? node.name.startsWith(gunString) : node.name === gunString; diff --git a/packages/website/src/components/Armor/components/StaticArmor.tsx b/packages/website/src/components/Armor/components/StaticArmor.tsx index 5226d626d..efb7f5d4b 100644 --- a/packages/website/src/components/Armor/components/StaticArmor.tsx +++ b/packages/website/src/components/Armor/components/StaticArmor.tsx @@ -28,8 +28,8 @@ export interface ThicknessRange { export const StaticArmor = memo(({ thicknessRange }) => { const wrapper = useRef(null); - const turretContainer = useRef(null); - const gunContainer = useRef(null); + const turretContainer = useRef(null!); + const gunContainer = useRef(null!); const tank = Duel.use((state) => state.protagonist.tank); const track = Duel.use((state) => state.protagonist.track); const turret = Duel.use((state) => state.protagonist.turret); diff --git a/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx index 9db804df9..eef50a2da 100644 --- a/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx +++ b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx @@ -1,8 +1,8 @@ import { I_HAT, J_HAT } from "@blitzkit/core"; -import { type MeshProps, useThree } from "@react-three/fiber"; +import { useThree } from "@react-three/fiber"; import { clamp } from "lodash-es"; import type { QuicklimeEvent } from "quicklime"; -import { useEffect, useMemo } from "react"; +import { useEffect, useMemo, type ComponentProps } from "react"; import { Box3, Color, @@ -19,8 +19,8 @@ import { import { unrotateDavaVector } from "../../../core/blitz/unrotateDavaVector"; import { jsxTree } from "../../../core/blitzkit/jsxTree"; import { - type ModelTransformEventData, modelTransformEvent, + type ModelTransformEventData, } from "../../../core/blitzkit/modelTransform"; import { discardClippingPlane } from "../../../core/three/discardClippingPlane"; import { Tankopedia } from "../../../stores/tankopedia"; @@ -36,7 +36,7 @@ type StaticArmorSceneComponentProps = { thickness: number; thicknessRange: ThicknessRange; node: Object3D; - onPointerDown?: MeshProps["onPointerDown"]; + onPointerDown?: ComponentProps<"mesh">["onPointerDown"]; } & ( | { type: Exclude; diff --git a/packages/website/src/components/Footer.astro b/packages/website/src/components/Footer.astro index 0e6be3083..7af82f8f4 100644 --- a/packages/website/src/components/Footer.astro +++ b/packages/website/src/components/Footer.astro @@ -1,15 +1,15 @@ --- -import { assertSecret, fetchGameDefinitions } from '@blitzkit/core'; -import { DEFAULT_LOCALE } from '@blitzkit/i18n'; -import { Box, Code, Flex, Heading, Link, Text } from '@radix-ui/themes'; -import packageJson from '../../../../package.json'; -import { getStrings } from '../core/i18n/getStrings'; -import { LinkI18n } from './LinkI18n'; -import { LocaleSwitcherThemeWrapper } from './LocaleSwitcher'; +import { assertSecret, fetchGameDefinitions } from "@blitzkit/core"; +import locales from "@blitzkit/i18n/locales.json"; +import { Box, Code, Flex, Heading, Link, Text } from "@radix-ui/themes"; +import packageJson from "../../../../package.json"; +import { getStrings } from "../core/i18n/getStrings"; +import { LinkI18n } from "./LinkI18n"; +import { LocaleSwitcherThemeWrapper } from "./LocaleSwitcher"; const gameDefinitions = await fetchGameDefinitions(); const PUBLIC_ASSET_BRANCH = assertSecret(import.meta.env.PUBLIC_BRANCH); -const locale = Astro.params.locale ?? DEFAULT_LOCALE; +const locale = Astro.params.locale ?? locales.default; const strings = getStrings(locale); --- @@ -28,13 +28,13 @@ const strings = getStrings(locale); flexGrow="1" gap="5" position="relative" - direction={{ initial: 'column', sm: 'row' }} + direction={{ initial: "column", sm: "row" }} > BlitzKit @@ -51,32 +51,32 @@ const strings = getStrings(locale); {strings.website.footer.about.title} @@ -106,12 +106,12 @@ const strings = getStrings(locale); direction="column" gap="1" flexGrow={{ - initial: '1', - sm: '0', + initial: "1", + sm: "0", }} flexBasis={{ - initial: '0', - sm: 'auto', + initial: "0", + sm: "auto", }} > {strings.website.footer.legal.title} @@ -127,11 +127,11 @@ const strings = getStrings(locale); - + BlitzKit { - PUBLIC_ASSET_BRANCH !== 'preview' && ( + PUBLIC_ASSET_BRANCH !== "preview" && ( WoTB @@ -145,7 +145,7 @@ const strings = getStrings(locale); {packageJson.version} { - PUBLIC_ASSET_BRANCH !== 'preview' && ( + PUBLIC_ASSET_BRANCH !== "preview" && ( {gameDefinitions.version} @@ -157,14 +157,14 @@ const strings = getStrings(locale); - + BlitzKit {packageJson.version} { - PUBLIC_ASSET_BRANCH !== 'preview' && ( + PUBLIC_ASSET_BRANCH !== "preview" && ( <> WoTB diff --git a/packages/website/src/components/Gallery/Card.tsx b/packages/website/src/components/Gallery/Card.tsx index 629de2051..133108d58 100644 --- a/packages/website/src/components/Gallery/Card.tsx +++ b/packages/website/src/components/Gallery/Card.tsx @@ -1,5 +1,5 @@ -import { asset, Avatar } from '@blitzkit/core'; -import { Cross1Icon, DownloadIcon } from '@radix-ui/react-icons'; +import { asset, Avatar } from "@blitzkit/core"; +import { Cross1Icon, DownloadIcon } from "@radix-ui/react-icons"; import { Dialog, Flex, @@ -7,11 +7,11 @@ import { Link, Skeleton, Text, -} from '@radix-ui/themes'; -import { useRef } from 'react'; -import { useIntersection } from '../../hooks/useIntersection'; -import { useLocale } from '../../hooks/useLocale'; -import type { MaybeSkeletonComponentProps } from '../../types/maybeSkeletonComponentProps'; +} from "@radix-ui/themes"; +import { useRef } from "react"; +import { useIntersection } from "../../hooks/useIntersection"; +import { useLocale } from "../../hooks/useLocale"; +import type { MaybeSkeletonComponentProps } from "../../types/maybeSkeletonComponentProps"; type GalleryCardProps = MaybeSkeletonComponentProps<{ avatar: Avatar; @@ -19,9 +19,9 @@ type GalleryCardProps = MaybeSkeletonComponentProps<{ export function GalleryCard(props: GalleryCardProps) { const src = asset( - `gallery/avatars/${!props.skeleton && `${props.avatar.id}${props.avatar.extension}`}`, + `gallery/avatars/${!props.skeleton && `${props.avatar.id}${props.avatar.extension}`}` ); - const card = useRef(null); + const card = useRef(null!); const { unwrap } = useLocale(); useIntersection(() => props.skeleton && props.onIntersection?.(), card, { @@ -35,7 +35,7 @@ export function GalleryCard(props: GalleryCardProps) { width="6rem" gap="1" ref={card} - style={{ cursor: 'pointer' }} + style={{ cursor: "pointer" }} > {props.skeleton && ( <> @@ -48,16 +48,16 @@ export function GalleryCard(props: GalleryCardProps) { <> {unwrap(props.avatar.name)} - + {unwrap(props.avatar.name)} @@ -94,7 +94,7 @@ export function GalleryCard(props: GalleryCardProps) { - + {unwrap(props.avatar.name)} diff --git a/packages/website/src/components/HelpingSpotLight.tsx b/packages/website/src/components/HelpingSpotLight.tsx index a965c772d..5250fa197 100644 --- a/packages/website/src/components/HelpingSpotLight.tsx +++ b/packages/website/src/components/HelpingSpotLight.tsx @@ -1,7 +1,6 @@ -import type { SpotLightProps } from '@react-three/fiber'; -import { memo } from 'react'; +import { memo, type ComponentProps } from "react"; -interface Props extends SpotLightProps { +interface Props extends ComponentProps<"spotLight"> { debug?: boolean; } diff --git a/packages/website/src/components/Home/HomeLocaleSwitcher.tsx b/packages/website/src/components/Home/HomeLocaleSwitcher.tsx index 39a3603ae..e17861a8d 100644 --- a/packages/website/src/components/Home/HomeLocaleSwitcher.tsx +++ b/packages/website/src/components/Home/HomeLocaleSwitcher.tsx @@ -1,12 +1,12 @@ -import { DEFAULT_LOCALE } from '@blitzkit/i18n'; -import { GlobeIcon } from '@radix-ui/react-icons'; -import { Flex, Text } from '@radix-ui/themes'; -import type { LocaleAcceptorProps } from '../../hooks/useLocale'; -import { BlitzKitTheme } from '../BlitzKitTheme'; -import { LocaleSwitcher } from '../LocaleSwitcher'; +import locales from "@blitzkit/i18n/locales.json"; +import { GlobeIcon } from "@radix-ui/react-icons"; +import { Flex, Text } from "@radix-ui/themes"; +import type { LocaleAcceptorProps } from "../../hooks/useLocale"; +import { BlitzKitTheme } from "../BlitzKitTheme"; +import { LocaleSwitcher } from "../LocaleSwitcher"; export function HomeLocaleSwitcher({ - locale = DEFAULT_LOCALE, + locale = locales.default, }: LocaleAcceptorProps) { return ( diff --git a/packages/website/src/components/LinkI18n.tsx b/packages/website/src/components/LinkI18n.tsx index 1a5c1936a..f076de7c9 100644 --- a/packages/website/src/components/LinkI18n.tsx +++ b/packages/website/src/components/LinkI18n.tsx @@ -1,14 +1,14 @@ -import { DEFAULT_LOCALE } from '@blitzkit/i18n'; -import { Link, type LinkProps } from '@radix-ui/themes'; -import type { LocaleAcceptorProps } from '../hooks/useLocale'; +import locales from "@blitzkit/i18n/locales.json"; +import { Link, type LinkProps } from "@radix-ui/themes"; +import type { LocaleAcceptorProps } from "../hooks/useLocale"; type LinkI18nProps = LinkProps & LocaleAcceptorProps; export function LinkI18n({ locale, href, ...props }: LinkI18nProps) { const prefix = - locale === undefined || locale === DEFAULT_LOCALE ? '' : `/${locale}`; + locale === undefined || locale === locales.default ? "" : `/${locale}`; return ( - + ); } diff --git a/packages/website/src/components/LocaleRedirector.astro b/packages/website/src/components/LocaleRedirector.astro index 371d7257c..d66b93723 100644 --- a/packages/website/src/components/LocaleRedirector.astro +++ b/packages/website/src/components/LocaleRedirector.astro @@ -1,12 +1,13 @@