From 527b6c9d28432dd7f9ea7e424562c19c2941824f Mon Sep 17 00:00:00 2001 From: mroxso <24775431+mroxso@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:27:47 +0100 Subject: [PATCH] add theme button and basic navigation --- lumina/app/layout.tsx | 3 + lumina/app/profile/[pubkey]/layout.tsx | 31 ---- lumina/bun.lockb | Bin 173582 -> 175381 bytes lumina/components/DropdownThemeMode.tsx | 40 +++++ lumina/components/GlobalFeed.tsx | 2 +- lumina/components/Navigation.tsx | 16 ++ lumina/components/TrendingAccounts.tsx | 39 +++++ lumina/components/ui/dropdown-menu.tsx | 200 ++++++++++++++++++++++++ lumina/package.json | 1 + 9 files changed, 300 insertions(+), 32 deletions(-) delete mode 100644 lumina/app/profile/[pubkey]/layout.tsx create mode 100644 lumina/components/DropdownThemeMode.tsx create mode 100644 lumina/components/Navigation.tsx create mode 100644 lumina/components/TrendingAccounts.tsx create mode 100644 lumina/components/ui/dropdown-menu.tsx diff --git a/lumina/app/layout.tsx b/lumina/app/layout.tsx index 3bb2953..ccf0699 100644 --- a/lumina/app/layout.tsx +++ b/lumina/app/layout.tsx @@ -2,6 +2,8 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import { ThemeProvider } from "@/components/theme-provider"; +import { DropdownThemeMode } from "@/components/DropdownThemeMode"; +import { Navigation } from "@/components/Navigation"; const inter = Inter({ subsets: ["latin"] }); @@ -24,6 +26,7 @@ export default function RootLayout({ enableSystem disableTransitionOnChange > + {children} diff --git a/lumina/app/profile/[pubkey]/layout.tsx b/lumina/app/profile/[pubkey]/layout.tsx deleted file mode 100644 index 3e95819..0000000 --- a/lumina/app/profile/[pubkey]/layout.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import type { Metadata } from "next"; -import { Inter } from "next/font/google"; -import { ThemeProvider } from "@/components/theme-provider"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "LUMINA Profile", - description: "LUMINA.rocks", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - - {children} - - - - ); -} diff --git a/lumina/bun.lockb b/lumina/bun.lockb index c2d852d8858e462521e69c641212f8efc8c8096b..03a51a84131679df1812aa0592f9cd8ebe660ae3 100755 GIT binary patch delta 31197 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 UG#sLa3-3tPd&7qV)Q;``KO&7cj{pDw delta 30162 zcmeHwd3;UR7XLj*F1ZLnLL##W5=lr%ZY1Q2nV2gQb0R{Lh9p8t4T-7MSM9^0n^LXu zm6ldprK+t^Iw)$asVzk-N{Ldm#qaw)XP<~Z-miV{_s{S1>21Gv?X~vW)7opVz0Wx} z$HEg;pZ}uj-0$$uUU$}I_u@VZB3$_mm! z8-ezBwpjc@hgLEwstsi}v=x=RffhmT4cZO*o}iJS9-telS}Xye-r(86s-U$&uRz}m z^blwp7JLf{D(=GY8i3}2X9G(>*`X|qoP0+#$c`0^Pam6BkYU-SZB*(Nt-_%6@n&X> z$r?G)GDq?P)CJn_)U;S?fsV?_r8z85pbylCwX^cl3JMN_=kWVUIvY))Nb%R8v|FN- z7h83 zHDFwJ$gC$09dkvE#m(v)6*trlsP&581;_qB0~@oMytHwdVUK4_d<{a5a{(y3^)XD( z=~@fQ=?L{PJ;OR=xT;s?GEl-Mbfx z^*0pK3kos{(qVjLus~jJ!8ph)k7KS`;1q|hNo&1WLG&Q<)5tI&`HfG}Jv~lT~ zX=6v}TGP=y9dZzs2fN=Hl*1kqX3(3U^uyDVKLqLm{zoa_E%_~=ET5e_E{)@DZPZg# zJSJlT1CQmU2xCFd1f|DhgTl#*`$~BnC_O4b%AG-}cfGk0Aie>`8Yn&tN_$^wX>`zZ zh|eHr$3FmNhlh_Z7@j*3p{Y}}Ay_3dmVnaW&Cx?DdV^v$7VooLEb!jq?Vub0tPeD>QR53dcan z(ic2!)=bh?psaaBMn+y(R)J*!%F%`X7`;|@GRncAgsf3xa>r&^ED7LgYkGcKPJzYI)!;{FjTsR(KF{(ocHtck zj2L88SQ|Vm_8V-JUjRyn9hI9mf<`L_Pd^+BJ>4&d82n)Hbs_iCbc>YUJ-7W>hp>=C?^V7RWwOc5D*#NIwKmORWcGM^?%F zNYH9n*~Pt40awsW6yS(kf#=d}AgQa&{{{K=A^!%HBmE4ND{?C+JBZjkHe*!Agtg$= zP*y?O*s*C7Ela_3VDmvabs3WQ;D%7|R%MY?q@jrEE|?wqb=11kaB2kTh-pwkTE<1_4LzFEd>r|({)(@^Gf=+Sa-=NB0x zTmeBX2r`h#5s%1CA2&8@OvZUM$dT;>rF?FJ(cll`jgdqb8u^F8vtzqKIgk+<`Qy`a zES9th8DUt48C#@$11LK-8THUP-zl146lgQia2B4#MrRd_%Pz4pcr3rhW$Kw0a~8HPP^I7-V&8D@*dT_0zraTD`0ye!%*BV#%! zCl2{~#fzVMd!0*o<+m@?X9 z%EIi*aV^W+p}1*l@%=BY6yF21U>}FFL(B4UsMoF9I-htYMk|G=SPS-bsOKtc*}n0L zueR3Lp`>V~_}-ue`#G$as#q-9+IrtOYay-`hBBob)=K>xN{|-p?@-2RS^f^|Rs@Fr zdY-FR3O*H1(NizAAE{J5r-bbpRwmu-vS`((zOItILg0^>@^#`Pe zYnT1wY+Yf%4j7rDZM4TYf$6SScU)T==ukRnrT8AA1vhkX(D)9~*5W%=E5-L4T5yoV zb{mcojS4DhWj=NV-3W3hqqS1xya7{p)2q(+wJSC)tC2&QuB~n4u${y*jzLZpZDWAl zRtGK`2d=7??`6031V>Zbv@(CYO@PCOT&!vvo5nbS>7a$>wAO-~IFzTftR@cIr*3(iT4@Uz=Cf$I+rgFv}zaHM!} z&N|msa!%UDAiHe=xOT`xhcKwqT4{*G=IvqjVWW@T)*l?(!QjBnmz>duec;%tRf~YJ zytUv^hixDh6lcJq4}Tdrwq03^K%Y;6>jDn_Lff&3=gdP-Q1b-IVXPSWx8Nd?r)p(6 zaJ?{xwLMmNC+%`rob3gq*k@yO$H2vyby{7$(Rb}~P@K|D3vT96zSgqv-CkSU%wc;0 zv4In)w{ATRu9Ft#6Q@LISV-|U27{+G^^g6;-sx@ z;jqOtz(Rn`iIZ=A3S4vTvTvO2U8Lv~#(=MaV@a3|CT$g1VFGQFz_GJ6wT}sXACtWGR9dd z!cqFgI5pDE5!~7t2^KJ1c%9_X2_L(9rID5$6L0fJpp1qJq7i036&!nw7SPY7;0*tP zNt6>>Rx5|CC9aa#Doht>w`GE(hT(&2wBT5WdaH?+9UE_L8jOk=G?X;0G}d8z3q0Lb zp=(-|5ZwX%;%uFfa_CKN^tNLmmc}`3??7f4FCx^gUJcQ*TgTg?n;O2RY7x!swlR{c zq(z{oYrxTJ$cu_`218d<^+nJzwA@AG?6xW3!jWgym-uVouy2qN{k z(aIXytrNjHw9&C~wn`}43i^t^pjv~o>l}<_EdUp%UG|ByZlIQ)`azei_ldJLXolM? z&_#{?Vw}OWFsg~L+x*}dw4p_>G#gw5xElJp`~=Cz%DMVjlu6}WF1X}!Za295nx3e> zPkCN8xcizV;O^H_7n7M-u9*g|S2_14I8K9A_l9~=WTt3w&Dt?lZt9l|K-gZdO$Yh$9?=mY76R40Ao`y453eAohG zF;~6yZSfyS^<`bwQ%DWgE{DWf`=OftT3BFfCnUOP>x1G{TU%{iK)h`joZm1e-FFGN z9_1$S)UtXwY@6E~8hY?ne{Qc`>=AFv>0m@{EZT;4+dJTB8<+#D?;JQ*2@Y|@zoWtF z&Z!RWsD<>3x2=JY%Nr^ocIzo{2;*Mx$4+Kc!{(t5?xcnEj<>Cc(5R2WtrQ#=ECQmB z-5T5(r)v(|wiYQ?Y3v-|g2NnPv9U}&Y%u5)V;Q2!AaI6fqjB3}aEu(-GqGIug2P^c zQ&AOdZC{7lrK@(aZ@g_rSEF*c95&DW;8=lvRI<5XQIo5z=Ouz;!-nPzaO_kiec600 zH7z=)!oSfP%CU?6z;Te3^yn}b96JRL9sU>`&0B>VxwU3@PT}Y-t(}m7+j+%VpGK;s zzJ8Xst37&YAp_!VOCV&JM;L2mS8w&w z)nORZgBI5&0(!faG~H3Sh3|SD9+7M$v^Rd#SUCmF?E~dt-n+Iqi zY4O&7A_Gw`AkOwRQdnu+CJ^5n3^EQ0;6m-z(ct14G}PAy=~3!D1hG6w+afW3cG(#8 z>)=xK1?M!x@Jdt=9ODdzR)cS0Bs0Om*D+=|mGwL3X<>eGYUEHYdqlkLsi8);9ujOP z!AZA7QO{v!x8SnspkZ2eM!ao$nz0+83-IGp;OL#YA6pv?#{_F(&EnL7!?o;@@zzBU z;IhCwPQ3(yf4sGCIs@Wp|JF`OU`&XXwMOVE#OXw&5D<~lkm|c(x#_BvA0h8c0p`VL$>aG3H~yR~5!)}P+9RHXXpi~k*@y6F0h z8oz_1ne-T9ZI?}bOt5V#QgBqGbLzotZQba2Ta(94n?_*9CWGssPyTkKI1=5Zt<`gQ z1qXB3vXM$LE3xed$Mu8|h%(k(H)X9re_l(g(^5bm*xu#nogji>S>!~+?5UCDm5XY=MyRB}Xxh%^f z?AGVOb=T+dDpJM;V*h-~(4h4SQkZXS7>Q$z2&NCs_H;Q1m$mH##{nU}w2E;qXK2=@ z1;&X6&YNbpP6gLrpN7LoVV}pfi0`uR^%04IlyPPTf&>?Go{Z8SKx1NXohSq+Yw*tAiu z6kK_*R)Vyw2@dtr1Z~}fcw485#{B3})>;e>izznFx&^674otl`QCl}L-rDd<&J7Kh zi4^+;;}qI$?}Cd22R9pOw_N}is^?+n!2N^LCmq(YlXxYL^=~_j6ugg-4BN!O$=bR} z@wRo74X@Rgv+WwVu28{tJi%^_n}QXDs#Dc-xoLjkShj z9rl#EGmLt$1-8I309=CJMt+7}Jw8KQH!a>~pJ{dj!Bx$jsfA3BSKpecWlxXiRpNAq z+Ig0CaeBOMQmaq8S(1sr?ilnu|?h%{pPi$5~v?Q z+5k|1KuH^d@2l%N-Ss!AL#R|Y0din04{D2ne1+ib~8Q3y) z9$TZ{krXK(0Ll+38^SiC=cj^J1`t;Djv$!ma;$b;jzyyD!xb&g0L-oD!#KRxX!$4F z*A+A{9N7YZJrr^0C1$60DdY`>Tdy9{yj;zg7Wh)N=tkMs6YwY*FPl{C@b0l zknWUnQWn@Hc~Xvi55NxW1E{|r;D?m*gJkfjNU3)SAT2tKFMdc_;46R`#{hmvDL+XD zpNCO)>}x&OpwvGNu%0sjKcwWpBZH5mMP@>$EO;JZg+BoNJd9HBqMrL8WdlC~q?cqq zDeL=5@)fDd`M-(`R`|12co?PA-IVziDJ#A$<)qZR1F!>k0e=1yRoha7+WdersYt3y zT8Tn@9!3?-Wp=$Hx>QxEMapC~e6f2jlCMD_KBSbpN_j0Q|4)=_$5ZN&GFe|zFNH?L z2MN7mALimyky7M~FWNZ(lxwL8C_56u%s)`-g+b1&aG6h99egY(^V@*Bf%Z}4BI+X* z{};**JtpfRWkdZXUy)LjEal1C@@Kp}sW})D3WvxXooaiZsaI4B(p*TnX2*lp1f2;= z#aZ~G<2)njbD-4IKw0YxpzPNoP<}|6T#PRl&^4enK;HqS{$@}c=yuRLpocg^%s2`G z{l+};Z)eP#S-I-I5 zKNqu1f|RkX7?h=_Nje>r`LiUQ4ayHG<Ch6yr?g7RBmc5eSM+P5KHhe(J4}!9uuRvMvNtyqRq-P{O#}&hZ zKS;qvQ2cMXgfAAnN=8!h*THinHzfT<=999X+fx23D6@XY7t1k|`IYd+@=lVkLi;mH z*8pV!S5SUPnXDseT`4DJl5vpwUXu5fGys$h21yzW$_7I~X_0223}S60U(^l>F2ydO z4Ey~+SwRXY8yE=6&%-Dy9)x_-!IBPAMj9s$aFGePN@6OH^L%acg(Q<1XZ zBq@IwW&UL3*9LtaloijH`V}elG$|*go&cqMkxnuHi=_f7lS}c%9xn&w+F1w60Qymof0i+E8>IF*L5R@NM z%7Xyzm@ynbd+q?()Aj&A6)7w11aL|oa%H2J`|mGoFn*eTB*2dR^(z~r;~L6xWPka> zhW6(O|LZFol;x+yAUb77b^xS1rJR($vrF=%9C*?HdS&xJUf2}rS32z3e|cr|KVI0t z{uQrqXtKX{W%EB?*l_;;rz;zj*C$$14&X0c*!+EE^Y@j_-&Zz%h(HWNyrSWUluPOF zE1R~4MT-8uvf(!U_m$1xS2llN+5CTTWrGJ!#w8Eq_@BSBd3)=!L+!OTXA`w!-??ZD z&n7CLXlKqQYqQU~XdTZbDxYcd&LwLx=UlWK;Pz+<=aaPy;8vecRQ76R;1->C(UQJT zRQ7Ajzfab>eD9)Je@IjgXnlT2)^35@1n!WgTu9bl{lP`cxR9tE(Kdohx!|I?mnJG- zX=$a&nscd(whP>Gt=7e4Z40>Z7Za6}S_!z!i!NHwkBRtQW&V%Jn#YeW+7WQyY5|v$ zwNJs#x|FD#(GGx{aLGlBx}2z-)uvre)|y;)(awWAuSNWntQ`Zl@TWxO2ki{F**{@? zR}z&{ZQd1(?+V5T?nf=*D#izH_0>e>vQ`Fe(N&DEEK#|lEic3P$}qlbiAtH)=NiTb zZWFklHRWfF?;6JUbE0xX+Xyb@XN>Q9qHZ)$N0eA)@t3r_`r?7k*NHpm4M5< zf${y4sNB)=f5G^E!T5ejRPR}|1~>a_pMsrrGf`2r12-|in;77&L_7kYb_)Z%g#m)Y z&k%28fZ!J1PQ(w3&VZYJ8w30`5x*Ip_bUeYD+UOznwIbz1_*BTZ;6VFRt9d-Zy4b3 ziAqgv`R^Fu?-<~nM5UJ2=MDx4ZWFjVnsOHdyn_MWO;p^qjo?!5Vu1G&m3ms*Jq++3 z1_;h`VJ!s%yyvoTyppJREi6%z7iKChB1i%2Bk~m`S$HTA9HGEZ1gH>vO2I4@f&g)V zf(a@FQI#MF6w@j}(4-Os=P3vh5l#>sqhO&E1dYWR3T8V&(9sG(u$X6sAjS&84GNly zgvtYNW@3322)a~(!0HS^gy`c8!7U0lQP4stHV9sIh9JWR zL6q1?L5d9m_o@)sMOsw|oU1~xi-K07Ry7E=P%yq41aYE-g3M|V1XYKijmWPKfk$-+ zj!@tb0WJ`HO2I4_2ol5r3MRNf5LE+$_F`HM2%6M@;5-E#MMO;qj#03%CIp?u8470C zgrK7<1YN~ER|sNUA-F+7qDa6bi3=30t_494QAWX{S`Z}FhM<>NUK@fgwIQ(9fuN7* zQwM@u6l|j4F`>9Y@M;|hGTb0Y5*sNp~-_9yErC{CW_0)Pvv%1;a#u2Lzu|Fv|miG;x4}2_6tcc|wpbrg=ip z#1n$^6l92q`VbtWU}1d-Mu{^N%&reXM=uDn#5^wuV!R-@LBZo9!5e}L6s-1!V6-Ts zV39WjNj?zdise2Kbn$_}>I*@>=;I5)EebYKP#_dP2wwGtAj1!W@nRzdDSi;R`$O=A zNb`rl*&l*k6igJg0wCBz!T10OCW#UXG6Nt8Y5>6$k>3CUj|LDNp`b_v1VZpB1+xMn zm?jQTFd-0vsD=>C5Yrk$(4-**=P8&aB7z_|M!~`$2%Z*aD3~1tLB~cAJR{~cf*__5 z1UD#nRwOir-~t7!8$!_p4)9PgoPDOKUY{wx{_gM(H_O;n@Yo1*ZPz zMw^41E0vVZw|XlrdsjUs-#OsCLM&RY@QgUX%6M1xyp-`lC(H3p>JL)3P|A2O@I^qsAuS+eKJSRWL?J%r(@@^gUaL!t zC!^HkU2^lL^oz1AfA{eQdxXyt$k;F+ewugLUy^!!=CD%gErYBG&>y!JL&)CKJe2XN zMPt^2&nr^K$Gh7Ac3`=b(NbGcmK|6jWqjc9zLc$$GCn)tvjBErm6YM8bW!;&)722N z12nUF+jOl|bcbv=fC83vkg;F<0m~;+_PW%o2mUjFpY>AD1L@BJmVHCYJdr*DxbatG z8)advJEQZ6x$9b)&x=MMWh_~%|;5`AH1o(Vl5AX%B7uW~v z2lyQN5^x##3Ah4W1t+qfWE1E>kO0;i#O2KWx3zn%l=qu&Gc%L@R1EpiQ5B%WKX)N_9Y$>qQbU?s2$ z_?LKZwc_Q&r|ido;713DgFF z>+Mb8MPLQMb+sCp3`_y00({^&6POJ=1N;Mc7MKHM0es!ZXkZMG3*-U$l@OH*kQfIP z0t3)^8juc*1ZttDwE;Jv9^e630cYSII{7QW-}77tE&-Q;3qUEb0eA!02)qTn4ZH)S z0RI4b12Jfye{jP;>EjBq6r$oMfGNOKpa|#>^Z^2Z20$Rt5C{Sqkw-Z`3hRRo_XTP~ z<^u3h{Xyh8K+k}l27-`o1Tf$P07YK-@&>jd^L^k0;6q>wD%=LV4)8%?2+$M=1;T)E z;AMah6`lwEComV72k^;eGoS?!4cLJgpcN1c!~v~=z)G0^iAcBs?!XvyBp1j7EEqw3 z;0}`C0cU}80Dn5S8Ng=ApD62(*th}k2Lt>~(jmzBa|+(!Jcaa5;A7w;U_06<0d@gT zBL7)FCVvhI-u{{oXaL`QBY?%g5@0#70$2&G0#*b60$v5y0vmugfH#4Sz+1rEz&pSu z;9X!dz-Rt#(eM?}rvL?=J8STzXWz7{V}i$=!X36Ko6iVz$fBGN%-myBm+ZGxE;W)jJwn{U?2*P z0O~+q1^5}2a%bXB#GPjmz}<$l3G_;kNARIAW!y}-d3*|RbKqvMA2pf2DJuplerI_F5ad>HNcV>lZy1$kWaj9hfgZXoEXG zAkA1nD>2HShlTa9I1$X(06mgFfutFp0FDDNL%9WxAk8&P^Uz$34V-sIM9wFzLMzc) ze8NdNc~W|QOMn*T{4*qK3drJUf%?*Z`uJzQl3qbcY-l>sM!A(R^mO~}S*R;Fn_T8S276r*LB zUju1|VyZm`BDl9@16e>OFbH5rl0jLvh~YB{=m$IoFqHNNdI5~-ti%VD;j{_B zpyLHJ1{h`;avArj!#q!55X$hiFw`4}GjoPbcEugo_G zXwv(2VgBzkXbc5X0M0R2L&ZG(sEA4{%GgOx(WpP@()mm;r_<444Tm#)Z7_KHPY~yy zmC$TM0DAZz8(;-P0eUhmG7_MrGJp{Pr-cs6X`ufM1LzCsz;GZ9NCjB0X;r3KR}mX# zRI1o0M@q#%%G{t=0Qo>58yE}Z1G&H$pd<1JfpW@{L302G88gN(mW+lhPXhH6>1Q~a zoE1(67^S!oO#)aE=k*DI6){jf32 zHl4y8HAC$TD6#`jB0UY%>;xO*?l>J-gY-<$`M}e_Y~U$?<*7#*Loul-e-3F5CKC7u z($8@IxxGFMItQ2s{1afqCxJ=8^Wf(KW<}wUEdu{9PyzY^FdXR|AQhl|DP&84#lVX) zpJkQ-%Yj#bmw_59@pXC&zVPYmv$@mzN_Qo~9p`{~PD>kkZwwiz;@Dz*mVo#nr~kh@Ai13JTY^qzu*V`0NFK)B&k>V|4{Ld@DdAU$mXikOiM6C}LPxZD%gnpnz zdU>NgDn6I}#DbF}pRTJawIHbmNpmsr1Eq!1TC9gYZsC4HuCMqFoEKfI26Q%Lh#GgE zJBT~xLnFf@!y~Y}iDn-v!y3L0g?donvbTXw@`(F2>*; zftz9Eym_Rh`h{2jQS<20%6Y271E?z`QhlhX^*MTzBO<;9DH78@0$C!I%SwGwMA0F! zA0n?SIMI2b*v#);{TEiLrK(CqxITQ`LMkbRp11JX4iYI2Tn6bT`jFcy{C)yS7kz#J zc}BcU;Q}%Gr$05K8&0Bi35HZ%4B4r8iZLZheJ}GZllBj)Y<}On*C+Zsv;QLCoZL}fzN%UNt|CHq zDv?GX%-YS8(s=#Fw>y=NHgh5jsd)W!CA3^tTTJ>GZO8(KnZ?#mDrh{clvFpYD5maG zIt7}IJlYQ)XhYc`mVbf=8+o59p?|vUgI$;P88a$e&;6B7=&k?JGNzYFAJMJ%|DuNv z`f$bCJ(XSJpPwni{h5;yvmEP{mHk|m##qR8AekM>A&qf^0r0p&l&W`8iGTj}omIj2OAFO(ME-=hl*C(U#BFP>L#N)%T~6yjNP z%k>&!=@*KJm-#ZxUblB{+U7L;MQF4{+V(i~ znuoUtN05I_^x2DXy(4Drh2E~3M%cU9Cw)@yXPZpb^&-MsA@qyOdr_Yd0X0>(%6b#4 zM8H0!sqM0>ey_4vYQ%}$eTX#X`%t&n532nBu+-D2DH1J4;T$hkqFB+8+StM|IP*oT zvs?$~c*QHhi582X?N#yIehe@OTM$NGeCyXqnLAPztX7p8kTAGMi4rIj^#jY<8!=$# zj%77pv8sv#68vBOD%Ye#ml{5q>pDPhRri@9WV=8kqH5WXA)VZuRON9DB{Df6wf1C^yGJKcO4JIK%| z!%;Lb?@LVVGVvOTUcwVkp1uVaWxjj%K+3u=yIz0!ysAu<`{_fv6RmqD%oBD%uZTv# zvz;_@HN+$kFY_I>mqrXs`nvV@4(LTI?2jJ>rk*8qiiP5 z9)O>|E9xDDpPFy2ty-Gw<9KDxuh5f=YJn&^h@P9TtG!(-StaF4C%Qd9-WkPdRSaJ ztV~ly#4NZ*S#wyPz)TaFqCndi}-mBe0R1a5)Nf^YyYHg)TV} zm*mk+Hv!flLs!C4=;;Bfu6XvS;-j8#BGw&Mx_g=Ln0mMS zt*>xEx)v-#zk;IqcH3o7z2E-TJ2lq8H5i&Ol}&{96>8rpKKTmc*N5O%MLz^xY$}=` zL)3b7NHnw&UT`AQcPuwC@0jAJj1e1;!C>Y)XhTo78lG`6VV$aAt#S=mc8hz*V1Yxz z=Y-ozQtEvbM^C)nOmBw3f+TKV7}*fSxW3tb!WP- zlM;c2$yvPKTs(gYoi*PK{6}z2M4UJY;$^;Bc<$9#zvxu>Mc{qC zY*F)T%$oTs;!)3yKQw1vX7POm^JT@yf4jN6>gBVu?&oY0L%xRl_7(F$)JrYJ?yr@Q zz?*PLe~iw23-z#GehnM!IQlFWRSRru(YQ0nJ-d9NcM_eyQ94F-up8%B^OeJ0Kl!l3 z`okY$rN4`us;JO>De-34*GFx6FLohvM9DW8+>eha>I#J$-zWj*DfGefQpGdBJkoCy zFYzq@Cr(60|&G$mD?d5Y|>HLH5>k&GdrYI3-prA-1o02oFPq8O{rSTju*yJQX zc)_+o>^YA-{etZ;9G7JS{=&hUADo8=n|ttB{ukSM=!MCHt;zcTt4pRoF^ad0i{gjc zPI{WW*wuZ(Q;88nF2W>#ae?RqMR<4oh)daP4&!tvCsWSigNCednOF3GzeK#yR)5@H z+<)=8;+o#eUWNP1Kx#=a+N!N|J#~HasFk{7Ax`1e9&$Vpc19j|yp#U?L;axqPIfB7aFk^ZFC5$B{BJcMZ{Hk9FRQ$z7vnbITb z3aa2P`~32^lI~2|pQLv~k6e}78@ub0#SK5~q5bPRa_q*rwx&q)Q|k)tn$pL+0kmqO zyyvI$Y+uiM^EGJU1i@K}X#c{`IE<_oEq=zHlh9sdf>pb<7fVT#+KVqq)7uND>$o>H zTeddlcB@-Gvio}J{fOpt^b>uq$V+=&BI%DcUe3|@~wlD8Xv~0TpEgbY%P2Ucp!434t zd>#FS_ios&v0XVb#&o!jQID7Te)^af!WIPVtd04ZiZdP~ouQ!279XHJ+ zlemU@z0J4Dm(-5CF|7OiJx2d{efC~g(e@Xd<38>x2L7US_cq@n-|S!U+rOVR9On^U zuCak`iDJhuO0jx9QFOS8$?PZQ-Gq_vC5qiQm67V=9wPh}D*C*q=yD52?$Aq22CwK7 z=P5SaQffCm(#yD1HD42-wj*Fy=S7}0L`$p?G=kE1Wi6oHmE9uoHpa2Lj~IDdiHv^4 z%)|N2cgxRo9QNw=<)@vci(Y9rUymp zWp$03V)<`MQ*}qO*ayX`c09U>g)?nW5m&*h`%+%0uew{&$oUk}@OLG$m-z~E_x^j& zh6a8-R5lh73G*0^_;{NIv-1y~;_bdD!*Kosj8kL3lTS8j>K!vuRa_x)MLUKs;|IVW z{SHgU4G_&eRd+wQl=+JEOFy);1$KQBVGm={uRI10z-?D_ZPWnKpV!_Ih<~u+*nuMTF043Xpb-FE>fRc7bZz+-*}5Z3+jviK6;=KiX(74ijIpg|~)@ zpA^u&!^9Y8)dNkzn4ap{VWPFFdU%;H-@iQKTdLGFkH7(@q8upEh$yJS_#E7QpG9o z-jmP}@722o~wF3gFSCaK^H;vE;vvJ83VupaD!SqNRM5P@XGkws)|@=zXjm(uI5Vr)?ASNX*v zA+o97NBsb%-_dXJ(02dZ=~v|$0e63&b5%XPA05Wzj{VTq)%;vBx1Q>u+vnjLW_*WT z9vyZw^2F&{mYJZghX#m(5MV+x#b262jHYoKZKu zb=&F(5*dptcyWc9ln(7}{!1;EFMEG{r}Npf(tY4q#$M{qzCP45D^zB7wL`w>?S{eX z8(>{4f{^KWEAquMJ7X<`gOlZK}hKCre%+K@1B{%GG#?BR~%CM<^ zn=i&-CsU2U?Jiz&SMA>Bzby00=c8ONZ*>}mYIre#K_rY7SD`NF()-ct@Db6`3=pg8 z>H(s{vBNyXNtZEW+9NF|^^7|{ZUK>e6lVSdG+kDY*>KFSauxJj9#Rc=cDG^=*H673 z>Xz}Mwuc(&y?eazjK}*{akY0odVLzopel~_@OY8xf!*QJk38fevRs6&5J zX8uz;&o(_!e^pd3p3ONS*a#{fj_a~t#`!p;s(HkXE)*j?)$Vd7>Rm6KAinTKkIa8T zC_A(BttU>$ZPjblp9SiJ>#nv<5IyT-R<#Ktv%VT>1eAK>t@^6BaTQ`7$348)OfbgZ zy3wl3SGt7 zia5<|cX8WS?O3(tRO5n1X3Hx}Q`^vLAwKm}Tf(|`{7_-*A`$5i+Z+@b{$SIJ#fxP1 zzPgDs{_11iM~jUE%Z5|$UkWG)t&b7OM@MEe?jkDyg)_jJwUHCOnTX_F_O$%ojHLaK-#x#J3y({_69=lF` z`Q_bny15YnT3U9_5GxvBD8|k5I_4iDiS^L^-gYA zCgRaJd`JIivqXHL8rg91Q^tm7%Wb{;VxJdr?-b9UBBL>RwcjY@0kFe4@RcdOR90tt>rg8MAwF@qyA%U4e`vFs4tWW gHSW&k-#y?{xLT}esBYUlDM(%B*t{o0?biAK0M>Yt-2eap diff --git a/lumina/components/DropdownThemeMode.tsx b/lumina/components/DropdownThemeMode.tsx new file mode 100644 index 0000000..f56bb74 --- /dev/null +++ b/lumina/components/DropdownThemeMode.tsx @@ -0,0 +1,40 @@ +"use client" + +import * as React from "react" +import { MoonIcon, SunIcon } from "@radix-ui/react-icons" +import { useTheme } from "next-themes" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + +export function DropdownThemeMode() { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +} diff --git a/lumina/components/GlobalFeed.tsx b/lumina/components/GlobalFeed.tsx index 3171a59..f40db3a 100644 --- a/lumina/components/GlobalFeed.tsx +++ b/lumina/components/GlobalFeed.tsx @@ -21,7 +21,7 @@ const GlobalFeed: React.FC = () => { // now filter all events with a tag[0] == t and tag[1] == nsfw filteredEvents = filteredEvents.filter((event) => event.tags.map((tag) => tag[0] == "t" && tag[1] == "nsfw")); // filter out all replies - filteredEvents = filteredEvents.filter((event) => event.tags.map((tag) => tag[0] == "e")); + filteredEvents = filteredEvents.filter((event) => !event.tags.some((tag) => { return tag[0] == 'e' })); return ( <> diff --git a/lumina/components/Navigation.tsx b/lumina/components/Navigation.tsx new file mode 100644 index 0000000..fc3f125 --- /dev/null +++ b/lumina/components/Navigation.tsx @@ -0,0 +1,16 @@ +"use client" + +import * as React from "react" +import { MoonIcon, SunIcon } from "@radix-ui/react-icons" +import { DropdownThemeMode } from "@/components/DropdownThemeMode" + +export function Navigation() { + + return ( +
+
+ +
+
+ ) +} diff --git a/lumina/components/TrendingAccounts.tsx b/lumina/components/TrendingAccounts.tsx new file mode 100644 index 0000000..d64ad5d --- /dev/null +++ b/lumina/components/TrendingAccounts.tsx @@ -0,0 +1,39 @@ +import { useRef } from "react"; +import { useNostrEvents, dateToUnix } from "nostr-react"; +import NoteCard from './NoteCard'; + +const TrendingAccounts: React.FC = () => { + const now = useRef(new Date()); // Make sure current time isn't re-rendered + + const { events } = useNostrEvents({ + filter: { + // since: dateToUnix(now.current), // all new events from now + // since: 0, + limit: 100, + kinds: [1], + }, + }); + + // const filteredEvents = events.filter((event) => event.content.includes(".jpg")); + // filter events with regex that checks for png, jpg, or gif + let filteredEvents = events.filter((event) => event.content.match(/https?:\/\/.*\.(?:png|jpg|gif)/g)?.[0]); + + // now filter all events with a tag[0] == t and tag[1] == nsfw + filteredEvents = filteredEvents.filter((event) => event.tags.map((tag) => tag[0] == "t" && tag[1] == "nsfw")); + // filter out all replies + filteredEvents = filteredEvents.filter((event) => event.tags.map((tag) => tag[0] == "e")); + + return ( + <> +

Global Feed

+ {filteredEvents.map((event) => ( + //

{event.pubkey} posted: {event.content}

+
+ +
+ ))} + + ); +} + +export default TrendingAccounts; \ No newline at end of file diff --git a/lumina/components/ui/dropdown-menu.tsx b/lumina/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..f69a0d6 --- /dev/null +++ b/lumina/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/lumina/package.json b/lumina/package.json index d72c708..8b3bd08 100644 --- a/lumina/package.json +++ b/lumina/package.json @@ -11,6 +11,7 @@ "dependencies": { "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-navigation-menu": "^1.1.4", "@radix-ui/react-slot": "^1.0.2",