From dad388c6aba4c153e8d3f4cdc6b54320553ca6e9 Mon Sep 17 00:00:00 2001 From: reya Date: Sat, 4 Nov 2023 14:18:29 +0700 Subject: [PATCH] new parser --- package.json | 3 + pnpm-lock.yaml | 34 +++++++ public/fallback-image.jpg | Bin 0 -> 89636 bytes src/app.css | 112 +++++++++++++++++++++ src/shared/notes/child.tsx | 4 +- src/shared/notes/kinds/file.tsx | 10 +- src/shared/notes/kinds/repost.tsx | 6 +- src/shared/notes/kinds/text.tsx | 61 +++--------- src/shared/notes/kinds/unknown.tsx | 6 +- src/shared/notes/mentions/note.tsx | 14 ++- src/shared/notes/preview/image.tsx | 40 +++++--- src/shared/notes/preview/link.tsx | 10 +- src/shared/notes/preview/video.tsx | 13 +-- src/shared/notes/wrapper.tsx | 2 +- src/shared/user.tsx | 2 +- src/shared/widgets/newsfeed.tsx | 4 +- src/utils/hooks/useRichContent.tsx | 152 +++++++++++++++++++++++++++++ 17 files changed, 366 insertions(+), 107 deletions(-) create mode 100644 public/fallback-image.jpg create mode 100644 src/utils/hooks/useRichContent.tsx diff --git a/package.json b/package.json index 3a5e687e..e45dbe30 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@tiptap/react": "^2.1.12", "@tiptap/starter-kit": "^2.1.12", "@tiptap/suggestion": "^2.1.12", + "cobe": "^0.6.3", "dayjs": "^1.11.10", "destr": "^2.0.2", "framer-motion": "^10.16.4", @@ -79,7 +80,9 @@ "react-dom": "^18.2.0", "react-hook-form": "^7.47.0", "react-hotkeys-hook": "^4.4.1", + "react-medium-image-zoom": "^5.1.8", "react-router-dom": "^6.18.0", + "react-string-replace": "^1.1.1", "reactflow": "^11.9.4", "sonner": "^1.1.0", "tailwind-scrollbar": "^3.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b7a42d6..8f5eaff2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -128,6 +128,9 @@ dependencies: '@tiptap/suggestion': specifier: ^2.1.12 version: 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) + cobe: + specifier: ^0.6.3 + version: 0.6.3 dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -188,9 +191,15 @@ dependencies: react-hotkeys-hook: specifier: ^4.4.1 version: 4.4.1(react-dom@18.2.0)(react@18.2.0) + react-medium-image-zoom: + specifier: ^5.1.8 + version: 5.1.8(react-dom@18.2.0)(react@18.2.0) react-router-dom: specifier: ^6.18.0 version: 6.18.0(react-dom@18.2.0)(react@18.2.0) + react-string-replace: + specifier: ^1.1.1 + version: 1.1.1 reactflow: specifier: ^11.9.4 version: 11.9.4(@types/react@18.2.34)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0) @@ -3381,6 +3390,12 @@ packages: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} engines: {node: '>=6'} + /cobe@0.6.3: + resolution: {integrity: sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg==} + dependencies: + phenomenon: 1.6.0 + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -5153,6 +5168,10 @@ packages: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} dev: false + /phenomenon@1.6.0: + resolution: {integrity: sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A==} + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5530,6 +5549,16 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react-medium-image-zoom@5.1.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2X4oLlEopIWg7qalR1Qpy4gPrU9CTF0DvJ7HNu5u/NwdyQWupEsje2vuMbjBz7+np8MmQ4DKJ6zGr1ofCuzB3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-remove-scroll-bar@2.3.4(@types/react@18.2.34)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -5588,6 +5617,11 @@ packages: react: 18.2.0 dev: false + /react-string-replace@1.1.1: + resolution: {integrity: sha512-26TUbLzLfHQ5jO5N7y3Mx88eeKo0Ml0UjCQuX4BMfOd/JX+enQqlKpL1CZnmjeBRvQE8TR+ds9j1rqx9CxhKHQ==} + engines: {node: '>=0.12.0'} + dev: false + /react-style-singleton@2.2.1(@types/react@18.2.34)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} diff --git a/public/fallback-image.jpg b/public/fallback-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1490c0b71fe9f48f4ca61a2e4bfb6f69a59f16f8 GIT binary patch literal 89636 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%0A`sK~Q?Pzg}IV`sCGT*S| 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
    &a)IcgPMbG zj?S-@W8X&YPfDVQBH}&J#Sv7;kHyhB#X?)7_aSVgAuM0DgG+wk%n>v`WR7(@Ah=a% zWIx~*k$rS7^-bp~291AK+FP5}mCg9^$%j6sjT`EnTz5gY+q)wrZA+IioPveR`7hzU z@@YDF$#OK?jPGdbLE-g2&@pc?{)T+NtP1uhk!fK$zE85(+>SoXx8vL0N{Laz?JEzo zxt0IsIt|*fJWZ2O8T~W5KVZ7h)n?B%cv}5zVUEorXCb`2c;;H%oE*>lo(lizg^T*1 zUT~)2q-lk7q<)lse<$j4wQT&8gAd#5rgDSnfnQGy;|f2|{d%JOjNfVTVU~HvlS}Hw z3%mMl)P^bFt&lx16FoyKM2G3?f>aAQy;2QK2Iew$llSSBk?-My3%}^CFYjVUm;`y6 z2*zwd(;xYb$Gl`Ix2!6}goqzSvr3)cG16%bo_jT7w@cu&8Y>>D8yB~$L(TNAD`dZq zj^v4HXuHT=@+8ME+IzZWUkwk3ntI)>Xg0j7#F@6WxeCXIJUCQevh2tV5pkdR^M^$b zwUB*jg)|W9oxXUyXiL0;4-8Gy4jj_)pt<`+V}zCD(%!2sw&*4JWJQpQGJ^=6nllEs zjKmj|3}_E8<7rN`KiC2rWpaP$l*+>&7o#)uA4Lu55D?2m;r@8$YBYDj_Mc{%_mM|t z4I_12&tH1E#-Djq^DZJ?ig4=}UD&*qk+iJVtnfWvC(WsQFF z(pf;XxNvuVfd8S#P2TN`?Q>VA)*m(M#6Xv6^rXJn!xj`(x%(jAte9ZI55unAiL;7}hAf?+ zdDPTqF8gV}HeVf|xyh&6w5Ot1FhsM5E3ZI<0!;qE743J~Cli0+hnKe1L?c!8!$RF(+iTrIWf-6x#f9bQ^UWGKUxQql@TP88HI_p@E!gkuV&+b)86 zop2e|-I`cS1H~G{!F(_-S2p`5=fX^YfMkF`%5qYc*hTJElTX8lxI*D9my7L;>BhW78Of| z1Zm#;URE&JKygp6dTe0n$A-P#QRtf%KZkdHFK__*Yjn*Hn7r_Dzs9(99^?1)!>+Bc`S zMpA=;T-lup4XbdSuC4hMn`S_xk{J0N+f`bqty@}#Qyi<5$_AJTG9E*B@PJW8N@%B#1Kz(O!( ziE10NI^fn$z{Urkz#*Gp8jk=-Wi6#qI+(%oEO6T%Rpx(X`~qmEUlcDZ&O~e=3%s#KXP0SJHv5$Cf(_wPoM8$-^Iwd^mDYh>>yZCv8e%c)qixD zP<>+C4r*L({JowfKl`-s##eca3ooCb3C1P9Y^+ekfWV0bla`T%J6{*|tBroMb&YBY z8ZgX5f9qHEv6UtFv16D2b_x3mIQs_(B#))J2w;-5LfEnurB{`+oblYQfk)aVs7{mg zE2U(&`Fc?{*1hY`Rk~LHLz_s@$B#G`c{>%%TE2UquIoyhwn>(AYFxo6A{I|@-@!gj)L|#pKjvsGYr>f%Y6~{)vt&TQ*k*r)8e*JX2;2W!IEzA z;da);YDCM-9rpj(`JFg-?p8IjM~Lr0g2x zo;`WoP~UV|w{-nAY~fvf`k(eLwfA6#b|?zso08JmpKw+JVIEDz{De0I*5Manc)6co z=#wR4@k)9@M7*|Y&mtujwE-pr^N)PsMU-lW`9jQzV}%x6Pc^bttJ1D@yniHt7dMd5 zsvRAdf!v??kAmWZN?@@0_I&cUUu^CcGdj`!Hg3>T?mD`{w>1+FWSn%NyVPT4$yf5( z&tEE=s8LB@F4T*LJkGJoJ3SvBNH`b$$zf+Uz|G-zhLv`Nghfik4Fd>DJ2oDs$nVKD zlSS;=HRv$BVCWmC&hq{DNM~~?ZH1%6NshTq!`$PWoFZN_qY|Y}ZyIPl z=38!9E4TnxNRy1oLbV2{*@MG8G&e5>em>dM`R@ThByK2t}_=dW?^`71&q*&Bc-0+ zUAlSolj~Ex_BsV_hn>xui#C+i?9FKpTt&0RB%!h@w4>oDhvn;L<;ZkCmh!$HgU>j; zs;ze?KeO9K_46lw)F0mA?iyWxj!Hccv;d@%84VuGuBBIButQ@9JuD zL}lS$loWDJfDvEQZYimrN5X;c>C#=z8rq`V&HJjyh;7ie-T+AlIp%Od;EpaEXiEfm z;zFDQFO6J<1Zr5@3dN|iyMbOAamC36?h|oaTkVns;?n)?)D$VV20|{S*YOTs!C*}i z)M;m5!-T8Zzj!vY+PvLcN89~o5WC4g=s^4K^OKwRXY%uhX`b*!kSlP=KL%*QeQ6!#szqN37 zw(}9?U#6SKEN^podDSX4_U}y1*8e&;EsVNH?a*{)*!G0CQnCAxa9&$wT}5Jv*f}nn zkzpDjgy=CW;ut$vhI`N34ZPD{S5$LKF%I z#NY{z#WPuQP|L>C_w16;bz?7ipTsKUbfCgV)w^L6U)w$~k8r&2$>wa+u0c_BW!@lk z!(6^}WlFsdzvrd6XG}<6hVl!`K6%738d$<#Ib7Cag%_!kdh(hS$)lWOMANUd$uhn@vJxE4B zFnX}*P+OC5s{-2XLU(;oP-_0J4qdcJ+4W!QQcD-4@tK-`6=YJ=84dJUUe+W|xX>J- zMhyq2v@Kp^QotbC9X#zkVb42)#ADeldFArpy?m@8hWPCv?{Myz#CVKprJadyY^Pb2 zqWEZBmK!2#Y_`-WJ?b+boqufS2j+B3tEI#a2vv&i=Kn>Wr1)%q7kysJL#ZWSqWFrn zKW@y4H-rT=VSq_%DSh$2lhWil&0prj;Bu4i{~(X6^MA-2BO~vcvU5sPkci)YZuR&dZkcl&R4BUZ~uxXT&3ywODvWmDiK;o27_W({sde}D^&31IZO^5z zZs_+Ciw<-Q_vqu0u6it=%Re(m22sK(1yVytm-_p}M7Bdf5Ymv@4lbQ=7P@n&ZlEax2M`x8~`f~KDG zU7Hq(CW!YMN-Y>R(-Gm46R-hXMfxlCOCNtTaXoyU&U8Luz}Fu)TV=kW0^*9Z*iTCm zy;-8Ol@i(*=Pw3tH#=%ZLby)E-@I#lTfaT|qWpVez`*Pqo0+-0ol#OecW1jNCqv~) z>$5O9`QPlW+TRIL-8=NAMB00Arr^q;mmV__Avb+(ps`Nz@LpD>*j86YoBp9;Y= zNS)u)<1#UKr~ss{csQ%p&&;jEq3XcsYsr#<_)|Y)H z-b0=$s!pBvQ+()!7tBDy@M(=tVhuRtP;f(bd!~{B{$%12@y1HsMIENd@Ini2Pe^X3 zZz-R`@xY85QIpT1rH)#DPE-8=dGK3~`Zv~884x#S7qf>dbbmDG9YUv~K*0IQ$`s_rC zH~1zc4@kZ06_t>!YJE>0B{)%Z%$c4G?(U_|Ark}U2(?r+cgG7JqixZZ4Jh0n=8tG_ z5>O4@gLkNvSVMgBy46*8i4nn#=+o8yX2f4g-I!ZBMe7lcU zCc?x^wS=35Q%-33FufXQv9XN#~uH|*++9I7Gtj0{C4V!5)3J*>R~J>F9NKAc8Wo1X`| zZe|v(-ZZpB`TpwbKk_E=eAyP79$o#Dm9$#-?#OA-Yj$Gg&AxzF8g_Qr>(-omPG|KM z)T8vtnVejgCqY=x^10=@y3TxIZMRLw9JBbX<(GC!f!`Qhk~N7_z<|v_y4;HE_!uh%dKfifEtAk4l%UqvvoRZPRdPYd6f|UD8(Y zNr_um?BN`}J7Dj(>3o{zZ#Lr9bt0k~KVSQ2;564)ro3zq^X^Lqc4b)W=WLSP5qH4{ zi#tx2VeoKuT*aBzQ@euWQ}+zQxy}1M^nn3ti>pQlb-cD^Go}97BdHeXNWD(pr`5Im zf3!IhC>6m3n_y(!?>G2h14P*zyw1+E&Yu;@?YJRvT zmR=8WeH~CTJvfKtDOZ(>w&|ymC%U{UdGEIVqlF0^MO$Sw8O^bYeGTls2uMbZ@8%LB z?*7GqH=cTha2Wph^Vzrt`%4;%YxgrfMZ|Yi1K*oVUkdUlA?k3bn#RTs_lTVE_}cfdIX;}wfiC0(wSM$H+K0^FYo=m`8(#k6+|hCv3k(wLD}u(v(Lo1olpzD z@I4#5Ngi=yJYTs)C*Im7#A@_~!6sfsbZZ37v=Cxx!{1?b*Uaf^>9TQoZ2MTva%`F; zMt1M$?J5yjkdm-NfS1CDQ|+_N4@;*=1R*t);L!dPp>utY4W{O*GyM`WXP$H#DvXLv zB%rQF)P)RGcE92>_&Xd|UN3Jr_cMT?A+PtpmS*2mo(QM*2=6QMtnYh2LW1(uH%Q@H z*p+A}lVElGjb9QBMZL^BlG@S5$yOL%;Cullk^pmrIr_rXU}7mocMphKzXja~%t~tUZY7^5&D6W6C@7e}b~G-Fg09H)B=BLe9g$LH7xHjCY@e_WEF2UBLA8db4h}s$YFAfo`X%D@QIZH*oH{ zI`j^BH}d0!Q@?H?EZVhSLp98vb8nb8%Fw|!Wr-Adlu11i9Uo)6+2EIZyoKQ;i>0xn z;J41JsWBB#c6R*qQVy0^p4R{B3%38R^QLI^r&_i;$|KlNclS%ZTBXZ|i=(vJ?6{8O z4ReSv2a`|4Wg#{9WDkeUt)(lQ-zoCm$wcsm()Ca{fAgoxGXCOeTkrL2TSQy#QJfR| z7w$ zrs=vPHWlqhD{(H~D>09D$K@*eH?8Ng6Xg3lGQLsB!-Ri_Uc12rzcOF(^B^dVy`Y?{ z82={b4f5-q_XoQ|L>KDI^r#19rNKO2xp7QtOcjuPNlzh(q##yNBd6#rffmVKMf5&9 zH$rZI$W*kk#Z!GK!3`+0N*VhD$z$ph3rfYx)%$4^O<`{)S`m#TaE`3o$%lk4CN_X1 z`XS}WJqggE2IJ2s^IQ?tI-uY!tMFnQ*awR5io^o+sX|HFC;|S=k z0bF;9e1#%!N8@NorQFe1CjyVesdQ;*UOg_!gU(Uyj+LWibh96J27kvoXxM$YHe6U?l>1oGU6A z#~CAAJeH=bg`)R^;V?o7S=iM9mE1PzCbe=){?PK%R~Z(*L~F^A(Q_|L4zl4U4}nc0 zQVt)>0&#wXzq^^2(Y)t>6z)t>zMT+{t86npiP&q<4Q|;_w*~AjS={Qi5s&*sccZaW z^_jEEFVU3uM5nytj$zz>y$-LYf&HDi_ao}6r3)9?S`9Qlm?D)&OgbEe3Li}<%KD)2 zWhpCq=G?HtoJq8MIi5#yns`G>|Y(aRHjlSXwqDs8ooQojzWUU`xjP;-sv&dcoa zuGpm$UdM^^)OO{1C}}-{Hul+1!vKPClO5yFfOl)l^A}uAiFB^-irAR64=}QFNj}TctN^r;gYv(V52O-2=b)w0i4{U+RQ!>ey+GK)3vd zOP{1KSZhwVp6r(l5EtbXWxPG2OWk&RXS75h{*z6HSwi{UlUaig^vxKU;QE~3&0?9y zstY7tA}F+jh6b3^E-N;g+Fu5>pmDusF$ECT4E|*PVPrOC|xEuNXrSNhB|ER8+%U>@>tVLYAIF{EQm}{I5|M znXX)QoT3p*|7i2vXuzL0n<4btU|i*GH%~n-#F-|e$&-X!qjFJu!anI6xAullA7#~ z|AsP?kLn|fz=M6}7}Pw3benKW8J&t65{yMAJm}+=K~RO4I$Nu4s6Ke~=hVlnrJ`dB zrM~*5?n(==E`t)<4JIn{-8`K~0aNC)M zn%lB89aS)B9|rCT#qLO6{Vty(EzZqh;$R&YH|{SZOH<=g`mbL=D}=8Vw1jD zfN-Z8l+#zuJdYO!rG}&+M9NetLtefF7_eQL(W#82PiS+iYF882w29|mCF}#(_?cJn z)rsTSDMrT-!2mz|2X$3^k@@7eQLc7`B&%zjwUEub<2h04kDLN!hjIT~k1&EqQ~Vs+ zI;~uV&)n5NXWxlWZ>ek|o!cMoBFkX7E>47k{S5bpMXU{-b#(-V$XR-3+LpeAmeJ!; zCnq8+I|YCpJ?BU5Hkz*9&N51TIl5ASPS+9Auz9DRHL7T?rLz0B zK4k{II0WFckjO5%kNb13S_F3H77+SO1RwkR-s&5_)X&xD?jIyq9jLGV28Mp{sLWNl zhMO&TgZEwD%BN4;_&`~d)RTz!U-x$*>Xk=7B;>Quphs7`Lx+ zFLh}XgKYJJS?USoH(XuQg}G~t$xIh810F&T?s3WCmQDaVNq*K-4b7EgwsW8ZU$o!; zr4|1GO8U@3s@y#^V~?&OJydTkuEtFuAcAUcP}W!W8z&z%BpcC4?Ck)an6OQ`h9&Z5 zwVVEsvH`3o(7*wSm}(WDW)J^JY}k_BFZv_Hk_1xjfQ@$bd{ZB|h*jUw&McsRb^7d^ zZ1p+vwQKN6nez=S8;8%-2iJ1;WvuYz_2kV|Zd3!1#S~Xd(ufBAMN9I1ot%{`H;#-n zbz$_%T_s=InyKdl5au-|Um%~X!IE1JCcjp0oM72_9g7y8>He4o-9j8-TU6%SVHWqa zgGPge?kM3XeuKWcDeA|2UT%ei-2D{+-XQco(XQWJ%6@&WbMYmI110bKJbYCN)f#4(orUi$mNUR9oB~R;1ZveHp>Z)7=%%O& zZvWCg#XoedPP`r_qq2rZR2Fzce~O_XcU;*w>d=*(yE}ttWGs@+qftiUt34d*n0!L> zjo2$mldL2#&z!mzm2{DJ7e6?WWYoJdC5lB4CPV?s`A2_%a6V#J@V9_UU@d#_=wf z*7Y9)qd$~z`SFRJ32`WvWL?hyP1rBZDcyVC$k!LztjKof>W1bN?#{qqov=llf+m^W z?>gKVa>Kg8(~UbfG-MtqVIoCAh1LeH4$_bZh`(&=SUKyWTwU^*HP4BOCRZc@Jk zvY|~=f+h6}86LljVs+t~kU4S4Y(lbw>19?NZ6Z>Cn3`-MrWe;Lwu~1}m^!!K%j`G%1SSQV{QH-)7&kZO^03poV@#R)rH z$r0y&)G8H#k;k3vTU0vbf{@|v_U|&AC5sZeQMR>X=HyLjp*Z!Srl(Z zCUff&zH86PkqoHtt~$3ht-c}dSvqPNA<_#Un^tX#oMjm6M#YKc?*9CFYP0}@bi9OX z0sV4}&=NS)!Qgop?xf*bBOzDzgfKL$M%4|v(U9ei^%s+`=46>tJUU8-#qObTul;tr ze=KCaWtE-1i7x9u3PW`}AQf(oU1-xGYjOzR$H*}TrvO}ELK}*~2@(4P!F^jpcIo7| zftsFf!b`^U#%`iC?!vtdvkb{3^f77d7h(U@Dkxf;Q5dRB`8w#r5)#iIIm$IUgF#mw zdg{#b;Dze|b%p?&JjlaQ-LE`4aZm4HATn+2LbTCciMxY%=q5B`Mh+k+C;J)@HEb?6 zh#O{U&Q!*t;9yY{89}G+e67rhyWk}TH;m(jz(@9zdtDcDk@^o3iu3ZQe(B!}GOmZr z-Us?0C~<>}MjKTK9?}PUfD=;7LO45x@#V6q)=+xX6lD@Mg$Mku|Bq+v!X8I1s zF^|c<4O_vbaQ<*xw>+U_GuV_@`f1!7-K+Hv9&1|r5TO!j(~+8W_vp3e82aZgVVe{| zW-Nqvs?r z^+H5x30Zo}(c|6!C@!-pDqV`KzYNiLa}kVGhUee~3Nj1W<6?9RE~`uW2GM=^5^=j^ zn$Gxut8D^1g|AZnAHkTfZUBmgDMeLv$`Z8%8j6fZRQch^Ij~_@3Tf8N>d7qI&$&cf zVA}`e)1dt%8KNUZjv-Gy{yYR1BA6j=bVei}^D+cTsv|leH0{PS3(ky0DmS!E6yvy{ zcRh?dM7z8 zmqQwldUt{7#=kC8$dUyzKOV&oP;zw@;|?U-wIjo|zy8zdBY9*?G5#N?l0Hbtm3Pu# zaZ6(9l;EsozFN+h7SbwPy#9$Xe-k-(X3e_LOveBta;uxmd`~gDH}dD{1LKMBA+=;L z^E(yv)4F!sUJ-nF>UqoYzG!sZkQn)~CIr0RYy%@8om3am;OOtJzkGSv2oOfJ^VcAu3q+qrZf3dUTqyWyt7+#Bx#t7oA}`ECgVgxHu-7& z%rnpbnU?f81RI%zt8h)$JVz&Jc_mN+Ht}AOBd$N-6#70eK>6+4rR&;(KsJGC_9&Ss z&f}Me3H+?nBdB2N*&%f91}WHN%;S-$O5S50!~s_n0YFKOZ1X1Pr0Le4!;75;QO-K7 zk z*L@SLmVfnR$KORJLMRa+dp+Olu0Mzz6Yv^ekHN}uP#rUSfVA7{ll$oPMN?+u%Xw7A zZVn)1!K)?Qo-yM@&rEF_DhKbUEcz&_V9rB$*w89vUOZp$49&E=W;RK-UTDGA%6+7N ztv-3YZdmw{Sgm*4&C-7R>*R`TDFs==c&R2kJ~x0$-{0j;kPn|F%0AtTtt{lc5 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 d19A`3diubPy@d*eB!K literal 0 HcmV?d00001 diff --git a/src/app.css b/src/app.css index a22f5396..a9a0e5fc 100644 --- a/src/app.css +++ b/src/app.css @@ -64,3 +64,115 @@ input::-ms-clear { .ProseMirror img.ProseMirror-selectednode { @apply outline-blue-500; } + +[data-rmiz] { + position: relative; +} + +[data-rmiz-ghost] { + position: absolute; + pointer-events: none; +} + +[data-rmiz-btn-zoom], +[data-rmiz-btn-unzoom] { + background-color: rgba(0, 0, 0, 0.7); + border-radius: 50%; + border: none; + box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); + color: #fff; + height: 40px; + margin: 0; + outline-offset: 2px; + padding: 9px; + touch-action: manipulation; + width: 40px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +[data-rmiz-btn-zoom]:not(:focus):not(:active) { + position: absolute; + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + pointer-events: none; + white-space: nowrap; + width: 1px; +} + +[data-rmiz-btn-zoom] { + position: absolute; + inset: 10px 10px auto auto; + cursor: zoom-in; +} + +[data-rmiz-btn-unzoom] { + position: absolute; + inset: 20px 20px auto auto; + cursor: zoom-out; + z-index: 1; +} + +[data-rmiz-content="found"] img, +[data-rmiz-content="found"] svg, +[data-rmiz-content="found"] [role="img"], +[data-rmiz-content="found"] [data-zoom] { + cursor: zoom-in; +} + +[data-rmiz-modal]::backdrop { + display: none; +} + +[data-rmiz-modal][open] { + position: fixed; + width: 100vw; + width: 100dvw; + height: 100vh; + height: 100dvh; + max-width: none; + max-height: none; + margin: 0; + padding: 0; + border: 0; + background: transparent; + overflow: hidden; +} + +[data-rmiz-modal-overlay] { + position: absolute; + inset: 0; + transition: background-color 0.3s; +} + +[data-rmiz-modal-overlay="hidden"] { + background-color: rgba(255, 255, 255, 0); +} + +[data-rmiz-modal-overlay="visible"] { + background-color: rgba(255, 255, 255, 1); +} + +[data-rmiz-modal-content] { + position: relative; + width: 100%; + height: 100%; +} + +[data-rmiz-modal-img] { + position: absolute; + cursor: zoom-out; + image-rendering: high-quality; + transform-origin: top left; + transition: transform 0.3s; +} + +@media (prefers-reduced-motion: reduce) { + [data-rmiz-modal-overlay], + [data-rmiz-modal-img] { + transition-duration: 0.01ms !important; + } +} diff --git a/src/shared/notes/child.tsx b/src/shared/notes/child.tsx index 7f5fffe5..d9d0a547 100644 --- a/src/shared/notes/child.tsx +++ b/src/shared/notes/child.tsx @@ -60,7 +60,7 @@ export function ChildNote({ id, root }: { id: string; root?: string }) { Lume cannot find this post with your current relay set, but you can view it via njump.me - + @@ -75,7 +75,7 @@ export function ChildNote({ id, root }: { id: string; root?: string }) {
    -
    +
    {renderKind(data)}
    diff --git a/src/shared/notes/kinds/file.tsx b/src/shared/notes/kinds/file.tsx index e18740db..380f2446 100644 --- a/src/shared/notes/kinds/file.tsx +++ b/src/shared/notes/kinds/file.tsx @@ -52,13 +52,7 @@ export function FileNote(props: { event?: NDKEvent }) { key={url} className="mt-2 aspect-video w-full overflow-hidden rounded-lg" > -
    @@ -122,7 +122,7 @@ export function Repost({ event }: { event: NDKEvent }) {
    -
    +
    {renderKind(data)}
    diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx index f8e8b211..9052999b 100644 --- a/src/shared/notes/kinds/text.tsx +++ b/src/shared/notes/kinds/text.tsx @@ -1,67 +1,28 @@ -import Markdown from 'markdown-to-jsx'; import { memo } from 'react'; -import { - Boost, - Hashtag, - ImagePreview, - Invoice, - LinkPreview, - MentionNote, - MentionUser, - VideoPreview, -} from '@shared/notes'; +import { ImagePreview, LinkPreview, VideoPreview } from '@shared/notes'; -import { parser } from '@utils/parser'; +import { useRichContent } from '@utils/hooks/useRichContent'; export function TextNote(props: { content?: string; truncate?: boolean }) { - const richContent = parser(props.content); + const { parsedContent, images, videos, linkPreview } = useRichContent(props.content); if (props.truncate) { return ( -
    +
    {props.content}
    ); } return ( -
    - str, - forceBlock: true, - enforceAtxHeadings: true, - }} - className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert prose-headings:mb-1 prose-headings:mt-3 prose-p:mb-0 prose-p:mt-0 prose-p:last:mb-1 prose-a:font-normal prose-a:text-blue-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-blue-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2 hover:prose-a:text-blue-600 prose-a:hover:underline" - > - {richContent.parsed} - - {richContent.images.length ? : null} - {richContent.videos.length ? : null} - {richContent.links.length ? : null} - {richContent.notes.map((note: string) => ( - - ))} +
    +
    + {parsedContent} +
    + {images.length ? : null} + {videos.length ? : null} + {linkPreview ? : null}
    ); } diff --git a/src/shared/notes/kinds/unknown.tsx b/src/shared/notes/kinds/unknown.tsx index eaa0e0e1..452058d5 100644 --- a/src/shared/notes/kinds/unknown.tsx +++ b/src/shared/notes/kinds/unknown.tsx @@ -2,8 +2,8 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; export function UnknownNote(props: { event?: NDKEvent }) { return ( -
    -
    +
    +
    Kind: {props.event.kind} @@ -12,7 +12,7 @@ export function UnknownNote(props: { event?: NDKEvent }) {

    -

    {props.event.content.toString()}

    + {props.event.content.toString()}
    ); diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx index de2dadfc..24e1dc53 100644 --- a/src/shared/notes/mentions/note.tsx +++ b/src/shared/notes/mentions/note.tsx @@ -49,7 +49,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { if (status === 'pending') { return ( -
    +
    ); @@ -58,17 +58,15 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { if (status === 'error') { const noteLink = `https://njump.me/${nip19.noteEncode(id)}`; return ( -
    +
    -
    - lume -
    -
    +
    +
    Lume (System)
    - +
    ); @@ -79,7 +77,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
    openThread(e, id)} - className="w-full cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800" + className="my-2 w-full cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800" >
    {renderKind(data)}
    diff --git a/src/shared/notes/preview/image.tsx b/src/shared/notes/preview/image.tsx index cfc7f42c..5b2c33e3 100644 --- a/src/shared/notes/preview/image.tsx +++ b/src/shared/notes/preview/image.tsx @@ -1,5 +1,7 @@ import { downloadDir } from '@tauri-apps/api/path'; import { download } from '@tauri-apps/plugin-upload'; +import { SyntheticEvent } from 'react'; +import Zoom from 'react-medium-image-zoom'; import { DownloadIcon } from '@shared/icons'; @@ -10,23 +12,33 @@ export function ImagePreview({ urls }: { urls: string[] }) { return await download(url, downloadDirPath + `/${filename}`); }; + const fallback = (event: SyntheticEvent) => { + event.currentTarget.src = '/fallback-image.jpg'; + }; + return (
    {urls.map((url) => ( -
    - {url} - -
    + +
    + {url} + +
    +
    ))}
    ); diff --git a/src/shared/notes/preview/link.tsx b/src/shared/notes/preview/link.tsx index 83fb4aff..a0fe3f4c 100644 --- a/src/shared/notes/preview/link.tsx +++ b/src/shared/notes/preview/link.tsx @@ -6,9 +6,9 @@ function isImage(url: string) { return /^https?:\/\/.+\.(jpg|jpeg|png|webp|avif)$/.test(url); } -export function LinkPreview({ urls }: { urls: string[] }) { - const { status, data } = useOpenGraph(urls[0]); - const domain = new URL(urls[0]); +export function LinkPreview({ url }: { url: string }) { + const domain = new URL(url); + const { status, data } = useOpenGraph(url); if (status === 'pending') { return ( @@ -27,7 +27,7 @@ export function LinkPreview({ urls }: { urls: string[] }) { return ( ) : null} diff --git a/src/shared/notes/preview/video.tsx b/src/shared/notes/preview/video.tsx index 4b5f61ac..1432f00d 100644 --- a/src/shared/notes/preview/video.tsx +++ b/src/shared/notes/preview/video.tsx @@ -7,20 +7,13 @@ import { MediaTimeRange, MediaVolumeRange, } from 'media-chrome/dist/react'; -import { memo } from 'react'; -export const VideoPreview = memo(function VideoPreview({ urls }: { urls: string[] }) { +export function VideoPreview({ urls }: { urls: string[] }) { return (
    {urls.map((url) => ( -
    ); -}); +} diff --git a/src/shared/notes/wrapper.tsx b/src/shared/notes/wrapper.tsx index 464e4eb3..6b3fc0af 100644 --- a/src/shared/notes/wrapper.tsx +++ b/src/shared/notes/wrapper.tsx @@ -29,7 +29,7 @@ export function NoteWrapper({
    -
    +
    {cloneElement( children, event.kind === 1 ? { content: event.content } : { event: event } diff --git a/src/shared/user.tsx b/src/shared/user.tsx index 687e3a37..46dd6adb 100644 --- a/src/shared/user.tsx +++ b/src/shared/user.tsx @@ -54,7 +54,7 @@ export const User = memo(function User({ } return ( -
    +
    diff --git a/src/utils/hooks/useRichContent.tsx b/src/utils/hooks/useRichContent.tsx new file mode 100644 index 00000000..0c7e2e79 --- /dev/null +++ b/src/utils/hooks/useRichContent.tsx @@ -0,0 +1,152 @@ +import { nip19 } from 'nostr-tools'; +import { ReactNode } from 'react'; +import { Link } from 'react-router-dom'; +import reactStringReplace from 'react-string-replace'; + +import { Hashtag, MentionNote, MentionUser } from '@shared/notes'; + +const NOSTR_MENTIONS = [ + '@npub1', + 'nostr:npub1', + 'nostr:nprofile1', + 'nostr:naddr1', + 'npub1', + 'nprofile1', + 'naddr1', +]; + +const NOSTR_EVENTS = ['nostr:note1', 'note1', 'nostr:nevent1', 'nevent1']; + +// const BITCOINS = ['lnbc', 'bc1p', 'bc1q']; + +const IMAGES = ['.jpg', '.jpeg', '.gif', '.png', '.webp', '.avif', '.tiff']; + +const VIDEOS = [ + '.mp4', + '.mov', + '.webm', + '.wmv', + '.flv', + '.mts', + '.avi', + '.ogv', + '.mkv', + '.mp3', + '.m3u8', +]; + +export function useRichContent(content: string) { + let parsedContent: string | ReactNode[] = content; + let linkPreview: string; + + const text = content; + const words = text.split(/(\s+)/); + + const images = words + .filter((word) => IMAGES.some((el) => word.endsWith(el))) + .map((item: string) => item); + + const videos = words + .filter((word) => VIDEOS.some((el) => word.endsWith(el))) + .map((item: string) => item); + + const hashtags = words.filter((word) => word.startsWith('#')); + const events = words.filter((word) => NOSTR_EVENTS.some((el) => word.startsWith(el))); + + const mentions = words.filter((word) => + NOSTR_MENTIONS.some((el) => word.startsWith(el)) + ); + + try { + if (images.length) { + images.forEach((image) => { + // @ts-expect-error, it is string at this time + parsedContent = parsedContent.replace(image, ''); + }); + } + + if (videos.length) { + videos.forEach((video) => { + // @ts-expect-error, it is string at this time + parsedContent = parsedContent.replace(video, ''); + }); + } + + if (hashtags.length) { + hashtags.forEach((hashtag) => { + parsedContent = reactStringReplace(parsedContent, hashtag, (match, i) => ( + + )); + }); + } + + if (events.length) { + events.forEach((event) => { + const address = event.replace('nostr:', ''); + const decoded = nip19.decode(address); + + if (decoded.type === 'note') { + parsedContent = reactStringReplace(parsedContent, event, (match, i) => ( + + )); + } + + if (decoded.type === 'nevent') { + parsedContent = reactStringReplace(parsedContent, event, (match, i) => ( + + )); + } + }); + } + + if (mentions.length) { + mentions.forEach((mention) => { + const address = mention.replace('nostr:', '').replace('@', ''); + const decoded = nip19.decode(address); + + if (decoded.type === 'npub') { + parsedContent = reactStringReplace(parsedContent, mention, (match, i) => ( + + )); + } + + if (decoded.type === 'nprofile' || decoded.type === 'naddr') { + parsedContent = reactStringReplace(parsedContent, mention, (match, i) => ( + + )); + } + }); + } + + parsedContent = reactStringReplace(parsedContent, /(https?:\/\/\S+)/g, (match, i) => { + if (!linkPreview) { + linkPreview = match; + if (content.length < 500) return null; + } + + const url = new URL(match); + url.search = ''; + + return ( + + {url.toString()} + + ); + }); + + if (typeof parsedContent[0] === 'string') { + parsedContent[0] = parsedContent[0].trim(); + } + + return { parsedContent, images, videos, linkPreview }; + } catch (e) { + console.warn('[parser] parse failed: ', e); + return { parsedContent, images, videos, linkPreview }; + } +}