From c569e8914aa7a49b513f2f255aa96f4131bc8431 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 12 May 2026 12:31:21 +0100 Subject: [PATCH] Park up changes --- .../components/views/elements/Measured.tsx | 6 + apps/web/src/stores/UIStore.ts | 1 + .../viewmodels/room/RoomUploadViewModel.tsx | 1 - .../__snapshots__/RoomView-test.tsx.snap | 320 ++++++++++-------- .../with-open-auto.png | Bin 0 -> 24681 bytes .../UploadButton/UploadButton.stories.tsx | 83 +++-- .../UploadButton/UploadButton.test.tsx | 4 +- .../composer/UploadButton/UploadButton.tsx | 13 +- .../__snapshots__/UploadButton.test.tsx.snap | 4 +- 9 files changed, 259 insertions(+), 173 deletions(-) create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/composer/UploadButton/UploadButton.stories.tsx/with-open-auto.png diff --git a/apps/web/src/components/views/elements/Measured.tsx b/apps/web/src/components/views/elements/Measured.tsx index b0f084c0ed..9b1d337468 100644 --- a/apps/web/src/components/views/elements/Measured.tsx +++ b/apps/web/src/components/views/elements/Measured.tsx @@ -31,17 +31,23 @@ export default class Measured extends React.PureComponent { } public componentDidMount(): void { + console.log("Measured componentDidMount", this.props.sensor.current); + if (this.props.sensor.current) { + UIStore.instance.trackElementDimensions(`Measured${this.instanceId}`, this.props.sensor.current); + } UIStore.instance.on(`Measured${this.instanceId}`, this.onResize); } public componentDidUpdate(prevProps: Readonly): void { const previous = prevProps.sensor.current; const current = this.props.sensor.current; + console.log("Measured componentDidUpdate", current); if (previous === current) return; if (previous) { UIStore.instance.stopTrackingElementDimensions(`Measured${this.instanceId}`); } if (current) { + console.log("Measured trackElementDimensions"); UIStore.instance.trackElementDimensions(`Measured${this.instanceId}`, current); } } diff --git a/apps/web/src/stores/UIStore.ts b/apps/web/src/stores/UIStore.ts index 0792bb206d..8106bcd5f0 100644 --- a/apps/web/src/stores/UIStore.ts +++ b/apps/web/src/stores/UIStore.ts @@ -88,6 +88,7 @@ export default class UIStore extends EventEmitter { entries.forEach((entry) => { const trackedElementName = this.trackedUiElements.get(entry.target); if (trackedElementName) { + console.log("resizeObserverCallback for tracked", trackedElementName); this.uiElementDimensions.set(trackedElementName, entry.contentRect); this.emit(trackedElementName, UI_EVENTS.Resize, entry); } diff --git a/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx b/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx index 6d9aa2e489..5ec12c3a28 100644 --- a/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx +++ b/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx @@ -229,7 +229,6 @@ export function RoomUploadContextProvider({ }); useEffect(() => { - console.log("Reply to event!", replyToEvent); vm.setReplyToEvent(replyToEvent); }, [vm, replyToEvent]); diff --git a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap index d093f4da0e..330c897bfb 100644 --- a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap +++ b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap @@ -212,7 +212,7 @@ exports[`RoomView for a local room in state ERROR should match the snapshot 1`]

Could not start a chat with this user

@@ -423,7 +423,7 @@ exports[`RoomView for a local room in state NEW should match the snapshot 1`] = >
-
- - - -
+ + + + +
-
- - - -
+ + + + +
-
- - - -
+ + + + +
-
- - - -
+ + + +
+
-
- - - -
+ + + +
+
-
- - - -
+ + + +
+
-
- - - -
+ + + +
+
~*Tyt6fa|J5_ka?aH}5UP?B*20_5X8QYH%>7 zEL$|h`b*c_!I(d6%+J2VhKOxGaRSSMK6V{@?AY}apKw)VTt|9cYy4>Z#yn~gzsMtZ z-86&gdIQ^)IiJEV8?)Be~lhLhdC6!D3l@jvYcya5*5ne=k%@5yW7 z?7cT^<|7DaHzpmiByVGzq!n-$L}^QqG%*f)=>Wt?;cQSP)444+BRTb9;&)YL0)47nxl^gRUt9}D za+Rp9ligAsi*y@&`Jy>CBfJsSd8&j6Z@zp>)DmCW^s=aT@}k*xx4P=Q588@t z=5Y&5{v*xs9>}V-*NAs9SL*IpB``46^Fh;KC-M=Bu`Jee1aZfJt-sM|C8Ofz=gmzv^_T6swR4+^MS!!@ zw5wS*X8eEWYPtX8KkA|LyBdAo2Pn2*37+nnkXqT+;#}ylSTR~y9>TNr!_oGM@_dS^ zWBDZ$^KCd2$gE<4SJt z!tlWz%F9JF{V@3dEO;OBOM(9z&kFwhu*&7c8l)NQ&h9PQOM9T5Qv zfq@_XaBGwe5>Pulb$f0~utY@GciFw`9dC0HXNf?}8+|{q+D|KuUxP3BHsAQN3OJu# zF8Mjy`(nON+Y8HY+=YeZ;UHH3$wIrYUEWm7%!p)_UvAa)a#VYceI*)o3Z8E|Fbfha zu4=uBUs1{mFV7^so)q`IZBjaXGOH#&Gd!wvZa%B*a_pIUr`DXTfFl{B5gHL@-(_^l zOV(Ii>pqKd=Nsc>Z7$+%pAo%pT$Pz_`^w{d6}ED8B@v8=_&S! z>iO&r)xXBLP1Jt0p;_Bsx4GY@!qF-=-!<>CciUlvo@;wMFVGE#br{(W6@P$`of**< z;S<>Uvr*yhknp_<>4oSApX&XqM!H_LB`H1b5${Ood96j$N$ZUmkzF)wx;geO?d;s~ zS942a--x5ZNJXxPxfLXLBJlN)O=eDnM6R<{9s|wGyGW7<1qUT?3mdMK zJP6ikpK$Z5>>o)FkfyXW3=dJYDNgkYrTin#!|o%FJ{=|T5iKo$H%t`!t5BR7dxBWN z>3tJ48cq8#C#?iq!q9Dmoeq51gq!%w}_X02Zj@n`1LOsba3`KWou4mUSa z?{YCM+0yLGhY-Q>scq*WggsV(7}ID04TDaT)3JS9N>5 zq)PAkB;?JwwfCn7ICr_J<}tMk*-Rue;#XIK``pKtaK(=8{W;ewL!>f^h?>29vMqonJ^RhC44iPoASJJ8A?*Enoebc)ufk@ouklX+Hm~O{TVT z{IIgso8J~NKo*!>V`A=M(dyRU)%fcv@7?M8^GEB=ZF0`NvcBP8X?&8ntD)%PP}})Q z)fa*k{lH`wD{otKpXurQE02W&Tl(kYe*X4cq)`{vgKlIAymV zajW?T%oMcx9Ie&Ksd094-#o_0+URHuKen$|&D&$%sNsfdpu|U|ky!H9SSO()j0vg)0+Y=DTV&h#TrHBr*zr z_I)i~|Kyg#x)x-As}slvvGNSh$H^CMXx;wbQNgkUQkn919W9o(g) z*NNQ=c5Ppai`=y;5hN_RyjKiW6Qb1}$kkIDn|EhPw@6{!|DqogM`SK}4eMMv0fMbm zQh+YURZ?}!nJ1p#E+?tBu6hzYsR?t4hg@x0^|sn_AiX6dhL=eNiujZJngBs|xh2tU zU{l43_F0?lULD2H2Ugw=xejQ|P7l?Et&#-0(OQ$3ff?IWu|rT}X>e|?>}#pW&d#J* z*E@g>R2@paKbzO?Yj(_?d~BT{RaC^^dvSb9t~*LY zRPb<>|JBl^?z=a5x?>zOBi01@+x1LZt;{_C*LnF|wzu03_g1d)hpzsLI*ad9vmkh! zznazNNgWw~e|%%;8q)wPkLjGUoNk@DfE`yG?~hXrbRt{>W;O1Y?o}O%o9xoEQWLwo zJk517c5ysY*d^?EVBp{WBQ5L73;M01Wd%CUQDz^ymIdU;bgVL z#-{dVO7q|4LY~IYM4r_>HBNOaTSKvb(%3 z3W2_jXYW%#@%9V}T29S+H+u5ku?ceT%114<@ax{0pX{qRoPNc(R(E4{wHa~N>ZIP6 zpGvn{Wpfu)ro-NJ?J`?3TO1yH7UD{BE$OYFYfLUhV!hCGk)lhRuDgrowFmn3WCaE+ zp3a*1ELAox5pVtvrCPzq+UfPzn{K5!6k*-K|7=3s{HLtM*0s;nuY3*D(?!2o4b51NQiB%Uo$^NNv#j57XW2;gB4p$?r;U&1 zEth&viF<|Y)q3>dz>AkVR*D7(^M@y-LR~LeEne?0xA6+}9xm<|8UGwrLh_agQeKjb zh*)V1X!uB7+;FwzQJ#nClGwBsa(Ced-yqz9}jIN zwH3cqI|Xe0_%1JY*V}-S*en$-l01f+9+`l38#raHgPyx7>>8paQ(QE+seh4L5;WJH z5F#p3GV?Y_`>5TU=|>Pmn4g_)xTUsG>rKAQ&iMI_Kl?6dK9%>er7zv} zxx1aH{db2_>*q@$QZl!9+-_+YsoX2p^T<)f@Hoi{Gsq$*;`01zx^ke5x9~Z{_ZoK)UNC@kiyVekBU=6aQ3X|26ic;B=2` zsC(f99o2LJ^QiLKz`44)a<4$W)}cO|%4)^%#lp`Kt@c#!<&2uJ8$6USBV$XSW|{t) z1W~V6H{0w~hsLqy(9{3`f|8s2?#c$?LO~7LC_@{^>Mb(+7UgbRT zv%_7FZ&6-Z`2Tz$D$_ht+EH<_E?n`zGTvy^wk2KEJo{5=M{Gj1gsjgym+|(zVo6c; z*kdMU1Dok0j)mw{t(2eU6#iE4`sU)y>8Xguh%6b%twb3P|AXbYH0k^ zBqbD2xX;BG{S4YQlp@%|DBOCq&F1JrX!km*OFP~&e2n!gjQWr!9yJW}4|I*w1k`bt3i7kyo} zcD{jhLc8w)Xpc0oWp5X&l_FZsilb&t4TFAb*V811aCGW#KS0wNmZ}^O6GNF;-&fbV z#sZJ_hx=AOLjRfmcgJ{yB398yW7cMry|g))(TzBM2K_h1VF>}Oa~cEvcfDdL((Ztk}YC@U2dy%6nQ!2RL_hz zR;V2=Sy>A9HF_3EU(0}_Dwa;uz*Bq;W~|bxK*QX9`q21zM8F=)ssGx#4HBAUOM*Ii zeb1$3(8i#Mm${;)Y4RLM$LnIoxJr-yvAjI1)kUTRNq7b=PhLzYo(=ITo^&1$cl9sK z`;qHgIQCy@xt8TZ$lQN|rL9MXR!UucCso~AUGGv>@ajw+!vwCJL1d^RIB*(OGVwX6 z{Bo@G_7^W-YZgt9P(l{FYk30(a@{^9Ms4Mw%+AX~1hSl{G&V43rywpqVRS=gvLmwbQCc#&VtWSP}YKl3<`nZxt1UO4~y zmgv^_Q{#ikr|njIOzptk(&>>kUC%pKF0}gi4L{JGxA9-* zu{w~unC_8L=$$g{w#*?|PF%P2D&K1`H90TiAa!=MkaAZ%(8tifJGSGl+=_qwK)7q* z&`~!}N6Yz^0k4vw;_-+ebK|(uk)4#gvqiIO?o*u8+h5=CP?VJ62lwyH2i*f6M=s6l?S8 ze|}xzE7N_(rCzJU7MYH|J`duK}6j9RA8 zh;Y}N1gih|$lO_tod#hEYnH6O991isO3d8qyyE+{Y@Em&s5E1j7vdRiBl^}_an;2(_LL= z11n>@hSd_b%6h+>)DSfb2>;PtF6_EPrKUpb(ZOvhlo{)sAI9Mv>7C1uircr0jF@#S znksuW^j~Yq>1TN~ngu;h^x2s!tpDcH`#!b6>1Ykg4z-1Mvl@9T^9cdnQ*|qbiK1XQe|UjXW_3Q^dpX9W^v}Sl?u0EXsn4TIhK@0n1SzP_lqMWp2pX8-jgZc3RaR)b_TX2cOIusO zY=4=?a)0-Dnn`JfN1xSi@ksOwa1U3Oi(3mRZ(pSR+{N3pPjx=EraW17smZ%>rbVD( z)YRXkN1^P~4pn0_=bX8gll>JhEaxZObZZjS)V>^<{O;X1xMf5O<@+|udN@b|n_`yK96vR#!{&9WuSIhk9Q(!t=Dxh;Pk=veME84q4lDm;{# zXX!@i=}6#{4QdM7S}`xKHklQ%?4=r(H9J8W>&u!HZT+n1E>zPmm6@%t8g8rHZSVG3 zG*D1O)W>^AQ0pIAHSK<7MLv^Vdu0R9#(54>LKWu4slELoV}$!1(t$&&u6O*G+t!pk zbX9baJI@Zmls-uU?HwwuAiCt*J~~^VThRt5IhEOi;krQ!{BHgKo^*S6L$Lf2Z}aOY zkDAoX>3R!A&(@z8?gvl)y|c&F0i0UsCzt6SQ_a*lsc*aoh$nUTJ%13$J-~3%SNa69c)X z4x;)olcI!$U%S*oc)lE!`l8Yw_OYVHdA8QSQk`zUs}7PlXn}?pB;n%McB5i@ljqCdG;qg;FgC-B0ny0;|AN1(boVWH)WY^Mxkb^;j>ixP3dv|~Wh<|~Y3 zq8M&J8ttw3t(<-?uH?!8i;mBFJv>T8EcYoR^2@@|llWw74s7Q;Utwmd7q`3f0fO{e znc6y(|N9M!AG}Jvtc#W)PBAIE8sXhRRokL=bm|po#ZR)tWjvEk;skd}7z}*R2N9nt zb=bWtQ8viPY4(-I2Skq-Cq6#wwo1n>b|>uE;o1a2!HDP4@)pylbBJ*--w}SAB}LL1 zjKeOx^(l>eG|P}m`;u`{6R zxw8e^Y0NqU6EBWaMlykreBI`{n5kI74L5bfjuo9@>bu#Bq*$jvT@-kIJ}S7?64!lL zr#9AZmnYgldjFtOwp3ZBpy!)$bYRcG%&S|@9Y5>j6op$>bdHV+Mdg%JgZxSoQ+$$= zXZGT8TaC_|V!T--1)v(QkSWVcZ58X)oI2sN%tDQHLF+$OhH zw~GGvA7_^*q9(g;TZssC%=P7USE(f!nI{ZCYg=jQ$o1MWwY28q^beDWj+LK1|Jsk* zzW!q(?}MP#HMgEWuCDOcgx)d}m3T6B>)%Jgfn(3|A^6YD2wRM$R@ZpycYNemWmjxH zZQ=zJm3~xQP~?37t(_t@zI}2RXZzJMqbrc`zA<7czxR<@H^lP?Wr}B2C}GtKZSp14 z=_^uS{HDi)Iu46{Io#j+bu`eY=j?cFcaT|Jzn|a8Qm)ddVufI7>|$%1XT%PRXlZR` zEs4TB%W%7PN_Y14#zaYA?xVVxTWRsnc>~XGRU=6$8fE}#IxNjs!EqA}Z_)2p^kp2E;I%wo7N{WV_%f?}fU+{Wn4(dBQ`oujYqzlL zBKfOlZ1!D2X;XP$)fwxGonE)4WT=s3S!lriC@>h0=Uu+9o`ULJrc3}H<5GW0f&Mu3L*@zUokIyao zOxpZXncY$`Z}aoNqmwRQTELI*o?VJeRz9qwJU)9;ZL(jf+~Gy0v9g+HiDHMp*2`Ro zAEx&OMIU9_OqyYn#Py?!M&I)8A5>mh~9>&7B=G&=sCvYHsrMqmJZNi0Y^&Hr`d4$yb^& zDZN{*(2_lH`RyOZ7MC6(C)7~Sd7I(+g`sr8`Pg1c0EK)m+s@5Ap!$$owaZK>cJtS$tw4ZdCHqz>*SofU{I-Uw zLau-9*6}2jj&oB(!FV~2su%=In*Abo(#VBaC#xwbc5A74Z0X_Z#8RpS#qLH;Ma4=$ ze_>Wff2mM%+(bp=Q1yze<=lU5lOxE1Rv_q(PhP)Do>D@!#wc|xLG;gG;`0?RR<3+= z4ejWtE-j=^X9nz5o%y;V(;UA@X}9pj_kzbdT+ z3YVxn-Dxi}LU<`uqIa*9cWXzIW>|sH27a6c5EFR}0#fhc zzZF`q1ULS?&{ARQm~nXKwGA`gKx4GG;2=Gyxf_?c$74S$^#SpsDR=Z1NRV=pd(ZPc zyte3cy>Bcg)7!glW#axQLgEG$*I9qcSBROC0b$E*)n}?3h zArsb&y&RgvS99nO%CshZZ<{>Se@JDOB5XMG@q_FZ7Oya~PYt9eeI$u;Pl7oZp&%UsipmgtHC{+eE%-ul}yGthtOr zt+QdfW5i#<9U|N#wq;o_FLv=-SIbXE{`2#3SgVAdG1`M^$v^MLx%Sp8lD!TVy*W6Y z@@yBztF>Ui@p+#nUD4-}`!@V1nRxSd^gcA^kN{4ajt1!jW)du5;<-j{@x5uMB{%S$ z%eQlTS@i8S=)_e``)^{(GlA4b+V%5i89*K(QBQ{GwBre{Fxf_S(fw{Xx{%*>l3Q_vSaOh zOTqu@(_V(~^msXbQknhmcGk-A+CIs|QfTEGQcVFl?RW>8Gel2{+* zmdYuHrD->=hCEiE92KV?OSg{2+YM#A6 zqhR!=66Ig5uIo^^5~NDmEgXEegE%SsR{l%r+_$cvQ|DWKqjH-UiBM`1sowr(X2s-r zWb>`=8Od;SUHiY)MlTQTN&J+V=Q1C~rlh;LA_E$c(w3(XhO~4>>c4z56O;ATcQ#a7 z(Xw>z{ts=1a}o-ckX)J}*H7PRQ6I|KncF9H#(c%UJy30;@OAr|QDL*}_9u%Q+e)Wp z5+l_+((RTWeEaA#bfsWuzWIZ6qWt*(+}ZXVXO$*t4%jpN=icJqn&K6b;lqg#Zkxsdr2kUUutw5=`N}<)0Cuy%*=}=-k$wBPrUCa*_155F8HRZ+)RL`WN)1t#aOe_N@~0I`2BCEs52uV*St)6!3D#G zSRbKP_dJW#-(;x&TKCQ|&9-gN<>x0yywV>8xY+!*mMpeBU`^c7Gm^a)oBo+RrkSdw z^GS8@TFL4!q@|73m(*q+`^V))>bDzRFc4>YD8PF!|2ZftF}KpRHy?O1Y^vGaQWdKR z`BusB(uDs_Mh;%6{bZ^;^Cde|JFjNe$%7BKZWXd#excb7S2QazrZR^TFZD}?@6h#7 zNxV-5K0k;hUV^G7xe-U3*}9#&MNx3ErYS|jF$WX%xvMIT66H4=my0CJPv=Cck0xe2 zsWrWklrBv8UpK6a`(dhEq&lvg7%3aR{2Z@(+Pc%vLh?0rB z>({8X(cn7967x0%)-W=s6C0j9T8a#lWy($nm#5@lG=ghtxf^YvxftRzL&x- z-v5H|mTsDfn|TfbHyMXO0b;X2`sP~p^8v{t`licGk>*;dzH6Uk%r|<@E4fOBS9x{0 zQI#nbE|Q5^$+Y7yDI3F07f0__q=wAgQ!|wl?3w=&-#Gp4Dqj@!O+Dj*uNdH~S+^*@ zX7bUu+ghq$5ZzJFLw2;Vq;!z96}`BN_>F7-ZDccO%Hl>8$&%7MqLPVUYh(4dKRKsq z-#Q%`m;8N4@J#5vZ*zxrJp;OOW_;R{BPU#1AAOr>C_i+CaZ-;|$L|6jQ?BDT5n65} zMTX#7RBNb_>KTcV6Tb!?=^toL`a5BB@K?cS9{0Ze8BzahpcL2^Ev`Ls%6{H4y|S$E z;Vd(2jOV~c!cD+Qq(DzcGF%D_8TMY}x5x$q&1cT~+YgI0G@f?m(BFQZ61lG<;)%Cr zW%C)&fZ?1OH_g-lJ676~R^FR(mplMmCGM`(ISBePBq`mZ>r|(zYkxjAa!0bEZt#q+ zZfkP(qJOf3+_*1QIq|z{HuLrnL>`D1FxIq|N9DcHkrX(ll=!_QyHzz&zIor?3duiC zNlMSgXUjf^{T?-wa|gI>K2tOr$7We3xDC@^_hQBxxt_~!*3{qL6j9tCO*X_xh8M}g zo=VjLbDU7meh)hzW{Ou_jKK1pq znKPTC7pvt#w9{Za*B;44%PF&|`}*6LzBWW|zhYi@cxz}=a75&z;x#G*I)Ze6LMJl% zA=H10Pz^OJuWM@B4@*~IleR>AizmvD2B98%chIUuna*RaB+ecce-5wN9ehT!GC|kB z+^3iWGf9uQnuF5m#%tD0PVyaf_0%p46uww?e)A_t@rb&##S{}~~Mv7NXfG7>O7 zm`ICSh*!B%kn&KdC)dKGGU|O(AJLiJA4)ia3?N;Fh^6<@nRg5%h(CE!kVCc67Cyp@ zdP(38%%#3 z!o??)OBiRZa6l4xxZ1Qu8%Y1jCG?mvK+g!^Pm@Y^LFg8`N%(_4fXEFL3Ro&9((Cu$ zaSPG&a)xFA|I9)vqh3!alHf*ze*%F&s+NI1+@%ZRFo3`y++R0b5U3_H$s;9T7WUyu z`=Gn_)^GAm7U3#g1D}Z<6o>A%($(x01(rMmna0pP{ZZZDtKH$k`Y7@3^d3}$^U3Pp zDig5#1fnmY;f?LSV=_t7J$I%hFW;(Fpx)BW-aUhD&KH%n>HeyCH`7DhPIJp zpu2_fH)R@hqL>9n_Rj$-3>xhI(5BxVPZ{G~X?T(>p?h(CofDmXq9xY=jbjJMBR9C5 z)@CXT+~y-U`Fa|_(%lyhtI>8Fr}rZ`T5@xe4_Tb6W2+xiMC)#X#~>*4j+{esY>InX ziWHCzaGA4hs^ZqcGU`_is1Q2rsZPpyi6T>D9~_1TiLeFkgiCLbF4GHp8;fD;O%VF`j!+iq2)# zY{4xW121XdtxuYDGdqG}dVY{`AKuJfl@3!kgWPj0nwxZK^)~cr5nkQ^Fa19b?y9%onD>?#6Ny^liAm_9e=^LO@<( zRS|*Efm3inbvsogylU0$0eRX`6ct;vP#sgqR3wC{+AE-nKV=EO6iD@hTiu%n~gez#pNnM90H}A16vD()uM_ z`x(Fg19k)~uP2I@qu+q>!{l6II?UCWN1=0IBrV%N2rxM$I`E_*GI{{p_QC7?Rs2Y4 zn8AH`>jQw_fo%=UX<&_%ctQx*8Gu_ixO*#oRl31R+e4~Hyxy;X*3|$FQ9TFFs&k1b zW%2uK5fbU05n9&~eb;p!d3o9=+i=Vs{1v@}EG;;~UR>xuQ3)FIx_Z z-K`YIml8_wVVejC8#jJ`R~($bc%oUl#gbXQ}jjW4FNK)wdIr`L{*GAR79Nssm@i7)yXtcw2V%zzg!fc;K`R1O@xoUlFX z3P#Tb{R765#6erc_l2**5^03Dfag^pYp(-|JK6Z`<=5LpJP#)R4fz|JDMw>2ZPu$C z2FRLx?CIWwIax1Xw1)s@?ByqA7UZ-)jJBkhpfb9+Qfsib-P^D>)kw$X0gQoDxDf!loY4rvZV}9|JI0da8&?%}yYFrp**4BjZ^Kt>-yR`CdHShGNFddzIPZ z4aoC{og(o7nLNr743|Mu0_%I2@Nep76m5HUjoiedMCU)4K=55r@mW^_LH ze-5i28XzX>151hLZWajqlw|Ho8rK65{f)M2RtTPC?71|35d}#LNrnt2sV{vjEKzX>%=N|OO za;`Ted(-E^D}wD-^o?gI!CDFHJ+u+EiQqT)k}8-w5X^_8-6>p?1qr&Quo5uDW$ppw zvR(zuo8Nya{Hwe!ZLXC?V~T+-zrCppvqm$>zOp0@j0)^PzuT#7!2yKt`gp5i0came zRa~71=o|>g*Z6HB`01n_|E+!hGkgx_$~KN4Y-OrI%R@dsf>hQS@srG$n4x6_uwC8r zCVQ+o!qiuT6%;W8Aj_CjK4YziVH6tBupya&c9!wVGJM;YiS2CtW7b0Ek9jDvY_2Y zuZ__TwZtS|gzW*O(ALjDg{7_6Bs%TkhpCgGQ9LhLP61+5BeFZRYe9R|%Rr_GVT$Nt zf&}Lj*w9h&j10DRF`O{knJV>L#R`oUvD(M@4l}ObDpqJ31UDM3==}A6IjmZKMC(mK z>-So!Co*ZLA&;j3!0qP;Q}ZysEPsgjL0!?2?cGv79^mF?gfm+6ab08Uj z)U^m;c!MWAb}%Eby8zZ{cH6mGn)G2R9c(t@b&1QMH%p2N$XS%e4|xhR3PP|J1FM3M z-mrRv1HTGB70$CL<^A^Es~RKrs)!(kUArGlF<*-wV|vV zf|(0IW5h9QR<;n<>A0}!Q|M!F;tMciIBXc5db*OMG2x*7TG>^a%%>zYGKkCIPnX{O zm>kAtv(gxd2&@3=l8M1Md@`n)O=z_cxaD{J2albtFQcWIQ-k5aL){JPHS!1!_k`fb zVkH>1|GI7`T1|YkIoXJb6d5E>JS$8;U7p!;g<;9p>%%n9bF=6Z!_)S=w7=l47~6>s z7G}OUyT{>#tbjwpy|F%Zrh%2WATNUQ;^2JXy?=Nu%YWHr5FYc3;SNIcxd|})OpU5N zfp*`AI|0qN=WeobkJR8EHHYT>W%bq69)Mziy{W2;_8!n8p%{$Nbe>P>AM%woV`7)> z*8kQlRtrYXjPw0MLp}=-8r@1T_mz6}?XsOnF%j#xHDKe`eRjrS7-tm57FsI}`eE7% zhWP|;bywlAFbU_tO?azFJESls!tH=&rBQX@62Dq3FNTwcX1l4i2$#qyg%LpF&OmeY zLOGpz?aeq78a24Tq4^_^wKttM(l*Rxnl8PEbK0%awFj6~d}T z3*6D$AXWk4SH9jn$m|Y1HPG(6^>#z|6QNIOO2PPTaIdvOFQ8SKBa+6hpb#EuD)OT9 zuW9`&#+;po*uX8a^_nYcm*HV33qRzKTEqyW^)qAWX$+eBAkf@|dEixxC!&^}Ya+!-k$_+LX?2wJ5lxS4y4ZY?Z1rxa1M|Na#~ z`)_X0-_hqoB8&M$O$ouGS@@d*`3 z?OAW6qkzax6AWb3m9vp22>2WhLtW`_;O@|Uq znX*G>i#$oX>cL5VX!a)u^E^UZfozWT6(;oS6Kz=vM{h^Lnj*W0m~M?Oz0csSqr9Bc zj34{5J90e-Sn+%1vwXJuDa01M1|N3GYS;9pl&XvN*8m9aYz)Jj~Pk%bSpP6FDmjU4+($QDx z>#2>fNNr#Wui*A5!kQ7YFz1twkSN9gso-u-=_C z_!9zm0o)Ph0Q@2FeGVD1X#f_uux@6QcL3yU;`wU}&2t6|;&#&q=v@K|Kfg%!q=AJy zg|?x2Z(<0@S-=Y4%K$5Q6OJ1hU}y!TFK>@w9$iQsv=5o!r9ncb2cMm0kvFA_uK}wE zA!SCTW(?zdI0&?XobY*saOl2WIw_Ua9SpGh@W<+a?}(be+Z_WT+>$^otAY+pFSgV7<+Jm^5Bn3f@9NOK zT0e&Nk(Mb-JR`@9e*)c)q$d^7*e9}b%-_#I_onMH8|e%&bIkZ9=)RDix{b*`BggCj zmnaQa&ug>xGd;&lfgT3`sL1 zfVpfI7gK*|v*EW!tD^e1GVf6tfa$FP_aAfe8e66uI2aU%^=zg6RQQ*egd=m1nD-~X z5+wFa+TcFuj@+N%WwBG>7#Tt(-2`qn2>ytKbBhjn^&~wF=f0tWjLRoMSOwhPOpBw3 zoV9Yb94{i=;QY|K3=Q*uG{sQS+dg&L#FxcM^ap+^kk>Jvu|qWc^8KB^ zizWc}{X)iwlWh|7(-gGs4iK6&`1)vPxTB@%_LGKe3cTMnpA}G01Jh-?J=>87!$T1v~CCGR=nDz&8(=b{TuBrfhVN` zc?Kr!MJ!HYB(3YQ+d;Jzy~njzO*p;|Tb0)Yo!>NcuxEqq?&7;`51(JG00Rs0=}DL`%Z#z=>pr=Q@~J(fr=dqRk@JHc2b6Bcwvx#w$k}^C3Xj!zSlw^ zoo_GYQi6R=SlxN}H6X0DGH)gM?cNgRnP_s#8vqi0Z(|QZ3S9u_&Oje;1D(rditj)_ z(j816Lqp^tK5>~CjHOv2c`dRN4HNu(=zOyjl|&DFVs=~8u06nR&1_`s1?-@#^-W}d z(2pC-h!dvk#2Z2ZkZyef4pnYrw5Wz=6iD$H*k|Mv&^pbZjJ`B0`Ial17rtVH89TS3 zg57+iL=YaIf#ahDL5VdvZNL%EgKF#0-ah;$blhpn0#`RN;oRgy=4uAa1Rq`fHv%sk zpE}f5ZDH>Y@2}DMUn@JFe~M*&V+9z{h5#&fd2Mu%9JcCzEE%F0UrhUMNyf62X7!6{ zdRAyTRw{x0i)n-Vt(kY0zkM+c?msUxwo4fJ)qi zdzl9C1K2_jNcqgDTns#K4oKAcDj3hJf+nlP85-b!z^fM60J^8USp~SjkrBV1Eb$jO zgJ0KLSwsV_@Xa{GBf+rhntLtmVi42gAU<~7La(Cti7o>+V<(H5dXr~Z{${K(>HfYJG1E02+#E65f zO#wSo5k)$7@PsghZi1^IimutyqsmmTMGP%0CvF7nHr|tG5x)Nop&8i+NMh~r1LIZf zK1-6|lyC%`#?hp2^i(HZBau%Jkey(fCOdmp-UzTkK0WaFBiIQC-^sJMp{e|zoK+=j z(cUwcFHNKsx{rUlcgT><_4|m9|!9eNkW)Ml>dvAE(dy zq5wO<$2hO4-DG}IU=@0J*!FNESzyeF5dbrOi3DV1KK)hobbSQVOww!)d;|-w4y^4> z_n~vxf3Wrhgolf=_vvj!8?pU>a|8j_|1AO=yAe~qstPzkXqRz_2i+r&VZ#_U90U#p z65e;Oh#>o!c!5)h8AIT_pncSnQ8N%MfMZ0twGTm81rlyCRQ?#35dE6_8bI$QHQ>X5 z48Ot=M&nEcp!XxBu=XU8@wl=W$+LH-2(CiBv&gyfvk z#H-OTg2HpmmCTdV%uAsGOFS>~L+v_nQ@kl}S;69fI{6L!Fc1L}6g4ScjozYT3CYkN z3+;-gJ6X{HCzt^0mAGfM^ocQOFvq_ z;jd-HegiK67!%7U3}Bvc+tHz3fXH^%?A!{CI1uh*j%=F6MT4VVgIB;ZZ7tl!A~&(t zIM}h)ap8ZlbPrrFxLqNLN|kXAYgVnK81msa;xVv^!QT~rQ@uxAO50ySck3(f*}4Oe zTZI<)p?KR{Z!?IYuZ_bJ^*K6sRdw9^t+|#D7**y;-~79}KLa*3%q?ov@n-BlOhMVm zXl77e?;>40sqW6U55!EH@Fs5kFzg znE}Ll9f^dzIu>KfK zf_b}(siW0fafn{7*MR1`g=d+~*q8&>?a-_Z&D)EKtY$a@ki)pvgQANhl|V%#%TvNZ zqF^J$xgrx7A;zT({kLj9q2+@doj)^)+`s9rH41Zl19?q!0^8^Hkm>Nd#886kkI%z9 zV0LVo&wtCgmDm$HtmnVv+XVJ}@md*3^TxFjev>AA4hiioG*}La^-q{S9j12S_CWKg zv74af>@UM`%FygRqmC>`OyY`WWS4P<(44ZkmcDyf*=3v)G&f3F`_qYLWtaCNcQdaz zHJLy$vdiF$(D^%tNZd>w8QJATFtA#0ws5a*T3U8lZy$6&^Wy1NW_Q2_$u92&1FMxQ z_Ib5C@SuYItjL4T_jmkvH(PfwTft=fnk%A%4SRn>mRT1g5q@oT!y(ul2S;-2cE`)7 z)xXu2y@$JuTSKl>Nu1G4Lrm)pN`9*Z%PpoCgqCAjQZdMc!KL8~(pn%GzW%|I$6kcd z*LZM%?6HD{+BUcY!d+i(S}G@Y73>S)H6V z5xqJ_r}<7O3lroI#uduhO#Lc)v2I16fm-H!70*+RGCY2uLg zq|xXJiw;XYr$2kbgAzL+0*4I_naFc{_A&wZEKNEB0}PKtvaI|_D(k36dWjhX!svC& znon6oV?RrfcC+f188jdqAy4X4!T8hamf4l}^De#O1I)T*<`#ni@MU6^4P z%GDX`rinq`^1?%?6T&~{Sk)Q$k`p?AH&5ajKqArrZWHJO;57*+`Nw&whX`2sChT`c zz-|Zud&c*xlJqSXse#{18vsJVT=`*qhEcYJ--i88Q*;54vsAvFCetRaHz5zefRrR4 zz1qV7(i8Oc$gi+rS_J$hApNt}uaaer+4e-LVm&RDvDzxy&@D#9Fd-355 z!yioi5M1E62&w#ft(;4n^j0&`a0>x;PAczj?tM6aw7}{BIC!GW%Zv=5sPjErMGXEV zuo)r~_ZrxQThnJuePm>o4QZA?cq@+K8kw18`kg3F2`x^G7*;dObUvB&Fl?D+x@bx< zzOcdAGs|?Opc(_-`uvtzrjbr;=NW(x24a`hP$<;ON_WOR4fta%a@t>mTE { +}: UploadButtonViewSnapshot & UploadButtonViewActions & { defaultOpen: boolean }): JSX.Element => { const vm = useMockedViewModel(rest, { onUploadOptionSelected, }); - return ; + return ; }; const UploadButtonWrapper = withViewDocs(UploadButtonWrapperImpl, UploadButton); -export default { +const meta = { title: "Room/UploadButton", component: UploadButtonWrapper, tags: ["autodocs"], args: { + mayUpload: true, + defaultOpen: false, onUploadOptionSelected: fn(), + options: [ + { + type: "local", + label: "Attachment", + icon: AttachmentIcon, + }, + { + label: "Fun Button", + icon: ReactionIcon, + type: "fun", + }, + ], + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const WithOneOption: Story = { + // No visible difference + tags: ["skip-test"], + args: { options: [ { type: "local", @@ -40,34 +67,28 @@ export default { }, ], }, -} satisfies Meta; - -const Template: StoryFn = (args) => ; - -export const Default = Template.bind({}); -Default.args = { - options: [ - { - type: "local", - label: "Attachment", - icon: AttachmentIcon, - }, - { - label: "Fun Button", - icon: ReactionIcon, - type: "fun", - }, - ], }; -export const WithOneOption = Template.bind({}); - -WithOneOption.args = { - options: [ - { - type: "local", - label: "Attachment", - icon: AttachmentIcon, +export const WithOpen: Story = { + args: { + defaultOpen: true, + }, + parameters: { + a11y: { + config: { + rules: [ + { + // Menu contains a header which is invalid + id: "aria-required-children", + enabled: false, + }, + { + // Menu pops open by default + id: "aria-hidden-focus", + enabled: false, + }, + ], + }, }, - ], + }, }; diff --git a/packages/shared-components/src/room/composer/UploadButton/UploadButton.test.tsx b/packages/shared-components/src/room/composer/UploadButton/UploadButton.test.tsx index bbe3d70605..13a754b997 100644 --- a/packages/shared-components/src/room/composer/UploadButton/UploadButton.test.tsx +++ b/packages/shared-components/src/room/composer/UploadButton/UploadButton.test.tsx @@ -23,7 +23,7 @@ describe("UploadButton", () => { it("can open the menu and select an option", async () => { const onUploadOptionSelected = fn(); const { container, getByRole } = render(); - await userEvent.click(getByRole("button", { name: "Open attachment menu" })); + await userEvent.click(getByRole("button", { name: "Attachment" })); expect(container).toMatchSnapshot(); await userEvent.click(screen.getByRole("menuitem", { name: "Fun Button" })); expect(onUploadOptionSelected).toHaveBeenCalledWith("fun"); @@ -33,7 +33,7 @@ describe("UploadButton", () => { const onUploadOptionSelected = fn(); const { getByRole } = render(); await userEvent.keyboard("[ControlLeft>]"); - await userEvent.click(getByRole("button", { name: "Open attachment menu" })); + await userEvent.click(getByRole("button", { name: "Attachment" })); expect(onUploadOptionSelected).toHaveBeenCalledWith("local"); }); }); diff --git a/packages/shared-components/src/room/composer/UploadButton/UploadButton.tsx b/packages/shared-components/src/room/composer/UploadButton/UploadButton.tsx index fc259c07c6..956e667df4 100644 --- a/packages/shared-components/src/room/composer/UploadButton/UploadButton.tsx +++ b/packages/shared-components/src/room/composer/UploadButton/UploadButton.tsx @@ -23,7 +23,7 @@ import { useViewModel, type ViewModel } from "../../../core/viewmodel"; export interface UploadButtonViewSnapshot { mayUpload: boolean; - options: { type: string; label: string; icon: ComponentType> }[]; + options: { type: string; label: string; icon?: ComponentType> }[]; } export interface UploadButtonViewActions { @@ -41,12 +41,15 @@ export interface UploadButtonViewActions { */ export function UploadButton({ vm, + defaultOpen = false, ...rootButtonProps }: PropsWithChildren< - { vm: ViewModel } & ComponentProps + { vm: ViewModel; defaultOpen?: boolean } & ComponentProps< + typeof IconButton + > >): ReactElement { const i18n = useI18n(); - const [open, setOpen] = useState(false); + const [open, setOpen] = useState(defaultOpen); const { options } = useViewModel(vm); // Ctrl+click is a shortcut to selecting the first item. // N.B. Clicking and shift clicking is handled by radix and @@ -68,10 +71,10 @@ export function UploadButton({ vm.onUploadOptionSelected(options[0].type)} > - + {Icon ? : } ); } diff --git a/packages/shared-components/src/room/composer/UploadButton/__snapshots__/UploadButton.test.tsx.snap b/packages/shared-components/src/room/composer/UploadButton/__snapshots__/UploadButton.test.tsx.snap index 3c28593c3b..afdb980723 100644 --- a/packages/shared-components/src/room/composer/UploadButton/__snapshots__/UploadButton.test.tsx.snap +++ b/packages/shared-components/src/room/composer/UploadButton/__snapshots__/UploadButton.test.tsx.snap @@ -18,7 +18,7 @@ exports[`UploadButton > can open the menu and select an option 1`] = ` role="button" style="--cpd-icon-button-size: 32px;" tabindex="0" - title="Open attachment menu" + title="Attachment" type="button" >
renders a default button 1`] = ` role="button" style="--cpd-icon-button-size: 32px;" tabindex="0" - title="Open attachment menu" + title="Attachment" type="button" >