From d687a6ee255fc9b7dd3a9cd3989fb1dfebf03b0c Mon Sep 17 00:00:00 2001 From: Arthur Geel Date: Fri, 16 Feb 2024 13:22:28 +0100 Subject: [PATCH 1/4] Bump version to 1.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84e3670..4d40051 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uptab", "displayName": "UpTab", - "version": "1.2.0", + "version": "1.3.0", "description": "What's UpTab?", "author": "Arthur Geel ", "scripts": { From 6bf1740a43b400e8e380ea9fca2b5157f5913921 Mon Sep 17 00:00:00 2001 From: Arthur Geel Date: Fri, 16 Feb 2024 13:22:49 +0100 Subject: [PATCH 2/4] Prepare changelog for 1.3.0 --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a6f3e9..c032164 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ UpTab adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [V1.3.0] — Unreleased + +### ✨ Added + +- + +### 🐛 Fixed + +- + +### 🧹 Removed + +- + +### ♻️ Changed + +- + ## [V1.2.0] — 2024-02-16 ### ✨ Added @@ -75,6 +93,7 @@ UpTab adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Added Bookmarks: allowing you to easily view, open and delete your browser bookmarks - Added `CTRL+U` shortkey to open popup +[V1.3.0]: https://github.com/AJGeel/uptab/compare/v1.3.0...v1.2.0 [V1.2.0]: https://github.com/AJGeel/uptab/compare/v1.2.0...v1.1.0 [V1.1.0]: https://github.com/AJGeel/uptab/compare/v1.1.0...v1.0.1 [V1.0.1]: https://github.com/AJGeel/uptab/compare/v1.0.0...v1.0.1 From a1bcde67001683bea5543d875158a0517583d7e3 Mon Sep 17 00:00:00 2001 From: Arthur Geel Date: Sat, 2 Mar 2024 09:47:02 +0100 Subject: [PATCH 3/4] Add Uptab client API key --- .env.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env.example b/.env.example index 59da0dc..e930c54 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,5 @@ +VITE_UPTAB_API_KEY= + VITE_GLITCHTIP_DSN= CHROME_CLIENT_ID= From f49bcfcaa2a5f7ff4c6332ff04a0e0a46c948fd4 Mon Sep 17 00:00:00 2001 From: Arthur Geel Date: Fri, 26 Jul 2024 10:44:26 +0200 Subject: [PATCH 4/4] WIP to keep these changes --- bun.lockb | Bin 409911 -> 417015 bytes package.json | 1 + src/components/Homescreen/Homescreen.tsx | 6 +- .../Modals/SettingsModal/SettingsModal.tsx | 24 ++- .../SettingsModal/partials/SettingsRow.tsx | 53 +++++- .../Modals/SettingsModal/partials/rows.ts | 13 ++ src/components/ui/Select.tsx | 171 ++++++++++++++++++ src/hooks/useBackground.ts | 31 ++++ src/hooks/useSettings.ts | 3 + src/manifest.ts | 9 +- src/pages/newtab/Newtab.tsx | 8 +- src/services/background/getBackground.ts | 25 +++ src/services/background/types.ts | 8 + src/services/settings/defaultSettings.ts | 4 + src/services/settings/types.ts | 7 + 15 files changed, 352 insertions(+), 11 deletions(-) create mode 100644 src/components/ui/Select.tsx create mode 100644 src/hooks/useBackground.ts create mode 100644 src/services/background/getBackground.ts create mode 100644 src/services/background/types.ts diff --git a/bun.lockb b/bun.lockb index 0345f284f4a7fbdfaf51da583710aee32e14670c..941e11f3a13776fa912c94df735a6212a6155d66 100755 GIT binary patch delta 78666 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 delta 74491 zcmeFadz_V1|Np=Dp4pnKb2(IWE)*t0W}0bcO2;Xk=|IsmO*PD+W~RfGF_U9OP8U`o zL^L4GYGko0li7TIe_r9Ko zg!F29-RL%vfrnf-yHl@raiLJ-P^h9Y+5~+j5(+g#i*mBEOGtV{d?-{O|9jL!i-|uR zoiQVKlCqj`-S%dg57!BW4g*fhEy^m%DGue&QB){&bwVgq4_-1gryzH7X=tYN=b;VY zw{e{cosw5LQR$EMdxe{|XkFJ9)rw0S5jzhBRTTTv!_CSMC8#`azZLY4s=MrnP^dXN zA60b=&?C`Nj%T2%_R)^lN0n|L`KXIOML`v>p(^b;mwzc$*Xu?SDczO)A-=p~Qtsr* ziYNo9+F3+d{jq5d7g0@672>}2&SRHgOtuZwTix%+Xp_gbRr?Z&94kKfr|J^Oe&eJ=3d zifQVU2KkXQFYt|R4bzLM7t6eJFP%96`wiD4oD{HH1)nu zv}K-5ej1=TsOr$3zEk>^r-VXuMMVg0sVR0n5p4l8PPG+y1HUW&OQ?r-Jk8GWce>fR zTi5wJ@fpmDr%@Gr7pl4bO>&TN#jB{|A9ns?RO#k9orJd16q}SYafW7fezC?S6f$I_ z8gEIp6?lw_Xv&>MOVrnCXmfO9njP8J>6Wj=*W$VzRr)KPUYcR~oLRYyXejh6zVi7N zZCFmAn1BYq9v5gRO3|k1v%PG~D^dANPPZ+bhpGa%!yBR>^|tyhsv&y;Ren$Qu@zj7 zuOW<0hwSXa83iTmzLZn0E<3~3vS2>f|EndX02Mp|RfYD1Z3XT-!?v{J zU^|wvX@4c0$y1SovT`c!8e-?r8Th(>CY921nLgB3sD(@44b>bt1l17yBTWCRrQ3&F zaM1`mYfFmrawn3>%lN8s0jdngqH1ZqGi^^qoSqI>#_y4jX8kj$8nzr&{x_jb(YdIG z;yhFhNUu+z9f8p3P^i6MlhC1j_E_6Fxu`n7+u61X$Dzvl2vpN6w>Yb)D62G77r#FK zw5$sXH5hrhIg-#<=h!M{6_*xdt9Ush|@`}%FpyF~= zZJLX!;AJFif?kiRV%*TO^0Fr7Was71$R(py=h*^d8UFS9{lqJu-V^MsxE|GXouyjw z`gx45XF=v<*@UA}b^Z<_RN$42h%%^fTAY(VGp8sN8cFj!cxhH%UT$$oXxfZvT**R% zD}52^mCu4nw&gpV7O7i!Z6<%shWy-u-28HKK!b=0^rSM_%mqsDz+{_IN45)f;dE3j zh^23Yuh|i6z|W-DESOTrYU6b-+3LDJs46tV`AKN7@Xu#K24hLUBS9h&Dxf8*uJ=$? z9m78Me5YWUp@Z@ul2f z^XSRYvBAt^g22_?F8_M9mVp0N{nq8NiSn9DzXoke`p6u6-Or`AoJZiw=L5K!fBIav zluW-Kbx3jX)M;w)f(qLKWoUi)`Nb0pz@aHQCDXDvm43;# zsPW0k&Q4U^q^#npld|HAr%tc%>o#m%{?f&^+&59BODBId?6pfQ&pJPtexVsfxm+I# zoqwqv*J0?9r0a#M{@u7v1JMGN-|=!=&tT8GAh)EG%Qri#I43WsxHxN8@u^fZF4Xu! z|Ne%@lvm8R?VOA%-%WJ5>XGRNXi`qjwCuuZrF$0GdU9ILQH7o-o$9@ebSl@l0gJt* z=yRn#K;;w_6&5At%SAy zlaUr&Z07xUuMb_rZG!6yr{yqUErWCGEX|IMM5rgLP!+InjQ>@m*5$8WYs;NdR5&Y- z*;(Nlnt8o#NCv8U?Lk%V?T#m+P4Q>C^nGry9gvJ_!gNAaO#TIva*L)hz=g%ZUFUq# zEB=)m13k22Edhj98O4&KtiqdvdSx@?3kxRa=H-l_!kPiI^Yc#D zOwGT=7F3)yTlES3<-&?1Z?zT5nv|b7CwE#XgX>jc4v`$HvU5&y`K@2--`u2i)7X5N z$V$$lg@bSRUukk$dHU_PRNn0cr5wps>ZQ`G8FLuS&`WpP-eQ!w^@Kue@YSucdw6UE z{Oc{28(#@Kcc`SWxNt@hZ-Ay|by2J4y6auHl>d+CU+it`wA_M1RqUgCY{gfis^Gh* zx+B&3&!UIpFGY_)uSOe%I`X!FfF@ivszXNcw7lGslbO$BZO?Q&+i!p9G37f~*pAq{ z+|IZA@3-SQg3C0n{ZWl~k?XMhoP1R)6#t;D4;x}`Hb>RH57=y{B~Hqj%$XrC+kOCX zYNgFTXLe4u&J3U8YvU{|$SGkjEf2j1P{Y)*iQHCSasE1Y;p1on;$wH#X*2R!4x!Kr zxGFaK5nJ$ssM1ZOqK(n>bAo{l4aHZ1eNlBBH-;HGTyHjcfn9WFs6Yb5h!_Hqn z=eU-1+5iSTZVO07RbcEM`md%;>>e7^*y%4wPx-a(fwm$Q6r>i!?%}6VbFHA9;%P;> z`B@=p4o&FbT6Wu$wqkYg*|12Lm#cRldsf>P?{IowmGzf8&C8itK>4B2B7h3iW}cW^ z94f(YfxndtRq!TML$n+{8a-cU5I$buygMzcs5mEgN&(w`D0DmV>LGP)R$g%^b{d$R zTQDhc#G% zbBYJ%R|O^&W|tJ@7UcY^n?Mff^=@e3>S6YnHs^WUbv=pDBss}d zAa)*UhOZu}US%(gb#W~HZ_8}KdzbmwA8}0ipqK22SV8Y}3x#qDO868cr}#9uvY-93 zy{YxY*BqWym>)E(6MjSdBc1a3RpP9vStT1b*z5Xjw8cy;EXKQ#++-^hy9-Rrn~^gyw`kI9@T2q&fC_JKo#*C%O36j@Nbk$E_SAwGn?p zKo@RAwg0X}#qU6s@l`H<4%!rdvh#>1Q+{9{b+?>Q z?3VS{JI}wmRct;WTD;D3mpEVo}b_P-rXh zM`$s;PCz}g7S%oV0WzwOp8uWY=b+kW`=c7tWaoE68{;>3>N%cUFnvaDQBG0p&Qmm7 zN03nHi`}+Dg+*C%L*MNoe=UX&2`J-DsD^SKstQzbf%c;TKUzL9FSzc&8DZj#$-0+^ zJ|vwQFgbV13_hq2y@uZizr@~(L#O;?3*Nui=EuHUG%2Sf^aANdX)G%VsKD4A;Wn4S z&Y$gt-S^o!@etaabSI!1``l_<@B~!(Oevfe+|_U1=O5SdnDS-6+QofYjm`coRP8H4 zo1g{1*><0cuQk=p@oB%?Y=`5kn0~0**CY}SuFFT&zR7xTl9fI6t57(I&qtL{#KxCb zY>NvAi?bj;9Mtcqu+?+%HFASdRiuxLf1C6w=zG#NMLVLZ@K#it#Pd!caq%~yN5U^c z)i1fIHiNU#Mw(h|=tVhGa%N`&R8Z`g-UDAPI~mmoM^V*$FD+2TK19{Rw@}4DfYHC~bE~5 zXgpk9*AG<-yP@i_eH17^c4kPRKy~$QDj+_L#i|159ASHOBdYi*NAS_6YBm<2mSoM& zNz~ilLC)`mszN=;K#Q+S3!5(X*@oUAbz{9f0N2`R>*5=r$~X3@`JU#s%VYj#{8maI zW*}P<_@e;->^5D>-)|KT@Oo7FRHACgwWzMU5LJC9p=tHmTCzg(FUip-C69rve0m1q`>yS;-?7EMi;I1? zwuu5-P~d`N!@;e4FscURpdHbromAm7?fG*e_lDv;K2_l&-a!Z7J~c@! z!nRykNgC;!$Jq=sj<+pLL^Z`$9_N41woCcUL_2_VX3&wb@*syPl-FN#y;x) zYrSK|lU*=Cv9C0zcC|D5qK3!Lny~qmZ#HaMIqrz2?N?sWuCz`<92S1_n zu*TOPebbYhGkcAGe?^ZSICPmBfPV&q8q=p~%s|N&WGBd&__@$W{-jz(l9;6HfDPP9xc-OFI9 z4&(R5A*8f%LE0tac!&7wGL!x4AsNwj%&gOc=4AV&Lo>pa ze$~(nZ##4d>Eit`75dokJ}kp~nN_B4i2A(-C57Yss$m)70e&@q7x>+WXGE*mp3d^q zhNngwGBrmBp&UYEgU~aCZ0w;dmXQIQOvuJQOUPbv1WRjh5SvYCxI*E_{i=}}-q-l4 zl+Q3^CV9tjKRN-=cHjuSVSyLEB{=~{6%G6A`X+fF;hlsRG{tMkT|*r}9Q{55uS*cu zt9O!Dfv4*d{9gT&!Y}&OXJvT%VCg~nUIUZDr}?F$GQuT(6@ORy)uS>ZyIcAxqtoe! z($N{=oBXQL8Qx3mZYf-1dt7fDlqtoZlbnE~p^9iGg|GCh#;^!l`*Vh-d&luEK-FYS zso2?gY7bZSN%HQ;Qzd9?esThiS`cK<4DEh)hBuvULq(D=7e9b!hrHJX$q6_rzmAIZ zPHAT^W(@Hv@N`+7U~a5&Uc_JbQ*yYSzyF+c?gN>pXrq7dp)%c8Xf?rKcYDb$Pt8QSDHyy99&G5G5c$}Vo zP485%$Eyne^nbx0o!O7bpp zUYsAMs!!snsAB(L7FcI`!i&izweqh}G9?59zQMTAsRRL%3A!s}(dK1q>ZkM&a~ zriX|4r4uv4xBFESGos&iq6j~&Z)*51zk7Cu_fh9i=wvRScV;9f9B0Sf&cXS36Nw7; zHt#FE?s(LcaylGucco}BB-i4N2{O@e?Z7)d@U-lYWA-QE)eCwuAJ1+HnlQ`odJ-2O zw0FCUi!<|13@0Zf+LWvS`XbYLOgjd+49`wN)uj@zcTj>-{)#skuR(C#V!CDso~`E> zc$ye-!L(|BBHw`F+3o3hyb%Yy!^r**Z!(_RXUFAjykYW8uj9kX@m={ADwqz_38{zd zB)lI_?WQbd&~`kHOTD1KQs{A;pL!^Rn@WN53*svACd9mG13GJ}wmt6(LT8AZb*Irg zcngD6>hbX$jI==PNTst9#>H~*ZpJ(FfcNd6;s#Q|^AE&5jyLLnS2sBnI{Sc^K*J8y z%A1P!$8~T2Dehz{@<%T7|Kxpyry0eJ&Ph&4wKI>wAD!eC;W7S1X(`_3mlkG(xBFFv z8Q$THn7Z3GE(cEoYIm)bc&;N^K3mda>rqRvD~nz!L;k#)50?Z_)wpb38YP zMkR&2`&F|tyc_%5<~H?v-IeTjpPdmsjAIIWQvX!%3_>RbIn#&X3;k+hx5E1SHM3L0 zZT-^HjOb^XRNpTvO^vo07z>?4h*Jq{389oA^bVoSAk=b@Zp}5NJ>m%r3eeMpX!WR6 z?>#zH!xQ%BeU+TR2B6u>P;mdc$M1e&hW8mv^D0ZZ?c6@_PE;HTnpl5q{dlRPQkQomImig$E>gL!1{hB03*$ zl)rX#YV;#Q>3+?*sb0&oV*Q{waz37`37gR4cuY1|%b)PLOdfFqY1kj#a|c1!foCU0 z+mB}12EBYKAr=|6;m#U)W3<2K@^mjW*4`_Fc@#NqteC5Z{aAkuus74q zc9Sl@;%tA;OBo3;`peGA=;7y(S8$pfM2Oq$fYj)fgu41`8RVx4bs;Ttl;!>dp1KCF zUs5D-oWFlTdgQ!ue#*jh?-f=XYp&w(;0RD}yq%BSBQHtvQt?zZ?sDfPdH3OI86D!! zo0**89DDBQ%$!i4#F=$X*mChSfC<4iy%tYB8}x)%=ez@pjTD zn3mq)oQJ=Gt^`T(-@VF5-4| z6W(dIDtNEqorFhQx%t+abfB8V^~F=Mwy`(jsoN8RUir~^Y{Bear{=Kx`)kLidKVDV zI%d9SC&%L?2Y5FjjXVqGiX^YiWLr!qI5myO(B4p6G*k!}NadkMd2g&P;DOt6R4kwu6xc z_IziD?iM_@d+M#4?s0MUHk48rYg3pumEfr!cBZYyI~C8i;u}1jskk9?_8UDd)}~%% z$q6{IDh5s$(%Jh`o#}S@1htQJpYG3Dn(h?>-Ev@_RpQz8ruq4~i?fCHDze?mFmZ5v z9#5MMvvp)rv}v)1i8sOCnS^Zl^Jw7p&I|eL7>YNQD!7K+qsNqxgIU`o+#{Y4x2Qg; zUKJsgAIxQMH{PiSs(u%<}i&mF|54bUP{?`RA%1 zIornBH)v<#sj|VS{AEY|cl+42T&J;Reo%>L@YGfIJ;fe8Z6$O7E4O`VY*lMe`F_N$ z9K6W=rGCnN>0bRgwi0XuHzj!k@YHse8gB|NcX77gzs4IF6r{|C&yDTYj7h}I_17#< zk8GXm?_Zwo-FIPZKhq?AA5R@`H=1T;wgiTO%AbX&I5wKole`=8k^`?7YrvW)DU=g)a4J=*?aatQXqi5L6(A0p?A{gj8(y$|8tf+mI8up3`OwRKeS&LE_2 zx2t*~-syPka3hnv_mm3Ho(!5^>aTeu-Mi>gJLt^3N0Sq9v>@$%5xFe(&V{ato{QHn zc#nHGp_CvWy=VSN951Z9dGzGV)e~C8GYQ$|Xy_ioQ%!=&5&8adKV@aQ*ZB(jTW;pa zN5-y^{+cJ#y+;<>y_R~9 zOY(lkQx66oUPQC5WEuzWMjjwE5zZdWbZc;x&7B_M{yq%PjtJ8Sym}kKt)l=q8Rck*jTfto4aWk)Buk`>WEui-D>bNqQ$m zp1InevnKt2vxN57_;a4-6n%}I(R}tr8{WpVTP+)0^pI=S+d4G&Bs3sssh0bEyxw?q zgA*Q(?SwE3q|J3PFW49GP9kAK(2eu()WTr#MAzb-8l25{iwAFW&c2@aA*5g?&rI^} z!BcuRGp64me(X-8K^TR{`xGYW9fZ!X*Dzha!L!4w@`v7VpreUfgs1svZ|R%xdIh;N zB+=$Ksy1n(dL$6&YO@>6=OTEzgi&NxyyrZd!4WsvnaO~Wc^00gesFAyE|;fUS>)%N z{5dbAN4pvNB{(P*DMUgp%S?*ijhF7PtxWZHDFkQXGXBRe_SdXWkDRmE-@iURde7qE z5Wl`h0)f+mi|3WI@hypUsLtzu_m;rB;%u91aHIR<%|Il3iNF7)bZ;3s*nL3T>Nj}W z)NPASyV-vFQZKlf&c#zt*fYvgc$(dOoXqO`0Z;n}tB=*v{T4fi7-rVNEW9-0__T^$ z?s2>>!7leHA?3i0^~2=&Tgg0llQM-+aDs@exYbX2g*zzVj{$AD)LummSvh4({r#_` zM>hjm#1E%>ZElP8ZFpf)WcY3Vnpe}kOMoX(l0E%Aj5jQ(t2QO?c7M)m>Cp+db6*HP za(al6O{@+6gWLU-P3d04JM1*(M$btu9Z$C+y9ejp;qTv+9=YQVKjroG$mTozIj^UC zM=cBSGixPT_h6ED4xW|^TMir06?cY$FFiPqGi~0$OCip_U-j;ypx`Fd{Vsq18|jfb zcljxArvEpN1C``pSEIW7W4vVbYoyuT{+hSaqhsz4I(k%UWbxg8%G>{EH<)O!h50q} zdW6aR-SkM^d;B@?rh8xCV<#+uwxR*gN&M<1{r zjb%F=il;>#XV&$n{&*T}`=Qm#c$!D{y-VW(zhEHZi!BM}|D+&-om>GUJKZwA8R%fv2fwC%}t%YMvd}Q=haGAb79hosXya z?**s+`|#A`q}-h3?ZvZGR$F`KD*GuGQ-zP**01tYzD)OiU2O-&F6iW{1Kye>@6iL^ zJl5eZ=LL(&>%7KJ6?;-0i|0-l937Y8okk_-ao#Y#k7w^oVb*WEr)Wy>HgO6eJ9Bk6 zybrI4YnU7#CMP@{YoV6Ycs#qD)Y&)UslCBFndnA5`>r!?txeUy?=_o410}R0*+nBs^~H6 zVw-_Br7?JYg3Giy-ioJ`_E7UK-dT9T5g^j}d4JCL>E2Dx^Mx!hxc5iCd_EZVmMA;7 z2=#!o^NmYRz)?TY(RT+*0649e1*rnpyPdoznFIvkG=%Q@ICQ;1aTPn^w8d(}=HJ4{#NX-BeK z=_Wk8S~wMXaj)3}aj>yQhQ8*{sZNhB5Y)jdviUWCe|5UoX_Gydv1;#5@(S^k9}|(8 zv>VTLFo%c^uWKf+y&}~cOGv%PFfhnB;;D6<;Fy_j;Mob+>rFnke8bkAl+1`Xk9^yX zEZZ9U#2fF}Z(OX``Ca?Y(R!ERoy&FB`wZ{w176x@`=wC4>6O5J8E?XYxV?CPTsQK) zKk`gYz?pO);i2!x=C!JlgE#6x+*5dC4tR%dsg-49`W7=M98Qm{++xFNZ9jr8!9s%WvbPDIVRLA`?EsxjaEPUk6Lbke zAN`RTL6^hT1YN#w|3Q!Z_`qe83A*||NN}J@iwpM%e{52s;f(lC4kTMh&}QkqP0-FQ z)m*{m1f+GXUo&}{wAI>;}-K|l9#Z< zrlk2>lA@>M@rH`el`bWuYgpr~-Zd^2*PNadt&yiMq@uldvf6?-Q^kb31hvtve;Hm+ zdo>-u9Zy}%rv_~Bhkg~?{8gJjA3U;%Q>peIY4B{bmGTWd<;lvXy^X%E9oHXE?X?HV zd3dJ>Dd!DMPQdAbV+;TNfTwDveq-kchhV%b@NAPc+WYX7CEE}m!VKDFo4`4T!sp{@ ztk|&l(h5g+4?b+H44gBAtEh6M*S99+aOPO~x3MFMI$$H78o~*REqumznlk!AU?m|9 zXmHMoR^zd?b9c-9-f}w&ufZE&Q*n2D-+4B!&F)wZ;VsDtI9dwqxQjU%;Hfzre;JX^ zd+aXB9gi>n$Kw6bdp@2R%%9AhmUQ{E5M4x7*>3kL{y?!O{%orod;$?E{MpQD#Rhx- z&t?tk?IBia8C(YbjD2>t+J*QM-WVIly{>h&R*P;!CDp-_d<@_&Wt_jk)2)b%@LKMV z-Q?KHygWP&PCX4r?7SafkW{1P%xwGF3vAN(2$okL^z|x*A)1 zvSk8%jHgWrZ*Wqy<8MqfKW#>j1OmeXJn!D*c$_o+wOdlXV}3s{5xLXO#naf@wpHP2 z)i96yCB^;nd&s1Apz!vQaPTP`1@NBxLOhPs{BZGkLj2rdP-xFrRNzu#kMg^7p$AQqvbx0quiwKPiiv57lm>_g=f~v?D zpwUYS*#^Esh;!i8sb0i8P$>rT3_Q&&yD?mhr(WaSz$fnO@wC~{qvMj}>(U=VyU!$~ zHOr?swCYwoJA<|UKgHvtd^Xe8^^{(RxgtWNf^2&6tAh=AO3w%|Xf64TyVesP({loz zx*^Cp`XC-ZH{pG8-3Bzxrg|zl0q0a4-bQd2y{UmoNo2U*f$DbHDA)rUH?&>dSo6pm zh-c@*y2>Q)sso-*WUu4dBInT?NAgQ}TOCqH&TVA&cOmb`p?3PQ%|@H?qjf$oqgpwH z+-6Y82RL~Ac58jA*N)%EyV0bBF2QpXiLu@JM;xVJ%n#w!l{BByKf+Ug+m1c*(3q#V zQFv;#ja&F9?-{(2HkX-6(I$s!zNmgv2n`IbVf&6g8gLCrox_<60oV4Qf#*7x+8R7N zShO{=>u|IG6n3O5_&q&8nB}vx?MIk7r_v`W&FF=oO#KRCK3>ohW*xs`OTbh9_VgLg zZ{`)p-J6sH@YKfOU0meS=4O94a+}QW?zQf@KcAcAt-{kn3GRQ<-FSR_%=hUXjx_sE zBlY+rW1}>03_pCe6^WSesbTI6xF_pc)2m~cH_S(A4wa2g{cA)y5fg(Sxojsifh!mT z+TW{X*uCGI_heG^dc3|St!+5foA{?`SLbk(a!NQuh5u2Sx1Hn~YHm_vk|Nz&nK>zR z-VglP{~S}6!Wnl+>u@O31`WaCHn@Y}cpL27hW*I~uO&D#2u6NrV^Vt1@DlzxfYuHl z8&K6Xc-leeX70}W+M4~OiDa}hDQTo#&p#13D`-}DNK&MId$R@_$!Tx)OINiwDe0v8 zt-YPv!NDjxgnt##E%-|64nq7knJwh!1EC=uHNnM}65@Bwg!T{`AB2V;9bBw{0f)a{fVpCb9K?!PA7WUQhmY!FYLwf7p>6kH;sa z{DfyGp>A;dF@5XKZZLvhmJGwwB(xt1UWcbCW#2-+il?6An8*U~jw%R2W@-VVG! z>T$;L;ow6w-oCxg2@6l7f%hWc(&7ybJX#ZJd4ieKm;Rl3LOA&0CZ{7#>6Is#{i5GP z)p9S`^^y|9!N+#I+2uBTDPFp%IVzkQc|OtX@5f*r)y1Ur=d!FWG@Q$L1F$VQ0Y?jo z7V!pq8{WAltv?er^+a1FLpm-g`U~DEe%V8*(Jm)3IfEpTi%$wNjBWsp3Q)9lSM~}& z?Uht-HlfjE%>Fu)pJjD5`!mBSUAgt^_8*GJ*oQ)KSQ4h!-)Y#4AIKx=6ivSeui6@h zq+&;4!?8LTn^5qotty7YLP+VyIb|jUufNknh{<;GXe1OiyHt+|Y>MN5r;5*Y@wHXu z=V6L3aPfbqN;lob*H+cLNDntrpx7mlD#IDhudU*|D@u}9G9wR?!k23y_jD5;w58dcj{+%We zzb;5+Ro6X_Nng-((u+U<)}t!mB}}i{staDmq#H23q?#7*Vwz^}JN*DvKL5a!ejBEj zROvp!6#r@Hc$?reoH`h9WrNq>Y1k|p!unH(eUEt!y56W>QdPVkstOErI>hM+7k^f`p3QI+AY|4K4If+Hh|m;Vk*WIgFZ2+20r8p< zGhI5VI%c->r3#ihU)liwa#ZQ&J6-7FQ9FYKl=1a0qPFV78yx?4stVprIwifurLV0* zxAI3Fbvr8m4*vOO@VY}DFR2Q=)A>@(tQDxx{fZbt+Cdah0R^ZoD6|p(kt+Q(m%g?tzgdpgR#kM4D`##H&-mNGf2PXd zA}*B9b9!lzQ7BYfRk6$9(#u`ERKfX97s}E63j$6XqKg&bR2eM6m)`9378frSzt#Ct z`AboC@iOP%>HK?9y=rSP|7!zfa32ZP!uwHO^Ps!1wklnv-D#CGNQUrHlSMRrx!JS2E|3cmLM{06Mh3f@p{UnE^N}7r)s~(R3ohmBBrR(X^{dZL5 z^oeszi$KtZeyH-wugyAGmCyqpwb`*b< zV6>dSsQ4HcKi0)d6&&aEJXGl>2>wOIvt0bda+hFYEmbhbC7A4ZZPh%_bMg5u{@4wer;9yO2?%NKEfZRe^e7(^?A}IkSb!8^QH1vJ73xse+#PieBk0gbn&%S{q`wb zQJ=f`|Eg}6QG_!5(&e4>QATYxkK=kQ60x?tI~Up*H)#k>v(xAP+L`(1|*O+b_r{%GHBwsRDM(E zOSL~A<$S5)TRLs!xYP2`UqImNg4QHd3)-TpNC%feN0)(A>5g`OZ52Pp#UG2Rr%phX zUl*6&D&wz!E;!NYNiN~ZE}>LwHW^h#Qk|x|_}Z#`GT_plE?%nZdON?iMl}EWx`@A1 zT{ytSOO}$&I8eF|< ztLEln$7`#yy&0|!ea^+#R>eOLSFtZRUGLIKwcWgmD&3~|kSVSRw+K4-4WQD!!yi@Z zJ*Qhyjn>DCbgFs!Pka^fx#Lm=cRIhe>do2@a22{2)pb9)bZAh102J}Fi}*WL?SFF_ z{O;2IcU1WYtIX+9=uuJ1S42yirIxkhk2b>-P`yV=5&YlO;Hd8kP}iqXpgtrX=?ebe z*7E<&0yIjaX^0wjwrfyrrRU2-=eP)|hGLxarSiu+U#g5IIG*LWRD6=-IZh|Lc&XxZ zQO%)gj!T0NhNcGrKDTxeQq9&9=l?rZ1!uT)Qe8I-Re^I*^}t0gzP4(KUm>m!|AT;2 zWjNnmAeFzs`TvP(?%YoLx~Aq5KE3Uj9d4}8enJnrJZh_!=97;9PgI}jy~y=y>;_cj zY;^fa)yTJ_46%CUT^I3pstY$0uXOLD%J2iH+Z_KG)k~`MpSbwXoc~W3FID{K&i`CX zTrUAdeBmOb^1nn?;8&=I>s!aabN&ygUbR)%{Rr1}KRey;v<6lDZ>T<0Z&c0}s;+2` z>Vl)Rr8<@0+WAuX?VNUWTq=GndMr8wCGXHkR0W;s^ej}b+NuVXk98NE>k^*lbb`|? zR9&C#{7I-@QWZSK@u{c^&PSE;bQfRZbe7XOPRp#8^WB;);9^u4>VLzdmsI{jR4uvE z=~XUXstV|Tq@(z2QC0MMRM*|);+MF1{eOUzekrP@em5F?_H!=*y`)O8!s&yKOT`~X zRluXpf86ORR0ZmPR3v>CRfV2I)gv#Wx?Q~E{4FT|g+Ag>ea*kG25oqLqAGYls(gP#gULp-bzNgM-)S)a1r*W5MbuXDrtqd{M^qVha_OXs z@9cc3;u9V3;`BsRJ$SP7PeE0|WzZd<0tTVVU?{4WRPn={4tF{NrBR_Vs9yga z)g|Y->&~lV7B1kkx2qQLJ(dd2CPFox>=OK)YKW#1uWuD*xOD#q)b2#eNG+R-s-QAg zfK(sMU52VhE=QH_Di<#mU*!DSs(h}2tHQUU%I9vE?hmDWjmZiZQCpSq{c!06s4}c{ z{zJ}x1l2}X<@~2my`&00@A!JhrOM|e=f8BO0~=6PWRvsXa0x)cm+mK_8mfa|ysJn4 z^hLa8?(~5ESv77&I!-BY@Qe5V$v6J$xuuw*9WEtzj#kkH}LxZtp~q&KlsJ_!7tufNe91pKlsJ_!7twRg}e@E2fuhf_{IDG zdtbb_a9_0l*Du~z9eGvwhY=>aGdyV3n2*C{ab`S0)AqA)j_LbFcu<5V$z1=4NR8sM2K zfyG|}T73hkXL7#*4A=qKB+$UL*ag@pP__%u$ZQl?z7vr6Eue`h{T49hE5J5^Lrv%J z0100M7JUae-0VIyGTN*bNc$ep%q;kx6jQ$e>=I~UmK{cl=DPq(cLR}gTUZD zfL3P79>DBx0W|_`Y^I&Qi{;VI=CMU!{EwvQU{?IdCG)=rG}sF`+Kk-`NZt)tD{!pw zegfhmegPzz1-}5M{tVb9(A{+Z70`SiVCk=bRI^iH zgTUY#K$^W|b~T_zAj4$-Mv6}R0hPZ2dYNj0Edt|z2lO^8eh19|CEVb~29ZJGzBi7g z&y#<}U5ne_cwzh<_$EIL$TU>~i)#R_B7i|AHv$;&8(@>bVACQFuuq^Y4lvYg6j=T{ zATb^=+?2*gM&CFl;_@76I!8&65C$xYlHe?}RbaJ1+980^X2BtVsS&^~fw8809YFIq zz|uN^bIeYG4FZD`0OQS)1ic0z2ZUevo53orf-?V55*e6id5Kw3~ z3M{V+NNfa{Zss)xjHw6MCQxkJH3B5m2P|p~m|?am#cF}HCV*LHK@-5#27p}xrKWpR zK=X!xrA+~IZLu2!1|JG2GfTAIW;X)V2$Y-cT5p{i11b*#%rn(mZ(9V$9}c+0tT-Gn zzX_nh5rE6g*dqYRO#y2Kt}tFRzz%`@W`G5zN?`G!fL6@`SDM`BfB}aAHVG^;Em{Ef z36!+}Tw^v0EI%BOcqHIDQ+gy|%n^WX0>0^d6d<7)V9`;48_iaM)dFcP0mdw737Fa( zuuEWx>D~&^yaixsE5I#gr@#h*!L0#H&63uD*+&9u1a3E(Z2+B)0#vpEEHl*tTLi|p z1>9v;v<1v>324v`aE}?=4v^dmuvXwc!&ANJ4}tvlfEA`nU~y|es}6t%Ol}9jfHr_l z0+pskN5DRTvW|d<%|?OcZ2^f#10FS{M+3&R18fsmX*wSRNN5jObPV7LvsGZVK-#f@ zRc67lfTQqjh6`6A&{R4*l4N*7Iy};>H>Jx zwx&yv8 zx!nN+x&bx`>@qD<0Q&^WQUKqXjRMP010<#bcAL^v08e?MKLC**!sfUhkx?cg8M3Gc zWN+AfAhKE{Ee-N>*epzgOzjTYB~l&cF-(x=DUhY)E0GN%gEJsCVRLf^WOgc~ zM&$Rf8Q2rjsRyL8C)Ej?>Yh|*i@^9^fHYs2O`YAUPedR-lgYdINR{ zoB^0W0MKAC;Ak^;Fd#V-uvXw$ z;|&4q5Xc__=xnM477qlp8cMexA2A<%$H{NNAjl?>ME)K7Zpc27vSD0wqS-i%i6w63vr}M$z~Hk0X=ce;fZ4+VH3AtXa}=P{2teg1Krd4*uti|}Xh3hXVl-g>NI-)z zfWBtz7(nuwfVBesji+*u=p%MtFr-vOzzo$0iyt$1O}TH=K%Hzl$`?@ zYBmZi9}P$x2N-Tj#{tIZAhJzhr0F~!kT4doXguI7vsGZVK-#&0(PqK9fT?E#b_t9% z-OmFwKL@b%Jis|-r@#h*!4m-E&5{X#+2a5;0_T~`EI_C6fXXaDmZ=ulA~1d;Als~% z2$+8^pg}eu$BfMeB%cRZD=@`)lK?ve@+SduO_jjn34m5PfD24+4q!kQV3R<;X)zhF zPoQivpwMg-SUwSuI0Z1>luiMR$p&l_C^ns^0um+x7ENW6&2ZChwMa1SX1QrMH3zaQ zmo%jjb6jKXBa25?Fizpw%?Ml_qx@U_c&VlfWX= zVme@-K-qM_HD;s0@_ayI5#TygS_BwV0N5tro6g06ghIfgV!(}NtH5f3v=V?Z3rYY} zrvY{eEHT|@0Gdw+ES&+k#q1Q=ATW3)V5wO$6EM37P$O`=$(#k~R1Bz`1z2XP1-1x` zpAERnte6d$Ujk@Q3b@CNEd?ac0IU_b&vywAFu8L917-m> z2~?UE7XtPPlwAmT*lZM7J{yo&26)tzmI20;0=5aPG@UO3B+LOUx(M)u*($JFAgvs* z$}A`cOr0BPXud6v4Ag0)0?_lTbjiyRq@jO7Q z%K@*N+{*z2E(UB8*koE<0oW%{b_L)Kvr%CAC4j{FfVWKPe88AX0ow%LF`X9x5-tNQ zS^(H=whF8kNLvVa-z-=Nn0h&2m%vuj{YpUdD*#Kc1bk?A3TzM+lo~eGl870;1c@^%B=IJEGZHmpC5MiZnFSC5_BRNn_LQHl&Ful{7VPNe(rgZ>R4QZlUiN-A>;hZng@n7D&4T(9A5j z12FYgz%GFnru#BL^QC~L%K%52odO#K2Hy#2WtQ9tn0*_dMxc$!ybI9jc0lD_fOe)@ zV2i-`y8#`{in{^x?*KHo2XM3*dk-La8DOozvBtX>utOmKUO;D4C9wETK&$%z$D7>y z00Zs4Sh&vr}M$z~D+inpsi_n7sl}BamS-9|Cl` zA5i%apqHr@*dj3gVL)%Q;$gu22LKHo0rWLv9|0sk2v{r7-*}G#b_nD@3dl570*fmF ztsVmmGP#cd20R4VBrw>tSP9rCP__~<)NB-3{xBf%almj>`Z!?BBY#yr{SwM|Ixyf7)==2<*ay?+4sTSBGF#birC1%BofcfhH4PF9VX2!k*NPZr$R^STb zy$skPkpD7ZfvFN$`~slW2EdgjcLQL+dcY=uMW)3@z&?Spjeu*+MuFuo0uo;VTxUvO z0gQPGuuZ@>onHkcybM_MD&R)5RbaJ1+G_w~7Q6@36`xZd+ zcL7Vc0G={C1vUr_-U?W2mTU#g-VCS_c-CZo0O<4{pz;I2I#VsMMPU4gfEUb)4*~Pv z2Q>Hx;6*d`AAsa7fVBcI8*dw6hd}-|z(!Lguy|_>ylQek0u1;7u<0XGY%(oA2J90k z`xx+s9jN6W0)oc9WwMmVn12AaeL{+NOy}*~X5KaPB%94v$$O^jr^x$efnF4=0j zf5xTFKjzYrSWzkoEjuMO_hXG!%pODlPlrWAlYSFe1&jokbGx0B4+s)R3Pzd zDzMv>ehuf~fJA;Xj0*gb&cZvkrs>KN|_zz%`@9{`@I5?K5lpw*9ndM5Wrz<}=on*??5>WqF`smfi(mET&yki9X3DPW z$nD$;7VVE@hi_lCdp{rTM4#s27~ZPs$#L(8%_qM`;v+w{TUC%8cV`{b_=vc7|J9$X z{6|iYH*M?3B}CVa<{v~WgGO;d2GOS3uJl`0ebOlI(gt-m^R!+bKv41VwWgp|TtVh%Dct5m{rqch#`d;&z0irQc8~)2?gWQAeD-%jTPk@(kA? zkFs65A5V;YlGbq5dI#dzWy&V|pyBo||D z!&QzgbnI~0Q;uEfn4TK)v}0E}re1#Du|=*MLd}7Cyog>`yM!$WFLvx2$Bu;E>{#r{ za2ldp9J|h?YYFQ`Gu0M75l%zW3Oij*=jA(A-WsR3gEs)xa~j`%jxBZx+rkDqw#2b^ zurnOH8Kz)+Y@}m))SL?LfSu*oQpY;NM#r8XdYgks1IM|9w>x$WY$eUmgu27AV+lXu z*fPgD!Jc$Xzol2fov{j-UUxZm9N~*$nqznCA%{w+*}IUYYx3OV5}rUf_E44BkM9#< zWtd)i@}2711-ry`|NZXT6JgnoJ>b%v1bdpWdR$M#Q@LF=|28=Ikb@_~HWAkAVaHA( z{H9}igq{l4zv6$7urhqirRzpm1?siZr8|wV8l~40E?p8~4Q+W_0TJ0`QA^fWwrYgr$VX-HWu5qjfEcS5Rr(l{}X;|!0zt8F!fXXKwo9HrJ z=Pu5Gt#f1dykk9Ku?LL3;8-u1erl)TTJPBDgfGJMdeO1ogk#UoddaaqlpoSV;`Dmi z!M=n$!@8mx8jVvw?0A=MqhtMHdUBqI>lK*lIsmKh(!J%y`A)()sw?8%5j2@iKnPe;_X!>|#A zHLU+YgNK|B$B8|~_9K^Y1ndK9pfOaXbn!^+A8wdFaqLXkHkWQYOwngyueo%expbpo zb730)f4X#|wg2Y;HU3`!`7d~I(>#^NOOIewa4e<=$@N6Pa_nrvdR(7gU&C~>ItObG z)6nd8>BbTMov?;sk7MHrEAN3C{~sJY7pROhHa|Lc9%0=Z)V&%*{tHdO&L*Jl-RD>q z;gN*Zy}zKU^h8Y0?p5#p3L_ZG#{Nk_y{qRz2G1{_grjEwt9w;bU7Uk`0#o;D-H1)b z-cc^R^ejlRDVUxYtyjdcsf6|5LiJFbW4VM+aV#FCn9%uH`Kb=-;gQPl0_-%$5>Vxx zhb1|t884QP=^x~%D>dVFZ2>k8HUZT$B*hA`a~*5w*fiK^SeC}Wk%QBL>Y7PtW5`}+`z)2NSf-Q6GP?&-WTGYZ_TuOMkE96MW=D=1s7JJ&|7}cKFhPGx+m-u7MH?88IF4qslHe#<}uVOkH z=_vFdb`-mp*1XoZ*0i2Cb1kM*k&oSg-H6?U8Ei4O1e=NJl%xmk=qWy9v9qyruyNRU zOg}mtsYeCr5iw_Bqp;DKo_DCD(^Bj<>~`!9Y#DYZrX$qd*uB_&*m7(Ic0cw2_8?Y? zJ%l}sJ%T-oJ&rwrJ&CQtR%2E1EVHKwti_(ep2eC{i9@l&u){H(&-8P;BeA2f)>s>? zEv6%xp2YM!79kvm#bZ(I5UdX7VRfy!tTND#qPtFWBP{_Jup37 zZXtFRw#am)sB#_ZmS8%_>EL!7rUxW;z&c_&jEAuZ7LP@-L$ErSht>9D7>T_3D3rZZiCow)`O$i#G@(*bTUHUt}r4a0_GBQPE0&ct+h8-;OT z3ys0XVrOILU^=gj$Iivh!zN%~vnap8c46OQ-(lZlyRkjt4(z!Ee#G`-KVd&(`>^M* zb=aMzN&EPt8s0%rhmxh}hLA~VAAd}_j!}BP(d*cw*khO;lDC9%D+ufHQn}dq*acV~ zmX8%+h1fJ~I#z@gV-v6}Y$A3Q^KvEmKaM4{{JUc**aCQ4teu{#*`9zNM%owahgD#D z`ssz3o|5_i7wf62v#{CNB>ZXUbgT%|a}=IqF0R9#$6mnJW2aF8ZFn8gqp@Q!{eLE! zpn4A4M(njiSV@}*ypFwry@|bry^U32jYxby`T%wxwj4VgI|6HlRZ_qsm=3m|VB0Z0 zQt&lw6ZSgx2KE*S-OzLc z)4iX2eeev)3M%IAFMCd59^N&z%sFc*dXi-Y%rEJgg-;EVc2kN1a<OKyer81XVb$2LSPiCgvd+ai2kYGX4E8Mc9H!%~j;=a_>cpwjq)v~oVy|I3 z_`j}mu}=FsF20Lx#@@$PV0w$86aItP-Iz}H23vyNg3ZM)#LBR8Y!)^fE5=H&8Q2&G zL#Km$!uq^GpASsNaK}|V1RI3?#B}%>tHyNt{|(cl41UCP^4CfKDr^yU zHFizJq_>MdV(d+X4K^Rs$$vWb|CRR^&{18{qxWQ(ff6i0h>!^c_W%hAP@E#grBH$e zcL?qQg45!%DCCEXpufoS4s?v&KzBa+ z%O}6VbeINBpeZzmM35M4pufK~1^R$)dIrEi(7)*Pntc9&H;{n)gy0T|ATcC?5qf~N z5rM%d+YLe|nG6x|BZR>vg|@p47hpG4znC<-;MLV}9iBbo**Q257vLhCg*=cKboH%E zdR?ts;5?<*1F`|?VroM%C=8+C0DnjWe&7q&FzyuS2Id&(rey}q1pSjiEub}Ypi~{9 zD-72X!blhmV_+=k-=Wf<{^GA>TKf6(4@ak#0N{^ES~7$FFl!yC3s>M8T!-7RgaYXA zWnTw>(AByd!~@+K<;K`NkQdTII!F&0AR}agETDfhXN9)^N-lJhqMMR6unvBO^{@dJ zfNoCoH@Wx_ge3$*p#T(w!cYYCr%dm`eRu!~F=h|xw!(IZhMlkpHiQ1y&?5aVyKX?{ zz*5kknj8mS;0@`(4P}X8BkepLet{CmR)D?K##&_7fu5+X2mN`<`7i+V*FFV9e%6}d zIxpmcEU=QafA&M!HTVO%qi_ok=YsBxbPM*Lgs)*MRi>vYzr$(JBf81Z3;IH9r~dszw^15*k0o|MO52{=h7a~DnXoTQ0?w7#J03PsPzT(bJazFJecF<9%h0qN7 z-#IeX-)PP1bnpnYM%DkE03C402@k_g*aSLzw*l=^x}y0WibDZ-gnWLzMz_|swzkcU ztm18GmfMykLFQXTJcftx2;8W4U3I)Ccn5FcjYUouU}yg<)Yeqq6tFp@Lw=hNAKA85 zQyRy1Pu^2a%{rMd%4BA)5O{gx`Q}f}VozkaVY{yQk#n(7zLR1ulaA z5xU>tCl~^QVG!uVkqy-IWr7s?>+5zdl0$q*21(%?(3wPMjRd0u`!kt}jG^)|58S02n9-3gO9yaXA$Bz;4(H(XazHf%eOhghSwG z@Z^33;c)ZXm-~%eZ-Di%21fDhSHjh>1g3$OaVks!fk`k?`|boT#=uw@4WrEa@r2`G zGR%erFdgQb_wxwn!W@_dGhqh&0xIvi*K2*IaeBQ77Q;g4J$*Nc`EVKGQdk8mVFfG) zHDVoT$<*?-umv{jH6_hSxD~Vz+hLn|t@pd295ROp55Rud2M6H<9M%?zf#2Z>9ED?W z94^2~NQi>7glFIsoQ8979{zyKaLEk+G_TdD8*m-2!Zo-Dx8ar<-X-jJhkqWyLwEpw zWcG~kFL(~|@mF?u%k>+02`}I^yn=t=J-h?$OX_OekjKk@a6P*CO+;KgLMy22(dz`d zqRK*qJ2weU^gadG$)G;hp`a`1q>u!XgDZ^(*Sb?oO{g{CMd$E zfwX#Uk>iDIDf($18M!|Wx?a_3`5^2AU3uv$Ojmh2NOZ-g6VYH82s(B5hbYkLTc`1s z&;oP^Pz?&fw~!aKW%3Z}fXYo6sFjeNi_DM>vOrewN5BDokQ#FE%#$!BWy5596pHy?ah5JuKPfw`Akcp##cu1AVTdAdOd`2HLQXaupE}c63}-k(_k6;v~QuK zpYzW`FW^Qy@;p#Q+Og)qY|v89Ae;=kgP%k=5hg$j;#%;mF5x)t$HH(J13H>V6Al9{ z&``orFcL<9%KfbE|C94VZ;b2lgaT7x3QU9P@C(d@Sx^Oq17I%K^Fc#J4c1y*M7S81 z!5R!vW3<$It%cJx}!v9w_*zbQ@g<6&CF=zv9gk7)` zwm~%PfGw~Y^qF37h3zITIekXD*3Jlhr~(>l#9r6~yTSEbmFshT=2G&T`AqxB0j~Fh z&Rf3|s>3=;cnAU^vmE=5&jIP9!*B%Df1W2i2WR07XbYVtJPD`ZBIsWK8_+$z#^)r| zt+8&a5`emv%!ImS)~&N{p|6lGfG{=qfF7rCw35_$4)X_*x<0%t9ZT7~GpcUY>(ZrZ zAHyTK3i{?wRwF6VrEK<+4|((e?!!H}3wPi)+=83%C)|MRa1B&NtQVA`rEQtNdCT)R zAp1+%a`w}+A3Xy~26|4U=R=7>&x`b&NY99Nqs5a@4b}4`JtuNif~LttydHvRMQNc` zCN1azi5`@w4%M#*C%b4LMW1o*P|JA$p&ld~53)iI&}+?1pKGYkvqKZi4k643!4S^9 z9%ST(K*$AoASj+3&29VE`p7Eod2DI=>5EaV>0-p`kSj{4vr-X4U4wi}SP%+9VbHiO zP?qa5P#Q|XcTf^afNLStkZav{wnM%eq3%O<!QT`>Kqr`;8~sQ~366%TbdmE&5S zhU;EWd3EQkE>aa$g(^@PDuHVVYP>$v9e!P|b?&Iiway2+>(;O=&vngFk+6b#J6&z* zF1aq$hB~0@L*3!(#x)nhO$i%AOVH~U(8Rpf_~u+UgPf-9$1<+;fvRrP0LGVH)%Xm7fZeK|tju!9;M?%Ez^#hD?B7Fdjz2IM9L* z*7hIEg<7SVjsdlL6pVo3@H6}b!(b>3fk6-n-N9v4Pp;K~9-uX#8LF`Z&HFxt1E4=d zff~>^9__Efnn=+E8fqfFR;5_^MMhdeeeRO^_+D$o73XRemHXNFT3nfHsL#}} z(dKhatoK?=8t=lDnZ~=)Y3RyK+gWR33iJgnoTkxGn>U@d?Z*i;Qrk=0NS{xT<>h&C zJ2-x4C;j+(5%LQ_TXgnkX%}*@d4DXg*=k+<`kAbDH3nEer_tKSw0~-CYh`HP zS_0Z#)F4%&&zFMs=g%|H^vgi|tyaJ~(27|LYd{-8yQ5aRc9-R#U2L^>lT}=-gcYEQ zUA3s!s!TK1#m>i>YDrb@^JjY06wPz3rH!xyw!=2q3SDtO>It-#<`Zt#s`=O*=&;|y zvoQ!Ls^}1Cm8-)2pzh=V>;qMl19WMqdgk(MFU$sYCA(k^I)5YF1ECnO+YHrs=ZA$| z{za9mi$6%HO0$CAe_l#0`4RZsxMMtvf&XIM@5mihH=!l|+&Zmp%~<2kA$S(fz-c%I zC*d+&f{SngbY-F+3{x+Bjr*%`1^xitU}?OjxuMUIDZ_nf@^>D5KH%YfxCeLP4%~)Y za1;InUB$d2d;(A5G3W%V)vM12nxX6YGoER)wCA}_u77c_XOu4q{|22hCg{FGU(`M4 z!3$7DszCP?n%O(}$9$%lxwZqNKT`ULcr`-zB5%2V10NfznQOcnt-4f?8l%rNf9K** z-;rhzR1(Brp-5Da$e4)B%-a%u4${}7AcQvqH>5_y@jsPQshS- zPL<(5V%A(l-4VUlZqKx^Th$I>RzA#P3A2$BE#EKm%#5IQ?B;X40n?Z?zR=VP@@78 z%II2H)K@O4_(XY83u|Xcjxbv#zm*A`=Ydgot2OCebvWPnb_=J{0_iB-U|h}1^CzZ|Mfvd&Uyk5kF}+Q=1= zN_DuaE-M=lw3GgNcS@#xc<3E3AKx~qX0!Y9jodaGWRrMxQP)K7Jtl{$b;%*2G)hm5 zvsAt^qpmHVo3pBX-8|*dHZ)F^1odcJFKJ)T<{J|1N%zC#($|XowsrdT&02rdOMVu= zW=!AFYY(SQnmT=K%n!1Sq~v<09+`KRMD+>!NHGGx;iS?QZB?O7s@&s#igKpPs~v43 zzhi;iV%b@r#B1b2eOslF!l{fJOW3~f-n-SNZn3)c4G9bi4a{eWHe<>xdB51Px@0o5 z>QQu9()v)s(^ABj;F^pLxA|IMrjljhHXpylUd~gLDF4(m?=0OCkjCbgH!wIbZ=O7s zO!5bUA;l2z#=vuThe?KUi;lz!{78%sF*BB5Zu`1n&H1r05t2)rWSGqMv8PO6sGBW~ zjArUh;CG7Qt6CeDYmzAaPc_eDt@cv}s@a@{$!~PmOmd_l8Fo)+B+Z`t`!_G^dOkG;7#PjP ztq~28F@w>t!<$Z6z4iQoKb*Sr1O_o1NR>v|Fj`t6$2Tv3A+SErAjccoD!OHqw2e`} zKBLhtLlb11QEBd)g`}ntwc}gmhsJc)(J~u3w*s=IF-n%pBYoIXiZr1uUT5ZqJ8VHb zb&lb$mNE}bY$+}!lGwfd^IJwR-Kxt-yd);(TibLkF5?VWUz{Lzsp%XC%S;45Drag}&Qa2_12K~&T`Pj+;uaAbY?miI4E4xvRA1(+Z<4*u zevKi_1LuEn$GB`yFVni9(5Wf-Ly62f7$?UfuzrnoAM>52)dvNB5tv>n=G?{8SI zzMm@lU3MbC4=hxpm1v8+?LN2B)j+2GW}(b<=0j(0zI?%ZXZP6TA}QNqf@#TI>D`vN zt+GSw#ME*^X1B+@J4`~1v8ccIuCLN2-8&oRF`s^9o>_&adG1m{tu$JOQPl4Xn`Kl- z+_RzGRq;lRe|Bezm~p06=AB`O>8nl?I(~LarW}NRC{ipvFLQjRGIJ+6f;SSj2f`9N{bnM- zTo_el(~NbgPt|CJfawv|%4+p02jq|j=1?_UjbECgh9k5m=s0FektL0+Zn$i9+Lq4p zKu1HYL%7ld7i*5UL6VCl*@rS4Ql9o$J+R&n55~7t1*V6Yos~d zV(h3jU0Wgw!t54RG~BxNu%|6W!l<$w5~9#pXR~CO*b|p!-u))mx$|pS z&ghu;de@u#eD>KCR=4~ta&+0-Q}Xu0IFSk(tQ5E21Y4w^-W`xCdUsmVM#kQKD*06r zGl8k>Q;~nm;j0OX%jzg{k1w;;2w(ZVKS7A}A4O16u8yEen^okbof>d^-YLP*m&Gqw zS;RRvE0*C>XdrS6rAQxJgA6;6Q}_1y_Q%7`6=PRiGFYBh&BiR&vs_oNTUw(h2{TTAy+s{_U&n5X4VW)*Zb1F|HV+Y$xe=a|Povp4Pt!Fw$Nr|8wvGPtc1Le^mo41+B$nvws zWBzybx72c_pDpKqs0g$5jhdFGLv3aLd!pFvKI`5e#+TWE&Q2TrKQifyZuV*a`dG2A z)ly5mM*gREH;ZeGB7P9%!C2=ANH)&q>xds_?z*onNx%7be%r+@m`RYmlqGeTlp1FX za%4e5*N#K&f z1-WxRm}umoll5$3bWUhJt?G!;cdOEmna0&STULch#R)ba$7UpS{V>TRszh-86{S^z zov&_h!z2m`>!~oAIsyA`hsjaBe-S3PC)kdLwyJIDKJ>sIRwDC`P`1pvX$$pw7Q0B!8yXm0q~?kH8GE(&sEvg75iEaAj26Cf?p-cF6B=~P=qM-&oT$P;7g*Nh(Cc~5L1 zhc}kP=&=6KWYRQLy=h_y4xia8IC%A`_OXILHI>RLajL1YCSBFi@qTNqgrTSC)VhtYviw;02WNa4baYMU#J#k+Veqq>X@88~(bpXvLC#Y;%ZujH zb~=@jjPqh$^(4)E?8c@&`Lwr~lYYh)GHW_^bVNdjbdn51-4p-)w2QN<(c-MGhv*31 z&FB9;kZAF3(aI+~zxm#2DHiZiG-6bHGT#S*A(Lwr_^1pmrSLE0{}PGhNX+m|(kbcC zA?r1NU3(X>By1%ekO+0OG9((N7@BFtxL$*h&@wRIa}lGKWqoq_QD^VR8;CIv7xTB0 z?V7d}657cnVIZgl$U@%WKftHs8Ix01v&uq^Jh9a>9qBtm<( zHgtGKBn}Fm{jwQ4u*+HQHb%Z%-YiXCEZ@8qPVG)d)UmCMQtffuKBBGcnnAsv_)>?t zUZ2%gJZ3UpT$VOzXY{3Z+0ry#GNEx5b(zMx?OKF{Bk3sG!H~F?Fz1GLZFBq;TiS9R zWZXlk|gxOPvcaj+guyj%kpD!nxyJ5qEpW}X*yPnZ9GdzVzs z%$=^GTNimZi^}+^tI^b33hpS?sN0RZhru~ZZDqswkuQ;zzBL?T?m_u1`fHO3_USFybhEC~b zbb;D?L#y8{|LQ)uX}@Mr^v1nvRo`z~r{<-?(b_2s5`%@G>9D$VyBuU3UQw#gWz+ZJ z*n9O+o0r_1Yx57y!syU}`P-qpzxHiVu_HO@;Kqg*Jq;TMz5jK_KR&4hmr06`# zv8$Ja&BMvK=ItZBBzm5$c}Uzd=y|@ap+k8^^QGaB^VdVCIo3F}uREVvEu^>6ld`zY zE7R-Oq8y&$w4IK(WN#TWpXslgES}G)s7It+o=@Jsk&<%(ZJRYx8ZMwtLn4h996hCM z%cp)zIC;a-u}I;gCdBA&dC1UdlgHm|Ka&`3brvrbB4q_>wXf}0U9}_S4fl?=q)_LP zo8!9hLyev}buot&v~-JC3%iG%3_&L{_>VF)6{Ti_R2ubUx4! zDQis0E6ex{|GR~@%GO)`r1BzLb2Id@vZ#$&WQ%h2i89o@N|OH9RK;gKrs~yOQ;46U zr0rrdHd3aRS=@YG-04aTF&`_*9wHg~rDAHwlr&m9bNXxZq8Ajwg__;KvUh+KUP6{J z1LVggl-1PfaA&2WWnDjX_Qulfhb=HtV56qkj-=!8K%@SGYi@3Ja!=kqW-+LZ5`!f1 zQY^1Jh?OHc1{FK$S3YKc*;t9zgQWOUoQ^Lws*9K^-LuaOIkxhh*$Z(xU$%~p)xf+# zmW)H>;!@jGZ56F+NAqDuF5QZa>s9nsRa@-dDr%T4L&7EbA$_njzOXV^N%c=kWEDzPtK6Da@Is z7%@6XiY>VFCMZqBb7CmIF0;ywldY?$#5g4ADObnIVLx zBM@{PoM`md`!5?`YLN1qd1vHc^6BMzBb9o z#68fn-}mKyh}0gG-?{I3FiDcGp`u!dbX!B?ToXfb>awfn-i>IcOETtJRWf<9>_Ni% zqNlvnuvKlzsVjc}DMkgh-!**I@@aQ=J5%J*Y4v}@-r&L%$+M2W#4>jJuNcvOszg8K z-WBqE%{tq<(00=dqh9oPk16I+VhoPVd{L8ny5UB%=f4ntU4nlaV6N#YKGGSZy6Mjq z_v7ju>uss6dw!7u>#3)rGiBC#{C1_8@^HOv9j{>LZs1%Xi=5eDtK^t5+n5pi1iYLT za3!Xm?!EFln_$^&DZY`~+Ji(2+Gyp`#r|t2RHeI_#}Jm&v!%;MTe$mOB(y_3pDh

