From 9156556534230064086960fa99bccf4d49436273 Mon Sep 17 00:00:00 2001 From: soohoonchoi Date: Sun, 4 Aug 2024 23:04:26 -0700 Subject: [PATCH] bringing bacc the terminal --- bun.lockb | Bin 245025 -> 244026 bytes package.json | 21 ++-- src/app/layout.tsx | 8 +- src/app/page.tsx | 6 +- src/components/shell.tsx | 115 ++++++++++++++++++ src/providers/shell.tsx | 114 +++++++++++++++++ .../providers.tsx => providers/theme.tsx} | 0 src/types/shell.d.ts | 24 ++++ 8 files changed, 275 insertions(+), 13 deletions(-) create mode 100644 src/components/shell.tsx create mode 100644 src/providers/shell.tsx rename src/{app/providers.tsx => providers/theme.tsx} (100%) create mode 100644 src/types/shell.d.ts diff --git a/bun.lockb b/bun.lockb index 407eba028b479988704d9a6c90c8280d7d3868c6..56c2907780d609797bb342a7f54a8c48b15ac446 100755 GIT binary patch delta 48419 zcmeEvcX&-%+x|IQ4mo-dDMS)ANh??e?GEEUbm}&j<1fXogK?f3YHW@ zeY4W(lH(%>4vUP_=_aS9+BiQ!ZZU`#!4BXQa8YnV+~CCM7@cl@>d9(JjUck-sNt~* zeIVus>Bv-LJfzaYu( z20^8pmtnJ;T_tq7;^0kSy3q{2vbR2c1}6?m(CNx+!-$I<7!lWBryGt~a5(3|Y-cdW zSRPy+jXQx?f;sGmcykAL1tT0u$w5faf%;%}*dGlr*qh-6J9I&7mB5Z*BRCmjvHwgux~@<(KH9)eJqj#L9PzldhPK&A}>lzdA`=#syYFGw~4&ryxt*TclK zyD@r|<02#aVA#41(3#(~f~xP*$_Hzf9%}fh9$SOi(;+ZJ^0B@e`{oVQes03X zf=x=^j|7L*6%Ek!DGk*IUx8gv5d);CW?@fK>i zRnWQU=Yp|llakA}R0lR3%mF3AKdz0^V9uOfE0qVrW`nK3+-njdhD7up5UFbbn-05b z>;z`LcRs2^BKk%yfz1Y{ff>MiD9EWE7&|c1 zwQq0THcTrUx(S^eIV^HeLcC5l6E-7Ns=Ye%2C(8th+4mL2X&@ifw6BS59_GYRY*d@ zB2-<24N;J5@ij6yL$^?nQ*s#0!z`_nx|Y}#O3(Wi;;VO3oCvjv=kYLANUDZ&!z-EW$Q{QAXWC!~hI%fIZ-Bbrx!R82WgG+1rjbywSI+(Xs3Y59NEpY^~YqKpg$tWYr`J|Ql4P_(W$Y_5eiA#!_T)g;e8>VSsC z#ziDV#_I--!lJ{gOkXwP2{Dm_Vxvat-lH66pb&KWRT(y$jUF(#H_LB~RF}@+L4A<<<2gO9j#U{kZ4vHEO8y%Cd5Ea;wc`=*U zu=!v#ujRPN_`w5)Me4T3s!L)Gm;uZHb0%;w(GT6v{ZxlH!%ZIKGyALg*sZWCu|_hH z!3yS`dp2xFd}PGH0c@ZpY>r?Om>tX*s5UrEt5^H#Bn2m` z{*-{qsW!JCF=*t#2wa*)#9=P+Di1%nYxG2#{zu2S4vC14jHlDR5t6DSv;fBr>K}{Q zH7}WR&>0|mlwn|_;$3mJj*D0b8~)Wz?iW9JP*m)INKHt-K3r?4f3$1g*f?EO?4Z7` zi9>YGqt%AWj+VoVx;4(k5@uY^p*Y)ZJyxBtMPN=$0GR!n?HaJTGQL51hGSKb{9Vxs zNyR6q)h#rhtMS|MsvbB|Wj~DvL=MBu>vT0?GaP**BZs)g#_LMKwuAi;_1OFmV1|DW zxC*#mysNU*5Y8bH*x)xnM;McmGm)U5vC)GD$02U%usJTqFJeHvuIp6QHix0C7KS0N z0|xiO!3>Ta7@MFQpQ5&tg8Fo<)HK!cxY&Vl5jYI{M~+nHeIIo8hf`2OLZtk2G5e%M zRN;~_Z}{er^&Q-YyGdj}&Bfs{vAk5rQjHt|Pj$6ts$%olKhh%jU?trK>{&y(Pjvk;K&tT=jSZ>J| zz&7AL8m|E-vA}F3?7_ppJOf35t-%mFnSWWYD3O;BsIOFdZ^~#5A7~dSNcv zpz_HAM_>oobflTa^}uYWDwrd;)AYV;)u}rH=9<_oBmOM#hpY;h)~OZU*Q-;o2+W4O zHmD;?2eaeZ8Y43CkqOEMJ}_bkF0Y|8a)rSh;TzOv#P*?G+UBF`Hu~ehjwd0(j9OTw zoOAO?J8w}(vjB(4g73x2olB(S8}|=eDW! z!nUhxNPb{dGO0C;qR2FNen=~{3Czy=M)pqRiQp!p#c46y=Fyn#RFro>{wtJo2D|Q5 z+Z_om3EO<}c?9{~FEe)OaILMgPfmzWOo+vPXZ~zwcBHqQTB=&osJ*JM=Ceup-Rkwg z1XO2idV`(78_+CcIUh{DDO~1pa%{iKmwvmEGr)|k3v{|^E@$Pvy5G+Q zQ@7PFJ-$Ft>+5SrHg7Lg2%4g6S!;Ee96c-X(#+JDf6GP?oOWj zbj|5z!%kPaI-zW~@lq{|rD65ImyYzQFy8%2LYbO!*gP92%We^8zx%DV<#^f2#>uJf zygs82Em=NRYW!yNnI^x_96k2Nx#%*-*ER2&tDAgk%6vJ+#!22{<03z>iILmcIBjcZ z>r%92*$)*14{p9RyXd;}=j&T6j@dS%ayz|c%HCBMZHHf|C7-C$uGkX2PFD}ZDTHAa zlyie?$|b8>8ZSWghgwq3jqs5dR`u5}m#MpFTuuD4=2yLua! z!}5hyfO-1s^7U%|`eL%3i@!10LhVDzF^<5DyofEA|HMvKNy7)nRgs_P?Pui0UrB-1a*jT#=8H3bDURc}TH~|{gEvKi3w{Z_Fx^KzB7%Z`c zc9d_q_!+w))n3s#U;1$Nw<{*_i#vZUZ8VjX`uVK}bmv}a?M1npVl$d$p zNbrPJLb0a8Y5}W=62YHgX>;M?ZJ2>gvX>H$2G}rSPzvFI3tz)xd+O{*w4Resv>29Rzo7*yGU=!#D zOOi9E`B=c{$U=sewvd(7Dx~@;sgl@+Iw?&=A;onk$<8Z$EbO)67>**P7InkUrwq|B z8!4rd;itS*{qi_q*pPm)ywJzrcoudo)rZ>N`nR&3ufM*b+{M@5I21diA96}5>*Wxv zx@JrNLbj`qgQ`Nl(dehj3+wwEE<*E>9R~VIg&k#kKa)OmTNl4M1?8AFbqs~Dadnov zxA8Od$V=@&Dpb)5S2w46BGp0Bw&tY_HFUZVMeBrATP2l+R4b;Wr#0k^rY60&e7&i^ zew=I<=r8TADTlW)NsmEIP217~E%YUt!+-25%In$5lk)j0Rk+m{Cc5f$Ua~{429`)P zV<9=WvyY`4qNf;~-(|44jFc_IxT`i|oM+kA!GUPD48vflN8GnaarLWp%DAiRNVWRH z;(}AHEwH$jROe0j7q6u_IFW2XC>J8s;L2)!xp}@D!;qB^A^V@sn@0^)swM z3I`Q(9T89*A4p9@s-@h$Ljwz(UfLcKYV0&z-L?PGYZK%>j>7uHiF&Qb&DGpn#rjwe56M&z$ zu@I&neIRnV!QN6N?$~uQNm)(hoK7aARiJv}!ai;CHU`2%C>gR~Z^Kwv?c^mUKjRss zy5+TA9c!4&7&}uS0^3Xu4>K8eK;ikcoa`LnZ7hysfeX%3hMUIru-L4+#Z8CRh+Bm8 zU2{33i%BXOBNeGw6V3EgCfr%VitG`LXbRzIhtDtQVLRBIErpO3X5x4wLWNh zI0az}>bH@@dzy^j;NT5K5jfY(+gPEk8YIjTX0{WoCi0SIe$v9Wa(FM3^sud*0di?4 z=kzied*Y12*0HrCz6X^EF6vMbQ=qWm=7DCD%^1#Mk)KeKnkmbCloB099Z-n zo%i*z?2!M`qYSns9!8jLoT2B#>I+Lbkr}MveoLjfo=CAdCD77Wp|X8nli>zLa?p_Ghp>F7nFYKDu>6I z43*GHxH9swNUN*)~&bUIel-8x9J>{H!CS&`ac||b$%VE(!C4Pnvu#_p0I`oor`kRc?da1jw zvY8rhz*1ueZzb;tIb(oHijR?XNX10OTJa#&#+9WHFT!U?4 zaYd@DJ{=Z)P#1F!ENteuly#oyV>w7IsEoxp5|-K|7v)-5TquYSK2f}Z#n`FGsP|yi zJ=GcwOYJTbOa2>JjH`0iHNJ(V4l6Um$8v~Tu#hru6JT+SI8vu7S*%rvQI*OJmBUAw zjDbVdtqU$-RFh$`8#Ijl@enMWgRA-(J|b10%g@*)&b)NEDb9jLmkrAG!l^jfevCeYAwZUl^57=AP{66>C*bh2aGJ=dw zzJkRraRPw@=V9^F04z+7)o^uA;XshLF$EUu;iE31a35AZ#d1#Zu^eIU7#pWFVuYMg z-6U-oA?J)Y8E+y_Jv!Jy<&owwG4#D)`J#~`N_SbX7$>-obqGW44J*&!Fp4Kb?r`0a z;utYvtj~3@ykMz|=}w-N+0VyvwA!z7ZD8!DS<3cpSOW_e`}i<)2Prn7Y?y|!V{|$X zC1gQJv3mpwekQ|G2a78{<91l}k*8Od+hbS_R2Q(iyNop-m^|Dz!{S<3PF}{3u+&H( zN}uN$8jdr6PLh#ohC1qr<~l4tSnAodOcMNqg)O&@x1kxVHgb1AKWTlkoReZQ+D=ei z!48kv>!?}k$MX!$Qa*S}-%pTprkRXwCz>lbV_Y*d3rDS=x8XRfI?6@bE2OxgVqUP@ z`A(!r_7dIJfn&fPs%Ii26IE7+rPi zs5`|xrCbxkVKGWd`^Fux7K3Yd97e^zSVi12}|vZv-};bAf+DXr~EWEHfqT*So8xYT;$D!RR7|IlKarEQH!fIG-2Um*W-qH;ePBj^;&roBA^H)1> zV=OE#8g=3BhNUe;EU0I&*i|8A=jt?5T@F~hxCBd~#bd;<2Pw=3j+SDx)a3}*P`fQG zwJjdOQ(794;+q# z#g5e@Z96O;cgl=Nk5gs)bd%9*o_ZC6Xw~<2*#|2DMGU&nUn`*7K|eCnzV;ZaCUNpN zt?cx&oP!3o%-8965hh%^rAZU|CZ@yiz_e#RvjgeEATs59o2d$Sz)2t zq;hl`<6&t|U@Eg=sd380{`-8PY`?^0uwTr(47Y~(8559dmgm48SU#|nOA_Pnu(XC+ zcpK|1F?WfEjFVug^{~E-zrt#-v_fm}(!6n3_cpAh#mg1LU8L}lbbz0+<}$Oxob*Ik zTAXm-ZZj;cSG4sAR%@kY-qZ74Za(Wc`+6J4!RnOf`{mE98ky#L2&`cktZs@A7m*56 zQZ>Hfhhc{?e#S9K<;B2o7?zK+h~FaBQfWT|o-|#d9<1u=coeM0$iq?4%G42DzL^o+OjEKZ;OMs;^p^V)o7 zO@M{ZpWI7uoL_;Z1|Ab;sJRJ?K-n-8k@~dUPQl`#qFhiJ3v4!rnG3orEN$u{y`}8U za?VE6UoI5-ZZXF<6Nlx2Epo;tlhGzyUHUi!;HoY(Tejb9GOmEg_~OJq-AA7-XFzk@ zs%kh9Vg~xa;;_{Z`pdS;;Xx+p*;Y9t$fR#1ciG~vFC;JA;%|)Dt{!K~j&E253l}kab4Z2!M_>%YT1#|WinrCw3LgN3_tJNyi7_u)uYQfWxxUNy9bNVVd{iNR|>%i+ST z*mR`)P+yPJ5nSG(d_^Rk-7jbCHt8k#`fh(?s{`sHDJ)0${CN6FXs_*Jin774z{JmXaZ3IT3F0l*!QxfW6_!R_cX-*-v|oanLC*aFS9GM~(8z&+ITv)AKVM>H?6%wR|$| zu0Sy$2H=ZKJ(dPuWQJo14ZMb+f1M=~BLH?d3SitID;1N$d?f=M(L}%kn5x;+!K^0AFNgJO=b~@Oc|$g*=1B7n!*) zfU-bgR{cL_4y&lvE*P7QCNQJ8mO-W?R+{}8%L5NMDsGq7a`Uq_YPo3o|0UDA8d|&H z!Z1~#fV}^L8pYaL_TMoFI@#2^;9ta=~D2<)j1!`d_hrT+8LV8@4xx_SH?PL z!R07m3*My_By%JOG@H!iLCq#J`Hg1(9Wz3Qk!E8VBi6%S+^Yz~_8+xwQd!g0K z&y-$jI@v;g^o^su;gY25+i-`|mDWm;ZD7{`v(=hlPDdRu{^>mM#(Ap`=7MaZ*{#6%r{j|_ ztk*{4wi>qs^N0%vvwm+dU*IG~=%*Fz4`zo$z?|P<4{!T6_}j5jtgi^gA=(i~0y zJ7#-n$Y)s6!E|(?gz+Zv;ICX8$PJ%WX{78&Cbs( ze-t`*=$s@Zc+Sh!3g%}v_!D$ixTo>YTDiYtj_@}vpUirXG@DHOF__X*P4_e>@-y>( z*9zokI`k4cu2GKKZ~^GvvXty_)RE)RebDOUXGKCq)-8ZHMx_vqzc9-gHJz-iVlbU9 zuIc}VB{+2kZm@W1t$2Q>UPjZ&w5`EhZT6Z@rd|$AcN{dkf|gIF?xg9?nx2ojpW~-q z`7$i!CCAkBOHEBBvzuCAHs_}4f5%)Jp2(-0^|g9_T6r?3JV4VMYdV?9K+OiXR61&| z31lW);*E~90@IOTiW*aIqvf~NxE=H5vEQnjMhGkl9ktw08hDXeyOU=BH(UheBT&8y zc#2k!%yy<~HkrenRREg?GiGZUWV%0Bv;QZ|c2c!^{|&SJyaG+|t|Zis=c55;q-nfB zV*%!i%=~mPrA4&mvBzx!n7f3M#w@i|E0w9~WDakIW|LWNCAffG?1YVSfw)%7&CinT zdO}@#o3z~gOetH_^D~d@J(^Bt-}^M1%)a+)c7A5LgIfMKU|t_z;9Rl690;s)i*Fk9 z2+!5*{LF^#YUO_hv%~vZIWm*KYWhRXeys5`X5vL=@uI`Y5)#VM3&ua432!VApm9@;n`_)s zWB!nk9kd1GpRNPnG-k3h-Z+pjjk{?1WVYW;)04U*!G?N*@lV$WZ!8c6W&_ch-4D#| zW+<5D$tBQ>2&eGHi8$7wcy^GJOX82^%VDQZGD6U+{0ffP~&eD#{3`Bgu`HVd>o8_x>I=LD!oZVV>WP0 zv;U5ne_PAX&(wc_PQIh%lS}ae>vtrm{h?*#XI6Nn>G_$`JG?Rfy~cln8Cs5lx?W>R z;{ss((^=w;N1YW|IU|;$iWixoECZ&*U!QW$oix27MZC!DppwRwHJ!{Us-f9rmaD1R z`I-H=8ZiHSA)$0!TPsLr#X6eqq1kmct_P-Leqg@xGwU_bbmmpmU`{iOhdk@M@psG& znLF^$t(AXnt>}KnLg0e<=hg~>@PBfvg$MdSw^kUEC2 z^3Sc6e{QWPr^Qs|Q_H`<)xyjAe{QY(b8AKS&#jezZms-tYvsSVwW9tWmBZ8kyK;)n5&JN4R*U)Aat^eea|fohEH~@ z7;1U%iBC%F;#1CEZ#XIHOxunRwiU|_D&J^E|0eZ{75{1aX}<%b)85_+n7cTq?wMj; z9(8VU@ZC)36z}h2J(ktEX7#A(i+Y8ooO^R&O^>SgKTN3Yb?)w)-W6^QE4?l4&tAr) z3m@$RpN7`{W$l@#eIj1CxyB6Z>QrZY+Tp-AC2S@ee_lPTPvPV7el=TpUjFfN>&{J* zk2%^^Nt;u4+@{G+yMJl=TP>Vf^tk_)j1$aI<#eRJSzPYd?0Q(&t@44`=|z1DoS(kh zfBV2wXZt%?j4d){$i3oG%Ef)0l9@6i(i8Fhad%3i0rL&WEyt}?F zT5FhJ494Ye*lX^g7gwxuZaMe#XmQA5%HH-m-Z1vZcuWUuaf`Bxwy2_)T4h+v|66nqC&s(*FJ>RZucO%Wrok% zaw9^Q@)rz@1RYMu@9=@Jfaj8Ffq#w5tpmHB>>B>C(Va63``0VB@7Si2^^+FH{n#S@ zV8!-vw;H@#ZSnH`1~<#`rmRYiISGyv4(}fO;`EsqrD2_AG8#?H-|+UPeqUAp_3G0V zL4yai@LoT3(( z9=BDye!TS~+r{|#6t-?y{)T^%p3c}F-n(*vp(QVNcw6gk%Qq|9Ec*HW-l`{ks}>5e zh*Z>u4edSmXm)t# zbgz92D*8<5`Jl{=q~Net_tyspEvbHUc4*4(wM|_1H(z~nD3%ddt{+CO!;V@$Ci5nNbrEA|)Gx6+Rm#v=O8!m^0Im>5_@-zs=){*FF+HJi8n z?AEW-#-@Dhe`@B%rR&d^y!6m|?L6<$fv4X-_&v1cVw;|0W=$)<_-K)dV@gd4v%hXg z7*z8Q>jh1E9UZzQU2H6Zjv~>~&XPs-1NDu@h~;Y+Bt#|^^6mF_8z;N?h&yU3|~^g9oWBPUgJov8miaLy_l&w+3Adx%Ez}xL%pB4<$Z; zr{?$WMd1_C7rvkJ-4AQs-u~=3CF;iq$5u8k@%lw%p9RyqO8Y1M(ko+3Pu)7ZdV`Ma zyfo-f4_BA_y=ui4Z&1Ub@za}cn$+nn97@2w*By>t+_vOwm3bSI!oMzWdBvenu}yeTy;-)|)g2XwMLlUzK^_x4A$y+Gtjn$+qpW%#EW5Ppp3`HZ|&H78waKCQH;NIv&w_4ezk*oUt> zlGgG2fW52#Xny_F#QA3iG~E{6C!xH-ZGXF&e=IzlS-0eGiN86|&gb5&{O$f5Pb6x^&q)f|T_d(?y`@$b`P`e6-@VQwtj<~ocj(f+ zRa&m@#e+qi&sLmWK5p0Ds>VsLw|Y%|nNc?N=i^OE+DY?2R8PHs{M$w4me=0#s%~yS zi?~YFR(5>lAa2n;-x99zy5h|n<(fLC-+FBAK78u*X`|CNm1uae)0FbYl)0vQJ6^O{ zp7B-u%4Tui$xg>JmmXX3^^Ny~*4+>n>PDIP>n-!zOU>_|_mKio>w6W}?`}0L?P23$ zx(a?j&oF-V&^Bvn`PNGoTW_nLkg&VY+88@m_xH8l^_|nV*d@o|)y5WT``mj?+UZNb z#ElfQO2NJ8S9^b7Cj?J*-Nwb1QdRl;lhTz8GG zw8=VN4DXRP)UQY>>)%hrjCu2F<}2U&`P`H9yXSHBbjS30oBQ-R-Cvy|n!9{n@hixL9GoXo%f6?fOg44~$*m`@G)HnXf+l zxNKZ<_lwLJ&>Do1&s{75%{{3=V)ds`Mc3&}FJfeHG_dX5p zn3!7c{Oy#{6FY3Tv>M*4*48%u#WG4=c$?mS%Hrhv0f)y}wd^?mm#udD{XKrH5uLep zd)?qkzx2HDB)xY3srlR!`Q5WyWVf}0v2+d3j%#<~t4yn4Cwo>5fCBu3}izQ{S-6z^$yXOye%`b~H z1^r4b*q80`B4d;NtctO-jeqp+wfwv6z0Hm~xh*+-e!KPDK_7xY%sJR@sb^HH?^aZr zeCa2{rdG%I*&2S@^!U!a)*{#%?N+hH32>1ZYReN~S)2f`P*@_Ii$mB&VRCT@%ftl= zF*Xo9OF+mJ&UO%NZCSz&!U}PL!U+nV_7JkfczXyV>>%8uuv)m6gWzHhA*~#QwIY|o zH41^{A*>gvK2ZbF%?*!pBg-9m|J4H5yHI5LhogwTN5zY|8oFE*duvb`Bgkb3mA+aKa{o)XX zT@3XwG-Tou_A*3^JtT?@i>5m5_5SWO7WDBKWM zt`ID1K}d9ka7!Gbu!}+!HwZt7p>7ajTp?VckSm;PL$Gy&Fu68_yW#?c6BIn_K)5Hy z*MTsiHiUZ=?hAK!2rhLXq`5=*MdVVrMj_Ax!b6ej0U^a5!b=K|L_l2#J{}OV>Oy!T zo>6!}A+#QZXCkv6g!H-)44x34ix5u;LG>W)pzu=Yy&$}%5a|WsmB^;B#uI|IH-tAL z!W%-E7ldOJ-U%xo2$tRu5`FZoq(61yu#diz*hQs^FO-iu5$6jf#s|t3D0;ncu8&H# zz7QtYhfqLVpm2hMrym4^81DyRM12VNC=?Rz4IsGqK}c%=!6t+fM6rCDXeJ(!MZU7I}yt0oXE8$(EJ0>MEXqOglXm8K9J#n7e@ zVwym>Lcv)$2STuI3Sn{}gi7K9g%cD!n?a}|#y5j7A`rqo3e|*ra|kZYAfz>iP+jCw zxJDr`2trMf8U!JwIfR!KTtz?&2tGj&vRXi>EuK+$Kq0gx1b30y5<+?l2!>V=>WYw7 z5Q17l*g?Tl=vza0O(C*11aFZ|VGYA=9Sp%&L{ zc2TI(7J|PR+7?1g8wgh@1PJGL5Nz8*nA{FR6LEpU2@0Me5CX;c5C|jMLAXbuxo~d} z!6gJjT6+jBL@tGE6aqUyXeClRKuBp1;U$G&5zrBWPX`ED9U-(8&nP^g5E=?0L}Z3S zNbd;2&xAwoEJgdgh(;I z8-x*EA>5-7E!?|9aOnmCA4yy3V?{27YZL-|KL zMMNJ6VZ9+7qcB=n^@U*B2SQ?B2xG+|3cDy&iG+|OhDJh&=?mcsh4I2U3W9BW$m$1Sj(A4l0fo^15K={Ee+cRQAQ%QfkVVJ<2toZJ?4Xb)@G%$hpb$9_f)Lph z)(n7PJqW@=5itlt*gy!!C@d0IgCSTBf{-{E!V+;M&MnE`5VXv?n1;KJ8gv3!0_KQOlc2TG@8p1&_ zbTovRQ4p?BI3%3MK(HMRVe%LVN5lmRCn$K1g>X!a9}8i`7zp<$92f56Ah?W$kTwp& zNs&w88il|l2&Y795`>g-5MEL^BLb2k_#{EdN``PwJfrY{Lg;u17ewZG2*JQpFeAOy{Xu!F)&p`Q)mHHFC85MGIF3TtLTu$}|qjfj{7A#65; zV-(&AtGN&?=RioD%PSDQI6RkEAXKWP@(M&R;!=49G8f93MX00~&ht>oHWk9;c@PSS z3lvUJ@RT7K#CRFPhuo9U#gNXD65De)MN{f(m2tfkE4hq&nzYxM}3XuyT*obTj zYtkWDXF#wM5g8D|7D6~ip`5T<1i>-`LLx`&AP!O3MWM=K2##XtVhAydAY7r~ES#4> zuw4vc@)8J@#03f`D0nV~P(_Si3Sq<&2=_`LsMRFlQ4&FQSxSXPstfmJC~}QL+A;_= zMJ|PuWe@_FLvR(T%OUtIhoHR^$&9?kl!M?Wvuqo1}S zU;~5)6tXrz2ocXHq;FseD+nD#i;eoh`nfx^bM$`tokO|DA> zKSgh76o8*3vxOu*OEqOF@pQl5(hw4ahr`qy`A(HGJK@BO0*0Vo_!GqRpytl)NAymT zAuLuCgzD1m{`sp}s-h9!?-cpeOY%<3@AUKa`nkgW8g?uWMOvD?bM|R{S-rG#GF_`` z9?)6+)54~i%5!STK{J^(;j;*-F{AG(N<(&YF(Y_3E!lh@0;W!J@>Bn7l#*)HtEn9s zE=Qmb4$LuMrk|ce&nNinv524D(2vg3cMiF!zcaM(2|iRb z^rC>sZ6lR#$ZrbxvNy{}tIxgSaR^Og89wpHS9wk2@2BmBds{TYpJDS=LCfM#s`-;` zz8p1;&*OE`e&6AwY5ehdS23PVbknjbYgza`wywLTRe{DNf9?M*(tNpS<@ng&NpS&9 zBwg3C_*f#7d_Zp*2Z~oMP2(3iWi`+EzhbeR6;N2y>Of!>KA_cJ>)u_{N<-_QX?(-X`%zfRY=o;2AYPWH}6r|hMI;WSa)0N*aQv# zbWQ+&p~Qw8Y2}=e9>+|)0yM26(tLuIug1_M{@JBUFkWk7Q>|cSXncyy2^^?tRgiv% za%`lTraf(k1YSkMg?)QzU5GQ%d`fu{uo&RF^8&m9AHWyjx{E;Dy@5VJUmy~Q0-}K! zAQtEc^cQ10NYx4^A~~#p__e)cO5$T^oq;fb%QYP63UGaLJ@x?HfZ9MEz#Z@a>H_ru z{=%8xB=gD5V*uCdao_}S5;zT<0nP&Ffb+m5;4*MU!e7$(9*L{KHGnI62^w1pa3%8z z?rFeuU^EHzd?V*_5eO$whrLqXIa21;1{%$ z3H}P;<7>eTdQMy5OXG7$oChud7lBK_72tc|8gLjL9tFMw zP6OwF5P;hQw}a*Yw}2J^5BH{kC*TeE0KR}TP!XsMR0CW9Yrr-MZzX`jKq0^ac#jeP z3A_g006D-d;5P6Ba0lQc*ku4~zy`1d>;P`!+_bq#I{@5kxC1)@&OjxgDo_pJ7AjSj zM1_u0*`&3YGkzDj0oVv^0=59zz*c~p(RN@5@HMa#7!L4HHWUS1fa<^#%yAg77+3YJg{xu{1Z500XL|r4G7`){3g?j->1Tp|VX~`#;p8$SHHvk#}{y-zZ4QqtECLes_V`j5~ITl!qbCE~| z3L@hjD)Wh~=fDf#CBR3w_?x3C03QeAvuO)}g+K)8 zfs#NCfKN_82VU?Y^IRnE0{el@z*b-zupQV5tN{eT^AyiZ!H7^Bpd`}#uJ#w;8{iP2 zgU0XBxSihtz6DMICxP#P)4*MRu5Ele7laah1dWq=tW8iGLD{f0#@0Rcc`U>^qI1Z)Hr1AM;q8Tzh*AXW$Xlo%hpdH$14^F-_o@I-qUF*wTKlJG>v^VTzfe=p)7umGdo0BixWfo;GpU=I)v@TVs+0H5sT z53~4OTwgd53HSk(fGWT`pcKlapu_3F3}7bE7l;Ph@iF-~=#YPy;#V|y68H`{4V(ea z0~dfX03SiE2Dktlfz7}cU8 zBtAm;6L1fB0^|TkQ0WYC7N`W+05?$KCcx{L%>b`YDgb;WF%|T;T5!}!0&oIm&eP4$q;!-@E&*zw1M^~*e4trc)1MbWkJP|4ludb zv)@;k;DU>x$I!5pD2z|&tQH11Iu0KXiKmskDKusks69bJ>^xm~C#5U-`}l@;5BQP66ftsUowNWFsc^l*+iW zEp}{nkY&tiv!iC`7AT(BUakd zn}LvteZv*=O zmyYr`#)2I28Q?g;k?jSz<1iZBb#?>$fc?O?z&F4_jgNtk0!M&Dz+vDN@EvdhIEnt1 z9pxgJ9dSoF3!Dee0ha)Fc3ER~b`@ZF33kZPb2{z-KLEKvKj3HJ9&i`<35WqWMGpW@ z3+n~5krzNkU=qM<(;{GAr@jI6nzb-c0^mgkf9_)mJVBlx@EG9QC;&VX)A~x)lHMcv z6ySK?0dIjpf2!2WTScg3vn`1atzcV zw>@r0t`rdf(w8pKo9Wj&$QZN5*=dfjR4bTaIV;74Zu9c%G6NK z>{uDtrGaA5?7(!RxYmw&zRmSZL1&!)(ngZ<(VC5v)EX&)G_N-42pcJbG$)^FvmnDSXAN&q5+P~r0LvR1GID?xCy|)uufB;CC~zB1+)f&fp$O=!_*ZB z1v&y90EUZt7|;pm46sZWAROomu)#h+1i-QkZ!e%Hz>azYW}WsFU@|ZX7ze}ygZZb< zVv!gK3;-BbdfN}^4}2-CgOJCaWhi(E5U1H=!J~l$AQ2c23$0>{w5ZUquc0j}D`z#A(UY4VVMW2e`;&U?wmfmaKz%n3-;aLu30$%|ufi=J?APeBMtOjy9DuA0UM{x&CjicBB zYy+}^t-y9*7qAmJi88yvdw~4_BSPoD0VAEHgoC5zhz|iAsZs!Z1UL*F1=uOWPw)-} zKmPJ#Fh36SZbdE{v;?y*FFgwa2EYQ406oBuN+-28&Vj$@{9i}nG;jvE23!Ho1K$BG z#Jp30H{b=F1z46g^DY4wfeV^V?Q%X_?MQ8tWm)bjz;a$mcw1*k z0QZ3(fE>W=)J>%6zzu*AV25<}XU)C?z6bmS+y&@BF2J&^L$ExVb&yU{{+J)V{A))X z9d%Y<$N6nW#GLm%(wst;`%;?a85MKqWNK$P|G#S)tV~ZCCKfQm+!^!D70Kq#IQNXi zdw`?m=vc=~OLJ=TmuDWQi&LchsY4o`Ks}%?5Q2s33@(7xn!lpC!~9zQG>-~?vf~_c z)#uOSeLXsqU!x;QoFm><%Adi-=MAs`7u{bM8}HR{0ns6rVbqF4<582p9drE>$m2q0 zWNeUTq{@PES1U=G7p_oF0~Zi)ad0j0wij=Il>)2)Hp~X|FCuo#4Jd!794X8FRpafj zDu8+KsEl+a-ixV-1n-$S0Spm05#CSBzmf1BTMF`ckF6-Chp2`$8{=&ShMgM{Z!_?A z1J574cfyp)uOY9*k3*zq;?N<tGQWFS*r6 z!|LTLOC8ny(&6`6(KXRp9XAiJx^C`+@Lz#*pyN-zxbEM+$C6J@4iy_wA3w;u8821P zj}h zcWlvecz=Cm5044G&@yI)^D;xcqr;j%S{#~-XTzns<$74+_(ZLN{YO0;wypE2Pqju0 z{}HG)QTz#y^b5qCB=l5gGzO*(`LQ^}0`J5P(&wUPX_O|OO+t~4qW?tDVUarW6I~Ly zoR$>v14WHASMwsssle|D;IWblMz$Zg>sH%)lI3{`UwN3j`;T2r?_c;s6Li+LAgqdZ$d%!KUjR~L~}-6 z<^RT+D6tF;d4BoGOGX#==%R4_ewC^dfPUMw45*RZ=2XU~es3WMP9;aw|Jc0Y)!S!2<)|_8e4!Pn`s_+hn*Y;ubB^c*r&;wi+Qyp9 z`(M`01#k-lRheV{f7s1A;x>B4Pxot~1<6wnc{`D|I-%V4hUIp*iz8N^o||mF)0(($*Czm_1%{p-O?;>e(-1 z(veoH<9e3;l%w{Rq!ufSVmxk_79VgSrRCmvpNhF6hfx?68dWH@r`60)In9v6(9Wx} z;Oi?b0y=-n>7mu}%r0D{ZpA@fl3v?hb;FT^uqNB@I9YJ?iI6`fr#w#uvbbNa4H?=e zu*4rzwdNR#79Qq-j=?JA!X9nw_cnHF$EcEebI#wz=idg;(Ok0<+T`jQJ@&@A=rYIG zkc#ub|Sy3vhK z9erUca7^g&bpX#awWkN3^$x8x3mx(8$$BN;Dl*UJ&)hga+F2r`=8gs7e?^E zS;KkD^j{7g)#*=LMPA7-jQmr{yjA_>Rimzr5Or05VOR*|7o0-Q+j`2kRmnFJS2X>2 z!qXh%|2C3eX!z3@jON++%+oLLV_zP_zdQarn|t~4@gEl%(TATh=ia||+ivdB`FI-M zOWjQWQ*{61-upi|it<+Qm&f@phsuAq_g4PTA=u?59KA!e3%WwSVhBn|rF}*6X35%slev?xSc%GBuD;5TM3WmWA8^v{ z^?;Y?6Q^QcV>HlmR!2TcZF>D}7sVS7Hyrk@d_~b^=&&nFaO?VG>4CtRO&>-nb=_Hc zps#3z5?)Ct!B3PKzFvhttjqbJwBgM*<{`%#ImIu&|9$(Lv@OW-bi<8^I=a=qVm9j@ zKnb2Smp)(I*v2$w@u$|mM-DIMp;Yd_J0C2RPJ@+-iH{DfO3xOoGyfi0*{8Ym1g}F_$cb80}9s4r3@WiBU1dDbS zxjM)FcYH`eAIe-<`HL;^#>>TDJzl(5-gjBO>BHJjCH^%g=DPm=;sZxw?)6JvXnmCb za!ckG%>MrO(KOfm%ZMedPqBD~RImKG0CoA#?mjTqqQPAgrq#n6SJs|fzrP_+<#SMi z*B{+(#SWNKx9$#<@WO|4EY`;X!f7QAp-zp}0QG9or%1(Vp*bjlMaAp8fsMtWl?Y)X zz6mdaHZCvs|1}`@eK+=^mN=m0INzw58s zB)Y*azd1-flopgs4yfCGQ=p_DSI5oM&7+R4cndKXCA@ZFk@B;^PrvQ4|HkRh3+S_s z8%B=>-BKO%BI}*M+E3osU&*P9uxU{#TftK|9A$X8<$gG`$)#Sgbd=E!b2V~hE$V3z zDqEqB&JH(Yc}MNdh>6ecR#|HI>C+T;kY20dznKx4`KzVYQev=JegXQpVDTRL{l*2W z-u7=eKV|5po5#@~MniA^_0!RqHfnFvz?|KOei0ETJ=z!*A2IzNUQ4tRJ8h5MJb(Vf zPsrhAGVXh>Ya_<3ky@8|qV0Wy)6bO{m(p64)LXX|x7SD=wLQ;PY8WEgtd(rFTTdc+ ztz<8?2@#9eVitObi1WykhKGnddoUYmA@~{qo{XFN`drp?dv06WW%;TQQ33n6*EW>k z#N+E)E7a=2~HI$x-9iEh!1v{v_ah!}vn<)5JhXVTZcO}`6PEW#ML z9mMPnaQZMx@V2K%(RX({I($FpQyaIC!~J^M-pl3g3~7~(94#cTI*6O7`)}?5srOX0 zS@ggMKjk)(dLuv@)=})s##leQOOO`<^=@+c*B#ZCU(_fp^ZcOK`A@#mm-a()p4C>7{yZ_jshk2bzX`RH`&FJjk-6>H=kr#mf z!N|>Z{=S>P51z2xDwQ%;3sWady{RZo4in3FV&N`@%=3N4(iW+?lP8V;G{alM#O&P| zh;m!hE-y~nUDuN0;||<*(QZ+Gsf_YfLW;l=4gS1nxn5n=)j92flYP@}FD`wWLG@;R zxj`tv1vYK+`=cVZU3C=D7U$o7v7jCkIEhi>vBpG$1`pI|Bw++2hTw&$fCwIm8x7(rRyYD`jPZ(+ z7)6C3;t@Pn@V<#h4mD8;x}vVfe*L;1!sxiWzu)Q~?dz_puB!gJy7~acu`561Z{2YO z2X^|Y{UaB;{n_CO9Y5(a{S^c(T=X=qYrDC~m1QbI&=9n+sXica-p6)d?il-|C42-W zZ^o=KjpR#-@9Vu^X>odJodZJay!AsFZegC`UV&{%1T1OWyOgt~PTrPT&R5dxg`4tz1#$s+MtE z-1(?i3(}wA)EKDyKWQjkA4TUFh`B!Gv|VbY^a|&3-p*lSdSUR|2+0=94of&}GzVfZ z!nb1$5h=QceR76%k_sWgWTyN=nA6=%`%$m- zGxLx;O^L3!I4`_f1&^AK3^r56E}qAaGE?y$FnwsIF-2gC2a^*JXBc0exv2S!&dkj` zim8Yeko+><L?QdMIWU=GcEf<)af)I0a%!oRM5h&fkGbn+{MWKq)lWtiy86DX-n8lyBzIyzK?}>i=f8a+v(>{GmaqsIXV0KR;FUzFESbr3&7qk;r!-M= zS7SRUt|HdYBxOGwv35vll2>D7jSSeO~|acpNDLXn|}l z#-WAvJ2dXb^miV+?viZ7P~(A`sL3(Wu{Z_VHY6o+qi*$Go$Y5S^k~22DP2e*&jZlt zk>I^J?`+(+1NOfFsX^EV0=~^t`QSt)U!6MXor_7iZwnI^#_~O# z>Zki?VQGhFe82ojF8xYWFLYtYE)8bU2FB|&i&KQ1zUbrZ@m7LLp<0qIT1MFBob6MS zhYK-vO2JRgv*`gelYC~Ap&S}^oy}!z+Bfs>y*^mq9+YBF`TA^1E=MocDXh1E_aLN8 zBR^SM0RTT^La{XoF6R@rrX0G&-G1kMc@3 ztkU>&(j9~Ibc=Y$>%4}qxIg!CJJr3au7`TToLUkE~r*wL(8MB(6NMol{= z>D$fwJD(0uPddY5yw!q?ZHsBc6>$8xm@Y8R%Efg57__;wnEZ}Ii)U`+;Q&nUC0xHD zXA?U5D6io3uOVu5kSPGFc;lO`$2F_XA#+Z9umqbq0tXpEODG@Gl|DkoAHVf#*tTy1 z0+>nxkPlu$513x>FQG@rCA~Cm3F%KDNK9QqAt#V6q=VBFvKwVk$_dc9WRT%1%JvzQ ze+i`_gO>e{G8pZb(bJn5Tw9+(+wwxa6Z#5oVwnodAmt<|J_N-}keJ`-%tzDaZehC& zwvfTnqznoLg~a=E^+1(Di2Gw>@N$>UVI74yC|;I9xr|uL04h#mc^I{n-aq?98?Dh~ zU5uG{5IU}uoE!Z8?v9_&YwJ?{Mc&E7f2gWqV3}8_FaFOn;6jbXXi?MkQQjTWP28^O|2_3RLrqSu! z8N;_U;yHqmWuVuy=+aq)#)rbJ7IVuoi-)hd{KVj<*6_R{kZ z6#)iUFs!bg_Q~)}uL89*qaRMs;?cs+ttRwHT30f&tCLUzMx|xb0LHr-6l^4pUYmOA za;vvD3JT1I?Py^m;L@{muPLSFEDvBNpyhBj<$zbYB6#hbqDn)~{xA42*>t%bzv7Mgi9#z- zil87J|ANx4qt9-+JYl{TvB54lZq;!?35>m-OWl3~#ZXY_V4)l~_0wOMDt810^v8fs zU=(A7jAfaQCXa0kZVC#lxph?3wAM;(T8eMQipo#~l+1X68&^B*PX23;)rKDqI@Lp} zFb(>3>eXPX%^S;l%OI<%|G(BlK8s59;1Whs6JqHTO$qKkV=WyzJA{Z{8`-VT4o$LU z3CRdk+8k8Zj@+N00H-#hYJ8UFX%UzM&eaYmuwO;7u*ez;fH}=PZo9D-z#>N0HSd`V znHGGkhZdo(=_rB^%L_lsD)L$sQCtcnvWx{F%8KR-@|WY{r%Zn|(hV&}KfIO2PvO+t zzqa5{q*}7w(!0L_b=Ev#=^1Nu*6OwFBXSLSR>OVPa9RT#h47$PAf%?`xoi7Q+P1%sd z)F|t{qr70@YXgKD2xnH7TP)cE;--7xeF?mYHPya5-&@7*g+(T1zlsA;>603N<&@+h zybfN+_0$-lSn^s=-q$gX`fM7(N-ad2*7E>-bk*`9p@FndaAI%}21~CaVNY96I^;ph z=b&VppGTt>4*UH`pOd0@P-?crYih=%O-Zd@`xf4$${TgUlLge3vNe3~J8Yz_Qdn6q zTPTFNqz#HD)`HVyozpI#yQkTsHm~p4cr*<%vA;ARvuK)6k8Z*}+Jw>4b+>#9se+q) z@+qYX#&>~)rZE1h{h{BRH%(%@c?N5&?;-j0Jt$32r|pOi_=}&s1h0DT;B&au%Fb^a zCEH-ei^2J?68g|TrQWq^`Ko-%{S&*V%I~;7jn`IGyxJgVEc8JnVw+T9iLz)DzgTzd z7M!}#Hhqn%G0qwAlb<{&Xj>B+RE?~SA6vNEAurjmiB?p@c5wzrH>xpQLRCrZFr=NE z=(SsLoQNOzpAbM)zKIsxlJpJFqi;RD6+%01;nra|y?9#+eBKmEzm4-btv}sAacE~{ zke?3^i1DEp???{HTUf_+&|vJ%?{5wYisLsIxbrtK>kN00b(wHz#t!oWy02`XH2bAi z@DCd=z}dHeZv$PO`i>Yq_T;N*!EGsv=Fl+t4yHtl6gmhQ_|><++>!dXHgDy7rdan| zJC2`f*M&V0F|odEW>Nndob6|ArLi?q@7ntxUTv#Td5!dA!%5rJU+Iuyro6jw6He5Q z-G%%4v9&9?-IE5|CeZkMc=E{^TTj6`1ViI*8>TNBc4=ab(7m=pF1aOD-NT^l`GFeW zhtlGTJk;_^S2fQV06ac@h5T7Dhi(>1mYKg%5>AP(K9e{Pv+%28D!mVFaj1F+Wjo79 zkWa3-OKKz=_NU}78UH24OFj{__Fs~_bS#4Qi}D)EHhVEJtgo|Si7SV#^K5w--)vW& z+C0qZu}e_pc{AxBNbau=oywQvq1T%n{<-UxucGkHcEzh&4M|Nf^zJqp-z+6p-rRL% z;bq@WRd;#+E4CKQdLWIpZ4?n3J!Nu~Z%lMt6kUBN&7?u?Wlws|Np>h$_(*bg^#QdCLuIKOLz6=C*`pZz-q?P4tny$zCrHc3@E`?t=u1)ysj+J(H3=!vm1C z)c(WI;5%tFEq9X@@-WB^sk>gbr)0g{n5ul_78#f1Hso%AJ*an}bDd-__HKBKuiVDA zUYk9A?knpk(oa?_>Sy{wYN4Oplm;cq?P`VDQ*Zyew0VIteix)KI?48zT`go>@|Rm_ zRc*9?I8uy3c7F1uY91UQ>mAs7$xM!Th_~yr0_2+(L|ct8Z==z|JbOA209Q8&lt%ENH$S!mvP>#0fEja-0TO1@ev#38CB&VuX zz>7W2=`80jMP~)O^s=*UL6Aw#oa)rW9AS=%@t-s$HZJ<3sDgidBY!Q?G6Tk{PbYaU p<)zC`bYljX=H<(wj*>B;;LLV8)0Xb}$=#SR3N8dZW);bK{{~{4^uz!F delta 49718 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
- {children} + + {children} +
diff --git a/src/app/page.tsx b/src/app/page.tsx index 294f773..03de19d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,10 +1,12 @@ +// import { Shell } from "@/components/shell" + const Page = () => { return (
+ {/* */} + ) } diff --git a/src/components/shell.tsx b/src/components/shell.tsx new file mode 100644 index 0000000..3e3cdce --- /dev/null +++ b/src/components/shell.tsx @@ -0,0 +1,115 @@ +'use client'; + +import React from 'react'; +import { useShell } from '@/providers/shell'; + +export const Shell = () => { + const shellInputRef = React.useRef(null); + + const focusInput = () => { + shellInputRef.current?.focus(); + }; + + return ( +
+ + +
+ ); +}; + +const ShellInput = React.forwardRef((_, ref) => { + const [input, setInput] = React.useState(''); + const inputRef = React.useRef(null); + const { history, execute, user, hostname } = useShell(); + + // React.useImperativeHandle(ref, () => ({ + // focus: () => { + // inputRef.current?.focus(); + // }, + // })); + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + const output = execute(input); + // Add the input and output to history + history.add({ role: 'user', content: `${user.get()}@${hostname.get()} $ ${input}` }); + history.add({ role: 'assistant', content: output }); + setInput(''); + } + }; + + const handleChange = (e: React.FormEvent) => { + setInput(e.currentTarget.textContent || ''); + }; + + return ( +
+ {`${user.get()}@${hostname.get()} $ `} + +
+ ); +}); + +export const ShellHistory = () => { + const { history } = useShell(); + const [currentTime, setCurrentTime] = React.useState(getTime()); + + React.useEffect(() => { + const timer = setInterval(() => { + setCurrentTime(getTime()); + }, 1000); + + return () => { + clearInterval(timer); + }; + }, []); + + return ( + <> +

+ + soohoonchoi + {' '} + + {currentTime} + +
+ Type "help", "credits" or "license" for more. +

+ {history.get().map((message, index) => ( + + {message.content} +
+
+ ))} + + ); +}; + +function getTime() { + const date = new Date(); + const formattedDate = date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + }); + const formattedTime = date.toLocaleTimeString('en-US', { + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false, + }); + return `${formattedDate}, ${formattedTime}`; +} \ No newline at end of file diff --git a/src/providers/shell.tsx b/src/providers/shell.tsx new file mode 100644 index 0000000..491b60a --- /dev/null +++ b/src/providers/shell.tsx @@ -0,0 +1,114 @@ + + +'use client'; + +import * as React from 'react'; + +const initialShellState: ShellState = { + history: [] as Message[], + user: 'guest', + hostname: 'soohoonchoi.com', + shell: {} as Shell +} + +const ShellStateReducer = (state: ShellState, action: ShellStateAction): ShellState => { + switch (action.type) { + case 'addHistory': + return { + ...state, + history: [...state.history, action.payload] + }; + case 'clearHistory': + return { + ...state, + history: [] + }; + case 'setUser': + return { + ...state, + user: action.payload + }; + case 'setHostname': + return { + ...state, + hostname: action.payload + }; + case 'setShell': + return { + ...state, + shell: action.payload + }; + default: + return state; + } +} + +interface ShellContext { + history: { + get: () => Message[]; + add: (message: Message) => void; + clear: () => void; + }, + user: { + get: () => string; + set: (user: string) => void; + }, + hostname: { + get: () => string; + set: (hostname: string) => void; + }, + execute: (command: string) => string; +} + +const ShellContext = React.createContext(undefined); + + +export function useShell() { + const context = React.useContext(ShellContext); + if (!context) { + throw new Error('useShell must be used within a ShellProvider'); + } + return context; +} + +export function ShellProvider({ children }: { children: React.ReactNode }) { + const [state, dispatch] = React.useReducer(ShellStateReducer, initialShellState); + const shellContext = { + history: { + get: () => state.history, + add: (message: Message) => dispatch({ type: 'addHistory', payload: message }), + clear: () => dispatch({ type: 'clearHistory' }) + }, + user: { + get: () => state.user, + set: (user: string) => dispatch({ type: 'setUser', payload: user }) + }, + hostname: { + get: () => state.hostname, + set: (hostname: string) => dispatch({ type: 'setHostname', payload: hostname }) + }, + execute: (command: string) => { + return state.shell.run(command); + } + } + React.useEffect(() => { + async function init() { + const shell = { + run: (command: string) => { + return command; + } + } as Shell; + // const shell = await getShell(); + dispatch({ type: 'setShell', payload: shell }); + } + init(); + }, []); + + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/src/app/providers.tsx b/src/providers/theme.tsx similarity index 100% rename from src/app/providers.tsx rename to src/providers/theme.tsx diff --git a/src/types/shell.d.ts b/src/types/shell.d.ts new file mode 100644 index 0000000..0e42931 --- /dev/null +++ b/src/types/shell.d.ts @@ -0,0 +1,24 @@ + +type Message = { + role: 'user' | 'assistant' | 'system'; + content: string; +} + +type Shell = { + run: (command: string) => string; +} + +type ShellStateAction = + | { type: 'addHistory'; payload: Message } + | { type: 'clearHistory' } + | { type: 'setUser'; payload: string } + | { type: 'setHostname'; payload: string } + | { type: 'setShell'; payload: Shell }; + +type ShellState = { + history: Message []; + user: string; + hostname: string; + shell: Shell +}; + \ No newline at end of file

Soohoon Choi

about me

- Cofounder at Greptile.
+ Cofounder at Greptile.
Georgia Tech computer science and mathematics class of 2023.

Interested in (but not limited to): @@ -24,7 +26,9 @@ const Page = () => {