From c4eaa199e4a8f19670d3ceb7b5fd7002e9836cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20ROU=C3=8BN=C3=89?= Date: Tue, 5 Mar 2024 10:03:27 +0100 Subject: [PATCH] [3187] Fix borderNode creation to use click position for border placement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://github.com/eclipse-sirius/sirius-web/issues/3187 Signed-off-by: Florian ROUËNÉ --- CHANGELOG.adoc | 5 +++++ doc/screenshots/borderNodeCreationArea.png | Bin 0 -> 21064 bytes .../src/renderer/layout/layout.tsx | 9 +++++++- .../src/renderer/layout/layoutBorderNodes.ts | 21 +++++++++++++++++- .../src/renderer/layout/layoutParams.ts | 1 + 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 doc/screenshots/borderNodeCreationArea.png diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index cdd41338bb..db371e650a 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -158,6 +158,11 @@ Thanks to this capability, a specifier can easily retrieve a variable overriden - https://github.com/eclipse-sirius/sirius-web/issues/3141[#3141] [portal] Make the header of embedded representations sticky so that it (and its icon) are always visible. - https://github.com/eclipse-sirius/sirius-web/issues/2713[#2713] [diagram] Enhances resize support for list nodes - https://github.com/eclipse-sirius/sirius-web/issues/3120[#3120] [deck] Provide styles customization in the Deck representation +- https://github.com/eclipse-sirius/sirius-web/issues/3187[#3187] [diagram] BorderNode creation now considers the click position to define the border. ++ +image:doc/screenshots/borderNodeCreationArea.png[BorderNode creation area,50%] ++ +In other scenarios, the default creation position border remains the eastern one. == v2024.1.0 diff --git a/doc/screenshots/borderNodeCreationArea.png b/doc/screenshots/borderNodeCreationArea.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ef1390a22eed7052bfdcda0c14edaf512b5e79 GIT binary patch literal 21064 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⁢xkOYx{e zw4tyO2&gH0v{1ky5mP+4D+$AM#u6nhWY$w4)>BdMn!B=k=C8dodlsHxcbwkt2$NkM zMO6<&ga$#7rttl513Ez6zNtG(x^>MYAe;v{RjX>PgW=W)w}oyU@C`rMOCJJ-x7T{Y zdqr;yMY=ygx@nM=dr8=SDUaf$rQT79i-r+fYO1pb_?`5W!+i3d{Y)g3&c0KqdeR|* z)Wi3W>x&A|2(-5Mc6M|L;TqxcXX*h(ZM;BzIcwnHPb76759Hm1v-NOxT4OaM z|3+-tL=UtV;wm1F_mQi=f3p7(?{yR3yf$C-j3l}EW9v%F9{bL`pt%6ky*u#491#7N zq@Jafi9``u)1Kk%yStdL`sAHB+zS@JmnIg9CaQ@GyDjuh1QdtfGr!I@U$|>}+i|cL zGtRo0)1Wu<45(=S*&m$nto>usv9I?JXzEwJc4<@lhLKCU(;zZNwaB)zI*cZs;bjcJ zS7n#XEQkv0U3bplyWYYMzbny>J=BpRlEKQ*>MNz8i4v7S>ua~nsNh8)cwa(T`AbL) zAA`}Voh&ZK<=TFEs)as%E|8B)2sh?FMaVV_Td|)U44LN;>a&)TY9FBj%Xs%v$v(BQ z%@}W#2`USP+7}bqOx%vt1ES!dMX{}#L8XUJE?&gmGl=$pb8=vtInErLtz`sA#EVk*d`ru)i2>`&?JK~oELU61x?nimzJ zKhmQ*@4LLL5bPAo&txUQJ-$p% zb2$V`{JD;MG*}Spx?7fhHL8XLP{Ml)6bEg3c+o{|UZVr-U+5irp^0SDy>0#TH6yP3zKQRp z{;WJk9gNOQ00rDe7J_j46FCE!=kio74T5tp{RGiS{$A_%Lm$MMtm_21HJJ^X!mbPu z27T+b7Al;LS2*^-b`{0tnVCfa!z24%a3mHkglkcAzr!^rXaDEEvC@w#@xqq=Wen^> zxEbR_Pi=lp*(g8gn?f@x*u|>vP)K+8FOOB?gXbZ_f41x<-w#3YliIJexOimQZE@u<&<$rMDy8Cg; zVy8$Tde1Lk9>~K%_z-6DVCx`~4;%bi_?h%zEoS^+v8n>gS}04!RsooSV5;iHgYaus zb|yr+>S`mxCG2q+Y-Q&WULQ9V8M=tu*>D@66v}ScTXn**8*cFo%d5YSwzh(zt8ac zm;dg=DBXh>E6P59re#wQ*J{NGn#gH921!(5LaFy7eq5)&E<#z?*_nU=>7nEs^yKdS zU}v!5pmF(y@%xuzeh35ko#aiNr&?N>@2ffdnBCnU5A{CZp+Fx=a8c-0!s63RcsB6| z$Exx`U0K+en6w^}STiKMhc?1Hd;wGcj2J%W1I=Sj5SimhrIk9zF!NOW1yAfw-u9!9pY_&5QPHVEhb15%5jVR z7!3Xy`&i9br5ggP1Cq694E+6^L4NKbLurgH2{A!nH&V~y-pPiU$Z<3FAnje><%Uh9*fSetXpR@2yomO_x@pJ1hz_les72U+S^ars-31-+3x`>A^pCU>!_#6DdDxoA~$j%z=7)W7dhhQwixx3;y;szvXlXPcxK*$<{= zjdQ6@q$Zo+=KQ;9WKgTp(mDz64HwRkZ&x(`v~Jf8(2fXR*mc9FUGF$YJ%h)9F)cZaRN6I`ojJ&;QvzS`JaJ|y=xozeNAfV(_ECuKA0DP7k9 z(IaDkMGjU<5-~AO^J6>QzoPdWrWPad!}BBIKvD^gaq&;@ESR7k52WXby34f!9{Y+{ zx5MC}{&9&u5v}pJfFHE5iT|zdI6U8T>zKO`4Nx;yB({fau~pMOsz|$NLg&Jz7{SBE z6fcq?=|=gh{bX-nhN>~yodwN9GKp&cEoA!>P^C9#3f~^41l7(&tPfP4yalGQmIq0& zXl#@Q+-UD!{)?M@(g0diUyO)rLF#J_!_2{l&ZORKMUYt7|^FtKW zK+%7Uw3|ua6q@xVG49;ppSV-p>W2&ayP<*kdI=ObE`jyuK^B2&Ly=TN9L;Gn?9EtQ zp$}pJ5Bei?H^{|)oI;K|bKGaA$~6?4kmctE00Y{Puy`I2vsX{WwTQZ}Za?%$>T2^R zpbSfVVrrmVdxM)>IZXBm!}qdpSxt&ahKPJRMJ8dN*MQ-`t6+zfx@O&$~MfvB1c z+q@j3yjYaoT8=%?&yZ{@u0-jZ(qqe|ssIO}T7*KtPXv3Al*aaN6%ujFr>W!0<}|bT z`05rYTXHJz)*KA4LUdNQ%NkwjAOpaXG^&El7STH=r;6;P;p7bsj5u* z)=;GQ28D%@|1#(2hX*Jr&vn-BnGSX1Q-FAj&F-z%8cg^R5q02vk=^O{Ki%wJmbW&Z zO@rE3=rbA*a?#M zZP8<*ZNR{DvbcBCz2bIrEuue15A#{yaWL}`T%qkPXOmo+jl|EdZ)NMD_R?bbr$=PO zJs|1OUVByyEeRzn@t8cD##OR$2PhuHYQ+MlMjh zk>1U;9e%wruOyEuVj?a4l8=F(h|3dymRAo$SoV__`(`f@ewR9;K;KIF7f1vV-}-HC zznY(b(xtq?3UpWJsL%T0mp~n~=Qt}y`g9NIc^jp7qbbE_$t#M7q@bIev*GxM5rUJ$&J#wv$W=Svpo=s5&Pl@ji$MfI28m)zHs+g_$t< zHS185E}Tj9b@DeVUPgZsFt>0sEO)Cwx%M*bG63nPK(8%oQE;k-(jKt?lE*uE>__C< z?Ar_2yX)x*GH3}wy07Us)t^k`)(>0cDB3D~MCcj>PCKYOP2$#%6QoZ*FZcyy#jTyW zh4n7ciNzjF!H7wZ*Rrzx-p|VF5~&I6C4#*>s3E3b_@euQESsuICcTi>2kb*Hpa0K{ zDlx{1XnPW5NYhLJ6PwsgKBx5v2^1+Mb>8cxq(SmG8lT<+vp7zHUdvOpI# zan%V3#fBtgY4j`hGVmdTrc>Vxa`e17cnvhYh$hWUrcSjU9Z4G0wz+eTc5xzF-vjfo zz$(Tbm+`JlMC`HRU$9+Gkj>X3q1-gZ8e-jo;!7TdV@aVb;|!wRcS7j!(tn(!i(VUs zUXjc$>x>oxF0^6Pjf5FlI)IhE|LFUDoT?2!b-9HGD_DT0OjQUH*b}on6m)f)@SOM*s$S~gI#Ri#RFW4kVQ9&iS}A$kyZc4^F> zb}OR#B@7Q%lMd3xCyEq_+)5Dr<%)O~2s9bpdWjOqOmVZb$#xhij5uUcHM@Hggw-u9 zE+-S9pf(Vrqn*Q<@Q?)){Ej6m%Qh_{l+bgDms3^c2A%+~RI`>^ODp3Bck(WTtI&=l zLGm7(2pF7*x(JnXCsk@wmRYOj@@^o#Uhy14o5Od7e@f4__L4iKm1<2Sp1^}3O4hFL zWXq@i7>|VtP{EDjHhu#>jMEjwOJ=APqjLQ|+F+ZcV^HFBrK}u!Mr@^{Y3*y-<_SjG z#sTi#=|GvrwO+$`d4uf97~}BfcCN2+=Yy!n@`txfk8EyWE=*%xOFls3{6%uA`5@Mx zusWaB7O=vSsr>OR;_68@5fE>CofI3$A&@Ofwn%3Qo(({}iI&7u9OA}idBv-h+b)ya z0))--rbz~&?DHSOf){yhBt}*xJ;fyC%EVC9fh$Vvbn3&uCH|9&{Y`jUCok|+$Htjd zWQGDZkYbZf51ggvRAOZT^iU>^6?Xotx}ZF5+m8oS7zlc>cu7D2ATd8mP$waT*Tpt! z1j<;TdkoU^pSvmp3X=SrGex0j+culN2er>iIx#N+4*YrL#o#kdSy6>B-tfbCt=dOI zMgIokF+j4>53XCe5^{cJZ*oI51Il$rummhKazWE~(oxsq%8QnnB8Ap%H!S)t7pkew98_W zX@~mpNkO_}=?g_w zZ^UU=f#QfP&-iq3>6&Yg5V-zNIl44f4`$OSA-Sje5tlcm@w$QG4PM%jkK$AC?1)#V zhvR-{vxs{1%s@?tPFIE-`RF167+2ODEb^4BmrUTP@TM`6%FcVeiDUK?D~O$!&uE7} zLS?)~2*(ka+*7psujkmBdz^${2og>w?44dM)9(9m8PuOw**b9!eZT}+fPA(=$k{4w zhHAitvY08iDTBY6EQEP48a@Z*GLC;dw_oq9RgpW3c<1?^@+`}=wzNZH1o?T&g+e%r z>eYgG|Hz!&vZO4ytS1qHI34r(r-_N}Av*$Tyj6a+^2DMR!^*C;CLq@!)m*Ipn`a;s zG`K~q!NmMDOzu`o+GX@=g+YRpieb|l$J(7-UxQ?GyC6s(P$NK&g3j6Nt6W} z?o{HJ40QvC(rOHlqe9@pk$DfCorY8F`*IhS-vANGIM<1^dnh2m=avk|l*QaD_FMfI zYuM{k+TJZo-gQ>6Z%`k55_d~;tjfH@USvD}NH(hDl6~DrTfLc^dez1p(O4$fuhT!5 z?~hHCl}WfPMVIMIkt-I}F|!$U8BV2?;5mX8R+H%`Ncs5qSAUa+dpe{5Vj`Q)6wW5q z4L*seX*j8QpfG@#xzCo-_PP-|=ks6D!j?8QHFam-G3S*TV7%mOmWxawOm-s}{iQX9 zgLbj>5Ry=PjEg)7<28>=RSuh97MlCnR)*+L*IEL3p&MA8klCljWwkBB36?5ezJ&ShP4lf=K+Thu*B4h`+-~|1^ftU>oZHQ5=O`Vm0P%GXf>s8>qCYOVP)7b$|eH~ z483`v5CY(+0~+G9#$jr#u+z4eHzMDp=ap2~6=0}#IZYMO{A)o8&j&63*F%B2s0FvsVhcQLup==|JN^KA|;1)Bmd6h(pXZc5rA=y(QKX9<7 z?%9ikTV)VAmjV#8!nFpP0e_0NHh|3M<;|uCQJkLQFL2iR5#y-IaB~G+a-zpPp!Q(f z&vneSL9TvZy6jF+8O6*SfSuh_f_hMcE(ktvrck??idB^oe4?WfkNeT=NNHb z(ETH2@$@wOkOHM){(%14E}@a;PZ>548%KHLZ~vt)s_<%E(Wfof>C47Et5;-xo298z zXmdh-b2w!&pProsCnl2niEB~-^~Tt-LpA(=MV*8J-?Y-z5VF!j1fG%#7 zfYk{}q2L6(31!13d#TDCi}VKJLS$p$7#BJ;%^AX1gZ?i`*+BQ*AY6%b4ygsm<9s&l z=!-!Pez-|4e~M6BiQ~xPvY<+tUuCY)4G@P;drRMr5P~n~>vU?yyF)Ai%n^;y6%8aij94{rX%99GNdZ%dG7{ZaC&i?TkxL)V)P#g z2_+Qzt+F6&<_@eOpZTj7359@@r%)me2X}xJ^|1(^Rsy&H@TV8}NAnaU339bEs9#Pu zBu#qnJ7XY543&0j^#gi&#`vCFcwwJ(s5D;31(`^3>+>N}xI#O+(gn;wyMo z+%q({&OHs>~w^bs`}^ z6u&HFRj|SZu=1sH4W;jLURf%qYV={XEy4`{^Rc)JbK^vTT)C!&)F|lA1i9NYX zw9ddjlLMMKPKGQ6^4Fn#`0|yn&7s9L)uQNj3`Gc}spU$&A6?VX!&W-Ij9YB|v4)9L zg(UoqFkY=Lu!y6Z+s;bLw%HNB^-y<8+t*R#&`;#utcZd)4-X^?t(PiqmC*)V$UF7- zv@y;v%?t|#&63PxT;;eX>GJ*PO?0UW`C^33sRWM6k644gi=ADXxU4uR<@v7nCN2I& zGN;=W2%cgG%I}(5mVF|kqdPyq?!T^^|cvc)M)9r>s--8XnJ+i-S zA4`T+Bj70;&Z3MR#Ogg3#EEdwO=QNFVLb@{kN?qAVY+)JE-Rj~TFSVL0bq$}^C>zT zVM@dCv2rbEaz|Idx?>b_2W=Iu{ zkp*4f>;2%!r}?KEA|twZI8}2WRjVJCc7%SMPUn z@8O~XYW_HZv%<50&47A=0OxM|+1ew7L*l#O5~^d-z(kgvl&l=hSB?W`ky`+)Z)>F8 zr8{QP0O$|~8ah6K_*?APs|%jaf^Won%! z%x3YsUx1BE@0#3)-CW92t;qb@nd`A~?l23?WYAm*HjxmjvTp@FI^jT)ZxLt36J$v=-9hmbtMZNYSU^ZbwW-J2}#QC&qKx}T#kff;kMDC8TV>XV*Iij zPDzKeUXjsN2ZKHgpsfbeW@RE`-`|Jq^$@$xsb2nE?nw*~_7_3gJ>J<|7`BkS_oFC% zmqUUb?XN6-+jOAO21BI?9Fza(NzG8X3k@I8^48}=tPuslXkNWVYXdjIQF?W0*-^eo zfTqy8{mkv2!kX)PIr=))Cx3)3&q@5qJ`M?+rcyl^Px81lRtmZP5j%^;R~e52$<_L5 z?u+vBLn;W?_Kgs|d$U+0UcWXEq>$_Y3s(|Rir$rNAzKgg8waW4S7AxOhhHA4RyBL% zfr#*jtl8Z=mB2)uiEE*0Y2v5mYE(|SN&6i~GVYHz*hgfpy%J|&!i*=A8+M$V}56#`2%1}k%zzvMr@DEl0y9SjyB3E^8YeDK}dz8`2dk*5}H`wBGpa3I^_lD8V|XFd#6 z8H1bVNppDZ79K55U>bA0gVj_KJ-wjwL`Bvzjp4~=rK*VxQc`Ig3&qlMP`aKn_g zy#ShlbZG7d9tX2hKvqL+t2}<+9v(uB}z}EN0sOGrD^4i&<=1csM_W0yO zw^+%@PjL)IaJzxvY%c{v8kxX)$ONp9u$!G8{s%Hcu5#W}5gU&ny@?g^`@A?>97WRv z`W@WT<)BjEl56CB@Z2;9_MYb5I?PuZ)r$-VJ3qk^N~T@Do03nvURmuLmMC#vRqSAS zb50NJ&MIT5x2er-VMr(H*;>5GUE322EI`r)CDN2hA7rpX44<`XFW+?kSz7JW6$=%y z$ga_a(vfOD$Xl~clf3(+>r;*5vc%X@-i?yMz0)%g1Ol*sS`T_Q@Qtf44$y>2?x_oH zFZ)z323BMj?l+sg@f-ZAryeVy1C5t4@cSX8Nuy_0`vWbN!xk}m`;6lNxJ9cApJbWV zH6ON4w_OOm&f4R#&F^&*N|kd=;)@U>mqf?dh5Oij(M&4E_CEcuZuOF1 zS?B{V?B>}Y)h=U32(DrG`8a1J)78UaS+AG-iO1wFf)?j5KOJPXp+VrhnH{(##-JFC zaYlal<^ZnkHVBW8G~iD!t3g_VmwsfKez__h7koKY?9{)Kn@0XuTKYiqEB|zK)Ca-o z#kisR2?DFzxrTYr@S!6>Cb=SzG?-kq61qY61Jandk_~1M^gtC;mG@nLSpW51*|RW} z#L4(nJ9Zjwqd*r8u8!y!XW<~wKBW)2zC-w{ylo*!s4o_DNlq;vVdpj~2C{ds>n#&d zOR25C@BlJJ&F26e<3jgWG|dU#o4UB{fvz%ekf60|fP+z%F{W1EnMz3G8|)F|&$g%M z0Ke@~ymNFNS~yZbjqb=6I_20iFo#H3?m;oz#6JZitj8_OK@*pFMS%vqAcAU{1yo06 zG`6f_zs4?^##@1b(|FA9qwwtFkmJ7+Skak~od|Rp>`~(v=}BwAnw@8uPQK^1F1+gH zqM2)wc?6cF75lBNLSp-30LWi_w4#~lLJ8lc%(6)3qkllL;BWCYsOPwaMm{wBdnr`h z_9Sbn+OPNq|KE^xwMWzT#vSyMoa*Ru2s-bc@+smbw?6E;S$r^PwlB1{x=UHB$ls~& zc**qhu&{md7o;iFkAY~#) z*=%6FU8|ahKM`v=`uwt(Sv|#Z3#xmp<_kQ$Xn*V5SO6zkGGmpC48K8wLU}h5MZwmU zYXLF;Q)G(qNd*paHkeNXL#?1=9?TovC1KF{c{jPPYTQ z2kJ%&V5WDYdvlxePMN8nqnj)xn23i`n)lu2&R8_vSZ4ylDNH8x)*eIYsUfq)pqCHL z%a}m73vMPW;)~ng+29#4PaD1trZ`V@1C@87Gs5S`k>sj#fiJE`z{G(&)GG7z+ek`Z zcDm~3?Wy^2PKi@tOo9)W$JYwWMCkrlO#q!P3)IWic{|6<%ztCjUbHSH&Ci{#q`n?# zw;W1c!>t+r#~$|J09-cRJ$&AABOsopNPr#~`-$)MSkn>|vKpc0%OP~>HFrmJ7BL)c zkUN$P$+l&ko;KPhsxB@q=$LfS=!A;ovBJ1zE1UZ0**7d?N&TKe2hY6Eld z(7OAw)S`oR3@ zujk{MbsD+gCf=>^@P*RB|Gn|Z*AYONeajO39zC-?UHvCw>Lamv)YcrKHGN>g>i2+L z(_O%`S}1jPN1D*Add@p&>wWJ?J;9@bl^jZX*|8BbhWiEch)?7m}J7RaXqQ)@uFN zJ3^!~DA#^uAn}`cz9!qyLa|kOFu(a+`f!h_uI5q%yCHnDTKRhcS}mC6&N9w_=BHWI zRtbK}kI<;cj^?LIK)=D z_n_}?k-~hBxzW;ti2)EyqXxNiU!+p~N>`Z2Ua)ct8cXzV$fs- zJ)mY*JMNuaU06TM6RBMJt=Xk*sukV3_7)n1NI(9#IB7w<*mDQpy(e^4<=&r&{c5r}t4TS)v z>^-`Da>D5&n32W=NYyNHuNGckavfe@?B6A)dTFd*oRtnDiF?t^idm5-YffJCIs@AR z<2(2I({1^$oZo+;?pw%Zzjpd9V1)CLj+E=5f}VGLcU;c!s$5`zQs`TM^n#Mb%U@tr z_FmKvFhJ`j_X%w+@ZF-TARsl&5}UkzPc`BFfbjus_#@|Ce-}PvpcPLuDq0W zsbS$Nj$P(`Ki!>}IcHODcEmHtEX}`Mh{1^aifec=dr5hjOgWn=?UKg-Y;4&tk2q(U zjd~`GD;uSD;-EQT5e`w|=8?D}zF@kLEFVXf7cqkHa~r~R-Snt6Tr0#W+< z0tlmHAdHSss?#N>;hK+I_D<@R*o#!dub#iE-DNPTSn>7ZcX)WI0OM#2$H-4bNFFzm z@ED+FESeRjzw)bRqmBrqh zeWZh{vDU}vWK3Vqle^P2RvYSbftN3~cD^4maP47Sl9&CcWp|`CWxe3*ICc_Kn*x~a z-F0vfXX!Q54>e27A>UD0n6fvjo#7DO_~fN^q|U@j3}0bO=xpOK*lH5oBRT!poFACi zZneBNT$?NG)Nc~iWBt8Kbl1f-%plsCvb~vey^54-+dTKJbBX&%A9*JnZGHUJAk1#t zjC*5$W-k3g@vYfy19*$1uh+Yo;v1>l4T662+hKg?D$cqx7q(79N&Qc@(ldg7-t5 zem3#GxzS*KxEb6h@xlnT1(;cJyV3M$x9+|j3y+~M7$)9)Xt5X9>b}6qlSaRN&ac{J zEmIvZ>ig)X{*$QCm)mB}=k|tGsA{}qJ8HCBU78)H&bqHRy{FVF3VU5gp&Ge>tcA(} z=M6s@FemKAc>a9H2C??%x=?M4Pn~gaAR45m88OSS2_J?x#|HmcT!IhF-#xk=o3o?kQrbJV+dFZRhaI+2+}g8J1TfKaEtU+cI)?_v+P8*DnzR-q&t4TvZ?6$Jr8ICxGn#F z_x(4Yvc45435Z|GZTg>ZFz`ZkC1?xKH2L?oz)7PQpSMcKuY4S{VP=?j3yzPu3l}XMNc!CO~`RgT3qw z)>EJS@zLO$)pTgX6U*Pbyg8Ofbwr!Zeth+jV9%Z4IR-fbU5p20Tjx&~-Yy{2)x79| zK~DDT4WJF*TZ})O+~4v{d28wK*n3e2xw!o`>RnlHG~L_(h$SAl>s!PAsO^4nu{!?# zX$x<>;q}w-d6;Cs;xD+@yA;IeL?>3eujj4`G=p6yX&xZUTJSRchdqD#cey( z;~5-&dY9Dc`-yWlZG79sbx2VA_uj>Md!IPvpY`)&ef0kPvlWTA|F8e`WA$Szk@B^_ z*Jqvi6ume4;ilrui>e~b4S%_;_lxgOohkV?CnQART<^@C-n)K1SGEp4TC(!?>6H#T zef8h>p1ScfT(+zCQQ5+VTCUvzn=C4T!R@DNxxZMCe-YQKeSH7ds+sNf30)m>@phX2 zbEb_GraiKk`xmvh^2PgClarTU*`9vx)!RSqMc$c*H-KXC#^acC?{9w<+23RIaG%Hb zX;c4RTiLf&Z^ORS8wExJ;_l!h&~gHAL|jVk{4U23w0h0C_rTrVU$a<}&2QF!jB#X= z2A-VPF#A)}Mg^JM+W(LCt!qmJk9k}>CEu4QJe|2f2ed<%!RhQu(DVl|X%4_aPteo- zfcvvSJL{bzJ-od?XO&HUyyb61tcBb38P_LW-;%TAgVm{@cc*@zeLnTahnqUl>*h?( znWQgpn%hG|Px_P9tfOUmGRtM|1GiZ3HQl}Q!@SwoFSRB=JrZXYW4Zsd;jV%?8qs>S zX0euGw{MpDb-gy4IL}YNYg0m9=k5=u?}+Nvm_4;Oe_wg?(GfYlXaD)vr{8=qC*)gB zz3timvf}^vZ+@w^1 node.id === newlyAddedNode?.parentNode), + referencePosition + ); + } } } diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutBorderNodes.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutBorderNodes.ts index 2aa176c747..9ba0c76444 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutBorderNodes.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutBorderNodes.ts @@ -13,7 +13,8 @@ import { CoordinateExtent, Node, XYPosition } from 'reactflow'; import { BorderNodePosition, NodeData } from '../DiagramRenderer.types'; import { DiagramNodeType } from '../node/NodeTypes.types'; -import { borderNodeOffset } from './layoutParams'; +import { borderNodeOffset, borderNodeReferencePositionRatio } from './layoutParams'; +import { GQLReferencePosition } from '../../graphql/subscription/diagramEventSubscription.types'; export const isEastBorderNode = (borderNode: Node): boolean => { return borderNode.data.isBorderNode && borderNode.data.borderNodePosition === BorderNodePosition.EAST; @@ -86,3 +87,21 @@ export const findBorderNodePosition = ( } return null; }; + +export const getNewlyAddedBorderNodePosition = ( + newlyAddedNode: Node, + parentNode: Node | undefined, + referencePosition: GQLReferencePosition +): void => { + if (parentNode) { + if (referencePosition.position.x < (parentNode.width ?? 0) * borderNodeReferencePositionRatio) { + newlyAddedNode.data.borderNodePosition = BorderNodePosition.WEST; + } else if (referencePosition.position.x > (parentNode.width ?? 0) * (1 - borderNodeReferencePositionRatio)) { + newlyAddedNode.data.borderNodePosition = BorderNodePosition.EAST; + } else if (referencePosition.position.y < (parentNode.height ?? 0) * borderNodeReferencePositionRatio) { + newlyAddedNode.data.borderNodePosition = BorderNodePosition.NORTH; + } else if (referencePosition.position.y > (parentNode.height ?? 0) * (1 - borderNodeReferencePositionRatio)) { + newlyAddedNode.data.borderNodePosition = BorderNodePosition.SOUTH; + } + } +}; diff --git a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutParams.ts b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutParams.ts index 5c6ce52c03..104319a8a2 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutParams.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams/src/renderer/layout/layoutParams.ts @@ -22,3 +22,4 @@ export const defaultHeight = 70; export const headerVerticalOffset = 25; export const labelVerticalPadding = 8; export const labelHorizontalPadding = 16; +export const borderNodeReferencePositionRatio = 0.2;