STw3ePDS2j^yRp!WRy>C260ylHtX^woq8M)qbWRixP*@te%k#9z``pB&ZPBy#R zB2O`@Q3pSB&fYl^wS|H8zj2c$>$g(zrW2IA+&I4M;S78h#JctRPfkcSZ{r~Ulh@Xv zh2|TDJXg5p#5QMpABpV|Wr@+M|9$krXD4H}>jFo81HP~Nd?~t}A=d;6Jttf}H{A~# z^7%4hcGFE72K6FFeM0cV8qMREYBPnj<~hNr`7(mEj$e@QLSoR&tC^GS=oN;9wi}hZ zcD_Wb_8my*-s1KBcM*Rt-FW~BT?~-_Nn+G%<*HRHN!^Lx?r>VhE|gE>%$KA)Xi`&$ zBks~Mfa~p`6FgreV|LJ#Axwz6lh|_nX5&Sj*9}Fd**CwsS9dP-?ktv^(dbyRL>fjj zJf1I={d#X(CT}#%w_Nh$Ln5fQMYc5@3 zP4)yu=JAmCM&rfF)nOO9tgd|U8)pnVC_a3(Q3ChTUd55nLF;9&?O)k{Aj7#pV2E>d zU7i>|Xc$$ba)+M&gLf4sEj@;Q6Wna0M3UCc`Oyk5TLG3OvT~oTl6CQNdAE-aYR*!Q zfvC{2Fl|c4?UlwaWU#RB`K&*&FBF>)~6d~E0WeOo8&aAts^&y`ys+#Hc8P#Xjr((&`@Aft_kUOr%F7*y$ zO_3ea?Jyo9Q?y*x`=!xRJizXw_c@PnZ-mapZbQ9ik=yGCR`=Q^D+pN!Ts>l&rboSf zk2-IiwZcj3;iE{?1UHY`vKKAA$7tvO&wG(`4*b8d7n!|ElAd5cntHEOWUP{FWYb;)mwK`;b?%!iU+Qwr zs(lYh(X;4UeMCl_r78~}kp*WNF8pnPvmA=tIwDEW@lml6Qumy5BJ6t3*5A=N#_-)q zlDiG+?A?DI#nU$$IE2U;sd}B{#(GY|&(j9Okk(0R#qK$m=N7xa!dV$i>U>NvMkbu+ z0DA@!DUonwPQ9{En-Jr4!s#hj$H<%Wn6)ED?q4T77$bQu(4WqeLY@EmWoHWviVWDJ zOK{_}6Srf;p_0#Iq%V@zcQG>gf-Spy(ql#*>5j=^)sTmKb&K&U?3=ml{G;9+*_%!D z?XgK0DMDchzQ_l*%#y6TXq#Y7dQ8e+vISV*ACtD1Y*E(A$K~NAD!$!uW4Zt9`}HkDf9hHfG*&DSR0_wjq%oiQ%K)PT!Cr`Q2EFKaNWW zBtqXJp@U&;h%hAY>ekQxrjzb)^o;!W`L~~+vNbRybESvd`wRmhyuX7TvX-Ak67X~&jlXuejov{+Lh|&HvXK~-w z55LKDJT_+SIax+p#{ndCF?MXWhyR|ecdEonTsbFKRQod|)Uvh>=e$2Xc2kL13HS4c zWsSYwButjp^Y7T0H0LGoDrxf|q4^K9Eo<2z`L{h{CB8G$jxTgSL+g=KhsDO!Ixmr= zb+j@i_WvD~HgaCg@v#zp&dVy*J_d;tXb-J;c>U~g>w3jXw7Y7Il9NTAFAuW*b%~J| zRFK_Su%-7^d3O~@I}8aOn;tU;k3ZP|coIWG`|jDRQt=wSfNfm!Ye-JHW*oGp{l$7E zUy5~XX&LiD`FUsJe_bBmu%)uGu5x|=tCH0mgN|j}jmbXu!lKbP2RGK^I&+Mfe!?&A z{GFer^_F$lZJ{4VziVv2{Zj%sOtU7wDc|0}0U8$g$dDU2Y}ZNK)1QpYzrVk3ZoRt; zi<7yz0ye~hthH`Q#y|0W&u&Z7o2biwM@Ia~ur}_4;#$N8>q{W1M+(O}wmVvV^C!)? zZx3i#f;`Nv($3{FMkW4rL$v266+5?+VdwVht#(`Ao#0>uJDnR=_DCsiF#!LM`f$BW zy+b2xyDu?!SR|Wk(WCdpc9*iAyKfAlX)VIONnK_%XTq*!0IRp^NLU};mmzm;QK1PR z8K<|Lt~>K zWLf@165q$tO;4oweRSnw{=4U34eg5|Ga0Doeyl)Tn1QoK9#_S_<Q35-p=lz&81b7&Fuhz-eC z4=Y%JP&@iH1ur{S#^FS+1iFv1n5WZ{?=jn**UzQuV_Q(w;J=O9Jl7=YvVlh%v$W`| zg$UvcZBfSRCiWG^T4Z&D_4VC`zKFT=LaM&SHHGlKJLmT%tT|swOgwfG1z$?Q6Y6~G zOQUK|IifHAux`&hXQerN;|ZIuo;Q4Y5=Dr%jOw!#bY0sCzKo zdea@gBaQmA8W(zH&EY7(cZ-5~qNB|i$o^Hi)pgg4MU5*CI+r%etS)Q_C*NGpY~KDI zOda=cl}wnST(3o@h_)aijSz|VGZ(#|*|L2z!IYJw9`@AnX7l&}kKH%(Sl2a1^ZCRJ zd25m63GCkS%5ahQxy}1SGa7a56R#Q({fNjP{?_m?8TysU_SgLYPiOAVrD+#plB0B0 zqVw%~3|?=HXy>ukU=klut!8)8&w}K9Iq7e@$1xIVc}w>!Id#j<(mFr#%?PcksdOYH z;zhi(NR_{B-v81?J}-tNZc|LH{&DxW4)3W%H@m9}Qc3U&n}56yMflbtZC_w`b&H#G z;rTe~P}S_2U+E`R&2iMuBD0YAP*}#sK#N>Sz@V6Dk%yXi9*K1|6khqt4|l3%)oD$4 z611|}+wHXG7K;>qiJoH?3H-+HBM~qEb)0-QDn7KB^@2qbzarDSWU9w>iOxNn7`8r< z@!mK{zn%2lBE?@Zd)VFFoJ%mD!TYCd4_kaawoHC*G725mjBXO~&gPXih~Lz5b1v`C zc}rl5sOC3fWoc5m^om~ip(YEviN|XkXdHcqK~)ZI+IM>7%5g6;d+OV!He%|yNw}tM zg+wYO7Cr4TG;B&b{aA?ZNDA<2Mq<=;bSNIVG`e4*q-I*mHOWnuk=C&ai4;hjxZC~g z_0&~Xni6!fUHoMq)qV~MZIJ%+cBeRR<8Nylt%<~AGp#*EmyNTgm2tImKEAwTmB4?f zljK$jNQC>r<9^okGWH)^err4H#4)tJF_Kbg%igufJ56c!TgUNuM$1?VKI=B8?C{=Z z?ns)$&w44I+;>MwDVs#S!QM(XqrMVdD|ENQ__4;YaZWhl#CTAWcs0BKd~=dRzXqlK z5_@UGqoj32AffZ=tSRoHX*Z2{WJ=&YKQhrY+6+uX&7#C*FRg`Oz&mNM4_R#hZQZAY%R8|1!ok zyG*QQ_jfgzt4UqeV$M2d6Z=g3+n(Ar`r|YDP4DWd6ST{pei$1r9iN9TM?e=e%jYcD zTlGvXS!9^_KJ=q63m)q{zdHDxXBSBmOI3G!sx2G}7=63;am5d(LZtB)_V;gPXMGw+dC{}**txdmd2~7AHO{nVWMt*t%uem))-v+U)H8&X-uG zCyeKsspB@wYV(j?@$EtXBH`+GrgL_1X76-j!!jqdtelY{pElTJ$1xGN)bCi<6|*foS*-Q2ZouqI0`tC+<6<975Pj}ljg zrW*ft$&HE05>s{0+p^bP6BAC2nO-U-j2#nSX)~8H)B4aeC`&;(_m|r7`-ag)E1TuS z|HUyaGlY%)?+8g@xZU0_p61%wU;)cF*Y?U7MLv!)Na#coI5}OmyCu>Gnr*;gy zxznCOZn9BB)1^B)kwP8zi3PK3R1FqA{8xvq9o;#xRJ0yUArXn}K8}+}>WSLB`lD;z zJ6`6DnLCo7JA|*gZI^qJ!ihilr>{6mhmCHOl5A?#b#rXFykVee5Z%aClb>~`*kz+% z+-aR(PxZBy@RE8->^`pH;vLUiT6Cx ze%v3mV@WQ#lG^jeW1TIHlG?rfdZ9%-_3#|WQqK#i5@c#A=z5D2j|I1^L^7VPuMZ@( z$1aW!c*&cj_KF`&b)52XbDs6N7cSC&rQ4XrPF>EA2Fyw(eUnitS7BsTGCKz)K5{W7 z?m3C?BoBKKe{7m>n|n)fPrJk1wmZnv*%jB0q;^w57h1Cb_+$mCw4jP5xgThQv={uWXp(D-kKMG|mS7 zUv~z{n3A1^>HWO_e^W=<6OY}IkYK1m#AyTv^NG%JaQ+XwthXGO)$PYk{I2} zC#rk6>%8`5rpCsM@t1e0>^`B(kpQHX(BQmF)r0lQW=!z7CcSq4GK-_U5M(4;rL4j#^rHrS)Dxk*>I2-dwIYw@I*@HvB)E$-1&^?k+OM9w~vq;x7 zgU^0y0Go`T8t{9GfM&V4;KUBqeV@+MN^*W&)Z+XVfRqW0n_|+AA13ho+V2P$0?r>0 z@U;%iAX|OxU;nKFL(uu71}O^}H<`SQ*WK+ZhbA7-xf18WuG}Ncn03>3oVj>&uCw8d zG{%o3SaW5O>HfIkO8j1z_MNd8%DJsM)^KR-_hp)8kr*VbKV^{xzV?d$B5A&Y*F{&{ z>I^kO5*=XAhsRi)nq|x{StpT${GA#XUTT7*@S|y*zXswdwf*crSchek6@GNmf79yb zTrgQL4vC!nQ*cDA`Q97l4QX8kwXV%Bc^nitCc9DK1eJSt?~v_b$=DR8h332T+;%2p z^R2ktaA2X++KSd!8>F(-d72)9+F-J%5_g$I&vc zv9g%5yV0XDwMOlAIu7T@3e02LfBB3o|Z4{y&^~#z-KenZ(XR_dtR-j0lqo7SI^Mj zyJph&p7}24mx3AWY5V1-Fe)~2z5gn&p{p`|Yu@+Vv_5OK!;jCF=3bp#<&w3IcG^{N zbPY4UK*EA^<}588*uacmb*X#G5~chOL~yTL&$j8uc=g@cW=)v>MH8)N>!SZr3h(mBC)D@fMtx znm?#O$YHl0N#8x~XB_ek?;BQZe1`d*-f*w^zMprQg5Ek_2phyeb>7T zXywtg+=UG5q}b;If` zc1IN{+uxpBigmZQ<)<9%o+&$YYSy_~M3ZKXI<;z)t7WUEO`Ao?>R$Gg8>~I-Kk(PH j``e4jtWNf1vZK2_zHI1iFSSAX+IPBbxZU5L?85&8bLc>p diff --git a/package.json b/package.json index 4d40051..298a22c 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dependencies": { "@heroicons/react": "^2.1.1", "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-switch": "^1.0.3", "@sentry/browser": "^7.101.0", "@tanstack/react-query": "^5.20.5", diff --git a/src/components/Homescreen/Homescreen.tsx b/src/components/Homescreen/Homescreen.tsx index ab1834e..804e8d0 100644 --- a/src/components/Homescreen/Homescreen.tsx +++ b/src/components/Homescreen/Homescreen.tsx @@ -13,7 +13,6 @@ import ImageFadeIn from "../ui/ImageFadeIn"; const Homescreen = () => { const { data: settings, isPending, toggleSidebarSetting } = useSettings(); const { activeBg } = useRandomBackground(); - const isSidebarOpen = settings?.sidebar?.isOpen; useKeyPress(hotkeys.backslash, () => toggleSidebarSetting("isOpen")); @@ -23,6 +22,9 @@ const Homescreen = () => { return <>; } + const bgImage = activeBg.src; + // const bgImage = `http://localhost:3000/api/background?theme=${settings?.background.theme}`; + return ( <> @@ -33,7 +35,7 @@ const Homescreen = () => { /> { title="Edit Preferences" className="max-w-xl" > -

