From ea2fc9f23fca5771c9fdf2c23b91c98a47cef176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 19 Jul 2024 01:06:29 +0200 Subject: [PATCH] ShadCN setup --- bun.lockb | Bin 293283 -> 295303 bytes packages/webui/@/lib/utils.ts | 6 +++ packages/webui/components.json | 17 ++++++ packages/webui/package.json | 7 ++- packages/webui/src/index.css | 66 +++++++++++++++++++++++ packages/webui/tailwind.config.js | 86 ++++++++++++++++++++++++++---- 6 files changed, 170 insertions(+), 12 deletions(-) create mode 100644 packages/webui/@/lib/utils.ts create mode 100644 packages/webui/components.json diff --git a/bun.lockb b/bun.lockb index 5ee83fb3f014faa7284eb7f56a2c919e83475539..8a200fcb0904422001199de5f9cb48ed379f9a87 100755 GIT binary patch delta 36938 zcmeIb2UHZ<+67u&4N9vRQ4uj<)=>mhK+zU+&Jm2Ls3@QU225bafT`4@jEPaloC7#! z3}epDDCV5w%sA?(^Y-pK1wjy#HNDuq&$rKa@~Km&x~r*WzvP-UF856L zvQ6Wgd+)mO`kh~ zT4HJhC`ukhi7nnyQL=)=0~IAdxMyT!aAZ$K=>(hc0|!J#K~olYQWQtnD)cP$4+G;UO^GPBZG$ohet(51PAr% z6%sKpCP=SPtsaV!ONmipgTkZ3f}(o%jU3!FA}BIg2}G+|@W7CWps3(TC2TmWqbOC; zN>(7MZ*Vy4=qBy*VD?BOq{{^sCcP)TV6!Lvdn-yoaA|M>@Fy_!+~B-gSk8hm6;XBe zQABW9a4%GEJBnvtmV!=3)q6&v29-h-B^&G%F!gehU1igUchKWA_t$HJ@rsHb7_21p zQZ{B3phHLLz^IA6is9_8|hSz$Z9xuty<5A+RGd&H)Y^&|?_8z!a`m-2|N# zd51~Eiaga0WXbQa}VCW@bh& zOouyb?T@B2d1WvQEd^#}bAg#%*TGs~*1|FEhRW^+Q@%PxciRXq4|@?fH@Hx=o}D9@ z6I20n_`Hyg*`murLr|3x7`%+S|jvoRscJ}E(k`xF|iH^u=Cc8)aQwD zB;*{WCtOih@6_Okhyf85f`@sH*8L_Sp6%NQn-$6xqbS9|J^KcQVqBCHuvwA5L6H@D zhX(aA3LceDPrm}rj*3>;E=!CZvSJr)7^8C{m~E>*Rzr*~oj*coT$W#}w8htxBHIX5Ow(et?rW;r#d>VEEE+rc~x z5$vo0Odbx#kdUZg&fKNb^a5Xl*}{kcp`n8ZDoV#0dW))q*&{`yoe5k3_M_>FQW$&) zTmrltTogP}>OH~5Vb=l|!$8FrLjdbqtXcB?cs+w7VCrkYENBLpJuw#S2o8?yF*qc& zmoi4^)3`r4AM|#TYf3IF*$K>Psem~RpUp%6GjJIJ@*&BaBrlX4Cpk)T5STsHT(Y0! zGLrLwITUu1-^|tRTar&pcIb%3lr0L53=Ij7Qj~*B6s08W6<~JZB*|sLEHD&I|6PfC zkF_L5s(z4s6U>QlLGrbgdMOvcoN33Pb4Koy{CbsMo6z7P;hazpVKe@slGY45KC)TWxGtcZn1V8_4)fz{IY}I+Ph%Z!*{)2zY1U;8E#3R<^hpql*TW`k1dLWPwf{Wy8a3}-Y0%n1MTlHi7HMlVB zn_y;8qKMwG=%7%ni&08saM+OG2u1NjJfdQgw(G-K3U*%Day^W7hMgUDpWyJw=GPd@U4e#mYB({Cd5oZx!qZxmsABg2jsL)s>v!9EdrA7|y_TV3s^*x3(sad(5@{dUWCez2$?W zq6T8bmEd6mv3rSBiX7A@UUo27)6Xe-1zv&K;yaQrfjLCSz#PhGFnhWam{Vn7P()<# z;E2%3;P76|e~<20Fm{G?3=Xc)J0v19YP_`H9MK}2>KEIr`^63p9~gqOyRt&s3DPY* zMN4%m74zn}K10Jo!h$RG>Y+S@&Ef||vM@!tdP1*O{gZmNtAbhGdtmxq1+$tSl1oc| zeoAkCkJEbpUxm$y(r3UxTQizN$4tx<+Y9yKA#(SOo>A%E#W9 z&51J%UCWo(c`Y?>;h6tsA>@JZU#^2OvH#nJ&^Vk_Ui!q_zeZ0(*m9!3Dvb){5i@ z$j}A$Ny%HmTxeH-S)l|l2Ye$c%mL4F7u*biL`v6P>tYL`ouaW3Pz;!MFugMa_H-{<{_;8wlHZ3;e9u4;>&vrBh$ zNS--1|AZHDH?)qWJ9ck9`KJwqJ2uWT{A!V$Cwo?i{waIa@Z5QuH2OAg(i4{nyZgV- z72N-GlyUvIyBwdU^8-5d4HT5NK=)Z3p=Z75UOasK3mKXtHcpKbrXvAwpgO=!{~ z+u>qAw-T+2Z3q_GKgFMS(^|R>)Q-COIvi3Sw|Nua=bPEZiaNKs(dlld>#~`*hM$msl-p zA=b8Ka=Vs~1OrrD|@YeJqz?)q-WOA+>$J zE{alDE9B*82}GzK^c-3ciaOdwbD3(jle(SKURsD7mG{IShrB&g|PHo+?x5QfAr82 z)>$p#Jr$)DTolc%vX5mSEN@t-Ul$+CZ?MYSlDnaxy1n!^nY6^Uz78yt-zAmiBT9?Xxmgxv_#B93dD0Nth7S!BF?bKUKonuuu^wtvQSS?O{ z^flgyVYR%3=m#;kc6*zzLkKQJZ3Y_?0m~m2<^xinfTdR&vqQD-r=^axs{Z{n zmr+*rR6i{c7Ujm=w7YA<}%umyEj7k!*%hWY*3NeHR0!7sW3861;rh{o9;oEwcn%i(SHWw(mb2nFTFZ(K z_I?8}f3z+G{VYQfs)P8fT4HM-%UM`nurSFw_^9eYEn$q+;yuuq$rvI_Z&)3fp@wmG z*em0N>6yucS*tGwYN=z;>Oq>zSgZZ&L5k8qD>T;6{uM&iwd-U2)bbHp>e$hiz7dLo zNrsGW*YHt~M`#J-td`t32iAaS)^6AKv2=vR{>)^X*t22DvGMm&k3?z-rg4bc)N zTJ1xJqUW?O5!D?KXk@Dz$2jXSefVut%2FQ|qLDF=$~~~yeVFIoJ{I?AeJQ~-#lkWG zR!v(ju+$CFT0)%F@(>~$m{q&o*vH~ETyK)TEcAxOd1f0qOCqc$hNs$igqAwlYMD4f z?-7*O)R$M>`l73r+O1UyM*STj(=FO>LpZlaZ1k z%UFb}B2{h_b6{U|&OF<~u7AmbN zN;g|*Vp`}vLVAkYbBx$Tg!CGGK&S&#SX#|ZJDM8#sA8^`u+(ZlU*NFN7A^I&e}GU^ zTgYp^5gMHqI-VBFw}5@Z6x|VOXbY`M3%yDU`6d{#v1y^BX`!6o8nGSILQ4^2ZR1IHAWPS-?Z=}2toqxMVGQa4#GKSOK<7ggixTIM@_fyBCn zRcsKf7J6RTLG6cy*@zuf?q&K>j6)k|=H{@{b^-R|Vfkx|y!|YP5YksF&eGiY_+qP7 zZM<9y+=`vxa(#WYXhBtcEGe+6p&U%g2p_e`3e9DkRc*aO3*2V4Y+RAHl2-Gv+=azs z%(j@>7yKRzj&{A8pQS%SoozZ-#UEkShlPC!wgrwWbxS{$w}Hh)2Q7rBCaugor`kV& zh2z`b&r)oaUL$mzzmI)qSUAPi@>A!p(gKsL7Sn2Ug}KR?TM zhTvg4x2UgIYYE9#%QtKEp2F~X`=~){Y{NGXA{(z)?<_1fP+w6U*6IoL!LdpU1C6ye z3YHfZ6`muet2Ds<}64fxE31u|ZMVA`TTqkNpZuuOQN?!A6So#d4ReZZXV{ny$HM9e)?zYtD5wfl5mU27v zwqrBs@8d8K7SFF~=L2>34%?pW11QC6?~`QPJz&+3N62YnPUA z*s5mTt)+q*?ABb4SnVD6a0xDS#82(MM@xXP1Oj?3!q4(ELRD>L^7!@MtM3?bddJ93 zgQXu8x9eaZ1*@yg6PtW{k9|fj%|xiRt-tOd)QUSWwbFhq^{7?tyI*rTHrn!ZzoJw? zN(U|ITOW(Z0X_X`&bfSv6~QwA-@KzmY(h)b|r`P$&4ytN$Uhl zuaX-&VJ<9AUknPaW=_HKgoS+_n(`TzK493fSgc3%TyT=b!ZQ+Nl$kln z;s8NU$~D;fqwb7V%FD-L2rTwO+WfM74~6qpZ`d_hJdn|_XdgBEQ7!e1)xrO$e$|zp zC=?2_LCq`SGA`Z1j`SofS#xxIwqyDM08i|s{9(yB?8;(cS#7znqI+T0)brfxqkcN3 zxtzD!*FVnL#2w9Ogjh4%6_~o|xR!d}s(w7Kxm>WSRZnPv7p#_nC-nT#gV@7ufW@hi ziKh?yhp_y$>pxaEozwy^TJ0B{v~8Mj5%>}zy%rpy3a5+_qSYtOVvdRF7OupV)B4;& z$Dt2~!|JHF1tWVN77t^+)rHR(y~TDmht<*+$KCv5SX`TN_#@9}u=M$n80TYO>MSfS z^_K1k>4SuY&VC*(txzRD`;!P&*1A;kvnc0`GPs0#z^ap0ek`oouq;~Qbe!N|>GKl@ ziE2KtC0xN~4xa~thMd=2QmvNF=k?660$21k!6VgbU*H1HzuKZyKl{E2HM51br-jsu zhSnl2v=E^tHou1mHL`^~E*YWdv`~sIROniD(@$F9wVHTOu)U|+-d(QOwELOYcPx5H zT4+yN$nLTc+XSI{Houu^p-X8Ymn$+>?RG^Ayk%AAT+tFhAFgPrx2%?)sm9vDL0S!~ zF1pNicC>tg)zH?R?A)$b^;4L>$4Q380mKo5i}_!#YJqpGmd@8Q93+5AeytT`l2()xPOn9IL#vSFhaFTpn80fO}dXXz4vI z;i1)X_nxBo*pl*-6qoy&%Ok7W{Js|W$ZA=2U;o4l+X$@D&tcWKdAdFHQENTe>hkyp zOH3I>Q9hdRRXF$)-tvL-sEUF=B`@D3+kp$fHiKQI{=Z=+DU3JfQ%vSlQpLx@d?Ap= ztVk(o|2w8%Y538#tn~j9J0RXu#*>-OOL8SuFJGwyfj(96mKj`~#^0DNuL+$Q_)D%O z{r(*@U0vx%X0X1r>&F;@{{ge$2GWnrj2nZgH<8>_#*?Wx1KWdJgBjJ9Zy7j-LM8}- zU}o4wI*=LchBs!^UFu}oL16m#k~*1su;kuSCv(jEN&9acV~b$I{?dWW8V{7ruSNOF z$n+lqofU|dext#3jl~<|$Iy^Wdn{}=G*0R|WBfA;tm!oAK+Xkw5tx%`1=s@K0A_|8 z!F*+8>YJdm0o!H#mzeQCFrM?z7Lc43d{`#@cg&U_l?9!W{$w`boV3ZT(0OT-8N7%$ z`dtRw=05|>@G6)Iu7UZ=$keaP_!}~w%-}6)lj(O`+8LSBUA$!hKbL+lc>J^A*D^sy zW=3zM<1b*k{DwFBzoQ|UE%_+zjLh_(q)yHT+k(XG`s`rN1t+sS{+%H3xGxB1LRT)hb40yCT~9p_3%GLQSk(k9byiL}XP5ueMH zKZa9arHo!BqyIO|`mT}b$Sh{9w8@;ao25;r|5h;lwwdM06am}o-!T(xmwsg0JHX5^ zS=u{gJel!7fO(7@kovze4kq@%VK~s|sC4`ivn8ixJef!31uzS`DEShY75Z876>tvN zkHGYQ4(2P3c`z}97cwFvv%p`WGsCx%-$_3*^$*g{$kabVXL=Q_!&@?+JCg57 z|BTGJ_Yyic^Y-@g9B0q!+JygOj`@F4FuO7n((#D2fSE;hnGc!qIV9(ldPZiaI6=<| zjwvA>{x6wBR!Xm6W2H0#tkE};E6NIy>F6o#jLeo-mO7b!-rHxHrv7uyhMvIdpKG>% zuGx6)#sll0YqpHnYCJkHoQA%Xm%4^YTB}Z2w%dWxQ77 zK|`CTCV#&DjVb+e&GzMMw|}nL{<&uR|J5~H(v|$CU;Fxpcm00(s0+{HFXk_}FtSz~9Vi^|rbXt|TeHUAt@Qrq@2X6gSfS1z z&z1|vF(zkGZ?~z5sgjtr+tfiE9biiF+aVPJm#)4?;~5G7rKd3a92ls3i&r2=gaG=t7S= zV)Z@<4JScx+z+9i2-pwd9fds<8VJh)2&>{CgdKp;NbIE0aWaHLDG-{7kQ4|GQy`p5 zF*UH~+Sp8ltb>?LvE)H`wGe|2Lg+iylucYbXliO|CEN}{aGnN_35Vd(Mx3K?ltPum z5ZZ|`han7$hj5=l2jO`HZ)K)Kn0o|5fS5G_!et5*=0oTtZqp-f288(K5W0wS%OLp9 zq{lJ{-9*{t5FSyuPmdr`^+yQvXF*u>qp6A7(Nu@E}WfiPh#g#O|j z1&6s1s*HmWCdQ0|kWAq|g#p5IJcPdUAj};PVUV~@!C644HvvMVc+5UJN}<_A2!q9f zi4ca(hwzEQP|;`-gfa^tte*rSTD+%l8A8)Hwel#L=goim+d6^qmw_EC0;t#pXmNyH$L3viQDwFA79#@y?T{ zO|_VYbCQ=hmu+9`aE(kmn%Dnh;A0WL5Qp&|)_0t+OhJ7cEr5qUuZt!g^H)OH zLt&Y)%!SZ!6@;+45LSqt6y8xN#C2$;7{qmG)oKWr1ccSXZ9asKYam?bfxK3fT>!yh zErj?55Y~$;6p|^_;Ci@GOinO$Fl`c5zXfd;vq)RSW71YpYawWxSU}n?UXyl+MvFj6 zB9W9V-jjBUR*OMDh}EQB!n6dmTLh5yh|Q$E!m<>!PXv+ni=CtcB3B}+Gk*)JGdK~| zIVcWLXt)(Z$?qT>7K6Tn@Q%VI3O@=rEJdcH!gB@an3zmDE^d=fh^pU%PKsHiQ{pk{ zw5YWbbVe*7ofWT1=R_kMBBt}=J?VmIwHkC$tR|r=*MNQ!0i>VBX3}M0Sqr)%f=H=i zC+Vulwa(PWp3BlTaR4i|>AEPe9&|$tBHa|nNVkOB2GDI0O}Zn_k?xAJ8$tKP7}9-l zh4espZUQ|NlSz-nZPH^=bu;LRm_>Rj9+RGlT3bNR#R8B>K7j7A--hmaDOzoV{z|MS zy%whJpf@6b^o!U``c+tVfPND}q_<)x>35MU3G_~cklu>}qz|G%GUyL6i1bk$BYhHX zJ3*gCH0e)q4x}ooDEEV@y=qd$ShA{$RI*tWUc10{s+dBySH&H$cy|mHZgvzE&MX!j zMGICPhwzDlMKn4Fq2mb%>yJUmD&A9YI0>Q4aR`oL^>H?ug5wDYIYht-2z^gM*h3+g zu$+Y8d>TU7NeFqwP6|gU6gmYVuLwB>Vb~c6rzqqX1x`aKa~8s=(+~=XV-zk^sBi{C zK@oihLfknB*C`YdWzRzJJr5!NEQBKB3WY}$YMg`MCMKVQF#iIC=M;*Is^=jzya-{@ zc?c!NV+!vmG`j$yv{-Nf!m3LUK2azu8eN3Y@h1rDFGBc6yrk#6vLZ~UOP0|=w;K?o4XC|ssc;XZ^;BKkgrxQ7s~Q|KbfK7io+2txb= z2;IaL3Xdq%cnBd#OnwMq{$mKwDfARoA3H3hyX1dkmqESnwFas;3Y> zQ3w%@ocm|>G3wZ2#29H6) z@*INmO9)}lAw-Iu6pm6T^a8?Q5%L1UuvZXHQ5Y%;yo6BZHH1+wAw-K~6fRS!@Cw2R z5&a56+#3kjDU1?jUqkTy1w#C52r=Rcg+~->yn!%AOnw7l{;v?8Qy3?z{sN)lZx9y! z0%3x9OyM1cX1_w1Bo_P%Vbxm*pD0WgjedjB@plO8e}gbpyrXYK0qk* z5yGes5Eh7I6fRS!@CSr%Mf4vK;yyvRPGONK`w@cgX9)2hAuJJBC_JK2;}e8LG5HgO z`F}!qPGOm-`q|WBZbKE_@fr3C@tF2I*v+oXe{ zss(gN%px5Yk4Z;Ftt_A)#RAe%@tSl@G|I|mI-(itv!WR%#Cr-3+1b!+5Kf8J+1OAD zj*bw{hyX{VJS#Sn&IwC)(0LI=x*&FvE{a?^K$k=a=_hf3^s^|C6LeV&B3%*3NU6dt z7wD>pCS4QfNY_Q#+@Kp`4C$u00uqm$P=OkGP=VWGavlit^Fnw|;jXCa1fgL*2#cH` z+!v22yra-8FNB9;L0$-}@ixyr#{4x=@(=t^NJu~_L zgeFeH*V`%Ss*s7>Q>uItC{r9)QG}=!+Z_9ptxT9ljeEw`;0(@)`e;rDte} zd%sA<_C@oU4N2a0)oNz@8TesIPCW-U&)HVZr0$K?GUj}?dMdUXE|m;*THH)MZju#F zY^LrrIU4_vVeB1zDbLmxHzjp$t+w?4*B<*cc1dMM9x{>-REcSxE1H6ICD#_ z9`pH6{Y7no{Mu`%?viHHOqCaM3DSq(uwR$jx6t^>1Mxy?OQavagm(q_S}HZ(@-dLk zyz3@Wio6|#chvCpoz!^0ka3&OGHCd--Az_r`mK-}?>4L?wUsh0Z{x@-wN+B%-8;M= ziTSLyX}Gn8#w`%>XS`V7Am^c>gR#7vMYtcF5UQrqoiTRt)wnsU4JBaoC%rc1UU^VDFIH zVX2jbog}p*QY!`f2YJ_@@}m?>L&QOAd+`ooc1RgupDroKq*fO8DuA>5xYWuaJRRWc zgw(!4n0fMb5*q&ae<74xn3$aKr+Ir7#R|Y}Ia|*{V8QMHZ`Ug^p1m5xHvnI}Kbi&m z0l!ed>!#GIBmApPL03wx2J9D7u8Wa37!`$&y9f3psaf$mZ>ZUAor`##2<6OT88 zbM0sfTtJxR+wSaU;%2~ORG*V93z%ASU=G3@|EyALfiMpvzOqTJCBpXs4uhlAS|Pkj z_DpuEwT4y-S{-l>-gV3PHb5CE=7b|E%U{nb3jn^HWa4%R#{%r3yi#kA@Nj@Vluv3M z5Do|U$}hE!2=nM*%blU&PYGcAE23bw(zty+5MdtEe7VZRoe*9FKenil)H)+v2^w2e zSZZAmZUv1EDguoS=?YYb##eD@%(@%!Ezp+zUs5LSj_^W&FWx)PG(o^(3V4;4S`UPm zQoyT>)OsS!%JIef?U}Y0z$1mPa?n_CFu+5ay}|qLW9Zl$;PFebf=tYb#nuIY-KEwS z;b3TNWksoRTQ^8*yn&zj^#h_9z{^u={Sj^ejlJO|wNTE#u@Jfgm82Mk@G_tWP+4jm z%Q^sGRirim;kq^jxAsYGAZ#u$Y^9IX1|d8Y1+!AVQj0*C!#;?MdsQh$LS%~>Sxsub zJl60k@lj-dqLvaKPgLi!{P7I8NW%c$6Wj`D4YUC|00BTC&`At>qIUD-j_4)u8h8Wz z0{ja62D}A+2i^hife*kR;`tMGlKW`nJ{;ifk7aq0YP`5BH#gd0$u>OR+Ry7 zpd`>5)oKIeKsYCm3&;)R0h|DCyYd0~flug39tOw2$AOaoZ-(Cm><0D#dx3psrJU{O z2z_Am144l?fLpGCKm;%t7y=9vZqL<%G2A?HS2Y$G2aE?M026^YU@|ZTmVueA=v6QWynsr8JHTJi@J8QU0Pof2jpVa|xd3mS-UaZM>QrDIumRW%YylPni2!dd z=Z=K8QeQ)UH-WprJ>Wj@0KiTp#`b%n52(Z+0B@mx41NOe9QO?1DU65FE1)b;4k!;) z1bCl^6{rdD{{0kWdJs4SEC*Hq-vj);#ui`)kOV9RwgZPvSU}eyupZb1Ou}r7111B! z(I^2pg5LTO;Pz!EPz(hZ2TB0GKvkd`;0OEwzx_aIgo^-qfjoc{&>U%704;%5Kx?24 z=U`i)9nc==0CWTbfIy%V&>83gbOpKr-GLyW2hbDf1yl#DKuy3Os0Gvp>Hu|tdO&@k z0niX=1T+SkH^Ey|pc&8&wfq6#W}Tb!eLxCu2;f!17QhXD#ehx-o56NKJA@|#O;pkR zwVGaHjcw0&9O6-6HXJly7Q)q$*b0;cxEU#B z7H{6Dfz|k1gX6$S;4p9mNP+(fWOxgHClKZdtR}+T;vWZi#w=$R6Ms=h=i+Y?&H?9v zgYZ2q^8TuJi#Z3k5isij^^iOo_D3Y^3xohsz)+wc^i_!e4#{r;+`wN2?n1u@d;@S} zz8*fR4HH?>6t{(9j)a7X6% z2x%SzEF&XW#vC!`H?@y&c&qwW_yqsYz@GpwWlVqym;pP0+ok8oho{PuqS;%uVlM6- zxcyHBc(Obr;@_$@?RnC@D$c!COBdu`o(UMs0$YBBfLHlkW|8BG>SjL)Vt7)G-_<6W zWBMa52;jsGgWeU)iOC7c0Yb}dt8x`ES7>JF1zZ6p19O2nz-2%K#sTp_9KdoW0%L(# zfLoo>z({~2Ih>QKEUYKc0|)~00jxw#pf%7Ga0HqFje+a{ zr*K1{0Z<>P2Uvj`05^hF0QOF0E?yVVHGVLv0nC`6##99}6Cc3n#<~dC23RotenUF` z#K#}toMgos0gP(})?gqchM6;6^YI+zx09v;jH-0YH18 zgS5MYy8>N+ZjyV0`vV~Wdy?Ew@(}PqfJ1Eb@&JTm!tutPVkE!>g8;*UHVcjb=)(kq z0cH{naOmi3U=+gg!z>%|)&nCi&Vva6=LfIfm>xqNV@p6MMotFe08Wx=09!>0m;p=&jKY}t>^H8(_gk0%rU@ zumV^PECap+=u5wqKuus5kOZs-iUO;E^}t$S4Zu0J4v6u^+Xi40z{x^;Bd`tF3Ty_p z0Na5bz)m0;_yO1l>;Xn$(jJrc5%7-y3p)fH1X6�R0aD`vH~#JH{q5;;=5*_6kgV zRN6c;x&rK-7=S&MK7M+u&q6x|gaO8|v77ZV)_oX9?F=voU~h$U{EY}^Y(#JjGiF2| z7XJ5we};AeV7xI;E+Wi=X#WIUl3;;GSsKDG0B>e`4QK|W0vQjVjNz+@doKN+fu90T zfXBci;34n;xDVU|?gDp!+rTa0CU66|4sf$=2bh5v?!Zle0{n@{&%h_(Bk%|C0eBC* z1AYhI0>1&j0>1!nfY-n);3dEvybDkU;O>HRBR|*;ah_lgpd`ZF*5%{)kAMR=qVB*^ zge!nc0sK^fI}2X;H$Vb@lEi(Z8{ma-5pYp}dqZc$=LBa3cvR#7X9su*kp-{-ysTh6 zE67T*EJuF&lnX*`pag_N0Bdj5nzdxjc_^`>OvH^Sw*kDKaR!(v!>mwYpb$_Ha0N;L z#U+eg_cyS)3uh0Nj=>uvjBPo)hY5HITnStmV2!H*RRQjneaNU#UBDZl&V5)7fIDdJ z%NWlz^?|lPJ%F1(f8Yw@_5nOpW4IHn1Jnj68en7_Xv~1U!4G(vBHUW~F}@YTJZ!lJ z{0OWET0(09Gy@s{Ow$-(Wf}nufhIt6V7CeX(S?h{Mqn?%!dL-j*cs>w&}JbSE7K8v z9e_ZfJ&;)x%52Ub6M&!*#Zh4xDbqBLB&QkuICZ)JoF<(CBRh6B_daYh{pe#W0?hn4 zozjX$m`8MXFsdG7>jZX8KL{a!(K&1bd!L|QuH?BeVpx*&b0w(~TVB>&Ezyx445D9%C zFaTg>_}YN*I=~+B5#T`p{aJaC(vx$U33YemNY;4mOAW--@o z&y?q3aSC#Jo&!z;r=-TIdIsUM0OKx5oxV7k*!KRn5xxc71a1J=RS}-mT&n$DgjoaP zF~ZM)C%}DxHuZ<#2f!m~8`@K8KbPD+7p}?hdOJVqb5?VEFE8U6OUA#RFJ|iM;qK#( z?}dz~E*bxf9x-0-p6;H)wXWF}-~A7;nhUfv9^ACX;+mtJd*L&1s_gFR2YJle_l zKliqbD|`65dl(Oa%H1t~NrxoIDTwiQ_pF369RtK(tJzs~4G@>DW-n7Ik+r6|Qgh?6 zR>uF(x7DOF>u5Z5%y=LGVm#eZf1HZ&fpk_JeU0B83$=f_tZh!yVtgE(2a0Ik#r(we zB`kdD6+6r|59SSzY=PoCdKga}@=(%wxcr1+(&xs=_>~pc6e5<8fvIYl}Z|oG@fJV!V;o z6X%#fVeMvib~PTD*5dua?Yr%IB)|i0rbl?7i0EeSt-cHpsol&?#hO5~%h#$4_r;yW ztw8iDl9lOh_EML05uLlk-r7YB>5k;qre+s+WP``o^RPWE4Iakx8f>{^USmhoTMUdqxA^xKuUeV&74}e!2do*-cz|yu z+u$j>kF#i97d>x0J+1ZK@B7c`u@N_=;t=wx#d$ejw zj-P(YG*C5d!51MpQ76O0cxu`Y!A|Gha=iL%YbOpXESvpAPJeSbbyGi4-5+yg6TX=! zgp|eu-bOh4eF&MJI}%Y;ChwrN1}A2@?&= z1rCSPUV&YWC&pPC7VP-8dF7+F5wGHo@4ib# z32Qxcs_~4ux7l*tPkL2g89aD6RZiK8;P3bXuoxNPYp0>nr5z5kJ>tyL(uErDfx?XwZ-h8RcWaR1N?&*z%*l4n>*T2bI z@6)_R(7nd91Q%|ZI?XeieJ*4tm#~5(#K0z~K!p+FT5oWz5n_20b5mF25svvj7pu2# zeQ6lSYZ0&C(ZjZ{xXyZ^P$} zb;|O6aa;G;mfEkMTKA0>>zbjA6f8YBF?{W;hC?}5j9AT= znRY0Oha0Bzi5StNxw*G@;u!rHS?kvEyAKooEFnFR(FVluobl{kkL%s?I8;Uq&nk$i zK305gjt07p6R|D8WyXo>I75iWEpWCn#G&Iv_i(dQrpg$i@#93xp>RY`oJIogIpc6a zjjWI7`;a$Fj@OrvHMU0d+=v)1JJohhZTm;wUR%;*PL30Rbcb3v+O@#L2zb!R z`Wc=XTPIs3LR;Z%W@O>jQ-2hi@q8p?fn|<8ub)rz*;P>-qeaKom>B=_^~qS5F2{-N zZO{o%;zXG?Us{Yj(w3b6yy(eHMavFYNaTu@zPtt2$2|J_ifPm+bAK_sEzZC)y^Y)A zJo}$hdJPr%+L^nit?ST(aCR{qAK(D8d_7I!^8W2 zJU+|9l+F}&zE|k!U(|FD<3XBROWJkucr+nTdQ7qDVmi~>p1p~*Q)hfym{dI1lXMT` z>74JnE*M>T;qgDyVIT;bjcb+wzPFE$76&svoy ze}muCJ&dP#dN)0}BXRb&;ps7D=82I=>uNmi?z`2a`@L`|c|P5v`8=_Sxf@Rkb;xD? zCfPLSWV(m(EYYKxTZ;OR!cx*>;^v9ZOlv%SG(~yQpwwg4Ki$K4KIzqQz3Y3!x*7Z>#S;lksd zf$1@2g*eT$#)DNI^Vfa6c*Bq%(>;twudb~h(j}s1>4oVr{e^JtVs>^mo>6!%F=wGe zWgfRMJVen@vs2Q#p5{Q4x^A&>2*$CneX*z>jALWpV$q)VvBhFaFs{0c2atZdpv2y0 z+R9(`#hiPrn~O!Z-tc_7Sorf)|6#Fk9}KoE5mC@xjR&N9g>L=j_?fN1~tcP#8h^-rCotikk-|B&}(~_hUbdB-g?ZIyX}e>^_blUt1f<^vbT@9 zn(MAa+nwRD*0@&Rz3&z}5}rI6a>KJsIQ2C@lADtR*PYAt>-_n1{107B?ue@aT;1^6 zOhKO8La^ii2oDz=xq9#9ErKoQm=(G-zUIY(jn5u!AhSm^zg;0*`(c-4Jl!=Y#qDr| z`2~K1M`dISk83N%;(q8dgD+S#+8@5wfLR#wJr5Vgb1Uj4qZ6GU5$Uq=j> zefWTX1BdBoH{dhaWZnX?OLiR#uH&rY%S8bX1_+`(qpP^5;s^Q z<7u`N8(Ety`!(*9?!ld6)FzQT9MfUUCjDYu-{3f9;%6ZGF38#2c;s!i+4b7y8h;t{ z!nl|=9*SGzh(nn+4nJ;BkEy>|YzW7gA-|83v6;`QYaCPcm%~9jIudP5OnZvR5d=-If>Y)S7O|oR&s;7|~F*V~(&3Ws*foSa4w|8S{c5_vxdAgfQ zuEukJkGSUfyy$Tb9(i(e`Fg8pJqQ!Xc;fGX(OSJLE6bfq_jop3Eam3c*bEyRSz}YI zcL(niG@374{7gn!L965h-rEt}R>oa^{f=~35 zg?}U}oscX}4>5a*X_4l!s_RaXlPl3Oes-}K3}Zns#>{QmRdASctmStW2Z7afL`^pyZV^5VCu-Ysq*2o@y&C<1dNHlKVbKqkX7OV(R>t&K-PUnnd_?e4kT?DWllAzol?Z6vB;rUie5(8 zp=G0M-niUKHI3#2mPNyZ-w+(DnR;?>+_&4{!9vi<<7G^<1$%w&W|@XH zPA-DVj1=)1xr-99I5rbfgnukDS^;-{fKageFSEvX%GXk6gxYSFG5tDK4BT_U4j(%3 zM2@8bkLVWDnf93U_;zG@`}+rfzfBK)HMxWso)gBma0stHZb6_ehMNH8PKvmOwCbxA z5jzh2IYs0ggC=J`sDJFBvB^hvRQ zB6`!~r0|%G-ZY+K{%m87M5pcTcrDGr!>HCjDY8#W_Z0qk zE7;?-*nmjyub2PzB9X^Or2UU|_i{}=Bai)Gf2ta@c3?+#v_7%#o)M$beJVP9{$$iA z@|-wH8wcux$+)ujI-k^ciW&d6W9c*zIu#N6CBL(JYpz%d+xyL2z2hFvi+Yn-^X)EP z3gHsp%R~9nMX4T>Z=QI;v}JJFng`?WQ9GeqQl=cZ_&3si>7rCmi;L3g)6nQIU6kq` zQS-z=czDMlcPHfT{NaOV>*LA8RDqEt`2X`a~2w1;Hca=FV?GEKdkn4b1a7o~by zT$E;uN6o%;QL1}53E>Y9@3I2lBBN%lt!KY+EtG3zdhTDkDAm)p6Jk1Z?=RDacK`0r zpJwf>m7aEt5GnB(!W&n_Td;TXetl=WrdQb1m2-+0&dE!=Djb^Xsrq8;TR!U5?iEhh zYaqt<@qYbO(RDgTxoxT#HXTQ(@yz=Bm&^9QS$$rf^uwawRdEZRu3yiq*)`!b1NFh_ zrQr-ysm$$J8#3>Q$wDf8=oHIeO)x2i8i!` z2S44tTW9*@!>60gP4^gZUBtq}J02cI;4$L6MU97bxPo3cYPL?s+^p8zyY1^b1JYwo zTos8NPt(_rlj=TC{x$MOJ=q3Hmhu}=)>yGc6Jro>muCq|Hzkl?W zew{M)u4oAl?>WdLH*#;Wth&=R*Yi&49^WH|M_2MUQDd`hEZQwSX6Ie87-?0R$G<7X z@16*sje69-r{~o_^_R<2KlQ;r*0_?od`}dGhxgZO`t=x@yZ5~NdK*@6&7FMUOtIeS zxqm%vr3Yd+$}RDA5B~*boJsHvUP98l+2)+41{Ztir<<$oMlA2JwrGKyu(=T!lfPZ| zKb|ixRwE#^S;SuPoIE`&x^7ik#WZ&Pjddm@js$)-yCH zGP1&upooy5@SedHf(A$R9S{)`72P``C@eUlLfC+)kOASL19}BT_N{>bIxx6rNUz`u z5y3${qeQFc=3+&ofcJH&RQ!Tkfd`b2 zdsLs{)*7~38;Xt`Su`X(5~W6n+k4Hf!nw4ak0qq%fSvt*S5O3$x67B5TE@=Jl%+>Vc*Tg|$N`~4Sf|1(KG~U)@|CkY zsEWpU?Fxy2j&=o;u9UZHZ4zxA?egcsKUfH6BYIUpNrS_}BgG(hJ10@o-EObrfFAvV zdq!12&xP~}7oXhi?umu3&9%jA)vmE96l|BzR9S4kWG*g>X1B{Gj%By=6-ylL3eYSl z?6cbq7i%5uY6?>hyV4>iJJOWNVOK)fd)RF#ZuE)XpBXwy7b@VW6|;7l-IAt1H?K2` zj-8NW*IahEMt^NCnRMf|xs~dfVUUnP#xbjaod@rTVF!1`mwY%>*}-DjOS7+V|JD45 z$e-KJ!{=+00=a!H3OW1OD#jeL3%fPuVo7CxGq1}kHfKWb{%Nv1B3i$}0L}2SvrqCj z+hsP1R(5v3iGo(U>`622?G9zOaD@8t|7GAGaG47wh2^kYql%(A;omg3-CZ@QPhPv` a4oRa5+kNXG3VYgR5@(q9M-RJe4gVj}vE^9+ delta 35512 zcmeHwcR&?K-}T@!sHh;IfEqC>*u@rg)xkpSMzLbU zE=EnPvBlVXY($NwYHZ&*yR$&@nCE?;_j|wZuiWHt=6B{deRgK{vbdAR6clF|rw^Ha>GIfv@oKbt-GP@pJcqv*=c4fQa8}3C>fxKI!)My# zV?rZC`-UjWwnB^^!&WTV$Z_P3q1jxTTyBx#2}Cl!iDaN@*da~2}^<>qJaG1 z$U(h_v(i_3C`wV-H=(nl=d_SKMT>t4i^ax)3xn&TDQHQ;qh4A{o{I75y^Ydy_Ay&! zv~~vES-a=Znfwu$t-KCqWsZWGU6D|u5)trct($^bshVK=UlrIUjtL`5B^Y5 z;uG2Of}&V$c=r<`>~c1MY&^zH?ya zn+|5L#e~KViWnBE?2J&9(y%vzb1CskLT?1n&k1oMkq9Zu`A8$f?omdCR#rB;J2WO{ zP>grz@Q()>{>^3lL)ffv@L)wL3%&t67r4)WkcffE&oA1j@PLq5?|u;>{mlxFLigs@ z3cI`)e-tI=L5f0X9yuqNOL?IFel6(@MC@Wm)0L?jKvw)>=JW|`$1;~zt(k(L7#|N6oG3A z0$ZGaw2@&1m=!w$W`Z;@d%^u`z=p zB8Fmoij6aR;`LagCvSpF#>4Sz1laO5;8NfT;PT*5uqU{Y)XRg*!B)X#!FR?Ov+0oJ zRbZx{B<+D<4q0n3d!{~^Lpyj-><}yj%J@X|KZU4}s6k%ODY42s~7Bh~yTMt4ppR*-i56DYyohFk_0*l@}x*lAJ1eF_=Rz zUGk@r!z6c zVKG`39yTP5etjcw9pV!bgEbHzSM&_$Kxk}4SQM_f`^kz@0rtm75#Xd*E4c-jT{RQT z1UD8NljsxJoTRfK*HCm3VuQZzT7&`m)j^x5$7^Oyp4vS*5a>Hi)bD2(s&1<-C zXy{;UXStP2GU4e(+E1vKU$j=dV5#_SYmI8O0dp7|fLV~5!OX8e z*d1Ia&1mQ6usvbVgFiWAhrTq$C!9rqjuR2V(G8bec9+r6wy=vr&$Zhqc*Gzq8~6;4 z2^}&dEHq|l)ZmDr{llW_?=k!Wz#Q)%k)E^ZG?*3I0cJThkRL1Df6$=bp)uOM_ln0W z`;8=r!5qq=Lxv1y5uw9T2v)872aE~o4|YR*Sum?w2+Y38A^AnRQRT;Aj%_j+eV-5y zX1;?%Vq!yw#ze%1M(J(1W%!jy*diT6L%sWj#l#L-E$t$QwFQM5mOXFyC7`KcI7ul- zrM*wO%}&?U!WH9-95rTUWLRXVci-MhZrCh7I#$s?Z(*}q;m3?>cL#HdxgIzC-oj=z z+evOF+3keU{E1-p;9K}}>h&KqSZ_uQbWG9r5+I0QTpIDIk~J__)M4O~;4WaMuMI8{ zk3e|_z`4N1!B3Gf`2v^)9|f~Q`@ozs=TKozg{rpUCuOx4j z{>Q-YLEm);={Q$*Kp=PgeoIEt8FtOR++f#_6TjO~s#DWk+T?OU+L3aeo6A?S1Xc1| zd8)*Np})UMcf2?r+NSTgO`)f}s<+y?KR)Tzt-4)$2Ks{}3y_S$$OMtOs=GdYWo=m>3ovt|3y<5mP z#~w9z9rMBYo|4wt>qMzkrr#k11nw)Whe6(s%%!D{ zci201HCzg6sbd}L@~&D2TpmCSgo{;+ZsD+(>ZT~|j9f-L)VbZXl&MbjMmH^Es?%Pq zyQ0)H;`|-WQlwNi3RQfWx*HR!wdF;9&cGgz7`jtv&nLVXxCmQT$=4T69N;8q-V5nBi1cfj)Dp z&wFWJGo7}O5JhREdCv^CtwyM(_V}}4_4^PlW9DePXKzKp{|Sob=X9uJduu7Poc3c- z*bP?AufD@xppVfFIkZ$?hrKB*+3j^4>gYaN%5102juot~wtjZ7y(vOQCqF|cPl5Fj zGD4T52fyj7rD#r@18XlDq6Mq5p_=0Up+#@haM<6#`b4*)(YZr$+s7WUXwL#2_It4E>giIaI_&RcEJW3G*b7A{N=sN)I$9z$uXv~HMQHt?3BM&4Uu{VhSGzM3J));cbvo=LU~#78 zWPhtSBDL`OPJ4kU!v)i)p2HRetEsj=AlSYGA&wtLAAMAOkfH<`8O1p4-C;2!jBO2v zZ6U0Ww8&|}wigK1(?i_{qbdy94F_nM?rSSH+{`lyp_+PZ3PO56sUC4!#zd!@9H*sBblRWB zq4)JlKCA1n*BD_~ik8|k$Q4FIMCp^%_5hZ@<~<_VUi?#IU~+5GogMa%VR23w7j`nN zE}Hk8VB7Bq)zCv7N22O_XgNaY^*O=zD+pCbDt&FU6&j@|jj5~MMrkR_o%T5pd=ZV- zVgwJ3(lQ`c7>z4GQye*33t!>1Uxp~JhyaILEMCi4;Z!@sYhEjzwpsCOV@P-i`qk*PHpuPAMG zEeWCSdgxb#!t_v&3AokKL;DdjVm&6}O9EXRhft^R1p6sN7sG+edXa^$iTv4#XqCED> zXjtttt#hzGhUKE4dg?6B+>aVN)ESGl@Xb#9ONeX{x)FPJ^CiZviz;DjoC~X!o*DO@ z?_o98hd6MlF%Vd&v1P`<3WS&5MB8dub+pHU!S)9TaSp)?%?n(nrEGPoQOmT9txo%z zWyYp!*HWut&xXa0z-klYQ0p((QnoqOVav6QZBF~S<(bX&ncF(_E)5`$b|wAQ?X zgYBOo)D0OJ1O5XnuEWMD&2Oc-D)Z#`2`st&_&Mxp(#okHvU08B;=jI5u)QHd#>ilf z+7fi#yI!!mXO)(*0}JaH=n1_zjJquomM^PeOGXG8phA}zf``5psD)Q+Ub~$3R;!JU zQg~2NCqTsT?Sjan^ns#y#j5tdC%!5g3hp zDMk+&`)fm3U35=BKZlx;qGjxH+6S&RdIa@A@>Ez(-6eIDL;Z2Bma^BW2CmaG_B!pm z*BK{VR1VY6eZ6@_a2aU5UQ5~MRB@Ke*ypt0MI5^XmqJ^Ix^06Nz8@#h4O$9l%tkE( zbb6!amF~2c+N3Bg^y)tQ)L|P4D@NaNe@7@t4=qmRX8m|UO_$A>@47S#p@t0EFCb*h z70fET+ZJ=~(P{)M09of?C2XI<>ZPat4I$%H&~mHMbmJ1A1FJdw^)rHcbE|$VFSSj} zIOw!>-NutBPfV!@>E{f!^mZ-fkkfX1JFB(+P_V6e8u~{MEkURuL-u!)0Ux*2pNfz5vqqoxZA+N`o>Pp>uaZ4WtSEX8n{bK`Pymo+s&kZAZ4@&_L@@mI@TKF-iI&Ghpa%{9c|9(aBM)s~+^eTtF9V}*uGj0`!{To=u z^yTDpPdCeetC!F>U2aI(9VvxhW0u~opW4U?)i_->HcZWUjOJgSEszGKW zq=j}2a@hC5VhBdr`XHXn5IA&0##EKXtM5*y?SLtaoVbR$TQ!99rm8KV4Pp(bcZ z*+b?)@t&eLEari^fMsF{EF&FDyO#)XGDu&Ab4>|NrBKI+~WNw1Pk7*g_owmIY>*@C>?;SU*!u_QUEMstJ zP0h5J?cpp7H$vr47_$bQhn@CwSe^7HU>|h-4OVklSAJw+%$TVFNUUjCF>1iHz!9jy9) zs=^8=oS=3sdLgznSappmRB@>9pVqvtIMtq~wQ$ga(^|?Er~UkCBSUP?aIu}yyskQJ zwa#G6)x56;+omDZLJwWa3{^a9YO$H2bcC8|>#x_eoYOL{*Tzq;8~hor|4g}2+vQvA z>3T-PGeZY5L%GhIv278;7X>JKL1ySyW~kD4X6zt@8t8soGea*jL(U5_RvmXi%eduK zcU;iCZadXd7q#%)PTQo5T=KjJ)O1DQBXp3y8QRNSGS>laNn>Gk(L0Z$c@-AN4;K#Z zSllmb8F!ragv;44SKq7VjW93X*|2&cfpIDS1gl4;)%sd?YXhuqnQ^(U8^s#w`oiLr zGps$ZI%HY}Z)CRyz-pHnx93k*ft$t&%*drTEH+xdySMLx<%ETmG}xg&zo}*1cd9jS zX&GHK$_4O?+<$+Tjbz92-9lEV~J#^Z0-cb~Xo;0v&R*=k= zjgx-anH3%{buxn!@q_+Tq@JBw-gM|l7q85a4%wL*er7l*Gi5xP!P(L#(@&FjcBV8J zKXQQ=OTQ&x7QCF1nT+wLz>HQ%UJ0hp7x=*hDKsRrMH^)NCaGs<`fri?yO`x{mGR^} zC|^lOfL(nU%*l0JI*@b1J_}~Tb5bX>W!Jzg@Ftj1xA{Xd{qIPd%!=O!b8h?uX8g}! zmahj)E{K4Qx&HrQz5IV$AnW2PE0mp!LN6`#|2Z4w|1V_3{`$``bXEez3r9lDkX4zi_qvok9&QR-v{6Q%twW`0wo-*o9mwsZc^ zlLDEJLfT{o7f5}f)X5y8#Zq4)_5Xy~fMralCBG~h&x?MI%!SO@wP4m}oz(w3O#k)L zpGUeCUi=! z17?jIf>~fA$&JBzV7CL)zXO;<+FjZ`!T4Y4gCC{AW5G;6jw1H}8ThwM-$_P-cXD3D z&yn$D7BE-ZWcJtsY5$pVeEqXv*vw#|OzKUo|Q_M>bscnhY`lXTU7&9GIVXG2_q6c(AeiP+-Ib zFspe{+Lt9?1@n`gIS=nc=O*%6#{cJRl>dK`0ju>ts{kANCLT3s*ICfd?CKo+A(;+2 zVUt~@o}Jm~JkSe(J!JfU%JKhcg6#ervQn~wrNOLFImz$K3X$noS=!kd4KJd6C?m*p z^Z{G8T+5jB&z+euHU7CX%YH|O8KU2*an}5EXZFvXnT@L_KK~Ec*c<*`#wcLZ2#PuVHqm;uXko?JBwL<86c+5u{0CU$6E4=y9imT3ctCQj$-vV z2y^E`s3vYv=rkTegLx1fV%9tet`i{qN};-_D7SAXQmzoJ=)3?zr9=pODKrrFg%B=Mh+GJvk#JiC zVe%9RLl;44A`VapnhK#pGK6L#?sEtaC|vs-LJLuOF@&UP5T-AN&`MmQ(0IBfkEprC z(%jNUBrbvQd^$WHFM&r}QGF?d)iWR@FNM%vJfzU+GYBn~LFg#vFT)SlnGjx6=q#En zhp>af`sEP1iWd|H%!1H;1%&Qm%?b$avmxYN38AOxyb{6@3VSJp2>U7s!!-zzt043d zJ1JC}1EJ&>5JE-R7Z5H|I7y+uD7G5Hn~e~Le-2?Ag>k~N2|}gC5JERWm>^OqT%=Gq6~ZJDk_ut+5(tMWBnr395Q3IM z7`hq4RB?d90}2(kK$tF~w?If*2H`w~&qSH65E?IsFkvf%S>gQ1wC zw4{o#y`atF0BMUTwhy#bM3c6OqonPk%zjXsh$HO~XGl9m<#f<4F^05TTq5leeg{B% zMIvdRxJBA8s(%Se7qdtQ#6yr6z74z2hMq79pHW7b&cy$JgT7 zL8Lq)nj8Wh6-!CS#0%1K(dIDdgjhp5DJ)-sz7d^Cr$j30w6K2-IwL|zXT?s^IpKB$ z^sNXZofij4--%*JK^H_cNWEwg$BtS$sFy6F>@o0Vix@$^Vi9M_S1rQpIQW`Hj0Ib+ zix*>&`i5vT4s=tjA>9%dw9ax{>_nR^cZAzS(Dx#YbXOc8-4n$of$odA$)E?~4C$e$ zoCwMgV@N-UOQc7_ZwlzKNCb(bgXo~gQ_w*_it1CLKNYh`&&0#27-K#R@spU(G5%RR zBmE+pOb7icmXdxGFG#nz7k!+&+Ne<|7)HnGg>YGzMq%ipegcjdGu#5TM zKnOYs;WdTaqRA-;4=AiZ1tG6^K_TfIgu0)GkYB7h4WaQV2zk#ya1))+KzL4JFNODn z{Vaslry)e1g-}@Rq|oUMgp%hV6cu6TAh@1|aFRkXQS4g?J1C6$7D5Sel)`{>5WLSr zC@JF3Lva5V!Ziw|Mdj}x9HB7%I|yaOB?`mOL#TBDLOGFm0YatkAUvi}K~%p8;Ub0P zixA!y4=GH(0HMVt2$jYBOAvxCLU>K#1JUF%ga;JXUxwfWjqN z5Gvh*@R&jaQT+~tixiUYKxiZ$QkZ-jLW}PqG!gT^hY)lJ!fOi6M3cJ^9#B|+7eWj1 zfAXd^n`hwz-jUJ7l6{Q-p4_aH<*fY4s-q|oU;gpv;- zbQEC^@x%22gp(9Hi((lNc2F3V0imlnN@2i52;M(H=q}=ZfZ(11;TnaWqVgjMM<`5x z1R+FRqA>gi2(=zV=pzyzL#Xr!!ea`dqWTjE7bzq^fzV$(q%iq0gcd(qnyF!`SXxeP zCPpp6l@jy>@@vRAA2fLizXuf7KZOt}UQkH-5yzu$&u}~%B-T8G(D*4l^8N&mXwms6 z2+t|(r4TFZKSNmk3_|435Qd7K6gvF`q2w4{;u35z z+ybGN6~c0nXoXNoh47fdN>SYf!bJ+nE)c#D4=GHxLTF)wutv~_#r5klG~c9OOWw_Kn! z5k}e}4v=<=V!1)PL^Nr)I7-?h%H#p<6>+3};tXlOsGJv+F2;}!h)bj|gs5mC1Q=%|%e5I77N2D!ZcsM~a{V)7?>lTjCOh;YA_TDhA<>NaT#E#3}KZ!d+3l zIE0H7l8ZyQFCJ2uTujZI)}n;^fxFmLPOXW*(sWVxbxu3xQ0KYO5D5XQtBwEkPwuqn zX6k;`&YS1X!|}wTI8#;~N1wdrKX`Lv1Rgj^J5xvPY7rybAl(&w#h#mfwe`HZwT1RJ z0S`l@&1#~?TPT(>|7n+ViN@cI^XoD5Px%W^VY%=Rbx3TjkZ-)^*m2B zQeD-{DdL;5YCQ_Y%ztvDPehncc&zdL-O6?N)n?jB2Rc$ueg1vS<iC?p@Qc+Q&R!^a{m{G|{d^az1SeU;2G zAHw~mBcGdOL-|Zkg!Ef2HU6@Gkkr;ljnBu%$+Y~99)o-eF+pnUq2Yi269`It1u1Tn ziTQlZ`%>eBm@K$3P*rNFQsZ+H?U@Tco52k7_f%b_#)mPP)*YxTwQW)>2JNgdbn(h| zDHex#4&WzEY9$cHr_J@x9$iEK zd&0b7Xv$vcSO)e@sqK?mS=gJTwqI)HU~iXNy41?UPLtXJsa1fzOKM+Ats?Bb9DjZe zO7VS!_v?zH9Fkfk*sB4~FFw-Bo~sPZ0QmVzYF-F4JwIPV!~e<$03Uzhj6W*14-vj3 zCu=;PiDib~z!{7&uYwa&^FjEA9QTtlaTRF1O!<7*De32nFrVS#Rd8BrehB}8w4Cv0 zq~?$C3}~F7@)_KC{zDSV94YcaTvjFkFn`JQt<n5aCHu`%Y?j_(>TH zaFSh+S`fmn%ov}GQmc;ePx65w<&qR@K>V3r_*|A+Fv7p+3MQV^YQlaZwX0IA1^Y)p zpLkNk-ykSI0HuNJQmc*dZJ-QrgU=kWVs!v_1j>SMO06!!;~9w$S4{@%0iIIh}!|{oOn;5ah+%eOhA|)7u1;bZw}nzqmrCt{G~X>7Qi%wIsQ4M z))L{NGI36+wSsmR;4ttPv5w0Y)+DUh81b{tMKx*v~#;JpU`>(i3tpmbQ06zt#))C=}s5D#t9yI*Vzj#rqpkOw#i1h1> z@|BUYbw#Dv1zHLm*&=tTbw#);G`6Ui)Vd+u1{zyb92y(a9jFP7pHk46bq`=6z(#t? zv^^1C1h9Oij1+qz{5b`D%1SK+;UyICDJQkw2(u#ml$Tl`ggG4ia8F^ueSs+mus67; zuwJ3SG^thM_*3i$uyyRB%F>aOEfgAC=_R!R2uDlp1F3~U8^TQR`A}-%2seVp-td;% zK!nEvY`KrrBG~@r5JG?|QjA2nKERK!)HuE$=?ea2MQVd!^KUHJN`I*hM)(sH%t~>` zWWAyRjyvN5q!zgS-g?}A0AWz zEAR%{^a1(;p+G;NKfn`J7!d9v_B~a5)Z%HXBhVS>0(1lF0CjHzR1a0u88Yyq|c z+kovr8o=k@djh?IzCb9@9~c0HTk&XoBmz;uU?3WZ0b+q6z))Zq@QEn-lUgD^0l_iA zSYRB$1&oVRX@Hj)uP9y_yb?I`G1K*l&56uO$_dE%#`(qh#QDSd!ufF@ZRbkN+0YJX z4|D+VU8T|q=&a&O?t%c1S}lQEfD@<<)B$+hst0@oGyoa`r2$WXe{bavR0RTnA^`s? z?YTu%{8{}io`0w1jdAw^J^(5L{PPw*NNNZ8q%R*@o&rn<_)IRJ3g)xAXMq*KDqsze z0?Y&E1AKs)XAVA^`z;!I0k{HO1+D?t0UR~r^*;_;hXQ#>Z zxY#BGiNF%rvw^SBTVDe_pG*cmK}CiGaX>rR?ST$JM_?EH(gFUFh!b!C)qp_272rOV z3&;)R0rJMiFpa@VD;MTycfJ=V~zyl}=lmhsdNWTKV0lx#! zffv9Zz)Rp2@EUjnyal+tSb&x)epmq)pa3GmfPp{+5Cud7u|Oyg0`N4&!&4rBC-2=r z4j>44WfA>;Q!mH!ncbW~J|I6(0B{2e0`CEZfWkl#peW!D6a$I_C4e*x-P}e)a_W*BMcssHIIDnpSX~iDQzqD8ktUyCIfrAh+72zqsOgPR0jzK#D zOhNoqU>3riz+Hg40FNNoRFUhs+NDN13jPu}1ndR&(T4v@{&!4NK-T0WrQQ#PG5WWe*`-R#wejHprg;^hHfaH8q_ZMW*3kU%sfI+}&#PRul zp6k!RJ_pQ&?>wLp!aRzvhtD4fljng0k>>=2XCOQWm<#YUJqh?2*ki%LItYP5$Rq~n z4&)VO{!m+a^D%iI>G=3O^ScSRTL8n^!7`?a2u?fCmI_k7LA|muhVrciHLU@k{mn;-4YN1dL^QL7d(A z{E}Pvyi&{B8Ey?dEUo=3wOP*ieu(Y{aJ{S!9gC;Fn6?Jj0Jt8ifG=PHI2_l3^}xqK z51>1+4(J9n2RZ;ecd?vSKr^5z&=}yUqXF;{fN2)51R%i5`T_oc1E>a2C$kY`4muBR ztfZMH7~vW~U7!v?zgmD9PrEkY1n5KmdI0li2sGe&MrWc4AirwS$;^Z;XbG@oEdVBD zh3P~e#<3^ZVz#n9z=lwx&DOS+;dWrgbpbj9o#OGMBVZQB%)4f@S0c<>F9TKqD}bc{ zTe%outJo`_1MDHT%p4L{lKIjn97qQG0KI__fPV4W9r{Da?$8T%Pk=t`LUKQVr_R0r zGhyXuhe?}h1^`n47Hs-6-$6hW5D7#813CV5reiEH82A+vGzJ_EBmxtFp@1ha1Q-Df z2Y8Ac2E+lQfKP$Z0Ot$sk-%7B48UGa0LB5lVVnd^1SWI*rz0>G7=?ltfoabH<^n8i zHZTjA2}}bR{~0g?U?H?kXfn+7OuJCp^TG3gBtQTQq%Bx8cHc^XU73A+*(=L|B|!FZ z;`rLJAoZQ8n7MM25bek0Gols zz$oAla1FQ$Tmdcvmw=1F1>ig2Jn${2+BpQy0%w5Jz$xGx;3RMYI1U^Gjsi!3uK@*X z-dpe+pa{Trahm=HJOlCqPk|qSd;lx;7?dFokRSL3pvLh0c>H(`@LqBl_yzDB z_#Jo!)CT?lUP_y*eqo>-z&j#d9|gf>5dR_g1E2!J1;8x)Q^b2A%sZze2y=HX1Mv3W z6CBT5bao5B^C=0z1Mo+b4d8tb?|&H23bIlx%oSlC zvGM}tVIKlmd9%`}WV~MU39_b4lphXmKq25gfSEGP3Kav~0iOSh0=z#cB~by)Tg!?- zd4N4s7NAa>%-*3tZ)APIRrn7-u*TH@-dOMk!yn*;;aGEwsaFShI1B_F0OOgaF3<|7 z1Jne9f%S-+4$J{~bK?YR0n|(|t|hd(@%X{+(7&ERxP^42Lvw^RFxSDkzzCojw5C8~ zpdQc&XaKM>ymP7#Gz6LeQ{X=n7zuEVWMx?a<~JXh2gFlgA$o1#z{<1*e+;w-+5qO5 z=7wKR#B*Zti-~rKGkrNs3?nL2?5>GD91X zy&~0-X;)}$4SR(>6^d|Q!0atHio?NfH;14P!dx4AfqMWvD!zRi|Mu;Ah`h#o%7{W> zI`#&K04#`wu-lli*;6KSp&kIA{y+f2Re=rwSNOWX4d~Z^uYs?CkD;{zS_3V4{Wk@o z5HS!42Ur1YN4elNWW}fFLJ<@GM~csKXXS zZU$0;O~6JnJWhf+;W!&l07ro%Qsc}#hVXHKaoc%cs<-vX&kJK7I}#e?RlhMg@CL zU)(V*?-axY`uJ7#@m0)sA9cJQbFR;pN!Ro=zCI3Yz@0>okF5T9tZvpv)~aG;b8B%A z^OZ~=-&r+qPVbE!R7($EAOEU8{&;zl*xcOeA8x+HNxcxAAnN*m01rPOKNO^xuXTE` zdP@H9zRNLKwba75q@n>x~o&WiJ+ExpG5bu7O@5T_?j_iyNM-; zQDeG^Z^;+B3)fcQD?LQbR@RSfKjEAF!eVhNYhl}ro~WwW*~(f{_39-q!V7(zyS25L zaOrI=C|b9+xXpm1jXd2&w>H+(YI<+s^D*k0vybQv_Bh%Hbwwh3;}V^I zYZ-6^{osop!f$r2_Ys>uMsGiY2Yx%4@LL|YyJ=60Er$oj*rzIHO&{?+@-P}us7w%N zuK7N#EgzM7fA!h;%euEeCXG@gR5WjE^(tE-6bCru_typ#u$VDoQ-Zaq*x1(U2sGbq z^sMZbk$pl|Y*#I*NS+tTjn^RIZ3QDo9au6v_*)c&+3(|5O*s=PJlYupII<`BN~mZ} z8^e{*3zNcphuHWfy}qkeHs@%h_J*p>nCP*w7QEY?X3lEOL2_OqnD-6CARTT1(`1bOW%}G zuT;AR=a?Px!vOwGK^WG*6r?`yC(=8h;Jp3CqucX$}CHGb;1f{zPhW&rKdhE zmlRJ#HVzJlLy^t=udAZA?kx=YL&!%`!~S;KAbRCzwC2yJEdT6C;@1FIr6O zYVD`yj1^B{2bynHd-S~bwVv;}24q#$e81Wcc|42d9$Ud5G1yz!h_ORNfgZ?f#t>0+ z7z&8$W(`nH@!AlvuN$U@`PQ@_!atp8uMxNy$#K~RU`)~G!APe5F+}9)4o~w1Y&CXH zZTGTp-_2Q`{zF9_dYG?r%fI%`x}gio=gaaiOD!`@%%G?FlD7(nSG9e=M7T?qr|gZ) zdYUOs&NW=5k3y|XTegEE#M+9PJ~*K9`iY3h5d|_4Z zBCqWEOBebr%fo!%p%(n8T=?__le1zHr-~;`YrY}z^Af(h&OPkYCCkHnhvLW1(;s-0 zbo(MJ=Ezi0GYmB|-@3TAVOaN=+V3yQ^7v({7z~f%=6f2?EGoZY~kJzSA@BB-J31?!S*oUVmKuxd~f%r55LmaRecY7Ia|zZij;OueA5u^ zFyD{Zd2P9jyc34)fhP{~Jc(4$j2jYCe8(~jG zZ9Z>=O&NBL#;DEExgx4D;uGhJ$&IbeMcF3U=b8!8sR=IT#!2FG6F8wF`I_RebT$cJ z?qPcLowmJ0*wxRUpcoXwVvMT#tJpLSHAVK_qeQ`G;Dhr;FKh^b<{J`M{x-aC+k9W; zMM|E#ks*dB)tWwDZa=}79;6gD_Lxcz?3mx-gtjQ+^mkbqko5I zRUFBYhj|9;l`P)CGthjU* z^GK9pzB00gU$b__$J|(_*GKQS`^h2!9%_qZu^^IrPtPNcP@hxtB9 z=j1laUi6F@iNqX8wEV-R!XwK1K$V9$QEHHNtjD!w#=U9MoH~cT-O8hM6%S>|w~q+-9q z1AWB)R91;;gHeBzpRW?>gE6q?YbDe3-CxsaOW$Wm;fLYE(wF-SkuMq^=8GwZ@BGza ztI=ewEEOkABM)~E^Hr5W^StMjIam;rW3(^E2BpGdCh}mZhsZcYK99D36u$)D<^>t7Brh3-2?vF@b>^Eb8>ROUpBDZgMz#^( zQJC+(9Ods*`pfsMWf6n1V~?6I50)=(6CZT7=H^v;B*y9=_^(BMvd$>Vd@1G+!66|> z{af0RA#SvM9MuDp)(KzkBrDg6rm<+4+*v&S+MoiK{P@K>zlQPNAe^Ico~xz=Z4f7r z*28>tW<}2;j?yFBUqkNtLDx^2xMAK9WS+D^6d!_luyTX35E+NaLN)k>jC{#(LjL*< zujH@wILJuM81v1Xd1g0g=QjQ#W{DSupPzOc#UkYEVZO_=)GgbL<6q_X*tlc5J8r||LfI6h^D7Fa-@ZeSXGUK|DOhnh0ehy3eY|BDohmL4!v*r! z@quT6k3W|u>t<00H$7_M&7#XE7||9lUI+fZJ;3=>y-9yNpEJkWxRwL|^_s)Q z9_WK_#QybqMGTsvU$5OpV;q0nC5Da0F(cP*ah-Pg-QxLZ>sB>jkJu28J~v-U+r_eV zPm_aqH3`=}eaDk;@+-OS+gg1>XsLIMG@>aGy-p;ntIY z^$mUIGMV0t%op#L==Jlg@m-6wmPKMpoKF`cCnBR;>B2J+{5V}~f*tq*d2w?b-^w+r z=D7J?m>2$2@VnvzMxW#!)<6FIjW_rTo_iv8OQp~O@rG&3!lMAvF5L4$nlmo7hEWgf z?}|TS+z`|9@~}Um2JiFAs$u;DqWL78_Wr(eWYfjHN!HWqoo`I_R|J$@SYNBza-*$_S1?wIhMj%3}B&6@#7^S#Fn;_5Bf zeV~DHEXNmse$vt3!+ZmBNsrg@vr_Kkz=YYS554PgF?u={-nYlaY2>9ES^LYZ1I72 zQJd!%;>6Lv|5c2x_4hDe(p>k^=zgy&eqck!)s2&?aRIuE95by0)DEZ92G7Jedi?8` zB+go%erTRzd`a@|n|OQ~;_v&;n|LDzH}O|zp}z0Bi8nlO6JKC9E|PcM#2X&(x`{Vp za1-ByY2S4dZ+N`xCfzPP$T{mJW299)L^WL_{bFE#qI@R*xfMss!F zW$`)63N+t1?f&46PqWX4@{0i6w(^)@zLVPX&{OM0zXokwEdJPbxnw@QEFK}Phxr!k zvH5;peeL$yU0ELGuL#e1$X$Q&HLjz18|I!I_QRR+Ssv!AvA5lQ(CN;bwfF+g%zfAu z5yiCT%e0S_zrK3Ms$-+GJj~Z^f4VHW>F|!1>So29z9RM@t%v!7?#`Pt5_{&~Jt4~@ z|5fpnxmUeq>{`o@C&eueKO2TE1b6H{e!j|IuO!4^v-0!z396hRoC4#s@s>yjd+b0S z1<|@z%WD?8>TwpmZXTSD-4fI2aSa}x@c5w7j5!|70*yl$w)d)4Wge=`)1&8YV~_l; zNsZO@P6lJcHS-F;E%GHHuUFDz!H)?CKabhHg=37tz{jlDf1TH^J7OmC$}F|x_r~V8 zrc0Ydx4Ubjvr3hDJXev0?qivu#!nQ7VT^4skJuOMtl1 z&n2gr^VS-imM5o68&y2LXSInFc9&n%;&QvJ%bn)^+*-*Z>J)W3QXnEMDm2zRB&x4> zpFt5rBcnv>GGuk?t+lD>dEc5l&Bxuvg1;{h>oW-PgJNPum0~Wx;vcxMmJv02xOmKK z=#n?hzqrexoMPE)Yf<+);W1%-`-grK8WB-tNK8ndQ18f)!Gpu1MD!_SyV&BAM>Mdw z)SkP^Wv*CjacMfYr%RA{#v+$kTyl$FEiUCnn_sP^(~6gMS*MC7xn1&!Q@LEqic@7> zY-z{KyWCMl2Y>X0`zve7v<>gOv~(3a)2$^$fnTjT#fx99eZ~CWto71fRdHG9Dr){> zb)=2@#X8g?l3rSiq~-bDS_c2jQ7xoz{mSZ+*7=2XznX^N#}-lGjkS=t{@S`vta)So fUhI8pEi$)?i(M2_UABl)^;~kMeIDfUu<`!^+^!Yz diff --git a/packages/webui/@/lib/utils.ts b/packages/webui/@/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/packages/webui/@/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/packages/webui/components.json b/packages/webui/components.json new file mode 100644 index 0000000..62f1aa7 --- /dev/null +++ b/packages/webui/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} diff --git a/packages/webui/package.json b/packages/webui/package.json index 139d200..c6e7739 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -20,15 +20,20 @@ "@todo-tests/common": "workspace:*", "@trpc/client": "^10.45.2", "@trpc/react-query": "^10.45.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", "effect": "^3.4.7", "framer-motion": "^11.3.6", "lodash-es": "^4.17.21", + "lucide-react": "^0.408.0", "mobx": "^6.13.0", "mobx-react-lite": "^4.0.7", "primereact": "^10.7.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "remeda": "^2.6.0" + "remeda": "^2.6.0", + "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { "@tanstack/router-devtools": "^1.44.2", diff --git a/packages/webui/src/index.css b/packages/webui/src/index.css index b5c61c9..d924e24 100644 --- a/packages/webui/src/index.css +++ b/packages/webui/src/index.css @@ -1,3 +1,69 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + --radius: 0.5rem; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/packages/webui/tailwind.config.js b/packages/webui/tailwind.config.js index 9562042..62ed56e 100644 --- a/packages/webui/tailwind.config.js +++ b/packages/webui/tailwind.config.js @@ -1,13 +1,77 @@ -/** @type {import("tailwindcss").Config} */ -export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - ], - - theme: { - extend: {}, +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, }, - - plugins: [], + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], }