From 63b8e72ed81e48fb1a3278ca2b8ecae8ca88b6e7 Mon Sep 17 00:00:00 2001 From: David <33458145+davidmcpowell@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:52:28 +0100 Subject: [PATCH] Merge pull request #27040 from overleaf/dp-file-tree-close-button Add close button to file tree rail panel GitOrigin-RevId: d8abac122e266922b9ca914bc5df6ae7895b3796 --- ...alSymbolsRoundedUnfilledPartialSlice.woff2 | Bin 5112 -> 5168 bytes .../material-symbols/unfilled-symbols.mjs | 1 + .../file-tree/file-tree-action-buttons.tsx | 8 +++++++ .../components/rail-panel-header.tsx | 21 +++++++++++------ .../js/shared/components/panel-heading.tsx | 22 +++++++++++------- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 b/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 index baac847d54d56c1d17754de133b9f630c59170fc..260d4c367026d78dbd1a1eba997a33c6c2030afb 100644 GIT binary patch literal 5168 zcmV-06wm8-Pew8T0RR9102D9)4gdfE04o>(029~%0RR9100000000000000000000 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 literal 5112 zcmVfPew8T0RR9102BBC4gdfE04jt4028190RR9100000000000000000000 z0000Sig*TKKT}jeRAK;wC=mz>yAZNL3vvJfHUcCAas(g+g$@TG3Q=58Vk@@)f$z*I#}nb1#{l z+g_SInuP<*78mYX&TfI&5h|dh1Sll2>Z=11w#roq)niP}b76P3iQ_Ad;0386aE|Wx z|3VOeMV&dwWtLlI9h_aZ+-El&R3bbp1njlTj@x6N_!lD;1CYu_Sh-696QRr@CZCii z$i3tm;!klin=m9>bs;V>Y6Q$jnE?Z843T)~`0k7M=@3$;N|LzSdOqs3F1$uuM8aas z(_G6b?8OEwL66cihw-@~RyUZgtf)07dGS=Ip{_s%X#k7{mLf$jOjtlBb4Qgq1WX!fl;m_oMq?l=jn1+{+8&wT zY)leYj)WscqqM$6Ql<_xX%cJGC=ZJ>&{!qXETISqv+bB}jWb$)_0^Z>VS+#JRD;RI zpf=ffR&I^*u<|eobe0UnWcnToFb{IM6<1lM&IvBR){@Hzf!KYIy$=!+x&QV%>?0IE zph^av)1Xoq;tY`YqxuC>#4ilz;*<-ykSgdzKy6i=^R#Tn5@?hNn3v7jkv%x@WAX8h zA3yZ*kDsji$rhik`RTTwKKbeMpWXP`WnRm4Gt=oi-Mf-^B`;4NV!aE-nh0+BOs~ai z;)e~aj-G*mAVHCW>6%U^B*_9G?g6H2Dp|j{5-}00X{4c{BhgS(Si`IiIieDqsDwhP zQ}SR9Q~(MPNfzYcluCXy-c3*yMNz7j<5-C~NynM?ZPzjk)pcFhu|3F73EU# zcCAn_icr!k!55&?paHUp7&Hm%gd9lJC{@H~RMQnH!GMqT!zQS*L4z7mL>+T-5gM35 zy%UHK8^}yBX`3*A8*WCz36-z_3CA7ny?<*9W1B(Nf34-jN19RCx;-`Aq0*iBpBac2iP-y`C#VjIjtsC3n4 z&~go|uu?%22tj0y7CK0cs}B-LPuny%v|)@&<$|xrqKOCJtk<`Nv`$CT#=KjVwk!- z9S1q)TuPQ`uwb!>oM%w4z$IY7_wHqUFI)o8IJ=m!+9#7uWJh@Vj17j?e^Pw3&)0)5 z0F3a<4y^BUqDc9`WxJWX5Hu*YoX(<%w=iy)-l7q9TtL!%ZiM4jPuT9HqR~q54`}k+ z)0Gc@CyID&M_**!J%1fZskQxvb}X!ZKap-4 z+Fl$xU=Qk&lSp^4IG}Ax%#X8y;xk%gQP7|)Pg4wI8`GhD)P(V%eVD@sk}!-8O^Nq< zM$3jznORh+f-@0FC_wRhj6S>pP#@#&P=z6YM~(DIj!yngua^!PCoRvdG` znuhkpSXlR+p(AA_XgL1TC%gI>-%rNf+mbPL+`Tm!n>&MTZ~4>RJXIsm_7*?h$kchoocr=BV}xN7!-sL3hB^8O-Kz8lZ6F^Xpw49n8M$DFW`67!QC(4c z&GWc0BFuld$gkiyP|;A3?RIt=36ItTxi3TSY|(j%Su-S^ph4=pnD- zu-Aj#TXB1DbmCpKXB*wpg;lKL039%g=nxL#prHo4y9IBn;(+48)dUe#k$-P7rStE_ z*T?*lN%HJd&CUAhtD|52_w-xkw<<6E@Z($kKfYXft6Y4ezn7eTantCg{~sD+1cnjV z{8(%V6vO#{9N6$KWT7K{7XUy503MKc4y1T#1S9%$y)MrIcfm?0U>lfbFso2xD*!33 z{YoRymZ%I<*;ESXiAm4PfTHA4ykTk-&KwMB3v{QMLCgs8Bb~GW=wOY=C<8V%USxcHYkg?g>vCdAw z6D1$#a6TM%YT?5$Dd+lvUkU)==VoroO1mq~q9&we1w*9`?N8eet}2^WhHQ))V&p>s zEUpyEb6}zAegFu$BgF`8=#80%6g1$4-<%Zsg_;z?Fd>sDI%FclObVgsiTPF&X)0ur zY2vbE*Oo0^4^wpp{B-1T@n#yR@*%Uf+QKphIq-L zO}628{t>B9O0>Uyv}Htd$&oADCa!r4?zr@&!*0EFDavx{c`S!sKX#?&SoFpL=BZf@ zy++g)7XR`h~dCMG6Ig?N`Zix=9SWs;>ZHmT%% zbkqvS?QbkyyOr;dl-5Fs@+xHEKV62O*h1o|*#@fdvs!j%7l&JFo=nDBJWKmC)7s|D z;i)XAG*fR+kcF$-9IdS#+g4>g7|FLqVXN>QROIhnzZ?ovL7ZCHb$dtscCw>0I&90Q zCA#VtfSNbgiqT}lj_N)QZNt{{sTQ^}On!a01vVSFdbatR56%tPbqa+s0BM`vaN0Cq~z96TTkRJ!MM z+xB2WY~v>aMD5|o5#q>^f^0p#%F(As8|&%W7aToGBq3oKq5mG71_$4`b#@Si9UVn; z3&CzMLO1IVx&Oyixg2aX$?iH>Onn&{3+hcn-`Ohk{lPYqjX*AEAPYSymiE>&NVo)m zZ4$PRT6RCo<}fN3EYZduEg=gTxtus`vD~sH6suR2P>s*Jln>GEeO$o8A3!R}7|dWw zl%$YMZwX2wg(R8DECbR^$9e}R>x~lq07-()9kb6promOG5dE9_bD1qENfKmXz(tLX zsDp!PtjU);Z54~0i&_#TzJ*R7NP)QE$em@&25NtM_7F)tUJ?N)KRx9#u4TOpc$R=o zBU}fZ4TUWH@ra^?8cmr(94tv$)la2n$^ zzO{9{vmP&}F>4@*F6i?_w-m>v_jX7`LZ z=ZA;u9CZSngYMs104{P{rl7_HO=dJ638oL9w>rpLGj=XBH#RadHea?gBmZuD{xHGR zL&KoS9yJ2G=8rarv=!!zjq8M<+((nbMXhyV1g&l6Be=p{c2%+eH(i z1kuqHl=*4%AjHkCUed!e-Z2jL{Op;vzH{*6G^=HA@TU1STOkP=x4NG177t1XAq@wm zs;^H}HICC%ah^(&O~5&D`C3R{FyF2!^e!Ik{9h4Ry*8g)TU=kRC=XcglIZN32+CG{ zny@IYG$?{NH=-?;dKfC&%*dsq4kjjtdix{?CLZLiC&u}@dB(XXuH&V0%7$G_Ms&X* zE4r^GeZww=+pSUKnv$**CU_X>lVwIKS_ie6=ZE{1giU@tFkn`!C}c--{RL8CshLf# zgBqad-sOMy?N!|S@7`sbDBJd9?L&&g$6DKMLD2^MYhQ?XqW|wjgQ7Y7C%?5uw{pNx zPTRI_PvsBfWrp|FWh~hzdvvSSJ7p$a$=e_0o^6yTZ`ONjbY$tX_F=)G>guK~uU{e7 z^|2)=T43dDl}%@Jow?xhnsl0YJYJJd6Au(E*pA*Bee&!yb)h2CL9zt#IkNID9|d&% zzp4U)_pfR_o&GwI5dZut>6ce|gwtzKbgoM<5x`2L^Ed&7i3Hy&?|ZuIwA$&XyY}sU zy62?Y$)|hv#P(fipH!Q?(9t(=zI{q<>OvbRTFSLZGttRCp38NMPjV{Kbfpzi>98)> zM%mNO+RDIX`vGdkp%fRw1r3KP~`?v>o z9rSRsEO8xRx2qR?(ySq}%|K7?p=`88sInM(-Cmp@@V{IyoYc#{}n%vGP z$^J@!lVm?XpWjR3Tji)>tBSbb#>7@ZYwvNYw)&*FyEUUVF{rU3ZpaG9iQ`9#xv%|2 zM4-s`wea*2d_~+kk~7YnC+26F1xw5&VrZC|ed|c}qTB`I!GatVPdCZ)T?Tek$>;ej zkv`JfRUNbiBbtNzOoMHOj;1LG5`>!nh1jmy$3~3nReMIJ`G+QFwtLKK0RVu7FT>9= zEKA&@@>Kku%Q6?*dg8~v2fxOKKYc2BD%s6?!1@SSLV=Z=0W8uD#=0tbDtXR&AfR=P z7_6(fi>r8uslZB-DV7Y@t4@-Wbrs?#()&mnm+4`ZMIq>pQn8tvB}PF=!e1ZS8%_`c z(1jvoz(G_$dV4drV5VO5Rkjj#EZ3wFa;}GDjHNLQ_%f1Wm{4Yf#jqg2@30_Cw;)Ce z`WR>@jWC2rjBhp67Z?Nb|BV0;!-Ot$32PY_!5A`fZW%)XiU8suMhz$kAwoKeP=*qe zq7Lz>LLJIbz^%@k9jifEvjLOQ3<~)WdxO>@31ZZv zva!Dqu5iZ8azqkjm7qTK3sHkKQL&bNYB4IohATMmhC6(a$HivjVlyY3b&RdSd*5>r ziFm{#5?sZjP a6`@uI((pt$3(T5TbfN~HWk~vu65{})JF;8= diff --git a/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs b/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs index b2c1f72eaf..da5a97585c 100644 --- a/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs +++ b/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs @@ -7,6 +7,7 @@ export default /** @type {const} */ ([ 'auto_delete', 'book_5', 'brush', + 'close', 'code', 'content_copy', 'create_new_folder', diff --git a/services/web/frontend/js/features/ide-redesign/components/file-tree/file-tree-action-buttons.tsx b/services/web/frontend/js/features/ide-redesign/components/file-tree/file-tree-action-buttons.tsx index 59e06b00ef..bcac7c4ba9 100644 --- a/services/web/frontend/js/features/ide-redesign/components/file-tree/file-tree-action-buttons.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/file-tree/file-tree-action-buttons.tsx @@ -6,11 +6,13 @@ import React from 'react' import { useCommandProvider } from '@/features/ide-react/hooks/use-command-provider' import { usePermissionsContext } from '@/features/ide-react/context/permissions-context' import FileTreeActionButton from './file-tree-action-button' +import { useRailContext } from '../../contexts/rail-context' export default function FileTreeActionButtons() { const { t } = useTranslation() const { fileTreeReadOnly } = useFileTreeData() const { write } = usePermissionsContext() + const { handlePaneCollapse } = useRailContext() const { canCreate, @@ -102,6 +104,12 @@ export default function FileTreeActionButtons() { iconType="delete" /> )} + ) } diff --git a/services/web/frontend/js/features/ide-redesign/components/rail-panel-header.tsx b/services/web/frontend/js/features/ide-redesign/components/rail-panel-header.tsx index 94ac2f42af..47d45c6c46 100644 --- a/services/web/frontend/js/features/ide-redesign/components/rail-panel-header.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/rail-panel-header.tsx @@ -2,6 +2,7 @@ import { useTranslation } from 'react-i18next' import { useRailContext } from '../contexts/rail-context' import OLIconButton from '@/features/ui/components/ol/ol-icon-button' import React from 'react' +import OLTooltip from '@/features/ui/components/ol/ol-tooltip' export default function RailPanelHeader({ title, @@ -18,13 +19,19 @@ export default function RailPanelHeader({
{actions} - + + +
) diff --git a/services/web/frontend/js/shared/components/panel-heading.tsx b/services/web/frontend/js/shared/components/panel-heading.tsx index 356fbaa904..08952a5fd1 100644 --- a/services/web/frontend/js/shared/components/panel-heading.tsx +++ b/services/web/frontend/js/shared/components/panel-heading.tsx @@ -2,6 +2,7 @@ import { FC } from 'react' import SplitTestBadge from '@/shared/components/split-test-badge' import MaterialIcon from '@/shared/components/material-icon' import { useTranslation } from 'react-i18next' +import OLTooltip from '@/features/ui/components/ol/ol-tooltip' export const PanelHeading: FC< React.PropsWithChildren<{ @@ -26,15 +27,20 @@ export const PanelHeading: FC< {children} - - + + ) }