From 0db9f5aba2d902ae56637cc530ba36c500c45225 Mon Sep 17 00:00:00 2001 From: dvelo Date: Fri, 18 Apr 2025 21:44:38 -0500 Subject: [PATCH] feat: probably some changes --- apps/www/package.json | 8 +- .../branding/section-1/filter-demo-dark.png | Bin 0 -> 8244 bytes .../branding/section-1/filter-demo-light.png | Bin 0 -> 7691 bytes .../branding/section-2/alert-demo-dark.png | Bin 0 -> 13277 bytes .../branding/section-2/alert-demo-light.png | Bin 0 -> 14986 bytes .../section-2/interactive-demo-dark.png | Bin 0 -> 26310 bytes .../section-2/interactive-demo-light.png | Bin 0 -> 25887 bytes .../src/app/(dashboard)/dashboard/layout.tsx | 148 ++++ .../(dashboard)/dashboard/page.tsx} | 18 +- apps/www/src/app/(main)/home/actions.tsx | 0 .../app/(sl-modification-frame)/layout.tsx | 5 +- .../[category]/modification/[mod]/page.tsx | 2 +- .../modification/custom/[custom-mod]/page.tsx | 27 +- .../category/[category]/page.tsx | 6 +- .../file/[filename]/page.tsx | 41 +- .../sl-modification-frame/files/page.tsx | 53 +- .../embedded/sl-modification-frame/page.tsx | 109 +-- .../app/api/og/server/[id]/players/route.tsx | 2 +- apps/www/src/app/globals.css | 53 +- .../feat/home-page/animated-list.tsx | 72 ++ .../components/feat/home-page/aurora-text.tsx | 43 ++ .../feat/home-page/avatar-circles.tsx | 49 ++ .../feat/home-page/example-chart.tsx | 172 +++++ .../components/feat/home-page/home-page.tsx | 398 +++++++--- .../custom-files/custom-errors.tsx | 30 +- .../modification/custom-files/custom-test.tsx | 5 +- .../modification/modification-button.tsx | 2 +- .../modification/modification-frame.tsx | 2 +- .../feat/server-list/server-list.tsx | 124 +-- .../reporting/reporting-dialog.tsx | 2 +- .../feat/server-page/server-page.tsx | 4 +- .../feat/server-page/stats/stats-main-row.tsx | 4 +- apps/www/src/components/ui/sidebar.tsx | 726 ++++++++++++++++++ .../{lib => components/util}/top-loader.tsx | 8 +- apps/www/src/lib/hooks/use-filters.tsx | 163 +++- apps/www/src/lib/list.ts | 170 ---- apps/www/src/lib/motdEngine.ts | 242 ------ apps/www/src/lib/single.ts | 122 --- apps/www/src/pages/api/v1/get-status.ts | 2 + apps/www/src/pages/api/v1/motd.ts | 63 -- .../pages/api/v1/server/get/[server]/index.ts | 9 +- package.json | 8 +- yarn.lock | 60 +- 43 files changed, 2049 insertions(+), 903 deletions(-) create mode 100644 apps/www/public/branding/section-1/filter-demo-dark.png create mode 100644 apps/www/public/branding/section-1/filter-demo-light.png create mode 100644 apps/www/public/branding/section-2/alert-demo-dark.png create mode 100644 apps/www/public/branding/section-2/alert-demo-light.png create mode 100644 apps/www/public/branding/section-2/interactive-demo-dark.png create mode 100644 apps/www/public/branding/section-2/interactive-demo-light.png create mode 100644 apps/www/src/app/(dashboard)/dashboard/layout.tsx rename apps/www/src/{lib/mhsf.ts => app/(dashboard)/dashboard/page.tsx} (79%) create mode 100644 apps/www/src/app/(main)/home/actions.tsx create mode 100644 apps/www/src/components/feat/home-page/animated-list.tsx create mode 100644 apps/www/src/components/feat/home-page/aurora-text.tsx create mode 100644 apps/www/src/components/feat/home-page/avatar-circles.tsx create mode 100644 apps/www/src/components/feat/home-page/example-chart.tsx create mode 100644 apps/www/src/components/ui/sidebar.tsx rename apps/www/src/{lib => components/util}/top-loader.tsx (87%) delete mode 100644 apps/www/src/lib/list.ts delete mode 100644 apps/www/src/lib/motdEngine.ts delete mode 100644 apps/www/src/lib/single.ts delete mode 100644 apps/www/src/pages/api/v1/motd.ts diff --git a/apps/www/package.json b/apps/www/package.json index 2fa2438..791543e 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -32,9 +32,11 @@ "@radix-ui/react-menubar": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-select": "2.1.2", - "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-switch": "1.1.0", "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-tooltip": "^1.1.8", "@tanstack/react-query": "^5.69.0", "@trpc/client": "^11.0.0", "@trpc/next": "^11.0.0", @@ -51,6 +53,7 @@ "@vercel/functions": "^2.0.0", "@vercel/og": "^0.6.5", "ag-grid-react": "^33.0.3", + "class-variance-authority": "^0.7.1", "contentlayer": "^0.3.4", "cron": "^3.1.7", "discord.js": "^14.15.3", @@ -59,13 +62,14 @@ "input-otp": "^1.2.4", "json-beautify": "^1.1.1", "lodash": "^4.17.21", - "lucide-react": "^0.479.0", + "lucide-react": "^0.487.0", "lz-string": "^1.5.0", "mini-svg-data-uri": "^1.4.4", "minimessage-2-html": "1.6.0", "minimessage-js": "^1.1.3", "monaco-editor": "^0.52.2", "mongodb": "^6.8.0", + "motion": "^12.7.4", "next": "15.2.0", "next-contentlayer": "^0.3.4", "next-css-obfuscator": "^2.2.16", diff --git a/apps/www/public/branding/section-1/filter-demo-dark.png b/apps/www/public/branding/section-1/filter-demo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb6046eec5c6d56f68a65a19587c5e37fe95f94 GIT binary patch literal 8244 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 literal 0 HcmV?d00001 diff --git a/apps/www/public/branding/section-1/filter-demo-light.png b/apps/www/public/branding/section-1/filter-demo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8aebedd38d2237bc7c1979302329c64fcdf3ba GIT binary patch literal 7691 zcmeI1`8$;F|My2_X(YWvWKBwpteG%E5t4lwvXkuD8zT%V``RW-V_yfOY{S?olgK)Q z#!kYFvF~QaJ@4=5r_Ud7-}evq{lj@&=k+?T^SqAZT8_u_d_EIQjC47G{6GKzz@hix zz8L_(gl4pxY%GjQR*ID#<8aphfpri7z|Qq=V*-5o%*QA)1)1q;0?_?}D~yvf?)MDu z0RUgq*s0FU0Dw@g-u-(PAxxAhj@S0C2;8Q-<3-J=)zOtwbN1hthaPoI^*#6^am_>V zhlIeQA?t(tq6T@_l3!a$ya;|EQF~V6tfuZ=MJC)<@mYmtk3#FGLMg~ym+%UJE?`I4L0PrRqv&1HNLuH=la)hoE z6M%Hzg~)Zx5{pjMBx?xeF#}4)5<2Q4{Uu131nHk#s6c>;`*||R!h?g8^Q7f8AoqL< zn+%N8O-dR7AeqTDRCCEI7HjWc0p$8Fb~o_z$F-8!qycx4+dNi#kVAg$)jz+kXK6Fqeb zkU8}4aP%yrr|HiGFc5730E#cz0RZM~GJq(_GrWLy?w9NUCtwFNKrZJ0!OJ{@OQjG9 z1lpTyiSf3oI#KuVTlc>;LA2A=jXNFHlRS&!5>N`C@R@Arh_e*Es3@S7jTxl99+_sm?sEm3HSLGmF!(XoJ^-yt-MgZTt0pB-(6% z>YtRQ>X*$}_~k4r&w5=g!XocFNhW-=C}ZXJ897h6@-I4y#ZZY_#ecNY-?su`tX`*Z zNb;BpAoFHvgV!IeAoXQzQxjKC*z%mN{ZeO)n6MPSveb*bUv<*K)c)kIKjBAhSq~S4 zSDOB^X=(cSV$R5!^D$O$h1w1)vs8kL^|?Sb+1YFVyeM;3B(&B9IS+lUUhJ(3rXgr? zYOPzb0<_T3{9UvI!rYgJbcbQVn5i{P7Wc4?PVa}Nmc7zb_Sk3E^9m5%EG56K46bOO z`r6t9|1o*5+irQ=*Ysstu5E5^w0a0Yj1ZZxr3w&wL=ogR>uukS<^p@Q@+yWGhJyPw z)<1WRmMn4G^;R`P0+1-~cil_ez?$jpwQsK6SAYl9u?&c+d2caNR`1y4A6nbIWfit3 za9s^WO>bauP^AO&SAKT6U9vx@Z$lhhyD;Mmpi@B z#v=ZXP>kVlgN==U*^om^D8YFkW)}3USx@v@mXZ(TCfh42$t`?i$dc4PC9ZjK=GJ(2|Z+$9|3ohq^QIgQJp7!QmeFTan$_y(C{_yV4=C2+m z0wF!T;&4gYr_Y!>5Yk^eh=1Pt9JVP3OcW~7RHT4W8>2c4h`dgN~u~5ke!kLuXHABk4Kt1j8 zx7)QEkZx*X+U5Ma0h5fcACD+@lEA1MLp!@UR1pQp+v53Q!s0{c+NdCX(Tzc|wClI? zKOwD1$(Y9rxAL0g%DnKw^EF$c*c@ZKxIM(TaZ6$Vx`pzEHX67;8RYml*IUiAhI_jx zrAIF^(y=GaJF@j3N}AjA*qm1vVgYYW0|-noa@l6Zlc!Hss$EUB5XbSjVe~&zimvLO zm!Uw_i0#0&rP@TP6PV{P=o<4|P{(X@&_DwAf|Af4HpHV4>i->d3D)wL^%;Fns?p*e z&`@GXWjL%T(PHHAtaxtV87m>vF0|fR;Ojt5gLI2hJ|L_Is%hT-s&*CxyZw33kSsB( z_JLdG;`*=@UdRSboi$`fKi-cqP;I>il!cY`BUJ~Gx8cG{`Yb=&|0F~5jdzazv@H~6 zObuXYxG5Thz7f=_qv@w^$`}5YLbM`GYZQC$X-}*Peb)%3 zJlwBuc4gqH{#y19{9Al?zL(*8I(p(_3ok?+@yJw;Ow(t-)l&c2I<@`DeJf{<+M?vM zD_0jZT^@#_-|GobBu~@SnAH!DVeW0+wr21={-;n0J&39*XV}d%&(!T@OgyON{J6_A zv8^^W8K;(QWDy|;)`}6<%UbsbB-S!d8L*tO;wXfzlywk%;w@6X2{@ie-U+RkwZHne zU!SUOq_k}4h41>_NQ%X0xDi&QC_3#0gf|L8cUIODC3A=St%wU)Kj(|gn#$b=0jY%5 z`-as&K4ai%2M@8(_u^TFh;}~mnzd6t10(G-epT%)Kv?Cw;%Kt|NcnD+uzq=c=ak|p z*sbf#T4`-!-}ThbG}YJ#0h4Nza&hDVpW185)1G%s<7;qN2q4!HDSfs&y$&ZsvGL|vQo^RMkZS0DcAgS~I& zH+#ofhj^EJILD{?4)m5l{JT_U3r5@%7OU@U*3Z19VK zi{L=4i%#B#`E?6lWv>=uiC3SO)Tp-ALo3&YC6`7~Avclwv`rzYPU(i92xFW#V|x57 zN}gjljy+kwOjEOH?{Tex=<3&w0baA^9+aX=5jatN$vkK`7h*QCaog zE$-71CdW6(SZ%u^Y->fN$;#mn+4U`O{%pZQ_QIQz{%S%=i~EnJ=#3u`@%=! zbIi%7T8JZ+M)8mM>A-+)ln;Z}CA7S8hN zj0k>aLS)m(-yDh&Z9{PX6|QxWxO6jKIP6zkdx`qt*V2H9+&{B?QbbNlnuntdb-r4n zeb^mJ;)~oEr-`LPdl5&gvPY4+TIA;0AohaoI!O$gb=`5vi1wogO)F%EYA9`KRPFrx zT*?RIZ)6_@aO>poZSH=1_tEP1rJwWZfh)@K$!!{#HPUX zc2+swvPOpL^%I=byxgxZ)| zDQUG+R%Vx{V3haN-;kjmiDzJ5l>PbS))j~^Pd3tK~%s% zN&8^NDslId-;?XldJwbUtkwH0($z4FLw3AKVJpDoZe3P^>k+~U`dS^c_{PrU z$jQ2TTj+y1+1R=iegHx5d9bAr%^C}bc$7_Oitq9ZGKj@uSNT43Gqp}~Qgg^4! zJ+@p3n~WG6l!8znHtZ=qf5nvbDv&s`ak`#n$&IQFZry-xlzD?WQPH3@BaM z1#dyVUU_SA;lMSA7&xu~v`LwA1?3&KV$H`T3b`#&(SH(3vQsDv^?ldgbDf8J9yJd4 z2yU9NbLm+)CxGrzbaVIbFI}l5osm;#+}q+TH_1yX<0VMlbS`5e5^1BB!0!nS`6!RJ zR)0V228{jrfG43lf;$*q+4S2!B*2YCH;%9gNo?xWavYn=w6-Jz&1tue6%=mrlzL{I zOHP+-ynZ6MxXvE6sq1g3Id>$%taTxW`r20+liaE2qK~SOX%1P5w~9&N%L_HlD8Nn# zQ%4~uLBsDuQf^EIj=)Tnre;zrLaXHG_23l4m!?p*Tx{lN z`HmPChxF7=E&K+_9o8jz22UuuV5a22-%{*8!AVPo3`JkmvY=AHPj|8eM>Nklt2Gz7C%nzzW@|W0k2$jg{h!GW?f;+Fb&ypp0Zt!a9w-& z5vbOn*miU9KKscd{P$un!&`L45jpj<*KP(8sX;XDjywhSiNRgV7g+J#PY0p0%^}u9 z^3t%nzd3P%hyG9f=?bTqAF=6oH$;)<`!7Q+dyu!fHGRV+Muqr%IeC1Aprp{B*5b)( z=|Su$vwG8&%F4I>T8+K93}`&+Xyj&hV8GJ3Tm=ieclXV-Dsex3+I#Jb--d~Qs7`sf zr*_jy5?17}aX4^r_6BO!!gFPQ!Jm~2K)C16bRD}}U**2`OU+3o=cAuEzC{tMz3Hd-?d7#oh5yZUsmL{rXxAMHXTpb3@0)c7}l| zB^Mpo$(I{)Z%hIRQN?B&m%t7d4)2mc(wgjiY9KU!*dk%35saCk)Sq~<@{FG;l zOe|>p5{CV;V8xfKg|SYy(q66kNRJ#k#b7)6tkTOwGZl(H4r)$~te1u|rb{qr9$ zs56s9p}_w2My5SAbhqzB5k(u$*|dtM z(AYwjQe%ohD@9##>6NeIR+kp80+#k+&(QI^16OK|&9k-Pn{9tdiPL1&u_}RgK`eN# zV$9{5t6uG)@LjBXM8kKO#!0j4$z;$ZV}saPS6`3yTBb~WWPh)n)HWLmU+Ytw<^or= zMbbEb=Y&o5ef05F{9t!<9TT{i;=9)ToW2D1_6;iegU>93DXCs1mIlY-Rqmw5$5~(&;M~Fl@Jnu>o zb10uR`Lese--t%bD8bk4;Fe38CpK#EQEMbRXs&aT40T?HdHwky)AX}S^`vnx_52vW z_nA5k(k1-SnjNNJqZp+9;!-v{x0gUQ)JV5hxJ75@6T=eu0si7VK`b6^k`Fb?D;--W zf~!xBeDzRiaTth0j4nV%cgbrT8n`swxm=fc5ywZy;m6XZkA6Mv{p?sNl`vXF>(y|# znVFPu>e}qiNfPm+N5t(LF3GJR;@Q{r=#X0ahA>%;Rs1Rz$YJVIqN6dLS$1luWHTHU zEn^#);HV>71k%#LVBiNVhBI+ardnlp@nnnZ(gz1rJ19@25l3sQMy{^3n;3==TrX#jG$va4NLAbWA5L)Ms=-CT;pf)EK3ct=A`43f z6OP$at^Mxd$0Cr!!pR8z@UVzTvr(0K@Q^xrG8XnNO|7{q)JWtK7CT(7+ztZCxY%rA zEAivShOs6wwR`mww0+S@&Ge#&c{c>2y`r^vZlH#_Z=&XRAh7b7CH(8ZO2xz*KIKJ4 zU|y#Ho0FgEN`FulslRIwJl8ojwjTLT5iy>>lWOW5BU(%cy`}09;WY&Sg<^o5pT{sfO-xbCu+^Z3cgt82Z`cfc2*A(0UBCmyNn?}I!YePv#eyWk{^`TYsr;?V z;N)R`sL9;1)MI^5$p&Er` zTUMp6!q`z0(iXQMqlK}KOWJFV`&nYbvbWD_t|Q%?QCA;ArdwAVoRm|kLF_03W&jt5i(PEAOrxCP1pK=8f+SM%9qYq6fxod@w}|*b&vOr5t~rM}+m*|zsubFx zo~$)*4+at=5xcwY3{?R-!rbt~!u2)%6H!tvx1&QczXe#HUCL9FrDoWLCY&^?O)&gZ zkm4T7_pP{Y^!9Mwu453PAm`@Sx{Z*xqXJlSShJq_7EExi4(^7#v_P!psmkV@7;Uup zA&$%t#scM;Oam?#7!y%unx{)-8VUo70!!zIAOtql+z6yA#A4im?*?}3r>m<{EdRdg z-9ConX<9HdFW^%-HV|)HtGpkQ8U4?4<95FqZoOA+e>x+~t|Je1eYIw$$|FY=l4z9; zJY@Vj39Y>q##~U%jGWOLaeiYUPg-}JqL7B3vaEAw{GQmf(5G){jj-Uqsc_$Ed;}t% z4O%+Q${Y|PGLJ*=>rZ9P(XbK_V^Jq)Pt10{f0ims1}9)Qwhae$tvcB>+~30pQFQcE zDzI_gTl@u@WWgj#nJ7m}xMUhG$9Tf``f*XLS_I?he03InX*c%YVWvl2>o-Xp?{0ZH zg=7ve(h*4po_2Jvv2qGNi()Nw;2Q*{&Y&4 za6GnpCOMROhp8Oa{cH?BJ{uLP=}#DB#6EN~z{R0d?C467jL+_QMa2s?r5gW}iFE&8 z%SjYf@%Y)<*Aq%1?GzE^+4I7J!2pxgzr{LZlaqf^KQTlC7~C-QWmp)zDxiGV+xm1@ zSC{X=G!q7X!ldMKWT8a+QAX#z0Qf2I@AQM!=p>uwOL{L3e}?~{sQ8}OX_P4TvYcf{ ze=D+SA1jvcSUu{J`Ya`-;Q0L+0Bb?8>wea8_yM&iSxo=DY!c<44(MsW*18$6cAMbQ zb*8AVJGd!7mEA3&TeSGM4t`(N^8HXhV`F2d=%p1o0eD4LfQunhtt<-5k{?{mSN`vO z*RVZ~h7Sd)xnURD8$6P+Y+$3JvzNX<@=0TO00N0DW+nF#Jpefe#m2`@Uqbw?|5F!) zEEnJAvIBIdxt%$mE{B}*3cLUR^Q-?hM*g=3dUO$$Yn$-N9a0q|y9MZJ8{J21I=%c~ Dy25#j literal 0 HcmV?d00001 diff --git a/apps/www/public/branding/section-2/alert-demo-dark.png b/apps/www/public/branding/section-2/alert-demo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..18da126ea967439cbb42c2545bf8430d33129ac0 GIT binary patch literal 13277 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 literal 0 HcmV?d00001 diff --git a/apps/www/public/branding/section-2/interactive-demo-dark.png b/apps/www/public/branding/section-2/interactive-demo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9b46658f5fbc5050da3166c538d7c120dad39283 GIT binary patch literal 26310 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%0A9+k_omCY^ieg`=+ba)tc1Vn=&g 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 wz-t8zM@L;dAQ`t% z*-EWW51T)OnlI&?X4;On4Q11+iPVzYjwT&&=#q~sEh)N($kz|(#kIP3QD#PM<1t=Y zdJ~0h1aW}x!K2^PwGc5(6{wUJL1;S(r`9JQobiJ#KBU83Tx{-fXKL_Wgp79i8)1%{ z-JWkiSJHn<^83MxpJ3#S1?!%lb3QCk`QZw0TPXr6?a<>{C5BbZ20wA@@J$Mm;P`yO zFwaOe&4F}V3Li&|4H9>(eBF3{_}D&sh_1R)lXgep_PXoZ*vn(bxj(Z-)9<+DDO|HL z{|$fydg93@m_l^Wxfx+1RzZ8+{%(}{5hln8%?ZvE*j^M{TRpT?Rw+>{OVANVfTY-LoF z1;h7RDR$HDa-_!M^*_0v+b9&5=UT9?(X@rRP*2`UrJX9E^L#xWznP@ga>^K5oe+OD zb3xppQS-m2IaAV*@TX7^1qQ2KwU^Og!1DtP1VQGf2s!LVj5B8gE&Y2%0NIzSR2xy8u zXJ>(!XUY8GQby}Tnk;UZBo9+M$MCA;iKYWRBfQ%OPtUp1NCk{=+Cmc#hq%-in;&={ z@O&F|G&G3q`3d;uCsXXlCX_3RSnhBYb+#hXl0)S0`&jiFQ%17{c<|*100Q zwc#g^MDlCqXXsykSqVqu*>9D_@K$c61f>lk@j4w>^9~wWIiz^!jAzTqWH8Qo1VYvv=COFPf=I^C%tNK!<4{VKc#-W|-B*hh5LUk;M6331~2#{)=477SApDnvBn! z1Q}cd$MEob%--M(X`SSMNPrYgf{$4z^ibmJ2fPBz{`|S%67t=r7H&L`$y)qleN2@6 z%}O^NzwWbJcPAV#qQNwvBT{kiDkY4p{nUlBa=`JwF&}a~AM`bor3zRpT1u_{M6Ph} zW_qZV+8Y%X$Ltzp`uL#cM6B{de~SD|UeFGfH7Gtl_dlKb099_!6>rj;ONC2qHc`SX z&avK>KTbnrJ}+=fh0Z=@`SN6;=-v0e_)i;Q7NdZfEQ#Otyi%axgF(mlzFtmiTL3O9%Fq!-61J;}iKY;ytJv0wBFlUHO5eWV zO+6cS>OzcfSaMbesuuqB;5QM9_{W%ENz$(>t@;_9Z2ygr?Z$%>Pd*D44Y?iNiSZoN zV&~_ki<_zVx@$iSrBQu`e~j1zw5Rw!eX@S{U#J|c@5QMZ#;3KB&&uug!Pb|78x_!|?{_ z=C?xq_|2|zjT1zZG_N0Y?Wri?h3SezQ%TzVCaWFZD4jXRBx{I|V6c_ayHEJj{2xl9 z|1bQ~|9j~FNW=ZVVfx=N{lAmC|9_HAM}e}%q|r|$J81C#Gr99#QS)7;f>rSU0S4%^ APyhe` literal 0 HcmV?d00001 diff --git a/apps/www/src/app/(dashboard)/dashboard/layout.tsx b/apps/www/src/app/(dashboard)/dashboard/layout.tsx new file mode 100644 index 0000000..f429730 --- /dev/null +++ b/apps/www/src/app/(dashboard)/dashboard/layout.tsx @@ -0,0 +1,148 @@ +/* + * MHSF, Minehut Server List + * All external content is rather licensed under the ECA Agreement + * located here: https://mhsf.app/docs/legal/external-content-agreement + * + * All code under MHSF is licensed under the MIT License + * by open source contributors + * + * Copyright (c) 2025 dvelo + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +"use client"; +import "../../globals.css"; +import { useSearchParams } from "next/navigation"; +import { Placeholder } from "@/components/ui/placeholder"; +import { Command, X } from "lucide-react"; +import { IsScript } from "@/components/util/is-script"; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; +import { NavBar } from "@/components/feat/navbar/navbar"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { ThemeProvider } from "@/components/util/theme-provider"; +import { FontBoundary } from "@/components/util/font-boundary"; +import { ClerkProvider } from "@/components/util/clerk-provider"; +import { Toaster } from "sonner"; +import { Footer } from "@/components/feat/footer/footer"; +import { NuqsAdapter } from "nuqs/adapters/next/app"; +import { IframeProtector } from "@/components/util/iframe-protector"; +import { + Sidebar, + SidebarContent, + SidebarFooter, + SidebarGroup, + SidebarGroupContent, + SidebarHeader, + SidebarInset, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + SidebarProvider, +} from "@/components/ui/sidebar"; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + const searchParams = useSearchParams(); + const search = searchParams?.get("theme") || "light"; + + return ( + + + + + + + + + + + + + + + +
+ +
+
+ + Acme Inc + + + Enterprise + +
+
+ + + + + + + + + + + + a + + + + + + + + + + +
{children}
+
+ + + + + + + + + ); +} diff --git a/apps/www/src/lib/mhsf.ts b/apps/www/src/app/(dashboard)/dashboard/page.tsx similarity index 79% rename from apps/www/src/lib/mhsf.ts rename to apps/www/src/app/(dashboard)/dashboard/page.tsx index 4d8d6bd..c5b5a77 100644 --- a/apps/www/src/lib/mhsf.ts +++ b/apps/www/src/app/(dashboard)/dashboard/page.tsx @@ -28,20 +28,6 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -export class MHSF { - private favorites: number = 0; - private customization: any = {}; - - getMHSF() { - return {favorites: this.favorites, customization: this.customization} - } - - setFavorites(num: number) { - this.favorites = num; - - } - - setCustomizations(num: object) { - this.customization = num; - } +export default function Dashboard() { + return <>Hello world } \ No newline at end of file diff --git a/apps/www/src/app/(main)/home/actions.tsx b/apps/www/src/app/(main)/home/actions.tsx new file mode 100644 index 0000000..e69de29 diff --git a/apps/www/src/app/(sl-modification-frame)/layout.tsx b/apps/www/src/app/(sl-modification-frame)/layout.tsx index 4efce4a..9bda8f8 100644 --- a/apps/www/src/app/(sl-modification-frame)/layout.tsx +++ b/apps/www/src/app/(sl-modification-frame)/layout.tsx @@ -45,6 +45,7 @@ import { Toaster } from "sonner"; import { Footer } from "@/components/feat/footer/footer"; import { NuqsAdapter } from "nuqs/adapters/next/app"; import { IframeProtector } from "@/components/util/iframe-protector"; +import NextTopLoader from "@/components/util/top-loader"; export default function RootLayout({ children, @@ -78,10 +79,12 @@ export default function RootLayout({ - + + +
{children}
diff --git a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/modification/[mod]/page.tsx b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/modification/[mod]/page.tsx index 22a09c7..9815bc8 100644 --- a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/modification/[mod]/page.tsx +++ b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/modification/[mod]/page.tsx @@ -59,7 +59,7 @@ export default function ModificationPage({ ); return ( -
+
+
- @@ -146,6 +164,7 @@ export default function ModificationPage({ }, }); toast.success(`Deleted in ${Date.now() - time}ms`); + router.push(backRoute); }} > Delete @@ -185,9 +204,7 @@ export default function ModificationPage({ File name diff --git a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/page.tsx b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/page.tsx index d7f0bc9..aad2733 100644 --- a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/page.tsx +++ b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/category/[category]/page.tsx @@ -51,9 +51,9 @@ export default async function ServerListCategoryFrame({ const categoryObj = serverModDB.find( (c) => c.displayTitle === atob(decodeURIComponent(category)), ); - +`` return ( -
+

@@ -62,7 +62,7 @@ export default async function ServerListCategoryFrame({

{categoryObj?.description} - + {categoryObj?.entries.map((m) => ( setSyntaxErrors(await validateCode(monacoRef, filename)))(); // biome-ignore lint: L useEffect(() => { setSuccessfullyLinted(false); debouncedSave(); + (async () => setSyntaxErrors(await validateCode(monacoRef, filename)))(); }, [value]); return ( -
+
@@ -167,9 +199,7 @@ export default function CustomFilePage({ {syntaxErrors !== null && syntaxErrors.length !== 0 && ( )} @@ -192,6 +222,7 @@ export default function CustomFilePage({ diff --git a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/files/page.tsx b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/files/page.tsx index 2918326..13cdf9b 100644 --- a/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/files/page.tsx +++ b/apps/www/src/app/(sl-modification-frame)/servers/embedded/sl-modification-frame/files/page.tsx @@ -55,6 +55,8 @@ import { import { use, useEffect, useState } from "react"; import { toast } from "sonner"; import { findSupportedOperations } from "../file/[filename]/page"; +import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; export default function ServerListModificationFrame() { const { user } = useUser(); @@ -62,9 +64,8 @@ export default function ServerListModificationFrame() { (user?.unsafeMetadata.customFiles as Array) ?? []; const operations = usePlatforms(files); - return ( -
+

@@ -81,20 +82,23 @@ export default function ServerListModificationFrame() { )} {files.map((c, i) => ( - {operations[i].filter && } - {operations[i].sort && } + {operations.length !== 0 && ( + <> + {operations[i].filter && } + {operations[i].sort && } + + )} {c.name}.ts - @@ -60,55 +60,35 @@ export default function ServerListModificationFrame() { features, as well. - {serverModDB.map((c) => ( -
-

- {c.displayTitle} - - - View more - -

-
- {c.entries.map((m) => ( - - router.push( - `/servers/embedded/sl-modification-frame/category/${btoa(c.displayTitle)}/modification/${btoa(m.name)}`, - ) - } - > -
+ (!c.__custom || + (c.__custom && + ( + (user?.unsafeMetadata + .activatedModifications as ClerkCustomActivatedModification[]) ?? + [] + ).length !== 0)) && ( +
+

+ {c.displayTitle} + - -

- - {m.name} - - - ))} - - {c.__custom && - ( - (user?.unsafeMetadata - .activatedModifications as ClerkCustomActivatedModification[]) ?? - [] - ).map((m) => ( + + View more + +

+
+ {c.entries.map((m) => ( router.push( - `/servers/embedded/sl-modification-frame/category/${btoa(c.displayTitle)}/modification/custom/${btoa(m.friendlyName)}`, + `/servers/embedded/sl-modification-frame/category/${btoa(c.displayTitle)}/modification/${btoa(m.name)}`, ) } > @@ -116,17 +96,46 @@ export default function ServerListModificationFrame() { className="w-full h-[40px] mb-2 rounded-lg items-center text-center justify-center" style={{ backgroundColor: m.color }} > - +
- {m.friendlyName} + {m.name} ))} - -
-
- ))} + + {c.__custom && + ( + (user?.unsafeMetadata + .activatedModifications as ClerkCustomActivatedModification[]) ?? + [] + ).map((m) => ( + + router.push( + `/servers/embedded/sl-modification-frame/category/${btoa(c.displayTitle)}/modification/custom/${btoa(m.friendlyName)}`, + ) + } + > +
+ +
+ + {m.friendlyName} + +
+ ))} +
+
+
+ ), + )}
); diff --git a/apps/www/src/app/api/og/server/[id]/players/route.tsx b/apps/www/src/app/api/og/server/[id]/players/route.tsx index 80df2fc..b23a5a7 100644 --- a/apps/www/src/app/api/og/server/[id]/players/route.tsx +++ b/apps/www/src/app/api/og/server/[id]/players/route.tsx @@ -100,7 +100,7 @@ export async function GET( // Connect to MongoDB const mongo = new MongoClient(process.env.MONGO_DB as string); await mongo.connect(); - const db = mongo.db(process.env.CUSTOM_MONGO_DB ?? "mhsf"); + const db = mongo.db("mhsf"); // Get player data (last 60 entries) const historyCollection = db.collection("history"); diff --git a/apps/www/src/app/globals.css b/apps/www/src/app/globals.css index 45d3b87..5f3d351 100644 --- a/apps/www/src/app/globals.css +++ b/apps/www/src/app/globals.css @@ -77,6 +77,8 @@ /* Workaround for Tailwind being stupid */ border-color: hsl(214.3 31.8% 91.4%); } + + --sidebar: hsl(0 0% 98%) } .dark { --border: 216 34% 17%; @@ -105,12 +107,6 @@ --chart-4: 280 65% 60%; --chart-5: 340 75% 55%; - *, - ::before, - ::after { - @apply border-zinc-800; - } - --sidebar-background: 240 5.9% 10%; --sidebar-foreground: 240 4.8% 95.9%; @@ -126,6 +122,14 @@ --sidebar-border: 240 3.7% 15.9%; --sidebar-ring: 217.2 91.2% 59.8%; + + --sidebar: hsl(240 5.9% 10%); + + *, + ::before, + ::after { + @apply border-zinc-800; + } } @theme { @@ -9327,3 +9331,40 @@ body { @apply bg-background text-foreground; } } + +@keyframes aurora { + 0% { + background-position: 0% 50%; + transform: rotate(-5deg) scale(0.9); + } + 25% { + background-position: 50% 100%; + transform: rotate(5deg) scale(1.1); + } + 50% { + background-position: 100% 50%; + transform: rotate(-3deg) scale(0.95); + } + 75% { + background-position: 50% 0%; + transform: rotate(3deg) scale(1.05); + } + 100% { + background-position: 0% 50%; + transform: rotate(-5deg) scale(0.9); + } +} +/* + ---break--- + */ +@theme inline { + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + --animate-aurora: aurora 8s ease-in-out infinite alternate; +} \ No newline at end of file diff --git a/apps/www/src/components/feat/home-page/animated-list.tsx b/apps/www/src/components/feat/home-page/animated-list.tsx new file mode 100644 index 0000000..0befeff --- /dev/null +++ b/apps/www/src/components/feat/home-page/animated-list.tsx @@ -0,0 +1,72 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { AnimatePresence, motion } from "motion/react"; +import React, { + type ComponentPropsWithoutRef, + useEffect, + useMemo, + useState, +} from "react"; + +export function AnimatedListItem({ children }: { children: React.ReactNode }) { + const animations = { + initial: { scale: 0, opacity: 0 }, + animate: { scale: 1, opacity: 1, originY: 0 }, + exit: { scale: 0, opacity: 0 }, + transition: { type: "spring", stiffness: 350, damping: 40 }, + }; + + return ( + + {children} + + ); +} + +export interface AnimatedListProps extends ComponentPropsWithoutRef<"div"> { + children: React.ReactNode; + delay?: number; +} + +export const AnimatedList = React.memo( + ({ children, className, delay = 1000, ...props }: AnimatedListProps) => { + const [index, setIndex] = useState(0); + const childrenArray = useMemo( + () => React.Children.toArray(children), + [children], + ); + + useEffect(() => { + if (index < childrenArray.length - 1) { + const timeout = setTimeout(() => { + setIndex((prevIndex) => (prevIndex + 1) % childrenArray.length); + }, delay); + + return () => clearTimeout(timeout); + } + }, [index, delay, childrenArray.length]); + + const itemsToShow = useMemo(() => { + const result = childrenArray.slice(0, index + 1).reverse(); + return result; + }, [index, childrenArray]); + + return ( +
+ + {itemsToShow.map((item) => ( + + {item} + + ))} + +
+ ); + }, +); + +AnimatedList.displayName = "AnimatedList"; diff --git a/apps/www/src/components/feat/home-page/aurora-text.tsx b/apps/www/src/components/feat/home-page/aurora-text.tsx new file mode 100644 index 0000000..4b37963 --- /dev/null +++ b/apps/www/src/components/feat/home-page/aurora-text.tsx @@ -0,0 +1,43 @@ +"use client"; + +import React, { memo } from "react"; + +interface AuroraTextProps { + children: React.ReactNode; + className?: string; + colors?: string[]; + speed?: number; +} + +export const AuroraText = memo( + ({ + children, + className = "", + colors = ["#FF0080", "#7928CA", "#0070F3", "#38bdf8"], + speed = 1, + }: AuroraTextProps) => { + const gradientStyle = { + backgroundImage: `linear-gradient(135deg, ${colors.join(", ")}, ${ + colors[0] + })`, + WebkitBackgroundClip: "text", + WebkitTextFillColor: "transparent", + animationDuration: `${10 / speed}s`, + }; + + return ( + + {children} + + + ); + }, +); + +AuroraText.displayName = "AuroraText"; diff --git a/apps/www/src/components/feat/home-page/avatar-circles.tsx b/apps/www/src/components/feat/home-page/avatar-circles.tsx new file mode 100644 index 0000000..f33078d --- /dev/null +++ b/apps/www/src/components/feat/home-page/avatar-circles.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { cn } from "@/lib/utils"; + +export interface Avatar { + imageUrl: string; + profileUrl: string; +} +interface AvatarCirclesProps { + className?: string; + numPeople?: number; + avatarUrls: Avatar[]; +} + +export const AvatarCircles = ({ + numPeople, + className, + avatarUrls, +}: AvatarCirclesProps) => { + return ( +
+ {avatarUrls.map((url, index) => ( + + {`Avatar + + ))} + {(numPeople ?? 0) > 0 && ( + + +{numPeople} + + )} +
+ ); +}; diff --git a/apps/www/src/components/feat/home-page/example-chart.tsx b/apps/www/src/components/feat/home-page/example-chart.tsx new file mode 100644 index 0000000..942bb62 --- /dev/null +++ b/apps/www/src/components/feat/home-page/example-chart.tsx @@ -0,0 +1,172 @@ +/* + * MHSF, Minehut Server List + * All external content is rather licensed under the ECA Agreement + * located here: https://mhsf.app/docs/legal/external-content-agreement + * + * All code under MHSF is licensed under the MIT License + * by open source contributors + * + * Copyright (c) 2025 dvelo + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */"use client" + +import * as React from "react" +import { Area, AreaChart, CartesianGrid, XAxis } from "recharts" + +import { + ChartConfig, + ChartContainer, + ChartLegend, + ChartLegendContent, + ChartTooltip, + ChartTooltipContent, +} from "@/components/ui/chart" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +const chartData = [ + { date: "2024-04-01", player_count: 91 }, + { date: "2024-04-02", player_count: 106 }, + { date: "2024-04-03", player_count: 104 }, + { date: "2024-04-04", player_count: 111 }, + { date: "2024-04-05", player_count: 113 }, + { date: "2024-04-06", player_count: 114 }, + { date: "2024-04-07", player_count: 108 }, + { date: "2024-04-08", player_count: 89 }, + { date: "2024-04-09", player_count: 96 }, + { date: "2024-04-10", player_count: 123 }, + { date: "2024-04-11", player_count: 120 }, + { date: "2024-04-12", player_count: 140 }, + { date: "2024-04-13", player_count: 128 }, + { date: "2024-04-14", player_count: 130 }, + { date: "2024-04-15", player_count: 114 }, + { date: "2024-04-16", player_count: 98 }, + { date: "2024-04-17", player_count: 102 }, + { date: "2024-04-18", player_count: 103 }, + { date: "2024-04-19", player_count: 102 }, + { date: "2024-04-20", player_count: 112 }, + { date: "2024-04-21", player_count: 117 }, + { date: "2024-04-22", player_count: 119 }, + { date: "2024-04-23", player_count: 129 }, + { date: "2024-04-24", player_count: 121 }, + { date: "2024-04-25", player_count: 126 }, + { date: "2024-04-26", player_count: 98 }, + { date: "2024-04-27", player_count: 102 }, + { date: "2024-04-28", player_count: 100 }, + { date: "2024-04-29", player_count: 101 }, + { date: "2024-04-30", player_count: 104 }, + { date: "2024-05-01", player_count: 109 }, + { date: "2024-05-02", player_count: 86 }, + { date: "2024-05-03", player_count: 93 }, + { date: "2024-05-04", player_count: 108 }, + { date: "2024-05-05", player_count: 112 }, + { date: "2024-05-06", player_count: 111 }, + { date: "2024-05-07", player_count: 96 }, + { date: "2024-05-08", player_count: 100 }, + { date: "2024-05-09", player_count: 124 }, + { date: "2024-05-10", player_count: 134 }, + { date: "2024-05-11", player_count: 144 }, + { date: "2024-05-12", player_count: 156 }, + { date: "2024-05-13", player_count: 180 }, + { date: "2024-05-14", player_count: 167 }, + { date: "2024-05-15", player_count: 154 }, + { date: "2024-05-16", player_count: 124 }, + { date: "2024-05-17", player_count: 112 }, + { date: "2024-05-18", player_count: 114 }, + { date: "2024-05-19", player_count: 121 }, + { date: "2024-05-20", player_count: 96 }, + { date: "2024-05-21", player_count: 102 }, + { date: "2024-05-22", player_count: 131 }, +] + +const chartConfig = { + player_count: { + label: "Players", + color: "hsl(var(--chart-1))", + } +} satisfies ChartConfig + +export function ExampleChart() { + return ( + + + + + + + + + + { + const date = new Date(value) + return date.toLocaleDateString("en-US", { + month: "short", + day: "numeric", + }) + }} + /> + { + return new Date(value).toLocaleDateString("en-US", { + month: "short", + day: "numeric", + }) + }} + indicator="dot" + /> + } + /> + + } /> + + + ) +} \ No newline at end of file diff --git a/apps/www/src/components/feat/home-page/home-page.tsx b/apps/www/src/components/feat/home-page/home-page.tsx index eaf56c6..be5d9b7 100644 --- a/apps/www/src/components/feat/home-page/home-page.tsx +++ b/apps/www/src/components/feat/home-page/home-page.tsx @@ -33,107 +33,319 @@ import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { useClerk, useUser } from "@clerk/nextjs"; -import { ArrowDown, GalleryVertical } from "lucide-react"; +import { ArrowDown, GalleryVertical, Star } from "lucide-react"; import { useTheme } from "@/lib/hooks/use-theme"; import { useRouter } from "next/navigation"; -import { useEffect, useState } from "react"; +import { use, useEffect, useState } from "react"; import { Gradient } from "stripe-gradient"; +import { Material } from "@/components/ui/material"; +import { Badge } from "@/components/ui/badge"; +import { AuroraText } from "./aurora-text"; +import { AnimatedList } from "./animated-list"; +import { cn } from "@/lib/utils"; +import { ExampleChart } from "./example-chart"; +import { Link } from "@/components/util/link"; +import {type Avatar, AvatarCircles } from "./avatar-circles"; + +const getGitHubDetails = async () => { + const githubRepo = await (await fetch("https://api.github.com/repos/DeveloLongScript/mhsf")).json() + const githubStargazers = await (await fetch("https://api.github.com/repos/DeveloLongScript/mhsf/stargazers")).json() + + return { + stars: githubRepo.stargazers_count as number, + stargazers: (githubStargazers as Array<{avatar_url: string, html_url: string}>).map((c) => {return {imageUrl: c.avatar_url, profileUrl: c.html_url}}) + } +} export default function HomePageComponent() { - const clerk = useClerk(); - const router = useRouter(); - const { isSignedIn } = useUser(); - const { resolvedTheme } = useTheme(); - const [gradientId, setGradientId] = useState("gradient-banner"); + const clerk = useClerk(); + const router = useRouter(); + const { isSignedIn } = useUser(); + const theme = useTheme(); + const { resolvedTheme } = useTheme(); + const [stars, setStars] = useState(0); + const [stargazers, setStargazers] = useState([]); + const [gradientId, setGradientId] = useState("gradient-banner"); + + useEffect(() => { + setGradientId("gradient-banner"); + const gradient = new Gradient(); + gradient.initGradient(`#${gradientId}`); + }, [gradientId]); useEffect(() => { - setGradientId("gradient-banner"); - const gradient = new Gradient(); - gradient.initGradient("#" + gradientId); - }, [gradientId]); + getGitHubDetails().then((c) => { + setStars(c.stars); + setStargazers(c.stargazers); + }) + }, []) - return ( -
- -
-
+ return ( +
+ +
+
-

- Meet MHSF,
- the modern server list -

-

- MHSF is the next generation Minehut server list wrapper, with
- interactive filters, customizable web-pages, a modern interface and{" "} -
- everything in-between. -

+

+ Meet MHSF,
+ the modern server list +

+

+ MHSF is the next generation Minehut server list wrapper, with
+ interactive filters, customizable web-pages, a modern interface and{" "} +
everything in-between. +

- - - - -
-
- See more - - - -
-
-
-
- - For players - -
- - -

- Find what you want now.
- Not later. -

-

- MHSF is built for finding servers, and only that, along with
- allowing for maximum customizability with
- both your experience and the webpages you interact with.
-

-
- -
-
- ); + + + + +
+
+ +
+
+
+
+
+
+

+ An open-source unofficial project brought to you by dvelo +

+
+
+ + For server hunters + +
+
+
+ + +

+ Find what you want now.
+ Not later. +

+

+ MHSF is built for finding servers, and only that, along with{" "} +
+ allowing for maximum customizability with
+ both your experience and the webpages you interact with.{" "} +
+

+
+ + {" "} + Filter Demo{" "} + +
+
+
+
+ +

+ Build your dream server list +

+

+ Server lists are massive. Using custom filters and sorting + systems
+ allow you to shrink the amount of information you see in the way{" "} +
+ you want it. +

+
+
+
+
+
+ + + {Array.from({ length: 100 }, () => [ + { name: "Cannot find name 'flse'.", code: "2304" }, + { + name: "Type 'string' is not assignable to type 'boolean'.", + code: "2322", + }, + { + name: "'mhsf' has no exported member named 'Mincehut'. Did you mean 'Minehut'?", + code: "2724", + }, + { name: "Cannot find namespace 'React'.", code: "2503" }, + { + name: "'server' is declared but its value is never read.", + code: "6133", + }, + { + name: "This comparison appears to be unintentional because the types 'string' and 'boolean' have no overlap", + code: "2367", + }, + ]) + .flat() + .reverse() + .map((c) => ( + + ))} + + + + + Type-safety across the board + +

+ Completely safe TypeScript code is easily achieveable when + using MHSF custom modification with fully functioning + TypeScript error detection. +

+
+
+ + Alert Demo + + + + Lint your code instantly + +

+ Worried your code is broken? Run a simulation of your + modification or lint it very quickly. +

+
+
+ + Interactive Demo + + + + Interactively edit your code + +

+ MHSF uses the Monaco Editor as the editor of choice for all + custom modifications; the same editor that powers the Visual + Studio Code editor. +

+
+
+
+
+
+
+ + For data hunters + +
+
+ +

+ Your data? No problem. +

+

+ Data for servers are openly accessible behind no paywall or{" "} +
+ verification for thousands of servers over millions of total{" "} +
+ entries. +

+ +
+
+
+
+ +

+ Don't trust us? We're open-source. +

+

+ MHSF's entire codebase from microservice to frontend is
+ completely open-source under the MIT License. +

+ + + + + + + + + +
+
+
+
+
+ ); +} + +function TypeScriptError({ name, code }: { name: string; code: string }) { + return ( +
+
+
+

+ {name} + · + ts({code}) +

+
+
+
+ ); } diff --git a/apps/www/src/components/feat/server-list/modification/custom-files/custom-errors.tsx b/apps/www/src/components/feat/server-list/modification/custom-files/custom-errors.tsx index 37f5e8f..51bbbcb 100644 --- a/apps/www/src/components/feat/server-list/modification/custom-files/custom-errors.tsx +++ b/apps/www/src/components/feat/server-list/modification/custom-files/custom-errors.tsx @@ -51,18 +51,8 @@ import type { MonacoRefType } from "@/app/(sl-modification-frame)/servers/embedd export type SyntaxErrorInterface = languages.typescript.Diagnostic[] | null; -export function CustomErrors({ - value, - monacoRef, - filename -}: { - value: string; - monacoRef: RefObject; - filename: string; -}) { - const [syntaxErrors, setSyntaxErrors] = useState(); - - const validateCode = () => { +export const validateCode = (monacoRef: RefObject, filename: string) => { + return new Promise((re, rj) => { if (!monacoRef.current) return; monacoRef.current.languages.typescript @@ -78,16 +68,20 @@ export function CustomErrors({ ).toString(), ) .then((diags) => { - setSyntaxErrors(diags); + re(diags); }); }); }); - }; + }) + +}; - validateCode(); +export function CustomErrors({ + syntaxErrors +}: { + syntaxErrors: SyntaxErrorInterface; +}) { - // biome-ignore lint: L - useEffect(validateCode, [value]); if (syntaxErrors !== null && syntaxErrors !== undefined) return ( @@ -149,5 +143,5 @@ export function CustomErrors({ ); - return null; + return <>; } diff --git a/apps/www/src/components/feat/server-list/modification/custom-files/custom-test.tsx b/apps/www/src/components/feat/server-list/modification/custom-files/custom-test.tsx index b008c3b..4e66d2d 100644 --- a/apps/www/src/components/feat/server-list/modification/custom-files/custom-test.tsx +++ b/apps/www/src/components/feat/server-list/modification/custom-files/custom-test.tsx @@ -40,12 +40,11 @@ import { useEffect, useState } from "react"; import { toast } from "sonner"; import { CustomTestSuccess } from "./custom-test-success"; -export function CustomTest({value, successfullyLinted}: {value: string, successfullyLinted: boolean}) { +export function CustomTest({value, successfullyLinted, filename}: {value: string, successfullyLinted: boolean; filename: string}) { const [open, setOpen] = useState(false); const [filterEnabled, setFilterEnabled] = useState(true); const [sortEnabled, setSortEnabled] = useState(true); const [success, setSuccess] = useState(false); - const [fileName, setFileName] = useState(""); const [testMode, setTestMode] = useState<"filter" | "sort" | "">(""); // biome-ignore lint: values needed (but not shown by linter) @@ -173,7 +172,7 @@ export function CustomTest({value, successfullyLinted}: {value: string, successf {success && }Test {success && ( - + )} diff --git a/apps/www/src/components/feat/server-list/modification/modification-button.tsx b/apps/www/src/components/feat/server-list/modification/modification-button.tsx index fbd024f..2f874c1 100644 --- a/apps/www/src/components/feat/server-list/modification/modification-button.tsx +++ b/apps/www/src/components/feat/server-list/modification/modification-button.tsx @@ -39,7 +39,7 @@ export function ModificationButton({disabled}: {disabled?: boolean}) { - + diff --git a/apps/www/src/components/feat/server-list/modification/modification-frame.tsx b/apps/www/src/components/feat/server-list/modification/modification-frame.tsx index 7b11fd7..d1d6640 100644 --- a/apps/www/src/components/feat/server-list/modification/modification-frame.tsx +++ b/apps/www/src/components/feat/server-list/modification/modification-frame.tsx @@ -43,5 +43,5 @@ export function ModificationFrame() { }) }, [ref]) - return