From 9d6173cd9c7545044df56a2dc8ec093edee85a99 Mon Sep 17 00:00:00 2001 From: Paul Cramer Date: Tue, 4 Mar 2025 16:04:37 -0800 Subject: [PATCH 1/4] wip tailwind v4 --- package.json | 2 +- playground/nextjs-app-router/app/globals.css | 6 +- playground/nextjs-app-router/bun.lockb | Bin 293956 -> 306020 bytes .../components/demo/Earn.tsx | 4 +- .../nextjs-app-router/onchainkit/package.json | 4 +- playground/nextjs-app-router/package.json | 5 +- .../nextjs-app-router/postcss.config.mjs | 9 +- .../nextjs-app-router/tailwind.config.ts | 3 +- src/styles/tailwind-base.css | 6 +- yarn.lock | 200 ++---------------- 10 files changed, 31 insertions(+), 208 deletions(-) diff --git a/package.json b/package.json index 484b7f296f..eac301d699 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "react-dom": "^18", "rimraf": "^5.0.5", "storybook": "^8.2.9", - "tailwindcss": "^3.4.3", + "tailwindcss": "^4.0.9", "tscpaths": "^0.0.9", "tsup": "^8.3.5", "typescript": "~5.3.3", diff --git a/playground/nextjs-app-router/app/globals.css b/playground/nextjs-app-router/app/globals.css index fb60fe5d76..710b5afc02 100644 --- a/playground/nextjs-app-router/app/globals.css +++ b/playground/nextjs-app-router/app/globals.css @@ -1,6 +1,6 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import "tailwindcss"; + +@config "../tailwind.config.ts"; @layer base { :root { diff --git a/playground/nextjs-app-router/bun.lockb b/playground/nextjs-app-router/bun.lockb index 68d8252931fe339e999a1f70116c834ef9c8ce56..47954ba2599ffc77b7a03175b225dbe327703780 100755 GIT binary patch delta 56794 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 Qp;o&s_x#!0Dx}5#07{fs%m4rY delta 49946 zcmeGFd7RJH|NoCa7f?e>rP7{| zEip+*UQ$RQsT7q;i=yOvy*soC4HD7mKeQP0~ zK06m)S3OWGZ{d_W*$)MLzT!S#&SVcW{-Tea;@0rhq^8QH4a%69H7?zE2jwm)Q15H< zi=of=_~Pgl&@(c}-jYcZ-TgjadGrbCX@e)CZz$~6&(5h(#ODjEAVfK^HVu>ptAJ{7 z>ZHtxX=8@?MrVv0B2zx4yvmKElJIA+3U~r6SwMfWsLxjd{W=;c3mzd~?M=)al`)8R z_MwM;*}j}96Vqwl=NrUu%1~fj#?UNvG>`%^d~lYqMmX+*oq3fsi2NGfu+C~K>p<%qjv_8GkC(_`c0eod>3e4EPfv_* z=IiVDgB7z|#rS-eQtSH4KHnAKd4?}nAMw?JLPPrBhooX(A3ZlP_AABYEHkXX7zCyW5%k1 z-PEoK-{Lasp*f&DHqAK}te(A=T*jO87^qh60X31+Kuz=*P|ivNwbc87s@>7U6i~xx z25MebVV&yFsO|G%NX~GO5#@9R@kGw)I@aosK&;Kqd7gwi*bS<~S3SJ8o}HaXy!>V~ zK-)RhueAP|0IK}!pz5DwGNi8oWzg)atf5t?CpRti3`?tT4LbrB^#y%7`y79$B7wqI zACjIqkvaF><CJ3w z)6r#2MrQqCqs9*MHH)`iV#5y^k}+Z2%jjw^ZA{kaw26a<51NoRI6c$nOJnNsW_Hd~ zB(z4)f+|>y(P)&nCfZ3o0&07l^G5$6C~quJviLT->TdxxZ4WiK(=!KDJGX(#p8#t5 z(npQT7&kFvaMfgayO=MhD2cLU_?_Is)w3V-)>x>O&v!Yj8^!R}&n;~;b7O7ueN(J? z<0lLrJ0#ub`wd-w_#RX@S!ol7F-%{HtL>^gAF<|q1IqkQK$*K5RQYzP?(jS39Pl#U z^6-Y%wxjN#I%o^3LTVd}uX*K$W{eq9f6_Q#%r&;$`8LjoB3HzwwY6?t4yyVoP^-M9 z^K_Bw*~8k~(X<2QqY0k=Iw&Xh^{_H1XZG%BM^(quM`cW8tb~hBmY)S`&&7f2 zmHhg{CypL9ptJ3-6<)%TH{?uC8#OUwtj`w;*ij~TvF6o`u_2&KSD%mVky8l0I{0%D zn?Gq%hI?6)zSUvY3k5EqdDS>%q!r2hcV6^lNRY;b~l^#&DHF z7k?9|HF&j`pXli$dfCa^Onn8KTJUAS8nmnOW%}49bQh?dmy;u=Ykf0nsZ$KdjIMJqxdnGcwaAOi0V}{nX9#)ZmQt%n_Ns z#r-|QJ&eZoL0sl_1v%lB-wA4-R)96=Kj$bDTLRnHUUeb*9A2Nxztxwj-C^=pt3broBg(7X22ckl|$_u z4$jO>&m7Erp{wJU*u-imD{Zv9qGI6X%5(5Cbllj?iPZ6R8g4za8(sq%lQw3o*5cP* zxe4i+V@FL+_wCQX|8m8y3|nv$=r-i((F4a#=(7A64QMK&5%qnqgYKB4DctJm>pgr5 z48xC3pD--FiO+ZQXlwANpazsY2LEVI?;2xW)x*gvR^4CLIaaLVwcoQm)Y-)0>0@;8 z`OwpkgX$~*YU8^x9nWoHj!U7}%(V3?dH4*dX}FN-bh@Nk_8N+*+0hweGRCE4WYA4gZS_k-#-8m*%E*I*Y7if>M_?L>p37v1XRoE>XB`~=kOcbICg zsrA7)^p`;Km7LPWt7ordZD>kXfHHH-Z5GF*PjTZ}o9TA()%CCxNZ88xd78zeU?ueJ z9=-&s^~GQXa3-j!oeF9u(mebj*VVIg`a;NGT|h0SHMd*64Y~}9F1kUJG6#*#^7%I3 zVHI%IY8RzV$r#Iw`M#VfzjF#c zOhO)b4^)Tm++__JoiRGS{*XbwJalz%-z-}$Ei-G(;E@>sezuBYfsf?{+imkyq9_4c59 zD5V4OwHMm*Z-DY>n|rOntI@T>mV$~O4IMksS?F$jsNz*PzraSWFF-Z8*Td$EY(q6b z8FC4zhR)n)%MG~ScCZoD$esa9gRf9uD{e6;L$kmdV6O*!zRSRj1wQBTQnf1QF18*T z>3NE>?$q{w$oZty71<{rw)RdOJ83YH$9D)_6UL>h{?Jir!?vNz+zp_{{ns5=c&VMx zr^%ODoDN(w)43lSGtuXp|CrBL3w}IU4eaINv1P75o8}}zXdE+_+i_G!*UZL%ny?=! zs2Sc1mI7-&>1-%n?b;GgSv3gCu8c85M`a8fK5=Av)?`fZU9!URd0w?;=$h|EpjLMG zr!BSy6&a2^?bIt%EqmWH)*Ttc#*Cdn08GyuHz6I&dDil2gU3!F-1*W*xV`vpdd@DV z4xp@@G$ErtmowkENn^5faC@2VwZ4~wa_a-2y1(1QWiMFwJphJ%zFs-GWN19MfZDO6 zJ^b-SJKj<0lhwcPOLXPG@8L0!2DpN!kE@@N=^O0TyJ4AAxooxU^PJ|??6~@)#t!BZ z31*DuP*ro4<v%c!FQtAW?N?GHx|D?0Q&CV0I&G6RpxA4+p$S{; zOuY+g{|(ObW_+{7Ug#QGYfuZlxtG74^78D>p!R3NR@?qEPD33i4%F+isoCT_Z(V&)4A5bIe zjz?6!HK>kneAn{vo_^VTmM;O8BR>x;3m$uwfn<}ojDjM{ff`xbl=S-S@ASf+{w)RN z;`c#K)tRNXp+^tc@>jiYM_Loq-qWdMbVlaH5t(Dh#QS`{%=FQdb$GqkE1wOjzae7> zPt2Z>F(!QwL{*4>pgQ=J4piXo4{gVppf*YL%y$#I%DGRw*yY{OW%!k#>b-v0dZaA6 zJoM`a7LzbWQx)CSEkEMHi(Jg9@$6kpZh ziU$hC>^R%3*nRcidt=qd_4*a^zw0z_81W}LS$wZ>);Ej| zEWRIe);Ea+z6m+!nxyzIb(%Mg`0sME_(Saft(qqL zA9b>tMf|rq>zhTwt73e<1j>Y*+)t8XP#U>rU%D9dC}cBhk-5(x*`dh&PJ@jsXpgJL_%ZIT!s<7pwspOold<77o5 z;UB!>LD$nYowIO*i3TY&5pq(gwG52~jgxaDiT)3q^;bv2B`f%R&ESGAH^yn68VSDx zcMY6ht%u67k*{%DZExwECGR6?ZX4u6~wq9Gc*!rbUv&he_Sw_RpFLCsc`AnAbcp zJOZt&o2Lc0*2!uc34aOK(dA@QQ{sZg%!D&Rx1z~!EUZR}p*(5sS}IwMUmp(R#Rf^5&Ch+Cx6qJKv#c!}#4b zli)P(5(#H<=#&wZ!1(o^=9UPbMYF!8Wq+d6ylW(sd4hdIKeb0!0zjL-{BvieAbg0>+yrFJP zifLfi7(o!PbaBpJ8}UEvH18GhzvX20iUfXd=xpef67IkX({>;fGP_fq=Dj1@y1gTT zvyGe$y;H(hu}V~c3C7X^Xj+qYKi}hI^@)UEgG+F^RQAG;Xxh&#B^J+BRP~kzwQokV zZRPe!4BbnTJ=`QYe1Mc%aD!6llBO&_cR9BsrMBp;5n;{K*fsQX1nnA|#|o-JC(_8H zpUG&QTur-k3z{59Tw)*nj+WqTN=Oc+#B1N3Pe=|=CG|%?8_{goCq#yS%Foky>SHDi z$Rhd~iKcx_>`zP#uR)UyT$gT2ib=GMu)i>`C7PXJRl66hGX?D~J%!dPU#o{5`AZ?3 zftJ5~!mIwIeS>DZ(;%C$=CnbIxNd(DP20=o_**50FQ9quz?P1TP4(y1~Ek#INK(JZ=6`R{br4~&G?!d>kK zsk)4DkTb1)vVX3Vb#o-V4qavt9q8&eH0=jBB8EpZUG1Zq|1~EoEfOw*S2T<4dCYE$ zX3dtCi^g)uDe2_)N(|S;57)Z2aeZhKS|?}POI#@iMZzIEQ9or|H+3iJ4W6hx7foYg z{+Rb|XmThP5z|9X^C6M&_|`T|x~o6D9ZeR+xKkV=Sg0-c&=KzJX{@;ql44M7Q(6n# z(c~s#B&L_e2WrF~czQ~6F9q{SX(nu`?P#jQE@iIIqiGvq8fG_aYc(!+v_1k&gTM^( zUPSX+r`|ac6Z!XWEG5&?!<4 zoK{_v!^x~tdmZ(&*B(LBvSr3G{sc)4g)3*Y zo#vw>;SO9<`?~GOB^%MK6Z~y(C0cj#!cOk3Nlx=I5&y?d7T+zL^?X-%&hp*eX+AdM z-{NGAjfC5nmnh6^=)e1j%?ZTxN2tH8bsPe!x#H1)6M=gD7Z(6s2V4ZkGx&i4V@ z-DnKl=7kQT5pOw2)as)ng$@!+N%gb6V#Cj9436?zEA4S+Z)aNLVb-(U>(NemsqP)-flO&~zLo79=JH&h~RQOil@ZLsl+=1lZIeVGt<$y_^}oJBa&iJRFD(iki_s0Xqpw)4F~@lqt2AU z>CV|Hk?<}!4bI)@;W);__L92^=>yR;!S1Cayade}t)O!RO?%QFQ_4D7QzQO9&ibj5 z@QVKV5uL#u_cR-eFB=fuk(%n8(YU_QcOF4-5n3V|ONLAK+fMV_BL2Eg)@_mSoPjX+Gaj6s}RsWXVBx zu-qDug~IC6$gyQ58f%8$^Lle!8*KAzsMB9QG>sg{*_i9mTG)ClrXRdK7DvmZLPIF% zv>K8e$|luUHz%Rsx7@AhQ+fnEM8Y?g{Iehsr+llRR z0Geje-PhrJ&=hNk)T5JPP_A*CV|(jv@AgROy5ZVd=hwE3A<>ddJDs1R*}nW)iQ$SF z)=ecfeE$rm`JLQ^!C``()X)th6ys$1{mxl(4@r;ahAWPY+QfbfwMXmWv}%zYHl(y@ ztn2oB8l%PkWk=Z-2CER{YbYUvO-H+DJwUYH8I*b-^&JRis$Bp&5S4kFZ!^BWGv;>_+{m(k< zXGi?CowKte;VI*y7bid0z!%W2vi5PGavqI~Q={Z?`|-9Eb3>_VXd17L(;Lw=rb6xp zI*;bX@X3k(>zuQ5xs#g^z4=v~YLHoQLyYn?Rx2&9N7G2y9>ljxCfb&*U%R2{0vUAs zc@(XQTT)(rH(%2>FXS}8hsZt2mZxP_-K}U^!raCVP7J?+X8X~sRGOS00=SR8$;q0} zGY2@0ip{}B{RvIA2{-h%_!g_#quxGGvp3%*rr7x|qBR!kB+Y5XiE}0?g%TTB_MvGB z+xwqNS=J-i#^J56r@80&@O^0N*?RY1X!0(hB`eXN=B&Rr652kMjq6Nnk{pV?RVN<; zXlO7gb|v?~tDW^uBzzpb0rl9jZ0EAKSq)nlO)8pf!RO5R3^cCNJciimoV_oi7{4eI z%AU^E!D+Q9IrM&hs$sVF`!v(Ckeg8EAyU2FVhwYmsXItr>vH=^v0*4zD_2idNcqP* z>x~}5oHdc~1=wVFa2Ux2IqLy#18=wP#8jg5$7ou3xUF$wsM;M`&}yZ(ll5REG#9;@ zyIgmXlC$l>l(@M#5}0(S(;^`yeE3egDoVLQuiOlK{&4ToLp#wL>HZ*ac7`+cp_D++ znaNBDEJBzG8jtodrQ?OL?g`y1x?d;}e9diXQ60r^_%xzTI7obfNT9^~0r zQtj^iR>&KIrig2!;0CnT`K?r)$KQhUwP|Q-g_Y4IDF&rWezn+p>=nT_G7`-WL7l&d z*3Fj03FpzYEbS0(ogdB97TAf_*E#=S%a{eW5a+f&iQyItZ6U1Z;vTv;8c~?~K+k)f z7Rw_sa2?!6iGtxHXxE}qo@;!PW4-R4bwU%+=weE8cn2vh5d1tjF z(nshyY3|9S{i6J~7)mah9hhc!51O?>EmXWedY9r)NDPd*-)ZqeN?`Z>&Q#zM<7{{# zCEU^2MFJg+B&^MHSNR9EaX68MGDvlB?^ahTW!*bA zFvG5@@IojUR)qm2O=>~^z2AcJepGjDX*39irA@n`8MrZ_m z7H74mqSGa#hoX5)lAF`zXi3g_4#bB^sSXDN%&)k@mZC4}^g&bnvQxYo%??eAFz~d^ zW3FZ-#dwM}{~g3N9vEwQS4<~*e=6VY3?omEu^$G+#C7O8nh&r zKjoG8W^PqeD^S#7M^=w7XBJd+reJ7n!RH0yF*SMw_GUN4NP{E#K5XooEAG$0)e&8 z)Ez0|o7YC8M&3A{eWBgpHmPa6Vx0{H*31)V{mHXh&-M0x#A?gY+UDn-M3Z3zeC}21 zZm@F^b{EQEw0QE0IsRvpVo>B$y9$q?*?G{mx@=?qI^lGA6Po;I1K2%ieb9KEc6(AG zlwQuJHOYa5SDmSErvz?))!FcNO8C)Db}UTf4M{wvYOy;doVz7@;nlML0_|FwvGIRY zUUbc9=RWx-?PE0ST=GJ7UXNamCXj03wxIT&L$lFClm8`J7xzZI%hqTpC5*ll)4x@$7rwV)QtMN4om0BcF91>F8&QVdGp{IPX> zGkPA7o%7HX#A)v7q(Ug13|A+IQ@2M?7rHZ9h-R<3he+9BY4EW--10mnA4|#(J~uBZ zMzq^s9z9$@vu6{uQ0JZcd}-y()-SaqbcDD@7pEdZtu`@Xk2&iN)CTUO4}YcGTsUY?KUXv-q?0R zQxGMucM^{@TO3OXAAw7PvjL_22b|j661oc9f)?*;?18{@A2=;ONeS=zFlsQ<7pQT_ z+3-n9;I>1~Ir7#YvJZ-QZcRWqgQnHaW1HTIp+<-4T)QSTkyJPLqO*^brh`>DD=~cO zk?2(E$~GlmlPM?Aw7R%M<@(t1BRdc@`k9B;nminulo;6ak+b1=N~rizI@dun(Eg~? z;`5Ziw4=_{&r`xL!KYHVyj%4&nnus1gUd?YkFD>x)g_$Xh}MWa=7M>e>uCf~y4;AS zE_v*JI5BYkW2eQ5lt7zf&eRhvvTOL{UF9%VVvk`rSGHITN z3qgH^>hfMh_3lIT0h_oD8x&%hH5wDepB|0o0s>Z4CDs5-P5Y^Ynt~cXpqu7*B~d$ zIbQx99?tagh4RfDPybJ-kh#z+R{*o!j_)HwcHQq4D2Q4ePr|FCXS{OHdF6zv_kx%I zvWKsD`2|rcI?v<(z&5a6h8o)H6}TA66K{I?1(EpjZN<{6z0=DT`pxdbo_pU$RpmV% zzN>8X_dMJuh0n!MOYlSTHTsW0wR6lXUl7&(r|`n#pz3|4wXF)@cp2Y;(tiN?=lfA# z9*Y0jorh%6&RPlzME>yCy$2akKp~evpic0i&q3llv)qN_c_F97~-`3OH1#p-? zB-{e+K~?PR73}8e*Mj`>_4f3Bo_>Q!K0SJi0a~Dc-4Otl)lWv$G{5c>p=ebHt5S@wp-yfkGL2rYYSg8XscK5 zVyKR{d*$Bp$`wQzv&P-TDi@E4C4DtXS+h1yW+Kz#%~EDWlC5s@A$S=7@nf_CF6LuHEdr9Mh}75-mP zRm<=tL&}2X!8%@h|Bkl*|4@M1f75^rt>-md5XE2R@dZ&-L%w8KBQL*E6_02PifiU& z2>qsiaW6C`dD+Qcc0m-CqT*o0%NI(&+S3c7c6S$eWp(FE_Vxseg9AXVrokZpd_#kT zMim(D5hFqAqdgq!;doHTkt|Rjp_WKCs7vr1P+9Z%QvLa0EVu&HHh2-#u3ZJ{BUJL0 zU{jm1!OIY;;A@~pxEYkiZ-DCXEwF@B|Cfr{Vn0UXpYKz?)a`L89;)`|=<5EIm;WuO zv-2+?|9rpd%fk|2n6A}s2~hP*f*M|BP*JTBDF3!B0LctD7_n~f%WkCKaiCz%Wfp&3NY6zP!Lt|4v!bgu$i9zpHLm&<&~e~l^2Si z3u+z~W_uY63!pl5yn^?6yihJ*;^{(_Tk7dTHTN@zq+cm$Tqs{f9szf;J0>s(RoTi<(L(S087 z2Q}tHpf>xbpsF4R^%1Iz&prGCRQXe0zEJt!czQupJKuTvr{x2ENa%++K0kX-1{DH{ z2fjp5Z6t&I^IgrC^4oxFsI7B; zxD@1{Z#iG;@EK6$UjWt4N{?R)>LXN#>%9Dp9=_&bt2`3?^S$ZeE>I2b0oCDN58ngT z!2u6H01KJ(<^0v%Ttf7Ayk74JY4AE zy#|9Q&ku9SbCa&l*`JG_6M za{lv_)2@Vno^tZIipN3!Jmvi7Dd)wXdg@{3KTkRHpK|K?tPWNG^(p7t*oyw;i%j}j ze`gc(yuY~FM9RO$gxC46^S@%!1Z&ND!8%iVJ+R(n2sW5J!A29i0eIDn7i=;+1+SSJ z8-dLx3ovz7((I9qG@EDYz6x z!A^5h@Rmv44D2!w3f?xS1-nhhEx^CbGQl2m7BDMbq1paK3B zzYYVx5T5TOr;z>qQJ-4^j0Eh!0H08xWN?K?uDtd9p(s( z-*4)^i^C3znD;J3(0m|b)((hP??Hsj?Drs&c0!yIQN%Rg2XR8gl6??ib5g_uZ$Wh3 z4^hlKxF4d!E{O9YikprHAbt_?`~irP=B$VnZ$tEdAELB*`hAFgyCI4ngeYsSKL`=? zFNjSd%A4>95bH#Y{s5w)SubMv9*C+RLd2Sk45~oQXXIu|vePLl9NXP7zb~ zLexJDQQc%6hN$x{#1RoSOx+_82Sv;~0#Va^AY#^g5UoCfsAXn<1d+54;*^Nmruk8b z6C#!zg{W&zig;i@MAwfYt~3vR4AJ2L#CZ|*O~+#pzleDL7(_#JR>X?;A^Lv;(bzow z2}Hkx5XC=*Xlkzi6e8vWh)p8mP53j2bs|Q829apiix~bPMAhRE%}vH}h)Rbbc8f?h zv7bZi5Ham@h*oB&h$)95>VE+dFQE)(&rG9zJs{Y=!Z6)c78v&IyPa-$SICy&?{Z zi2ng%u*v-aV%ABB<08^c;~ycCzJyrxBg8OsOvDKhZGVEuFbjWzc;G9DpG1r_sb?TM zd=2r$8Hmy5w1{6s^!XWLtXcLm#EMf8pPPSJGv%M~L(DU$Mf@V7PXJ=RSr&j;@e4#K2(i%g3_|of3$aFo zWBi36V$MON7lK%1R*G0BqI?L#n6wbY@LwUeiFnYIE(}rWH;74vAs#Y$B6f(VRRm&* z8D9iq%6W+WB9@vOF%WfrhnNuqvCQlhaZp5j7~*l08-|#50phrbCrsm_f$J6}1@J{t z^ry@*=_kdi6~zRVy#Il1u?uZ#5NJ@P3h7Qm5M-2 zDh;vGlUojAR#AxK zBDR^v(O#eoKRUBDLHxASeP0irsyOvI$@|(|^1h$0QPvB4KW^e02c6jDQ z_m9;%3)VJn7C7o>LQ5wEZV45dhMlTXyU?He+abHc(f_ZD)#mvK9i;O+k`fwKMdcQ~ zYKi-o_?-A9=J!b8%}}Lf-k^VQ2el2?766GQYrfc7aN|Z(!AyNX27i65G-p> zeiW#i{rd&`QI6i;)dQC3pZKG?>gneU`YiIw=oEdMSMYw1)6GWol`_2ntTK98p{FwV zEcQ56yUudiz9n8|-NB`L1t0M^y=~J0PDU;DIQT!DUpqW=U`s%RWX3|Ru z`sg)cwV{{o8i?TYxXbaZRqtUmbSYkl@e1ngy;KHp0or`HE( zd7Z5ExQcLJl9o{~dt4>bM=2+xR(YJ>q+E+TWK{NQkJS9G^T;(G7YC>RBME(8@wh6a zi+S8ykE;q-!sGO&wp?8eDeZCVJ+3<3CPbeNmdo~CiZWCTpN){JQv(?$g3l(e@@1r> zuNdoXZ!NBx$aZ>@@mk&L_;O?>X?VCa&a_NYLZ-X1J19A^Okx>+>(YL!xwjq=ZN6 zm2oAtQcHT=J07QnTH53ED!G!4kTM?kuE#ZodlS*;J&$Wb`WBbrXC!d^^JVMN(MXRx z;1z6!{;P8Nyzg=Gq<I^ylFD-LM;@0<`U!7zM?J13To$4cee7|qNZ*aFYGfXwM!tejf2qhl9{07!wMN(0QNwzNUgg>#+BxFB@wjV9Yhfx+ z@7AkaTST5w-gh2Xs;GW=z-QmP0dwfPKrItl7OAR~~G$S7nqG6or2h`=z8#CT)^ zl8H<-JwFfB&Yn&(8_7Ww=oQ$nMS3BRYM8UluqIlj0X^XT&+9Ms2PRJGpu05+g zs`#vUtnjNas<5dT|19zxqUcC8%=RhNDYPk+DRL=NDKaS%=>niPtV=6G*gYzVrru6U6<^fT{IG zAhBpi=#o%%d}inufy=UMpkId6MD)B#uiomlyqU;dh^{ZQkvYg*I>LNGwtXsj3$mPt)*^ z$WO=_?asYWBIf&@WnTKpewjpmKI}rVXaRf3F8I6oZ6rpz_hY^Jk zg@=z3ZU0XcSrs7_=@dN`ezziu|GN0-LZu5+3XMmQADBA*9AFo+7kLlS?+u#gl> zNO$!Qr=Q;}A^ixVK&harSLb!5pN;7K)&LSj3Lzn+Ffs+1irk0{L~cd~A%l@2NV?u{ z9ZF&tG91zW?c^DbW_`fENH?TA(gUfET#D2{E<^MZZdVLBft*AX9~BP|W6;OQ9%MH% znStqdrTW8lG2{~DQ_3mu?h16q+hlG)UPZPbA5&m0@*<+2sI){{A-i$fQYr`-D$Q#HuM5ms!$WMqaFnUq`OXO?h76zp^1oQ*2 zJkp;A*>|5oL=gSXN5A`i2f331GY}n(bQGF{%th`-<{|eW^N}oMDl!%sC#3EWFdbP* z`emdyX`Pa;LnM5 zzSebgoq}AAq#~`6OA-B^ zyDoAg&G$zJBfHQaq*;UfO!^G+IdT%w4~@^lpF{eQz8<*&xe4iy3_xy1(vWo88j1|l zwir(0cPb4cV+b-7>A)nEV@#XDro@_7ND5L4DUHM-?~pf&vih-;j$6pMgP8CNDUPI_Y2A* zZ=vhIf}x}A7(^q{uOjse$+t-7z|BO?k=8NxNkm6iom6!)osTR){yO5QarcpTFQP$K z)F@@S8g~5%bU5XnI%{;)DfDYH-UK%w=SlyDXg&2nIv`qKUm;oqCy*}?EsB33uOnJC zo7Q$c9hiSf+ts9L#+?UQr-k?`vH{V&=u)r|kwG%-O+=%Yae2rVt;+1~gR@&-T;?b4rnjRMdG45CKXl>Q9MMI*txwT@|N5K-Wq3=fC zwvF1>dLDEYjexyC3#R|BaAnFDE7ZFY&I_Z6Z=v?v`qSM{4 z@V_96j=GaP1M0t&@B^X%{1YNxfjJk^7UmAdz00{CBtB%j*U!!DtH@NG(Og){vK@ zltzY-)(K0;slrGI(djFI$UPUx{~b}j43tsoOs6!R%1RH6fOmfAng$ut)s>uI&A~CMl=JqU&~m zg0g-vX&KNT9E7AHHzVqFfLT~LSUX!qU83*{brR z?2=8Tz=HNpHYDk_%SUqd z03_OuCPDs-mSd4+7gYX~)>4<lehtu!r}>&Vt1`y%?=$^>vVeALdrE_4Mi*{z^-2`C5O zP5Q5KNd2ru6i>9Gy~)USm%5g%42X6TZB&l7YkltN?j7%Uc)~?Pu}_H zF;p=O?expeQK4@i?;YbG(6m9b294MLa!K%Vf5q}-)qnAs8a-RiiUj-v;v2*_ZqT^# z5Yx3puxjBYZd$uqiKHtgOsmCcBji z7LHT=Do)je*Ed%=ROH<4s+!P1f7rOgj4egg`DS*h;4oeRI9-Ys_M1rQU~K$RYL%eY zJMrauUw`<=BIW!kt>POrYS6@uooes-O#@F&YrFIbnQU#DZ01q*Z#tB%#reBB9cGwA zg2`rcXSe&3Wq>@3*LT)%3Sh9tilSH*U~G z1IRE(RdcebUzTqFzMNY?PDv{pyfUmm02HOY4d%j)!PxEjmrhE*|KoNRIM zx;B)K4GydF6RTCzdhWZVs*lvHnByAB{%geZJ@aUlV5Pu?5@uZ0V5N(!PZn@fEvRDV zSS($~nqLJkm_2d8CeyGo8)7%Tb4QcYantAB>eW6rgZ7)U95CQ0IokSHy}xCjZ)E+c zZqKf1cbI8ZjdLR-1*V_)phM5?lPhQkHdRelF#A+1c-J2g_`1;jaluMe{(axF?%h3a z3$QG@%D%~FSR8ZUnpwFrOF~{4mREDpv-2dPDu}IZm z*DBAjiL}T~>zSddjVrXmCRUjixi=%cLW$qYnI%<&)&2dx+MrU$w$ed27Q*9YV7$JD6z8iyJVs6C*@7le;^ zJ8yl>ylSl4x#kcp@P1Qv4PcciSsmDJc1t^E=3U7mJRfTwO<+I7nz+kglgvVux!ycm z9Sc4)N71T$%OB4x(a-NIme-m3T=>gBETDF|OM^|~`tcqBg>ps~UpH{n$D0cOQR0|M zyOfr;nr~|co0=V$1}n#nuWBc9!I>u>-B2}1)Moc4YSFAU=PwO*4V|DBAPB|2QH$l)$%@P0Ho$6fC~;GAw?qx_bo3Sz6+WZ+Gub zc*||gHDZm~D^L8{X**2ynoQl_+i=8GP58r|W@gP`WnRx(MkQXt-pJUk3%W)PiECEF zdZGSx*A>5UQH#y47u?vNV#Z%iwT@=s6?EB$a+l!RvQvj{tJ|dZG|Dxyp)Ad8rd<3O z3MhQM|Nio=*F9Gv*7H5?oJJ0tCg=6w*UQUS{#9|5tDGEtk11Y@wjZN_w)eTOe;;$^ z*}R>u4Q`lRYf>q|%i%ZH!t@qqzO-rPX=ww^5ovSG&$YOG|GjnU$*5)$CHa;kDhDI&!}Je8hx84}SQsKU$w*F4Sg>!%fpV zTxcGtV}08<_LbW%`Tg1Yo^LVZd6Qd*_FgqT>(btC%E{Wc3#zrx$b3nc5zpL@%pS@G zPS-Kj>axvjwZEudEBlcN*OeSHsZf9&ur&yu6V4mod{ z`t|AVAO*C6M&EUZ@3T&;?{^DuAmovrNuxmE_Xg&+`b=JFv#5TsX?$u!yM)bvxnpbg zc>BI`{@O4Kf89atr<{Q|%`fu!JGERR8gnuC4Ke4{)dUJ?GyfWFeD5{mbEoL&$@(Pj zOgD`iFr-vVBqWawY^@Vc_($2V>-wi+)&1s}F zpfQna8Acj^T+yYt)el=%zEvuII8}8(V&thv8guwo(R!4@+^-m4! zYu=SUWKJb;t@W;papyU?>L7ea*@kmo+i{alSBhXv^xxh!aTn;u)>b^E)VcSw?d=kJ z-PS){ms0mi>g#JZCE~MI=KaLrLxJy8%%#)01pk&|?nw#`<$QCrIk~Tyl7hEPWCKg< zK*a8l_lwQE%ra$H4zoCF8{l$!D_rG2CHBOvv0oLAmaunS@JJNG| z#;K|U+#GjRmN3s!HLhK%UGaB??yYku`OqN>Xb80JnbOt_yupUt?yc>X`g+I>eU7x; zat%cZCMtS^sow%KQrp-?bc6rlL+yTE%59L_mdqeWyRmQ2UER`3t=|4eFEM7xoZwaF zsTSNGrM2~T-+NzQK6PxV>nW9BqmpYx)F1xkrg5_Coz4QA7dX|{1?QpEvV!&(xy%##}z>qK?_EmJ-aeR>2B|;u|z>XZ$T8 z`kFW(ZWt9g)aLYmtxT6ihwjewDpKxs(_Q72G$I7!BJvaas%RLd^i z=RbL#2AkT`#1&?93dYVdAEeO#6{dKE{%28~!*tGo;+I{~ecSpD>fauv2AI?cm;2-{ z_EIr3Yu~T&Ih%KBB{Om^P$4rv5*+A%#C#hG*6?>RrLU&-n&!%@X+6^nM2pYuW<7UL z&BmMa9*?c$w(cHT7Likyev>x+RHRp%bC+`6^X^7hnCGb)x03>#M{|z1c_$_`e{C7> zrke}=33E(cd}hk0a=Y;&lU;&x-_FXd_hRiAIJR&pb8k0(>Sm^=5@Q0!q*8vM*_Dcc zCC%~FU~XJace|%b{cuOAidT${_belx-)(YRQ*N0#y_Cg3_BvfnAxMO8YXuM zP|u{b=Tcjx4fpKLOwTq@v&~2#u0>Bf2gN@4aZ$flijDW2N?V&vUR&D2eFx0Sr>XG= zQOg`{XR{Jb>SD64HZ`sRx|{y(fSXL7LvLfQA&Aa44PPNW`99L=W>bMuBg|=OURAH5 zKl-qQnb4MsUZ&T)TPD`;8WHPvjjK=yZ z$~5Xgx|u1xf;sj|d9$&}WONKRs>Z~9(9d2=&s6ZwjmxOcjm7i?`&8_t@pq)+CKGRg z8cqGB%o4$+W^YIOw85UAUxqrdAEsSq_d{*}@^(|#q`xx&*t$?dR#0BJ1$X7cQJD`D_Lw z*G}WWan#K35^P%KGtPU8^0~=H4sJ+T+KmoWfDYJ-A9dkb%s|Gh3)QYup?;}XY)+s= zQ|5sgDrri0#bWnvznqD54Tk=dCZ3QTfBVfgYFzTnJMXk8^so+DL=!zFshei69S6F# zd+MwC$C{DjT_fK%&#PtcIa3pJOqv%A>{BOx2-uKkP*wWUhK{P!+MOF*deLazQ_#8w zaHjbE-Gk+|ZAY4E6usCpG9J4qEY2`1^*k&8v6g~Pz^z{?{~1|+X2EA(CZ{_K*&0^= zuZ{}%`wq5C_}`5jYL0a$0Ncm0rb-W5u@4PRj~>CRSiaMGU{GgcdIaC+M_DW9^Xz5M z++ZmFrF84FDOEDwIW}v6ma+yxm|9Pcrg~-ZYM;%X_q4soYodADYBu$xwcRFeFz~)P zEp56frX%n%YH9xGOc=4Lf2Wgrh{JO)&A&Y($A3)$#p*_5_dK|;;xsqtaxJ06IWOn> zXKQ|0e8%Kgsp?(&W6V6YU1_MD`R-@8u6ec4pv4r>+QOnMP2RO^yVuQ6f|pF)UOeS- z$qHs(uV7--)=uVVFB-Zj!$z_vWrSm zp?9zwk@&m{ylgu6p`jk5?S#x7a^K2VKiqkghP2|a=w_2m0le~HA1vBxb_+f={=Ses zOdJrGJjPyr?kZCEk*<%w{1laS+2s^|m+9V@z4XagdtdNS`L$nGp7H8P3h2omt)Crh z9_h=Ipn%!i7i-Fz>etckhh`a2<@h)oovxjI;Du`aIu-Rs$GZG}oEdXnuwFQMyzSYo zaAnQe6YOo;;~>v{bGB5jRe0mTn?H6()3gEiL(iFSX*qrk1vI%cO5HSS)Sdo^t;M>Q zZy~1?Ik9ERjOtyp-y>0V5Z&wSC>EfK#R>WI_-G7^g^cD z(l2;TIBJi3J6k?PE;sZI=QF~hCiQyYesd!b_xNPn>58o1$2NU5F13)mSJmrVX1)rv zyTumx<=m~qU+;I{69Ioi7~N{MHOFq?F99P_wHSw7zxDM;N|0yQFj$`Whld&x|rYTVydZRXozR#Jff zYJ>i!Vu}t7mI?EREceN?%XQ_a)Ln0)i7wM@APGGA-CIM4uj6)9`<+p6ACyZ0eslbg z%1x!59s)GIcktA_C6BT&M#IR}GtC|f#4kqGIrWi#Ee-^>4z5LZm9r^N2 z?xeY~WwSX=@o?8W`O7fyAx1C?kH0uTjn*{RiGG9x7=PpxtNU%wj`)1iyRc^}kxXT~?n9c5< zK-kDbW}6a2DS69mGiC^Q&usJPE#OnL%>wc3XPZ~W@11S7OaQ-}ZN8IUc#ipabg+^s zF*Vrk@~h_XE)mxM_0OTD{L!2@=9u4arFfNFf>#Bunqxj19&A!Hni;j>fw|_MQMCQ? zT+?V0_;)r%ZSflYlPy)Ejb6+a({EUC=>K4?XMj03>>}3wcDFe=GI&jN6o1A1QT=rk zp4Db?M)2nU-G%_&C5;FU_#bLS-S{^hN8J=?Ki{+*iF*fwQ~sxx|1#u!TQU~d-4a)- z*DrUz{P-;Uu#;7lzpVbtlvc^2g&M4!$CeKn_vXea+!gAw$%)0cc!4R!0t>vdz%*dx zGOP=9OuI6Q6)CuQlehh!EtFq9B z_Fa{~yL@bU6TN^F*=jE|gT@30r2MCaWtaaf+ECs zYG{BC2;Noyl1284dr8sslq$ok|7`t@6McWTD7_i`4>MI`ktvbMMBC+BDbRe8c_TB} z#FS!l=C8zy?RGmUw)i#q+cLUd{zvZ&xZm72G1w&G-#bWY#S;!5<2-Y}eI)mE_o{mz zzW3dY?woRMCxqW`ew&EpQH=T^>hWk$ylqmj-G7c-7Y&zx(_E=u5AY@^OX$#~$FI4t zBmPd)BQx0JfACb)9L4B-cl}*ZiC!oE%k|;^A=nh0p#NdhO-N50Jdp*q;ERJF#V&Z` zzEb|P5Aq@_-uTXSU&JnO zcb9u^e$GT@1}lV`@NH&LVgQmKZJG0c3$O%?TDEg>1tFm=h< z1?r9<{qC~K_wHKt|5bMFVO3RG9L^ClHDr)C2LWjuLnR+TXrbcQlus~~iL}v(Og~2v z@sXipP-2)MQ0hW-luM`}h$t!#g$qcNUnUZm1SvkUG*i^F$+T>K`*AK@{8sZ-e_@Y>c@m2hy;VgQ!Hx=HHFyYM?2H1N} zVAC|F_X{46dTl{V033UMKH00=tDfn_tW694GV4n=Q0O}-{AU1yJt3lh9)4%iyeaO0 z@E5hE9IP<)b6D4MG5phyc3_3oC4h&h25I{Nz{*mNcKZ&;rAA}sjK7gUX0?Ipakw>q z(mQ#g*7X@+?EpJ;e(?{VoSZucu<~Jc!9aahL!P$*;Q)yBhW+8c{_|uwM}(I_x@8M_ z?sxT^P~F?-5q=MUta)bBeC*YN0KsGv92)bcM`F!0fB>0ndT44kWwFy20RmGW@gs&z znC6ynu7IDxRV@`Of5yt++{S+9d8?RBE+BVddIZecR;#`?CqBgKv?xV&W2LMDdO8s$ zgEcv#%QZ6Th3uba&0mRaEINZbK07HUQLVG)vUb(fT|xvlmp2ARXB767=YvbOyJ*Q8 zBpp3-sb-COKx}aGgmP@m6+&q}l;10A%8o4TVPjOd-H=NK?}FkndE%*)?;VkSH}SW} z+fNP4qw|1J&gRkGcVUdDc9UNc%r-t>C}qZm(Y2>aBUn>`%}d}m(77^6^;M4MQ*M&# zWzEIwllN6s~y7nGws|FCj zj`~ONhNMM}XIQQ%YHL=!HsSCHPh{cQMyvxf%MVaA{<=3D5Gc;Qap1-j|0Pd|U98jJ zp;D+_1QfF^N854Jqvke^0F*ym6i975KsRxYb`KEDK4&ie;gi(1CuaeIc|d>s#%DW? zOa}Y99;Aq5_|h{6#f^Q2Jr{W;Zlm5+1wp(d;6$G%qiDygaE{bBMIEnPE1~EV)k|4W zN@*!Dfy7eL8dA=zS(&kR7$!BJ5+x6-9ISW&i|9T-7(f5w@!{<&wWZXWqGkpb#0sH# zDi>$I(AI_?C7UaRvRnPNOwd^8I5s5b_Pi^gK$?%dSF?PtP&^kMLvlz(5ti4j5=6z- zRmmu)Pg9}qu7?Ezg=Y?5^IkmAjkA)=Q(mJamXccV6Dk&=;^}%6Q;gvKvPjzJHE~pe9 z@Miq+$-e!5&XjjUkvi+XDM^)7`9Aah*ye~^>I1J?haPtvFSp^qJ#wYxooW}Sx?8N~ zDCKIQ;}%$h9gH;F(VMQiub3LaN#oXY3M(v7Tz~D-xBp36F_E9eoy1p_wEhDG3fVaW zm7-y%+^wWDSWxVYbnGC?wxTQM?q(Ef;GzBcR{HMC!ddfB(4o1f`2dQEXuy=R?UVb( zjpO%mOa>b_?Z$POLfZvik22Ev4Y0xqfM*$vOX9K3l@WPgNm{|YNF#Y=U;}S!I(r0I z%>yWN7tPM(XCMFirS_vmM^RZ~q^g}j{B0u@ZN%RcBh~L#9qHUgycsjGSd1@=jI`NY^Q03v4e z%KWOgp0<@oKK6^Twp!=T$zgqLG`yK_Q>O z25e&r=eT~k_xea|Xo8TooKW{&9Of_A@mD*H5*kP|4{>FRXY|_}6 z5vwy`uN0GelsqGAbN4{cvg8}>5VFN7ut0fHc1Kw&T5p-kKC0}3n)O6YR0wON1)Je( zg-+mq0xBA^?tw>z7FpF#uKo4-uXHU!*b<#@`@x2>8IB0f#c9I`*vb zWJ&7CP)-rg1O$Q#ET}aT{1s?xzXASFfM4;`_k*fu?PT7G`4?!ET`djV0>SmE6+-vR z@P6WINMAq6BS7#Lz7s9o0!^J~qzzltp#c`;1?T{r!=%x;(=cuFFcPN7i>;zFP4-*W zziT%_v)%a(Fan3um0PWXxZ87-OJq z+f@IDxFeIpu%H#N&w1p%9oi?5{GZO#jY=Ov;Frh~I)(^+kikSh8v@Yj?{rbKJgH!= zwJ!R0Ii?^dC*(MT*#HH#8W7ISa1ef;4SeuPj90Qv04D6@NjwZV(Yb8sV$5;6pAF5m zjHB432+6wWBNRe`bWi*cXKTWdxdRg>k{E%jeu}PgQV*q$np}a|NjkN1`XXot=8Sfp z5b4rmPIso?Og=BdDtDWb1{puJ?*YgRdD+P{!^E&tm~Q4C7>1|T(UBcsNAEh3oPYaR zluvB)E5Aqxn3hCNvQoGe8zd-tY?3E{mJZV)G6r{mlWJxPX;KrY-!6zvnqJ2{T%}0` z*uk{f%TaqSVcC^06ide4fDUb{WTA%yH7cRYaELA~jJL zuS}y{bX$_j!V?5XHo_yWP-Moy1>4ca*#4ruaJ)iIv>6S;e+*IgS6`X6<}7GNB=s9Q z*b0g0RwNyYZ6l4|qdM9kUWudt8E2zRRGeczczNoZZJbf~;h7#XBt<&Ty6p)q)4$az zQK}m$z6jkP-&_okLQ(z*XI#F< zOj;v^uXEn?=D61^l!1Ik4Qz=Hc5UYZsIP;Jl-@0Lr3g35a`Xqgk8>J`r#UT&dl`&8dZUEmCs%yRuDnwm2rLk#g#=FXqFD8So@af6oz<FVD(D0h-(BG%z)a;f^Z*1uKc{l1xnX*qH8 zS8)9K(A1DtYAZ$F{|q3Qu73DSNJ#D4UJFH)7;(-DWtqNZYP^{E=2NE^siF+S3l>JZ z5rHg^c1Kc=awvi*va(7apCg~7JavKAm#Z$_Gcr_MiJy~irlN9nG(KSLu3YsT5`i}q zdq!n99kkomsI6Lv56lwMzbwntwyt%E!{^@kd_BLL{h|e5-%Fv8!}tx~Oo|kL67a`+ z^+K`f%kULBFXnr>rs6ZJ9VIx2+y3U@-->^G{IEJ|x(ABy?CaG*0iRkgx4j>=Fgl7M z)#Ho5oE|i4*wOm4!t>-FY`ir-XnZ_gdmKJ2=}_#PhWEEWxZa=rPlease set a vault address; } - return ; + // return ; } diff --git a/playground/nextjs-app-router/onchainkit/package.json b/playground/nextjs-app-router/onchainkit/package.json index 0679f21097..eac301d699 100644 --- a/playground/nextjs-app-router/onchainkit/package.json +++ b/playground/nextjs-app-router/onchainkit/package.json @@ -1,6 +1,6 @@ { "name": "@coinbase/onchainkit", - "version": "0.37.4", + "version": "0.37.5", "type": "module", "repository": "https://github.com/coinbase/onchainkit.git", "license": "MIT", @@ -76,7 +76,7 @@ "react-dom": "^18", "rimraf": "^5.0.5", "storybook": "^8.2.9", - "tailwindcss": "^3.4.3", + "tailwindcss": "^4.0.9", "tscpaths": "^0.0.9", "tsup": "^8.3.5", "typescript": "~5.3.3", diff --git a/playground/nextjs-app-router/package.json b/playground/nextjs-app-router/package.json index 1a72c2e926..e3e99631a8 100644 --- a/playground/nextjs-app-router/package.json +++ b/playground/nextjs-app-router/package.json @@ -26,6 +26,7 @@ "@radix-ui/react-switch": "^1.1.0", "@radix-ui/react-tabs": "^1.1.0", "@reservoir0x/reservoir-sdk": "^2.4.25", + "@tailwindcss/postcss": "^4.0.9", "@tanstack/react-query": "^5.51.11", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -47,8 +48,8 @@ "concurrently": "^8.0.0", "eslint": "^8", "eslint-config-next": "14.2.5", - "postcss": "^8", - "tailwindcss": "^3.4.1", + "postcss": "^8.5.3", + "tailwindcss": "^4.0.9", "typescript": "^5", "nodemon": "^3.0.0" } diff --git a/playground/nextjs-app-router/postcss.config.mjs b/playground/nextjs-app-router/postcss.config.mjs index 1a69fd2a45..27ae1c90b5 100644 --- a/playground/nextjs-app-router/postcss.config.mjs +++ b/playground/nextjs-app-router/postcss.config.mjs @@ -1,8 +1,5 @@ -/** @type {import('postcss-load-config').Config} */ -const config = { +export default { plugins: { - tailwindcss: {}, + '@tailwindcss/postcss': {}, }, -}; - -export default config; +}; \ No newline at end of file diff --git a/playground/nextjs-app-router/tailwind.config.ts b/playground/nextjs-app-router/tailwind.config.ts index 50d7d4b26e..cb374ebef5 100644 --- a/playground/nextjs-app-router/tailwind.config.ts +++ b/playground/nextjs-app-router/tailwind.config.ts @@ -6,8 +6,7 @@ const config: Config = { './components/**/*.{js,ts,jsx,tsx,mdx}', './app/**/*.{js,ts,jsx,tsx,mdx}', ], - darkMode: ['class'], - safelist: ['dark'], + darkMode: 'class', theme: { extend: { backgroundImage: { diff --git a/src/styles/tailwind-base.css b/src/styles/tailwind-base.css index bfe0007d2a..310001c337 100644 --- a/src/styles/tailwind-base.css +++ b/src/styles/tailwind-base.css @@ -1,4 +1,6 @@ -@tailwind base; +@import 'tailwindcss'; + +@config "../../tailwind.config.js"; @layer base { :root, @@ -277,5 +279,3 @@ -ms-overflow-style: none; /* IE and Edge */ } } - -@tailwind components; diff --git a/yarn.lock b/yarn.lock index 6b6651dcf8..758b5f5df3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,13 +19,6 @@ __metadata: languageName: node linkType: hard -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: 7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 - languageName: node - linkType: hard - "@ampproject/remapping@npm:^2.2.0, @ampproject/remapping@npm:^2.3.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" @@ -2068,7 +2061,7 @@ __metadata: rimraf: "npm:^5.0.5" storybook: "npm:^8.2.9" tailwind-merge: "npm:^2.3.0" - tailwindcss: "npm:^3.4.3" + tailwindcss: "npm:^4.0.9" tailwindcss-animate: "npm:^1.0.7" tscpaths: "npm:^0.0.9" tsup: "npm:^8.3.5" @@ -5601,13 +5594,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e - languageName: node - linkType: hard - "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -6318,13 +6304,6 @@ __metadata: languageName: node linkType: hard -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 - languageName: node - linkType: hard - "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -6877,15 +6856,6 @@ __metadata: languageName: node linkType: hard -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - "cssstyle@npm:^4.0.1": version: 4.2.1 resolution: "cssstyle@npm:4.2.1" @@ -7153,13 +7123,6 @@ __metadata: languageName: node linkType: hard -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -7201,13 +7164,6 @@ __metadata: languageName: node linkType: hard -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: 03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 - languageName: node - linkType: hard - "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" @@ -8493,15 +8449,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -9306,7 +9253,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -10199,15 +10146,6 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.21.6": - version: 1.21.7 - resolution: "jiti@npm:1.21.7" - bin: - jiti: bin/jiti.js - checksum: 77b61989c758ff32407cdae8ddc77f85e18e1a13fc4977110dbd2e05fc761842f5f71bce684d9a01316e1c4263971315a111385759951080bbfe17cbb5de8f7a - languageName: node - linkType: hard - "joi@npm:^17.11.0": version: 17.13.3 resolution: "joi@npm:17.13.3" @@ -10454,7 +10392,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": +"lilconfig@npm:^3.1.1": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" checksum: f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc @@ -11323,13 +11261,6 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^3.0.0": - version: 3.0.0 - resolution: "object-hash@npm:3.0.0" - checksum: a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 - languageName: node - linkType: hard - "object-inspect@npm:^1.13.3": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -11836,13 +11767,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" @@ -11988,48 +11912,6 @@ __metadata: languageName: node linkType: hard -"postcss-import@npm:^15.1.0": - version: 15.1.0 - resolution: "postcss-import@npm:15.1.0" - dependencies: - postcss-value-parser: "npm:^4.0.0" - read-cache: "npm:^1.0.0" - resolve: "npm:^1.1.7" - peerDependencies: - postcss: ^8.0.0 - checksum: 518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b - languageName: node - linkType: hard - -"postcss-js@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-js@npm:4.0.1" - dependencies: - camelcase-css: "npm:^2.0.1" - peerDependencies: - postcss: ^8.4.21 - checksum: af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e - languageName: node - linkType: hard - -"postcss-load-config@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-load-config@npm:4.0.2" - dependencies: - lilconfig: "npm:^3.0.0" - yaml: "npm:^2.3.4" - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 - languageName: node - linkType: hard - "postcss-load-config@npm:^6.0.1": version: 6.0.1 resolution: "postcss-load-config@npm:6.0.1" @@ -12053,35 +11935,14 @@ __metadata: languageName: node linkType: hard -"postcss-nested@npm:^6.2.0": - version: 6.2.0 - resolution: "postcss-nested@npm:6.2.0" - dependencies: - postcss-selector-parser: "npm:^6.1.1" - peerDependencies: - postcss: ^8.2.14 - checksum: 7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": +"postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 languageName: node linkType: hard -"postcss@npm:^8.4.43, postcss@npm:^8.4.47, postcss@npm:^8.5.1": +"postcss@npm:^8.4.43, postcss@npm:^8.5.1": version: 8.5.2 resolution: "postcss@npm:8.5.2" dependencies: @@ -12435,15 +12296,6 @@ __metadata: languageName: node linkType: hard -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: "npm:^2.3.0" - checksum: 90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 - languageName: node - linkType: hard - "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -12720,7 +12572,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": +"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -12733,7 +12585,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -13785,36 +13637,10 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:^3.4.3": - version: 3.4.17 - resolution: "tailwindcss@npm:3.4.17" - dependencies: - "@alloc/quick-lru": "npm:^5.2.0" - arg: "npm:^5.0.2" - chokidar: "npm:^3.6.0" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.3.2" - glob-parent: "npm:^6.0.2" - is-glob: "npm:^4.0.3" - jiti: "npm:^1.21.6" - lilconfig: "npm:^3.1.3" - micromatch: "npm:^4.0.8" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^3.0.0" - picocolors: "npm:^1.1.1" - postcss: "npm:^8.4.47" - postcss-import: "npm:^15.1.0" - postcss-js: "npm:^4.0.1" - postcss-load-config: "npm:^4.0.2" - postcss-nested: "npm:^6.2.0" - postcss-selector-parser: "npm:^6.1.2" - resolve: "npm:^1.22.8" - sucrase: "npm:^3.35.0" - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: cc42c6e7fdf88a5507a0d7fea37f1b4122bec158977f8c017b2ae6828741f9e6f8cb90282c6bf2bd5951fd1220a53e0a50ca58f5c1c00eb7f5d9f8b80dc4523c +"tailwindcss@npm:^4.0.9": + version: 4.0.9 + resolution: "tailwindcss@npm:4.0.9" + checksum: 92e5f0ff9d98b4b7c79419e21b02d703aafa86f1d9b92b039cc0ac3e2963e763c5c9bcfc2afdf9f46fc709812c1aab12565b02bebe70dcaaccb2773884cc0654 languageName: node linkType: hard @@ -14505,7 +14331,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -15194,7 +15020,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2, yaml@npm:^2.3.4": +"yaml@npm:^2.2.2": version: 2.7.0 resolution: "yaml@npm:2.7.0" bin: From b07cc536c7be4143c1135c9362c6101c062affc7 Mon Sep 17 00:00:00 2001 From: Paul Cramer Date: Tue, 4 Mar 2025 16:06:10 -0800 Subject: [PATCH 2/4] linting --- playground/nextjs-app-router/postcss.config.mjs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/playground/nextjs-app-router/postcss.config.mjs b/playground/nextjs-app-router/postcss.config.mjs index 27ae1c90b5..5d6d8457f7 100644 --- a/playground/nextjs-app-router/postcss.config.mjs +++ b/playground/nextjs-app-router/postcss.config.mjs @@ -1,5 +1,8 @@ -export default { +/** @type {import('postcss-load-config').Config} */ +const config = { plugins: { '@tailwindcss/postcss': {}, }, -}; \ No newline at end of file +}; + +export default config; From b7d28b3edc0a8959760f55c5717bd28790170dad Mon Sep 17 00:00:00 2001 From: Paul Cramer Date: Tue, 4 Mar 2025 16:14:34 -0800 Subject: [PATCH 3/4] asdf --- package.json | 2 +- playground/nextjs-app-router/app/globals.css | 6 +- playground/nextjs-app-router/bun.lockb | Bin 306020 -> 293956 bytes .../components/demo/Earn.tsx | 4 +- .../nextjs-app-router/onchainkit/package.json | 4 +- playground/nextjs-app-router/package.json | 5 +- .../nextjs-app-router/postcss.config.mjs | 2 +- .../nextjs-app-router/tailwind.config.ts | 3 +- src/styles/tailwind-base.css | 6 +- yarn.lock | 200 ++++++++++++++++-- 10 files changed, 203 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index eac301d699..484b7f296f 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "react-dom": "^18", "rimraf": "^5.0.5", "storybook": "^8.2.9", - "tailwindcss": "^4.0.9", + "tailwindcss": "^3.4.3", "tscpaths": "^0.0.9", "tsup": "^8.3.5", "typescript": "~5.3.3", diff --git a/playground/nextjs-app-router/app/globals.css b/playground/nextjs-app-router/app/globals.css index 710b5afc02..fb60fe5d76 100644 --- a/playground/nextjs-app-router/app/globals.css +++ b/playground/nextjs-app-router/app/globals.css @@ -1,6 +1,6 @@ -@import "tailwindcss"; - -@config "../tailwind.config.ts"; +@tailwind base; +@tailwind components; +@tailwind utilities; @layer base { :root { diff --git a/playground/nextjs-app-router/bun.lockb b/playground/nextjs-app-router/bun.lockb index 47954ba2599ffc77b7a03175b225dbe327703780..68d8252931fe339e999a1f70116c834ef9c8ce56 100755 GIT binary patch delta 49946 zcmeGFd7RJH|NoCa7f?e>rP7{| zEip+*UQ$RQsT7q;i=yOvy*soC4HD7mKeQP0~ zK06m)S3OWGZ{d_W*$)MLzT!S#&SVcW{-Tea;@0rhq^8QH4a%69H7?zE2jwm)Q15H< zi=of=_~Pgl&@(c}-jYcZ-TgjadGrbCX@e)CZz$~6&(5h(#ODjEAVfK^HVu>ptAJ{7 z>ZHtxX=8@?MrVv0B2zx4yvmKElJIA+3U~r6SwMfWsLxjd{W=;c3mzd~?M=)al`)8R z_MwM;*}j}96Vqwl=NrUu%1~fj#?UNvG>`%^d~lYqMmX+*oq3fsi2NGfu+C~K>p<%qjv_8GkC(_`c0eod>3e4EPfv_* z=IiVDgB7z|#rS-eQtSH4KHnAKd4?}nAMw?JLPPrBhooX(A3ZlP_AABYEHkXX7zCyW5%k1 z-PEoK-{Lasp*f&DHqAK}te(A=T*jO87^qh60X31+Kuz=*P|ivNwbc87s@>7U6i~xx z25MebVV&yFsO|G%NX~GO5#@9R@kGw)I@aosK&;Kqd7gwi*bS<~S3SJ8o}HaXy!>V~ zK-)RhueAP|0IK}!pz5DwGNi8oWzg)atf5t?CpRti3`?tT4LbrB^#y%7`y79$B7wqI zACjIqkvaF><CJ3w z)6r#2MrQqCqs9*MHH)`iV#5y^k}+Z2%jjw^ZA{kaw26a<51NoRI6c$nOJnNsW_Hd~ zB(z4)f+|>y(P)&nCfZ3o0&07l^G5$6C~quJviLT->TdxxZ4WiK(=!KDJGX(#p8#t5 z(npQT7&kFvaMfgayO=MhD2cLU_?_Is)w3V-)>x>O&v!Yj8^!R}&n;~;b7O7ueN(J? z<0lLrJ0#ub`wd-w_#RX@S!ol7F-%{HtL>^gAF<|q1IqkQK$*K5RQYzP?(jS39Pl#U z^6-Y%wxjN#I%o^3LTVd}uX*K$W{eq9f6_Q#%r&;$`8LjoB3HzwwY6?t4yyVoP^-M9 z^K_Bw*~8k~(X<2QqY0k=Iw&Xh^{_H1XZG%BM^(quM`cW8tb~hBmY)S`&&7f2 zmHhg{CypL9ptJ3-6<)%TH{?uC8#OUwtj`w;*ij~TvF6o`u_2&KSD%mVky8l0I{0%D zn?Gq%hI?6)zSUvY3k5EqdDS>%q!r2hcV6^lNRY;b~l^#&DHF z7k?9|HF&j`pXli$dfCa^Onn8KTJUAS8nmnOW%}49bQh?dmy;u=Ykf0nsZ$KdjIMJqxdnGcwaAOi0V}{nX9#)ZmQt%n_Ns z#r-|QJ&eZoL0sl_1v%lB-wA4-R)96=Kj$bDTLRnHUUeb*9A2Nxztxwj-C^=pt3broBg(7X22ckl|$_u z4$jO>&m7Erp{wJU*u-imD{Zv9qGI6X%5(5Cbllj?iPZ6R8g4za8(sq%lQw3o*5cP* zxe4i+V@FL+_wCQX|8m8y3|nv$=r-i((F4a#=(7A64QMK&5%qnqgYKB4DctJm>pgr5 z48xC3pD--FiO+ZQXlwANpazsY2LEVI?;2xW)x*gvR^4CLIaaLVwcoQm)Y-)0>0@;8 z`OwpkgX$~*YU8^x9nWoHj!U7}%(V3?dH4*dX}FN-bh@Nk_8N+*+0hweGRCE4WYA4gZS_k-#-8m*%E*I*Y7if>M_?L>p37v1XRoE>XB`~=kOcbICg zsrA7)^p`;Km7LPWt7ordZD>kXfHHH-Z5GF*PjTZ}o9TA()%CCxNZ88xd78zeU?ueJ z9=-&s^~GQXa3-j!oeF9u(mebj*VVIg`a;NGT|h0SHMd*64Y~}9F1kUJG6#*#^7%I3 zVHI%IY8RzV$r#Iw`M#VfzjF#c zOhO)b4^)Tm++__JoiRGS{*XbwJalz%-z-}$Ei-G(;E@>sezuBYfsf?{+imkyq9_4c59 zD5V4OwHMm*Z-DY>n|rOntI@T>mV$~O4IMksS?F$jsNz*PzraSWFF-Z8*Td$EY(q6b z8FC4zhR)n)%MG~ScCZoD$esa9gRf9uD{e6;L$kmdV6O*!zRSRj1wQBTQnf1QF18*T z>3NE>?$q{w$oZty71<{rw)RdOJ83YH$9D)_6UL>h{?Jir!?vNz+zp_{{ns5=c&VMx zr^%ODoDN(w)43lSGtuXp|CrBL3w}IU4eaINv1P75o8}}zXdE+_+i_G!*UZL%ny?=! zs2Sc1mI7-&>1-%n?b;GgSv3gCu8c85M`a8fK5=Av)?`fZU9!URd0w?;=$h|EpjLMG zr!BSy6&a2^?bIt%EqmWH)*Ttc#*Cdn08GyuHz6I&dDil2gU3!F-1*W*xV`vpdd@DV z4xp@@G$ErtmowkENn^5faC@2VwZ4~wa_a-2y1(1QWiMFwJphJ%zFs-GWN19MfZDO6 zJ^b-SJKj<0lhwcPOLXPG@8L0!2DpN!kE@@N=^O0TyJ4AAxooxU^PJ|??6~@)#t!BZ z31*DuP*ro4<v%c!FQtAW?N?GHx|D?0Q&CV0I&G6RpxA4+p$S{; zOuY+g{|(ObW_+{7Ug#QGYfuZlxtG74^78D>p!R3NR@?qEPD33i4%F+isoCT_Z(V&)4A5bIe zjz?6!HK>kneAn{vo_^VTmM;O8BR>x;3m$uwfn<}ojDjM{ff`xbl=S-S@ASf+{w)RN z;`c#K)tRNXp+^tc@>jiYM_Loq-qWdMbVlaH5t(Dh#QS`{%=FQdb$GqkE1wOjzae7> zPt2Z>F(!QwL{*4>pgQ=J4piXo4{gVppf*YL%y$#I%DGRw*yY{OW%!k#>b-v0dZaA6 zJoM`a7LzbWQx)CSEkEMHi(Jg9@$6kpZh ziU$hC>^R%3*nRcidt=qd_4*a^zw0z_81W}LS$wZ>);Ej| zEWRIe);Ea+z6m+!nxyzIb(%Mg`0sME_(Saft(qqL zA9b>tMf|rq>zhTwt73e<1j>Y*+)t8XP#U>rU%D9dC}cBhk-5(x*`dh&PJ@jsXpgJL_%ZIT!s<7pwspOold<77o5 z;UB!>LD$nYowIO*i3TY&5pq(gwG52~jgxaDiT)3q^;bv2B`f%R&ESGAH^yn68VSDx zcMY6ht%u67k*{%DZExwECGR6?ZX4u6~wq9Gc*!rbUv&he_Sw_RpFLCsc`AnAbcp zJOZt&o2Lc0*2!uc34aOK(dA@QQ{sZg%!D&Rx1z~!EUZR}p*(5sS}IwMUmp(R#Rf^5&Ch+Cx6qJKv#c!}#4b zli)P(5(#H<=#&wZ!1(o^=9UPbMYF!8Wq+d6ylW(sd4hdIKeb0!0zjL-{BvieAbg0>+yrFJP zifLfi7(o!PbaBpJ8}UEvH18GhzvX20iUfXd=xpef67IkX({>;fGP_fq=Dj1@y1gTT zvyGe$y;H(hu}V~c3C7X^Xj+qYKi}hI^@)UEgG+F^RQAG;Xxh&#B^J+BRP~kzwQokV zZRPe!4BbnTJ=`QYe1Mc%aD!6llBO&_cR9BsrMBp;5n;{K*fsQX1nnA|#|o-JC(_8H zpUG&QTur-k3z{59Tw)*nj+WqTN=Oc+#B1N3Pe=|=CG|%?8_{goCq#yS%Foky>SHDi z$Rhd~iKcx_>`zP#uR)UyT$gT2ib=GMu)i>`C7PXJRl66hGX?D~J%!dPU#o{5`AZ?3 zftJ5~!mIwIeS>DZ(;%C$=CnbIxNd(DP20=o_**50FQ9quz?P1TP4(y1~Ek#INK(JZ=6`R{br4~&G?!d>kK zsk)4DkTb1)vVX3Vb#o-V4qavt9q8&eH0=jBB8EpZUG1Zq|1~EoEfOw*S2T<4dCYE$ zX3dtCi^g)uDe2_)N(|S;57)Z2aeZhKS|?}POI#@iMZzIEQ9or|H+3iJ4W6hx7foYg z{+Rb|XmThP5z|9X^C6M&_|`T|x~o6D9ZeR+xKkV=Sg0-c&=KzJX{@;ql44M7Q(6n# z(c~s#B&L_e2WrF~czQ~6F9q{SX(nu`?P#jQE@iIIqiGvq8fG_aYc(!+v_1k&gTM^( zUPSX+r`|ac6Z!XWEG5&?!<4 zoK{_v!^x~tdmZ(&*B(LBvSr3G{sc)4g)3*Y zo#vw>;SO9<`?~GOB^%MK6Z~y(C0cj#!cOk3Nlx=I5&y?d7T+zL^?X-%&hp*eX+AdM z-{NGAjfC5nmnh6^=)e1j%?ZTxN2tH8bsPe!x#H1)6M=gD7Z(6s2V4ZkGx&i4V@ z-DnKl=7kQT5pOw2)as)ng$@!+N%gb6V#Cj9436?zEA4S+Z)aNLVb-(U>(NemsqP)-flO&~zLo79=JH&h~RQOil@ZLsl+=1lZIeVGt<$y_^}oJBa&iJRFD(iki_s0Xqpw)4F~@lqt2AU z>CV|Hk?<}!4bI)@;W);__L92^=>yR;!S1Cayade}t)O!RO?%QFQ_4D7QzQO9&ibj5 z@QVKV5uL#u_cR-eFB=fuk(%n8(YU_QcOF4-5n3V|ONLAK+fMV_BL2Eg)@_mSoPjX+Gaj6s}RsWXVBx zu-qDug~IC6$gyQ58f%8$^Lle!8*KAzsMB9QG>sg{*_i9mTG)ClrXRdK7DvmZLPIF% zv>K8e$|luUHz%Rsx7@AhQ+fnEM8Y?g{Iehsr+llRR z0Geje-PhrJ&=hNk)T5JPP_A*CV|(jv@AgROy5ZVd=hwE3A<>ddJDs1R*}nW)iQ$SF z)=ecfeE$rm`JLQ^!C``()X)th6ys$1{mxl(4@r;ahAWPY+QfbfwMXmWv}%zYHl(y@ ztn2oB8l%PkWk=Z-2CER{YbYUvO-H+DJwUYH8I*b-^&JRis$Bp&5S4kFZ!^BWGv;>_+{m(k< zXGi?CowKte;VI*y7bid0z!%W2vi5PGavqI~Q={Z?`|-9Eb3>_VXd17L(;Lw=rb6xp zI*;bX@X3k(>zuQ5xs#g^z4=v~YLHoQLyYn?Rx2&9N7G2y9>ljxCfb&*U%R2{0vUAs zc@(XQTT)(rH(%2>FXS}8hsZt2mZxP_-K}U^!raCVP7J?+X8X~sRGOS00=SR8$;q0} zGY2@0ip{}B{RvIA2{-h%_!g_#quxGGvp3%*rr7x|qBR!kB+Y5XiE}0?g%TTB_MvGB z+xwqNS=J-i#^J56r@80&@O^0N*?RY1X!0(hB`eXN=B&Rr652kMjq6Nnk{pV?RVN<; zXlO7gb|v?~tDW^uBzzpb0rl9jZ0EAKSq)nlO)8pf!RO5R3^cCNJciimoV_oi7{4eI z%AU^E!D+Q9IrM&hs$sVF`!v(Ckeg8EAyU2FVhwYmsXItr>vH=^v0*4zD_2idNcqP* z>x~}5oHdc~1=wVFa2Ux2IqLy#18=wP#8jg5$7ou3xUF$wsM;M`&}yZ(ll5REG#9;@ zyIgmXlC$l>l(@M#5}0(S(;^`yeE3egDoVLQuiOlK{&4ToLp#wL>HZ*ac7`+cp_D++ znaNBDEJBzG8jtodrQ?OL?g`y1x?d;}e9diXQ60r^_%xzTI7obfNT9^~0r zQtj^iR>&KIrig2!;0CnT`K?r)$KQhUwP|Q-g_Y4IDF&rWezn+p>=nT_G7`-WL7l&d z*3Fj03FpzYEbS0(ogdB97TAf_*E#=S%a{eW5a+f&iQyItZ6U1Z;vTv;8c~?~K+k)f z7Rw_sa2?!6iGtxHXxE}qo@;!PW4-R4bwU%+=weE8cn2vh5d1tjF z(nshyY3|9S{i6J~7)mah9hhc!51O?>EmXWedY9r)NDPd*-)ZqeN?`Z>&Q#zM<7{{# zCEU^2MFJg+B&^MHSNR9EaX68MGDvlB?^ahTW!*bA zFvG5@@IojUR)qm2O=>~^z2AcJepGjDX*39irA@n`8MrZ_m z7H74mqSGa#hoX5)lAF`zXi3g_4#bB^sSXDN%&)k@mZC4}^g&bnvQxYo%??eAFz~d^ zW3FZ-#dwM}{~g3N9vEwQS4<~*e=6VY3?omEu^$G+#C7O8nh&r zKjoG8W^PqeD^S#7M^=w7XBJd+reJ7n!RH0yF*SMw_GUN4NP{E#K5XooEAG$0)e&8 z)Ez0|o7YC8M&3A{eWBgpHmPa6Vx0{H*31)V{mHXh&-M0x#A?gY+UDn-M3Z3zeC}21 zZm@F^b{EQEw0QE0IsRvpVo>B$y9$q?*?G{mx@=?qI^lGA6Po;I1K2%ieb9KEc6(AG zlwQuJHOYa5SDmSErvz?))!FcNO8C)Db}UTf4M{wvYOy;doVz7@;nlML0_|FwvGIRY zUUbc9=RWx-?PE0ST=GJ7UXNamCXj03wxIT&L$lFClm8`J7xzZI%hqTpC5*ll)4x@$7rwV)QtMN4om0BcF91>F8&QVdGp{IPX> zGkPA7o%7HX#A)v7q(Ug13|A+IQ@2M?7rHZ9h-R<3he+9BY4EW--10mnA4|#(J~uBZ zMzq^s9z9$@vu6{uQ0JZcd}-y()-SaqbcDD@7pEdZtu`@Xk2&iN)CTUO4}YcGTsUY?KUXv-q?0R zQxGMucM^{@TO3OXAAw7PvjL_22b|j661oc9f)?*;?18{@A2=;ONeS=zFlsQ<7pQT_ z+3-n9;I>1~Ir7#YvJZ-QZcRWqgQnHaW1HTIp+<-4T)QSTkyJPLqO*^brh`>DD=~cO zk?2(E$~GlmlPM?Aw7R%M<@(t1BRdc@`k9B;nminulo;6ak+b1=N~rizI@dun(Eg~? z;`5Ziw4=_{&r`xL!KYHVyj%4&nnus1gUd?YkFD>x)g_$Xh}MWa=7M>e>uCf~y4;AS zE_v*JI5BYkW2eQ5lt7zf&eRhvvTOL{UF9%VVvk`rSGHITN z3qgH^>hfMh_3lIT0h_oD8x&%hH5wDepB|0o0s>Z4CDs5-P5Y^Ynt~cXpqu7*B~d$ zIbQx99?tagh4RfDPybJ-kh#z+R{*o!j_)HwcHQq4D2Q4ePr|FCXS{OHdF6zv_kx%I zvWKsD`2|rcI?v<(z&5a6h8o)H6}TA66K{I?1(EpjZN<{6z0=DT`pxdbo_pU$RpmV% zzN>8X_dMJuh0n!MOYlSTHTsW0wR6lXUl7&(r|`n#pz3|4wXF)@cp2Y;(tiN?=lfA# z9*Y0jorh%6&RPlzME>yCy$2akKp~evpic0i&q3llv)qN_c_F97~-`3OH1#p-? zB-{e+K~?PR73}8e*Mj`>_4f3Bo_>Q!K0SJi0a~Dc-4Otl)lWv$G{5c>p=ebHt5S@wp-yfkGL2rYYSg8XscK5 zVyKR{d*$Bp$`wQzv&P-TDi@E4C4DtXS+h1yW+Kz#%~EDWlC5s@A$S=7@nf_CF6LuHEdr9Mh}75-mP zRm<=tL&}2X!8%@h|Bkl*|4@M1f75^rt>-md5XE2R@dZ&-L%w8KBQL*E6_02PifiU& z2>qsiaW6C`dD+Qcc0m-CqT*o0%NI(&+S3c7c6S$eWp(FE_Vxseg9AXVrokZpd_#kT zMim(D5hFqAqdgq!;doHTkt|Rjp_WKCs7vr1P+9Z%QvLa0EVu&HHh2-#u3ZJ{BUJL0 zU{jm1!OIY;;A@~pxEYkiZ-DCXEwF@B|Cfr{Vn0UXpYKz?)a`L89;)`|=<5EIm;WuO zv-2+?|9rpd%fk|2n6A}s2~hP*f*M|BP*JTBDF3!B0LctD7_n~f%WkCKaiCz%Wfp&3NY6zP!Lt|4v!bgu$i9zpHLm&<&~e~l^2Si z3u+z~W_uY63!pl5yn^?6yihJ*;^{(_Tk7dTHTN@zq+cm$Tqs{f9szf;J0>s(RoTi<(L(S087 z2Q}tHpf>xbpsF4R^%1Iz&prGCRQXe0zEJt!czQupJKuTvr{x2ENa%++K0kX-1{DH{ z2fjp5Z6t&I^IgrC^4oxFsI7B; zxD@1{Z#iG;@EK6$UjWt4N{?R)>LXN#>%9Dp9=_&bt2`3?^S$ZeE>I2b0oCDN58ngT z!2u6H01KJ(<^0v%Ttf7Ayk74JY4AE zy#|9Q&ku9SbCa&l*`JG_6M za{lv_)2@Vno^tZIipN3!Jmvi7Dd)wXdg@{3KTkRHpK|K?tPWNG^(p7t*oyw;i%j}j ze`gc(yuY~FM9RO$gxC46^S@%!1Z&ND!8%iVJ+R(n2sW5J!A29i0eIDn7i=;+1+SSJ z8-dLx3ovz7((I9qG@EDYz6x z!A^5h@Rmv44D2!w3f?xS1-nhhEx^CbGQl2m7BDMbq1paK3B zzYYVx5T5TOr;z>qQJ-4^j0Eh!0H08xWN?K?uDtd9p(s( z-*4)^i^C3znD;J3(0m|b)((hP??Hsj?Drs&c0!yIQN%Rg2XR8gl6??ib5g_uZ$Wh3 z4^hlKxF4d!E{O9YikprHAbt_?`~irP=B$VnZ$tEdAELB*`hAFgyCI4ngeYsSKL`=? zFNjSd%A4>95bH#Y{s5w)SubMv9*C+RLd2Sk45~oQXXIu|vePLl9NXP7zb~ zLexJDQQc%6hN$x{#1RoSOx+_82Sv;~0#Va^AY#^g5UoCfsAXn<1d+54;*^Nmruk8b z6C#!zg{W&zig;i@MAwfYt~3vR4AJ2L#CZ|*O~+#pzleDL7(_#JR>X?;A^Lv;(bzow z2}Hkx5XC=*Xlkzi6e8vWh)p8mP53j2bs|Q829apiix~bPMAhRE%}vH}h)Rbbc8f?h zv7bZi5Ham@h*oB&h$)95>VE+dFQE)(&rG9zJs{Y=!Z6)c78v&IyPa-$SICy&?{Z zi2ng%u*v-aV%ABB<08^c;~ycCzJyrxBg8OsOvDKhZGVEuFbjWzc;G9DpG1r_sb?TM zd=2r$8Hmy5w1{6s^!XWLtXcLm#EMf8pPPSJGv%M~L(DU$Mf@V7PXJ=RSr&j;@e4#K2(i%g3_|of3$aFo zWBi36V$MON7lK%1R*G0BqI?L#n6wbY@LwUeiFnYIE(}rWH;74vAs#Y$B6f(VRRm&* z8D9iq%6W+WB9@vOF%WfrhnNuqvCQlhaZp5j7~*l08-|#50phrbCrsm_f$J6}1@J{t z^ry@*=_kdi6~zRVy#Il1u?uZ#5NJ@P3h7Qm5M-2 zDh;vGlUojAR#AxK zBDR^v(O#eoKRUBDLHxASeP0irsyOvI$@|(|^1h$0QPvB4KW^e02c6jDQ z_m9;%3)VJn7C7o>LQ5wEZV45dhMlTXyU?He+abHc(f_ZD)#mvK9i;O+k`fwKMdcQ~ zYKi-o_?-A9=J!b8%}}Lf-k^VQ2el2?766GQYrfc7aN|Z(!AyNX27i65G-p> zeiW#i{rd&`QI6i;)dQC3pZKG?>gneU`YiIw=oEdMSMYw1)6GWol`_2ntTK98p{FwV zEcQ56yUudiz9n8|-NB`L1t0M^y=~J0PDU;DIQT!DUpqW=U`s%RWX3|Ru z`sg)cwV{{o8i?TYxXbaZRqtUmbSYkl@e1ngy;KHp0or`HE( zd7Z5ExQcLJl9o{~dt4>bM=2+xR(YJ>q+E+TWK{NQkJS9G^T;(G7YC>RBME(8@wh6a zi+S8ykE;q-!sGO&wp?8eDeZCVJ+3<3CPbeNmdo~CiZWCTpN){JQv(?$g3l(e@@1r> zuNdoXZ!NBx$aZ>@@mk&L_;O?>X?VCa&a_NYLZ-X1J19A^Okx>+>(YL!xwjq=ZN6 zm2oAtQcHT=J07QnTH53ED!G!4kTM?kuE#ZodlS*;J&$Wb`WBbrXC!d^^JVMN(MXRx z;1z6!{;P8Nyzg=Gq<I^ylFD-LM;@0<`U!7zM?J13To$4cee7|qNZ*aFYGfXwM!tejf2qhl9{07!wMN(0QNwzNUgg>#+BxFB@wjV9Yhfx+ z@7AkaTST5w-gh2Xs;GW=z-QmP0dwfPKrItl7OAR~~G$S7nqG6or2h`=z8#CT)^ zl8H<-JwFfB&Yn&(8_7Ww=oQ$nMS3BRYM8UluqIlj0X^XT&+9Ms2PRJGpu05+g zs`#vUtnjNas<5dT|19zxqUcC8%=RhNDYPk+DRL=NDKaS%=>niPtV=6G*gYzVrru6U6<^fT{IG zAhBpi=#o%%d}inufy=UMpkId6MD)B#uiomlyqU;dh^{ZQkvYg*I>LNGwtXsj3$mPt)*^ z$WO=_?asYWBIf&@WnTKpewjpmKI}rVXaRf3F8I6oZ6rpz_hY^Jk zg@=z3ZU0XcSrs7_=@dN`ezziu|GN0-LZu5+3XMmQADBA*9AFo+7kLlS?+u#gl> zNO$!Qr=Q;}A^ixVK&harSLb!5pN;7K)&LSj3Lzn+Ffs+1irk0{L~cd~A%l@2NV?u{ z9ZF&tG91zW?c^DbW_`fENH?TA(gUfET#D2{E<^MZZdVLBft*AX9~BP|W6;OQ9%MH% znStqdrTW8lG2{~DQ_3mu?h16q+hlG)UPZPbA5&m0@*<+2sI){{A-i$fQYr`-D$Q#HuM5ms!$WMqaFnUq`OXO?h76zp^1oQ*2 zJkp;A*>|5oL=gSXN5A`i2f331GY}n(bQGF{%th`-<{|eW^N}oMDl!%sC#3EWFdbP* z`emdyX`Pa;LnM5 zzSebgoq}AAq#~`6OA-B^ zyDoAg&G$zJBfHQaq*;UfO!^G+IdT%w4~@^lpF{eQz8<*&xe4iy3_xy1(vWo88j1|l zwir(0cPb4cV+b-7>A)nEV@#XDro@_7ND5L4DUHM-?~pf&vih-;j$6pMgP8CNDUPI_Y2A* zZ=vhIf}x}A7(^q{uOjse$+t-7z|BO?k=8NxNkm6iom6!)osTR){yO5QarcpTFQP$K z)F@@S8g~5%bU5XnI%{;)DfDYH-UK%w=SlyDXg&2nIv`qKUm;oqCy*}?EsB33uOnJC zo7Q$c9hiSf+ts9L#+?UQr-k?`vH{V&=u)r|kwG%-O+=%Yae2rVt;+1~gR@&-T;?b4rnjRMdG45CKXl>Q9MMI*txwT@|N5K-Wq3=fC zwvF1>dLDEYjexyC3#R|BaAnFDE7ZFY&I_Z6Z=v?v`qSM{4 z@V_96j=GaP1M0t&@B^X%{1YNxfjJk^7UmAdz00{CBtB%j*U!!DtH@NG(Og){vK@ zltzY-)(K0;slrGI(djFI$UPUx{~b}j43tsoOs6!R%1RH6fOmfAng$ut)s>uI&A~CMl=JqU&~m zg0g-vX&KNT9E7AHHzVqFfLT~LSUX!qU83*{brR z?2=8Tz=HNpHYDk_%SUqd z03_OuCPDs-mSd4+7gYX~)>4<lehtu!r}>&Vt1`y%?=$^>vVeALdrE_4Mi*{z^-2`C5O zP5Q5KNd2ru6i>9Gy~)USm%5g%42X6TZB&l7YkltN?j7%Uc)~?Pu}_H zF;p=O?expeQK4@i?;YbG(6m9b294MLa!K%Vf5q}-)qnAs8a-RiiUj-v;v2*_ZqT^# z5Yx3puxjBYZd$uqiKHtgOsmCcBji z7LHT=Do)je*Ed%=ROH<4s+!P1f7rOgj4egg`DS*h;4oeRI9-Ys_M1rQU~K$RYL%eY zJMrauUw`<=BIW!kt>POrYS6@uooes-O#@F&YrFIbnQU#DZ01q*Z#tB%#reBB9cGwA zg2`rcXSe&3Wq>@3*LT)%3Sh9tilSH*U~G z1IRE(RdcebUzTqFzMNY?PDv{pyfUmm02HOY4d%j)!PxEjmrhE*|KoNRIM zx;B)K4GydF6RTCzdhWZVs*lvHnByAB{%geZJ@aUlV5Pu?5@uZ0V5N(!PZn@fEvRDV zSS($~nqLJkm_2d8CeyGo8)7%Tb4QcYantAB>eW6rgZ7)U95CQ0IokSHy}xCjZ)E+c zZqKf1cbI8ZjdLR-1*V_)phM5?lPhQkHdRelF#A+1c-J2g_`1;jaluMe{(axF?%h3a z3$QG@%D%~FSR8ZUnpwFrOF~{4mREDpv-2dPDu}IZm z*DBAjiL}T~>zSddjVrXmCRUjixi=%cLW$qYnI%<&)&2dx+MrU$w$ed27Q*9YV7$JD6z8iyJVs6C*@7le;^ zJ8yl>ylSl4x#kcp@P1Qv4PcciSsmDJc1t^E=3U7mJRfTwO<+I7nz+kglgvVux!ycm z9Sc4)N71T$%OB4x(a-NIme-m3T=>gBETDF|OM^|~`tcqBg>ps~UpH{n$D0cOQR0|M zyOfr;nr~|co0=V$1}n#nuWBc9!I>u>-B2}1)Moc4YSFAU=PwO*4V|DBAPB|2QH$l)$%@P0Ho$6fC~;GAw?qx_bo3Sz6+WZ+Gub zc*||gHDZm~D^L8{X**2ynoQl_+i=8GP58r|W@gP`WnRx(MkQXt-pJUk3%W)PiECEF zdZGSx*A>5UQH#y47u?vNV#Z%iwT@=s6?EB$a+l!RvQvj{tJ|dZG|Dxyp)Ad8rd<3O z3MhQM|Nio=*F9Gv*7H5?oJJ0tCg=6w*UQUS{#9|5tDGEtk11Y@wjZN_w)eTOe;;$^ z*}R>u4Q`lRYf>q|%i%ZH!t@qqzO-rPX=ww^5ovSG&$YOG|GjnU$*5)$CHa;kDhDI&!}Je8hx84}SQsKU$w*F4Sg>!%fpV zTxcGtV}08<_LbW%`Tg1Yo^LVZd6Qd*_FgqT>(btC%E{Wc3#zrx$b3nc5zpL@%pS@G zPS-Kj>axvjwZEudEBlcN*OeSHsZf9&ur&yu6V4mod{ z`t|AVAO*C6M&EUZ@3T&;?{^DuAmovrNuxmE_Xg&+`b=JFv#5TsX?$u!yM)bvxnpbg zc>BI`{@O4Kf89atr<{Q|%`fu!JGERR8gnuC4Ke4{)dUJ?GyfWFeD5{mbEoL&$@(Pj zOgD`iFr-vVBqWawY^@Vc_($2V>-wi+)&1s}F zpfQna8Acj^T+yYt)el=%zEvuII8}8(V&thv8guwo(R!4@+^-m4! zYu=SUWKJb;t@W;papyU?>L7ea*@kmo+i{alSBhXv^xxh!aTn;u)>b^E)VcSw?d=kJ z-PS){ms0mi>g#JZCE~MI=KaLrLxJy8%%#)01pk&|?nw#`<$QCrIk~Tyl7hEPWCKg< zK*a8l_lwQE%ra$H4zoCF8{l$!D_rG2CHBOvv0oLAmaunS@JJNG| z#;K|U+#GjRmN3s!HLhK%UGaB??yYku`OqN>Xb80JnbOt_yupUt?yc>X`g+I>eU7x; zat%cZCMtS^sow%KQrp-?bc6rlL+yTE%59L_mdqeWyRmQ2UER`3t=|4eFEM7xoZwaF zsTSNGrM2~T-+NzQK6PxV>nW9BqmpYx)F1xkrg5_Coz4QA7dX|{1?QpEvV!&(xy%##}z>qK?_EmJ-aeR>2B|;u|z>XZ$T8 z`kFW(ZWt9g)aLYmtxT6ihwjewDpKxs(_Q72G$I7!BJvaas%RLd^i z=RbL#2AkT`#1&?93dYVdAEeO#6{dKE{%28~!*tGo;+I{~ecSpD>fauv2AI?cm;2-{ z_EIr3Yu~T&Ih%KBB{Om^P$4rv5*+A%#C#hG*6?>RrLU&-n&!%@X+6^nM2pYuW<7UL z&BmMa9*?c$w(cHT7Likyev>x+RHRp%bC+`6^X^7hnCGb)x03>#M{|z1c_$_`e{C7> zrke}=33E(cd}hk0a=Y;&lU;&x-_FXd_hRiAIJR&pb8k0(>Sm^=5@Q0!q*8vM*_Dcc zCC%~FU~XJace|%b{cuOAidT${_belx-)(YRQ*N0#y_Cg3_BvfnAxMO8YXuM zP|u{b=Tcjx4fpKLOwTq@v&~2#u0>Bf2gN@4aZ$flijDW2N?V&vUR&D2eFx0Sr>XG= zQOg`{XR{Jb>SD64HZ`sRx|{y(fSXL7LvLfQA&Aa44PPNW`99L=W>bMuBg|=OURAH5 zKl-qQnb4MsUZ&T)TPD`;8WHPvjjK=yZ z$~5Xgx|u1xf;sj|d9$&}WONKRs>Z~9(9d2=&s6ZwjmxOcjm7i?`&8_t@pq)+CKGRg z8cqGB%o4$+W^YIOw85UAUxqrdAEsSq_d{*}@^(|#q`xx&*t$?dR#0BJ1$X7cQJD`D_Lw z*G}WWan#K35^P%KGtPU8^0~=H4sJ+T+KmoWfDYJ-A9dkb%s|Gh3)QYup?;}XY)+s= zQ|5sgDrri0#bWnvznqD54Tk=dCZ3QTfBVfgYFzTnJMXk8^so+DL=!zFshei69S6F# zd+MwC$C{DjT_fK%&#PtcIa3pJOqv%A>{BOx2-uKkP*wWUhK{P!+MOF*deLazQ_#8w zaHjbE-Gk+|ZAY4E6usCpG9J4qEY2`1^*k&8v6g~Pz^z{?{~1|+X2EA(CZ{_K*&0^= zuZ{}%`wq5C_}`5jYL0a$0Ncm0rb-W5u@4PRj~>CRSiaMGU{GgcdIaC+M_DW9^Xz5M z++ZmFrF84FDOEDwIW}v6ma+yxm|9Pcrg~-ZYM;%X_q4soYodADYBu$xwcRFeFz~)P zEp56frX%n%YH9xGOc=4Lf2Wgrh{JO)&A&Y($A3)$#p*_5_dK|;;xsqtaxJ06IWOn> zXKQ|0e8%Kgsp?(&W6V6YU1_MD`R-@8u6ec4pv4r>+QOnMP2RO^yVuQ6f|pF)UOeS- z$qHs(uV7--)=uVVFB-Zj!$z_vWrSm zp?9zwk@&m{ylgu6p`jk5?S#x7a^K2VKiqkghP2|a=w_2m0le~HA1vBxb_+f={=Ses zOdJrGJjPyr?kZCEk*<%w{1laS+2s^|m+9V@z4XagdtdNS`L$nGp7H8P3h2omt)Crh z9_h=Ipn%!i7i-Fz>etckhh`a2<@h)oovxjI;Du`aIu-Rs$GZG}oEdXnuwFQMyzSYo zaAnQe6YOo;;~>v{bGB5jRe0mTn?H6()3gEiL(iFSX*qrk1vI%cO5HSS)Sdo^t;M>Q zZy~1?Ik9ERjOtyp-y>0V5Z&wSC>EfK#R>WI_-G7^g^cD z(l2;TIBJi3J6k?PE;sZI=QF~hCiQyYesd!b_xNPn>58o1$2NU5F13)mSJmrVX1)rv zyTumx<=m~qU+;I{69Ioi7~N{MHOFq?F99P_wHSw7zxDM;N|0yQFj$`Whld&x|rYTVydZRXozR#Jff zYJ>i!Vu}t7mI?EREceN?%XQ_a)Ln0)i7wM@APGGA-CIM4uj6)9`<+p6ACyZ0eslbg z%1x!59s)GIcktA_C6BT&M#IR}GtC|f#4kqGIrWi#Ee-^>4z5LZm9r^N2 z?xeY~WwSX=@o?8W`O7fyAx1C?kH0uTjn*{RiGG9x7=PpxtNU%wj`)1iyRc^}kxXT~?n9c5< zK-kDbW}6a2DS69mGiC^Q&usJPE#OnL%>wc3XPZ~W@11S7OaQ-}ZN8IUc#ipabg+^s zF*Vrk@~h_XE)mxM_0OTD{L!2@=9u4arFfNFf>#Bunqxj19&A!Hni;j>fw|_MQMCQ? zT+?V0_;)r%ZSflYlPy)Ejb6+a({EUC=>K4?XMj03>>}3wcDFe=GI&jN6o1A1QT=rk zp4Db?M)2nU-G%_&C5;FU_#bLS-S{^hN8J=?Ki{+*iF*fwQ~sxx|1#u!TQU~d-4a)- z*DrUz{P-;Uu#;7lzpVbtlvc^2g&M4!$CeKn_vXea+!gAw$%)0cc!4R!0t>vdz%*dx zGOP=9OuI6Q6)CuQlehh!EtFq9B z_Fa{~yL@bU6TN^F*=jE|gT@30r2MCaWtaaf+ECs zYG{BC2;Noyl1284dr8sslq$ok|7`t@6McWTD7_i`4>MI`ktvbMMBC+BDbRe8c_TB} z#FS!l=C8zy?RGmUw)i#q+cLUd{zvZ&xZm72G1w&G-#bWY#S;!5<2-Y}eI)mE_o{mz zzW3dY?woRMCxqW`ew&EpQH=T^>hWk$ylqmj-G7c-7Y&zx(_E=u5AY@^OX$#~$FI4t zBmPd)BQx0JfACb)9L4B-cl}*ZiC!oE%k|;^A=nh0p#NdhO-N50Jdp*q;ERJF#V&Z` zzEb|P5Aq@_-uTXSU&JnO zcb9u^e$GT@1}lV`@NH&LVgQmKZJG0c3$O%?TDEg>1tFm=h< z1?r9<{qC~K_wHKt|5bMFVO3RG9L^ClHDr)C2LWjuLnR+TXrbcQlus~~iL}v(Og~2v z@sXipP-2)MQ0hW-luM`}h$t!#g$qcNUnUZm1SvkUG*i^F$+T>K`*AK@{8sZ-e_@Y>c@m2hy;VgQ!Hx=HHFyYM?2H1N} zVAC|F_X{46dTl{V033UMKH00=tDfn_tW694GV4n=Q0O}-{AU1yJt3lh9)4%iyeaO0 z@E5hE9IP<)b6D4MG5phyc3_3oC4h&h25I{Nz{*mNcKZ&;rAA}sjK7gUX0?Ipakw>q z(mQ#g*7X@+?EpJ;e(?{VoSZucu<~Jc!9aahL!P$*;Q)yBhW+8c{_|uwM}(I_x@8M_ z?sxT^P~F?-5q=MUta)bBeC*YN0KsGv92)bcM`F!0fB>0ndT44kWwFy20RmGW@gs&z znC6ynu7IDxRV@`Of5yt++{S+9d8?RBE+BVddIZecR;#`?CqBgKv?xV&W2LMDdO8s$ zgEcv#%QZ6Th3uba&0mRaEINZbK07HUQLVG)vUb(fT|xvlmp2ARXB767=YvbOyJ*Q8 zBpp3-sb-COKx}aGgmP@m6+&q}l;10A%8o4TVPjOd-H=NK?}FkndE%*)?;VkSH}SW} z+fNP4qw|1J&gRkGcVUdDc9UNc%r-t>C}qZm(Y2>aBUn>`%}d}m(77^6^;M4MQ*M&# zWzEIwllN6s~y7nGws|FCj zj`~ONhNMM}XIQQ%YHL=!HsSCHPh{cQMyvxf%MVaA{<=3D5Gc;Qap1-j|0Pd|U98jJ zp;D+_1QfF^N854Jqvke^0F*ym6i975KsRxYb`KEDK4&ie;gi(1CuaeIc|d>s#%DW? zOa}Y99;Aq5_|h{6#f^Q2Jr{W;Zlm5+1wp(d;6$G%qiDygaE{bBMIEnPE1~EV)k|4W zN@*!Dfy7eL8dA=zS(&kR7$!BJ5+x6-9ISW&i|9T-7(f5w@!{<&wWZXWqGkpb#0sH# zDi>$I(AI_?C7UaRvRnPNOwd^8I5s5b_Pi^gK$?%dSF?PtP&^kMLvlz(5ti4j5=6z- zRmmu)Pg9}qu7?Ezg=Y?5^IkmAjkA)=Q(mJamXccV6Dk&=;^}%6Q;gvKvPjzJHE~pe9 z@Miq+$-e!5&XjjUkvi+XDM^)7`9Aah*ye~^>I1J?haPtvFSp^qJ#wYxooW}Sx?8N~ zDCKIQ;}%$h9gH;F(VMQiub3LaN#oXY3M(v7Tz~D-xBp36F_E9eoy1p_wEhDG3fVaW zm7-y%+^wWDSWxVYbnGC?wxTQM?q(Ef;GzBcR{HMC!ddfB(4o1f`2dQEXuy=R?UVb( zjpO%mOa>b_?Z$POLfZvik22Ev4Y0xqfM*$vOX9K3l@WPgNm{|YNF#Y=U;}S!I(r0I z%>yWN7tPM(XCMFirS_vmM^RZ~q^g}j{B0u@ZN%RcBh~L#9qHUgycsjGSd1@=jI`NY^Q03v4e z%KWOgp0<@oKK6^Twp!=T$zgqLG`yK_Q>O z25e&r=eT~k_xea|Xo8TooKW{&9Of_A@mD*H5*kP|4{>FRXY|_}6 z5vwy`uN0GelsqGAbN4{cvg8}>5VFN7ut0fHc1Kw&T5p-kKC0}3n)O6YR0wON1)Je( zg-+mq0xBA^?tw>z7FpF#uKo4-uXHU!*b<#@`@x2>8IB0f#c9I`*vb zWJ&7CP)-rg1O$Q#ET}aT{1s?xzXASFfM4;`_k*fu?PT7G`4?!ET`djV0>SmE6+-vR z@P6WINMAq6BS7#Lz7s9o0!^J~qzzltp#c`;1?T{r!=%x;(=cuFFcPN7i>;zFP4-*W zziT%_v)%a(Fan3um0PWXxZ87-OJq z+f@IDxFeIpu%H#N&w1p%9oi?5{GZO#jY=Ov;Frh~I)(^+kikSh8v@Yj?{rbKJgH!= zwJ!R0Ii?^dC*(MT*#HH#8W7ISa1ef;4SeuPj90Qv04D6@NjwZV(Yb8sV$5;6pAF5m zjHB432+6wWBNRe`bWi*cXKTWdxdRg>k{E%jeu}PgQV*q$np}a|NjkN1`XXot=8Sfp z5b4rmPIso?Og=BdDtDWb1{puJ?*YgRdD+P{!^E&tm~Q4C7>1|T(UBcsNAEh3oPYaR zluvB)E5Aqxn3hCNvQoGe8zd-tY?3E{mJZV)G6r{mlWJxPX;KrY-!6zvnqJ2{T%}0` z*uk{f%TaqSVcC^06ide4fDUb{WTA%yH7cRYaELA~jJL zuS}y{bX$_j!V?5XHo_yWP-Moy1>4ca*#4ruaJ)iIv>6S;e+*IgS6`X6<}7GNB=s9Q z*b0g0RwNyYZ6l4|qdM9kUWudt8E2zRRGeczczNoZZJbf~;h7#XBt<&Ty6p)q)4$az zQK}m$z6jkP-&_okLQ(z*XI#F< zOj;v^uXEn?=D61^l!1Ik4Qz=Hc5UYZsIP;Jl-@0Lr3g35a`Xqgk8>J`r#UT&dl`&8dZUEmCs%yRuDnwm2rLk#g#=FXqFD8So@af6oz<FVD(D0h-(BG%z)a;f^Z*1uKc{l1xnX*qH8 zS8)9K(A1DtYAZ$F{|q3Qu73DSNJ#D4UJFH)7;(-DWtqNZYP^{E=2NE^siF+S3l>JZ z5rHg^c1Kc=awvi*va(7apCg~7JavKAm#Z$_Gcr_MiJy~irlN9nG(KSLu3YsT5`i}q zdq!n99kkomsI6Lv56lwMzbwntwyt%E!{^@kd_BLL{h|e5-%Fv8!}tx~Oo|kL67a`+ z^+K`f%kULBFXnr>rs6ZJ9VIx2+y3U@-->^G{IEJ|x(ABy?CaG*0iRkgx4j>=Fgl7M z)#Ho5oE|i4*wOm4!t>-FY`ir-XnZ_gdmKJ2=}_#PhWEEWxZa=r^Ntn?Y%o(;YO4R7R_bz%T zdN6t&eY9t-v-dTb`OfeAzR&YM?|*a0x@&*dZl7JxzUSVPIq=@)?!_Ea%9jqWJ@ezy zrHgazdfESDa_f_s!ahuT;hNgG$Fw7>djGIvM)mW{98G-PpW3dFcI?K~fu-VCYbKMk z$&@f&@vy(yeFhpiOn%78bRk_MVh8mNGYO>2k}jXgVlrihy+G+6NS_CGL`-VZ%1>|Q7&C-^1eSzc^RWJFh#^8mKh6mLox7#oJ-O{V^6 zP7WmK8_|6bD~dq^Ix-o}E(Fem(pg7``P~v*{hQ5-xT>?7T~#s^v9D z>PxjkRbns%Eb1bdz8z5g{GS zl>obd+0}2*4dhGtWsijQ4~vS$AVtIdUD=mC z-WcgTkj@i~9&ea%6&10-m#|pSH88t61Q0@9E>FYKm8WDm^&v&W|D zX%2g6$j>2j{q}wu;P|rHlse6<8m0@F@Iu7lL?L_ z3zandV(q_RnZA(_aKL z|7Q#a?G!K_nq5vh>VKWgDK&GZnorgSy*0X?-mvli!nFN(o0*K z#eemZPJ~AHiHX6IeG8kjEHu1NuZV6T(cNR@FfaF(>1Hb)R9TkxGi*8&5#!k-vQJl2 zeIMCNSn%DtMMU>K1e@iBL=Ea45*r%cH990TEXHJt!_cEQ;}f0FgrR3%nI7n zmV8#F>mCu+%`>jAsX!f>&ZUmtGh+$YxVo}iw}6@5{GFWT&Gn@j3&jtqCtK42%uX&* zUl!U>*%!g|x~JmuVD>_I1KFx-%8rbPHStxoq11l`bInx%vsT1=hR61fjBX_BYk}TF zM|Mc)9}*cG(FcYmTiL9!bkEO8ZUJ4Im`qq63He|b0%rzuk;cVE7?*{(*oa70yuX=r zw0?8hy|eWsr@Zk^Tgd7Ip|Z~&!DjA3EoG|k5L~9BaFv2hy)T%PwY7?Gr0n6XWL2P z5jOA_=$sWr!P&u|+er>3%= z>tK%44zLI6Pk4oaWs4tzIRxE8V#7SUN5zam0_xMd$gW!oo2xJ}M6NsgWj7u+uLV89 z?6EeAzXNB3T^-CJn1=k^mF?#QPN;Z})j6{)7$ab`)Ye_Cr_bqWTzfQKgFxi|G^DKg{$n0{zdf zxEUc6o&mFcstk%y?0o2kFZK6Q*3YP z@H;RY)GP}9!!ex|CA+GdzBh9rb4fidbKaI2`pL>-!^5I@@Og&m!pc8@Sy>*i3)tAx z(R1f9#_SEh7@4k|;$2`4L(W*eVU~jNDM-d*dPhV>^bLuL*#nzCro_o)1^dfB*sS!; zuvzRfFsrriR(AgTW@q0NuMCvs*f&MByOl|BhTp94Z67(x-w&48)SBS@&<}t)E6V9E z&V}L+Vs3Cqc7U1d{7}hJVFQi*tle-q`Kl`}2FA9PkXiAoVRF4+ReS)<(pQ1=fM7K1n5iwCVZ(Yx#75Au zWTeZ&{lPj}did-oIY4K?ENCs56;1C6!@8}s)aC)Wx&teX)}=WseQoDIY0!Khf1Y4&Q9sW|j_a6xd0;^(W3 zUX4%q4gy>A%UanQPuLu`JYaUC2Ie^5Lt>3M=p7w`YlD3!EwDkR za{<%gh^X$75k10VdxZ_^58q5~8>N2AC=W|?H3ZIw1z@iE;7yX7gSlru23x^BV?2#( z7Y?3%L!x8CSYb$HjOq4f86VLjs!ueo8DTMfqr<>IZIOCNXrJgPR2x+H^33SaYC)QM>-M~(=RS8dXOnJJS39S?(cKz^-4KmKkUU4rRPuf%C5cz zW=pT^lb+jmxg*fILQ;{DbH#p4+XI_(Ww_#r2j$_W379L+2h4oVhh(|-$;+YZI>=<| za#$@Wj zQZ9Q^mRI_?Mo;l9(eS=yZ zDDYt6^k;4E|9DZCh0#bpM61y-g_@ z%8tsMaH{z5al7u`-SU3W?BS+b!SmyZWRN~mGz*CHuEe!5${*@)QUE%cShV$K&g(phqs@lH>`SkaK!-g z20gKo%{*C8#rt91)!SzM>|`=|8TBVs@H2briO^HYwLz6_)-#x0 zZ4slfT*RazX1MO^V>2JugM4gSrY!nQpFnFhOeR*3WR?BQV|74|O`s(-O%L(%vvhzJpkGI$r|GU$Y}V7Ts~9Dx`T1#97ky@xKuZm5IOyYw z0oFkX)sO}H`&qZbss_u+aOx{8)tkfpov@`a%A_a3n~}O}07oMT?;rF;ynE`Ycpsp< zRMSoT1Uh4>v|%zJlJZypjmZ~?*2|NWIahVD>@dMZ*B#lBhD$VF|W9%Qpw??S`X9Rq;U zt);MWNekU!UZuO%uvvds8ioxie6d5Y40L;CKT8ZOUp?3>z`Rs`U0U2(g$xpYr_I|FX4lAIIJc{ z9B17zJ+ZdU`UP48nI0b1!(PaCW6&{1lVP#%Fx=(+EEi}Q6RIfAqMT?*Rl(2N2NwGe z>kF-z3+sFRdd&bWdm(*h-9SrtA(N>o1&g&Xs?yy90<0|&s*NnhOtnsfWiu>x%6S!M z%xr6350j}P;xg)K7>M_8l zFP;BlxtC5ic-Ee~)B>j5m;pB$c&Wzt)*u;dzL+)7yA@>w3hYNWfLuI5zM zWU6Tthpw~=SbrAx8?0|xtcAhLT!wK zJ$(GE#mdX+g-sBh(nWV|VKcAMgYbSsPi$e+a(L-iS_E3Z$K>KV!0Nl?uLrfXaox7G zY0ee(D=h=9H84FGjgE%1(Xjqp%=7icRyONdXue2+>54_*gv4CT7$wY_8nEQNNb~V$ zlq@Q#m7irXf_1nat&b350mg=8DeR4DXH4S`2(c&!URkVLm4(%UYF@&sW5jXt;Oi^H zLL8hN533>KG@YyRJS=t__9U#I96sCyu2&AQv_uH&%_qS66GDI1a|)K+`msG)t#C}n zu{kwiu{rPv^~A&C`pu}byHjA%Ba5E2-`~kk7J?|a*Bq7{VrE+ms}T~)S!hP-)$Nug z5SC4MKU2*Kfj{TL;cr%2dw(ZPFj*0s_Z=**ii}2o?}x=TWzszY{H!_A4%rd(A{Z9) zppCpdfvwU5E3+YL?jYlErCSKAsUGZG%?Sadla8Cq=|RCZYgd$khRb5i zGxXG8o8=g^8pg`2j+S-RXV(od&(#w<*{sK5(*9arjbmpv`a1}gbeY{a4HhOrLN-0Ag`d?AebCa#jiy@0!D`5{HJ{U6Lu^)8RKuEb z7@ZV~plUjH;kmHbDvTS(I~5kY6Fy-Nch!Ts+N`5$$!*cNf?2P^qEAl7(7IxmU|GgV z!_t|S9$X>7Itw9L4!iy;EcOykGpGEW&;u+$9&N&C8QcB>gg6F{#`s)?#Vm3XyVSKW zQeHS}D+{BA!iU3R1K=0f=2$zxk`3nqoDK`SHEYme+$D1z4LQBrl&HSZeEFaqeR1(T-0DvQ@?&W2uVe z<8R~{jSx%4=7s(C6fFE>YjG5H(}Q~1tl#5G+SVv1DZ$?fhU^ZHntoOn)Yc49R(3cJ zc|nmj^J_g3?@jeoynE}ey=~@DJqYjT^~BybYdfqh^c9@qr8F59osvuF9xN|uVHonX zkb{ZK8BQlbdTNx-DxiIvzm|8faD9pju#UyVm8EiFo`l6cMxJ4`R?=g+{nml?Z3SA# z!&2U08l3(X#}3QXTFyVY$uxu|JAs#_d9ctC^c&0j2`uclIOSAn!-dWR#Cn9<8!6b% z%*cwyAw8!}M_8@(*_h)g2z@V8;UZmJ4~nr_d$yD7Q1;0&Sl?P^aY2z7HthHf5aQ}U zD)iMjSeQQC6@2_O=OFz`Y@nr0ka5wj9AI9i2gTW}*I+XdX1NW!UI*C(d5ZZN7A}2U zlHq>V-LRMv2fMC*){Gs$U9r#(qjs2>M^i5 z#Ky(Lx)zpnn;XzeSiaxNDyb(9w3#FH)PXkZj^J;5I-2)ES#nSI?POn{9+Cb|FmSm+ z)oIudm%_re0h>23*thhc!8UVsJ#nzjI;XSAgmq0fFtP9Gu0w3*LV6J1+v|x#Y}Tb+ zzLmLA+Sz@j76mWM-&OBm-BW{i2L?iz2iwuL{K zIv7e1)Vm2*Wut8F+>c;k4*CXI{d>q-WS!BlxVns`ZJiH`yAAg2ef~}`>KMggGMVvV zZ-mX#E1ZjqQ*9+e)etMk^BpWz*#JLl*$CND+4PXpIQoplC$OHfw~YB=iGo$laD18W z`h(5-oVF|r3$AQ0yGv%g^$Rma!De^tN{cHWKZ}-ulcIf#xl`>u7vdjnX@e4zzZRvd>B`re&}=R9ISF z{VXqF;XDx%V6D){WLz$>pL+UPy2A3+@qxy?TTdNhGY9CdV{O)neZO6%a4FmetDN)? zA5UERp;`PeZ|#T>=RF1nsisml>f^R^3KrXhYa3RNOZ2xrJl4t$H79*#=6{@>O=KEn3Z6DQfMhoP}mSQ=QS)&VlNTtuss zB~N+}zQwUUMFz_8mUjj^DGMJ*ef^zaa4V4;%L7=P!t%pUxk0j1;2sWfJ(Xn~rnd9`-DK^X1!C1NaY_9-|=Mdu*gbVxtgs>{{+4qQ^I@MoUfLf2-VPo=T*~#X4tfGKk6MS z2U=hJC?`aAW49|cN*+Co&*hfuuyAX~CqQ!^tN7)X~t~C)h&+5ehQ2GYGXaLZv1e*Fe-Z z458}OoR1>J6OYA&JE7R%%j(TNovb-0$u)_+1b2=az`~hwNPtx!B)3hEDt^v~VR73u zBd@!WcgkjKmdU92uVOnx#5E^fO4Q<t|uOX*C52zVq7q+ zuVMMa!i>ZQR&Ki7SP+N$!-dJz(@4p!;dfY_zFEy@*w1I2*VkY*N1VJcluP_p3gV(+ zwKeiF7Y4okg39wj*JcwO|)%aVslC$K+U0xFh!BR~?kvm~El_}w7 z=3nhQIGSJ?2MZVH#nqe;kY2DYp0i~l9Ku`qS?kY{1;Be8)N;CU1jr7(QmM%j;E=Q3x*ERs1ZbW#|;+V9*MoN`}rZ7zK+Xgp(C6bt$kopXEi@yj-^3 zxFBn7mg`rR1zL27D5!FP^#nrokQgTnT(%0XkXtn_X}GF(fYs25<6>I4LU&scsClo_ zJFEz_?ptj#Mcd=7mDkwsVKLu0SezC3XwbsX`W6<)4%>7~KdsJMedfwQ>zcK=OA8U# zEA*^+9dCkO4-T+2M5vh_JffNt0$d6FyzNhe-E4ebw+5`2P8$2ZbpR~cLmYyYuqqps z@v4{x%L^7R<(Qu3HrNM?PR7ELW6KllI#~X?J8p_TLWp^A+=KJQH_B9~3wc6e)j*sa z;C--U!;+f&J8hCt@`MzjEaPs0bt$Y`$Y!hy>uXrtqEIBJShda4eR=;N8WxAn*hI8t zoAnOs1GUGS^_lAfttGa|rr|P*hIUXEjvE+q0gGiCaoX!G`pgZ1TFI^Yl?{Q`AGgZ& zhB8s#Em-VVT%gfBuWhnSIa1wV$=Y#7wEPO|JL5j_ZGJlt@%w1jP zko+tutw>mPjfC`mEiAf%DU8pVFJWjjHFh*8AdZy2)2xqKeM zk`scT4T>GHdr7M;tTy)QEX!fF(%n}CXkU)#ZuxHNd2`)oSP(g2pP zvBk$D#1hcuNVOeS+i&f1Irr_7jJP(ixKA4^+%gvyKEf{xuv*W5J5AtIWe_ac!UYI% zh>XjjB@I?veyX(kU9h*DL*5UTtdU+Gh9%D;uq-(*@(V2UPOq5QnxktnXwJSTkYCiwZCJcVXePMho0sx@>O*yGVz{i6ghnW3Xz$!j=<^drhhO zl@o!MmZ{82zZWAUCnvMsgT?Bw%JDg|+?8*8FIq7emYT+}p2Ol^h<-pm+g1Dcg@pP$ z!H{0^>Tm`YuE(g#`I@|%%0UT%C0oWFZV4=Q5r*N2zY~m>M%kSCb+6kk)+Au5ndj?g zxe2S2QF!$m-}(}%roocM;ogEZ4HmlqzM`K4Zt7Rg25P_D)ZNYnTHf8{hQa$LRc_f^ z#M9ZYu$q2r-y>Muj!LlL4buRwcXRgugWLL3WO>lkL>>& zuqwmKVBDd|@tb{yW4>u^f77pA3bZbQ$XOvTW!GVKmD#cP+wRF-2!%!Z}|W_#y&3!!B6dnX>CiE&VL-Vb$RZvQ&G>USiMw zijbWDA*21Q4`8)7s^-P4#v{AMi_jWaoMX7tfGeWQW7!T^sHY9AT8Kk``ub_&vEJcY zpydKYwe}Kg*bLbxD{Ir8l^(!|5wam|Sx0_YtiK9jcYp5~`FPIEF`oePDp^vo)g0lKyl;43|| zB%I8R*FQ09TnCUh8mT1H#ZAfvw={wjSl|{F@!yzJXCJ^mI0UeQ6oC1U0Vdu3c3yU# z={UgZPAEPJW-44r4L%FzD?PK>*n^Eyu@M?QkF{;skHE~26=9T%`EJLc6 zLZf>|D#d2K`iGKwmOI&je1>}t^bN1{Ovw>%*}=KMtS%3jdS1M7I=a(P%=kjeCe!Ax z&?yyBdU|I5QfB=4kiAwG3CQJDLNW{R0#mA}bTWgL@WulC!E9bNii+L9ZIw-Cxk1YQ zPwpjmfKVjh{0dhI|GzMch*0H_xnuOBtq;4Km!oQmhGo`g-_7enIgW3NHGSvZyv9lx ztW+|aFbqs-xYEhgM=1VL@fa0PX4gzm_J3pUg+HrwU}H`g0xOt?2#$qN3DPqs#}eqQ zXt_$aQl%p^-)a@VUh!rXpPo5q_bGj!ncMMS1X<7lmEfP)K@a|vm($I3M5Rj4bmJ&> zz4|@byC+mCG8=hXF`vU?)Op1hXyElv%n5iE@ofA}Fw42E(x+$Eeiu6V9($J=pQsGa zRm4kWzXs!<=?&i$v*7ni|Dbd-gMZ+S4t!DeSBiL%S)rM4iWzj!@|*a}S5qDpLFUZQ z56++uyDvAaBCuFeQI(3!U~#;0+pC~-GSl&ac)rLCR#LjR(#dRwFPM_Q(#dqc8kpTu zOGE##z}gU);X5$xdSJfDwCjVJu`!tGnkl;#82?OdlpUn(jui1CGynHsHakS=WClYu zIr|ZiLKv78goC+G`Y@GZ7SvbS|BdNrtV%~_zBtAGmHv&hsE7gJOuF+!c?}<>l996@ z`&2NCod%|RGr;&~n#niC4F0O@^vvpKLudXZFzxw@7l8A?-U`M)({>IBUkDf(c2mXc zpO{g5@kWOZsC56ttoVpZcTA;A&vfWGbn*#}haMyFpUea&k&tDaRt1q6JgaOnNBWYo z$qc5Fr(HM834aY1OS{e}#T@Rt%1+O0-hGw+fnq*6%GWnm~MgPQfq`iv&zt0#cmfaC= zbR-x|y9?j`#*{+w#t!VJ;>onbl%1ZrvGs$_s93zQ{Qh8P@DE@vq_Ob`;Gby%-k4yL zvZpBfXT`rLo(|>_Yz~+&GKXv-m_4-`%&2vEV|g3EuHX}3?f~b(+^{Z#`O-^0%MwrF zrV_}s?||8|yI^|y5X_36gR_D^gZUyGL1bb&3z)VOm=0uOVTxH^X4rHjhl zq&oy=EUYq+Sy6c~3-$)HfXZOD)CT6>-UiIB4gs^mP%vNVndNp@I++*!zRK?Fs8%Zl zR?tsHkZDINn@l?f%!=Zao}TGg0`wB##VS5MGhedO$#iVFSewCI)Ho)uP||9Zgv=_} zfZ6$*l%AehZ-&P69%y1Z1|TF_?N2#ZAHZXKKwi#r#Ou12$V20p<+q4`%*Biid*vB2$kC zb4E`FGin+I^rmU166S%qDJ})mfn{L6{u{Ha*Q#{snH6qOI+^8dRJ=)X{AQH^ai$^) zEU+}dD-hQkTj-_EZ~yZTR21QH%6_0URyb z-pXTK)uIja-#fPGhJWwaV&?sO$M(-Vx4q<6@b4YlfA84xn)2@*+kfxa%B$tScWjNb z(Z6?W<#hP>jxD#xfA84-d&lbV@7Vr($M)Ylw#FGT{hi!@ z@7S_S{&(-#nm2Dw&1_yct%k*R;1AJw*~1PyYUK9TYb|jdozr}~ocF_@!)-Bd-u^bF z?H}dN4Y`;2$LB8bFE2ISlJs4|+La9lwHjTi;GR||k2WtYb|#tg#Sh%FzF^qF6mf33KVH`e!k|L za_s1+mM8k+7Ofc{f_PJVBX8HLmt$qGJMA)#ITiWfwk^5Q@y%tm3HQw-yN^2LaOGLC zQ$w%(*1+?s<<;jJ@dKBi-?K2x%dKC*>viI~w$uu_oj#l<`ec}96zph9K!Kam7d$I| z+Zo%(u5ac{O+K;w-JC=IZC+K6U3I*`sf1c@wj`I_?KP6ixBkR-i!0+t@DtLm$W7nB3Jp zep2Wf_t{7FT1`$b?SD7N(9>H!7ijc+Z}SsP9d2EklQ}kF&6bwWM!nDY+9&hObOmoo z@9m9kJ>GULcd3J?e(JI^bX0uRp}`Y&Z8>$%GO9#in?ioC z3XV$|lJBwW(=cy;&!4ue>fX4+NTXnr6MJH7`hxq5%J;f0TGlvs<==|BJx>k3(fUHn z_hW)G=9**cJIFQ9+vyhyTrJqG_tmi#yiXm@Jio|_<4t<*xUhd@-nLgCR~_A(Kk751 z{rt;vrfum9F7rohle4A9ZtY^LN(@_dGozbI#T!uT*@0x|_%L ztd#=ay)ILIMu(T9mzK-cdfu2^g*UVhSYL;~+`~Vk-0kVh-Cg5ThxxXcxTWofbzA=O z)akj^U&lKhi|yV$`^8P4A1?L{nANONo(&BOzUec3?|>iYnO5aF>`_3!>X2c3tM++s2kWD1 zxm9l%_hQT5cjk<*Oc}iLwC?lu?D6fv!SOLQ3%n`*P!-G_X=nO^7xf6cHG6j9xIN{w zY?>70Rmydx%dU4n&o5MIdWmRrj@8?;)qdEqU)I1)t!}jG|FhP8$q$cj{gUzEqFAl! zM_YKeW&GhL{yFhW#$D;l)i?Uob8MRR;*R*kjpp?1*k*HVczeq-hg%(Vrkcr zRjX_%F}LdUj>~$q%kuH;*-tIzp6=u~@n{jPbE#Ju7mVgoW5INIclv^FRo(o{ve-}M zpRdfdu=2;6uI*;!EWYxM!>MT*JrB&zcx}(`<1$n@(YDaw8C0w8r0heEbnJPi z%yjRfpC@H`U#EQuaeWbXg$=j+#QtP@~dl;Vl|5HA9A75nvtglcs$wrtjEWCD?KwG>R6&=C)au24JQtI8*p~4D7bt| zw{tm~^lM&ZQ_i-&UB#ru=6u3(-rT6k{`3W3is;b&`P|*DCONw~*Soy5@uSw+HZ*zj zxLnE@J#@Eqk-<%#Wu5;S{N zwwPi!N8cW{WN6}`ioN%GmvZeqXML$xZCpl|S-xrZ;!uxUiEnG1@f!WQc;500s<-<- z>BiH8vl_Zb{NBB=U$4fe_zP3BNj95*Lf-yz%oCD4FfhkCv1anEVxxQmvprmw_05ro zx8FW#f4E51N-b;e-k$Yhx9XkaEgdV@&O0M$)qzWEekm}0M(5Y9^Zht-Tefz{HNAb7@>;2EwnmxxcP6)Vr1yzaOuxXJlJV;ve!P1@eHlXm}3 zR+h^zquCY450~jKUXJG;@0*sx^-;t)@vfiS-N>Ashb(BZ-{t;Ped()|1M4pLER?xx zWa!wrR@dh(dVICkXg;&UbMJt`^$$2#^eBI|M>+eR#g$6u?JviI=Lda1r^eZi`<5n@ zYWR6d-1O*q@iDzOxOKQ&`*Zl!^_Gm|UEls*XznlLf4;c$`-iqsC4^XTD^Iz*lN&`( zj=Jzt*gRFZJpEn6{ z8r^V!e>wLbemi@z&HZjqHm8k0nS3LvZsukuMa6QRCi@*}q#R}!pGse_KJ3uziAP&b z{r%J2cOTDb0b_RAd`CrfES#b8=;>43@{}&<7_=kfi-iFLGPSzmbUWMJ?2|mlPp@_S zQ-Le5S6|tGyj*1wyd1m2!tfWPQ&ub)mpL`pt8>Q-RBbWo)nL!*NjI{+9n@^E=vHWV z$kFDXFPHkG?fI9pG8_!fSmcjohbD(T>p5e8i7eSJ9yO+x+7-^EcdviDoeo219BSTj z)lJLx+odOV`_y2vhhKw5;aNwA9*ec!&6o=Ja_RcQEVV{@d@~JuxLZ z;L*LBK6T4n6V5BJ84gP_H!`0SDM{vb;>ZfKv+$e`;er@6AHu+u5Ux|WBuX!UP-+!~ zNedvPic|`hDO6tw;i?$75W?8i5S~)FE~+eo;J*gK>_rf6iiZ>)P-wCkLYhci3}MDv z2%jn35e=3=sJ{-v$|Vqf6CWtNrx2VB;l5a!3?X?v1m~p?9*Ur)5ZZ5mu#>`LVO<8n zX(NQ*%OE@zTPbXz;JzHfa}lu|Lii>KCn&rWt}7tq+YDjY3J9-63WXySJXb<^BL=O6 zFmMZm>lEIJ(yJhp+6rOPDhMA$Duv4ws;`FdQH)y+VeB>tPbqvBRn|c8-wt8+8VFy- zLkbTlG+AqIq?t7_bFI0pn6U%OXDSYwXt)ka{hd%&u7hIH#2-}NQwd%VC8H*mt%s7l z3ySjwC{|5$*Z`&dZYVpcWY$EcjZmESKf4~?*Tnd3P{tmF@|23ZCaP|S;(rLr?Ct2DLgL|eb`OOnJ0N(7#2pZ39ER|jLQ&CR zCxrS(AgtU8p}6=!;XQ@mT@Xr&rMn;`r$BJt4WYCM+6|%oQ3yLJloi%J5S)%d=)DJm zr`Sqi3kCPR5Gsg>y%55WLpVX9qHx^@A>RoI!}dY&7AX{tQ1ILj!AA_*4`JX*2-hk2 ziP8rklsW}r(g6rnL@I^L6sjMD5Fo}KgfR9rgr^j$izWQT(5R%VBa6Ss5fe1PZq5TC2 zJ1I00)?*NyE<)&i3_=sJmBJPZ?#CfC6A{NDgkOSif?BJnJQ8P_3vrVuI`oP$vR285O8AcTn)=OMhOuo0&~a}Qy@ z03rD%gs=+`BE(t>?QcQIeGx)05pofNQyPSW6nYDnOAxkDh`R)#kJw8g{5FK*mm%~M z{VqeucL%}+3NgYX6~Yk;qf#Nni8B-i-i6?E1;PL^;tGUPzd`to!XQ!cDul}vrd@?F zM5Iv|dk;e0YY>Kssn;O*--qyqLcFMX9l`?&i>^Z$Azo6L@c=@b8xVdFNjD(We+a>H z6T&Fb;wFUm6gE;ABh0rTBtL=>b_>Edv6e#n#}IO-L6{&y(jYiJfpCz*B;j%!!WIf~ zw;@axdntrJg;4wsgsGz69SHfJLAXFc7an&Z9HB7kE`({~426NuA^7|TL5LB*K`8YC z!fzB3Ma6p%E>oCx55g>wMq%tr2zBp6m@TH>hv5G^gf|rCikc4~JfN`X0fZ#+lEREv z5ZXM1us|d|gi!xA1j{1`i$se@5Z+VRNMVUEKZcO}213|l2usCU3hm!Q$o&MuauM9tBp%C{J!fLUXLil?K#h*b~EBZZyknaP83l!E1kLM7MP#ET@oWmmqjWmRaE>0x+2Dru8K6$HBsd==(?Cnx*;BtZi<>;K(|C9DNVd2 z-4+eLg6@bU(p~X^^xL!+T08T-jZ3vtX7kC-gEZ~2W{JyzpJa+N*)<#f3Yw!>VbPq- zJ;h6lR>818<FLaiB+oAuc&Q4P+H4kwv^wj@*6&9vj5M2 z9&g#)sjRj*laafCujZ7S|EnOjhCd3m|35yAer+cT=hm7V3FqZUXa6Lg`fB$r#{XSo z^Ds?wFmJx*uQeFE8Oa7(nE1O)*>AEKJn3;)RM@Lk$K9weU*(JHBt-JSZ2yU>-DVy< zQ)#?@Qfc_jdy+~xS!w)0V1Mvo3N+^9k8S%i0y!dz^)A6VHr77SwOKE&0q=KQy#|DjGqVjjd zUP|OMgUrllOo}OOj?%KhUa49aVnUN^^n6pVsqbfA$b-!}LWtZGR3Czh{m& zJyaqeN@T_S6?GUiwsIjfM)UD8`>$}5q2ZtLkV_LVU&~b9ya?lubr{YsS6V*UD^(pU zl*UJY9wY3+{$Hs?K2z=puj%P3rE$!8Yn4u|R$2jsc~_L$8l|}-oB?6J)+((a!hFt? zuXRc*gm5;ct*6HEFAU^R;s%w_1KKWtuZ>D8f^ZK*!3}Dq6@?wHw9QH@2HXDB;1*~c zo#Fs*i_rO9DqRVLIGQg$=7~J~-=3O!AWZM~fjQ4OvD&G02f+-M z0op6=FqnDE0;?Fni;sgcSPt-(TD&PmiJlN0Rl=i6D-SJ;()jEsgPgtDlxBZ^l#@5R z(oU#!6`|!&8Xq5Juo93{X{QVg{m3m^- zLYQ5CUZvyj)juokqDtov?W@u*DGh&(2K|q|Wai5d@sEG3#kd*7@w%cC1|ZCN!lAjU z(p5wFgK7yMXJxQDunqxs`391aeT0r=^6mMb;h`tN^|-R0lZGX5I4?hMMRdv+Sqsx2z&q`1Wo7) z%tM%a_k3Uhun<@TEC!YU$v^_qjR1ZCegsAVqk%ENSYRA59+&`31SSDL0h56#z*OL8 zKzBqNe?edxFdY!U3?LDh3Cse11!ejdIPycNQ&l{sVIUCA!m0G^Ha1U@m!omfTBP# zfDeoCsWLuvvK&|e@Jh1^SPiTJe!#f$Ar(GUcLF#GqykrfIVgh<;~fF`+Xp_{b^|yB z#9)HpcOk|Di|4@?__*6;1aSY^m`R*DzXPYC?E&@zT%=r+%Mo4%@G+b=KwF?45Cn7t zz6Ux1oq;Yu2+$Si28028E~paV4e&Bq6$s3L)m#&SS^%Foa|PUh{6GP~9ViSG1&RT@ zmVSg2pMcK*ucP;X2LLahkATO(Q-FVrq!$ngL;<`n&aX^E5!VgK2R!Gl^8$Daya)Ig z>`CA>a0cM>zMX*103SYX3N!T32R`IKBem(IchKdhY z@(IQmAQpHH4Nu-1PkZi%&8PoU0c@+jCO%TiQ^6{L&wP~xN&%&TGC)~iHZT`R0Dc5U ziR&p^-uQ_KP6B=c@&ki`ApoDm8VJMyu|OQa$HD3X-vRXiK9ANEKJYIHaHr(XXzYX- zVGHmY?p%Pz>js~i9DugP0sPZ4{K6DpZk8~Gf%jj z(DItCqVx$Ze-555asjyk4KQhc0A7F(;0yQzRe+j6Euc0~7pP~!GOUk41E3+$1ZWPl1X=-Y zfVMz8pgj--bO1U65da@yJOZ2n9sm!4M*xpLe*kX*UOf0vXg0tF7>Gvg1Dwzpt0PW# z-Oyj5z-hGj48T9VF&Y>n5>IORLwJTC3=9GK0{zHH76$GPtV4J`umNZTn0nE^PA!8KK3Frdw*s%s!3p_;{e{dCGA}|T~377&*1-twi~#rx zgCBqjz)&87izAR1a0BuK1%O0=XP0HDBnB7?C%XV4Kvy6W#%(tA@xTONBEaLyAIS3( z_#Jo!@N1xpz$M@^kP2J@_#=i99oa_XxiO?gNhi{>h*}pnn8{5bgkU1cHH1KxZHX=n9NSSra%26A_pMd_|^E zM1%o7fZiCr+-U1vaC>YZp@0wI3)BGKKz|4DJ8(X&9|kl;dLBf1p5!5wpNjYeabu+C zCm(*$;emBCv@O6^4#F-3`1y~Y_c8%pkZCmwN0^UT^Se17!G^((0r;7qEpQ0w;(!R? zBW#|Cc>?|d@YHL9Gd!lvMQ{;-s*FFi(-U!#Krqlb9&bSaPq2@WU;_9F_&87m;XFVt z;27*d08g-e0RE_iE#u!kaRhjXbpVb*8-e&Sz(<66Xk7yEpvv?-oboU_1(*s1{Mi+< zC+yx%L!=JaThErTaO1=Yx|Z2N+&rs!u!~JRd}aptU;@t%1%UiOcHj&$?FaY)klpJ9 zWCSt*7T_u3(g04NYrxsf4bEwkv&7r;(d(wb9)PXk&oDS-{QU@joU$F*25bd5rfd-B z_(p)e#JcwaTvPji)4(a{mah(S^ zu3SaZU6FK4E9z{|!?ZGih0o22=^y#`-R_xA7)8}G$TG6enK@M--|D6#?Um@2G zd*IKW7kln#+2gaK`03E=0SKBv#`?6k-x*>SfV<3nfCtj~06*TkLFa`$55UjcJU!(E zc$#tnc%q`t3;hTb>utFZIssbGW zo+h}r`UA;`^98pCS^;#bCC~`CjJSs20dRmpM0040I)Kxv>9PzLCYcu(+mDqT5*%PKtzS_N+EY-Re^ zu|;eR3$6rI1S$jGfDhmY@Q_&@s0Pp(hHCf#ook0TzUF1HT~b2&NN@5MBsmM0f$1 zN5A>tVSp>b6Tq3kN#LJ>dB9v?Ht;Jj3!vjO!HK{OKmgMLpJ{m0fsw#qKtn=$KLTMo zFa(?caH0+eSm{vl`9AKmFbNx*0ifUXB_HsE((RpNZ@3k4Z0nDRXBF%K2k=keNx($F z4K~}yHjM{Z{V0HLjRTJb#sH)77vmN@&?+`yB~t))6g!BgAa)=-!af>y2id7~k`87E zr+5Ar;r>v|TbjjjknDr_cbml@mB>WNbQ{%3o7t(+V|vLv z^prznFUMXb%lcWQKGaHvEJif5afFuw$-okTy-1zKFpm1)HG4i5OE=QTv%}c)Lq*6V zEq^>Gmp%ILVa{-RXfz&Sd$pXH%tKBe&raM3Z5yx!;H2CP{JoXw^28f|Z;=C;PBcb? z?c>BtuWyBY9AE{<09L}K%+2K}&>cttSROYU?j81Jd;~h3ISg<$>;npLFF1t2LEr$e zUxm|G%EGxrrq|dLY%Lw4GnW85auJ{-=Ye_v9pQdLC(Z%fPw2!M;52Z!7~W0+Cjo9S z_O51S>|(9i<*$)&mw4d>+ds|TNK^o){_Oy{#=Ie-*+1pdja6C z!Kun}n3hwR(~;HL>#&!}W=fg8Yepb84P2EGbh0aAfZz-=H6xCLCm zK-~oMj>9Qn6!P#QPQ3__8FBZ3>{;+32Cv1u7i$u2pK3*nz<{UPk-~_VFWw-_j4iC; z`;Dsr9p<={y&DA_m%zCcXEy~a9 zE=ZRI&IXrZnub0^>O70Y{JyB7{Gv?k^qqQwhjJ1BaQ&WTYF^Sh$dyvVh_ zPQjANXXCGE=8EMjGn2_nJY~87k?|!mhl(~YHE$nIb!Q}BxwG@rVRh#&VsbwtIrkRE z`0m?X;A+M{MluHVqaY!6zC=L_#HE*75BxmB_B+aZC?@@`x#oX`Tv?Ipv`?#4zBtCxpcbeA+o(fIwN_m48HVbyzuy<<;s9^a8(k) zj22?RE6p3f%QC;!T*ZM`S~+yb%U7C5eiJ?%a}+LBEmLmz@xU3Hd3eS0mFV~|;rZI| zU(Pa}*Xcal!rWPXpjaC-FOIrR$3&`(2Bzt>y~d_pYeW6oo)$9yYl-Ts`9nKOwSAGCb<{mI%Q4tWY9OJ?*~ z0i^9xrEYAFq|oL@VO|`+USjuqbZ&p~>OE#nf~ffcL(*S#1ZnniCX2~bWn_U&m`|=K zYvjrsIrRAFn+?y6vh3*-#0W13SNu%N<&Qs0$)AAPOMj;hZQWo;&ZpYlh~>!s@xtGIPSLyxhLaV`S40Ync=lP#r{&Bhc6~v^j0xz9Uo=+uh_3WRzTC+7 zEZ{(+;_ddHL_TlXmHUMIXE=UF3}d=9q{C;Mga$kBH7!#zZIqF&5*>IY)*=BW@iC_3 z^)Cz34S$eYzs2GHdAQQNnG7@bD-!tr(_)cp`hSi=6PkX~@)h{c6j%;2vrK{MGV2qZ z880?|!oVos-(aq=Z+h%4I<5cJ^F`o0rYl#GYNKkx3(?}UHsb%ZEAeB^Hea+R1$JS{ za7v3>qb=?g^HfJ|SZAEl_7Nx~E`5P_ks|X~^jNz*a+k^X;7j>Nlj9B{J^Gbh7A9;+ zfT zS;?Jny;$pn>2-KoFy60<{0^Wu)22GOYA$Y~xr0MKG{Ykw#KzNZ;=T8@4-Veu_rlZc z;99@|_qFq(WnYpPmKwam`smN9k+-Yap;G=xq~Nme<-DbHR=BMGI=8#`Zv^eBrBhEU& zkxhlr-Ed@X)wC!g<=L*CbH`~_cN-&U?9wg8ZVR#niu8o|7yB{oFspK%E z^O9>VPB>>kf{{qTRetHx!u{=5WOY^Dhp8}C)I?UH^r#X z*vyZK$xN3fmS%vTO~rLuQ$Sf|bUO1L(T<5%u#K@|7N01ZSkV~--SEUX_nF=G7~(L+5Tp#Qq0}O)=a27MLb28{QucG_AQLL;`NHS1x89JiqOsq3ADP zc~JSETk}x_J3EZPk7sY91oJ|%-NnIGxP<&BfoN3og-a#WDpz_}mi1SLPN_JRdfDqjf) zvEt%RR?LSsNWdeW=ro~E(dNg0$z=|J!YwRRRLq8&28u?Y{G*|A>3(#m_;a0pBL?y) zh>49IVJCQG1u=#0^`c^*NHS4>3Gae>UJn(bg6fx{+#SDg-b5@ z@Q?FJiut$r%Q5IR_VU?U2fmj5GqbAXFPZHNCI4vr9*EBW>M&d{&~Z~GBb%{>O%WAx z!}&Q#z!liyhv-8MlRI8O0(DtjEkbjnCv%HqxzSAp#aATfa}as#Rvt&pl!~IqH^EhG z$YX5c+|2T4#{D;rdH5jBw)IR}Fpssyq%r+<5BgulU3YxV*ZWWICozj4iCp)}5Y$Q{ zn;1z@)JSMWQ9>3;M1sUBlF%w@M9@5TV^qx;HQSU}tq38trB+cDr4&U6-}f1xdvoI^ z^~dk^`t_fa&*vHEInR04c|PZ=$dM*V!P0D8GEJZrIEzfJT59Wnj3;xJt~Sh#)t4XF z_4sW6u|cdnVX+3gTkbg|TpUACOh00|I-aU)F^DJXpjD>nD+LPuzWd3zKYLHx&+0lE zz-$8PC#^CJ^@N)aL_gBt`cTSM;4=gNH^Fk-sD_njev4S~Uulf#Ym2YxxQ$w^{hO9loDdz@jtplNa2;$lG9 zIslQf44~0NF;x^rFv${W5(a%(C$W-&mdlH~Jo^Gi2~Ndk>`dEqh{1Zw*TEphlBXVI zoQb_7xR$@By_5!2^NZ$2D41A-iDefm)GH3U-snX$gDvX6@$|b-zPQbgV*JSCPL>TY zZ#&Ylp*#KVsMuTix_b_!q6Uh6Yy1`8RoL>i9$AfsDKDB~37*JKh>(*2VMnaN`|I@l zym(Hsgn;HetuV0DT5?|Ag1OeR2{}2!*yT$;zXN^YsOa#^jBg#Wu-JFS9t0m68`L8@ zl2saPLWEE*p5$j>RQjd2Whs7i(MhSV^XM)r+HPO9>lvD{?q6{87I{B_YB*!f%js=r z$P+*x;z_q0=qOUt!)r8b5_)uBH#WH_bH-2x@N}U)#p&_WiD&=zO+Qe;iZiU(0!Jgd z;;am@+(GSK6c@{(G{gnm{b`~LxX++1c+!0yA~ZJ7)$_o?HChMGou~Q@bc3Pi(%%g4 z3h+<_rr+*#x{7tio;vb~idy6!@@NQt&nc>*(o3B4w3@1+bfO__$)0Wls7uBIYJs}o zzIFfLCI^u4uw?8PK5LM-t1?x$C{*~1&Et=4>NQF7m15uooK2@(G5;p*V z&))W_)B=tH_+`UHSO|DIQSHf)*q3gwp#$}41cACy#5g>yAkR$2)|nq1Li&gesDA0m z=lyqAA8q7?Un?{QatV!Igh4*Fq3xsa)PpkL#?Y56Ct!%8P3&nDC8eVl+}9WhpHHEs zhm8>%Cz4CD5i6Afn;1zYBgtJnQC<^JNr>dl5qR+B67avcWcF6jOA{K*1eihJrDHIq z6j)UJHl$ics}=&m$in!SoO)bI5ZNi`;q``; zGtYo!DQra60EIlPao^EWiklLmyNjbfi-@twIj{bzwJ8qlaTa$+J@A;WxM7{oskS>x zWw=&LcSO*#J_Y6mpBe&0-x#@6*YlqpT(x%cc+QYF56XuiDu7g%HB=OOZ*4q%I>2f< ztA!8~SZkm?-2ei9d-FFNWOtfXS+0X$|d$+Nn>-1%iAc0^!l0h+i+fj~epd;r;B_Y`=n zfAZOw`0oaHzsvd|umM&jh`QGo|5E|(5v`I=Ey=7mg@<0G4`9@kkO7-qOKMCXmkUyM z3IVB}ikS>8fxy}Vp)U^a%C(AI3It}d2*rU^%LgWVo;tDN2#xoFJMx$IRP3YpS0H{k zx%qfr};QTRLaK2`Kcv01aD7j4hIoPP~8tQdyeDU=a`WCCq3pgVpL{Q~LyF+8JC ze^~D8gpAG?sWvoGB(NEko2~4%X2(}t3{Q7d-OFeNdgFXX-A_16f0f+SV1-5zys^$SMRe^4x@toIZ{RdbhUAuC`(pu zTyW3c?nl<*WWEd~?*YUH@~xlvGRZqz7i`6&3$wVZbfYb@G;b{r951k*|1~N0Q2#|} zI(NbwcCZ>iwc9G%&@?=XEieuP-mvp z#!;E6NFew|brg(#iyjzurCnZUFlqw_gNiOs5NjLoz2AE!-Cz6$2vo=Rq$N#h2j0OS ziQdhN+A$+u`kY(>1lGGngL)8c2LgPqpdvgU*upD@C%#>fTYJSx{X3$)(gr^bUDh7+ z44op}OSA6b@nNxhaUNx{0ZXumr&B=i9Sa0@(kbYdb@Iov(}u9Z(3iW!JPGk$5cSc) z71^+>sd&S*zmytu0Ph?;B1fgK>>qGmb2!S;$`UCC%lEc8LVbXMM&$?$`p3X?0N$m) zpM78L{>|w|yy~fx-2sQBMycXE!0@?a&&x_xTVz2#T^7aAcS(ESeZ z%hBW#h^eMh+dw?!QW6GTzyt{!2>Nlu*5Ec?1 zE7sNG+?p{(BX$hpo54-}3{cwcSgik42%5TgZ1S(J@f`D?5U(|H5J z8drsP&uy8$`srLFqz@qMe9+Fhad?+sSNlpx8e|*=kTXD;`xfS&Ozv9QNHkwUX5Q<& zZs)q5K}N_nK+u&SQhk;5xN7TgSmp`I@peI3!kKc`jA`xUP=^FcoZled( z$vg*Pv;>fvn0?+iHSR23lUxvuM-+jJ8DE zIx69f0ti?3APc)3%o6(~hqiyk&FDMK1}y*q`H?8Sx8gwEJ1H$S0YtsKC|=c6pgR4! z#Z=e{Z1WaVNOz3oiKB`knW|#wRet8gpqHJMVQ(O)oSU-WF(YWTrIg*H%qrB?sH0(3 zWmh4krl79M&^H%Eqt5wPn9}79$W&dHGrQE4gFbAza0QRg-YN7CoBN6A;KQygMlYvA zwpDL9p(>x*ogKd-i*2MT)PHU8j1`pKUvbc{Um=A1YFAXy;hKdTjGq^dtf143qqI!@ zHDIy~yt(Vn&cD80{TRdKt#ON|E65RhrP?f0dwq?m#W<+S^($W+)mMtNu%%bZtcSio zTrrB$d?h_#6Zo#ADm|6(4i#CSaDpuGss~|@ENgZ2`LrsH;gGmK!7BYND`{;{xa=Wd z*Z{--yUKgM)rbDTT^7AH+|gf2fAmy3SGxiXKVbCvf`WP};hHNeDZ7`_Q;yD>_Ss|; zQVI{8!$XvC>$}lN;Pj}M(tv5?I$phjF{zHG?(rL%gw<+#8H#PJzgkqYZ&i!wppSKW zX4GAI)~W7~oKWup4yefH&xiI)d#5gbZcsix~{itnR%kxe(Hpm#Pn>6_~! zVGRYmhjULZjeHL!-QG2#EZGp+plJDmAHU^0#V_>auc6%cU>EABu2og08VZ>*D-Ky^ zgJe1EG!b7?)4p%CtEvFZV-1Q>T~uXXHuhGW0{#!5lPuINdGkD`&h`Hh$;@womm#Q?2}rL09gz6lyt0OHsp1Sh9jFYk=J&+tMnA<)r(PL*J;`R$tPd3z&4~51`9s)$ zr9k@rLnU3eXM^yRqy-r0~K-&g^@a_gW&Yqub zpqGP`p7;#jV=zP!r*e($W=bEdIQTuZNf0|aL>R;W5`p+eBcy90v-;yRY^{`6$e@HJc{9%kPGgaw>_OKzpt(yv^PfWuC7 zINziK!m7$)mjZW$xwXEnu^fyyti;cgkbWr-CJuOIhjR$wO*23)ZK2-bSkaR$6d$g1 z*4X9j*%q$!x75Yvh(hVefL70{&Dov71wdhE(8=f=>M#^N(n&yM%^~M;-M5Xg?anH7 z90*uK5Z}f$({pGJLu{EW3isZr3AsOQ|9UeJ@iCf}^rDUCmjO4rQwnOXG<6vFa%D`aB9!hfqgze3ZnZ+sFLylJg#7Fex zyKJSFkw`@mz;Faca&FkB98Il99D~!QZKa_MV+Al81EXL4ZbeRyzRu^|d9UO599k5q zG}jbwqr6DP*)orAM8a$rZKr=gsPX)o?4y)IyoNQ~Tf?qv@63t@K);jfMfO|_!l`!X97!D?AYVk;m_1)*Dt#^1l7WsOYP8}7ZE5@I0a;N61u zx95>phSaU%!HfWjgf1RJUpyTk(tX`7U9cX`IvtgD$!9!QOvoP*{eF{P%Y<9A`iJ28l zgMSNdNlCGai{3L&y1-W*@_w1lzk)Is02ZX)91H!LX^dh03>%03VMg<( zVfN8Pw81sk57Oi~i1^z<$^wDki-ThF@Z`tGGah)L%>?B_y|@vMXkm+Gs`1L!vN>`S z`_JkSy^MneT|PuTnQaefn_ED!x=LsIzB#d?qZ`hMvOT}>5~!4QrN0ff}-`S@x8FOLc4Ck zYoEmb%6EV}#eYvyjzhzme2>!V1e8+wbS?oGez?MHUA$O7Xy^|@ONF<-8?|`e(`%TJ z1rTh&jUQ;vNXTB{#CaoOa$n>Nv+4F_V$MaUN-R!D)8CL!LG!RDd-AhpV<^n0j)@@n z2?Q*>>7S=p-+5s3R1nBrFUhC*iBNnLZAetSHUH+*RXpmd9T)Ag*)59duk{TTO)K80 zktwa-aSG1>9sk^DTbcJinjNR1Nob091TkyN_|o<%2qTA%Q%(|uIdhy&r{aRKw?%^j zv45S9{?jI~VDx8F>2O`&0{REIxU2ixcVex+H^^+j_xSo5wJutB#Yu&CUO+aqfKo?6 z?6JVG1IFc#4?5TvK4N`xsFwM+xi7?;&kC|eqcyo4RJA~LKl;|)KW9$r$*H){Zvup+ z(eRM#@89jyG?+thF$>KJ_Wjx3${)Qm{(adA8+ZuV?5I}DYUR&Ey!7c38<2|yl(-P~ zAinf!elDO^Q?SZXpQAPR3h3cNEaABnX5`Xbm&}O$hron=3_>^wp%G)C&dMjq`BTM? zmW@#w_|`okrgWHoY{~xq8*cI`xz9BNq$-55Jv*n<{&fZH3!eP=w2SV8kIoASEcRTg zNA7jfhutztE53|t+MOWxkFjsvPf*ZQjA18eR5FYyQqJj`)}`6w-<(-*9sN<3$0nSh z{mEFvEMPE&UQ4{Std;AP=29vsLVTUpEIvVRrNGoz0g>(3`adSj=)c5e4@ZPMw6fTZ zNrB;42n^Oab7*qMpCfWvzK*YU&WZ6U^fF!(odijU)k#^tu6Q+1+6Xv6xBgt(dNmx z)m>*#k`%B#v5A_cCn-3;j3gnUh%=de>r#>%29FO zK=bkxrH{wd;?71{Z&un^$cqi~)~9ok!M6X%WeI46$by zwWMR31j}BA;3C{yZl9eMQV+l5!tbbX5z3&}Q+(6~${pn#*lW{3uHLUPtb^S&QSHJk zP+oyiabzZNP;uq`7kLH8)SP+{F0kn6(=>wxsy-lhLB`NZ>9~wyYNG0m8y=v&HLWjF zdM3D-T*uKpJtOoy=H;fp&i_0|t-!F^QYtZx8U!l{Z3cC)omZEtE>Q*vb;nF?My^D< zoe3ZHo|C)>bafgorzKt%B})za=K~+kxh|3%k1zsD4cz)~fXD*QxKs02^$b0W%j-PK z!Ey>N(@PfGi!ak;jH*hd>bX4j)<`*O3Xu5!g(o$x3ZN>1PJF`e8gZ8>J%?6WyXGQd z#B{h`3mH7KmsIm}+BfHSDKR3pDVdo&OmgiaJF*p(noZ4_>;{@y0Q=EXIYkLP&eW_7 z)@veCd3hV6iy6y9fR;_&i}9cTIW|QERK4ppQ7m~XI}ZLjZ1bCR;xpvN^H75=j5$8G>+|u~+kV3_`Eifex;-_b z6=7$MK-cvq#m8nHJiVGa(I<8IR8IZA;39*9|OwKsF}wT{{2S;I$O*m-i39)P$U#Zls1q}Otk zD$S`c9h?ep;Tzzfky_9n{zVu8xdyhpoY-E=#pQ=gzIr=r2wwaP&6|h%>@jfbLOQ#C zCvUcNJrXW)VaPZH{sau&zc>!m07l>9kD9j7w?>MsbVnpdQQhn9@yN9EY<*aPUb!C17YH)`Ra_a{CuPSWTOEy#ef-0#r-48>W~_6}XgNkP;14*iAq)kc7K zQ&8eq;65Kde+H)oR$0wHmRkM7$*X^JPWa`Luk<_V%4#rS?y(JYYIHAMc4)~y6S|YZ zR#wy%)T=Tj_?910%fGrLY|Duq6Yj=|FDU=y`M)TL=@ZRYz$+Ghb3G{9Kvl$N$M`m_zfWIrGtM-Z#mO@Pr$=^xTzz4e&Gs|;)Q|DNj6Jh>-%|bZS+?`=%zX9! zrYdztkG%c&D!L0Y%P~}S2_Kqaa9Nxrh>F7|t^Ht=vvv)h-vZIpdSNwR+4@}FN^wh+ zKuwDcv~h{zs99V>$1&Dl41GBOZT+q@kGi++o}SMB2~zxbV&fjoQe}c=?YM;Taf#7U z$;lq0l9E#}?is&Kah%>aCE_)RhntGy#_zSbrwsonA#QkVN@85%a8L%7rb$eSjxl+W zG$D?Ps#-NjEBiJ&28;oXjxn-*9mg#?Vhkj8o8aeT1~_a?OiW~QbU9E-8Zl-hh|@|- zDW;7`j2@E|7wskxUWX^dC61lIc)JZx9BXEFBYfo8kiHZIBxhG4-3 zsBjX2QQn>qKs)w{BdNVOrDI z70?U$nC+MmTYW9*Tbr5RNRRz8OmFhG0%{Y>Hc*?qmDGM_<}U3w2IA5$CGCHBq=B@Q zmr6>n@@Iu^41`ACH%rH24RG0D3?VUzu@Q+;G0|>gVv>^*#>LR1vx=T3^tNhBf9z14 zDX+Jc9|gTqs?+XQO09aOB3h&eyE*0-l@RAXlJd4I4QjDxOu%2`3K_YaRb0|ahduyH zKf0lT&;I2H1jy)^l$fX#w}iMz@H58BQsKHv$Bq4LRfmkOaNjo z;g>Kj^Dv|Lmw^Y%I3g{(3{(x6%;-%(rEGwL6Rh<9rIk_&SXQH@KwP`@Xoup`!GyI@ zchc1=fEsypG=n8$m54JH!i{{ona4Bguk4Bp>NlboxxH1I8;@KrrQg7wjOxeU83_YS z&`R%p+4)PujP$1JC~H_{d6b14`Iv5vsqvcU!h<2QmXSw0leHMPS46_{fkqC!OpuIW zq^tx+2&WaU>+TU5m*`Q-f$6|@#Zg=81=y5&qAxBfjfomq*`nfI^-^)!v&h+MnERe; Qp;o&s_x#!0Dx}5#07{fs%m4rY diff --git a/playground/nextjs-app-router/components/demo/Earn.tsx b/playground/nextjs-app-router/components/demo/Earn.tsx index 66eecfbc90..d30287de4f 100644 --- a/playground/nextjs-app-router/components/demo/Earn.tsx +++ b/playground/nextjs-app-router/components/demo/Earn.tsx @@ -1,5 +1,5 @@ import { AppContext } from '@/components/AppProvider'; -// import { Earn } from '@coinbase/onchainkit/earn'; +import { Earn } from '@coinbase/onchainkit/earn'; import { useContext } from 'react'; export function EarnDemo() { @@ -9,5 +9,5 @@ export function EarnDemo() { return
Please set a vault address
; } - // return ; + return ; } diff --git a/playground/nextjs-app-router/onchainkit/package.json b/playground/nextjs-app-router/onchainkit/package.json index eac301d699..0679f21097 100644 --- a/playground/nextjs-app-router/onchainkit/package.json +++ b/playground/nextjs-app-router/onchainkit/package.json @@ -1,6 +1,6 @@ { "name": "@coinbase/onchainkit", - "version": "0.37.5", + "version": "0.37.4", "type": "module", "repository": "https://github.com/coinbase/onchainkit.git", "license": "MIT", @@ -76,7 +76,7 @@ "react-dom": "^18", "rimraf": "^5.0.5", "storybook": "^8.2.9", - "tailwindcss": "^4.0.9", + "tailwindcss": "^3.4.3", "tscpaths": "^0.0.9", "tsup": "^8.3.5", "typescript": "~5.3.3", diff --git a/playground/nextjs-app-router/package.json b/playground/nextjs-app-router/package.json index e3e99631a8..1a72c2e926 100644 --- a/playground/nextjs-app-router/package.json +++ b/playground/nextjs-app-router/package.json @@ -26,7 +26,6 @@ "@radix-ui/react-switch": "^1.1.0", "@radix-ui/react-tabs": "^1.1.0", "@reservoir0x/reservoir-sdk": "^2.4.25", - "@tailwindcss/postcss": "^4.0.9", "@tanstack/react-query": "^5.51.11", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -48,8 +47,8 @@ "concurrently": "^8.0.0", "eslint": "^8", "eslint-config-next": "14.2.5", - "postcss": "^8.5.3", - "tailwindcss": "^4.0.9", + "postcss": "^8", + "tailwindcss": "^3.4.1", "typescript": "^5", "nodemon": "^3.0.0" } diff --git a/playground/nextjs-app-router/postcss.config.mjs b/playground/nextjs-app-router/postcss.config.mjs index 5d6d8457f7..1a69fd2a45 100644 --- a/playground/nextjs-app-router/postcss.config.mjs +++ b/playground/nextjs-app-router/postcss.config.mjs @@ -1,7 +1,7 @@ /** @type {import('postcss-load-config').Config} */ const config = { plugins: { - '@tailwindcss/postcss': {}, + tailwindcss: {}, }, }; diff --git a/playground/nextjs-app-router/tailwind.config.ts b/playground/nextjs-app-router/tailwind.config.ts index cb374ebef5..50d7d4b26e 100644 --- a/playground/nextjs-app-router/tailwind.config.ts +++ b/playground/nextjs-app-router/tailwind.config.ts @@ -6,7 +6,8 @@ const config: Config = { './components/**/*.{js,ts,jsx,tsx,mdx}', './app/**/*.{js,ts,jsx,tsx,mdx}', ], - darkMode: 'class', + darkMode: ['class'], + safelist: ['dark'], theme: { extend: { backgroundImage: { diff --git a/src/styles/tailwind-base.css b/src/styles/tailwind-base.css index 310001c337..bfe0007d2a 100644 --- a/src/styles/tailwind-base.css +++ b/src/styles/tailwind-base.css @@ -1,6 +1,4 @@ -@import 'tailwindcss'; - -@config "../../tailwind.config.js"; +@tailwind base; @layer base { :root, @@ -279,3 +277,5 @@ -ms-overflow-style: none; /* IE and Edge */ } } + +@tailwind components; diff --git a/yarn.lock b/yarn.lock index 758b5f5df3..6b6651dcf8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,13 @@ __metadata: languageName: node linkType: hard +"@alloc/quick-lru@npm:^5.2.0": + version: 5.2.0 + resolution: "@alloc/quick-lru@npm:5.2.0" + checksum: 7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0, @ampproject/remapping@npm:^2.3.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" @@ -2061,7 +2068,7 @@ __metadata: rimraf: "npm:^5.0.5" storybook: "npm:^8.2.9" tailwind-merge: "npm:^2.3.0" - tailwindcss: "npm:^4.0.9" + tailwindcss: "npm:^3.4.3" tailwindcss-animate: "npm:^1.0.7" tscpaths: "npm:^0.0.9" tsup: "npm:^8.3.5" @@ -5594,6 +5601,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -6304,6 +6318,13 @@ __metadata: languageName: node linkType: hard +"camelcase-css@npm:^2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 + languageName: node + linkType: hard + "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -6856,6 +6877,15 @@ __metadata: languageName: node linkType: hard +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + "cssstyle@npm:^4.0.1": version: 4.2.1 resolution: "cssstyle@npm:4.2.1" @@ -7123,6 +7153,13 @@ __metadata: languageName: node linkType: hard +"didyoumean@npm:^1.2.2": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: 95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b + languageName: node + linkType: hard + "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -7164,6 +7201,13 @@ __metadata: languageName: node linkType: hard +"dlv@npm:^1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: 03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 + languageName: node + linkType: hard + "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" @@ -8449,6 +8493,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -9253,7 +9306,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -10146,6 +10199,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.21.6": + version: 1.21.7 + resolution: "jiti@npm:1.21.7" + bin: + jiti: bin/jiti.js + checksum: 77b61989c758ff32407cdae8ddc77f85e18e1a13fc4977110dbd2e05fc761842f5f71bce684d9a01316e1c4263971315a111385759951080bbfe17cbb5de8f7a + languageName: node + linkType: hard + "joi@npm:^17.11.0": version: 17.13.3 resolution: "joi@npm:17.13.3" @@ -10392,7 +10454,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^3.1.1": +"lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" checksum: f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc @@ -11261,6 +11323,13 @@ __metadata: languageName: node linkType: hard +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 + languageName: node + linkType: hard + "object-inspect@npm:^1.13.3": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -11767,6 +11836,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" @@ -11912,6 +11988,48 @@ __metadata: languageName: node linkType: hard +"postcss-import@npm:^15.1.0": + version: 15.1.0 + resolution: "postcss-import@npm:15.1.0" + dependencies: + postcss-value-parser: "npm:^4.0.0" + read-cache: "npm:^1.0.0" + resolve: "npm:^1.1.7" + peerDependencies: + postcss: ^8.0.0 + checksum: 518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b + languageName: node + linkType: hard + +"postcss-js@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" + dependencies: + camelcase-css: "npm:^2.0.1" + peerDependencies: + postcss: ^8.4.21 + checksum: af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e + languageName: node + linkType: hard + +"postcss-load-config@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-load-config@npm:4.0.2" + dependencies: + lilconfig: "npm:^3.0.0" + yaml: "npm:^2.3.4" + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 + languageName: node + linkType: hard + "postcss-load-config@npm:^6.0.1": version: 6.0.1 resolution: "postcss-load-config@npm:6.0.1" @@ -11935,14 +12053,35 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^4.2.0": +"postcss-nested@npm:^6.2.0": + version: 6.2.0 + resolution: "postcss-nested@npm:6.2.0" + dependencies: + postcss-selector-parser: "npm:^6.1.1" + peerDependencies: + postcss: ^8.2.14 + checksum: 7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 languageName: node linkType: hard -"postcss@npm:^8.4.43, postcss@npm:^8.5.1": +"postcss@npm:^8.4.43, postcss@npm:^8.4.47, postcss@npm:^8.5.1": version: 8.5.2 resolution: "postcss@npm:8.5.2" dependencies: @@ -12296,6 +12435,15 @@ __metadata: languageName: node linkType: hard +"read-cache@npm:^1.0.0": + version: 1.0.0 + resolution: "read-cache@npm:1.0.0" + dependencies: + pify: "npm:^2.3.0" + checksum: 90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 + languageName: node + linkType: hard + "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -12572,7 +12720,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": +"resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -12585,7 +12733,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -13637,10 +13785,36 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:^4.0.9": - version: 4.0.9 - resolution: "tailwindcss@npm:4.0.9" - checksum: 92e5f0ff9d98b4b7c79419e21b02d703aafa86f1d9b92b039cc0ac3e2963e763c5c9bcfc2afdf9f46fc709812c1aab12565b02bebe70dcaaccb2773884cc0654 +"tailwindcss@npm:^3.4.3": + version: 3.4.17 + resolution: "tailwindcss@npm:3.4.17" + dependencies: + "@alloc/quick-lru": "npm:^5.2.0" + arg: "npm:^5.0.2" + chokidar: "npm:^3.6.0" + didyoumean: "npm:^1.2.2" + dlv: "npm:^1.1.3" + fast-glob: "npm:^3.3.2" + glob-parent: "npm:^6.0.2" + is-glob: "npm:^4.0.3" + jiti: "npm:^1.21.6" + lilconfig: "npm:^3.1.3" + micromatch: "npm:^4.0.8" + normalize-path: "npm:^3.0.0" + object-hash: "npm:^3.0.0" + picocolors: "npm:^1.1.1" + postcss: "npm:^8.4.47" + postcss-import: "npm:^15.1.0" + postcss-js: "npm:^4.0.1" + postcss-load-config: "npm:^4.0.2" + postcss-nested: "npm:^6.2.0" + postcss-selector-parser: "npm:^6.1.2" + resolve: "npm:^1.22.8" + sucrase: "npm:^3.35.0" + bin: + tailwind: lib/cli.js + tailwindcss: lib/cli.js + checksum: cc42c6e7fdf88a5507a0d7fea37f1b4122bec158977f8c017b2ae6828741f9e6f8cb90282c6bf2bd5951fd1220a53e0a50ca58f5c1c00eb7f5d9f8b80dc4523c languageName: node linkType: hard @@ -14331,7 +14505,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -15020,7 +15194,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2": +"yaml@npm:^2.2.2, yaml@npm:^2.3.4": version: 2.7.0 resolution: "yaml@npm:2.7.0" bin: From ca6a5fe77123ab3c482f5c7df86a3072e7e2f8f8 Mon Sep 17 00:00:00 2001 From: Paul Cramer Date: Wed, 5 Mar 2025 10:44:31 -0800 Subject: [PATCH 4/4] asdf --- create-onchain/templates/next/app/globals.css | 55 ++- create-onchain/templates/next/app/page.tsx | 4 +- .../templates/next/tailwind.config.ts | 22 - package.json | 2 +- playground/nextjs-app-router/app/globals.css | 133 ++--- .../app/mint/MintComponent.tsx | 2 +- .../components/demo/Earn.tsx | 4 +- .../components/ui/button.tsx | 2 +- .../components/ui/dropdown-menu.tsx | 8 +- .../nextjs-app-router/components/ui/input.tsx | 2 +- .../components/ui/radio-group.tsx | 2 +- .../components/ui/select.tsx | 4 +- .../components/ui/switch.tsx | 2 +- .../nextjs-app-router/components/ui/tabs.tsx | 4 +- .../nextjs-app-router/onchainkit/package.json | 4 +- site/docs/components/WalletComponents.tsx | 2 +- .../components/landing/ComponentPreview.tsx | 2 +- site/docs/components/landing/Tweets.tsx | 6 +- site/docs/pages/identity/address.mdx | 4 +- site/docs/pages/identity/name.mdx | 4 +- site/docs/styles.css | 40 +- .../components/AppchainBridgeAddressInput.tsx | 4 +- .../bridge/components/AppchainBridgeInput.tsx | 8 +- .../AppchainBridgeResumeTransaction.test.tsx | 2 +- .../AppchainBridgeResumeTransaction.tsx | 2 +- .../components/AppchainBridgeWithdraw.tsx | 2 +- src/buy/components/BuyAmountInput.tsx | 2 +- src/buy/components/BuyDropdown.tsx | 2 +- src/earn/components/DepositBalance.tsx | 4 +- src/earn/components/Earn.tsx | 4 +- src/earn/components/EarnAmountInput.tsx | 2 +- src/earn/components/VaultDetails.tsx | 4 +- src/earn/components/WithdrawBalance.tsx | 2 +- src/earn/components/YieldDetails.tsx | 4 +- .../FundCardPresetAmountInputItem.tsx | 2 +- src/identity/components/IdentityLayout.tsx | 2 +- .../components/QuantitySelector.test.tsx | 2 +- .../components/amount-input/AmountInput.tsx | 6 +- .../amount-input/CurrencyLabel.test.tsx | 2 +- .../components/amount-input/CurrencyLabel.tsx | 2 +- src/internal/components/tabs/Tab.tsx | 2 +- src/internal/utils/getRoundedAmount.test.ts | 4 +- src/nft/components/view/NFTImage.tsx | 2 +- src/nft/components/view/NFTOwner.tsx | 2 +- src/nft/components/view/NFTVideo.tsx | 2 +- src/styles/index-with-tailwind.css | 14 +- src/styles/tailwind-base.css | 457 +++++++++--------- src/swap/components/SwapAmountInput.tsx | 2 +- .../components/SwapSettingsSlippageInput.tsx | 4 +- .../components/SwapSettingsSlippageLayout.tsx | 2 +- .../SwapSettingsSlippageLayoutBottomSheet.tsx | 2 +- src/token/components/TokenBalance.tsx | 2 +- src/token/components/TokenSearch.tsx | 2 +- src/wallet/components/WalletIsland.tsx | 2 +- src/wallet/hooks/useGetETHBalance.test.ts | 2 +- src/wallet/hooks/useGetTokenBalance.test.ts | 2 +- yarn.lock | 200 +------- 57 files changed, 472 insertions(+), 597 deletions(-) delete mode 100644 create-onchain/templates/next/tailwind.config.ts diff --git a/create-onchain/templates/next/app/globals.css b/create-onchain/templates/next/app/globals.css index 13d40b8920..1c538936cb 100644 --- a/create-onchain/templates/next/app/globals.css +++ b/create-onchain/templates/next/app/globals.css @@ -1,27 +1,50 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss'; -:root { - --background: #ffffff; - --foreground: #171717; +@theme { + --font-sans: DM Sans, sans-serif; + + --color-background: var(--background); + --color-foreground: var(--foreground); } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; +/* + The default border color has changed to `currentColor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentColor); } } -body { - color: var(--foreground); - background: var(--background); - font-family: Arial, Helvetica, sans-serif; +@utility text-balance { + text-wrap: balance; } @layer utilities { - .text-balance { - text-wrap: balance; + :root { + --background: #ffffff; + --foreground: #171717; + } + + @media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } + } + + body { + color: var(--foreground); + background: var(--background); + font-family: Arial, Helvetica, sans-serif; } } diff --git a/create-onchain/templates/next/app/page.tsx b/create-onchain/templates/next/app/page.tsx index e4a0d138ae..57c2142c22 100644 --- a/create-onchain/templates/next/app/page.tsx +++ b/create-onchain/templates/next/app/page.tsx @@ -68,7 +68,7 @@ export default function App() { -
+
@@ -80,7 +80,7 @@ export default function App() {

Get started by editing - app/page.tsx. + app/page.tsx.

diff --git a/create-onchain/templates/next/tailwind.config.ts b/create-onchain/templates/next/tailwind.config.ts deleted file mode 100644 index 91a0333d3b..0000000000 --- a/create-onchain/templates/next/tailwind.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Config } from "tailwindcss"; - -const config: Config = { - content: [ - "./pages/**/*.{js,ts,jsx,tsx,mdx}", - "./components/**/*.{js,ts,jsx,tsx,mdx}", - "./app/**/*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - extend: { - fontFamily: { - sans: ['DM Sans', 'sans-serif'], - }, - colors: { - background: "var(--background)", - foreground: "var(--foreground)", - }, - }, - }, - plugins: [], -}; -export default config; diff --git a/package.json b/package.json index 484b7f296f..137183da7b 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "react-dom": "^18", "rimraf": "^5.0.5", "storybook": "^8.2.9", - "tailwindcss": "^3.4.3", + "tailwindcss": "^4.0.10", "tscpaths": "^0.0.9", "tsup": "^8.3.5", "typescript": "~5.3.3", diff --git a/playground/nextjs-app-router/app/globals.css b/playground/nextjs-app-router/app/globals.css index fb60fe5d76..86dc4f8bff 100644 --- a/playground/nextjs-app-router/app/globals.css +++ b/playground/nextjs-app-router/app/globals.css @@ -1,6 +1,24 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss'; + +@config '../tailwind.config.ts'; + +/* + The default border color has changed to `currentColor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentColor); + } +} @layer base { :root { @@ -59,9 +77,10 @@ } } -/* Customize existing Theme */ +@layer utilities { + /* Customize existing Theme */ -/* @layer base { + /* @layer base { :root, .default-light, .default-dark, @@ -69,15 +88,14 @@ .cyberpunk, .hacker { /* Override specific variables as needed */ - /* --ock-font-family: 'your-custom-value'; + /* --ock-font-family: 'your-custom-value'; --ock-border-radius: 'your-custom-value'; --ock-text-primary: 'your-custom-value'; */ /* } -} */ - +} */ -/* Create your own custom Theme*/ -/* + /* Create your own custom Theme*/ + /* Usage: config={{ appearance: { @@ -93,57 +111,58 @@ Usage: }, }} */ -.custom-light { - --ock-bg-primary: red; -} + .custom-light { + --ock-bg-primary: red; + } -.custom-dark { - --ock-font-family: 'DM Sans', sans-serif; - --ock-border-radius: 0.5rem; - --ock-border-radius-inner: 0.25rem; - --ock-text-inverse: #1f2937; - --ock-text-foreground: #f9fafb; - --ock-text-foreground-muted: #9ca3af; - --ock-text-error: #d1d5db; - --ock-text-primary: #f3f4f6; - --ock-text-success: #9ca3af; - --ock-text-warning: #d1d5db; - --ock-text-disabled: #4b5563; + .custom-dark { + --ock-font-family: 'DM Sans', sans-serif; + --ock-border-radius: 0.5rem; + --ock-border-radius-inner: 0.25rem; + --ock-text-inverse: #1f2937; + --ock-text-foreground: #f9fafb; + --ock-text-foreground-muted: #9ca3af; + --ock-text-error: #d1d5db; + --ock-text-primary: #f3f4f6; + --ock-text-success: #9ca3af; + --ock-text-warning: #d1d5db; + --ock-text-disabled: #4b5563; - --ock-bg-default: #111827; - --ock-bg-default-hover: #1f2937; - --ock-bg-default-active: #374151; - --ock-bg-alternate: #1f2937; - --ock-bg-alternate-hover: #374151; - --ock-bg-alternate-active: #4b5563; - --ock-bg-inverse: #0f172a; - --ock-bg-inverse-hover: #1e293b; - --ock-bg-inverse-active: #334155; - --ock-bg-primary: green; - --ock-bg-primary-hover: #6b7280; - --ock-bg-primary-active: #9ca3af; - --ock-bg-primary-washed: #1f2937; - --ock-bg-primary-disabled: #374151; - --ock-bg-secondary: #1f2937; - --ock-bg-secondary-hover: #374151; - --ock-bg-secondary-active: #4b5563; - --ock-bg-error: #991b1b; - --ock-bg-warning: #92400e; - --ock-bg-success: #065f46; - --ock-bg-default-reverse: #f9fafb; + --ock-bg-default: #111827; + --ock-bg-default-hover: #1f2937; + --ock-bg-default-active: #374151; + --ock-bg-alternate: #1f2937; + --ock-bg-alternate-hover: #374151; + --ock-bg-alternate-active: #4b5563; + --ock-bg-inverse: #0f172a; + --ock-bg-inverse-hover: #1e293b; + --ock-bg-inverse-active: #334155; + --ock-bg-primary: green; + --ock-bg-primary-hover: #6b7280; + --ock-bg-primary-active: #9ca3af; + --ock-bg-primary-washed: #1f2937; + --ock-bg-primary-disabled: #374151; + --ock-bg-secondary: #1f2937; + --ock-bg-secondary-hover: #374151; + --ock-bg-secondary-active: #4b5563; + --ock-bg-error: #991b1b; + --ock-bg-warning: #92400e; + --ock-bg-success: #065f46; + --ock-bg-default-reverse: #f9fafb; - --ock-icon-color-primary: #9ca3af; - --ock-icon-color-foreground: #f9fafb; - --ock-icon-color-foreground-muted: #9ca3af; - --ock-icon-color-inverse: #1f2937; - --ock-icon-color-error: #f87171; - --ock-icon-color-success: #34d399; - --ock-icon-color-warning: #fbbf24; + --ock-icon-color-primary: #9ca3af; + --ock-icon-color-foreground: #f9fafb; + --ock-icon-color-foreground-muted: #9ca3af; + --ock-icon-color-inverse: #1f2937; + --ock-icon-color-error: #f87171; + --ock-icon-color-success: #34d399; + --ock-icon-color-warning: #fbbf24; - --ock-line-primary: #6b7280; - --ock-line-default: #374151; - --ock-line-heavy: #4b5563; - --ock-line-inverse: #e5e7eb; + --ock-line-primary: #6b7280; + --ock-line-default: #374151; + --ock-line-heavy: #4b5563; + --ock-line-inverse: #e5e7eb; + } } @layer base { diff --git a/playground/nextjs-app-router/app/mint/MintComponent.tsx b/playground/nextjs-app-router/app/mint/MintComponent.tsx index 9f495fa555..283463ffd5 100644 --- a/playground/nextjs-app-router/app/mint/MintComponent.tsx +++ b/playground/nextjs-app-router/app/mint/MintComponent.tsx @@ -28,7 +28,7 @@ export default function MintComponent() { - +
); diff --git a/playground/nextjs-app-router/components/demo/Earn.tsx b/playground/nextjs-app-router/components/demo/Earn.tsx index d30287de4f..7f3805e738 100644 --- a/playground/nextjs-app-router/components/demo/Earn.tsx +++ b/playground/nextjs-app-router/components/demo/Earn.tsx @@ -1,5 +1,5 @@ import { AppContext } from '@/components/AppProvider'; -import { Earn } from '@coinbase/onchainkit/earn'; +// import { Earn } from '@coinbase/onchainkit/earn'; import { useContext } from 'react'; export function EarnDemo() { @@ -9,5 +9,5 @@ export function EarnDemo() { return
Please set a vault address
; } - return ; + // return ; } diff --git a/playground/nextjs-app-router/components/ui/button.tsx b/playground/nextjs-app-router/components/ui/button.tsx index efff7f670c..ae15c48918 100644 --- a/playground/nextjs-app-router/components/ui/button.tsx +++ b/playground/nextjs-app-router/components/ui/button.tsx @@ -5,7 +5,7 @@ import { forwardRef } from 'react'; import { cn } from '@/lib/utils'; const buttonVariants = cva( - 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', + 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', { variants: { variant: { diff --git a/playground/nextjs-app-router/components/ui/dropdown-menu.tsx b/playground/nextjs-app-router/components/ui/dropdown-menu.tsx index d278af5291..7420ec4179 100644 --- a/playground/nextjs-app-router/components/ui/dropdown-menu.tsx +++ b/playground/nextjs-app-router/components/ui/dropdown-menu.tsx @@ -38,7 +38,7 @@ const DropdownMenuSubTrigger = forwardRef< ( span]:line-clamp-1', + 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1', className, )} {...props} @@ -134,7 +134,7 @@ const SelectItem = forwardRef< (({ className, ...props }, ref) => ( -
{children}
+
{children}
); } diff --git a/site/docs/components/landing/ComponentPreview.tsx b/site/docs/components/landing/ComponentPreview.tsx index 2f6a8f057c..c370c937e1 100644 --- a/site/docs/components/landing/ComponentPreview.tsx +++ b/site/docs/components/landing/ComponentPreview.tsx @@ -162,7 +162,7 @@ function ComponentList({ }; return ( -
+

Ready-to-use components

diff --git a/site/docs/components/landing/Tweets.tsx b/site/docs/components/landing/Tweets.tsx index d84c7ceced..ff42259d44 100644 --- a/site/docs/components/landing/Tweets.tsx +++ b/site/docs/components/landing/Tweets.tsx @@ -51,7 +51,7 @@ const Tweets: React.FC = () => {
- +

🟣 Excited to announce that Basenames are now integrated into the Fit Club app!
@@ -71,7 +71,7 @@ const Tweets: React.FC = () => { August 23, 2024 - +

Rush absolutely recommends Base devs to try{' '} @@ -90,7 +90,7 @@ const Tweets: React.FC = () => { October 23, 2024 - +

Swap is now live on our website! Feels good to be based, thanks guys 💙{' '} diff --git a/site/docs/pages/identity/address.mdx b/site/docs/pages/identity/address.mdx index ce01697829..5f4f4e4541 100644 --- a/site/docs/pages/identity/address.mdx +++ b/site/docs/pages/identity/address.mdx @@ -39,13 +39,13 @@ You can override component styles using `className`. ```tsx twoslash import { Address } from '@coinbase/onchainkit/identity';

``` -
+
## Props diff --git a/site/docs/pages/identity/name.mdx b/site/docs/pages/identity/name.mdx index 03dc5ba9a4..6545d88f72 100644 --- a/site/docs/pages/identity/name.mdx +++ b/site/docs/pages/identity/name.mdx @@ -45,12 +45,12 @@ import { Name } from '@coinbase/onchainkit/identity'; const address = '0x02feeb0AdE57b6adEEdE5A4EEea6Cf8c21BeB6B1'; ``` - + ### Add attestation badge diff --git a/site/docs/styles.css b/site/docs/styles.css index 28d4160bb1..b55e25cee6 100644 --- a/site/docs/styles.css +++ b/site/docs/styles.css @@ -1,19 +1,37 @@ +@config '../tailwind.config.js'; + +/* + The default border color has changed to `currentColor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentColor); + } +} + @layer vocs_preflight { - @tailwind base; + @import 'tailwindcss'; } -@tailwind components; -@tailwind utilities; @layer base { :root { - --text-inverse: theme(colors.gray.50); - --text-foreground: theme(colors.gray.950); - --text-foreground-muted: theme(colors.gray.600); - --text-error: theme(colors.rose.600); - --text-primary: theme(colors.indigo.600); - --text-success: theme(colors.lime.600); - --text-warning: theme(colors.orange.600); - --text-disabled: theme(colors.gray.400); + --text-inverse: var(--color-gray-50); + --text-foreground: var(--color-gray-950); + --text-foreground-muted: var(--color-gray-600); + --text-error: var(--color-rose-600); + --text-primary: var(--color-indigo-600); + --text-success: var(--color-lime-600); + --text-warning: var(--color-orange-600); + --text-disabled: var(--color-gray-400); } } diff --git a/src/appchain/bridge/components/AppchainBridgeAddressInput.tsx b/src/appchain/bridge/components/AppchainBridgeAddressInput.tsx index 499aff6dde..4080272b12 100644 --- a/src/appchain/bridge/components/AppchainBridgeAddressInput.tsx +++ b/src/appchain/bridge/components/AppchainBridgeAddressInput.tsx @@ -39,7 +39,7 @@ export const AppchainBridgeAddressInput = () => {
To { const addr = value as Address; @@ -68,7 +68,7 @@ export const AppchainBridgeAddressInput = () => { +
); } if (bridgeParams.amountUSD === 'NaN') { @@ -70,7 +70,7 @@ export function AppchainBridgeInput({ {' '} on {to.icon} @@ -94,7 +94,7 @@ export function AppchainBridgeInput({ { 'w-full', 'border-none', 'focus:border-none', - 'focus:outline-none', + 'focus:outline-hidden', 'focus:ring-0', ); }); diff --git a/src/appchain/bridge/components/AppchainBridgeResumeTransaction.tsx b/src/appchain/bridge/components/AppchainBridgeResumeTransaction.tsx index b246e51d20..f37f25bcb3 100644 --- a/src/appchain/bridge/components/AppchainBridgeResumeTransaction.tsx +++ b/src/appchain/bridge/components/AppchainBridgeResumeTransaction.tsx @@ -55,7 +55,7 @@ export const AppchainBridgeResumeTransaction = () => { color.foregroundMuted, background.secondary, 'w-full border-none', - 'focus:border-none focus:outline-none focus:ring-0', + 'focus:border-none focus:outline-hidden focus:ring-0', )} placeholder="0x..." onChange={(value) => { diff --git a/src/appchain/bridge/components/AppchainBridgeWithdraw.tsx b/src/appchain/bridge/components/AppchainBridgeWithdraw.tsx index 68adbe2abe..48569029f2 100644 --- a/src/appchain/bridge/components/AppchainBridgeWithdraw.tsx +++ b/src/appchain/bridge/components/AppchainBridgeWithdraw.tsx @@ -52,7 +52,7 @@ export const AppchainBridgeWithdraw = () => { const LoadingContent = useMemo( () => () => (
- + Waiting for claim to be ready...
diff --git a/src/buy/components/BuyAmountInput.tsx b/src/buy/components/BuyAmountInput.tsx index 22081c9423..d65239abb7 100644 --- a/src/buy/components/BuyAmountInput.tsx +++ b/src/buy/components/BuyAmountInput.tsx @@ -24,7 +24,7 @@ export function BuyAmountInput() { diff --git a/src/earn/components/DepositBalance.tsx b/src/earn/components/DepositBalance.tsx index 70d5b90d3e..71af55faa1 100644 --- a/src/earn/components/DepositBalance.tsx +++ b/src/earn/components/DepositBalance.tsx @@ -37,14 +37,14 @@ export function DepositBalance({ className }: DepositBalanceReact) { if (!vaultToken) { return ( ); } if (status === 'pending') { return (
- + {vaultToken?.symbol}
); diff --git a/src/earn/components/Earn.tsx b/src/earn/components/Earn.tsx index 34922bde40..9649041874 100644 --- a/src/earn/components/Earn.tsx +++ b/src/earn/components/Earn.tsx @@ -31,7 +31,7 @@ function EarnDefaultContent() { value="deposit" className={cn( border.lineDefault, - '!border-l-0 !border-b-0 !border-r-0', + 'border-l-0! border-b-0! border-r-0!', )} > @@ -40,7 +40,7 @@ function EarnDefaultContent() { value="withdraw" className={cn( border.lineDefault, - '!border-l-0 !border-b-0 !border-r-0', + 'border-l-0! border-b-0! border-r-0!', )} > diff --git a/src/earn/components/EarnAmountInput.tsx b/src/earn/components/EarnAmountInput.tsx index adafc26c77..bb7b9e9929 100644 --- a/src/earn/components/EarnAmountInput.tsx +++ b/src/earn/components/EarnAmountInput.tsx @@ -21,7 +21,7 @@ export function EarnAmountInput({ text.base, color.foreground, 'w-full border-none bg-transparent text-5xl', - 'leading-none outline-none', + 'leading-none outline-hidden', )} placeholder="0.0" value={formatAmount(value)} diff --git a/src/earn/components/VaultDetails.tsx b/src/earn/components/VaultDetails.tsx index 01ace4d5e8..76af50b0e8 100644 --- a/src/earn/components/VaultDetails.tsx +++ b/src/earn/components/VaultDetails.tsx @@ -26,7 +26,7 @@ export function VaultDetails() { useEarnContext(); if (!vaultToken || !vaultName) { - return ; + return ; } return ( @@ -49,7 +49,7 @@ export function VaultDetails() { type="button" data-testid="ock-vaultDetailsButton" className={cn( - 'size-3 [&_path]:fill-[var(--ock-icon-color-foreground-muted)] [&_path]:transition-colors [&_path]:ease-in-out [&_path]:hover:fill-[var(--ock-icon-color-foreground)]', + 'size-3 [&_path]:fill-[var(--ock-icon-color-foreground-muted)] [&_path]:transition-colors [&_path]:ease-in-out hover:[&_path]:fill-(--ock-icon-color-foreground)', isOpen && '[&_path]:fill-[var(--ock-icon-color-foreground)]', )} onClick={() => setIsOpen(!isOpen)} diff --git a/src/earn/components/WithdrawBalance.tsx b/src/earn/components/WithdrawBalance.tsx index 74eb46ce40..7c083620ee 100644 --- a/src/earn/components/WithdrawBalance.tsx +++ b/src/earn/components/WithdrawBalance.tsx @@ -38,7 +38,7 @@ export function WithdrawBalance({ className }: WithdrawBalanceReact) { if (status === 'pending') { return (
- + {vaultToken?.symbol}
); diff --git a/src/earn/components/YieldDetails.tsx b/src/earn/components/YieldDetails.tsx index 13532b7f8d..01afa5dda8 100644 --- a/src/earn/components/YieldDetails.tsx +++ b/src/earn/components/YieldDetails.tsx @@ -65,7 +65,7 @@ export function YieldDetails() { const { apy } = useEarnContext(); if (!apy) { - return ; + return ; } return ( @@ -85,7 +85,7 @@ export function YieldDetails() { type="button" data-testid="ock-apyInfoButton" className={cn( - 'size-3 [&_path]:fill-[var(--ock-icon-color-foreground-muted)] [&_path]:transition-colors [&_path]:ease-in-out [&_path]:hover:fill-[var(--ock-icon-color-foreground)]', + 'size-3 [&_path]:fill-[var(--ock-icon-color-foreground-muted)] [&_path]:transition-colors [&_path]:ease-in-out hover:[&_path]:fill-(--ock-icon-color-foreground)', isOpen && '[&_path]:fill-[var(--ock-icon-color-foreground)]', )} onClick={() => setIsOpen(!isOpen)} diff --git a/src/fund/components/FundCardPresetAmountInputItem.tsx b/src/fund/components/FundCardPresetAmountInputItem.tsx index d3b1bb6513..d36e51618d 100644 --- a/src/fund/components/FundCardPresetAmountInputItem.tsx +++ b/src/fund/components/FundCardPresetAmountInputItem.tsx @@ -61,7 +61,7 @@ export function FundCardPresetAmountInputItem({ 'whitespace-nowrap', 'text-ellipsis', 'hover:bg-[var(--ock-bg-default-hover)]', - 'focus:outline-none focus:ring-2', + 'focus:outline-hidden focus:ring-2', )} title={presetAmountInputText} onClick={handleClick} diff --git a/src/identity/components/IdentityLayout.tsx b/src/identity/components/IdentityLayout.tsx index f24f1f1877..2bf170a7d0 100644 --- a/src/identity/components/IdentityLayout.tsx +++ b/src/identity/components/IdentityLayout.tsx @@ -53,7 +53,7 @@ export function IdentityLayout({ data-testid="ockIdentityLayout_container" >
-
{avatar}
+
{avatar}
{name} {addressComponent && !ethBalance && addressComponent} diff --git a/src/internal/components/QuantitySelector.test.tsx b/src/internal/components/QuantitySelector.test.tsx index 67383fd9e8..1f9dc5bbdf 100644 --- a/src/internal/components/QuantitySelector.test.tsx +++ b/src/internal/components/QuantitySelector.test.tsx @@ -249,7 +249,7 @@ describe('QuantitySelector component', () => { expect(mockOnChange).toHaveBeenCalledWith('2'); }); - it('should reset to minQuantity on blur if no value', () => { + it('should reset to minQuantity on blur-sm if no value', () => { const { getByTestId } = render(
-
+
{ render(); const spanElement = screen.getByText('$'); expect(spanElement).toHaveClass( - 'flex items-center justify-center bg-transparent text-6xl leading-none outline-none', + 'flex items-center justify-center bg-transparent text-6xl leading-none outline-hidden', ); }); }); diff --git a/src/internal/components/amount-input/CurrencyLabel.tsx b/src/internal/components/amount-input/CurrencyLabel.tsx index eb8fdbd06a..bbf0a3b72f 100644 --- a/src/internal/components/amount-input/CurrencyLabel.tsx +++ b/src/internal/components/amount-input/CurrencyLabel.tsx @@ -15,7 +15,7 @@ export const CurrencyLabel = forwardRef( text.body, color.disabled, 'flex items-center justify-center bg-transparent', - 'text-6xl leading-none outline-none', + 'text-6xl leading-none outline-hidden', className, )} data-testid="ockCurrencySpan" diff --git a/src/internal/components/tabs/Tab.tsx b/src/internal/components/tabs/Tab.tsx index f6efa0ebd2..bc6cfc2ce2 100644 --- a/src/internal/components/tabs/Tab.tsx +++ b/src/internal/components/tabs/Tab.tsx @@ -34,7 +34,7 @@ export function Tab({ isSelected ? background.primary : background.default, 'w-1/2 text-center', 'cursor-pointer px-3 py-2', - 'focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ock-text-foreground)] focus-visible:ring-inset', + 'focus:outline-hidden focus-visible:ring-2 focus-visible:ring-[var(--ock-text-foreground)] focus-visible:ring-inset', className, )} onClick={handleClick} diff --git a/src/internal/utils/getRoundedAmount.test.ts b/src/internal/utils/getRoundedAmount.test.ts index 6b02a37bf4..1660e22154 100644 --- a/src/internal/utils/getRoundedAmount.test.ts +++ b/src/internal/utils/getRoundedAmount.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from 'vitest'; import { getRoundedAmount } from './getRoundedAmount'; describe('getRoundedAmount', () => { - it('returns a rounded number with specified decimal places', () => { + it('returns a rounded-sm number with specified decimal places', () => { const balance = '0.0002851826238227'; const fractionDigits = 5; const result = getRoundedAmount(balance, fractionDigits); expect(result).toBe('0.00029'); }); - it('returns a rounded number with more decimal places than available', () => { + it('returns a rounded-sm number with more decimal places than available', () => { const balance = '123.456'; const fractionDigits = 10; const result = getRoundedAmount(balance, fractionDigits); diff --git a/src/nft/components/view/NFTImage.tsx b/src/nft/components/view/NFTImage.tsx index 76494bd44b..5501e3ef62 100644 --- a/src/nft/components/view/NFTImage.tsx +++ b/src/nft/components/view/NFTImage.tsx @@ -62,7 +62,7 @@ export function NFTImage({
*]:col-start-1 [&>*]:col-end-1 [&>*]:row-start-1 [&>*]:row-end-1', + '*:col-start-1 *:col-end-1 *:row-start-1 *:row-end-1', className, )} > diff --git a/src/nft/components/view/NFTOwner.tsx b/src/nft/components/view/NFTOwner.tsx index 96e97f7973..a9951b5f1b 100644 --- a/src/nft/components/view/NFTOwner.tsx +++ b/src/nft/components/view/NFTOwner.tsx @@ -28,7 +28,7 @@ export function NFTOwner({ className, label = 'Owned by' }: NFTOwnerReact) { >
{label}
div]:space-x-2')} + className={cn('bg-inherit! space-x-1 px-0 [&>div]:space-x-2')} address={ownerAddress} schemaId={schemaId} > diff --git a/src/nft/components/view/NFTVideo.tsx b/src/nft/components/view/NFTVideo.tsx index eadbdc8601..72dceb0806 100644 --- a/src/nft/components/view/NFTVideo.tsx +++ b/src/nft/components/view/NFTVideo.tsx @@ -50,7 +50,7 @@ export function NFTVideo({
*]:col-start-1 [&>*]:col-end-1 [&>*]:row-start-1 [&>*]:row-end-1', + '*:col-start-1 *:col-end-1 *:row-start-1 *:row-end-1', { 'content-center justify-center': !square }, className, )} diff --git a/src/styles/index-with-tailwind.css b/src/styles/index-with-tailwind.css index 5a1d5e3c95..e8ecbad113 100644 --- a/src/styles/index-with-tailwind.css +++ b/src/styles/index-with-tailwind.css @@ -1,9 +1,9 @@ -@import url("https://fonts.googleapis.com/css2?family=Inter&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Inter:wght@700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz@0,9..40;1,9..40&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,700;1,9..40,700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Oxanium:wght@200..800&display=swap"); +@import url('https://fonts.googleapis.com/css2?family=Inter&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz@0,9..40;1,9..40&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,700;1,9..40,700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Oxanium:wght@200..800&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Mono:wght@100..900&display=swap'); -@import url("./tailwind-base.css"); -@import url("./index.css"); +@import url('./tailwind-base.css'); +@import url('./index.css'); diff --git a/src/styles/tailwind-base.css b/src/styles/tailwind-base.css index bfe0007d2a..8b0e32c854 100644 --- a/src/styles/tailwind-base.css +++ b/src/styles/tailwind-base.css @@ -1,4 +1,45 @@ -@tailwind base; +@import 'tailwindcss'; + +@config '../../tailwind.config.js'; + +/* + The default border color has changed to `currentColor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentColor); + } +} + +@utility animate-enterRight { + @apply animate-in slide-in-from-right-8 fade-in duration-500; +} + +@utility animate-enterUp { + @apply animate-in slide-in-from-bottom-8 fade-in duration-500; +} + +@utility animate-enterDown { + @apply animate-in slide-in-from-top-8 fade-in duration-500; +} + +@utility scrollbar-hidden { + /* Chrome, Safari and Opera */ + &::-webkit-scrollbar { + display: none; + } + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ +} @layer base { :root, @@ -7,49 +48,49 @@ --ock-font-family: 'DM Sans', sans-serif; --ock-border-radius: 0.5rem; --ock-border-radius-inner: 0.25rem; - --ock-text-inverse: theme(colors.gray.50); - --ock-text-foreground: theme(colors.gray.950); - --ock-text-foreground-muted: theme(colors.gray.600); - --ock-text-error: theme(colors.rose.600); - --ock-text-primary: theme(colors.indigo.600); - --ock-text-success: theme(colors.lime.600); - --ock-text-warning: theme(colors.orange.600); - --ock-text-disabled: theme(colors.gray.400); + --ock-text-inverse: var(--color-gray-50); + --ock-text-foreground: var(--color-gray-950); + --ock-text-foreground-muted: var(--color-gray-600); + --ock-text-error: var(--color-rose-600); + --ock-text-primary: var(--color-indigo-600); + --ock-text-success: var(--color-lime-600); + --ock-text-warning: var(--color-orange-600); + --ock-text-disabled: var(--color-gray-400); - --ock-bg-default: theme(colors.gray.50); - --ock-bg-default-hover: theme(colors.gray.200); - --ock-bg-default-active: theme(colors.gray.300); - --ock-bg-alternate: theme(colors.gray.200); - --ock-bg-alternate-hover: theme(colors.gray.300); - --ock-bg-alternate-active: theme(colors.gray.400); - --ock-bg-inverse: theme(colors.gray.100); - --ock-bg-inverse-hover: theme(colors.gray.200); - --ock-bg-inverse-active: theme(colors.gray.300); - --ock-bg-primary: theme(colors.indigo.600); - --ock-bg-primary-hover: theme(colors.indigo.700); - --ock-bg-primary-active: theme(colors.indigo.800); - --ock-bg-primary-washed: theme(colors.indigo.100); - --ock-bg-primary-disabled: theme(colors.indigo.300); - --ock-bg-secondary: theme(colors.slate.200); - --ock-bg-secondary-hover: theme(colors.slate.300); - --ock-bg-secondary-active: theme(colors.slate.400); - --ock-bg-error: theme(colors.rose.600); - --ock-bg-warning: theme(colors.orange.600); - --ock-bg-success: theme(colors.lime.300); - --ock-bg-default-reverse: theme(colors.gray.950); + --ock-bg-default: var(--color-gray-50); + --ock-bg-default-hover: var(--color-gray-200); + --ock-bg-default-active: var(--color-gray-300); + --ock-bg-alternate: var(--color-gray-200); + --ock-bg-alternate-hover: var(--color-gray-300); + --ock-bg-alternate-active: var(--color-gray-400); + --ock-bg-inverse: var(--color-gray-100); + --ock-bg-inverse-hover: var(--color-gray-200); + --ock-bg-inverse-active: var(--color-gray-300); + --ock-bg-primary: var(--color-indigo-600); + --ock-bg-primary-hover: var(--color-indigo-700); + --ock-bg-primary-active: var(--color-indigo-800); + --ock-bg-primary-washed: var(--color-indigo-100); + --ock-bg-primary-disabled: var(--color-indigo-300); + --ock-bg-secondary: var(--color-slate-200); + --ock-bg-secondary-hover: var(--color-slate-300); + --ock-bg-secondary-active: var(--color-slate-400); + --ock-bg-error: var(--color-rose-600); + --ock-bg-warning: var(--color-orange-600); + --ock-bg-success: var(--color-lime-300); + --ock-bg-default-reverse: var(--color-gray-950); - --ock-icon-color-primary: theme(colors.indigo.600); - --ock-icon-color-foreground: theme(colors.gray.950); - --ock-icon-color-foreground-muted: theme(colors.gray.600); - --ock-icon-color-inverse: theme(colors.gray.50); - --ock-icon-color-error: theme(colors.rose.600); - --ock-icon-color-success: theme(colors.lime.600); - --ock-icon-color-warning: theme(colors.orange.600); + --ock-icon-color-primary: var(--color-indigo-600); + --ock-icon-color-foreground: var(--color-gray-950); + --ock-icon-color-foreground-muted: var(--color-gray-600); + --ock-icon-color-inverse: var(--color-gray-50); + --ock-icon-color-error: var(--color-rose-600); + --ock-icon-color-success: var(--color-lime-600); + --ock-icon-color-warning: var(--color-orange-600); - --ock-line-primary: theme(colors.indigo.600); - --ock-line-default: theme(colors.gray.300); - --ock-line-heavy: theme(colors.gray.500); - --ock-line-inverse: theme(colors.gray.700); + --ock-line-primary: var(--color-indigo-600); + --ock-line-default: var(--color-gray-300); + --ock-line-heavy: var(--color-gray-500); + --ock-line-inverse: var(--color-gray-700); } .dark, @@ -57,225 +98,195 @@ --ock-font-family: 'DM Sans', sans-serif; --ock-border-radius: 0.5rem; --ock-border-radius-inner: 0.25rem; - --ock-text-inverse: theme(colors.gray.950); - --ock-text-foreground: theme(colors.gray.50); - --ock-text-foreground-muted: theme(colors.gray.400); - --ock-text-error: theme(colors.rose.400); - --ock-text-primary: theme(colors.indigo.400); - --ock-text-success: theme(colors.lime.400); - --ock-text-warning: theme(colors.orange.400); - --ock-text-disabled: theme(colors.gray.600); + --ock-text-inverse: var(--color-gray-950); + --ock-text-foreground: var(--color-gray-50); + --ock-text-foreground-muted: var(--color-gray-400); + --ock-text-error: var(--color-rose-400); + --ock-text-primary: var(--color-indigo-400); + --ock-text-success: var(--color-lime-400); + --ock-text-warning: var(--color-orange-400); + --ock-text-disabled: var(--color-gray-600); - --ock-bg-default: theme(colors.gray.950); - --ock-bg-default-hover: theme(colors.gray.800); - --ock-bg-default-active: theme(colors.gray.700); - --ock-bg-alternate: theme(colors.gray.800); - --ock-bg-alternate-hover: theme(colors.gray.700); - --ock-bg-alternate-active: theme(colors.gray.600); - --ock-bg-inverse: theme(colors.gray.900); - --ock-bg-inverse-hover: theme(colors.gray.800); - --ock-bg-inverse-active: theme(colors.gray.700); - --ock-bg-primary: theme(colors.indigo.400); - --ock-bg-primary-hover: theme(colors.indigo.300); - --ock-bg-primary-active: theme(colors.indigo.200); - --ock-bg-primary-washed: theme(colors.indigo.900); - --ock-bg-primary-disabled: theme(colors.indigo.950); - --ock-bg-secondary: theme(colors.slate.800); - --ock-bg-secondary-hover: theme(colors.slate.700); - --ock-bg-secondary-active: theme(colors.slate.600); - --ock-bg-error: theme(colors.rose.400); - --ock-bg-warning: theme(colors.orange.400); - --ock-bg-success: theme(colors.lime.700); - --ock-bg-default-reverse: theme(colors.gray.50); + --ock-bg-default: var(--color-gray-950); + --ock-bg-default-hover: var(--color-gray-800); + --ock-bg-default-active: var(--color-gray-700); + --ock-bg-alternate: var(--color-gray-800); + --ock-bg-alternate-hover: var(--color-gray-700); + --ock-bg-alternate-active: var(--color-gray-600); + --ock-bg-inverse: var(--color-gray-900); + --ock-bg-inverse-hover: var(--color-gray-800); + --ock-bg-inverse-active: var(--color-gray-700); + --ock-bg-primary: var(--color-indigo-400); + --ock-bg-primary-hover: var(--color-indigo-300); + --ock-bg-primary-active: var(--color-indigo-200); + --ock-bg-primary-washed: var(--color-indigo-900); + --ock-bg-primary-disabled: var(--color-indigo-950); + --ock-bg-secondary: var(--color-slate-800); + --ock-bg-secondary-hover: var(--color-slate-700); + --ock-bg-secondary-active: var(--color-slate-600); + --ock-bg-error: var(--color-rose-400); + --ock-bg-warning: var(--color-orange-400); + --ock-bg-success: var(--color-lime-700); + --ock-bg-default-reverse: var(--color-gray-50); - --ock-icon-color-primary: theme(colors.indigo.400); - --ock-icon-color-foreground: theme(colors.gray.50); - --ock-icon-color-foreground-muted: theme(colors.gray.400); - --ock-icon-color-inverse: theme(colors.gray.950); - --ock-icon-color-error: theme(colors.rose.400); - --ock-icon-color-success: theme(colors.lime.400); - --ock-icon-color-warning: theme(colors.orange.400); + --ock-icon-color-primary: var(--color-indigo-400); + --ock-icon-color-foreground: var(--color-gray-50); + --ock-icon-color-foreground-muted: var(--color-gray-400); + --ock-icon-color-inverse: var(--color-gray-950); + --ock-icon-color-error: var(--color-rose-400); + --ock-icon-color-success: var(--color-lime-400); + --ock-icon-color-warning: var(--color-orange-400); - --ock-line-primary: theme(colors.indigo.400); - --ock-line-default: theme(colors.gray.700); - --ock-line-heavy: theme(colors.gray.500); - --ock-line-inverse: theme(colors.gray.300); + --ock-line-primary: var(--color-indigo-400); + --ock-line-default: var(--color-gray-700); + --ock-line-heavy: var(--color-gray-500); + --ock-line-inverse: var(--color-gray-300); } .base { --ock-font-family: 'DM Sans', sans-serif; --ock-border-radius: 0.5rem; --ock-border-radius-inner: 0.25rem; - --ock-text-inverse: theme(colors.gray.50); - --ock-text-foreground: theme(colors.gray.50); - --ock-text-foreground-muted: theme(colors.gray.400); - --ock-text-error: theme(colors.rose.400); + --ock-text-inverse: var(--color-gray-50); + --ock-text-foreground: var(--color-gray-50); + --ock-text-foreground-muted: var(--color-gray-400); + --ock-text-error: var(--color-rose-400); --ock-text-primary: #0052ff; - --ock-text-success: theme(colors.lime.400); - --ock-text-warning: theme(colors.orange.400); - --ock-text-disabled: theme(colors.gray.600); + --ock-text-success: var(--color-lime-400); + --ock-text-warning: var(--color-orange-400); + --ock-text-disabled: var(--color-gray-600); - --ock-bg-default: theme(colors.gray.950); - --ock-bg-default-hover: theme(colors.gray.800); - --ock-bg-default-active: theme(colors.gray.700); - --ock-bg-alternate: theme(colors.gray.800); - --ock-bg-alternate-hover: theme(colors.gray.700); - --ock-bg-alternate-active: theme(colors.gray.600); - --ock-bg-inverse: theme(colors.gray.900); - --ock-bg-inverse-hover: theme(colors.gray.800); - --ock-bg-inverse-active: theme(colors.gray.700); + --ock-bg-default: var(--color-gray-950); + --ock-bg-default-hover: var(--color-gray-800); + --ock-bg-default-active: var(--color-gray-700); + --ock-bg-alternate: var(--color-gray-800); + --ock-bg-alternate-hover: var(--color-gray-700); + --ock-bg-alternate-active: var(--color-gray-600); + --ock-bg-inverse: var(--color-gray-900); + --ock-bg-inverse-hover: var(--color-gray-800); + --ock-bg-inverse-active: var(--color-gray-700); --ock-bg-primary: #0052ff; --ock-bg-primary-hover: #014ceb; --ock-bg-primary-active: #0148dc; --ock-bg-primary-washed: #b2cbff; --ock-bg-primary-disabled: #80a8ff; - --ock-bg-secondary: theme(colors.slate.800); - --ock-bg-secondary-hover: theme(colors.slate.700); - --ock-bg-secondary-active: theme(colors.slate.600); - --ock-bg-error: theme(colors.rose.400); - --ock-bg-warning: theme(colors.orange.400); - --ock-bg-success: theme(colors.lime.700); - --ock-bg-default-reverse: theme(colors.gray.50); + --ock-bg-secondary: var(--color-slate-800); + --ock-bg-secondary-hover: var(--color-slate-700); + --ock-bg-secondary-active: var(--color-slate-600); + --ock-bg-error: var(--color-rose-400); + --ock-bg-warning: var(--color-orange-400); + --ock-bg-success: var(--color-lime-700); + --ock-bg-default-reverse: var(--color-gray-50); --ock-icon-color-primary: #0052ff; - --ock-icon-color-foreground: theme(colors.gray.50); - --ock-icon-color-foreground-muted: theme(colors.gray.400); - --ock-icon-color-inverse: theme(colors.gray.950); - --ock-icon-color-error: theme(colors.rose.400); - --ock-icon-color-success: theme(colors.lime.400); - --ock-icon-color-warning: theme(colors.orange.400); + --ock-icon-color-foreground: var(--color-gray-50); + --ock-icon-color-foreground-muted: var(--color-gray-400); + --ock-icon-color-inverse: var(--color-gray-950); + --ock-icon-color-error: var(--color-rose-400); + --ock-icon-color-success: var(--color-lime-400); + --ock-icon-color-warning: var(--color-orange-400); --ock-line-primary: #0052ff; - --ock-line-default: theme(colors.gray.700); - --ock-line-heavy: theme(colors.gray.500); - --ock-line-inverse: theme(colors.gray.300); + --ock-line-default: var(--color-gray-700); + --ock-line-heavy: var(--color-gray-500); + --ock-line-inverse: var(--color-gray-300); } .cyberpunk { --ock-font-family: 'Oxanium', sans-serif; --ock-border-radius: 0.125rem; --ock-border-radius-inner: 0rem; - --ock-text-inverse: theme(colors.gray.950); - --ock-text-foreground: theme(colors.gray.50); - --ock-text-foreground-muted: theme(colors.gray.400); - --ock-text-error: theme(colors.rose.400); - --ock-text-primary: theme(colors.fuchsia.400); - --ock-text-success: theme(colors.lime.400); - --ock-text-warning: theme(colors.orange.400); - --ock-text-disabled: theme(colors.gray.600); + --ock-text-inverse: var(--color-gray-950); + --ock-text-foreground: var(--color-gray-50); + --ock-text-foreground-muted: var(--color-gray-400); + --ock-text-error: var(--color-rose-400); + --ock-text-primary: var(--color-fuchsia-400); + --ock-text-success: var(--color-lime-400); + --ock-text-warning: var(--color-orange-400); + --ock-text-disabled: var(--color-gray-600); - --ock-bg-default: theme(colors.gray.950); - --ock-bg-default-hover: theme(colors.gray.800); - --ock-bg-default-active: theme(colors.gray.700); - --ock-bg-alternate: theme(colors.gray.800); - --ock-bg-alternate-hover: theme(colors.gray.700); - --ock-bg-alternate-active: theme(colors.gray.600); - --ock-bg-inverse: theme(colors.gray.900); - --ock-bg-inverse-hover: theme(colors.gray.800); - --ock-bg-inverse-active: theme(colors.gray.700); - --ock-bg-primary: theme(colors.fuchsia.400); - --ock-bg-primary-hover: theme(colors.fuchsia.300); - --ock-bg-primary-active: theme(colors.fuchsia.200); - --ock-bg-primary-washed: theme(colors.fuchsia.900); - --ock-bg-primary-disabled: theme(colors.fuchsia.950); - --ock-bg-secondary: theme(colors.slate.800); - --ock-bg-secondary-hover: theme(colors.slate.700); - --ock-bg-secondary-active: theme(colors.slate.600); - --ock-bg-error: theme(colors.rose.400); - --ock-bg-warning: theme(colors.orange.400); - --ock-bg-success: theme(colors.lime.400); - --ock-bg-default-reverse: theme(colors.gray.50); + --ock-bg-default: var(--color-gray-950); + --ock-bg-default-hover: var(--color-gray-800); + --ock-bg-default-active: var(--color-gray-700); + --ock-bg-alternate: var(--color-gray-800); + --ock-bg-alternate-hover: var(--color-gray-700); + --ock-bg-alternate-active: var(--color-gray-600); + --ock-bg-inverse: var(--color-gray-900); + --ock-bg-inverse-hover: var(--color-gray-800); + --ock-bg-inverse-active: var(--color-gray-700); + --ock-bg-primary: var(--color-fuchsia-400); + --ock-bg-primary-hover: var(--color-fuchsia-300); + --ock-bg-primary-active: var(--color-fuchsia-200); + --ock-bg-primary-washed: var(--color-fuchsia-900); + --ock-bg-primary-disabled: var(--color-fuchsia-950); + --ock-bg-secondary: var(--color-slate-800); + --ock-bg-secondary-hover: var(--color-slate-700); + --ock-bg-secondary-active: var(--color-slate-600); + --ock-bg-error: var(--color-rose-400); + --ock-bg-warning: var(--color-orange-400); + --ock-bg-success: var(--color-lime-400); + --ock-bg-default-reverse: var(--color-gray-50); - --ock-icon-color-primary: theme(colors.fuchsia.400); - --ock-icon-color-foreground: theme(colors.gray.50); - --ock-icon-color-foreground-muted: theme(colors.gray.600); - --ock-icon-color-inverse: theme(colors.gray.950); - --ock-icon-color-error: theme(colors.rose.600); - --ock-icon-color-success: theme(colors.lime.600); - --ock-icon-color-warning: theme(colors.orange.600); + --ock-icon-color-primary: var(--color-fuchsia-400); + --ock-icon-color-foreground: var(--color-gray-50); + --ock-icon-color-foreground-muted: var(--color-gray-600); + --ock-icon-color-inverse: var(--color-gray-950); + --ock-icon-color-error: var(--color-rose-600); + --ock-icon-color-success: var(--color-lime-600); + --ock-icon-color-warning: var(--color-orange-600); - --ock-line-primary: theme(colors.fuchsia.400); - --ock-line-default: theme(colors.gray.700); - --ock-line-heavy: theme(colors.gray.500); - --ock-line-inverse: theme(colors.gray.300); + --ock-line-primary: var(--color-fuchsia-400); + --ock-line-default: var(--color-gray-700); + --ock-line-heavy: var(--color-gray-500); + --ock-line-inverse: var(--color-gray-300); } .hacker { --ock-font-family: 'Noto Sans Mono', sans-serif; --ock-border-radius: 0.375rem; --ock-border-radius-inner: 0.125rem; - --ock-text-inverse: theme(colors.zinc.50); - --ock-text-foreground: theme(colors.zinc.950); - --ock-text-foreground-muted: theme(colors.zinc.600); - --ock-text-error: theme(colors.rose.600); - --ock-text-primary: theme(colors.zinc.950); - --ock-text-success: theme(colors.lime.600); - --ock-text-warning: theme(colors.orange.600); - --ock-text-disabled: theme(colors.zinc.400); + --ock-text-inverse: var(--color-zinc-50); + --ock-text-foreground: var(--color-zinc-950); + --ock-text-foreground-muted: var(--color-zinc-600); + --ock-text-error: var(--color-rose-600); + --ock-text-primary: var(--color-zinc-950); + --ock-text-success: var(--color-lime-600); + --ock-text-warning: var(--color-orange-600); + --ock-text-disabled: var(--color-zinc-400); - --ock-bg-default: theme(colors.zinc.50); - --ock-bg-default-hover: theme(colors.zinc.200); - --ock-bg-default-active: theme(colors.zinc.300); - --ock-bg-alternate: theme(colors.zinc.200); - --ock-bg-alternate-hover: theme(colors.zinc.300); - --ock-bg-alternate-active: theme(colors.zinc.400); - --ock-bg-inverse: theme(colors.zinc.100); - --ock-bg-inverse-hover: theme(colors.zinc.200); - --ock-bg-inverse-active: theme(colors.zinc.300); - --ock-bg-primary: theme(colors.zinc.950); - --ock-bg-primary-hover: theme(colors.zinc.800); - --ock-bg-primary-active: theme(colors.zinc.700); - --ock-bg-primary-washed: theme(colors.zinc.100); - --ock-bg-primary-disabled: theme(colors.zinc.300); - --ock-bg-secondary: theme(colors.neutral.200); - --ock-bg-secondary-hover: theme(colors.neutral.300); - --ock-bg-secondary-active: theme(colors.neutral.400); - --ock-bg-error: theme(colors.rose.600); - --ock-bg-warning: theme(colors.orange.600); - --ock-bg-success: theme(colors.lime.600); - --ock-bg-default-reverse: theme(colors.neutral.50); + --ock-bg-default: var(--color-zinc-50); + --ock-bg-default-hover: var(--color-zinc-200); + --ock-bg-default-active: var(--color-zinc-300); + --ock-bg-alternate: var(--color-zinc-200); + --ock-bg-alternate-hover: var(--color-zinc-300); + --ock-bg-alternate-active: var(--color-zinc-400); + --ock-bg-inverse: var(--color-zinc-100); + --ock-bg-inverse-hover: var(--color-zinc-200); + --ock-bg-inverse-active: var(--color-zinc-300); + --ock-bg-primary: var(--color-zinc-950); + --ock-bg-primary-hover: var(--color-zinc-800); + --ock-bg-primary-active: var(--color-zinc-700); + --ock-bg-primary-washed: var(--color-zinc-100); + --ock-bg-primary-disabled: var(--color-zinc-300); + --ock-bg-secondary: var(--color-neutral-200); + --ock-bg-secondary-hover: var(--color-neutral-300); + --ock-bg-secondary-active: var(--color-neutral-400); + --ock-bg-error: var(--color-rose-600); + --ock-bg-warning: var(--color-orange-600); + --ock-bg-success: var(--color-lime-600); + --ock-bg-default-reverse: var(--color-neutral-50); - --ock-icon-color-primary: theme(colors.zinc.950); - --ock-icon-color-foreground: theme(colors.zinc.950); - --ock-icon-color-foreground-muted: theme(colors.zinc.600); - --ock-icon-color-inverse: theme(colors.zinc.50); - --ock-icon-color-error: theme(colors.rose.600); - --ock-icon-color-success: theme(colors.lime.600); - --ock-icon-color-warning: theme(colors.orange.600); + --ock-icon-color-primary: var(--color-zinc-950); + --ock-icon-color-foreground: var(--color-zinc-950); + --ock-icon-color-foreground-muted: var(--color-zinc-600); + --ock-icon-color-inverse: var(--color-zinc-50); + --ock-icon-color-error: var(--color-rose-600); + --ock-icon-color-success: var(--color-lime-600); + --ock-icon-color-warning: var(--color-orange-600); - --ock-line-primary: theme(colors.zinc.950); - --ock-line-default: theme(colors.zinc.300); - --ock-line-heavy: theme(colors.zinc.500); - --ock-line-inverse: theme(colors.zinc.700); + --ock-line-primary: var(--color-zinc-950); + --ock-line-default: var(--color-zinc-300); + --ock-line-heavy: var(--color-zinc-500); + --ock-line-inverse: var(--color-zinc-700); } } - -@layer components { - .animate-enterRight { - @apply animate-in slide-in-from-right-8 fade-in duration-500; - } - - .animate-enterUp { - @apply animate-in slide-in-from-bottom-8 fade-in duration-500; - } - - .animate-enterDown { - @apply animate-in slide-in-from-top-8 fade-in duration-500; - } -} - -@tailwind utilities; - -@layer utilities { - /* Chrome, Safari and Opera */ - .scrollbar-hidden::-webkit-scrollbar { - display: none; - } - - .scrollbar-hidden { - scrollbar-width: none; /* Firefox */ - -ms-overflow-style: none; /* IE and Edge */ - } -} - -@tailwind components; diff --git a/src/swap/components/SwapAmountInput.tsx b/src/swap/components/SwapAmountInput.tsx index b162f1ec10..6f1b4f591e 100644 --- a/src/swap/components/SwapAmountInput.tsx +++ b/src/swap/components/SwapAmountInput.tsx @@ -116,7 +116,7 @@ export function SwapAmountInput({ @@ -163,7 +163,7 @@ export function SwapSettingsSlippageInput({ background.default, color.foreground, text.label2, - 'ml-1 flex-shrink-0 font-normal leading-6', + 'ml-1 shrink-0 font-normal leading-6', )} > % diff --git a/src/swap/components/SwapSettingsSlippageLayout.tsx b/src/swap/components/SwapSettingsSlippageLayout.tsx index 0f33f86d95..2a9f5a4643 100644 --- a/src/swap/components/SwapSettingsSlippageLayout.tsx +++ b/src/swap/components/SwapSettingsSlippageLayout.tsx @@ -35,7 +35,7 @@ export function SwapSettingsSlippageLayout({ {title} {description}
- {input &&
{input}
} + {input &&
{input}
}
); diff --git a/src/swap/components/SwapSettingsSlippageLayoutBottomSheet.tsx b/src/swap/components/SwapSettingsSlippageLayoutBottomSheet.tsx index b05fe36147..57c6ad0e2c 100644 --- a/src/swap/components/SwapSettingsSlippageLayoutBottomSheet.tsx +++ b/src/swap/components/SwapSettingsSlippageLayoutBottomSheet.tsx @@ -45,7 +45,7 @@ export function SwapSettingsSlippageLayoutBottomSheet({
{title}
{description}
- {input &&
{input}
} + {input &&
{input}
}
diff --git a/src/token/components/TokenSearch.tsx b/src/token/components/TokenSearch.tsx index 5c7ac94c53..0ee612b67c 100644 --- a/src/token/components/TokenSearch.tsx +++ b/src/token/components/TokenSearch.tsx @@ -33,7 +33,7 @@ export function TokenSearch({ pressable.alternate, color.foreground, placeholder.default, - 'w-full rounded-xl py-2 pr-5 pl-12 outline-none', + 'w-full rounded-xl py-2 pr-5 pl-12 outline-hidden', className, )} placeholder="Search for a token" diff --git a/src/wallet/components/WalletIsland.tsx b/src/wallet/components/WalletIsland.tsx index d0e221c638..ab782b967b 100644 --- a/src/wallet/components/WalletIsland.tsx +++ b/src/wallet/components/WalletIsland.tsx @@ -22,7 +22,7 @@ export function WalletIsland({ return ( - +
{portfolioSvg}
diff --git a/src/wallet/hooks/useGetETHBalance.test.ts b/src/wallet/hooks/useGetETHBalance.test.ts index 666079bd35..deb68747cd 100644 --- a/src/wallet/hooks/useGetETHBalance.test.ts +++ b/src/wallet/hooks/useGetETHBalance.test.ts @@ -41,7 +41,7 @@ describe('useGetETHBalance', () => { vi.clearAllMocks(); }); - it('should return converted and rounded balance without error', () => { + it('should return converted and rounded-sm balance without error', () => { (useBalance as Mock).mockReturnValue(mockEthBalanceResponse); const { result } = renderHook(() => useGetETHBalance(mockAddress)); expect(result.current.convertedBalance).toBe('0.0002851826238227'); diff --git a/src/wallet/hooks/useGetTokenBalance.test.ts b/src/wallet/hooks/useGetTokenBalance.test.ts index c763859849..1033bf5f2a 100644 --- a/src/wallet/hooks/useGetTokenBalance.test.ts +++ b/src/wallet/hooks/useGetTokenBalance.test.ts @@ -29,7 +29,7 @@ describe('useGetTokenBalance', () => { vi.clearAllMocks(); }); - it('should return converted and rounded balance without error', () => { + it('should return converted and rounded-sm balance without error', () => { (useReadContract as Mock).mockReturnValue(mockTokenBalanceResponse); const { result } = renderHook(() => useGetTokenBalance(mockAddress, USDC_TOKEN), diff --git a/yarn.lock b/yarn.lock index 6b6651dcf8..f2161144b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,13 +19,6 @@ __metadata: languageName: node linkType: hard -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: 7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 - languageName: node - linkType: hard - "@ampproject/remapping@npm:^2.2.0, @ampproject/remapping@npm:^2.3.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" @@ -2068,7 +2061,7 @@ __metadata: rimraf: "npm:^5.0.5" storybook: "npm:^8.2.9" tailwind-merge: "npm:^2.3.0" - tailwindcss: "npm:^3.4.3" + tailwindcss: "npm:^4.0.10" tailwindcss-animate: "npm:^1.0.7" tscpaths: "npm:^0.0.9" tsup: "npm:^8.3.5" @@ -5601,13 +5594,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e - languageName: node - linkType: hard - "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -6318,13 +6304,6 @@ __metadata: languageName: node linkType: hard -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 - languageName: node - linkType: hard - "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -6877,15 +6856,6 @@ __metadata: languageName: node linkType: hard -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - "cssstyle@npm:^4.0.1": version: 4.2.1 resolution: "cssstyle@npm:4.2.1" @@ -7153,13 +7123,6 @@ __metadata: languageName: node linkType: hard -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -7201,13 +7164,6 @@ __metadata: languageName: node linkType: hard -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: 03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 - languageName: node - linkType: hard - "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" @@ -8493,15 +8449,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -9306,7 +9253,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -10199,15 +10146,6 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.21.6": - version: 1.21.7 - resolution: "jiti@npm:1.21.7" - bin: - jiti: bin/jiti.js - checksum: 77b61989c758ff32407cdae8ddc77f85e18e1a13fc4977110dbd2e05fc761842f5f71bce684d9a01316e1c4263971315a111385759951080bbfe17cbb5de8f7a - languageName: node - linkType: hard - "joi@npm:^17.11.0": version: 17.13.3 resolution: "joi@npm:17.13.3" @@ -10454,7 +10392,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": +"lilconfig@npm:^3.1.1": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" checksum: f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc @@ -11323,13 +11261,6 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^3.0.0": - version: 3.0.0 - resolution: "object-hash@npm:3.0.0" - checksum: a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 - languageName: node - linkType: hard - "object-inspect@npm:^1.13.3": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -11836,13 +11767,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" @@ -11988,48 +11912,6 @@ __metadata: languageName: node linkType: hard -"postcss-import@npm:^15.1.0": - version: 15.1.0 - resolution: "postcss-import@npm:15.1.0" - dependencies: - postcss-value-parser: "npm:^4.0.0" - read-cache: "npm:^1.0.0" - resolve: "npm:^1.1.7" - peerDependencies: - postcss: ^8.0.0 - checksum: 518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b - languageName: node - linkType: hard - -"postcss-js@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-js@npm:4.0.1" - dependencies: - camelcase-css: "npm:^2.0.1" - peerDependencies: - postcss: ^8.4.21 - checksum: af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e - languageName: node - linkType: hard - -"postcss-load-config@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-load-config@npm:4.0.2" - dependencies: - lilconfig: "npm:^3.0.0" - yaml: "npm:^2.3.4" - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 - languageName: node - linkType: hard - "postcss-load-config@npm:^6.0.1": version: 6.0.1 resolution: "postcss-load-config@npm:6.0.1" @@ -12053,35 +11935,14 @@ __metadata: languageName: node linkType: hard -"postcss-nested@npm:^6.2.0": - version: 6.2.0 - resolution: "postcss-nested@npm:6.2.0" - dependencies: - postcss-selector-parser: "npm:^6.1.1" - peerDependencies: - postcss: ^8.2.14 - checksum: 7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": +"postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 languageName: node linkType: hard -"postcss@npm:^8.4.43, postcss@npm:^8.4.47, postcss@npm:^8.5.1": +"postcss@npm:^8.4.43, postcss@npm:^8.5.1": version: 8.5.2 resolution: "postcss@npm:8.5.2" dependencies: @@ -12435,15 +12296,6 @@ __metadata: languageName: node linkType: hard -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: "npm:^2.3.0" - checksum: 90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 - languageName: node - linkType: hard - "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -12720,7 +12572,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": +"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -12733,7 +12585,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -13785,36 +13637,10 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:^3.4.3": - version: 3.4.17 - resolution: "tailwindcss@npm:3.4.17" - dependencies: - "@alloc/quick-lru": "npm:^5.2.0" - arg: "npm:^5.0.2" - chokidar: "npm:^3.6.0" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.3.2" - glob-parent: "npm:^6.0.2" - is-glob: "npm:^4.0.3" - jiti: "npm:^1.21.6" - lilconfig: "npm:^3.1.3" - micromatch: "npm:^4.0.8" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^3.0.0" - picocolors: "npm:^1.1.1" - postcss: "npm:^8.4.47" - postcss-import: "npm:^15.1.0" - postcss-js: "npm:^4.0.1" - postcss-load-config: "npm:^4.0.2" - postcss-nested: "npm:^6.2.0" - postcss-selector-parser: "npm:^6.1.2" - resolve: "npm:^1.22.8" - sucrase: "npm:^3.35.0" - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: cc42c6e7fdf88a5507a0d7fea37f1b4122bec158977f8c017b2ae6828741f9e6f8cb90282c6bf2bd5951fd1220a53e0a50ca58f5c1c00eb7f5d9f8b80dc4523c +"tailwindcss@npm:^4.0.10": + version: 4.0.10 + resolution: "tailwindcss@npm:4.0.10" + checksum: dadc2789d61ec7d83075cbf04a1f8a12e6f572fa1e7ab14c63a246a6bb7546c90a70d11db379a1d865b9eaa1a98bf1758065015ce12c23994d03ef9038145e49 languageName: node linkType: hard @@ -14505,7 +14331,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -15194,7 +15020,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2, yaml@npm:^2.3.4": +"yaml@npm:^2.2.2": version: 2.7.0 resolution: "yaml@npm:2.7.0" bin: