From 7dd06e176eafdd1e7596e7bfcd9af2b8588335dc Mon Sep 17 00:00:00 2001 From: G-R3 Date: Mon, 17 Aug 2026 17:16:38 -0400 Subject: [PATCH] fix(web): prevent numbered list markers from being clipped --- .github/pr-assets/list-marker-gutter-after.png | Bin 0 -> 22801 bytes .../pr-assets/list-marker-gutter-before.png | Bin 0 -> 22836 bytes apps/web/src/components/ChatMarkdown.test.tsx | 10 +++++----- apps/web/src/components/ChatMarkdown.tsx | 13 +++++-------- .../components/chat/MessagesTimeline.test.tsx | 17 +++++++++++++++++ apps/web/src/index.css | 6 +++--- 6 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 .github/pr-assets/list-marker-gutter-after.png create mode 100644 .github/pr-assets/list-marker-gutter-before.png diff --git a/.github/pr-assets/list-marker-gutter-after.png b/.github/pr-assets/list-marker-gutter-after.png new file mode 100644 index 0000000000000000000000000000000000000000..6e4f5480ebf60eddbadbbbfec94c6f9ab87725e7 GIT binary patch literal 22801 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 z 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 literal 0 HcmV?d00001 diff --git a/.github/pr-assets/list-marker-gutter-before.png b/.github/pr-assets/list-marker-gutter-before.png new file mode 100644 index 0000000000000000000000000000000000000000..3dec5a8ad21aa87d3b0752a2f536787566dfb36d GIT binary patch literal 22836 zcmeFYbxjXdpNw5ZnVH!7aGEyE`NhBte2Z0fM_bB)Gdf1PShL@8@K{ zyZgJlx8Ax{??3m}U8)WY=gfT0Oiy<|{XE?hA}{+69fcSL1_lOQ;=Pz63=FIacs)Q6 z!8_e6FTig!8FNulc?nTb3V8=x6LTwL7?}4Vv8qUFO1%VWnu?SN5HVrNKQdU~aD*ix z%xB>g43x-Nl3$TUI>VV7KUxxE7yV&)J35IU+4;GFlb~~n5S5{?p^n96Lk9A_zvZO) zx~2ZI^)cmoE5&hZDG}ChsWV>EQ9%agg!;N-M$dO@eI1Wrn@AXj$PC`m@A!!WJuNTq zv!85UkDl({=o;+~vm*KD!xxVlRRL7>Ffi1_Yfc$jkx0jKFe}Ay`Ap<6nRq9gl_%Mf zO#}v{L{3<1#56-6R#j+ZRad`!;yfC1=n3F;ddh4U1?j{I zzNfh8?N6o*aKrB496=11P~E80sJk$KP(EUPY1QScv769Yj$JJx7$unP~QrV~CrW#aLUXYm`%;>cpurzmin&yhz68 z<3FfIBZ_D55ZdTR^p@Z8RavLD`*4%s5*N(%BZ7y(q?1-eI*|LjaLQBUa>R~rCn$=VtYfvrq~nuk_TgW= z|4DvE-u3Z3ggPZapY)rT!<8M=8wKI-3@#~5QPdszZd!6lhvbDjU*;tovx4^QeHCoV zqPRYB>*!!{E!0ww%gV+I>QD_vgsWbMsG6LLW+^|c+zNBAe1!Q4hoUzA3oR18gS1(u z`AA|C2jNN>k0EFz}40CV}P`N+=g{L>_n>2I=jd#`d@{ufR-WLPCQ4G^x}FJFwZn!dtl z%L|#&32p0cA=Q3NDyb7XK%dND8|py!gFk@lUR`OiGg9qw2)a`-3FMHxwZ-;2|NME6 zP8KhQ?ep5Za-v10cG-4kvA2o4rKedZ9NyH+3*X{Ke>=AJwO}o^i)$Jz>m!wo&)DxV zO@(s661d=5cFmQyOY*b*CPN>pTOBn(y6^Sp&Dt7>=PDfdv5>!%-@Tnxz^wb4Pxtzj zgX#ONo{mKIYbFe>S7J>m-z1Gl z6u;aBKYJ7Y-1M95`U?m0ZIK7DrL3m~;XB{O^YD4ejI*A-MhknFo0<4Wx(bU~JU$EG zjH7|XS}Y=KYqZde@aEZmH%!jwSFe-?U=0nmm{6pCvAra!fnn_IE4L_uwe&x{W}6B; zH#oGT8v3bT2cPnb(hZK~r|BB%k+B<%&L^%l+T;E!?F?NR$QKB5a1k#PBP9~v z(ox3Xy5L~o$o{g;Pd-X|Pt6uGCFXj?`~tT!#4)5lI62req&qmZBdEg%C*+4*1+9B@ z=6f$i!Tf+K|EgrC7^jd484oFy=gE<&y&~&)6#-geEVR?#A|hG8rAG?Mzow7Flas`I z`#w=rU1V0oJVWcdlaio(b>7qmTMK@UbG!iSST%rwj$IIfdWUl+c{G}oEln>H|$ z83`Th8`sED&UIGV&F7Sum*kVz%+oGv*1iq65Jl{IX=+CV*M-xC(M2y_i=oi15tJKU ztdvvvE>|>HPE~XIEti68jZN%<{vykZt}26*g!%#ef%^f=flI@$U3Oi;T}-6oFE_^$ zxI7Hc@6NjLYN864}` z8lIYDE7rLTml79s7iAa1Jq1rL&+_{hw?p;;_GG`Qe;0IXyUM$+aN}`L@GZC+@qXqb z;Nj$Hd20Jg(D<(4IJeu^#lgAHd2ZFo^W#Op2=ZH8jTd*@R$EMVB@QiY-#A~Ht+j;= z;_5ccGzM#NHZIs1*NNBp?9Of8^bRh{Y)-9A{kB<6+iV%V=hX}%9n|R({4H{HbgA}d zbmw?ze2{(Fv2}}F2SbNP$5}^?R$UH9X71H?Mr|V3vS+euJZ3-bplP98d}%)Ga_!uu ze|mlTh;8mNZa6b-a%J*q+j6h&rtioj`gAm3x+fD1Dg=WL{SRaULmE&N5^|?hosyy@zjCrk_LT4F%R_qN>ei1vd%Kh63v{G z9y@#arnyAY{i!Z)yxzRNH~z2RXeerE&%N`(YfV~CACg*5SfX7)nL?JN!CHB*)&&K5cYibZruAdLCN8CVAYy7rDngYwM8d;Ie_X{$k@`@cCBu25FR; zlmj)b>C@o^fh;8pR_1RmgJ&uAHYVvz(ltuqJ-L0!r_L+lt=jroSK{`qKXbnqtn3$c zs3VzJ4#o}Gq#JUXZl}-&iUbM`bZ((+)(oUgN^Hey> zOzNEIN46`c$FM7`PiLs~E09&c$E=M*akIb)V`zY$RMGFmZP z9epqyGi>f=j}Wp-UUIqZSjSbB?Mm6>#&_8nU=?Xi;U47iKKpu^I8~WuikWJdZpnM- z(o()yeZNv#(n_{xw`jQIp(;wL!E_$wT$j=31cLbFy{zp{BOKc=zbu?{*(^jcmb(&h6^% z+udmQ!CH4!_lBHw+JvC9&)gjDgyZpSjOpTV_OQ@d++E4}Z5JUYtItjQVZ=pCulFLW zF)Px8)`jHbWJ#;mgT-#dLF*;&;du~Ow(a@yRFh#V-@V}WeKcmJV3eSWSH=Cr3D4eX zs(+I|EWK_Q`2vcbuzOW6%*wDf%t#ch-cQHp&Y?SA+-g{pi7r_Fj{(Z2J-^^wS1usEZlKya?<2D06Ibw?N&0vhNGRzi{b z2&_M4{z1)2O-7p6(AJto-^kX$n8nT74!RBuzZ);uv^I9qr*N~jvT@{f6QKIL2QS!$ zzRgNS@pl&|O93i18F>m(TL)tbPL`J}FR27kC@3iS9gIwP6~)B=IUM{aKxO9SWXH?O z>gwvs;>ylq>tM?Iiid}X^(7lC8yhp&gW1vD#!26e*~antzb*3b>xdaU8akNUIhotq zP(at!H?Vbf5}=}je$jvY{M&gNyP5yzH`zG;b6Ma5S)re>zG8XF`X6h9L;0ca^2(dL z8C$7~nOg&!f$tFHc=eM1@BaVolmGn2e>qa^KaXU8&GxTH{>vx-^+;t$V+T=NYw(p$ zg8zBD{yF$xKm6xFepcv}|BEI5&CGw_1$Guh;b;AidnSm&IpdTGZsRj^F}V-mFL1KI zKab!y9e6?if)_^hVE0my%kWeuyD@L$sNP^@KKaZ+7xi73QXY!} zw#eWevJ}1eFO)CB)J&A}Z^S6{b#d`J@g&9GFfd8Jmt-RN#!>X793{3{81fbtaTd<& z;qbEgvYE?vN!m5X^rks&xj5k9<;;K^QLU3r94uiT8 z;IQ6f`XgbIsVxoP-(E6rMUzD&=5tsEDz~W@e8^vrGqL;q1P<#+a%HL6Gw$@;6+v#4 zbDKtklll0&W+fB^3VD7=9^vhFZhC{9ecf6Smdd%TBZBfWJ(i#FG4=N}%kZBB8#-3& zfz{H9Y&n=AL`bsqhd~&7C%o#<=X&sC*nc?bIZe?{s^o|5>>DqXmqEe^ki1I<`^i@Q_#Q~1 z&V7F@BO#~UohS?(C2pPft;?Sb|M!qW@w-W-Y;f1Guwc)%@W~*Bc%J%iKeT%|9ijSX z%1}t#Gf%aJ<`L{8B^Q1YoiE#^V|0w^za~QQHNmnRPbKUoo>jNSt%^Yv z85R;CyE0X*Ni;}67uUw1K$FdIW*Up?CtObX9giu*GDor;S0(C^{oHH?32u}svR4A3 zQ&KIYP<&Tp%Z4J-94;}mmVi;81|f308_O4J73n~P(6F)!N#!asy8}cxee9l&0=3RJ zYSo`D0#WeWERgQrz`$WYw>#aGxr~0f-B4^mS#+i{K6y8R>c2-Fd7xui4y>=Del5iJ z2vcVX`SHom$6L60$|;tLwMbf1Ms-|?6`>+om^ZhPz+ImPm!gr}=YR}un<{b$&7X?7 z2u&k<_gkh8L|7PMj3Ze2M_}wr7)&7qibz?wZ4@LtbNxwHII|jja0~r}c_Dw^K{!Yl z|0w;~*7H={gw;D_QAr2WVQ>iWhj470y~+CzjXAaL7He==0G^>z4B zkP+?p!5~CozwZ|Fr(!HB!i?OrU*Sfez(VkMDk6~wD}5;ZXQw7C2=4}p{`nhH60pb^ z0@f7ONRvjpFnOm59n>#r{mMR1d`2hXtO8CwA1x=iEtq8CdG<$v&tW~d`SIbl#&)^o ztIllCx98SB{a{s!H8?ECen@Cc#|``mTSbGT#1d8$^#jMcCJT7FWC&qqIfbd}dQbXX z_v@Oh@4POn^?mdy{E#1Y%4IP@r`hV`E$;Oj0ZxJ1ugs)Qx%Kh>a9+;$MrrH3BLw%N zi^R50r@&`!HH0>;?9ltrbE?VR(benvWP{UrXQE11e>hFRdNlKGy$?7m8+as)fyGT! z1d5din6{k=RmrIx?1RO|X)=#LlzdKqBE2sgm#cjrZKZ9X01vv0078*Q5^QvV&^eAI?oW3$*$=OVIKq>%M_f2n!C>b*<^nSj;9-L*=o zjzF@YcLTF#4HJZL0@lCiIk@PuUdmb-a*GG0T-rt#H|&OI$0&x&PfAp$Y!~XeUC7)x!%1u|!O6vY0HesnTV% zHn-c^5_)vkI@E4(D$kaRZ!jeOqnIPy(6>35TrBblvBqxoO){5l+GL3~xZ?TE1?T;_ zNn?f|{aoj7C<=gEpw$*3mb~_JKHpLHe7N4S2By9)5iVV|ZMn`7xR^1lao$z&JgDC~ zA;omavj5#xWB*%RHQS(`SXybeO#hQqec!}NqGO*g1r{YZv(F?-&ae zFaSSpz&$-o@$<6Rid*mZZDn>ly5dH&-pw~2wvaUPjaY{?yr87x$L5n)ZuW4Vjvl&B z_iKBC2NC|s2OBWSS18QHs9IuG+H?|1;;(8E+Xw8THT)r8mO+Db3wT|0zpH@jLCQSg znJ=%)o|(sFJZrX!cAXt%`WN5`>bq0L+If0cN2}N2<*=|2>KA@xFE(-iD9C6k59J|9 z;lh~=rEHsUOQ|3p%8F%M+xhM^>P#7k^k6v{{jgygX3rpW5)<4P(ss=q5BIl?ccX6MJJY3yh>_GK zz+ipKk#Cz#Wb_A-MfVo!D}~Q1Mpxqcen>}2`Y%r}U;QP?zsVrx-dzp|^D4WbVcxsM>@yrgj%S{kg6k@~!8^G}i^XKxz1=sk; z`PQ4s(mhk5TlF`??$dZ9g;(9=z9}P1!yditXCIPjt?^Q`I0G>I$NY z4YI3P&sFfF9#X7HRhXr1gc^;buZjx690h+eT%~M90KR-S})p{yCi)=ktWk0Q>wzwArgYXb9 zT+zzdnsQ|xhtM&hdDl+=57SSVXggBfTo3ySn#OBZ$f5pt#_#shHN7QZfw$$fF~!^{Cd+(gper)Zhr;`t#pE3`)72< ziPPCiQ|q%oqfnfGWBrl;yUr;{K*fsLk|lErS>m%d=ewVrM6|Jb7@%oA`F0~-wJJz~kMi3dqHc-nTUZ_h;iSz#;z?w-J5QGs4g@FDfa?I=*YoRb8_hrB0BL5-(izs`t8D&6*$=( z)ibB~e=u7{U_+zYVz$}yvgjYsc52M=frv%@1#RsXuX^XbnbA(UWKL^~TARht-Db<_ z5@>;uuvXISab6)Bgwa`zYG4{h%wctTu&7dDB(Xc16*QPGw7fG}XgZ!NS8LoK_hj`W zFGZyD-?VfMiX53YIZHc^!vd;#TYa&N^Q-MasWbVPye0z)Z>*IBUK;gaC3D+nrt&)X z%~e~PhL-j%AOG$yR?3ylR~f#>>XC$+FsWHA1jl8q1DQ4sm5`;%{dAM&%56hI$zr<18bGz>bddR6>Ce~MXQ7h| zHpvfzbFGFJQ}x}u)1|r;1j(K+16hG1xJ+jO9JF>=B zY$S157QOvK;BtLpY`N4_|0ScVunMeJ<8i*TAgcR#GrbS4w0>U1JCV&e6rK2WPdF)` z2`Dmpi(QUZesQ{=7;Py{=l@~?iEt$q)M2U0eQ}aMefO)UwFDSditN_#HS=-KXbN_+ zH}N_J@!`=cVpz22HhMuNS^ZNucC7hgZ}xW^0giegDkw<(T;U*vt}67Jk^`^DN~##~ z(WUbVJy(9h5>m;Bjz{?38FDeST1+x<;Yzy9`99o%9&HgFpGfIVAHV!PA&XXzYV94k z-Mr>ARLc@pfaHV&e^^BlIab=JV6c6iyHM}gT_u#;biJ8;0m`nq-O|2QQmJC z{&3mQX8)|)5)`TXorJnoQ1nhKkUm&$Jw%M4HX-*q^53nu&?q#~6L`4#ZEtbC*BCRD zO<%-g(Bil?1Q**Y{z;P|`h^Ue4ApmVzDpp)m$wz7}6{%N*CjCAT;gv_gn8;3>*Z-XiB9;V=yUjtO zkof+#v4pC=Se1B>KN&%LE5AP36#LCcF)8JIP4+3^K#0NJ&HYNkH6;G^>1rFsPW1~< z7y>4>l{Od+<3gEa&cMy3n|eemN-Sr%-iMOAC81BM$ie0sg@`%CoK}Ab3`W0?G&t`% zbV@e&g2dI>3r{?txKv2+K7_f?agrJi-AZEbY!_Z9^zLw`yxn4|Xxn{*DG(;cu`pBG z-);JLCl@DH&kJZ6YHDV{bjq}zWwY`O-(3oR}A-0s7vs+MT+ zaQOukJk`Rq!gw~<1FhZh+z9PPmq8GS zo9_3pfARVecf|e9>I>oAj1fD)-;Sy2l@Zm}8)dHV(E2>Sn?YYWfU(W%~^ck=L_rfs> zEJO^HFT|@|8&g2ku>;<>YS+yOsH8sFA%G-a^Aik08zmr#?WCpue_j~dY~dZb_k?6D zgYnjIdM&_QJb%VD9AL8#z-IX){f-Bkw#~-zEZP--plr=*UQNFvbMKh-+0|UG07vn( z0|%HzBKOj(G#RV_F^KQuKpg({8P6CZ+EcyB0_DmVGD$Oo$z0KAL(SAep!7X*ems4GH1zzr^W9tzw7`cmwDdvVdn zSgHn!?|p#!Q`MHLv{SI!1{srQd$Z#N%o;JCULbF9+O7OtuxH%E&gB!lZzOq{P zS0ck5?4?%UbRRA|AQrA1(0x5ywf~(^50l~U~&e_U5tog&Vu-`+M6l2x7KxA zed2lCNtpVx+H!h`+HISG!(!rPh$l#r#qT1>IDH?yqU+?+1sCI(HRD)nfh6=ES6B_+ zLWi}jK=mG4x<^1OfKN!6UFT`4dp;-8=`*%Ir^!$j|BTHjSSE#gR5q2@7{~rRXR=Vx z=dKQj5A^@R;1MU*bpo8*0+2baW?m8^y4@Xj?*rK(&||sUGT!_6i>{NtKl%NicY$-+ z9(than))sRuUTi80q*Vazhn9&Ll@9kMn7oV2_jSgh$5Dc_QX~>=bvP}1BHLfX zj)zL#cPKEQtV?j^#g1IDlUXg)m0K^=jixSUh$8XXuLaz;=(i)rJ5&Qcl+5eAV_K9t zP7&Gs*L9Y@lx;$$0Fo5}OCSp{PUSzF2F^1J6rRM9i%PPT|BB`&|DbuJ!$v5F?b1T0 zha=_*5V+n;!syF{_9Xig>MIkE8%79hI*8%-OMf^q!JH`8@-gsflix+g&J8gle*9E%O7O~Yfi*tb}pE1eP4xf^M>|+3Ol7V1aga@{Y44N50 zs{Muf@r|+<1$WicI*y!NHVbxJ)D`zk-El11J35b(?ECYzw*CyjnYVJLmRh{$1L0rm z`$KgFpu~9mj+y8KRyu=oR7}QEPU13e1>q1P?M*(u$10-_XlfCk>Kk%RqpV-dv7mxZ zED8F*9yyfos=XN2Zfl6ta;7Xps*#~+4IGs428PdN&u$CPpq7opE1MVA}2Nm&|8^UNfN1GOaWnt^uNS2m9^7Z5534c#h2C zbqL}pfIO2_K35l)q=oMjtWeIG0`NBF8!amE=}{LM^2xbEjWZ)qY}@bpT+EtU14@0M zmPw>xFDF}})U0>@S(&;ZM5UZTx1}k+wjjUm3nA-Ja}G5NH=2JD&{z=9Aa2+y^-10$o+q^VS{d_~b*o9R1E&y$+k{S3$M%q}Mo9ex=E*p4W?_vB0a|+t}jI_QXK- zx1@_;H)UiP)X6m#3(NXaO?a9gZgyEY>?z0baBatUW0g_ahWG31{}8%l*!Y<>NM zNyd`N6bXscWk=5hfPAinX$7ZcYg9 z4<-i^*{wnC#rPZ!^pKru#hVXzp@*@Kzh(mfn@~@i8ZDSi2f8SpFnL5PmlxU;Y~nuZI*9C1bo{M z6V%I?YQX70ti1uT_68Z~yfAQrAdd>_=>vEd{)q~-FjN{VX#3`W7XROvCAR0RxOS;R zDxPKb&uA8IVyD1g>;kH65s>ZtOWrK{>4w=_U~=QwORSrD5lfA|FrDbufx=URV(JOFhB-a~5rBR{z^{)m#T?RTjB>#m?qf}o!FVel8 zoBk_6*V<^SE`!`*wcO&(>3!o=n`*8P5}>=X>6(4p#x8=E*_jKjaiDw9r4ZyT3Vy6p;W%cc7U<9(X?^|CVhZRQecApF~5Fj zAt2PByg>l14*S|9D||*~ysUrajQC7feYP&5A^XO^4XI3nw2JDVWfOh(X3x7A_xDXkdRVaLI31#lS(!( z=$YN};Gb(XkBeZuJZUi zi8y0sXCiHNVyTHbt5;oQS)+NcEHcZxSUBaG-s56neTbx>I6B>1_MU19avVx^JQ$#7 zKdhZ2x8w`kl(BAHu`?x!^ZMQq^8if{wb>z`&JlXC)qEcy5;s=_5aHb zz_F3G{z7xqy4(y;gtZj z<~V1KZ~;v${>$jxexo<;mNYIbzbER9`2)CJtth6zgvZ$*eNC(KKxVZviky_#Fo;ov zUjRprVESwGD48_=S$o$)LXAJ!`(n1cr179Z>m#9# z+plo`lb!`vZ!B1BI&iMl{5o%y-r-L{RY{kf{M>TeGkQ*#B3`|zMT3+_3nVCTLPvG)x~^a3xSpwJK7<`-7GCKB{= z>wQLKfC&Uno91(s#(vg=R*E6H?_K$R)9H`|UOxX@iu1oVwa3#B)0n8= zO0%R*_o{%>NzO&5@w_1Am;*3#QsWPgGzVyqB{;$AVqig@U(0~4Sq&t-!rv(TBu3E> zUF6(HtF13GWfBGmpDhBH3ywB$j5!P?k?5KCSHB|~_xbk9K7m_cdcgilCr)e8W!~DQ zmnOc*E`>AL4-)f&LZ5k%_GGCpAhx=gP}}L7CQaE^n&%vNuH*T1#zH`hsC!H~F!&aR z5YRgJ+fZ4ncpNupR5YzOUQ{~por{2gR0qLng8fzsE2s?G<34CS6x1}&j$PoL2EBDw zjaB>~YyJpi;%d&5%Bl%@JF}I!nsA>lzxLp;M27f5#Av}C8!9mBi$h`TFH(EuHv(Rxy-yW!& zbXM)guJDoh(Yr(u*g!5a19xMTnoiXT~>a< ze?@`|B`U;mnKdS?^<3}y#;M;HU?5SgjUWcb>h#g|s@4tb+dM$iWp36qeLs%v_`r`g z%`KCr^PONE_d(^b;O-dLB>`g_o?Btl`OeL5X)R-E6Pp8%BpsYO@PM%V%YJMXlRMVd zI|oDY2Ovwv3LO1}H=fJ{D(1nlk_u)FU+-J@+*Fq&RDqRhPFJ|Qhs#!1eZOI$$Ay|@ zA5Yb-3WmZCsz?#IL2cCyD)Z_)>#N@8S3ef!5VqZ=e4_}I)m-PyX)od8IIZXExHMOb z!bE9`7$3RngcCBW8|2?$dSM>galG(`b6`S1*!OxoufGibGby`3~%Q)#!hs zY8p{dz-5E%FLfHy#8prh4(d*~a;FddzWsQZm`8Ul>7zp1KccCEu-%p!Grzvoz8XgN zi`P3P7Ukd7eK?6%C@gWJiiCP=LW5vISyah0!;3Ukw9j33X|;;Ypb9=%&R?k)FE1=< z=)>SY629F`wp})%IFn7gA*aCIz_hbSae4ZeKSem z-|!skvO010spaB%5d$^2vFzZhk}_0(fzvjpq0pDH94^oX+Z@j+^oxl+@R{JKB2~aH zRTo8bH2<^v|G8y&w`al3+B`s{-5;CFF0&QJE+GBPhjA^b z+4(MzK*@n^^LZTT=g%5@cM+M+JdfbVaedV%hrlK(+(xXV3SbbOYheUB>qKh+m6R<@ zo2T6Kfv{W+7MTg>-JzQY*;~8V2TVcDl0O^;{Xd4+<-1KTS$=4P7@GP96JBLWqydIi z30kq^HS;!nBtW%;)*Uhzw8tADf4ihz#Lz22b;cT_UK|o$r#~ppQkhm8^l;{&;0nuE z#a8hF8lKMUZfHDHx&qF*A0@?7K5x@ltT*=wgSY2MGM zP>9ub9OU5C`w7zsV0JG~(mT#j}GZ z32(mrs%Y<{7ogSqvHx`<%i_ZJkTj{Qy`{mta zoS^;tBUGh@DpKQbw%}yZU$m+m)cOjAFy~c2YT8l&)JmS<`$+vsU1oj>-tMtqUXQ*b zca|!FC}UMXfi318fD^LP%zQ@dDKJr{4pqg{z&)+8uHT5Wc~b~_$SeD=(;SRI&s`hZVRfV4A711u9>r7UW-dt(6ivaiLKG(*ZZO^2f8_*HJc=-#!ds2k&x2zXSH+WmwL zX%h9zZFu_dJF%jPaaqmKvlCx+257?C+(t1XPy21*h_}wjEUc*>O_W1%1#> zW~g79%w@f_1wEJrk2x@&)F`U!bG?CIL4h8vIrD^2OOIcS0+jo~;vj;;lq&Pr@KjI? zA>m~-$8Piyg*qPF*@HE`v_Bn}Y+LW|K&Jo{44(no5(z7~zQcxU=?%5-pkB@W z(>=lAqiEaw+2wUn$TbTugi90 zk&0o#GMEIBx+Em~Bi(=^+B$nh=yZVHhJI?^wl&pLqfo77!^+g1(A}`ZL8`g408A>d z4E4{Ks>yi*e~ML#84DFQL5^vtVe}ufxF#N0C&MlHAujZ+eQtz0?47WC2y(=C0(O&! z5Yv-Pd>vG^J#E+`Qe$NpmvI>`A~~_ZuH&Y(Bj7mIpaKnQOu8RX(xy#yielEN>ZzGE zNsd~RH3{C<@!a27QvHdlALWHoG~37M4|xrNMYfbCJ^zJ7&V6itaP1-HFs<$CoPFY8 zwbajRJ@@)D75RC%slDJ@@0UvVS{T%GQ78wo>WQShxW8QHque_Gr0})(Wz!_blv;bU zG|4yXA*`ch+m=}xzRd)~JrHZQ2Uz=r{sXum5}i?@2_ReGtdkDA^SA2N3 zbcc33p{_4T#!v#lYd=V%_2B>8J^1JFANG`p2EX(p_&4F-YJF+_=H=H3ZPz_OExSmp zsq;*9(HMBnzt;otYJaxUeGfhlDqt9-(y{WaKB4Pid-bq|U#^iB+yLa{FBs$4ols(O z6eY*KiojJAq4)yx`Af>Ke(i)9(D}BHY2O3oxud1FyPZE0YLtf=rJ`}ndjw)=dDfL0 z@UABSM<1qXB9F8!AnJitIgC%P^NTPxoI>eus-V&`p2}!d#>f#w5D)_(MonsVC+)!Y z58&9*RE1uEnXpL-w&8uS%?s-Uo| z1Ywo9@4=x3w&_9C{^()Q{h!7En^_WipqvA=GL1lI!{;pz0G(dWIkT*Va*!#qWs+Xg zUkYqv0x_*p(EDaalCjumnE&)Evv$MlZK~K-$d5QExhq)&>DT(#$0yKk>4%u#0F}(4 zjZ9KL5CzcI)`4dfIg}!Tk)=u~}^`w z`rt9kQ&PW~1Ujq2niWPNx8{H~$bbeWG|^O?7OeZF33$$ZCb3E2J1Z=0DVRAOGS0-L ziqwa~4X^K?kqqc`FG!zG>O3`|C5nhiX5|)!ODkJ7sj9ok3&x(=O^2$$BvO2=YIX>q zH-@`&)rEyZ88CZ;T+3CUWK~Vd4#)MEhDP4R{k&CW7;X+Ywc4U*P?@{1xF!iY7xnZb zuBo>BMyxeZw4j`#;-rB3RhyvM2nAHu4kKdk0@+LeIt3<^$kypT7`vWtC`PdhrJbp; zZmDiX0I|YS3_*HMi3FWLHAP(J|LUX!q?;dUs zpLf0uu`H<^;$R|9DC71Lw=}ecP3O&{q%?C;- z5Xk}{N>%QSaZ7?QMhgzkYFHL;yn#WhJe~e>;|&_6#i-b?<5jb76N`4{YfCl5{7i4a z4O_1;5MaE0*#>W)PF?@;OawtulH$NJXYzzLcxSA6wKsU0r3XQ=}rV#*n0i z3loDD!?wj0eGIa9ZA1?*EdyfD^JAYbQLPcgD`4(?iailiAK%d(c+~Hwt^9u(A5tiez1q=uU>6-c0h3UIJeeu&VOll$zDO&OA^%{CS+gjNK5+eoW39O*L*MHh=N8(>YS$r2f|8^$;s|5V z`>TZcTun_%Kq_61ezfD$dT!K7=K3Mq!>X!OAIj;dDRvJIuw9&orZvd!c_?68`DGy% za8)KykecMzPO5w}SJdB)53x_n zd*=}W55OM<1?WZ1Mx5rRq?mj;n3UY8fr@e$hrW;V&^es>I1|e6`_QTl+GBJ-0Gy-% z@U(X5Ae{|24+P%}oGpw@P{$kKfT&%Y?6YQBVOA4)3M`bO3>R3X5LA@V`0P`T?>!wJR$5EWDG;O?ML z?TFY~Eqh;9L$R`U*~ilN;WXXRe2l56D&ED=K8T09Xd^XCl9U`=k{6TIW`|uZP>3#o zRyl_&$FJ~`c?moYbidGYx$L{#a(lpc$)l^5_-77KCo8~1TtxqDkLS(3~X;(P$JCKY$MW}rf? z#vtXL0fMOkKp$%dtE)f{D{#|m#v~c*x#@0?*6*p80JmPVVVdx4+^=yAVza*ls2Mn0 zHw>kpUsNN2Zgh1_kXts!3Kh@$Z_*#{a+BQ_jG|?rKvgmX9@;3I*6|#SV^TK&y)dq| zuHB-_aOm`Ld5$j>`E{%DA8hJYKX>KjfDuj>wAVn4o)%i~&&!D%jYvTPh~AL=!%#6g zWCYqv6jmtP2k1Nv2KwXE7rbdZ z;Ms?GY|@r}ADe*?J}E=xK)P2oF3UnX!0mflj6-(qK5^pt;5<6kPz5;l_#+aAW|GoC zH*2Zt08d=}qJ9wRCIY(c84x|paYU_Ia^=+$naM%_t+?r=PX^<;&X*A=RhFqa4MeWg z2C8DCV0O`K{Tv;H27v0JV zNFfUlV!-JP07D?EaUt>^QD`{?vLYQoHu`Fq`tPZGc0MCU`c00rKQ-h6OC zbA+_W)l1lqBLlOo9-kknw`pYS=xs+_x*g%DJ$&M7OKsvo4UCmwZhF#`4q76-upNMa z5>UDC7T0oOTQ|KB^TUT|!945ktn4DToPky={M0*sYAde{bk4ALp3&2Tni)tu@F?hem;A+L9E=8@2i3I}c^rH9)%RHtjulr=X$&#uF2w|Gpjy)KYl%BwNC6XJtQzR`^!09p zp+deH(sevh{xc*uC$A>)2%c0J)b*u-`lfrp$E74uarEiaA?>asA6|mZ=0U2buJzKIohL3_Yf;T`pCNeZ7Qpb z3QxMqT~yEKqB4CWZuowK)z_X&s8uMX&I?Q&FGMDIL!W_zk~bQtq;L-&se@ichHzm2 z@Y7c>9ey4(?6TB;81`0w_>$2;Xk_CBA=$ir(KEyS)5stx*7^s2OiexNVytg#^#RfqXB?Aw? zu^nL7Noc7E)gG`|@Kl;``IATLZl8aDT8QqY_4-*7VY2(r;%e=liGm9v9^qdM!sv>wxmf46+cAPi0CivdvCaR(ZvET4 z2J2zL+ahS`?R`NesC#523TvQArzj_I{()rxHx2XbZOb2ftCm#}s+hCWPnd!;Mm_22 zoPDn1{6hEJa@u3iM+Sx*H@~!ApCr~JJp1g0YWp;!Or`I+(4)r{i+-^JtDQXsL&|qI zG_=a*RgM5Tlt4lp!nYZEk06U5U~F-RcSEqth++FLGZ(rxTAxm>N*HEz|6vvTydHr3 zveg21^(U&R*?r((z#uYh%F5g^m~P}a37ijZBla-E7&y^IdS>TG5*E;OCuo!DRy6}6 z-BeoIV6|bhtaWjS+{e0dkn=$4DTd!U7}ihwQu%xnZJdXdPDuBAub<=IPk77$_ep7L zY;irOUlF=W_oC%84|XPWq{yuTINC-*DaMHVrEYMN0jR%(IBLwXhqa%d%eSif7If z3N}iAWUiyr)kwS71XA7BLTvD1oS*;jPmsP_&40lsMnV5LWC*7LYpKuxx)|=J88G@k*y9jBK_-AHvS=Bj6e?l zEfn|FXQEF-NZ<)jET!D)26q0$2ULgiwtI$rpii+c{h)SFjd#7#y*BgN-GBWQIC_#M z=}KS>DhejvvFVHWmz@BJ$+r?cFk?}Jli|t*;?$ucwGm-&ANG_%+L3u~>gJA8u`;Z^ zdr?v7_lTD&CU|U3Z*3I$LpEs%+npdx&vBdHt&O@>J~iltQ0r>VcGDq$%Rao$D1Ehd z`860qs0VGj;@Y(Qp2V@-GKqL6UGHPSh&N>y^TEmqzeEu^kOPCPWX<^qvJGVwke6dTO2UxxLipfu0&v5NMLkmM%ick`S-#;xxQN-=ao0vU_ znWj=w!mnAao-nfZRfSY(K?|TpPY0%f+=;Et01mvNyAAF2{u{X|0fVp?MXLz%XADpjB|^XuK{P;!5hJms zDz+7D(TEa614K}X!~kNbV#_5lLcn6l6d|4jL~w8vLhY1N0;JS9m0J~v0p_Hi=TDe# zXRZC7ckOq-XRo!-?|IffSP%BkO+8H}17m;pq$(qI>eI!U)wlVl4)c~`Ys{J>8ZAv* z-S#AvaiHf~#BacKPRNRavYYFMD4|*@vC-RF;m)7Yto@}Ds4j?B7Is9v|de)|F@u|(^AIBuS1tFsA>~E#& zKK;NHv+arScCh81c~Few!+-$yO{0;@%f?1s-}b}Ih@cM6&`}`2ryr}ST;Lmxr_CGI zCXHIVQlVf-V`i5CgznwhN$=^4)>Uj>#5{7t8``6sU8Kc-tD;3|t4pTFjE?M1;5zQG z(3E598Tyo4qHkejI1dPz&@ZsFQCS z@CK81Mf@IPmuZV>!N#O030VBe<(NF;Ll2Pg>?kS znn>#szHZ7fGp>~Y(sl~)j%|)E$aNn0)ieFXMv`3dGORNua^Hl6&3`pGL>qlJ@3#Dj z+t=Sj;W|UScwD}`w9vEzWx?Sy z(fRhxE~qMp-=+@`%T4FA<_>|Z^#?gKg5-Ci6gQZ%%tX>r)55ctHhW_m?)l({8( zlYh{9{4w>)@g;vwVoZ<>?YXZ6Ssj&ex3s#e9PZW7<0_P@aVhEb&rp7F-lq{}XzVHU zhU1FV9j9C}wSN>~GVZfGZung5^|ir5Hh@07%5d4_BU(P*zry|=?6<{Kw)R1u9g2HA z!arpFVS?N41G&%@4L^N+NRohr1}eN&rIxM&!H|K$#A;2AwG*Fp%-h1DTqt*$;Dm(n zJxDvRjk4Qv^pdy=1-UNxNI{G3(W~b8!FlsW~GZNnU!qIgIMrMO)1ckVm>>x{d@O?>;xb{VzHq5)f(*P8wLu z!UjtVR-WN^E`%DQkrmuvRaNpLD9gSu<7*Z{1R^q>12ZreL7LCIF&M#I-h`)6^8pV2 zBb2Y0KS?xoH=z7l{>r=03O=^o`CWH-N<~2o>K?Au_cd#a7o=BTA=5>SuFhf%!`H7x zd*^nxeDcdN-`o=br@oEl0kbfJsCr~Yx)o+bTE`dvh%&AbHit#uh8Q@--5Soe zVg4TVA}->ggoO5ylM-6&{2R}S8AyuCjymz~!p<2}HySS|kv$4cUksmtilHNA4v5*@ zV^ogT&mw>Ebqkc=9ueQ^q)1VsiE{-qq1{*Hq4NAH@pavv!a#(UyC=0?Ll2T)(B(JF zUB*kEo8e}!x9Zl~=JyLCO%(h}84bq| { expect(orderedListGutterStyle(9, undefined)).toBeUndefined(); }); - it("leaves the default gutter alone for two-digit lists", () => { - expect(orderedListGutterStyle(99, undefined)).toBeUndefined(); + it("widens the gutter for two-digit lists", () => { + expect(orderedListGutterStyle(99, undefined)).toEqual({ "--list-gutter": "3ch" }); }); - it("leaves the default gutter alone for a two-digit list that starts above 1", () => { + it("widens the gutter for a two-digit list that starts above 1", () => { // start=50 + 49 items => last marker is "98", still two digits. - expect(orderedListGutterStyle(49, 50)).toBeUndefined(); + expect(orderedListGutterStyle(49, 50)).toEqual({ "--list-gutter": "3ch" }); }); it("widens the gutter once the last marker reaches three digits", () => { @@ -179,7 +179,7 @@ describe("orderedListGutterStyle", () => { it("uses the widest marker and includes a negative start's minus sign", () => { expect(orderedListGutterStyle(1001, -1000)).toEqual({ "--list-gutter": "6ch" }); expect(orderedListGutterStyle(3, -15)).toEqual({ "--list-gutter": "4ch" }); - expect(orderedListGutterStyle(3, -5)).toBeUndefined(); + expect(orderedListGutterStyle(3, -5)).toEqual({ "--list-gutter": "3ch" }); }); it("treats a missing/zero item count as a single item", () => { diff --git a/apps/web/src/components/ChatMarkdown.tsx b/apps/web/src/components/ChatMarkdown.tsx index dd21a4e1bf40..2cfd0a46fa86 100644 --- a/apps/web/src/components/ChatMarkdown.tsx +++ b/apps/web/src/components/ChatMarkdown.tsx @@ -217,13 +217,10 @@ function findTaskListMarkerOffset(markdown: string, listItemStart: number): numb } /** - * The default `1.25rem` marker gutter (`.chat-markdown ol`) fits markers up to - * two characters wide. Once a marker reaches three characters (item 100+), - * `list-style-position: outside` paints it wider than that gutter and clips - * the leading character against the item's own overflow. Rather than widening - * the gutter for every list, only lists whose widest marker is 3+ characters - * get a wider `--list-gutter`. The width includes a negative marker's minus - * sign. + * The default `1.25rem` marker gutter (`.chat-markdown ol`) fits one-character + * markers. Wider markers can extend past it and get clipped by a collapsed + * message's overflow. Widen the gutter to fit the widest marker, including a + * negative marker's minus sign. */ export function orderedListGutterStyle( itemCount: number, @@ -233,7 +230,7 @@ export function orderedListGutterStyle( const firstNumber = Number.isNaN(parsedStart) ? 1 : parsedStart; const lastNumber = firstNumber + Math.max(itemCount - 1, 0); const markerWidth = Math.max(String(firstNumber).length, String(lastNumber).length); - if (markerWidth <= 2) return undefined; + if (markerWidth <= 1) return undefined; return { "--list-gutter": `${markerWidth + 1}ch` }; } diff --git a/apps/web/src/components/chat/MessagesTimeline.test.tsx b/apps/web/src/components/chat/MessagesTimeline.test.tsx index 7ee4514c3709..c38ec129e7ef 100644 --- a/apps/web/src/components/chat/MessagesTimeline.test.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.test.tsx @@ -683,6 +683,23 @@ describe("MessagesTimeline", () => { expect(markup).toContain("rounded-2xl bg-message p-3"); }); + it("widens two-digit markers in collapsed user messages", () => { + const markup = renderToStaticMarkup( + `${index + 10}. A`).join("\n"), + ), + ]} + />, + ); + + expect(markup).toContain('
    '); + expect(markup).toContain("Show full message"); + expect(markup).toContain('data-user-message-collapsed="true"'); + }); + it("preserves arbitrary XML-like tags and comparisons in rendered user messages", async () => { const { MessagesTimeline } = await import("./MessagesTimeline"); const markup = renderToStaticMarkup( diff --git a/apps/web/src/index.css b/apps/web/src/index.css index d43475f901cc..716f2e47a2a7 100644 --- a/apps/web/src/index.css +++ b/apps/web/src/index.css @@ -2156,8 +2156,8 @@ code { } .chat-markdown ul { - /* Reset for nested uls under a widened ol — --list-gutter is an inherited - custom property, so without this a task-list under a 3+ digit ordered + /* Reset for nested uls under a widened ol. --list-gutter is an inherited + custom property, so without this a task-list under a multi-digit ordered list would inherit the outer gutter instead of its own default. */ --list-gutter: 1.25rem; padding-left: 1.25rem; @@ -2166,7 +2166,7 @@ code { /* --list-gutter defaults to the same 1.25rem as .chat-markdown ul, but ChatMarkdown's `ol` renderer widens it (via inline style) for lists whose - widest marker is 3+ characters, so item 100+ isn't clipped by list-style-position: + widest marker has multiple characters so it isn't clipped by list-style-position: outside painting the marker past the padding box. Reset it here too so a nested ol without its own widened marker doesn't inherit the outer one. */ .chat-markdown ol {