+
{!!settings && ( -
+
+ {}} + /> + + ), + }, { label: "Sidebar", content: ( @@ -44,6 +60,7 @@ const SettingsModal = () => { key={"sidebar" + row.title} title={row.title} description={row.description} + type="Switch" isActive={settings.sidebar[row.setting]} onClick={() => { toggleSidebarSetting(row.setting); @@ -61,6 +78,7 @@ const SettingsModal = () => { { @@ -75,7 +93,7 @@ const SettingsModal = () => { />
)} -
+
); diff --git a/src/components/Modals/SettingsModal/partials/rows.ts b/src/components/Modals/SettingsModal/partials/rows.ts index 8368414..b56dbc5 100644 --- a/src/components/Modals/SettingsModal/partials/rows.ts +++ b/src/components/Modals/SettingsModal/partials/rows.ts @@ -1,9 +1,15 @@ import { + BackgroundSettings, HomescreenSettings, SidebarSettings, } from "@/src/services/settings/types"; type SettingsRows = { + background: { + setting: keyof BackgroundSettings; + title: string; + description: string; + }[]; sidebar: { setting: keyof SidebarSettings; title: string; @@ -17,6 +23,13 @@ type SettingsRows = { }; export const rows: SettingsRows = { + background: [ + { + setting: "theme", + title: "Background theme", + description: "Pick a snazzy theme", + }, + ], sidebar: [ { setting: "showInfoWidget", diff --git a/src/components/ui/Select.tsx b/src/components/ui/Select.tsx new file mode 100644 index 0000000..955f4fb --- /dev/null +++ b/src/components/ui/Select.tsx @@ -0,0 +1,171 @@ +"use client"; + +import { + CheckIcon, + ChevronDownIcon, + ChevronUpIcon, +} from "@heroicons/react/24/solid"; +import * as SelectPrimitive from "@radix-ui/react-select"; +import * as React from "react"; + +import { cn } from "@/src/utils"; + +const Select = SelectPrimitive.Root; + +const SelectGroup = SelectPrimitive.Group; + +const SelectValue = SelectPrimitive.Value; + +type ClassName = { + className?: string; +}; + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & ClassName +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1", + className + )} + {...props} + > + {children} + + + + +)); +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + ClassName +>(({ className, ...props }, ref) => ( + + + +)); +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName; + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + ClassName +>(({ className, ...props }, ref) => ( + + + +)); +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName; + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + ClassName & { position?: string } +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + + {children} + + + + +)); +SelectContent.displayName = SelectPrimitive.Content.displayName; + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & ClassName +>(({ className, ...props }, ref) => ( + +)); +SelectLabel.displayName = SelectPrimitive.Label.displayName; + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & ClassName +>(({ className, children, ...props }, ref) => ( + + + + + + + + {children} + +)); +SelectItem.displayName = SelectPrimitive.Item.displayName; + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & ClassName +>(({ className, ...props }, ref) => ( + +)); +SelectSeparator.displayName = SelectPrimitive.Separator.displayName; + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +}; diff --git a/src/hooks/useBackground.ts b/src/hooks/useBackground.ts new file mode 100644 index 0000000..aa1f9a1 --- /dev/null +++ b/src/hooks/useBackground.ts @@ -0,0 +1,31 @@ +import { useQuery } from "@tanstack/react-query"; + +import { useSettings } from "./useSettings"; +import { getBackground } from "../services/background/getBackground"; + +export const useBackground = () => { + const { data: settings } = useSettings(); + + const { + isPending, + isError, + data: backgroundImage, + } = useQuery({ + queryFn: async () => await getBackground(settings?.background.theme), + enabled: !!settings, + queryKey: ["background", settings?.background.theme], + // + refetchOnWindowFocus: false, + refetchOnReconnect: false, + staleTime: 12 * 60 * 60 * 1000, // 12 hours + gcTime: 12 * 60 * 60 * 1000, // 12 hours + }); + + // TODO: Handle error state with a fallback image + + return { + isPending, + isError, + backgroundImage, + }; +}; diff --git a/src/hooks/useSettings.ts b/src/hooks/useSettings.ts index d7a754e..b4a93d5 100644 --- a/src/hooks/useSettings.ts +++ b/src/hooks/useSettings.ts @@ -44,6 +44,7 @@ export const useSettings = () => { }); }; + // TODO: Refactor, toggleSidebarSetting and toggleHomescreenSettings contain too much duplication. const toggleHomescreenSetting = async (key: keyof HomescreenSettings) => { if (!data) { return; @@ -58,6 +59,8 @@ export const useSettings = () => { }); }; + // TODO: Add function to mutate background settings + const resetDefaultSettings = async () => { await editMutation.mutateAsync(defaultSettings); }; diff --git a/src/manifest.ts b/src/manifest.ts index 8c24ebe..1e4e15a 100755 --- a/src/manifest.ts +++ b/src/manifest.ts @@ -40,7 +40,14 @@ const manifest: Manifest.WebExtensionManifest = { }, manifest_version: 3, name: "UpTab", - permissions: ["storage", "geolocation", "bookmarks"], + permissions: [ + "storage", + "geolocation", + "bookmarks", + "http://localhost:*", + "http://uptab.vercel.app/", + "https://uptab.vercel.app/", + ], version: pkg.version, web_accessible_resources: [ { diff --git a/src/pages/newtab/Newtab.tsx b/src/pages/newtab/Newtab.tsx index 7e2b781..3662417 100644 --- a/src/pages/newtab/Newtab.tsx +++ b/src/pages/newtab/Newtab.tsx @@ -3,7 +3,13 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import Homescreen from "@/src/components/Homescreen/Homescreen"; import { useEasterEggs } from "@/src/hooks/useEasterEggs"; -const queryClient = new QueryClient(); +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + gcTime: Infinity, + }, + }, +}); export default function Newtab() { useEasterEggs(); diff --git a/src/services/background/getBackground.ts b/src/services/background/getBackground.ts new file mode 100644 index 0000000..e7d3e03 --- /dev/null +++ b/src/services/background/getBackground.ts @@ -0,0 +1,25 @@ +// const apiUrl = "https://uptab.vercel.app/api/background"; +const apiUrl = "http://localhost:3000/api/background"; + +export const getBackground = async (theme?: string) => { + try { + const url = theme ? `${apiUrl}?theme=${theme}` : apiUrl; + + const response = await fetch(url, { + mode: "cors", + headers: { + "Uptab-Api-Key": import.meta.env.UPTAB_API_KEY ?? "", + }, + }); + + console.log(response); + + const image = await response.json(); + + console.log(image); + + return image; + } catch (error) { + throw new Error(`Unable to get an image from the backend: ${error}`); + } +}; diff --git a/src/services/background/types.ts b/src/services/background/types.ts new file mode 100644 index 0000000..c0d482d --- /dev/null +++ b/src/services/background/types.ts @@ -0,0 +1,8 @@ +export const bgThemes = { + holland: "holland", + abstract: "abstract", + underwater: "underwater", + safari: "safari", +} as const; + +export type BgTheme = (typeof bgThemes)[keyof typeof bgThemes]; diff --git a/src/services/settings/defaultSettings.ts b/src/services/settings/defaultSettings.ts index 1baffa2..73c6e43 100644 --- a/src/services/settings/defaultSettings.ts +++ b/src/services/settings/defaultSettings.ts @@ -1,4 +1,5 @@ import { Settings } from "./types"; +import { bgThemes } from "../background/types"; export const defaultSettings: Settings = { sidebar: { @@ -12,4 +13,7 @@ export const defaultSettings: Settings = { showFeedbackPrompt: true, showInfoWidget: true, }, + background: { + theme: bgThemes.holland, + }, }; diff --git a/src/services/settings/types.ts b/src/services/settings/types.ts index 5992479..0155ae3 100644 --- a/src/services/settings/types.ts +++ b/src/services/settings/types.ts @@ -1,3 +1,5 @@ +import { BgTheme } from "../background/types"; + export type SidebarSettings = { showShortlinks: boolean; showBookmarks: boolean; @@ -11,7 +13,12 @@ export type HomescreenSettings = { showInfoWidget: boolean; }; +export type BackgroundSettings = { + theme: BgTheme; +}; + export type Settings = { + background: BackgroundSettings; sidebar: SidebarSettings; homescreen: HomescreenSettings; };