From 87ad7ef9811b9ce0af5c29ddeb9b4359c0dc4431 Mon Sep 17 00:00:00 2001 From: bkellam Date: Mon, 26 Aug 2024 20:54:15 -0700 Subject: [PATCH] Add theme toggle --- package.json | 2 + public/sb_logo_dark.png | Bin 0 -> 28310 bytes public/sb_logo_light.png | Bin 0 -> 25689 bytes src/app/layout.tsx | 32 +++- src/app/page.tsx | 74 +++++--- src/app/themeProvider.tsx | 13 ++ src/app/themeSelectorButton.tsx | 41 +++++ src/components/ui/dropdown-menu.tsx | 200 +++++++++++++++++++++ yarn.lock | 261 +++++++++++++++++++++++++++- 9 files changed, 585 insertions(+), 38 deletions(-) create mode 100644 public/sb_logo_dark.png create mode 100644 public/sb_logo_light.png create mode 100644 src/app/themeProvider.tsx create mode 100644 src/app/themeSelectorButton.tsx create mode 100644 src/components/ui/dropdown-menu.tsx diff --git a/package.json b/package.json index a5013018..dae1d9de 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@codemirror/lang-javascript": "^6.2.2", "@codemirror/state": "^6.4.1", "@codemirror/view": "^6.33.0", + "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-scroll-area": "^1.1.0", "@radix-ui/react-separator": "^1.1.0", @@ -23,6 +24,7 @@ "http-status-codes": "^2.3.0", "lucide-react": "^0.435.0", "next": "14.2.6", + "next-themes": "^0.3.0", "react": "^18", "react-dom": "^18", "react-resizable-panels": "^2.1.1", diff --git a/public/sb_logo_dark.png b/public/sb_logo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a22da255ae57a538d2783a40f7c932b2f4fb2e GIT binary patch literal 28310 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 b*N;#1b~<+Gz6nqNcVwuJF{Dh}>G}Tvz8js0 literal 0 HcmV?d00001 diff --git a/public/sb_logo_light.png b/public/sb_logo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..deac80843381a4a57e023c00528f4fc351e7d37c GIT binary patch literal 25689 zcmeFYg;$i{_Xau)Eh#7+(gFg~-O{Btz z->_fh0>e9MfGpSSOg-J94a4p>!|><8C+{1Ep4n};Parv5Cg$!Ocg zKty;Iw3<=6{h4oF%0S%BW2)49s*NMmy5VcpGq0S@r@BU6WUL=wzEr{1pZPdmnqtGG zc&)~G58X}gD@ZH@D#v3_e3kdPT@FPxo0f?QZ?i?D$RT6af?_d(o8`(@#Fl#F$0ab{ zkHS+I52v%>dmP(w@f4CkoH}sKZhYY$M!F>YR|-@14{mJGgKlP2i1N~BTpTy>op4qC znT$4L*fa0cHVk57@FAI9)pd*H!~&w-Vea-85J~D;$&d!UMoR_9MnmNV;23ZMI3w+% zpGLRfyQ>;|0RX%#f4>-h1+qTqM%;I5T1vQo@Mr;~9Imz`T<9k1cS=U@6y020>|Eag z6g};%-`Tx+;tP8B_KAv`)=NV$F(m--1fcdpUe9lCZ^8FVj(*O?;b`M)G6e;lC;da= z;p|Ev<{ux!iW}Ve<9?ts6!{w2o-aF&RZ+M=5|1+xpPCt!Z=>-<6 zH#=$RiKhL*<*f%VO++H6?`H0nzYKDEx6LLq^E!CMf9G6$D^M<(RqcPD{~_={1pbG> z{}A~9IRayX1S0a*T38}D64O`j0GM!^ukDBagnl!d{{f?92jtet#+1ZFU@XY#tSxQB z3*q(6t;RP{@J(!uRO!+qiSJgH=D$Fv;QLp=b z$Q|Grz^7K@ziyx0$WVOnR0xe;^_x7}u!KbA&;Qx75;-5B46f9R%VdMm6Mwo3GHA9r z-@iva@0I4Ww<6%t@G|cCN?G70reU+BYBKAF(_(pd_PZW@k~)cas-5Oh^EvN)X=XK( zyezHfj`x6@*jmper(z#n6eIW^vl8IrJDvD%b;DLbr}a9_HtZW3v0s}Pw78hlNre=y zATRWwYRQn_&%we$DPcN*c3k3W@m%kv07`dUcS3E$)PKEM-T#;!^lposjGb~Gt8FJLMoUV z+%SwUCHeh-a@w^6?#{O2H&D!U7rreGWqRD6=lc4;1)cJPVXhpQORRA;y2ty(H;kb0 z?0-uclgNYzG>I(Bf?s=Vv{X+i(nP}&{@=N#y0NB~b^yFM#Pys#!|d?K@I{e`f4u_O z_eFkMz5^}+Eo@)MHphiAV)9{E)`dHgJJk=)QdwEhdM;q`7znnGE zpjXg;Qi2v!_DNiqiQ_-4bj!LHfY$d@JulnGLVnGCQOF1)^D7(vpJZ_lh4 z>`*{FP{u~^jjh8nt&yDNzx@j9NrPdcC~Dsido2%AKK*Me`8I%G&ZDY?kX#`8@lFB- z%$EPxt}hNgWt2;AmaCHptFn3j>Te@tpv)1tI}B&?2|e?{im#{sx3$tbE_SF0?nw16 z!P*O}!2kL~c1mr4P7Eb?sh_NY&_4TrN>I{Nng*Yv@XK4U5Q_qg{$KyXvrjHaW?c^y za}!AeO#`OU+{FnnK~zQuP^P9d$^oDSj??71E{n&F9>m>OsRE&-ei2dS|K^^2U4S)3 zw;YH4>0E93!E!U)Elg4cCF*Lfl81aihu6a3$J9*~?fV=mhzcYz{fA9yf%3d}(|XeSYE~{-bV>fP(|{^g zt;1$gzc*jn>Pa$4hH&C>4n`W{7Kxo#t-1e>t_#y+1AF6LP6Y>0T>zjYsC7}(9&yB+?2FD1gW zl+}CIH$9h?;6F4G`;>4C_;6;o_mk(7iiZD$vQw-8+})5fwdcS6qWAUo_YlIB8bx-b zZUe*MJN@~{OaOQ?{30gJ;XdI@*n9uetCv9bu947E-Z*lj>Q|t zU4^}RZ*%28FobKFq^@zX@$ZHPWqk?`FDRR(mb zsOGm$8Eqa1I0~!}DfwC!)(q~Ix>YNvv0IxL!~Ns>g@ql1T#fHlt~1^Bx$p>XFr3Va zA0>xh7y1CIzjkvm;oxa|ohPB2}z)PmS`D zw%P7gebeuvgo;xnOPq|kZt|@eTCceRfxF_=-A8fBwcFF+h}saxO=7l1HxA4|V4!fF zS96bpGI@J`f>720@mL3N8e=-;ejp?H&XHw#68;l17bd83SZ^RSg5idd`xNdY+kQBU zG1GPknwmHYSfgvCx{yXmjybl72E@}*nqu;?wuaAtJDg4X{FSC6N-esa4bB)=hNeq{ zxji()R-qBk%T!{6=^;~o~0OMkbKd7f9Gbf)Q;yTi;}SVz}`JId7=5F z9c!vE&TIWAq^rlP=Yr1Iv`qTUbT^a{%N1}}?_qXB5^wJkDGo1Ff6e}mc?^$8t>V~Im)R}vfwPk+%3utyCRp`#pGierd;HDSbCCMxD9u*i zJ@2e{Ncn!7!TsiQleVHm@kbYgpss}ixUU)u5`D;U26Ew9xoUL5Y);d(VYq5;-KKW- z7zmfnp5a3T7_%?*VT8}vpAWaH*f&*JZ8&D{^NAscwJvMluJqZKM*88j;7;1DzC`~P zaRfaHvOdFaAUJa8mXcHV#itdZ`R?jm$Zus1<_5x*E798hoLP)s8ly zw+FV!%!A+xJyJUzE3JOk_&|-R%7+)i+ruDk#&?bokXz#}PzKO~I|KO|Y=LPpc5xH9 zrhMo8b$Yy5$Q}qPUFJ~jo*8shUZcBg1Lm5kV;ph!O>|=3)kY{@jxF z5`N*3LID-e6r#Cw9*dEB3~$+PO<}K%pzJjXGLE%I%FV~$-GRKHkdA{yZuUXvCHE!- zI=AO|{J$>$6k^6S1tLG9u1Py4s~JKX?Yj-yb9AVn1-(#`qD8?*ua4#1iJ6!_V*alE zC(hG4UoiGbnZjYYFFP!+Q6=|}Xk=do?u^j@`4xBw$7C_kcJNfbg{8|~rQE}mYQ5=h z(q($I-B)9mK|Pbx3s{!+`z-a)Wf%!^0TSqv?XJWk-V%eFMrBhB+PGr0z-wsNrZ6S< z{iy=PJ{x#LSy44Bl2(VaiQ&dQEB*slEJi3`%L|U?7_J5qSrQ|;EG|ZMs5Cj4g(mMF zTN@&Es-MNOTg99qH& z%CnP2^>r?V3y;9-t~`d&Y5NF&&T99mPYVj=k7Z{WI$D&ZgO7VyjY&K9$kVhfS6>-E zv(vV6NqqIpF32lH1&4n<3vCkuUSBUJOMkv?B_5+a4aI5u<@eHf1ElY$4qT6dkFYJY z4TDp{@QrhGzx7eXbj2D9G6mAFwU_j;E}a|xfju82|m%R0GrCdi4*!TK^7 zjGmqu2@s)9s0BUI#Ic}U@uoi=5hiF3RV-+=> zpA944K2xm(lHL)+hY2zV{eY=M_-t>x^+AW-{)Z2g^h*dA7o!sF0U01SrD-ZOxPAWO zPt}|%cWjP=dZoS++RH))2Ol~fCk;4YGXtzsIgb*y{DPKJ%Gua>4s2t9=voqoge|%m_PbGvE+R{|9S3G9}`PDJ=q(Qy$>s=gl z_q#@4Rjg0W)nV}BwqZNJ`r(2gXo&yZHT%`(c23PC_2?XusvxYr`4BeIww#coF8c zYsjmHSF|FvJQlwe0#~-BeMb-RQhUyNehhiiM4T%7){kwo$E9V&L}xh!6lZE=J(#rf zQr$iEAA6c6kU8b|RdyKns%Vz%0s}PR_^OIgkaikQ-imW~YMfRJ@1KMyEYYCZ<~qJ~ zvXcn>GQ-Or&)R@zg4beV{5od5Db2;S;4VwlVWU=QA=rVW=O@CEiEb*x(YWn{Y>rMu><3Cx>R0W+pNKv4E;wBpE=EvT|2S=zl88fELMQ<84oA`{~yeITJP+#)tL z=V~%De*IIG&<)3!F`Nm9i8Q-8s^D3MZl~J*g4ToQ0367IDU*N<*nbPkUOz~~je9n0RmH13Xv=n&IEi1xl-n|3!<+smD z#7Wle>cndNBvi{t#5tNWdIt=_p)gM6jZV1X^Jq5tEc+8awz*udpqGrP)NsB&(P(ep zlDcn^ZVc`r0cn#c8s0kJF8n1zCOV^@eFCPTZxue19hHk6=_W?cZI#aHrGpJ4NjL3b z%x{QqHQ%CNXl*S*ZlSr%)x`+(nPkJx$03q`7$YQneDo6}PU!pc^X%`O#BQ}kqN1fu z3F&{pXJ%t3j&UQKknMEDo0)cGeW3Ej0^C@n6ZOvLJco7}wy`+yJQ{8n(`3kCGQlHO zQHFdBJ9B5j+Fg}4)geElbuL@biwrNA;6ht;^AwO-AfWww&|pFOu}MlYk6R6A){YB2 zbQSSdf0`G*tNw#$%gQr9voIyu=(S+YN;`)1Ts>-y}AuefVk}KM-_AjeNVyOYJ>3G%d^*Tk5-19&@)aGLGlrYG zMDibsENf=VKR(46NP5f zfg4jU(dI*^n1BFTqC>hOLgJbtd>5<{Q?$yL_`eu*RPB5jfw?(N-CM_rqF-j#-6z=C zcpLOuVk*8{^tv>clg&RYn4qM%zNaSy^4q1t^Qn8*!gHL_%96rO4d+h|B5nali2SOk zf|bIlPy8=sX|vj5hi-Y}^M}<_iwo!acvF$|=Aoet`9(->_G-wtvW}mgb{IA{4r6bt zUx&rb^VGOMM;T{Zn*|a3H4cA$ApYp-)sNMCIg`YnAh_+Wblk07ODmwrKcRqld3Rk< zOQ@=6dpQLR4c4!h#bPIQT9T-6nynM>@x`yMs0rMNfRUCHA!6^?=@w^Oj}#1_evT}B zfM4#0Q4R3WW~$Jwp%Qy+$mLv+37>}cUHE~VYU}e!^&h)&`Q2n=QYxM*tJL;Uh8=j^ zv}uL80m)si_+gJxcG)X#JQ=W~Fgd8mORE&BIo=%6)7)|kpBFX_t<6Y<_b}`1`6ajJ z{J@P+zE(lX1caE0C-gM^CnxkX>f)-8b5PKro zL#14alZg(B1)r^k+3-WHcR|=QbM}msRT!F6LPIQd(>teL&e269b=F%WL^!;CoRGh4 z89`dUA|hfqU7s_x;DA01(xn1RXWxN6Qb~I2R}OH2F`=?s?g@vA=1^cdz%}kRECE5t zRgDhAw&<}JBNG5swcNc6gJGfxo#%9l{sz6zK851u+6v04_%7k%Sv#28xU6Uud7rnk zM5$7omP<*5Te-~e?;p7DbyUhYb*hhk=ju<40joTq3#9~gmvVzs;g@h))qL25RCBU{ zneOfvfYhjc;*VM$3KzEmos1R1it>>TDf)p{F;YH86=f`{cZ(2=|A3u+5}_;LWsoc=Io43QoPo^!jC+ zO%qg2*KmG(?0tcCz{Up314w|?;(`lmtPo?r|3tNd<$X0cX)!Kr)~rn{_;YFn4mfR3 z&f5XbMu|>~=5Qi7GVGe>+&>iON-bu^dHzBw>O^v(mhkXG)PC+uj32-(#YAllRZO$g?R|%7TK(wcw*1$cy`3Rajw@z(N}*yjsY&={j;< z(%YTdod)zOyI1+pm)Tuw&5I7i6p_-;%_-UJfi!4L7X?FGi)NYjx=t_p1$`UNf2`e! zdCw1gfA{Wu_ybx~r|2lJ7trM6ktR4gm3UX`i2YLsqg3RPm+7*lYJY;HT7PT|IA5)E zhvz}wSxlTjTm|tL%ps=7)2*P-p>EVAFK_pHd}K4XecXm-v{I6UqGMN`n%h@d9h#DK#O3yz zWfz7*-L*EUxMx?cYjhq?oZn!k z%7_r5l4l)nb5v!zhZ)&g8!mdpLXiM>F3##eYN&n;VnrJA=9oP9D9dw>?qd=M@EvJK zSBIN69yz`X2PTqsJi9YDl@UL@Vwy+KUB;T2 zURPE#SduE164Bxrr&|(0xAtoc?zlB7h`5F0qt)jK8{&nukxVj1RGPjyD(rtPD6o>rA5vO*RvRayiwEJ>a=vaiNwW!qIv~sJln3;fNhBI}u z6z>yGFs_-GHG6zb5bvz`FCU9qYNU7AS0 zsm~LP5bjf@pxe`*m883)Y!hc;exyu$M&&MXPIC$fFKwf`Npsu7b4r&aQ(ztEA09oyJY3qg3@vEc~a^qe}ay59fQ z0ze4@1F8taZ%tbck9ACBjvqlH&px@HV?q=v43i9)$C_L)gNhIRp&pp`-ns(Z6hR0X z<&gd|0x%1e#eQ0$8H1|ZN#2zxr3>WhnTr3@((i3JUtW}2iZ041pkKRIQ|q%#I6jvF zwxpdXY!zhIcAHY019v;ulUkZ$gicRK2yKjkdx)8KlgzHGCu@mtt|nDFtTywqs4C}r zo2z@%B}bQIeD5?*QBcIeuIj0^cvSHev~9brD{aZo)f9G`&m0UewRs(3WmwXT}PZ&(wqFu@Xv!nTCAnT!m7ir}`$T z1b$2Ns*hgyeqcg;J~2S4kC`F_IbGwvgW!?^G26Jc?EbJiTh-Tgo}MrA+aX-W^M1v$ zu~V#7BJ5gQ1O4Q1ZtDB>$=3!c79k56YJqeTpO$hI7+749*cQqR{bfZ`ax_FfZUnY| zyd`}tx$>+%sx8lT5v~V6GTmf6x?{Pg(pv&VIG!PPDpS%%rR)a6dmYIALs=KILupa* zOvi)t1u1Zl~R7L$S>H&mD7W9RIFmu$2J z)hDezn0q=VRGkPlwfNZFX+KGKt(Y~xSiMKGQ6R$_wX&1AE>l&t0fT^KbT+q=FyUvj zYX1P3q6dYc6EW(?+)zWY+UAu$9Ms!CSjgwPxpem{2T>&hx{MvI!oNkRtQvZ`M#;@U zwGqwPOYoI7aSGQ2chEH?zIBr~kH2s{R%dUwDR_7t*YXhy<(rw^{pykaTx>mW;p{Lz zTQa9w3xzC`hHyQUZwjz0=#6sqNs0lmXmvj4T-cB&# zV^^n5?CexX96ud>v{soz%h&5%7v{rXgrcY4_tUjP*E~YMT=n?{&EA;$Zp(r$Pgt08 z)6F%o7J~vt7rdlsiw88V*eu!O`i#+cRRfx1>M|PO2>51Zk3WDV)Jd8`8{3n%GKdA_ zU1jF1vr7=IVY~0AJ6vy&&=n-(U(s+*yG)*WIynvI7WlaK_2JEkYn+U00r%Sp#)0{u zF&n;$UurZ9ykS(MOChtdit()uR}F0EXz5=HGgn1-^?EudlPZjM82gIuFBbQ}dx1=4 zbI>F|>-!(uZj8f^em{iqFy+=dZ~o@*@v7PJQZUW=X)De2cg?qx5s;4Z^VvuFbq`Da zpvcAqwi@I5B+$Winta{hYDnGhs7801Zv%T?kf!(Ieh$j}V>)g55HD4cwy$Bg*Latc zhNkHpp#9S7DCQ@;5}?bW^LSq}Osj)WnX;8cQ^e|JbekL#Yu3XTlE<6nUnua67aY2c z?tf<43C3sWyq)#;IXKGfeX+{s57Q8{S^SbZ6{&BR3BNLJ$2tSLR&!?A2)NU^2d-hT zM%`BA)F$ik#&cAa1UQ*4eB`67Vr$oDDX_n=h+#~=-}L_|6v0pF0I0X0bF2S#rNn11 zB%`#mBnTSrz+&;nMj1wcP*eo_6DX-xgUQ87R<&PMG4h>ZseiC3ga)s7Yf70Z zJWg_#p3kj=WhIH)J1CSVQZxtZY(SB}7=OJsp<+|as2)q*>K^|eh5_~oNok3}((diU zzl8z;_XI&S88hFhJZX$kpik9)a0h`;8$=AsT$$&I(-Ws(;;Tn75*!vo4KYRQ#Ukk= z4{ItaOWqN4M(YbLVIP2g``+8Kjm9QL6_d1upv~1RE0MN|$XZIH76;}>rWQ}3_I9hO z0nEN)5$D*$339`szEY9B`2urMG8++?HKz5ol6i33ggzVkCfFxEIZfccQtNk@munW+ zv1#P_RD-kV`*YwDuWDX!wvak2Zq*5?ZnT+lmP|&9p&eOo{v!v7cA3hUt6*$ius3&} z26&Y6#Hd2_0N-?_`?0iau9&Zqj+?7|1*j_cNl%6$nMnM>qDWVUmdgy)+7DruTjQz7 zocYTO2isVUAE2@ksT+B7-LA={ZH9FV z$Ik2$pv~A=$xqJ6GnNvhT6~*Z{Z3}xSm=`4Y;F~~QRy(H6 z7uPC=D~F23Y^goyit>jPXh}F&zt1VvUI9n-V{skK<*s#?R}x)|xlntPp@%p0TDly(uL{G2gvh!0aTKAi-Gsy*bMEOx;Q=rY+Et3nD@lKl07*yy=85 z&%>3~9=80NXM%*L9|=1@VIajbMtfOZPFs~3N!~6qDe1n!f@C$tXpbuUzIw~G=wYd+ zrWMg>3cLhPxBPm&Il%09ON1V+Q#rxl=8?OPAhf|MxR&Z7hh$cFd|gcXAWU<$fxe-{ z>h`jXBINv~%2w^w{AK5R#+qBm8$0ejHKiA;_mb7VSCitsVtLO=ZCvCnUPS~epO}U_ z?=bX8ky2I!#?D?&wFXLZg*e0PUH+nic4$D z*Wk|@^Vfb2#mfwUkTh$v#@M5$tExE$?DHZllj%c^p^QxVc7F(FMw|6F_ozCGVo2@p zk1E>8qq%?JKkW&nnniA))30Pm`k6mJ6(%D8{H8x z+4DAfW8O-DKHka8)kN9rSo=k|_KuM}n3GM%6d$@>qR7zXI(qi__xaleJ&1Sa3z^d@ zUQVmLkPlN+zK)nUxf}O+cv3|XhYPCw1`FnS266B?7@0#4)xG=J4{F099=YOUd`tpc zq(7GSAX6@y&d~v_16_TP!P3i62l>%~S#X0l0}oA`)cutCgIBaZcNNVie0$r?PuAUa z=sNcPhVT;p{jmj$CM8^&R>HlQaOUM_%fs*_cnINsT=CtM(DD{s19Xr*vLLXXfUC+f z{OJ#u?yC(g)8Ize`Jwx{P9^Nqd_vm*2LITBwsfK4rneL+=M$){x{F+7VKQAaN$sD& zz+!kzHr1-XQij6W=Q%5>_C<=#2zWT%s|Y3^6}o@2ATzXKC8Z zE_A-Y_OXrR-*^|VcX{QjuQqr14Xscjc8l^X{61Yjk&iex$*-FZqAp|`yU4AKxF1d_ ziak$g+uBS?*W%N2nR(XVje1IaY#|yB)nRur>O8_kU|r&Iw>bpBySa z5+=H(D@6`hNw*#8l&z)a0<pP105#>aIPpuP4{}NXPQQ3n- zjOTpZVO5w&CLRYFOg{n?Bi!Y&Yr4-ex7^lK*DDEunRq+4IUUoAe2*Yir4%&DTs@P zBWs{SSCl($eF$n}*&FqSjj3sQEL z)*LD#ZbaE`0ZQc

