From eaef7f304ced067e4bda1e090d8baa46af03e9bf Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 9 Jan 2025 21:18:19 +0800 Subject: [PATCH] :sparkles: Attachment list (Gallery) --- bun.lockb | Bin 251572 -> 256604 bytes package.json | 24 +++---- src/components/attachments/AttachmentItem.tsx | 14 +++- src/pages/attachments/index.tsx | 62 ++++++++++++++++++ src/pages/posts/index.tsx | 13 +--- 5 files changed, 86 insertions(+), 27 deletions(-) create mode 100644 src/pages/attachments/index.tsx diff --git a/bun.lockb b/bun.lockb index 118717e4de29be5779fec6ad527a65a0c0be1575..0bff6c7d148ba774d86a31344b4de4e41f487102 100755 GIT binary patch delta 31490 zcmeIbcU%=m_dmY7m#bV9#e#r>ioHPugo`4eG4>wC-cS)x6r>oiU9e&=s}88xQP8Mh z!(Jjr>>5kNUgBeKF(w+@_kDI|mH5Pbp3nF7`~Cj;J@>`o%z4k5GiPSbl-<27ThqRfptux3X#iKCKwWcEDCPX@(p?K6RX4!GMUEcnP06$S(=JVkqY;!O7lSa4I(r+zyr#1nDOW@SOaS6Qib66$)-w^iB;K3t#*B%F_W@Ler zeh@g7&m6@=YA~Ow(jK8tYh!Rkj73_9_ELeT=m%OQz7#TgsOX`Qf^yW%Dd04=)h)a~ zVPBJD!=fYOLc^pRz|l{MA&H!4fRlcuBlE4u6LX8eD70{Hn-z1*evUhYpL3 z#>^TNK5U>{T$B_tUBfMjJ$NE9$}J*tKyWOqN5JJ+smBanumlW{V-F#d>w_YKV`D=G zN<%^t5H6C$W^z46I1~~S7aJZCBZb5aj|+)Tkmk431{h#|l;A=4OPM{q;sp}~W-dZiI_C8;d%{@|s-js1 z7n}_3UC1lm0-1&&HaIG{e?*AXcM;cL4BU}$7^(lD(JJG zkJ(djGSC8ssKW3Vx9E`2koY?=MEG^&(~z75rzP=_(C-9J)9o?rkzoEqE=oDA0mr=EJWoy$0sxnb(ZR0eJf z+#Z}NJcWu#?;tqERwg*vSqx5km3DD_7C4Q71)Mr?7UL}(evTftjm zf+EGt8zBeBhu{Pd9r9Sn7r?b(2PcQuPUME1b9wm;aO#1j;1nu@Vk{ zhK|sCbCB0FFmgbwB|3aq$Ta{o3(tX*VFttG$d8A4h3mm-dh2KBxsa*rBf&{;;t}5R zu8^rG0tK&*%BiQ&OPXUyYcYB>{BFZ=#q(<3#m$@5QhTf&hrO=@$o!<_Fac3}xe_Wrr`#o1*$3e}HavF4$A!`abp#ON^xmc{#>JNJw0 zsVRHvMs4m;p`yWhY1PC!wI_!3-yBt`qE(5q_Ek$HRqk|r&R0EVRNLxbUuGVMVT}}c4}&;K)Jb^kKYGXr_OO%AhW9ZkCa3uHQ(~*TAgQ<+aUns+u1ZD8Ephx&)d+n@Un=iG#wI^EUdcvm`%Bm8bC6suGP&Z z+m@(Jv*ViWYYhQyfx9qjN{2*>1~MYQRlD~HGzGNcn6;*%wB}M_a?scuQbV zF+wV&NgE+G((0ndy@Nz8kksWHe68E@3eeJ)W|KuoDCTZ9?SVuUXk%vj0}@(>V!>_9 z@>DgyPoU{pdrA5h7{<=uZ2Gzb*D#d zXmUVY!D}>t#wr97A1l|!zE%+Gs%f45Os9~dfq;^quXPZwUD1NE2PDK}VsWh(_dp^= zSsRPjkm^E$CdQ&BoJ50R1htzIAknCC&vGD9e{<;#BvD;^v#C*6?vp}O#WWI9Jxwzh zVYeL;X<|eX%t|+I#i%at?rRN!nxX}jJWtIZ6lgjG%m)};Kw)EdUKoZ^xG^Mh2;(}PbEELZ9yNsXb2`GoNwpr%FyDm(kAJ%$Dt|3p>? zwRdMfW2?ScUDV$7{N%Z6>d-*rgnp9bul63^P<0v>Xj&Z1JEoKtE*BtCGvFM|7ws=e z=qdCd4R;76gbn)IwTszw8j?Sx;_A)jX2o`Zx-c@p)O^6lK11L89Tn zSh|~KM>RDnP!3n~@q4@KG(6DsVxT0|M?SCY+Ym{@@*t!%NM>D<@2F1EfpRUidvu_w zKc*LzDy7x22ojG^3V>sfu>J`fo}rS2HJV0Yh*{27Q)2?%-KxUSj8W(7qJD59)9$V{c4T0iPr;E@Oww_Jj_i@mRLwUj{++j5}#JIZ@h#g zLIdU8hU)Q7nnNH_&}mDpX$>T zKoC6%!@om9=wouy;?)hlP`|<*I5!&-nZhQ65I?ErCkD#(RHvjs)53T@F$~&FdLbk} zF}xD=#h=D>EF`{AQ8TtfqM+3lbK@IGJye$@KRHUx9~UTJQJuykJV#MiyNvfUMk3Wf zOXVWfjWkVFNAvT5)>va#NR2cLOii5-XgUR%qD$*>Q_(T{e5baBK&t;SZwaK2V`I7x ziBCvqmZ&(E_d;Quvg~lOWNIL0Di( zI0`8M5@toPuk|=SC>T6MaSKQ^l-Q9meG(y2-F)BM59w-@lBeq8 z<7b+N6dBi+2j$3kwa1hI#cqPSa7uuw%LHx@c{uq@hvciKg<+N<#miv-u`M=Hgc>># zhrXcNs-2g~8em(P#fDtZtX!R>mYo)$3{F;iObalbP39*@w6(L@RBj4i{v_44mf6%A z62-0Nj&U+cbTm;8PEi+54=}w0KrQ55=rvW}->|fq5+Ly)gjdSusp`TR0VbZGk7^Z zO+z4w8Za+bLc(!X91&kaqL$(m0AD<2>g7B{> zM4J9{xF$c%eh0}DdDv2MM$Lir4J3>_G~Ym?&d@qa@tUh%nipW2Jy()?0ptgTN02%| z;^W;=<-HDL82uI6w!D@?Z`HQ<_v0hbkO+2sMI@D+TVan7=sO$%1? z;@V=V*soGAEe}vCtWnFZ2rwnA(bojJlGq0+0LI{Simx?~}XE?ae*-W$R2p)Vw!NBi+sNNu!Q zAsOWyj24Zvu{ToP)T^0(%GMn9(#8Oj_4bbgf<2@iq*mNnOqrDJ>cTASbpqs9+s$|I zaMiXh#j-=~ksY8M*r6`W4lotk`SHfgB429=JnX1z7eeBj26f*JNMGxnVshW5Yf@*f zghcByzg_YI5)TCmWxw4Y{e!m?A@M<=?l=Icvu@L9zX$bclc6V4)D?VC*FgGK(;|DX zKT7b?*m^ImLsz>uv__&2cL9cwoDT`7a`flZed@w(0ZNPg>ZNS~ z#&!D%r{H^x6mJfux2eMceV$RLEP+I^fvcMJX5%f&(?+T855TqSh*+fP7>OMZ>&<$? zAz_8b#m#d_e8gQ>`dT04eW7il%J_ro!W{uhk6iT<*p^(i>`v@oxjbI5^r7==9O4Th z#<8QXHH3OF%ulj2AyGBj%47NoQhP{P!Y7zbu0QhO*Y;3jcS!x!wCR4PT}XLrWiW=y zvmezSy8}$dJl#XosPxQJFYOLcw&kg1_XHSUAnzO1Wxb!#e1zJKzA`eTFlDjQ+(xRK zmhwBQrBH>6)Yqt@ld4 z*$7@5+#1{&Tn2XmH-T3Jw*s#v@;ybq7dVyk1*Z>j1-yaC_X95s`D>96ZqW=k5x_rj zGTZ`sWUv)DIn-K|BTf#r7xI6?si8d$7D=j%#8?z81U^9+AWjuc0;h^53;drr=_QMD zQ-%INak4*M9e$&ng-Xs6C5V$eTUeSaaN>lkLjF5W`SV0RaY`~F6Q}$XArmJL7V2ZL zNC0U*b$yWoEa{tBGp{~b7eh}(hNVqgfe1NQ)L3{Dj^ z2PZo%!0A(v6W&tb#L3~-R%pKs5DZNZm< z<40PFUsOJwgn!@`QXs>t1z#h01~?g5E97X(dK0#1Na1vY})3T`KODZ$GK?gUPbR|F@=D}j^YYT)Ehb#VF+ zC%m@cUkUC7F4O$0hXl2#0XTjBiIbrKp+}r{wQs=*?;`MmoE+&YaN^X!9^i!c1RqL? zUPzDw{lV!&ycBpGIJN9Ma0;#o;ACL3;8VeAIxYmK^2@;SBc%&@9XQ$lUhwss&zw2? z->vt*Tdz3&{CDg9@7DX@t@poM@BcryUhVSd|Ff-EY{8QBzW96ElW|4$@R$CLexCfS zdy&r9=Ddn+>(YR=nG$w2?!fydp2_3d_F{)K54idr$?(0_et+@T+rQd4^-;t1(t~%2 z{rX&g?l9}3-|$Oywr!qq=UKx>XQgBNt2VvU`}x&9-#W$oV0$YBFwb(BoncmTo-}mYlPvl6<-n^KT}%W*3{v zwroaIxwTx5}C$bZRWJk-z`)f+oD!e+t z^6saWtBz&Yzm>P8;^epwV^(_^$29I;=;v`eqilZn-Ww>_xHY7=(+`gxeMnAPy8CXe z-giS&Zdfl{j-Hc6502u!sCA{4!DjZAM%L}a@4rZ`^y+HD=-yTB<6b6rdN49-bLU^u zuNsdY3tcgWO>+9~=Vsfk-FG}{Jjh~tPVVR!ab{Ikt>1T4eZQdKx^K!2Zw65d0E3r%m^O&eA&%4#h`02x$CGWrg^?rki zVJ4>{ajgfIHQ1eQZuxa(hR?8mY2%tdxmkRb<3V;6?zLH*x?onP1I#KXr_37=X#_J^>j+0JIGUFomUt z1Lzh3;2i3_90w8P{0NV%vb6EEX0FIFW_7I>l z(@+3;1PmPtU_RSHKztMcmtk`2wyfa5zZh@d%FD|6!^Fm=e!VvTUAA}7+wm<%m4CVU z+_8({J4#1hDA##y?^~NfTl&4*(d|Q0Z$D4(ixs0UJYRe(IdJ5|dKTs~Ty|t9U{_9M zPLZhS;&4@4fVQy!GFfUYfNtLbct^lG)-n!&bv%Ie zaRAn{*92@Qp!Wy>8(HQE0AUFLY`+7L&ANXFz;PsiJp^oKrg#8(1PqM_u$Ao~Abu18 zmjnPgEIa`~jnM#35U_(ejRbI!fH5Nh>|#dgZ4`h#EMXJ?-?0F$60nce91Y+e z0W(GeIKc7=NU;F$9|PbZn=%GKi$nmA2{^>+j|K3GfV8my4zv3NWF!G-YXNYCrCI=V z8wcPW0moR&L;%*~0jy61aDu%iU^@Z5lK`AznMnY`CIGM<2jC3rJ`RB6L;!mTILl1q z0pt-dbUc9bYzG1HlK{9(0Pr&lp8%l7WB?}!$Y)Ly0bC?t%tQc}*%1PglL5F*0&tZj zOakCL1;AATuCtnx0o)^C#$*6DSv~$RoghCV-bLcqV}OIRFk3@CPd~3qXyz0ODo=c+CzFaFKwj zvjMze!)F6XRsozR;2m?F1HgA4fQfSed|+n?xJQ8ZT)DL(D{S0cxeH5~59AIZ28DU5 zKw2ySGG7H^RM;&-UJ=rC9+1Kcn>!Ck1_SaEh-_kw=fiNf6aeY-0Tf}+39wED5VQb* zEnB_-z;*(R3_x+#kpT!>2w*D#C77H7z;O|PkQ4x=ST+H91lXqnuxG)k0OA(|I7EO0 zE3ptjjWhsp3jsK>0|ZTJ$Z02wO)yd5c_jeH)c`_P0`Owl1mqE5 zzY2gi3tj~vehq*_1ejTgbO1Fn0K}yOsLu`%aFKwjs{#12;i~~8X974+fIo9x1HgAJ zfQf4W1hO*(+#|p{13+VzlmQ@R9e_IoG+`c@09t$xV16cmrtBsGuLx+m7C>`0XDxt? z^#EQH(2_M?2cX*q0O{)hv}VrxK)7rG z;Ft{{WCMUsESrEl0_-;e2x7q-0mN?taEO4etV9-m)z}OmE(<_+c7TA31XRri(31_% z29Uf3zX(jdJ8GwpcP<4#~_kygC2lf>Akp z4#`6l<4<_dScJJA!Uo7vEU~3M6sMYWN0dIzkxOSWQYt|JJ}m@B zcTpYL%^pfA|H@hhp6!V&T&Uss90ywqOuIQNur>mtThHy8M^BjOAhOztEP5u>Nnq^- zMo&4q2&{v^=&8^mmIM=)CF0cht;nL=y}OX6PbYyDL;81tbrx80V6Gw^Bsg_I6`|Kf zVAKJ1MIBuQMvq{9LHJmtZUUtH&dsO~@aZlvy2(wCgs5FT1ZI!)dC{Jp!0g!oyI3xdNjn%H(|*Fe*|B0zEUAxD%54fV6-(QCNP2^OKy^UR z(Y_a;-#{-xG?V@Sy$1aWdINe3qM1__R1H)eG!H#BpS|m=?6S}!>1Ckhp!MjgdEoOw zm!NhTL{E(ANj*IorpL^yK#M?&L3Ht*3pxZ!ft(7O1)?YQ(?C`zKNj2qN(3c=#)Ift z&;ZatBPMAG5`#dYpm5M&Py}cwXc%ZXC>j(4qNh`hK#f5(p<963fZBsPfV5}22vZrP zfD9ljP+^b_s0ipMIB*tp4s_m7S(1K4;xOn4=on}lXgg>ph-UsCmLIH)uhj&}Z$M2! z%|OjTG~w%moItb;o4{=hIg|P;U1SSA+`j^lzQ-^HbQ!&r27Va)N6>7f=YXbz=y9Dl z$OmKw`GV?$GC*rV(?GL8vq5t~Drg>PK4<}mfl@%Uh|~ln8Kr8{I3&h{=viK8P!Nb7 zB*vo`4x-Xr&<`wWpwim5HIi*X?LaMA{y=4vWiFC4K=fF;7pM=29?)(E(KGTAppqba zP#KT|$Qk4UssO4EssXAAsts}jxr4p})dhKhXqoW^H30d68iM>m0ajRr0+DD0Y6BVz zS_0Q^fd2t{1$xb1hA6F#{_wFeYdT1&?lKcedP-gdnngi-ksbmX3Yx>F3{t!-^sqb< z6a|_OVxSaI8t4`Vb11$%w0MUL#cR^}_%$O!yP}NFM6slAqX(sbLNOmi%liQkE$OrhlX79C^HJeZaH1Q)&VX7W-wzZB zI*0s4Y>z_m!TD9rONy}d<ug-PJ}_MJ2tdj$F$?OF?O%#h^tX!bv8+5_AF;uL55S$^@+g zeGgg>+6c-9Wq~$&=Q%rr>MV3-ZVRIGbVm>!x#=iQ zNA#;uy$@=MG+iW6mo)>o1^tFJnW62NP698HZVLVlh}J5?-vVm_{xzsENCruu55OCN z2h!JCDk1R>KmfQu=rz)Xz-xeBAx#eWB5ek}f$Rfb4CDVead#0%sJ zstfuGk12pzzTz8uGE3!pH zOLkqsD}pM3%7e%W8Zu`ZfAZb|L|tDFye!BGL22o>Zh^Qwi zhA0*a4yoP{iY;o4J&ixLpkOQYOsa@lMT(S9l~CkTn({uEsZzqIH%N~hpz>(t$1>Cy z8WJ6=LgP5x9@>BFO!X#vs9*_G2K=p=+g>E-TZe;I@t~ZVQKEEMZI1*RZNQu zRjOB_8>Qa(9MgNL0?Jhc(Ty6%DNw{G*O_e?qtwc|GDaDo6qftcbN6)j%xRXWEUCuc zuU5*GJJ*Q6CPja_h(bDb-F+~+?B;64iMg*)>Kf?}7iO>lYm~NlY?!@9@xp_?#`%hq zoW(v6xQn&TfRxLM-%!d}VRJo++uQ)Iutgb4TkpG#vE0E#-N;j^a~#HaqY@8qcMtcv z(o5vnAg5fW<@$!ZTMwr6rRbZtW|28er|$k3G14Mmt2KCCq*}Q>Wbo2&Zj9h4P;KV>lG0( zL0(KwxqILT*F1si6epjKP{2K^#I;2)y#LVTd_7H}E}WM1w?uXr8?pOJ_U7-AV@9VT zr&u#KbDh!#j$Vcd`2l;mPH9@%y#;@*kN*D1XSrjd7XN(wELp6J5veP^XT86NPx=ca zyLLR+w)d|`ZhorrI-3Ip`4L+O7OuZA@?C_S6;dC^Tqz26jLA!;<35jEcM!2=0z0USw|T;nqut zxW$<0Ve|Z9t!AaI6!|6)+~-Sd$bz9D$FotS_cvAe@O~N3HbTMs3kvW-e{x(M}7tDvqptma-UAXjhifRw)w1Y_b(k zJdF3xM&+AX*K8#TkD{`-D5Wc+x=(Mm^nbBG`>36F80s*?4dndBY&W4r&AOpGF*dcn zYVr0}&(gnY3R-l&VU0H_UgdUl=P@#E;JobJmyTT5yhI%0s)`-Bj#{(WD8MgnuD5BRLe=a25Vtt_?yR(GN%A#^vnAbG9mQ32!B;#GN)rve;1n3F& z)fVWTWG%O#imq%7NxXf9v~JhZq(CbO`(=w#miLoqxto3YVo__}lJugt-)1ZFX&@y~ z%|qs~3ua!j;GK$n1#fq=Waua6!8FV0A)ZZ_DYDt!(~G8PDYj@UT2ciHSSb_F-nx)* zuy_0bbV7Z1Gd0DBo!Y9jE!7JO)P#G-1~mHl>1=;HxfT0ro8n|_MJ1W*62-n;D3Z8y zoY(}*E_L}RN54PACwCrXM^CGEDXwhEHuT*Ac7nXS$sVIP9&l^E_F}F%y30=Gj=>O3 zL8mY)pWX3qYG^}(#mHC6XOYlzehLNL%TCl^^8^JScdb1(!E9BIQVTU6*s1v8>1mPe zO6`C2tmAg*y<~HCAf&vh#XI`*rcUqFbydp7)O|4S&1X|CJFs2%*`7VyuJ|GD@|M>^Kiep(2aSMf{cDqcr>IMjRWu2U+9TQ(|-3a$+l)|1l_@+k>(qN0{I_ za(U*zS6Sr!Hk?QAftBfF;#$o3{Zl9F?=YP?I;zz6m`Xdfv90S~4@bUF0j<9Pb>{F2 z!Q*UG;-G}#clW{t1#7$yez>uoVCD1|rlx0wo}Hxp>uc!IhK@bCHJb$mZ~aZH`)yBV zjLC|)Eev7y>+fQ{f3wf^C;N*efAV7tyGpk8m$nw|XMf3b{ytWgS`z;}U?uh|PD+Wv ztj>O{UT;}nh;k2>uwQA~we2w8a{Ya*WhVMqFRx-4tjHb}-72C5lKxg#w|!e(LTe{_ zDRMuQp&5nuyvBwP4UrOj>~_taxGYGK!$nRsvp=A;EvLWi^=3rXi|MTrj&h@DjZ~A3 zIe>vl{6VpDpqZZjXOSh3_y1HMYmu1g9a%Os@SOSB0j0KoeAJgFv!3(sYld!#n=t8$ zylOmTFJS*;=3mgtdXX+e}*ms0HXX}vf ztc>7?wrktg6(8_zI#zB3y0$YE8^Lb;h{^8AUXy+vb2|){&w>xbtac`JV)G7T8Zx$# zaxe{#AmvJEy>VLIwDQh~;(Zqm%am*tRdO@uH5yhVM%TuiIwS|bZwu}{)TkS+4 z>T|+3JG)5ZQq6#Yb&dRi-+{@VWjO7 zI2{z+cgk1+;4$=nz4gGtU$-8o>cQG`*~It7>?#a)8rr=y-=jPv)^U$g>L0fxeY5=E zw1oTLyiN$;$n|#}qI+m(gnRlcuGhC8c__Hi%+a56=&3MW80hanEG;&i${#nJe>-aE zM*p(6d~pwQFnH)4&fWZfa2FDD|F7F$>QSXUAJk8i-ASo#Vb6|Y#{6fKzP8cdf_~AC zHl_f7oLg}O=UbZd%20kliE7?w?AxWY8>262y+ALYwXpri6i4NTgarbmzcYT>CHjVi(hj_h>q)D9C)N=72Nd4UcS9)WHOyAvBc0ME}g`#9akKE^f%G3@Vd}$Y5Hrk&_LNr zC`;EY$NZZ4u~F&mkwb@9lzo@T>YP9ml<}y=cYUiyXT0{3B~#b3@M&kF>x=*}BrXiR?JaS{_2f5gJ`me@QIvyd(p= z9-XhTmsX#|C*h#{z)eAJzIPPa0Hg|Z_16SX%*aPapl=&Si|-92#K zhG*21`7DoVGbE^AlW`NZvgj^6zM9M;PQ$wX0_g@Gtvi=Zx=t766dD-#tjTN{Y2?BN zUB(9VQFfnuYE9QYq=9Chnas|eR@x|rW~|Z~@Y|DF)ENZC)5&b=8D)^O{uXVgyg8<; z6SLN#BwhNU_7cgg=ubHDWU;`Xa7E{u%wi#y)8F&mrEH5c6`pTKLv&~OZ55o>F8_qh zPJdsxy#S1NS%2O5{$h7Cn{OUSeN3~E zj_}EBF4Ud%7naBGcxg5^Xi1(@kfV*lkhA^@bKeDS^IQ*>glh;)txBOGzh`deaR1}W zHzV}7nID-kx|oAmMdxPW?2E0i?NVj?<(anwH4W|3>-9WV@n>a=qKse{ent@RK~)+o zU{x-np#G}!y!-XOkITA7(^$I);VqqFEE*bm0kmxYMWvR_krY0a7N@e`kX=rH!+6-! zEll<^1ua$u6A-Ut9u#FJYKxu3WC4E zHC*c1rm=R{Fkj-W0jts#+F@0>AzZ0R;97M*OXeiA*Fm8>vu)z ztl!Jz_XQQvy3dU;pQ}pADtg`e%i`~DNSM?0*6=^jIbyLBb!+N20sb8Q%pvyERovAO z6*+&ovp#d!Mz39%bN<^USDVVb-@eddC+2b;H-qh2)$2-MQ=8>@UWrw44V!Tt$K-#% z!=o)An16qFbI5t`3Vv^le=UYO!o z?`p1O?l&>D#X9N(#gb6mJSSVRoqdw-Bh#{ntKJqX*=Q&#U01RNH!;Vepji!?&sMS< zkAc5l$+E2Br_CzX;hj>(*GuZWitnx89C}+n@YwLF!Ywo)0y(tRJxe^+p;oom3q=kt z)F-cEZEnFDtk!)Ap0XKhRdPbDgyEqj2H`kUxooZngIti8)ODs9)EgOa~sv=*nc zlP1)ana+m&0t?&I+2}Xm2h-UK6DRN1|l~=Rrci=_c)oefV zo%I*s$Gg>jIJ#EZd%^;C;;yUNvOiD)177T3==wpcc?W0w8b7&PDsHy%z0#wuB;Kx{ z7}aR>y8RZvV!~rQ1+%ht=#F$|}Xyu>HSk&q=-zHmuKGrJgc)4NH6qbqvIY zyQotCFAPQUf1BTJTan>fmD(Xh|NjcEw$E3*F66>b5!!|f5d!t*8h=&RR6aTE1FLmB{bj!?-)m=&wAG38EzI})*f2VuXi2ze>c18^(>+1l$*04IK6jq3XGI^OZEzrp=7V01i1LrP-p#8Y zp__#=yF`KrBUbD&&!Kfm2laKTpsZCR3jITS`TE&LpWIkCzubHJzuS;bcgTI${I}aUnN$YNqw+C4q*Wmy?1qMdM_{8!m9iVx5ZNKJb4|z5T8kk`#&@Jsk6i!5Fx2; z#(&x3_1&{Tw`jqxcgvUZ_4P&9ptk!=%c0YiUr)!76831dYkoiMK7m^ zjF?X!15pg4mDk6qt83~t>nqVOv|Uu%#TvavJnIe9xA$SY*i7I)`v04$_9{BLWufkc zK1H7XA8GE}4yYWR-|wx+!5q;ES&|a)lOFW zB>LM`Lwh!gH9U(>OuUEejo8e@B1DU_10C=__v|2!X>SXx1ENyrgE&CZ%{99=$GbF) zt}*2=y`l}Q(DeDT<`>Sl@Ins~Jvj70|GddK3NCq9z&rhDi1L34XOyq_9(p3kob`YD z<6+oz;9lQJbQ;DJEO*bkQr-$S44OVu_w$u#a9HzK-`((|M`1YO(1xi0XCt3BBWt@a zeTq9#xZ=VEDZY8TpY5hvbno?m)LWs4xSp@$dh7fTu!=pJ5y88?(=-1gD@?`g%)cp8_dpMxTA+P_RT>yPd0es>hG{@@cN&xpNi$Ox(b#e z^l~c&7Y?IVv#}&Q=du*VP)n(m%W@S%17&IM0t4WTTvpZqwJ(GMTWB!U`%>n|`KOPV z7#W54inIQolUU`zI+up|JALXE-gZZ&>tVLj3bjWbW>2i(4Q>Qk8x5Z2{{1>~++luU zCT`ixJ!MWYVQ*ZHFkeSEqz0qH;tgeH9g-(7L~x53jZ z{mD6`g8BradFcA*k4g()F&HS!Pi~pq(<2!xMbHkIV7J-m~pR4Rx!3jy5XKE1zCw)R;=-mz80xc!Lkua*&SEg;WwwZ>xb=ad}hH~tb zqoFX{civ!R`NIsw*zGDPs9_PM3`MJX;_!?wWqDGMXk&+8vERmZif#JMz&z2D$M3V( N=M7a^#S4ac{|7gpq9p(T delta 30415 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 WoQD5F@nq(Q=lO$AY51S>CH^1To}bqM diff --git a/package.json b/package.json index 7d03859..0a1b8f7 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^6.3.0", - "@mui/material": "^6.3.0", + "@mui/icons-material": "^6.3.1", + "@mui/material": "^6.3.1", "@mui/material-nextjs": "^6.3.1", "@mui/x-charts": "^7.23.2", - "@tailwindcss/typography": "^0.5.15", + "@tailwindcss/typography": "^0.5.16", "@vercel/speed-insights": "^1.1.0", "animate.css": "^4.1.1", "axios": "^1.7.9", @@ -37,18 +37,18 @@ "remark-rehype": "^11.1.1", "sitemap": "^8.0.0", "unified": "^11.0.5", - "zustand": "^5.0.2" + "zustand": "^5.0.3" }, "devDependencies": { - "typescript": "^5", - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", - "postcss": "^8", - "tailwindcss": "^3.4.1", - "eslint": "^9", + "typescript": "^5.7.3", + "@types/node": "^20.17.12", + "@types/react": "^19.0.4", + "@types/react-dom": "^19.0.2", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "eslint": "^9.17.0", "eslint-config-next": "15.1.3", - "@eslint/eslintrc": "^3" + "@eslint/eslintrc": "^3.2.0" }, "trustedDependencies": [ "@vercel/speed-insights" diff --git a/src/components/attachments/AttachmentItem.tsx b/src/components/attachments/AttachmentItem.tsx index a4e1530..8dbc60a 100644 --- a/src/components/attachments/AttachmentItem.tsx +++ b/src/components/attachments/AttachmentItem.tsx @@ -4,18 +4,26 @@ import { QuestionMark } from '@mui/icons-material' import { Link, Paper, Typography } from '@mui/material' import { ComponentProps } from 'react' -export function AttachmentItem({ item, ...rest }: { item: SnAttachment } & ComponentProps<'div'>) { +export function AttachmentItem({ + item, + borderRadius, + ...rest +}: { item: SnAttachment; borderRadius?: string } & ComponentProps<'div'>) { switch (item.mimetype.split('/')[0]) { case 'image': return ( - {item.alt} + {item.alt} ) case 'video': return ( - ) default: diff --git a/src/pages/attachments/index.tsx b/src/pages/attachments/index.tsx new file mode 100644 index 0000000..177d0a0 --- /dev/null +++ b/src/pages/attachments/index.tsx @@ -0,0 +1,62 @@ +import { AttachmentItem } from '@/components/attachments/AttachmentItem' +import { SnAttachment } from '@/services/attachment' +import { sni } from '@/services/network' +import { Box, ImageList, ImageListItem, Pagination, useMediaQuery, useTheme } from '@mui/material' +import { GetServerSideProps, InferGetServerSidePropsType } from 'next' +import { useRouter } from 'next/router' + +export const getServerSideProps: GetServerSideProps = async (context) => { + let page: number = parseInt(context.query.page as string) + if (isNaN(page)) page = 1 + + const countPerPage = 20 + + const { data: resp } = await sni.get<{ data: SnAttachment[]; count: number }>('/cgi/uc/attachments', { + params: { + take: countPerPage, + offset: (page - 1) * countPerPage, + }, + }) + + const attachments = resp.data + + return { props: { attachments, page, pages: Math.ceil(resp.count / countPerPage) } } +} + +export default function AttachmentsPage({ + attachments, + page, + pages, +}: InferGetServerSidePropsType) { + const router = useRouter() + const theme = useTheme() + const breakpoints = useMediaQuery(theme.breakpoints.up('md')) + + return ( + + + {attachments.map((item: SnAttachment) => ( + + + + ))} + + + + router.push('/attachments?page=' + page)} /> + + + ) +} diff --git a/src/pages/posts/index.tsx b/src/pages/posts/index.tsx index 32f3295..99d49d9 100644 --- a/src/pages/posts/index.tsx +++ b/src/pages/posts/index.tsx @@ -2,18 +2,7 @@ import { AttachmentItem } from '@/components/attachments/AttachmentItem' import { SnAttachment, listAttachment } from '@/services/attachment' import { getAttachmentUrl, sni } from '@/services/network' import { SnPost } from '@/services/post' -import { - Avatar, - Box, - Button, - Container, - Divider, - Grid2 as Grid, - Link, - Pagination, - Paper, - Typography, -} from '@mui/material' +import { Avatar, Box, Container, Divider, Grid2 as Grid, Link, Pagination, Paper, Typography } from '@mui/material' import { GetServerSideProps, InferGetServerSidePropsType } from 'next' import NextLink from 'next/link' import { useRouter } from 'next/router'