37Z 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 { - return ( - - {children} - - ); + return ( + + + + {children} + + + + ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 7603891d..531c98a8 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -11,10 +11,10 @@ import { ScrollArea, Scrollbar } from "@radix-ui/react-scroll-area"; import CodeMirror from '@uiw/react-codemirror'; import Image from "next/image"; import { useRouter } from "next/navigation"; -import { useEffect, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { useDebouncedCallback } from 'use-debounce'; -import logo from "../../public/sb_logo_large_3.png"; - +import logoLight from "../../public/sb_logo_light.png"; +import logoDark from "../../public/sb_logo_dark.png"; import { ResizableHandle, ResizablePanel, @@ -22,6 +22,8 @@ import { } from "@/components/ui/resizable"; import { GetSourceResponse, pathQueryParamName, repoQueryParamName } from "@/lib/api"; import { createPathWithQueryParams } from "@/lib/utils"; +import { ThemeSelectorButton } from "./themeSelectorButton"; +import { useTheme } from "next-themes"; interface ZoekMatch { URL: string, @@ -75,30 +77,38 @@ export default function Home() { return (

-
-
- {"Sourcebot - setQuery(query)} - onLoadingChange={(isLoading) => setIsLoading(isLoading)} - onSearchResult={(result) => { - if (result) { - setFileMatches(result.FileMatches ?? []); - setSearchDurationMs(Math.round(result.Stats.Duration / 1000000)); - } +
+
+
+ {"Sourcebot + {"Sourcebot + setQuery(query)} + onLoadingChange={(isLoading) => setIsLoading(isLoading)} + onSearchResult={(result) => { + if (result) { + setFileMatches(result.FileMatches ?? []); + setSearchDurationMs(Math.round(result.Stats.Duration / 1000000)); + } - router.push(`?query=${query}&numResults=${numResults}`); - }} - /> - {isLoading && ( - - )} + router.push(`?query=${query}&numResults=${numResults}`); + }} + /> + {isLoading && ( + + )} +
+
@@ -158,11 +168,21 @@ interface CodeEditorProps { const CodeEditor = ({ code, }: CodeEditorProps) => { + const { theme: _theme, systemTheme } = useTheme(); + const theme = useMemo(() => { + if (_theme === "system") { + return systemTheme ?? "light"; + } + + return _theme ?? "light"; + }, [_theme]); + return ( -
+
{match.Repo} ยท {match.FileName}
{match.Matches.map((match, index) => { diff --git a/src/app/themeProvider.tsx b/src/app/themeProvider.tsx new file mode 100644 index 00000000..6bd9e816 --- /dev/null +++ b/src/app/themeProvider.tsx @@ -0,0 +1,13 @@ +"use client" + +import * as React from "react" +import { ThemeProvider as NextThemesProvider } from "next-themes" +import { type ThemeProviderProps } from "next-themes/dist/types" + +export const ThemeProvider = ({ children, ...props }: ThemeProviderProps) => { + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/src/app/themeSelectorButton.tsx b/src/app/themeSelectorButton.tsx new file mode 100644 index 00000000..299fec61 --- /dev/null +++ b/src/app/themeSelectorButton.tsx @@ -0,0 +1,41 @@ +"use client" + +import * as React from "react" +import { Moon, Sun } from "lucide-react" +import { useTheme } from "next-themes" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + + +export const ThemeSelectorButton = () => { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +} \ No newline at end of file diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 00000000..f69a0d64 --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,200 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/yarn.lock b/yarn.lock index c927e1b9..aac9deff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -133,6 +133,33 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@floating-ui/core@^1.6.0": + version "1.6.7" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.7.tgz#7602367795a390ff0662efd1c7ae8ca74e75fb12" + integrity sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g== + dependencies: + "@floating-ui/utils" "^0.2.7" + +"@floating-ui/dom@^1.0.0": + version "1.6.10" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.10.tgz#b74c32f34a50336c86dcf1f1c845cf3a39e26d6f" + integrity sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.7" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" + integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.7.tgz#d0ece53ce99ab5a8e37ebdfe5e32452a2bfc073e" + integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA== + "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -317,6 +344,23 @@ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== +"@radix-ui/react-arrow@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a" + integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + +"@radix-ui/react-collection@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed" + integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-compose-refs@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74" @@ -332,11 +376,104 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== +"@radix-ui/react-dismissable-layer@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz#2cd0a49a732372513733754e6032d3fb7988834e" + integrity sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown" "1.1.0" + +"@radix-ui/react-dropdown-menu@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.1.tgz#3dc578488688250dbbe109d9ff2ca28a9bca27ec" + integrity sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-menu" "2.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-focus-guards@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz#8e9abb472a9a394f59a1b45f3dd26cfe3fc6da13" + integrity sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw== + +"@radix-ui/react-focus-scope@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz#ebe2891a298e0a33ad34daab2aad8dea31caf0b2" + integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-icons@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69" integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== +"@radix-ui/react-id@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-menu@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.1.tgz#bd623ace0e1ae1ac78023a505fec0541d59fb346" + integrity sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.0" + "@radix-ui/react-focus-guards" "1.1.0" + "@radix-ui/react-focus-scope" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.0" + "@radix-ui/react-portal" "1.1.1" + "@radix-ui/react-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-roving-focus" "1.1.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.7" + +"@radix-ui/react-popper@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz#a3e500193d144fe2d8f5d5e60e393d64111f2a7a" + integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-portal@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.1.tgz#1957f1eb2e1aedfb4a5475bd6867d67b50b1d15f" + integrity sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-presence@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.0.tgz#227d84d20ca6bfe7da97104b1a8b48a833bfb478" @@ -352,6 +489,21 @@ dependencies: "@radix-ui/react-slot" "1.1.0" +"@radix-ui/react-roving-focus@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e" + integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-scroll-area@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.1.0.tgz#50b24b0fc9ada151d176395bcf47b2ec68feada5" @@ -386,11 +538,44 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-controllable-state@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-escape-keydown@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== + dependencies: + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-use-size@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== + "@rushstack/eslint-patch@^1.3.3": version "1.10.4" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" @@ -582,6 +767,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-hidden@^1.1.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" + aria-query@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" @@ -969,6 +1161,11 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -1492,6 +1689,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" @@ -1687,6 +1889,13 @@ internal-slot@^1.0.4, internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -2019,7 +2228,7 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -2109,6 +2318,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +next-themes@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.3.0.tgz#b4d2a866137a67d42564b07f3a3e720e2ff3871a" + integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w== + next@14.2.6: version "14.2.6" resolved "https://registry.yarnpkg.com/next/-/next-14.2.6.tgz#2d294fe1ac806231cffd52ae2cf2e469b940536d" @@ -2414,11 +2628,39 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-remove-scroll-bar@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" + integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== + dependencies: + react-remove-scroll-bar "^2.3.4" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-resizable-panels@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-2.1.1.tgz#efcf4ee0d7b45d9617db2f2e3de1ca04589e6b7f" integrity sha512-+cUV/yZBYfiBj+WJtpWDJ3NtR4zgDZfHt3+xtaETKE+FCvp+RK/NJxacDQKxMHgRUTSkfA6AnGljQ5QZNsCQoA== +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react@^18: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" @@ -2854,7 +3096,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== @@ -2942,11 +3184,26 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-callback-ref@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== + dependencies: + tslib "^2.0.0" + use-debounce@^10.0.3: version "10.0.3" resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-10.0.3.tgz#636094a37f7aa2bcc77b26b961481a0b571bf7ea" integrity sha512-DxQSI9ZKso689WM1mjgGU3ozcxU1TJElBJ3X6S4SMzMNcm2lVH0AHmyXB+K7ewjz2BSUKJTDqTcwtSMRfB89dg== +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"