From fa608182b9cd51acf4e701df576d3fb832beee9b Mon Sep 17 00:00:00 2001 From: Misiu Date: Tue, 10 Nov 2026 06:11:09 +0100 Subject: [PATCH 1/7] Make the cells of a grid end at the edge of their box The SDK split a box into equal cells without counting the gaps between them, so the last cell stopped short of the edge: three columns with a gap of 8 in 800 px ended at 792 px. The shares are now cut from what is left after the gaps, so the cells and the gaps add up to the box exactly, and a cell is never less than one pixel. Widgets that lay themselves out with gaps get the extra pixels back. Only the weather widget moved: its golden pictures, its preview and the pictures of the widgets page are regenerated. The Basic editor builds on this, because the frame of a region is taken from the same grid. --- .../opendisplay_studio/sdk/layout.py | 10 ++++++---- .../widgets/weather/preview.png | Bin 19349 -> 19241 bytes docs/widgets/images/weather-1.png | Bin 15060 -> 15066 bytes docs/widgets/images/weather-10.png | Bin 8227 -> 9934 bytes docs/widgets/images/weather-11.png | Bin 16441 -> 16427 bytes docs/widgets/images/weather-12.png | Bin 5897 -> 5913 bytes docs/widgets/images/weather-2.png | Bin 16129 -> 16148 bytes docs/widgets/images/weather-3.png | Bin 14954 -> 14975 bytes docs/widgets/images/weather-4.png | Bin 16063 -> 16083 bytes docs/widgets/images/weather-5.png | Bin 15959 -> 15976 bytes docs/widgets/images/weather-6.png | Bin 15040 -> 15225 bytes docs/widgets/images/weather-7.png | Bin 5902 -> 5884 bytes docs/widgets/images/weather-9.png | Bin 14997 -> 15008 bytes .../widgets/golden/weather/daily-default.png | Bin 8081 -> 8089 bytes tests/widgets/golden/weather/daily-large.png | Bin 16753 -> 16747 bytes tests/widgets/golden/weather/daily-min.png | Bin 2602 -> 2591 bytes .../golden/weather/hourly-details-default.png | Bin 7171 -> 8629 bytes .../golden/weather/hourly-details-large.png | Bin 18064 -> 15850 bytes .../golden/weather/hourly-details-min.png | Bin 2687 -> 2681 bytes 19 files changed, 6 insertions(+), 4 deletions(-) diff --git a/custom_components/opendisplay_studio/sdk/layout.py b/custom_components/opendisplay_studio/sdk/layout.py index c4d6ec3..a522314 100644 --- a/custom_components/opendisplay_studio/sdk/layout.py +++ b/custom_components/opendisplay_studio/sdk/layout.py @@ -13,13 +13,15 @@ def _split(total: int, weights: Sequence[int], gap: int) -> list[tuple[int, int] available = max(count, total - gap * (count - 1)) weight_sum = sum(weights) spans: list[tuple[int, int]] = [] - offset = 0 used_weight = 0 - for weight in weights: + start = 0 + for index, weight in enumerate(weights): used_weight += weight + # The shares are cut from what is left after the gaps, so the last one ends + # exactly where `total` does. end = round(available * used_weight / weight_sum) - spans.append((offset, max(1, end - offset))) - offset = end + gap + spans.append((start + gap * index, max(1, end - start))) + start = end return spans diff --git a/custom_components/opendisplay_studio/widgets/weather/preview.png b/custom_components/opendisplay_studio/widgets/weather/preview.png index 388dd3fbb25f5c4362daf2543982edbe7440b6ad..20a6de2ce59d032d2c9678a4a4bd301ee0cae5f8 100644 GIT binary patch literal 19241 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 Halroo$BFX@ delta 14169 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 literal 16441 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%0D=ip!}WGbBDOlSkbYs<#H{Ao zXSr$!r&v0!2c(!Y&2 zBWCg0s%0)D(t<6b;jw4eZzEy>#e;MT;G*scC%#dYrrojXLh56tq1GeMuUvr70@k+J zwhB+;9vaTJp60$fx4l2cE*?=RmlP}e>_6sVWK5baT@NqxxmgZz+5TZw8(ltOkocN@ zm;4JQ-)5XHXMw2DkCXcl-wzM0Z_5n_6ASE%6&ZqP0|M1Tpw%vUC=a~S;}o3t02Bq^ zcrdZ`U{inaFiBoFuiomUSLI)yV@e2h&AOUI;FX#>Xqq<#g@L#FUJ7=4O>v?<3Tfc1{TD>pk8d;KqBx}9KyIn{1F52MWe z_3H`E7$QLfskSpco>;1Cm9JAZK3)`ndag81ZZTMJ~dNe;c6%m}RGZTtu@@ zsdznnt9DC8PBZ#0{vo5jto7svrc}!Ymbvo01yV87h0Avk2&WN;5%8C(!aQ(SfruUS zj1E_w=JiUv2=WO8@}z`NaE#RuDdKgEhFOVR`eJW$(`R=R8CJiVC?$FT@!c+c{iVVS z74T3&R9|))%7NSWE!PX~^>Y+>$#4^0UOulVpK!e%%+lmncV*{FNABGwYdS8ItGFuHWrp4#h%l zTSXoljBHvz)4WxbqZ0Wv*ZMc-4J87tZ?3%Te-t}un|a@n(8bnImLy}bDr^z85QflU z;f`=8!;#lVv`6~jJa<2#_VGNA)s3PvY9k6-FCXEy)0;(yXgn&pCDwEca+_nsx56P4 zxB;c^!3_U7A4B+F%G)hgS$ZRNt5F%%+yX<<8T@mOTN;pm#{0)ifM6V#<9Ev8W)PEj z6q2*lz3lG8QThl|6t$IXiT^|XgV8#&j{#NO8aNO!UQ?2iIqw-g5t|?3Z=Po+N@Qe+ zlj{A{F8hTJ-w%2>%Ljq%8z$UAfN&gd`01_GSU`6;wZO{vmXwj^PO{u@+LeQ0kjM*8 zT&?z+;%ASky_~@%eVb#oJC!zk&$tQgukYg+49Ys@VIZ{xG+Snf>s>X@ld z26Oj~KVrjY0+;Oo(P zSNPzofD5PQFS8H>AK^*Yjy12IO%FCsPb(o2Asc(&Pr+45#E?kRe*=1)g4qJcLu$-i zGUhn|%Y6x%hBwo7O)SN?XXxbk9}1UqzESpFV1eAL>b(_rK=CCu*5ec%TF{qa-nU3& zSK(|`qR>UdJD2eD6aq=Oi$Lo4tq_PND_2Yr+kXifEA+FK7Po1`B`+3%d^Iq~DumfP zoqd0q%6>zo7#q8K7#wUg6UAs#$0bdBORTwv)d-&kp;Ljk5*tgwE6<`~s^(rP7(R6~zjleVk&{P?ef z%C_9pWq|IfqO_Z$xm^*#i)t#drTuTD?HjCqu(N!fgDU}sTUgwCda^@l1Fb8qZd1^S zJuSo%|7{3pc7g)8j@hwg7;TzqLdLTS%XAM6r%qHcubsTJaPo9Tg=2OiPgzYno<){? zW&z&BqJ#b&k)gbhqN&#{Cv_0W{ddm*)EX}mxcuaGmYu@uKazHxCAeFnm)qvMQeP>r zv0$d(uUmkVI4Eb(8QvP2e2{vp@>$QxmDv8LY?fcq-5=>0kuyZM=ZQXJR>%d=*cR{jR)(i zgXv@^rQ49m$a-H!tG#+281j0}XE9athc58cfHnU9W>ZCPVpAd!u89LV4Buf;Yiwwb znCPJ08dX(S`B-z<^n?`p_Y*kr*H>j|;E^KXtklbP<*r45@NijJH{bHQspqxVaIfKD z`IVteUtw3InBu$`L?NU_Entdz3xUw_X$yut0%EEp~IN%9nuY^t7Xv1qKP z2XY&KiDQ#%*cZ82uRG$l{!YPrTyK2OZ&(H3HlG_^r&R`RPQszb((431gEeafc4#pQ z((23IFqyBucbY1%uXwyXFti-?-*?7uo6Yc|9YgHu)n_WRPnyj8xXnY^QSuemXCs_n z#U%Y{JU;-;HC`mQ^SMaJs+a6)@1}qu;)I`A-2PDsM9X!rzV`28o{w}`w*mCa;Vw#G zi}h+>;+%)d?I)nQfz;;33irYWL?^T@Hp&Kui=U>=(cBrP1W}FG>nIE?$9NIy{pQ5P z<=N&iBi#0I{_jEUrQ^4 zxt~1f2^Uz!A#va1w@w=)-fKoz+Kuh`6dxY4R&@Dj>ZK25vSqQznwbfl>gmIa{0klt zR?TLNC{;x=G1$%{j|L`qCbaUHbsr%3$eM2%byZAk?)gN(ComH@Gl^oepZu;5Nssg^ zpj&yFqqz|t#~-%Ft*2Dl+NMk1%EepH2`Qu@Pv=4|(C`t3+D+ygoiN|aqqN#(!Xtfr ziuE5RuJyt?6)MWgqccmGiKT1SuAwUFbc__kGigT%okW?1U|UBt96jaqes*mw~{r ze!AxHeePTAqnV{HCT#bICr^y*0f=k*!lvsy_*Ul^!w_eR;8u*%=+CzwY!9b`i8rU! zMX#3G_vQ@=L=hTAb>n5u`Tc@QTo$!GlzihIw1uj<@-smQt$H1Ol=Y4d>?}Wb^E1w9 zR?vip24e6I>H11MdPO18^4hb)K24j&Pvu8_^V?krE7@ytS|5Z#z4PCN%}Hg{o&j}M zrOnXcicYPX)7mB)=CYm+XueI=SoB-JlfVBVuu(ABZvDhmCEH9`|K#>mfc~;-j;Y$3Nd&oTY5ievHpxZ45nKW|8L{B=Q*C*sQ1AA@hQh-|ueCsc+WKSEA!-s4`=jMWHl-U@T6K zn0Yi}kw1|~ZX_2vC&Z>-061V-3;|_MZdzp-a*}$)X)T~IemyLO|1PeWHOLZ~gx*39 zW)$fHxeDmDUZ?uAW#(Z@?F<*(bs7!Wbhc|NY&Nc|%zEV0^b2wnM*K;w&kh+v^xe`c zoEbMX8;9FSx5jm0v32JK72VjMdf3j7(stC;d197_vuhXb3KCCa#&reu>Xze=Y2FO$ zq(+YBgh@q&Z$?H^O)1#_0QUW-(E~G#(016{nbo$hCq7jxww>X&okr?oXJliaNEV<#5Q@M4{z2oAjQ_UpoXjQ!>K4r-aK2~*w`Ir?K=LR5%)n#sbtA} zM)6i7i!>f}9W?y}qCaRWyz8AXV~R`dvJVaHW+%x7d3Qs)uCW{iTbe=v)yU&eyX>IbK!MXFW9R#uF2_sh*G zRoj{O!v*Rdd&1P-)hFl)Z?4t85CQT62NQL*ygZpAU63D0`Sj&3{_q@p#?XHHf$8(E zjgckuEBc7h!E_*B0*oN@t|xx$>U6BC_~D!1-~j^>1(k2Hd91Uf!hi=>6jJU>nlUWK zt&buD>CksCIbZ_L-zXgCeS9n~Tw6aPqt4XqB?1LjR(7qc>|rM}9M+}b)c7H1rf7j& zZ7vDb(*-okQz$ACj64ct3{+n{+4SJuD$~~*h)s}=}X=P^!k#N*b z>CNLiCld@Jy6p^au6p67eKt}bA6Gur=K28`=~IbhX<8Q&4%hc`DSb&PZ6PV(YXIJB z+H2M~N4liE4*=%B-aC7EwvV|r{qkAw|xEgtP|fvM+1o1VEd?*Cm1 zSgpUX`-K1LfTo1O;&7QR5olEXXqX^;HzAKvAxWT6Q&)GXJ9f8BH7qj~%Wbzt&kO#9 zbY|YdVmnN`jJ3E8wS6Kb1P*1>pT!U$k_CqVDP|XChf??#^|t2?_v&-)(2E*wolilE z2$&Yi6D@Exe^Z02B&Z-MX+5h&s{dVTX5_e=WjDIP3zIZ|d%{;f8J5~`);_OZhlx9x zlFpQ7O3c;02F^jXGTg~$gAvvh#I)KzlbIo&o0ht)E~jo|f4r5ODr}2vVe&qf@&s__ zwd;%mz4Rsk5*d+Y$KdZ;noA!K z?*z>ZB~VBE&Q)X4b27gAUmWWT1Nwyva& zJ*$pskt6EXdYIck*fm~R#NIfoPllqkUH?Gs`RTzJjpMhw1g@m*yQeja4=Su;#4E^| zIf@%9l@!#E^!+~!qcrEVui;gmE8rys=Z~)7pJ;*g_A-O#bX7Wz@Hn?yEmgdxqcgyAUDh zXs7USnQ4%Kt9(&3qugvfyWQxEvsl;5@sjjPn;_=16Wt1X``km2+dDVF@pvXg64u_-L!-&{Eh2k_iDjb}sFoA?+oag%v}(C5BkM>NMwWg$U!}TpeSwl2NAg6lXRRSo zc)CA zh|5FT<_XtK5jAT&*#QD6%s5vuk+;w5qt&a;afOCnCD9E4sRkt)xSJ}HRE9_MUkY80 z>w-+H^~Cs)bO$wm&5id?1Il_rV{gu3;5(J5f$dCzt1Y$5_l7IpAqtZb2}yruW)(}P zTc!2JE3J!ZlfHHbt%S5#xW0Uhi~%)d8pVn=sp^HZjQErVSqyy|Q-p%j6I=t9&0j({ z5sA)g9kiJbG>e8yj8V@tr%BkITGrT<| zoAdbW914?d4G18jA2!(zQxdIEt)cyB5mffqI4A-HhqB2lORH^)Z)j|XBLjh@tGvh8Kq;57Yqk$2MlKE*ZhqFR`K z!s>^8y&2i>TFiK!4=Fo$7N4fD)7tYy{gZ`2G~>liJR&`{?Id7nebxz$WA5J(qf{%$ z>aDd1N~6Bf^Xh_A2VYJ2UKr*jvrQ8y|53qXbAnHv>gJ$B;Ody0@@N{mTV$@V)Unk@ zI+9=6ots8s?zuC=clAIYI1;lewDa}ZZVN}_sI~?9LwST%Puw!jQIT%0l86Ior42d8 zUOU0O|9J3&?65Q~`K`D%Pn+$qvm=+)gk4!bu7jh2^V3F5gpaAf>yBu~+6z0F@vDx< zoI@`le(HsIL}7{vAAeXL$0(`foh(J*6NR-K9G;zT*%}P@XI4N{auo27EL^wZrk$Lr z)^gL5(J&=WHjAUx{==1x@}n4~-q?Ypctu;OUIy~54%(D+3_f};TP~yUlVaMgf%kwg zy63ky0$`i^-mPL(ywy-kK7t!@P&UwOA3-3}xqT)bGC?U#v%zX$lYZ@wn<9LYhb*g} zbYJl2-qNle-572g>{k;VvI0dzuP6n_-)z2sEyS?}kPo0-oGNV&)GVy>od)0T2J+c$ z+n_fM4m;^npvcmFRu#;o$?B^oLHw-&Z-|%#LtlFu<5T?* zGKq~7xVoUEfn&yY88s1~f`gOI`+k)v-z?F_;AB?Xf~h)m_w@1nekdc;p9&X%?^?ZR zJT-7)Tv_SonILO7U$h-2VJ#WQo~feLSa>aA(X&4E_FZuI`?c??y&TQWI7zgQ`^~$I zCLPe3Di{ZmpwUQC5&$-y`4bZc?C zc(ie_Ifvc4kp$kp$mH=Nu2839UDB$5uV$;_$Dv*>x6}6mDJQ#_&2bkJ_VQU`DF6iS z!qDnhX2%ge)qC&lMW-*%0!mrBtmbC58|UixMX!~;_Ruh0Zvz9sWAP}KUyjeZWiBif zYLK7j=5@MX*jlX0x1JOmORNRb;$eV7k;|)wzP_^WN%>Hm3MZC}(=zbar}bX9`!rM8 zfLM<=OkN7-s=KX_NJbKl|3Ff5m+vw|a<}09`(%Zrj5ux7_#^(0^Spd>mfmpiurc;L zV*n*#d(I-Pqz2Vn$fXF_&3BJO+0#}^p5P03yX-+Lr&TnE{^JnfSc>XqHwM$sdo1_r z@f$gWccod_T;f=uJtR{O^ z!d<*BDB?U9@1K4Qq}?@Gor8npwVRkGG*vIZ{Z=P@Y1XT1VaH)ek~h`KbEfi5#2;RJr56o^urZbF&{&Me{{qTLg8-0Z_53g|FR4HHW{y3^1!(j>xKtqQ~b! zRWhpPo?kgHd2GKv(n9y^c7*Q+_9k0tZU6C00deR~cQ@WeD8pJ&)vP+mbJbx(Cn`l< z)mIQ@vs)Abqw&O3KxaoaOG;kn90d`jkgyd@jQz?!T8R%ZlL~jPVs;I5+cv0dydJCX z-Cx)>`$#bCNM+HNnCI190Try8w_8Z?IB3EKBr<5OkXm3{XOjPqbIbjHjz%?(lD&pq z_+Aau&@}9tPX1G&=D@yFza}s(yFeNWOxtKpS($AToP6(MXb}zYzRgXgtYAA1M5zi&Mjx&8@!`*Z@Hvk$mW{X=3axrf-tbWW8cK<5%Ms9(AzGz+c{oe zxWp9qU!GkH>vuRLhf(6MF}rS=^UrfJAR7eS&G9E;^EF8zw^HT>ALVpft&X>v9IWpp zHLQ-$S7)hXay#vi|P$`>|r7hGL2U_ynA9mm&r1;DzgHadk?SaqBb&5sf6|utb*lv6J1Yimf5cj&V`KY)A7AZL zw8}S>e$qw+rwU!hBmd|vHC5qOYW)4RtF&&@bNNqvFI}0#CR>M1;%kl+PdV%1IES|{ z%k5GY>N-=VI@Nz2z52xiO_q&GcItPSE_Yzam5Z;YcQ*!kw341LcO3jc#h=-aU+M1` zuPg=a|H+gFhoUoxl4O3p2|m8 znmRo1`u#D&1hvI}%88sxWmxMM1SeO~?xTR?ozN|U>7<<|%UL@4rdJO~(iUw!Nw5`+3%Kjcl*=EZ z%q-s5Qy{P^k+U?joqQpB`c#riHk|0Uq&wv6>^VlKMx{^_I>uaNK#l3x9MeH*0IeR> z=`6K(6*6t$$aI*0cL%EWu;>NX^gs1zQ+AeWlig$EV?BifQt$ zuJ)lR15&7@x5nMCgjX4L)Tg{)t+94a{a^0vMmPJ# z2$>Gj!J5vuxsnvR^%yc_V?gpHsM04pTNdd`RToIp?N}RqyqW|cqMSqHbuDVSdTEx? zzJ7&$V}!|PI5vw~klQg!^b$Jq)*v$D41ksQP)dee;U3-^AMpw>Fz<} zg#Rw{bU!ylJe|l<7;TJ=Jzq^?AOP_E6v)7g>5k2J0Eskd&r{B{;bW9y$N*OH<&Lqe zW;A=<2c|T=E0}B$NSE26B-!@Qw|3p?_ZqAx`t=7u3Fds``QGBkt0h|NvF?bIyT(@@ z)Nq7>J7WsRXJ9AZbq(k5d*Y#s?^1lc|Bl20QXQEeO$a1)k+XLoms!#ZV#0KVs^48l zs@S;AKw6Mc6gihEGvC;6b-B5kvO|grxH!_v@|p!-pH#ggND!L(Ap4`jI$PIn2r~ga zckcU@mNL2aVQ;?HeP0cee8_Vpj;O0e|9^vbXbMjvm}mH zwp@O#|9m-SJK2H6_dXE-{mOt|Syd54EVwS8spRMs$xH8rxviB`jr+)a7lqy467~B)x^I0cT)Uo$70*Av${$~W<>vc-7jTMhPiSmSHPGu zr5KAB+DLiaN-Ay3X4r24c$gf_41^DVPHYcXkD$S-eEz9OXCqo})?Y4uGg9JsO%!_V zX^Spk(>*@us6Bj7?fL_L!3-|&d?QQrl-nc#wfv2~#qCp)KG1ubamLE?8ODkVK^}0Y z3fg>&%@7$#%bUEQTo{)g4eGXKnc7lrv6)T+bu0SN5m43DewTP!@9H@pQU8Qe$I$@% zX?xKko!EYpnaVLzLp6JN_l(5&9;Z4C7vPaS6R;3q81Mwk=w?LP#z_anH{FAX- zm)EJ)rW&ZiPLBqq)1ly%Y^i_;<;#o+oSz*8MnIb8+wk@x=FoPuNkBDK}XXjyK0G~b+zZ*0^R0ZzhaojlXAz!Mh^k`u=tw0%v!&iG-@xRpp1{6Fhr@PwL@A*M;0F|Z6bhW8z zJt)S}XmjoCiBX5_bUy+NT%Al>X+Pw(|7V&lyiXe;J`N${fYss67 z?L40WfgaB~<%MtfS{*dHSJF%E9xKEyTdM|tny|g>)!TtohE7*bM?1SXNTF|m>HptuVEP}rJKoo^lLe7Ipzipnnlb*d(0q&d?guUi zq|+fG%!phy{dBHMAIBSvEP}CcP@J78rII6HKYcL2qw07o;hdd;YnAj1V1nBaBR~>oic_+@LVed zgV_!Z<7*jw3~s9rvq zB}f(=FHSB`3MxKE27!EVVo(mz??hNu?rmY z@d!<}F>m3^(EX_N zufh3vXK;GZRpzso$-g!@HlD`1k2igoG57Bn4YPWz`?p6bU!95}AUc%O4`0^V;{mmK zl)SO%^5Oxmn+uIuy}Gu&*sbPrwqD^!EWYCbl@bpQDg8ip2s@l;eG=YOc=TecsM`aZ z@LrCs@$P3Wta9FRYS39m_E`Gqj5IEt5t7yw$?uXf|I_NZ8Fan0E(8PJm! zbJMe%k0PK0TlSzb8j{8G$1rm0ygAYNvZ?kridCPU#Q2(;R(_^s9Q)*w(k)QS zP%ePeJ#7^6+r)TSq{}1FP3;Js`e!b&j@BzS);?4X#OW+XUYeDuO+CZ;cEeVzD(0{M zxv}Xu!-9;@PUh9zgC1kSWWFFf_w4bA{&nwZHqC1<$P)1AM*rsyPe;1Ws7%)o1<>sG ze}pb!R4N4+4z%Oi2@TCI!rnIBdY}%O7nzg3IMVWli3bd@&$XtgnRnld?KS+!p-<7$ zFPn%|DPlMkWd$iyUsLgFVce%4R=F~!6Mb=m$y94WXwb+4Y@cCe#$K9s=*|7VgMVLljc8C|Uv81y`vFEn!R7}7Od17Vgwa$cD+1m3Q{nv$!uPbqu#R5p zVEAdC(cV^@aR`U<{Vu+{h2y9!wNP@MA^)dW%CU6oN zd*%0ZUZah7peIJ5!byDYzDCw4Q~J&$)EdDmKgbu#ZrHtC2>jhKZhGZ%zbjqTKfrE) zXDT(Pxo5_|>Ip=x%cJ&v@5duY=;Gmaw_V`=`?dx5+l9<4YA$iHs&}o&sq6(R63gPo z^eSRMpJ#!-C;ux0ETOJk!*^Dq@x6l07&G0nS9qLOsi*xx)MfXT2qsrbmBcTQufmbq zKBCKs-!j!)KkE``9ek17-W=9-sf!nKIO}gTA)*2OcORog`cuZ?Svd4Irz=j{X}ue=!=p2mRy!rK`jez4U^x%N5`|$e}pHvyPY1@7jTJmCzAJEm=;mi-Yz|h}iS%BqT%Z mHZvn=rG#YdG=j4I8=M90Ar*nI^1#wdMM7F)=#qAjl#uS04uJtl`BOtk4c$G2gAx+bDd5m814wsEjuMh0 z=)1o6^_>rQopol`xqI)se{oKno{lOh2?GfT1R_;eQ!)U7aCm@u7!fY;d}?JM00Pl$ zs4FQL!QcKs1?W+!(sl~{clX=X zY4-v<-*{IV)NXU-ti|;Z9;H%@1IF!<>h3Hp4t@26;TktwK9y!+pb29LEHmV2akU#( z;P+#Rz-{l}=;B!)2T~G&U5h83n>3c?AwEj6+Z043@{B3+dY~;hI0Bb^h@G4&OoBQ5 zJ*fYb2#gO&R)z3@yku|{aC~-^iM}YrT-K}5_Ef6(6Pu0*yE;VTxhJ~q#zi;5TX4+k zXU8GQ^Ew+>TC>ltr5~46R=8|LaVWlGN#Zz5EBxcZ@t|a&(ReAw#@AFW!AUIET6|>M z`8Dy$@bXJ(`xdlJb$J$p>D1Pu45m;fBy^JHX3#zPt!alh}TBT#?SeyFRAGo7g|lfwPpwbKWT5_-nQ z7d?b5i44#$BO}CZOLKEAzSz0_{r#2}age-+M@>pfibFP~wVnEBRXqwWw_Qx`bI#MV zv(Eu%T$LEPzqgISzkceVq~6?J%wOjb-*$)6U|C{>!p!KeU1MXvuv1Hz-D|eoO~);? z8f$NtLg`!$(At!gm8H;&MH|Bw>g?ohPoA5Y&;*Pb3f%feK=69Sn^4c*+}vDX|NZg} zJ?RVvIX62b&cq8#rw;$y`Yh#4wUUQUI4-04s~VMH0DshXqP4G=C!2ju^YlrB*Vosn zsi_6BK}(B^i_6QuZ*EkSm3MY`H5^%bG=vfQImM5wF48aRWLYgHl{_{JkVsk@8o#}9 zrd>{y4lO-BJrmPvg&{ZbeGW9P+(xQq7%#%Mg&3NzL{PP~bqaA$;2t~`6&2;u&NDJM zCjq_w@4q|=ucF#oPb(`c7Z(>G7f!K&pWp7$3X-p9kQatHwrzWjG6}Tc6|hV#-^rpmGb81dBw%-pziT;L22oHsQ}>HVCQQsTzK-EBlyU> z{-ekfm_U8Sp|G?%#A4Tj&$K~d2*mSOuXvFQKzVt`Dqqx=j_Y|MHa9n^sj1nj9gIA> zlO%R9XO=MrJ39M0w#HP5p4S`QIEPoWl`kqd49j$O)D_9x0)v7Ko$~VYD@LLh8=VqF z(&kU$<3v*vG83W0+ez01Q- z$>6T8u0A?C+8#`rc4<~Au7Cf&+xdx0vw6_J@tgH|bbo*U$=+~$To9IG8ar$C^|i2U z3r8UNV*l%2KbaYwRPtv-Vhl+vp|__%(a;?o6=Fg*oh2bpo;(483gkkW>FI%j&`TKW z{2LFd3!9r~*VfjYpWNKsaB*=N$Qmo;z<>LmL=&;0lerCR0t7Jn(2z!ACdOw&L4R%~ zp|W}=CMqZ|fB&+O6?A|YKR>^)@ClHw38yEZSe zt0oI)aBy(wWsrcvP}2Syuu3Wfza_D<#mnbP%F1sp7o9XL?5qwC50hEsm?-~?{aBy&3=WDdJwcTA^4d)a^sCfhgNFPKeCnxWwCnh8mJGA>8L|_^d zKFzK)m73MsQtv~Ok#FB>b+mGEbMw0=7{f2Wn<*(pE_#8<$Wo3wf7jI4>+?!S8AE`c zx%|HPWBJq7@%lTB{k=V>Ckz4UU&q*GS?wySrzDwa6$L0?=ta zQ{-raIYj|_BcSzOLkDPBaL~`r&MGJ<&~-)^O**%DtbSRCo8ql}q+wzjbMaSEAqZ6r z#7s|58!}kXClg{iwl_2N%Rklajyr}iNO*05&yEuk5)79FiOXwhn4bkpxZZuAt6u(E z_#6)yxVYzm9Vir2ne# z^Vzd!AxllKFcz$5VGm7|bEW+SId?ZV)AI88M9Dxv=Yc>{C_x?`9w8y!Cgz$mOUEAG zV&@qBw$WTIuHs3FkXtxN9%#yoz`Itj?eZZxXqgnS_DkBFvLWCM_D#sN*~M5}n>6%e zQ_~YUIXRBagXyxJ`o+itI5RVIrm2BJ`n8O8SeKf`?OtLU6sF0 z5*DeZF#FU(B_vD}N5H-Oii(QPpS)hbZVkNns7E@QEr59Ax!UeKSC>JYz1?xO7L>W* z*>wjC$PT@`pxp@?A0N+lW%qdkFuLF2OojV$OSNe|E_2}ZpWnyI&OyI^a-z+wk%CtD z2@v1J#c(7ZEsf`j?Opy@28B6}X4Bt~-q^6E2p?~XF|51>ipTWJIvz}yG)OCCZ6vQ% zAd_2A`%uBl>okl1g(d4+AXWhSodubhNyWs3N>5jGe?=%3a(f*cOGF{%E45m0KSV&r zyfQU~3o5U!PD)9!X>v{j?{0M;qmq)6hVz}B>bu9qL;nQRGYkAkKRk4C3F{vlBlU_) zdi1n`Yh+|Z5`JQzXw6+?d@$A^~r4!7dzw9?BU@N*zpVkdEef?l*egb zhDHa^Rhh|9OK@@yP~HJhsKCrpj-G098S3j#N*|-y=W5ONmp>g(m+3n4*aby3v(=b2 zM)L+7OnsOvR`tH4updlp3;rc4He0HlpVM1dSZE?dhq%2B4m4)q_W^e~AFX%kx}N>~ zncnLnc8jD>cDA?Q1}c4fcef7TCe=EASv2diy1M$J#?s8%+T%woR+S+4)hU8{tIR>bl%qRlzVPa&Ik(DjeLA86XKXW~=iQ8Tj29}Gl zB$RLfbF5p^+6V$t#ifqnVYQo&t!9>*68=YwFE@*n6RMg@Yykzb`~*OFXQKx(1yg05 zXgR&QA_OfgFVoV}_U&yF3zGQzUs-+jTkQ&6w-uh5odqVLzzg2ooGbLFR+p39yH{~4 z92y!Lpa~Q0;A2WMj*;!WIpqISW&nq`a$wtdW49N@XFQ$`6O_>kT6VkfFfcIC2wKJx zvD*vGSiB4lM*C{^hOMQ)EpnPDFhSWZ*V_|zZR3DUs?9l#{rXSc@&PkuW3z5Ql-$Fu zn#@T20y&UCd&aL2?1{+{IhoDLp|i2E`Gs^lUj9VZ;xd%XWHNSielYzPL3ICq2|K6V zc!4ax`oE0|fWN|Da!E@+s^J0P4zq~|LP>qbEu&*-X&HRJukUI$F~<53gGmVUJM4&eHaYGH%0 z!tcvvPaF^d!fr5;J}WDWEfbOwwzOnUp^-yA@))JX(4S;feoj!o^0-nBE2#>xVU;_ z)Z}Hn>67p8U))fzt9*?~VU|@?3A?VSu0~0Eb6rG{<$e414Uo!v&EQ{{aR3F8E*t$n zH}xY7`UeMl?f5YV;6~Q2f827@@%Am_jfiuY=-R>l{+!j8 zg+O6{@Y&_%8qm}p9)c6M9Mkq`F=>mfd%L^4iHV5-XdIOM0ZB^FOpqvW_deZH26b1N zHEv`O6BDZ$TeSP|x_+KtSQvJr7qn^zk7C|RJ_McoKJK#k#KD-EoedB%ax@C?XSvI3 zS(%xT<8nZsQBuAU6OYXrB6H`FHX$Q_q5P_i+P*05m`_-P%yGl2%_Dh#jUUwsQlD=Qt|ca5X)vI@J3jNSWiz+dR222YqC=% z6%`ev*qvP^QC{Wt%jjtC8yyosQaAki97Lf{pLYE|`dpWYLRl#&grh$=u*%B5nJAD2 zR5oAI8wS7>9WxB1Wrw&3l>P6y-_Z*3J$O)1A427+$BJo_GextM9UwRq6coR&j#Y0? z3=|kAOw5{HsHa0suk5we)Z_;x?NpK(12%i{VIP50fmjsh;%a{&WOXuuR)`IEY-~)e z4l0_?@d&s_fV}(B0yVd=Ktx24kdSC-YNipDGD-W@9lcD=$jHdd^f_LW<$EwaJL?O8 zCOka6v$Ioclk|~zcM<}HLIF-JKR+LdoCm_4ZDVzDbmWA7Rb)zLfF90OTWHlUEG&G` zL{7y3r!orAip!|XWT0YeB0H0exzzPkoFDol^j?yiVDHLz=_4Y0Xo?c%1 zcEa31&2SmV7#}{wlcv)Kgr(NHW53K8@Z>T>rX=7h zICYq5*cG|b5p*@2#y)(57mr4x`(nt}JAz(#;ng--xt`u!$T?f$p)aCU@#bccexB47V!ul$oL-40OmBSMISeHB8X8o zFw^)k!0l_F!+!;6m~GOZE7jy_M~J1yJJ;#4>i%CKO-kfRhvvp-8Lv z_)(FI`;+@}X>4-@Q_2Mgl5E;3l_ggAjIZ)PF~{!LutvX^T%T58za#;VY)ei{Th?S{ z5K+}Uec*$gs}4HZPykF!K)^4duG=YqMohaG7u!lolqd}A51&k^?}m<4-C=Ix)&9HN ztq3VQ+W<{+rq-Ioxn*wK!VZ<2W zMfKmJtqFCPouXLQR~SAJY!NNG{qyJ1%MMRTz)}H>xcRzi-n8{~VT50U1i_i8Ca#RG zZPvHielBm{rK$j!@76aqo;FB+7AG%n97BpS%|H`(Lqo%LR~aG5v=NpR$)ZS(lf5k> z!cXvSk5Xm4j(IC5#yf7*8)R`7`_3|QEdC)ibyTo<`JKL@VI$z8ot&ItV~pZ%bl4aP zM}m_fmxgi1?%ukv5r-nOzlLKpG>Bp0fsN;Xx)};8Wu$UpudSf@|F)T)nJJlcZq4p) z;?B##wsA8_TNl_RWBJJ0V<3xYi##LThI-4H(Zmgzom!mLz?RhgXy zCGRB1c#4ICmQ;u7rXHVRj?Z-O@=5PQ((u5oh|I?!fw1dHn!hiy7kI+#q$H5?8^)=q6b;mGqIhh9|2Fe?|M+DG}yN z_`|P5)Xe=Ej6)!p`71F;p!2BR)Jv~lQD`dNQplvz=qlIEN#15uA;D2UV;>y#Oc~@(RTkbJw&CO;w zitWhK__Do;886`!FLyLDEcip*rD#n0)KK`Z{q5Fv6J?G|b!LT;6zAg#=g5|kY$@i( z?V%+BCCpYJtnLPcT^1;c;b#|QH`C=?yGsR^`19!&O6imuEJ9QhV(x!oMYgW7wmtY| z*GXk28u{UIk&PSXi$$^fixN)#k`hIC+X3{pnTM24BTSqcd4Jb5VbPl8O*!SdpNbp!Nviu8kBR3*6XZ`gjf;W)|apG$;@Iu2r!HFk0?fkQ7~}paO?1u zo?1><&GB&EcfC&<(IiPJtZ;-j3hg-8NAlr#=P7W;-fN_se7wQ2iA=jRj^W3z)c zxMF8e7`klmqdyYOdkU#uE~kegjix(4h3IWEy&z`V8!vAuaUo96CZAn%9XOB>ia!*3 zCH>unl8CPix-dG4%p_St)%6Qif2MoLUi3<7~j!Rjwwfk0Tiz~^8>Y~cCa%o+g# zQU3zJP%?z)93T;TlmmY|{WGXS$i)da`c^`g@#FPl=(RO8PHrv9U-ogtLX4vcQXCK; zjU0`%)=^`kC(-?^-1=JOwE7&(tcDs7D6B=y8L`<5JsvcB5VdwF^lQ!KTKn5=&4k?D zqQ%axFZN~wC*&4u{Jp5-@NVODN^x+pm6%}`V!t}Pq?rOj6j{|D>|6P5@?nRt5>UrQ z92)Look(LV@j3jN2$^op1x~wqNh8f&7zo1~3EgF}mGGk19ue{@GA1hOVXeY(Ly5@; zILHlyC7DC=v3pMlaj94n)L6@cyS@@Ck#6V9Pc^f{nPMcdvPe=jq#ib4eaYseDC(>C z9fVXF6S>Qd^c-c;JL1k!7NOpjc514J7cQ!%TxI^Udj6PTeDy8a!8KJ#WCNUD@jMiq ziyy8TtY$9Yk}xTH+E5rPUR%^RAu?#!CkX5CN14^~v{ zoJ74gvAw&yIqHj}X>yuA47$HzX}80sIsVgoow4!&W{h+9m921Y23yBRxyq=`OVQ!= z+11$=e%MN!aQoo!Fym7zT-0#BQds-_-A!es;Aysf)bTWas1@P-FQ3!(A=K-dyW<|R zeE*yFdx?B4iXE{R>x+dvA!hyF^^0^GB5NrHe!cx>6g#_-M@zEtdY&$ z-rm~U+G?{_X-P>*Y3b{mn}Ocm_07%iFn%Ta%r4$xed;Oc?|x<8hJp!$PZrKjPl5Ef zE;M(2vk{>!{QTM4+Ik-C#1j&N%hnYI#nz(3MQN8!a*DD!#SMflJjtaUX!YKkYIa}K z(A2~N2?+^V4Et~JN zW4^)epxAFCitzV0*s&kYH8VEGw~+HYFZ=X~!P|S|ds^tTdA4H- zB}LtTU+5L|n!RfGvO0ZJZ%3NO&(0od#LB_ZGdoKMT3%jGLL#-1vhJ(B8$U8!#6ONe zlqRDsS_nrPw{#rB2&;vJ&A-9VMxJAVbaZrzi;JOFKzd7_30t)1NUOAws;a6Q8yZG8 zr0BO`JzxDOHtNZwktS2%5^AKc#XSLFr0frkuz696R*qyc50PB$&fcCT@~yLT5jR7L zZk|y83-f_BDGqgoGueB##OJFFiVk5Q6q~iSwzj3ErRwKo=_0v`cYoR&hA;M}gRXZ< z&(F`*5}C!HKlk_ZOQ09msG0sWvKbnRT|Zkny~p&wARwV7r=c0h;}D=eBvluzdF`u& z(|bOXvTbSmpohqGHdsc98^bv2ED>~jGLRu;c6xD9{PSDDRm!#g>(>Mz`1Sc)FR$|$ z3Z7*{ssBYo>lXv4fk3MB&z_4fAueN<;X z(2a)HOtVP31!r;c@x^2tfxU7L9Zpr5-dr9ak;qoxBW6m<29J&JKrzzOsnISk9vOs)ii$47wr6JE2n~gY<7$+s zL_HjoZH1dwX?sB~h>b&xkKpCy<-Y}-933m>8rAz#d2|a43o8@o;RwY0n}eo{iwnp3 z8jEN5l(h0>C5dgSUJ8}RV z$opSvxx_j5IZM1-{5lE5ZU=axRF~xju}xUUu5gF>+}bMhD$}gh=cH6aORI=;Ac09B zzRG7Ae%rDvp#LE{ny@*z-fra8Jo~4z>gtC?L|w_chhK5@k9!6vWwC&o-1W{ceg8ypnj@f z2PsX;C@BK)2`}%U!!v+bYGa?gsa5p;(^J7UU2PUNu(!CdaC=`|Q4y=);^`@t7MraP z#~iQ3(Fi+#F@g`$CWu8JQx7jp7MGQk8IPsuD)go|eX5Z`gNkpi^;T);d#{f@h=<3pB5&YM~AW&Er`Qyha85ukfvS~#1 zm*tQ84LvheKTHIv>t|*C&K*FCTR)NUs%vHXpUX;uv$dJz{2F%20t+fFI+$BlexyG^ zm6xyRrX?poA}0^#lnuOX7L}+EH8T75?Hh01$B&dJh;KT;4M%@EgumNi3uR?x0l@h& zI%;qJeRT9s(>n`0yOLGam@S~hZbxIYvr>F~L}D%~Dm^(;p3C&xhlkaxtQ6^MV=LTf zG@AW%8*8jsljiF*Jv}{tzm2jfm!RMW9|j(tQXoUbleG?G>@$Cjs~}uaNJ*H~lK)Yg zTFk%ey_!b*tF64CSM6K7yN<0A%6pqbsXRd8=NsNmq;P32heRH=-{^!lW(Zq!o343p z|LU?41-ptp1lg<1(}~$Zfqa7gyE}D=5_m8BudGWqM=BOjCye!vW*t%e?Ct(+J#qBO z+Q7t_H#@J8P`leos7$ZvySCz~pYD8oe06noK->Ms_YwK5mY5J5`?z2NCc-G~RTgxA z2e2C`cy4YEkQ>C=CKy&NiD|2EZ)Zk4cM+zZnYA0ut?I2W_SQEu( zDNcZmfS!ntjU^`gFA`&8=URQ=xw;CWjw4AKU`W5VrJkN1hiCYBct)>Z|1kM-&nqmP zC*eY`>#eP+S^x6BG%v8ikE_>1Hm>iLq2c*YnWN|nCu+aT{VU9gHJ--IHLU8RfN>>E zBUi@P6~G`gs4Myr$Im>4Q7yFVqI8KH9NxT-SN}$kS~DZeRH6>W&s`W~66i{4i^rBAz^mA|fGic61E2 z9ESptYrCLH@hG^S$Y#m7b{D$eX`MJr+eo4<8zrKmn3bbv`>enQig3 z_wn&D0}`q|!V+|woR((muX_Aj82|(_C+AyR8;?#-v(vPYt>5q7lV?M~U)}Z#!?iR7 zqz$8N&=L4A$wydPI=h|U_0E{LR0pYCnf?4-u9hb8RJGX;Z-Iq{h0DW50ksm5-jfCm z7>pIvIW|_;+)OJ^rt6~*_w#d|Z#?*kl;KX@0gMcguh~Wy(?n)D@~1Ww72Vy+j+}xb zB6>rQ#|EYMPbObmoG8Swb8v8(w2k1o%T_5Lc!oK<_-zi;4Xb{xu68|KXo(gPolqe#$y>~5N!5~?J1oiqb{nUp#gJq!y@fPC@gGnEKENMfqgpQ0M(1Sl*0q7edzKe&ZX!%HM4qSX z;4Bi>gi_1Z)zxLbto?oG=5c_vP2MY2pinB;ImeRP?(Qc5-EDli^OnC_reLrWApcLai<3$35=tb773a$oWS0GD>IW8LsD4;2>aRA zXhx?V2|qvoa*uhNA785Qa5xb~HMC`QWko4(2*AhSU=p9qDjb3r18sSKBM~5J*^SG{ zMZu#JP6n`lUuuMvTa_i67)=47tD<>b&i`_u;Vne~KC@yv^(wpyw`lD6s5m8O56onK(`DZYw#&d zBk20~i3oiukbSR+abV5s+p;R0(i#SczW6wsB240i>zmgR^m%$MdP(x1_lP8AXH3D@gG)ovY&x>+1o=UbB(3^F9kuc zxrVpLLq$cLMRQM}%}MA*R85V2<6}TH!fZ=)ki;O&LDQf0Cqyp*3LVXrYk>|X4V@hmN%3lA4tfoj;RsU5G1xPiJ)36$9N=m|0IR%9dfG6Jc0B2X+>a)b` z`Ay~HW}WXgGAxpY2s1(<4E&8yhq z;bA5jA3;ci!|w0$r%#_AC$N?3=0(OoqmLidp84u6Ah^7@_kfJjti{82=^NtrZur}Y zl9w-E9xSyn>@@u#aF;!(bDk9~xvxDO$^Q5;{DWsV36u0Wfd65`9~r{-#F}3wVj5T% z$Lj4z*|Fo}goc12#Ddpz}ETB#AQ8|BTyLeU&>4m86@`S z&`w%)7z`%j0nK<+a&q#?$q8}RU|a(6Bu7H&%UxhZxi1D>c0+^L-R;%V(o!Lnyx)2B z+^?ygo-p7E+^iES^(ZAJW!Yh~xmj|i%K@-^U%mHK6$<<=c8&D(@;^k}0t*6%6qotN zD)Y8%c|k$J_3Ut3g}_^2=H2NjDdDzB*QEk>5iygT4vBzO$JClOxk6KpA(nQ^R4bmc zObim61HU<9AXCty$?~E=a5LZ(LU0I@E(jTKD7P;kEs{oOg9~eSdQ)=d(Z4 z8GXbb_e!TuV19>Jx?Tsn!K6hP=C|CzWeymBdkwyPE&&DCn>?em`ND>;RbMi zlM+`7<|svI2117&yHY#_g}=tT{-vveKd>jJ%rrDG~STA`Bz#pR;0sfPf_(Br5Z#HOoC zO-t*$mjk*lmP)|pA9*NYEn{Mg(Nm0UhKNVx1^Iw%jwUo0XC_*j zE2r3|t_hqyWjl}UhZoAlDoxJ(6Aluh-id{PAZmlO~;mkOJR>$!vUT5Jl z?t5`|x<>KBe-)148r4qt%09W=Zg3D&dbw}=R3Uf;431Q?H}L z74_(mI`$T3+M%K%J+u&tY+fdJ*&A%SqB{EK9!iRTKZo-4D)uu^B|SR|>w9#gJ-4_5 z@|q@mzcmuo6MMKEb{mzk?oXGrr_&Kb9`-i@Cr!f}hU2FaV;#WZ2z$7=UBuyjD zaG3zd-3(2yVl56+pWDaXQ0}?NgmTNe%*uMtsS(0Q%bx`xGeswej>v3hHKA z`!@dwil0)`AFF$iKHgF$;C7_o(y5>jM$?nc*RV{D0MiV-I$EN-4ZtU0YUJw^) zW^ZUv_FqX4dgPpy6MZJFwO>^`UKlfO^6rGv^;dD9qrXF5P)g)sZNuPo^CSBhEr(*g zN!-K;qLUYr5e(HT<$C>lkR}DEVz0(VxCaR@hYHiG*J_a!{U}v-erGen)O9bI>DywL zXE!k|$NS&K$Y7}v7*F(r8*)Phx9}_5qKX7rrH6%S^RJ}G^z91A(BCiMbACg{v^N2d z!5ia^UJ1?JqPEJKBiP&(zL0$i7jLZa!m4rfPikEOUkfnAS6DHwcw*c$RMCNHd*9PS z8@pgq<^NmX=6c7-geWEvIqJtTyEzLhv66E}nQL5Dpuho%ib)J`tkMMUxA?#b#+m6m Z7JTgzhRF}GaA3s^0>9LGQLPLM{XZGdbU^?B diff --git a/docs/widgets/images/weather-2.png b/docs/widgets/images/weather-2.png index 3e1dfe52e62ffbff31ac4402e41d081ff0496111..92856a670b87a63b5a864ca538db81fda8c25a89 100644 GIT binary patch literal 16148 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 LiqvNblYsvMxt}o8 literal 16129 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 YJ03I%6Cc6j5eS65wDRK;Nn`*21>%ByfB*mh diff --git a/docs/widgets/images/weather-3.png b/docs/widgets/images/weather-3.png index 41335af7cfc0ae5547fc3407aa7b3fcdb4f2a174..0be217a76710ec4ea407e0838197031ac5d4bd5c 100644 GIT binary patch literal 14975 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 diff --git a/docs/widgets/images/weather-4.png b/docs/widgets/images/weather-4.png index 489c3b87559ce72d3d87143292fd083d398f7a29..66dc46002b485cc9e3db4ae1b963f6f6f184151b 100644 GIT binary patch literal 16083 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 LgJ4y>CZrtx^Y*A1*R7oiJsQnpo*| zu!`zxfZoGbWrcez0s>*sC~hRE<^!;+(|Z<=)j{~~KL~@cw4W-SfjMhW7}0{Og$Z3M zDSux;Wlp_X6Tdb-T$pRxVR4RQ`hDy4TR*J&x|0)yVO3QX>iSi2H+Oaxpxp*JlOf{D zBq8Ak+HskRdYOOpZYZ=#^x<+&@}O7%T?Vq#rT+zq2zju9xsB z(7iuDErUe`183Vnn)+m*o6v0DgP%6C8~7*~AsrDF_1MgeZu6QuM7XMo%HauW)Z**c zuRvd_TLnMw9v?5j1ba36j`MQw?I}W+K+MPB$ZFSEsZRAQ!@8BC-VaB1oT<(OVQxVS zUqtBN9)LvMWn%{emuHjO#v)wF5yTt?zZ=bzk>xPiJLiiMek%4OYQi z$xo7}dT*$fxppJU=g7Qzl&S0&^~)*$+E2KWA&?i)zQOGR3sHJgy7mxeoM6-%T)Dqc zRzG&^5JSHJmKTMu;9~%Ul%ZopK&`zg^|+5>uE`^+`K2H~f1E&xovG;}Q&FdNO|HVjJzSgA0L z10&f+bp?krq>Q^fSz^b6ER8cJ%evWK`zCM%J7U>eVyy_{r888DAs^jZAX*A{`yQZi zL=K16N0kDgh0uG0xh!B_b@;E*-X`7b&b>*;%^EhCjbXGjcx2F${`*C6vNWxke1Xy% zRT*?UA7U7~LOhFalr6j(wT@htWp6H9j{Q+`4bC?}ZtAe#Y#-6O`PNKOqm3f;-INK> zn^L{~bUSs_{aP#v$^;~98Y)Qc*Kd`cmR`})vJK-{a7CoK)EV*mu+g%+6kW^P7C^mI zS%Ki@xF%a>i3$AH-l9ep#Mm(MR`eCm3&JeIX4eY%wnG(Vf<%4a=RRw173|A8&5Fdz{oRc8pr~ z*YVyYwD6Yzq5rv)ExCYEXWlDs@c;g~UYzs4d)L0ED!|J#F~8D$;3_h$sXa;m`&6jY zf6oZN|JU2$R&(6o(ocDkZwARbVQzOVh2SljHob$}xZv^syk{TDyZ#X5Ymev%6mbt=rbK} ze^=W>*8fb=UQ~jTB2~lY)=DI{T$KDIrb&_4GZcu0Iy3gDw-G#ayjFN8=zRs{R8zi< z2A5x5$q{wY3>q4*qJGb0yQ~$ha_!ssNO`P@s2f-$0c*dS{Am}p>DN>OjzT(h$rEbc zry^`db8n{_^=s5v2Dd5L))5$62T|(OVl{2F@f#{c;cWo1t-LD`>Mi_}kt=k!V*T-45sMTubQh`VM#>3UiC z6vx;Qsg3v=J!l^5mhI8lnq5C$a&SuL@!&xIXRge^&8VhW%D2*IpETk{dob53srNo8 z+TU^^A&8kF{vo({uI}nhnnf*1ZFGqFZK+fugx($)jdrJY z^;birq0$khD@TL|$_Xb+*VM=pXq=EjPyTso9jFH`lifd6EAf?hU_!G}A65HG)sC8i zYf|naU{QrUSCf5SypR7ROX|L*eSy8de@&w98~ADTXEY$8jZv(sCo zCOYG`iTOgLBl}x?>Wq-FG8ZK-yF$#J+(%fSdTH=deR{O<17xBN8*aan#2Si|A{JGo z+^oKe=+b#}-$XPUm>L#yv*jnJA*KfFuZFc-A)+>pDI#xN;#M`U|}?&|3Mof|ffEHW; zs^lHr{v&Mkio|xhfI*vipT0u#_?_tAMsJVsRAQSfKGz7va)0jMYwGvP{^}ks+?y!T zViEc}qRrgeJM*;!;D1OmI2J5YvcFN2@LVtPyj3xf)V~<&2k)m%p_;f zxeEEijyT;FG5dORIMYw3x$;4?X%a8yW*g5x)Xmz<&>wwobJ!NG4J8jj{7LpEJpKQ7 n|MUOi*6IKCN8!Q{2*0zJJIohV+GmAns9%-jkh0}6CV~G4jKEBC diff --git a/docs/widgets/images/weather-5.png b/docs/widgets/images/weather-5.png index 7c7592f8b180ba0ef990db364a00cb6c5bbea213..9ae517206cfde766e5dff269987d30f4a6cc6b2f 100644 GIT binary patch literal 15976 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 literal 15959 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 aTT+A5%l4c9C%96Jkdso9ERryK_g?@kk>@A? literal 15040 zcmbt*1yq&ox96c-5F|x9q(hKS0SO6d>4StI-5r7$G}0}Il!PFHQUVeZf^>IFBPBJP z@4xQcS$Ec*duN8VJhBka`=007&)&a!Uume_C%~n`MIaCaN{Vut2n0$D{F%i@g`c2b zelS2FL|-V$$!L3}Z%%pp-H;#0+DXL^W@4d_d81NF7vqH86*-yjGE>f1UhL9=irYYC z_UO?FDY}uIu@|ZS4J3vsowRgP3xXb(s`)w{Q54Z4Hcku?aYx45QS@|1?}nSYI_=QN z;?a5WfR^!rTkoGY>#3;@crCn(Qk-OXCi;c?OyLO{7NlC2khK`Qg zuSi(iT3f5^Cv+o65z?Myhd#JOD8TO|Lk=IWLhJjB6A zM6?j$JiWX)ue9p<>U+dpg8Ov%10^|mwb!mWEiJ8qJ8ICDo0|UJv`zKEzXN+qT|?M( z?CiGN)Ag~jv4c-B5yq=2<#5;UAEdY(?;sCSv2k(78~jgW=7JfcL5|zEv+IQr*|&0bzyG2QJo~7g zC3!b3@-%M9*7&R2T8@0U?O=@5i6lKea=AN2L`0;nOf6k_cfzqT!B_;bsxqL`Tv1U0 z3qDon{pM6tL!%G&|L@UuSzW^E(RMTi9|JS<^P{1_^WUcTUR=|e#zj0)AGkjhcyY2) zH^we5es;XOpj|;q&&0{OG5YZ_qe8^2|3OLhbkT=M$<^F_vdvT{2s{|zArDIm!Dt!ivdxfoN!f0pWwG8d=Jy14u?w&QJGhI(vE(x zW@*@s|M>BS)%Re%HDk+Zu_HF%{BPk1H=-cerTMG({xXzJ~QPpN?$3QJ1`)RU#`ZYvO;P zv!q%}dgI2QVM9le62G0^N;Pm2v2m7EF~U z58Puirqbb23z)<(qEWEm-3A@85SW*!zCkRvoVX%5`1&IX5>4AN1tp1Qz^!Ek6r7Mo+zhmQKD} zM*48Nr2k*f#?uUFR{Q&S*RDDI%8{>jm@@eEaJ&A9M$%6)@1f6j zbg0lv^W1feLUyf*E|o3z4{M%IUlTk-AEx-!H(6{4uw9_LU#Q8;Z# zIA$~U5iGGK&`isn$oX_*zlBh0r<`2H)X=Yz`!6RG-6{39dw~RdTlG2dvAaLs*#@Fxd($`a&i)m?8~yq z`NkW&jxkY}id9m4i<_K6Y6b_2MXGblsDd4(8aI_CS;-2klbpYPyurcA`M?7`OcUw~ z_Gy1wAtxut9J>Dai+427FMoSoo>I~}riZ??~vT}z{w&ZjRs2sFn(g;iSje(ik3#>NIUmv|lJH+0B{4zhSksXLYdDDp)eN1(n_%DBX0@~ zXS*YeZ=YbjUy_pgF+lZRHLa~yQcy7ARGKR`Q`~zGRtoRN&hGB3@bEW!U$jdd?#~rU zCAuyCy-re7`^BciD?i?v+FP*WOhf6f)$Z;>J1R-T!u-75-L!YOlwr;j^*#%cLhpvz z)D;vIN(`#J9v?#u+f?OD-(;#)OPJ@o^}IcJ9wpv5`kgTmWrU(;TH^TE?w3->vuMHC zVfd6T3vC2Sq@QgD6tZP$X|pyq>v<%R65<1#i^V*%?|EeRg*C*=~%X;`8J7D4gy7I`92=3b*gU9l<~`ZY3fi zx%ZLlU|L(rU76sXlG%G{%b7xI(J?{Aag1stMdVp_Z-yA_*{YSJqhsv(2OJU>?7>{y zqfV>Jsm8#|j#$P!)<6Fo9(s`8i=-0l9~fZ!Ts)nxY}?cMP@MB?ZpA|CP_`dAx;Zb4 zyo@6ZTd!`rgY_W?jvqgNl3lPdoPN+<_t>7EYVh}sZG2`_ZiX^7EFYMDp<16>nCQimr`ue%aI0x#8c9^4PYraB0eCZ45OHxv@?#1IP7&f7+tvy&~ zYC0SAGv&^GTXC#w)K?A5+4-Y%3c!_De)oS56(2z@D@QhQvC*>IIK~X7vgHKCf0FaJ z9ujVLFwED9MqV$xGv%Ej>TWy!$wp1+`qt>j1%Mx%yu5PQV;>*4e}6?{TyOhP|8R3+ zBwGe8|DfvWh{O0Nwrv(6hso8!!hziT(E+CuGZ*_=my29l1_tZDe{&Ee7`KEG5YkF= zO4h!z4o%sz)i{>v4_78h()Qs&Pt~J#Y(Vl0AwX~dD088$F3g!OReX2=0pkf z9Y)4g)wH|2!@8Q9^T$(5MLNY^;X1myxcLut0e-`Vl&oggu(&4;6{m0~TuT}soKTI7 zE?4$NQpexp;owkFS0@))kI&5HULXjMiYhHCnlEwsnJyB=Twh-gUA)K81%M8!>hZ~m z|4tLu($dl%VW^nqkpXO<)^>KG+@}BF-e^%ZIp$mIRXFa6yP3>POgqDe=SMTHcz~>S zqmpI-4j#P-1_I!HH08NH(^$4w%7~h9*rRNjkenO_CByoi zW<2PzlLxReb_4GTj@BqbV@~#0%1r80Ya7bTcK}B{P`?5(O-)T)2A@{PtBR>wbn3+2 z@x$}Z+m&cG16}hy!YNubyJjvgJSpcc{tT$sRjFo(>X;E~X=(~gi&ekds__xT6Oj4H zj@IuvqHWu;Kh44_S4N|ocGv!06cTFPwl`B^@&N9m-uH-XwEXEvDfB4;*^!o?8WNmy zo$e=VjhNytjYane!<)5S--&u`BoEqIRv9F58MYZaR*p@3EfCDv2c9gE>v=|?RA(97 z3HUIz*I}oly4u(B_wVnrXljx9^&$I-&k0FMVkLeDLwZmu9b9Js;J<(WUSrP(^Nxd~ zYY1I$lQRDWbA{Cb>To8Ob@6&%OaDq-Ujj^EOmuYNRv-zk&;Y{-Zi`vi{b;(g5bI{p<2Yp97$eK^I)mM}nn zOI#*I8-#qHD|O}icpnOIr9AMC8GsIUmbSPr#g?vBuV zp5ySPkg`3Ll$3O7J=R=q_qv@%7w#~3FM#v$(yW>GlYL-ifE+^$_j`+xvyKE!UIN_VfMhzijSf767DI#EvM&12h@Z1fsB1fE2sMMrUQ}AJ1CJ}r6{tVf@?$%JGvcZ-iOIt27tul}R2=y87IId%enWws3^9 zRI_=$WQ^`nH}*=DA*P6KXq#()L|l0hX%$Ig1WP;#B@=NXcZ5?-JS_)WBof7#DofEy z#IcxbYKG1Lg%0V>*&~_zH4C3EtO-jr^eYfek=z$P5xt+E#DvV z!g4%|&fy!YOm1)_A|^v5V_JPh3re9wq6FFer!OzhZK8J0^tu;O5d?i}NXj|P4~W^_ z0%KwZYm}hz#mSPUUDOyMb&*mxo#fLy&h3Kc0dm|#VFNt~r&ioqN_;n8$}xX|t+3TC z6fdTMK$Vx1=othuC3g*t4x8ZQh9S%Ag?h6)qEr?ma}9<@+>O zSW{CL-tX^Ac#M1}0`F^Y5W<+xv-Tv9(BVR}kRHLyVk^N}uaLxBgrVWzr=&mmf!>OM z%iuExLbTZx2jv^}j*%>amxPHE!AtPpdigPV@tvx%2~*?Mdh|&}Rz1xQ8r?f~gul(X zk?j65Pjzhgj3D39NwfV1O3il`&gsgB-O4>b1qd|XPNcR9^qh|BRSR`^vM(HtjVn6M z#x6!9b*jZye)Z_85$?@OB$svy-?HCoy8jtf-7=exGv6e{=}6T~qIToYtZcsTo3Hh_ z3uG~$z7+G{aL(%1zja|REqGr9`9sXwt1L*a^m+<;O+B&RNtEH2cX$GNmIbauy|PER z;>n{bvU=*lp6)&!V)kBHULA%C*&=#^!X+y`{LLk`Utf~Ugf1*c5oWu;Hm!-!3ay(! z^A@Nyhm*qy-cFYO!YcG~#KYp-bxwit9ru zluGsA2O^U3Y!T6KFPZ5b8(alH_0~IR2Dp4JncQViF{_(#cC8+Rw;PWVs{NvTFN!?Kp-Z^_H8-g?NxzT2xf(ttYxIr)#wpd-$jPVD zkWdctfltZCMEX3uT21!PC;62%?*_$E9=(a&LPH2w%*qrY%oxHbTIN08_tm2!xbHD> ziuv8bM4;lwmU{)7K5HOF2=mD`o73Mz3F5_vgY=)Dq5t%7{rf*W@vO$IoOz=@b8I>3 z+rAe3;m>2#zV!6a=Qs5VUmT6PY(IVSQ6K%9n4@>IcYf#{s%cAJIvbquqo`~zh47*p zo9D)i>6JB0-oM@ac5pLtS7$jCO&pTF2RMwd{!{PxAttJr=1xLdMa^p+m(Bz-`>#DT+M^Q33a5iq3h@cm1?E2Rd zWnpKPqLe(#XGHsfsM7b%NfM<^@6FQIOwf?b{b3tb_PVSOXDYlm$4;ZPxwnOykb28T zq=4z-OF6QjrK9;Kgvf1h)Mpwd$&V> ziDppON-c}Z%O5Vh)5V5e$P{MxU4MgR`pc_33eiD#7l{+mSRjxa_xE;LGd)wi{>8lo zg-9aIAQBM?&USUKBa-ek@<}yQCsA4^)f+^@;c}T~=H`hn%zG-1rvG>`F+vj^Vhg#BSDmGW*Z64>Fu~0 zj#hm7T?giaa1p%(v635FB|a@Colg@DLgF6(F5+!aKxh26&4u_z%}Eyiwvibf;S?H* zfp{PM|Mr4R_5JEgldv_2JKNOPf{GZBZtlnWs)yh&2vB-?hXnCt_ZuH)Fe_87KcY&D zuP2VPUo?o~H4Q+ryykX6m8tZj6YUOEM5astVb>a;hJqsQwKzHr`PURl2br)l7o)oOZ0ZoA*y(f zJ!5*FcCgb>Q}gJJA-xM(P)7g#A&#{L-b?!OlH&F`w!jCO9a{+#7g5Ri$4Z?Y%AYZI z?D$uZKem{6-{UM1l9A3NGMQJ99_dUcFys~kS-|BM>DFn428%90hkJw-R!0+G!Fdl&nL^c@*dWf&RdEoLS*L`Y0uAj*=H5;k2L z2#2FK1c+JhnDS2{TckmN#6w!mo0#cu z$Gv&8-><^+5d@AH`d6=BJ%9fE(W6J8iFfw&obR*{wlp_m)32?q0iNXM;201w+Ckt4 z8G-W55~|Ocs4jILUoGw7;Q{<;OntmFfkW^bp*YS%NBr>m(NC;$>jxnXF0QVGG~!;s zN-Vn)$Lu}>#^o`p>C>5OkEXp`7Ha&_-HlI3*xT8;cW^Mouf0Rz(pFA==lb?%H4Jp+ z&H^J%K8+T*9vP>8`IWN1=i;FXVg`>%-RcsvKwV67var*vv}{LH2o`XR5AxaBRKX;D zLu=~7D}@n~k&Aqs4g#pVO3W25I*$=ZZ*Oma_hZ0XBn+?123(%b;8}CXb_AiI8B{x{ zVk@bt>Ilj4qUF2lp0RP#Bfk_4I@fCr-$?P1*X3@YC}3h?xzhGSV}RPzin`92DdfMd_t34g-C9bx&noQY!p7$+GK*(tVX%E2cG$u z?;OyXz^pu!L0Z(>IdY4@}IA*uuA&m4>j%EuXqX`@TP8Xn>h;;YR* zmDw!}a%q;mwr2)j(qnR{F^t#n{@y?0m_csr?dl@AJ^c0_md6|{-X{k1d)K$(JAT*n zZ6kmD%rJ9eydPyjPR3=Rt*O~;c(vRhCa{EBSX!#4@XOCmsXusNLB2jxrY@%0M<7J- zs|QhJL_D9<%cz>n8+^-4)c4R1!~tRwl1=hgANu?ImEN$Bl9N{kg3|A`)R{2p18eQE zG0F!t;js5%u0kQTuoqeN42z4Hsv1Wg*+7L$_G)*^9W|*Bl;U1aIy$7M>(4OoMiY1% zj?F;|z@`WH2owiv)1HowC!^(W2dvBdPY*3EE&py3b+r4gJF9CJ7Pk3^Yc4DhYdtVa ziq|VW(+^SvHssL%?$ttUqvtkF3vXdz;f9$X*mAGK!#68SeZWa_I0n~FtlsjLs9TNe zN>r&Y+MZ2d7;&LgfX6{e)&zf4tC9aBy7w--tn%klwMNpzZOBxu&5{%_7=G4 zEj>5~o-02y_O`YVv*GW>ja)H&_dhL%~!hxo<(0@A2_;Yk1Cfz zT=sc^NrORhUnUl;W-tZ=|E}eO&@rhO^6VMhn~-JajZHMP-jI~7Y(=oTVB^)(g^{Kt zR8;FLD@hp{o5_t<-O0OPg05bt^SaUPhIK*_Mky5_o>l_pPc^V}An8}4E?Dw;d3m5_ zMMOqgUNV-NHcnqWz(p_v6iK-Y5|pH&)9kn48Q}R-U){f0UZWNU5&2D4mO8eG&z~nV z4gP}Hh{bWZabzmsM!{mfDdcdr#1r_%bwv#{A~^Z}ett#?>dMMg!cJyTwQw|}z-zQD zm_^2vOQWXse0EvtjF!4MhL3)j089RKrlEc(?9lfVu2&4lb6o)^6YsG;ovw||8hGr` z7Z#ICeEzJ?-Gv4Yci%oOJ?891BaQh{g0q^C>dg@ozxc~OP808?1fIsTI3i+jLk}k$ z38{t46(Xtbrj>wpWq#N3S57N9zBljMQBYA)QBsNoTv^WT3kusT%ubTHXIuJb`$`z& zd2h-WB_b)KeeQ;T`t)ffD=?FYn2PG}fVx!GlV7s71R zHzu2M2`Aj}fdyI44$n`Wm(53BL|+o>I)h6IZr&}&gXxzP3rbs+?U0MXoAh*XyV3H_ zPUXC&;4xuI{_)Iwxy)aHxrx)TV5xGOHo%;Un%UOz;<5@We<}#P;yz=rGV=xrS zxgVLBWF{xy*2o5!083HjIX1trP$-9uxj3l$7Bx3>*5nO~>gaPYhVhcp!TE*K0&$YT z$PUcpjc4bSN3%%uHVDkG?T`;)*Z!U*xoEKD* zxYw$Mvg5yyBqnpRxL@6d4;%sAQlqg#t$Z*a1stc(04CtKSXfzAWRzuRXM#w zF7!a&+BtCCP*G8_>7i_X{ra^HK@aH0Zj;wFqK+OcW>(f&f7~F;J3mhGR5b0L)ZOw* z+o1ed*D8HK@VJE*?(RPJ$=QCd_0M!AY&LH0fUPepqmBrGVO>Atum~B&Zr-+uZO*PO z77kq?xvD;yJ32Z#;D9iO3OGz2SB;oF*86*M!evwwV?1498Sc;&ygVq$x8|qP5vloL zlA$_IPvpr0Tn3OJLudr$ov?alw5M=JHe?M9QYB-9)x6a84OTuBU=`wqGAuI(>&b6n z^2Z|+5)&)%)T&L&FKu`bGzuPfHBk4BYdrsR03?m8B$8me4a0!$D++D3Ghv^3uu*Oq~Nj z!IMeT-YXfT9J)_viM^O687OZT7*;#DxVXUSxTW{^_!tlp{uu76EFoS21VrG7dx7N$ zdg=>;o67=RG}81i8xRlBl0p$?EQ?L_JP$>(@f7Bi7Fh7<>D2Ak>iCrWO!V|`p@WNt zV$+~kC!xr{SI_!sRSf27o=TFHmDTdfinXOBU>;M5>O=}n?;IR3U(H=7@Q6g)aj7bV zvyJXtA8B#1O+JeK33}Wk6Wgln`q0o&Xt&p8$E%(u#l-a0I6rns*|HtKfu=Qf1|F$Lr_(}PON20&VsK`US7Tx*ae`DLkP$i)%#Szy8*5w zxOUA$N0Ni17@7^lJ0Nz^=yOmsuz=STaf5}^fil+ms8Ps5ZuTx+-LySH>1X0c_@AsR z$0RR~7hb-^ZWm&fl$_oSGxa|pH9Q7mjp{p&Ey){#$%c)(=bz6xe+~Gp3 z)lUh7=GpZC@8HTkSyEE0tnCdICiOmWt~_ctW$u(#1V2V;k8|h> zXWcZE_3bn>GK#JE{e`?hQ|Jaa=J;s~?M1o6l&GvC@RpU{EGe%YGgH$Upe#pg1NXa^ zAGbw}Ra&dV{@xU{9sFc7;JnZV@U+#os)$;!;H9swXsNTHGV@-%=MV!iS&ipff8Ofq z6In%leSH^~J=b0d)~c{87wb`Fo3koR;-if*5;8Ic4#mD?>E?Oj25n+*lVZV=U>_-> zKUD$eJ|0MbuKbXQdIyL_?WtO(xCpe&f6Wa_Y(K8sY$~%HH=VYjM{P8}yw12dv;%Xg z;_@4fR6rfT)0h|{*$(JS8wUymcfA1scpq=M|)g|NYtZ`w9%Fi0B4b2+iZae#s3>maVZwMHHxZt2@XsbDnu%AtDf0P3PbGO?D!< zFEF`G8v~5DrN6n-A%h=aU|>M8t<<-QweX60Yyfsn6>+ul^Q$}j7@RNLjGA(V)S!F7 zSOE)7#66cH>{UbrwN!wghK7c$>@$<=&sIPTNP*LUO%E^yoN6r#i+2kuCMG68F!Vp$ zJ%UsK{G`tJ4XV>zR4&~Bgct*k=UxB=9?f5q0EqQxZ2*!iy^^PPFgWV#F3z`OkQ5J= z(3YISEn>C-E&&|2N{YTEc9<`9z6OUAB7(+RfbanQHJmJ`b<&a%e1m(%g*ggy@yDs= z>EUMM=~gZ5`V(sC**G{|o36eV;-gs6XM2dN5qP@YsE&<;g9EWOH2{|-y1xM%f-??V~H_7om-y_HUMKZqOf ziEWkUflgjlP_VPN2bVPjYE5m5OF#gv-4W6q*z{Qee{JODG3XazmEet`L1atLJ>wIW z3{JQ{!d6L=R&K*Py7`e|7cwddkraD_y;%OdElz@@$rFgZ)s{SghNPpw6|vq6x_%tUCkFEs^x_n z{@W9_ zkdOdwF0h%*=GYn)uT^NP5j*GOY{%1PaPXpe@D@CI2yKMM0B0nYMMXnP6R?rRhWUH4 zRl5xnXd$^IJzdN*ibzvaGcGxKwBRA5>O4lvM^==4J32`b4K;lVgFQ0{H-I*Bl^KSa zHY&(d|A&~KiHpk~s2&6lLSvxALumpdf-m?6c=>Ctlj_EEdr)2=o!6l|6j_{3SH{6; zKVP7=twhHkENZMX|H%Xf6*N5=4GkjtMHqBoxL3`T&q2^_@tRtR{zvn<=I5a?K*T@< z8Dnh^X(vh{i_a=23x5vF-?nr+`9|6mVRvnlA3mzpde8WHk9s=?ykLaPQGN z@5(Ubvx@>#mxrrJrHofU)5dEA!#Od>iwg?$VID(IQC3#o;20Pf$j!;|>dMd0ueKQo zBkG4Oc=wJeG6%f`J3YZoUH?ZT^9?l)qwc`V2d3S+46KIq$hB6h%1GF6I2chJAt52O zl76?#b)1}>0s;bHusArBcA`8Ro{XAyGL4&x>9--+ zx5PYvhTBO?e*^E8O2~oJ1@sF85mldZgA!P<3=!A&xO~svPe$GNC2Gw~_|>&BZ1HE4 z=ikqovt23<$TiMt4H&LyJ^&^EH$2&p+vG2YB5iNpa88m?z9Yzhpg`dUC-UDS_dyMHS6|}w zxd=iC|47dO#o#3Cg3#u{HFR-YFme3>1L;7>77*4>1a_;J<)RIM~@4LeViX z-{<9hRDXe~aScFWs@>fQC`!A#SDlNKOvS_F^N=k>uWAQxTA}PfQ-)u-DI~O8iXIbe z&^)j9{66s?FIX!ONI@X^02?#$xnyFGoZARCm!6&;(lxrpIw9CHJnRx{%D^m^8gbBB z%QgKn_+JNGK^Z_D&2MhrqM^BH#^V`vl(4NF1NK9H^X3G=udS)t_O`aIiRxaf%8zCI z_ybVw5GMxFBPJ$Br&xEb8Y}zd4jY?GZ@_al^uH(XqX3+HO?*5^5d1( zgtdEs`eAs@HavpYj_z)YtNcJYM~UuJUEM?nF+?YJdbD{(@WvejSsOlkSH0ICRDb*o z;bu`ymBXeK^WZ#Pfr$khzOdd?1W9WN>qsCrMEu@+7U$+zdEe73ONX&9*@}!QgK77J%EzXM64(-NQ`6F@(m+#A#N6PYErczCzEAS*oXsw*ptTFZa; zuI_Jr8H}$?oVGJUt}ptMFV%Erk;A3NUEHIA&nnGZUqgtzogW1S1wtrhNtfG~7ri$3 zcEk@Wr`hO7N5n{-4Av422p_q0X0TVGitZg9S(EeMxij`0;?qvy2b*Bi)&!i3*3QNc zW`9LeD0uWLl!RJ-)Q`z8!ijYhc>hitt905jKa@^PM5C5z(WGJ?ZG8-M$8n=oB1GJCt$q)fqtEl{DudKQmeEt*ddIe5i}C1=UQI# zPau~E*yv{>wV>?{`o*Kh%ld$iXty*ggZBn>UAW@YJ z$T)xze}Dh6B|Q^w<|_@7n3B>P9*F>$013Z>Fo&VuC0&>C#n=O(-+@w-Kr|0? zYRo#f6tgP2viuJzD@gmE!!N(UDtt!8yLzq2EK7@)n)-t$-R#4Eo(JL$ z!$4R)`=9P6z3u#MhgK|vEy4pZaydoldJ98}?VNhwH^TeCfBF3H0BxtLw{XV+C_6vQ>7|YBy z%qfY`AUqBAkyQk^2sXrM0;^j3lfG<}qXkkTqH@qjKX+dtzCnen%;<{%UxXWUuhRZV zX@Y(#9g3_7^U}`Rab*B3-@vwo?Ys}5&BLh~JIaB~ z80?Bg*Cf=*-r|pqzd=DkkUb7V0wrl~Zf-c9$CJp#QZ~wXHJO0=)a%l1rXb>W>qf}n zl!hk$r$5VSjum*9XDd=;o^PSj0Y9j|8`QF+Ja*!<*M}gApd|9m|Hd-zUH`DgY&(XI-t_v&+l$1T@}iPEb!s88y?uQv@t~aQFxc7Isl#Qe7@YFW!;p(TzS(^(%>?nq zY2cW8(DU=h83Q4rt!ag>Tu z5@F5-5m3Z+S(wzY+)M_Ee5(-rOpW5_i20wJM6YUJZTvN^U;hV&b_3n|$6193^Xxvu zoUe401Be0vPI%NLJUkpwHdq5~rH)YSK+{`zp~#{0)B693o%Tfxz7!|0$tVd^)UT^j z;=)XYge4)p1&p?hEFs5fd;$XZgW=QTV^BMuah)__(Gtl*4QoGq_}27T`b`__2M-(- zFCj0XSOa{4nAFrx8t?E{m(@Ock0sD&HqSZlgAJ{!s%qI~VPP>ExKjrn#rYxPNt|1= zrcKniIOm*sY1r3LYe%@Wt?%!W>Wibm%j$RULLqTR<^eMR)FNV8iZBtU*`V|GUTCp5 zMO+p^3m)CZy28!}zu`#~8SLGIgIfYm`hW->OkK~G^%_nfSz`ULc#3?et{+I-_Cx3!tb7w`+f4j#SPCBEN%he{56oJizN`taCmXpKQOvzP(W_d$0q zE^7cIY0Ihj*r&)gK}>(vlr7f%*GIV*dvh=->UI|MEMYFyzjJ6@phdytSD(f}9>*1P>7r z(WCnvVj}4nh&GGft1RR~$>W$x#J4BZu7j6oY|3+a#PK50@MJ1NNnTB^RMza-{{S`F BAHM(q diff --git a/docs/widgets/images/weather-7.png b/docs/widgets/images/weather-7.png index 7afb31c037d3f1ae2e59d9327a3b2dc9501a8af2..0196f06b015ce349ab7a630a6508e29017972c82 100644 GIT binary patch literal 5884 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 VMoSE60jJtnFI2RYs}!w}{{e7hRfPZm literal 5902 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 diff --git a/docs/widgets/images/weather-9.png b/docs/widgets/images/weather-9.png index 63ff15d5a5addeb07e12f805b2a9810171a03d70..13bdea2a8e5528ceaf620afa1b4957bb13007592 100644 GIT binary patch delta 14380 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 diff --git a/tests/widgets/golden/weather/daily-default.png b/tests/widgets/golden/weather/daily-default.png index 9029227f70a07ec2245dd226a17fc71df21a650f..5d9dc5e31af6bbed861015eb304f890a18b33168 100644 GIT binary patch literal 8089 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 literal 8081 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 diff --git a/tests/widgets/golden/weather/daily-large.png b/tests/widgets/golden/weather/daily-large.png index 356ac9e9008a165be8c3e12662a14158e290f40a..33b8aa77e31540cc7caf3c340b539213fdd08349 100644 GIT binary patch literal 16747 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 diff --git a/tests/widgets/golden/weather/daily-min.png b/tests/widgets/golden/weather/daily-min.png index 1978bbdb4b20abfa4646c28b478de40fa362102f..d748db0a1c938fd89c5ffa206bb6c58aa4a39e05 100644 GIT binary patch delta 2582 zcmV+x3hDK#6rU83B!A{fL_t(|ob8=kNEBZj$A7bzEKJvRb-^$t%?p@46iGqa1q~Dt zq27WJEXfzqD0}DvMG4aVK~plq5~3gxlSoWcRHP7$(h^kCP+QjxTTOE}cjx~w{ZHfU z%wv)No$R%W-` zrSL`>Af*W!TsEwKiijJ5OG--e^YcG`{7C&tl4L_eLw{3KQ&(4)L=GtfhNvi}83QXW z`9;Kyz;knR#l^)tckTp$rKKgi-G1iGna`g;M@B|U=aak$?_gaAN^3Eb5R#i8KYoxT z`Sj`29XoaafJ&vx$jIpL@8>DP1*1A4wYwJgqFyiHX&krhCa`T?%{*-o5B?E;qsq!k z0Emu`K7V=gWL{pLR;yL3)g2ujUf0K(VE4@BYT(JixZ=Kn#>U39T5WoI`mbNVsGOdj zo}i$h=;&yh%{Dwd{OQvtPwQh%uzSWKr|Ti%J_Hne0*{Q0kpGA8`}gnZhl+}d0HCd{ z&15pERI2jwa*yg;RX4A?^rLRC35+YiHOQKnn148a{5SwiO-%tna&q#QFJF!xJ*wC1 zbvj*pdpiJp|NdR4(?vx^6&4n5jg19> z+S=OPyLUG>HUfZ3r5YO>1Au{n0g@!Uy1Eh*6GeB6{wOK>$pa47=i6JOG`^cL<9h!9N|3%2)hRhKg46U{wypk+`fHVZZH19CooBpCX?yr z&71M@@c_`?-cCQ%($WF|nVFeh)VHc`Zk_mjb9;fxLP0?RK@hKAy^`CJzwk8>n#~9g z508(JcQptL3){STv(096I2;oD=^s3Q{(qcmPovRjGMVIdha~w0&dSOP3kw?>8saLP zl#~Pj8jWVtrcLGLlgzZqG73Jq-Y-Pk)~l z+daSG`t|Ettu{G1IXyi+J3BiqEp6-8twBLSA3l7L*D>IEAAI)g*;A)ZB_<}u#>T2t zeD5SEf%op+%VVQp91cfXTH4&)TyStOJ%4g?lA1-3A1?hLJa~|ll*F$t0O{*=&7%eFlReA|fIpB0{UxO5`LRf*|mc z9XHh0*4EV2P`WNJF9Se$c=($)Z|F8or?b1eyQ8CHbaZrSX-Tiwr>3Un=H@0OBp{oh zprFCQ!IF{^Dx5+?Ln)=}>grNcQ>FbMZy{V zzP?^k&#}OQ=Ze?W!<)1ilLRc3GbdBG=dq-u)#Kiph^G8z8vA{yf%*+IU z>gsBgQ&m+(m+;V`L(R?2vwyR*Hk)aS@1E3d zV}XUz*4C!cXy)hVsXu3CX6R476%`e(MXXjUby-kkWo4m54Gj$jgJE%TQEIobz#dRq zT8h#Y6%|OiqM{4!z&E~6DuS)JQ7T60F_!#u)sp0@3%`yNud%00|WdTx3;#TG_^a# z^=y)Y1s2Nr^XE}ICx0i0N;n*jOP4Nj6?SClWySeD@?rthGAt6EP z1*uqIK@=1eAgL~2zKrtic6(`QDZjL#p`mnjmzS5R&DIo+jg69ejsqKqEb z8K=`ppR}T=s;ZLPFYd=A*B19$V20AJ#ymNG#MIQ3!C*j*mY0_&w?`!D_Juz(S|fpQ zW8Si5OMhKm9hHuXilQ&%kQZs+CJDSglrcKX&(AL^Dk2Et@#DwTPh9u{>`x|c$3#FI zWYNuB$4xvBKMZ4J$w<)8=Ho0aE!Ef87Z(@H?Z{u&W1<5;-O9*1eIOdEDfggTlE$C?xPZ6<-z!jJafghfvzf0vR;$7rj4$F7sSv!H= zMJpaGuxR+;4H)nae-RP>B)x8|)4FJkj9`Hkj*8^i$Bpp_A8bQv=l;Ll`@VDMz^ol4 s=-)0H$FY*2hwG}q#TqLEx~BgDj0lf)I}dmH6aWAK07*qoM6N<$f_A|G<^TWy delta 2593 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 DY@-X> diff --git a/tests/widgets/golden/weather/hourly-details-default.png b/tests/widgets/golden/weather/hourly-details-default.png index 10516cf3015c9cc7c37823b65505680a2bdfbe5b..6810780fd0bb75b083a884a29a25fe5529bdb36a 100644 GIT binary patch literal 8629 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 diff --git a/tests/widgets/golden/weather/hourly-details-large.png b/tests/widgets/golden/weather/hourly-details-large.png index c8146b267ab4f3944a77a9113c5b4c9be9f05abe..4680a087701284af428af526cbac874d31356095 100644 GIT binary patch literal 15850 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 IKYIDU0NyH-761SM literal 18064 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 Date: Tue, 10 Nov 2026 06:11:29 +0100 Subject: [PATCH 2/7] Add the Basic editor: a grid of regions with a widget in each A dashboard now has a mode, chosen when it is created and kept: Advanced (the editor there is, and the default, so every stored dashboard stays as it was) or Basic. There is no conversion between the two. A Basic dashboard is a grid cut into regions with one widget in each; nothing is dragged, resized or aligned. It goes through the same pipeline as an Advanced one (compile, preview, Media Source, delivery, export), so everything is still ODL drawn by odl-renderer. Model and backend - Dashboard `mode` ("basic" | "advanced", default advanced) and, for Basic, a `layout` with `columns`, `rows`, `gap` and `regions`. A region is a rectangle of cells (row, column, rowSpan, columnSpan) of any size up to the whole grid; the regions cover every cell exactly once. A widget item carries the `region` it fills. - `basic_layout.py` validates the layout and sets the frame of each widget from its region, through the SDK grid, so the layout is the one place that says where a widget is. Advanced dashboards may not carry a layout or a region; a Basic one holds widgets only, one to a region. schemaVersion stays 1, the new fields are optional. - `bootstrap` sends the limits of a grid (`layoutLimits`) and the new `opendisplay_studio/layout_frames` command returns where the cells and the regions of a layout are on a display, so the panel never lays out a grid itself. Choosing the editor and the display (new dashboard dialog) - The dialog starts with the editor (Advanced by default), then where the display comes from (a device, a predefined display, a custom size), the display and the name side by side, and a preview of the display with two arrows that turn it a quarter at a time. The turn is animated: a lean back, a swing past and a settle (rotation-motion.ts). The preview bar shows the resolution with the turn and the colors of the palette. - Padding and snap size are offered only for Advanced; Basic keeps its padding in the layout panel and has nothing to snap to. The Rotation select is gone, the arrows replace it. - One drawing of a display (ods-display-preview) serves the dialog and the cards of the list: the proportions of the resolution, the housing turned as the display is set up, its light and button where they are on the device. The list marks each dashboard Basic or Advanced on the picture, with the colors of its palette on the left and the resolution on the right, and the card is no taller than its content. The Basic editor - The same canvas, library and properties panel as Advanced, with the differences passed in as properties instead of a second copy: regions on the canvas instead of elements, a library with widgets only, no structure tree, no arrange bar, and the zoom bar kept. Commands that move, copy or regroup elements are disabled for a Basic dashboard. - Layout tab: columns, rows, gap and outer padding. A click on one cell and a click on another join the cells between them into a region; one that would cut another in two is refused. A double click removes a region. Regions are lettered A, B, C ... in the order they were made, with their size in cells. Resizing the grid keeps the regions that still fit and fills the rest with cells. - Widgets tab: a widget goes into a region by dragging, or into the selected region (or the first empty one) by a click. Only an empty region is drawn with a border; a region with a widget is not, and the selected one is outlined. A click beside the regions lets go of the selection, so what is left is the picture as it will be rendered. - Pure logic lives in grid-layout.ts (regions, lettering, hit testing) and basic-ops.ts (dashboard changes), with unit tests. Also - The dev harness learns the layout command, a basic preview and the new limits. - New files are added to the tsconfig allow-list; the bundle is rebuilt. - README gets a section on the two editors with plain screenshots, and the picture of the new dashboard dialog is replaced. ROADMAP gets phase 12, CLAUDE.md the rule that a dashboard keeps its mode. Tests - Backend: validation (any rectangles, a region as wide as the grid, a gap in the tiling refused), frames of a layout, compile and render of a Basic dashboard, the command. - Frontend unit: region operations, lettering, placing a widget, hit testing, display shape, rotation motion. E2E: choosing the editor, the grid, joining and removing regions, filling them, saving, reopening, the marks in the list, selection and borders, the preview and its turn. The Windows snapshot of the dialog is updated; the Linux one has to be updated where Linux runs. - Known: tests/test_images.py::test_a_camera_entity_is_drawn_from_its_current_picture fails in this environment, with or without this change. --- CLAUDE.md | 4 + README.md | 70 +- ROADMAP.md | 48 + .../opendisplay_studio/basic_layout.py | 130 + .../opendisplay_studio/dashboards.py | 21 + .../frontend/opendisplay-studio.js | 3285 ++++++++++++----- custom_components/opendisplay_studio/items.py | 3 + .../opendisplay_studio/websocket.py | 4 + .../opendisplay_studio/websocket_basic.py | 62 + docs/images/basic-gallery.webp | Bin 0 -> 39038 bytes docs/images/basic-grid.webp | Bin 0 -> 48670 bytes docs/images/basic-join.webp | Bin 0 -> 48574 bytes docs/images/basic-many-regions.webp | Bin 0 -> 77660 bytes docs/images/basic-new-dashboard.webp | Bin 0 -> 22106 bytes docs/images/basic-regions.webp | Bin 0 -> 44176 bytes docs/images/basic-result.webp | Bin 0 -> 77512 bytes docs/images/basic-widgets-empty.webp | Bin 0 -> 62042 bytes docs/images/basic-widgets.webp | Bin 0 -> 81272 bytes docs/images/new-dashboard.webp | Bin 49184 -> 22522 bytes frontend-src/e2e/basic-editor.spec.ts | 348 ++ frontend-src/e2e/dashboard-library.spec.ts | 85 +- .../new-dashboard-dialog-chromium-win32.png | Bin 29111 -> 34586 bytes frontend-src/e2e/documentation-basic.spec.ts | 291 ++ frontend-src/e2e/elements.spec.ts | 4 +- frontend-src/src/basic-ops.test.ts | 140 + frontend-src/src/basic-ops.ts | 117 + frontend-src/src/commands.ts | 31 +- frontend-src/src/dashboards.ts | 28 +- frontend-src/src/dev-layout.ts | 80 + frontend-src/src/dev.ts | 47 +- frontend-src/src/display-shape.test.ts | 83 + frontend-src/src/display-shape.ts | 96 + frontend-src/src/events.ts | 13 +- frontend-src/src/grid-layout.test.ts | 258 ++ frontend-src/src/grid-layout.ts | 230 ++ frontend-src/src/ods-app.ts | 388 +- frontend-src/src/ods-basic-steps.ts | 67 + frontend-src/src/ods-canvas.ts | 213 +- frontend-src/src/ods-dashboard-card.ts | 148 +- frontend-src/src/ods-display-preview.ts | 234 ++ frontend-src/src/ods-inspector.ts | 50 +- frontend-src/src/ods-layout-panel.ts | 165 + frontend-src/src/ods-library.ts | 13 +- frontend-src/src/ods-new-dashboard-dialog.ts | 394 +- frontend-src/src/ods-region-layer.ts | 434 +++ frontend-src/src/rotation-motion.test.ts | 57 + frontend-src/src/rotation-motion.ts | 54 + frontend-src/src/strings.de.ts | 43 + frontend-src/src/strings.pl.ts | 43 + frontend-src/src/strings.ts | 43 + frontend-src/src/studio-api.ts | 16 + frontend-src/src/studio-styles.ts | 5 +- frontend-src/src/test-support.ts | 1 + frontend-src/src/types.ts | 40 + frontend-src/tsconfig.json | 9 + tests/test_basic_layout.py | 357 ++ 56 files changed, 6870 insertions(+), 1382 deletions(-) create mode 100644 custom_components/opendisplay_studio/basic_layout.py create mode 100644 custom_components/opendisplay_studio/websocket_basic.py create mode 100644 docs/images/basic-gallery.webp create mode 100644 docs/images/basic-grid.webp create mode 100644 docs/images/basic-join.webp create mode 100644 docs/images/basic-many-regions.webp create mode 100644 docs/images/basic-new-dashboard.webp create mode 100644 docs/images/basic-regions.webp create mode 100644 docs/images/basic-result.webp create mode 100644 docs/images/basic-widgets-empty.webp create mode 100644 docs/images/basic-widgets.webp create mode 100644 frontend-src/e2e/basic-editor.spec.ts create mode 100644 frontend-src/e2e/documentation-basic.spec.ts create mode 100644 frontend-src/src/basic-ops.test.ts create mode 100644 frontend-src/src/basic-ops.ts create mode 100644 frontend-src/src/dev-layout.ts create mode 100644 frontend-src/src/display-shape.test.ts create mode 100644 frontend-src/src/display-shape.ts create mode 100644 frontend-src/src/grid-layout.test.ts create mode 100644 frontend-src/src/grid-layout.ts create mode 100644 frontend-src/src/ods-basic-steps.ts create mode 100644 frontend-src/src/ods-display-preview.ts create mode 100644 frontend-src/src/ods-layout-panel.ts create mode 100644 frontend-src/src/ods-region-layer.ts create mode 100644 frontend-src/src/rotation-motion.test.ts create mode 100644 frontend-src/src/rotation-motion.ts create mode 100644 tests/test_basic_layout.py diff --git a/CLAUDE.md b/CLAUDE.md index 3306b36..62d0608 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -160,6 +160,10 @@ dashboard document ─▶ validate ─▶ resolve widget data ─▶ resolve exp tested with a stored fixture of the previous version. Never rely on "records that fail validation are skipped". - TypeScript types and Python validation change together, in one change. +- A dashboard has a `mode`, `advanced` (the default) or `basic`, chosen when it is created + and never changed. A basic dashboard has a `layout` (a grid and its regions) and widget + items with a `region`; the backend sets their frames from the layout. An advanced one has + neither. Never add a conversion between the modes. - `items` is a **tree**. Sibling order is z-order: first drawn first; the last child is on top. Item kinds: `primitive` (exactly one ODL element), `widget` (zero or more ODL elements from its renderer), `container` (editor-side diff --git a/README.md b/README.md index 21c10f9..fd7a66e 100644 --- a/README.md +++ b/README.md @@ -41,11 +41,11 @@ display can fetch. ## Start from the display you own Create a dashboard from a display Home Assistant already knows, from a list of -common panels, or at any custom size. Rotation is part of the dashboard, so a -portrait display just works. +common panels, or at any custom size. Rotation is part of the dashboard: turn the +display in the preview and the canvas turns with it, so a portrait display just works.

- The new dashboard dialog, starting from a device + The new dashboard dialog: a device, a name and a preview of the display that the arrows turn

All your dashboards live in one list, with their size, colours and state @@ -56,6 +56,70 @@ device with one click. The list of dashboards

+## Two editors: Basic and Advanced + +You choose the editor when you create a dashboard, and the dashboard keeps it. +**Advanced** is the full editor described below: place and arrange every element +freely. **Basic** cuts the screen into regions and puts one widget in each; there is +nothing to align, so a screen is made in a few clicks. Advanced is the default, and +the list of dashboards marks each one as Basic or Advanced. A dashboard is never +converted from one to the other. + +

+ The new dashboard dialog with the Basic editor chosen +

+ +**1. Set the grid.** On the *Layout* tab pick the number of columns and rows, and the gap +between the cells. + +

+ A grid of three columns and two rows +

+ +**2. Make the regions.** Click one cell, then another: the cells between them become one +region. A region that would be cut in two is refused. Double-click a region to remove it; its cells are free again. Regions are lettered A, B, C … in the order you made them. + +

+ Choosing the second cell of a region +

+ +

+ Two joined regions, one of them selected +

+ +**3. Fill them with widgets.** On the *Widgets* tab drag a widget into a region, or select +a region and click a widget. Selecting a widget shows its properties on the right; with no +tree and no alignment tools there is more room for them. + +

+ The Widgets tab with four empty regions +

+ +

+ Four widgets in four regions, the weather widget selected +

+ +Only empty regions are drawn with a border. Click beside the regions to let go of the +selection and you see the picture as it will be rendered. + +

+ The four widgets with nothing selected, as they will be rendered +

+ +There is no limit to the layout but the size of the grid: a region may be any rectangle +of cells, so a tall one, a square one and a row of single cells can share a screen. + +

+ A grid of six columns and four rows cut into ten regions of different sizes +

+ +

+ The list of dashboards, each marked Basic or Advanced +

+ +A Basic dashboard is rendered by the same `odl-renderer` as an Advanced one, and its image +address works the same way. + ## Shapes you can shape Select a polygon and drag its points. Click the **+** on an edge to add a point, diff --git a/ROADMAP.md b/ROADMAP.md index afa0557..bb524a9 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -33,6 +33,7 @@ Tick a step's box in the same change that completes it. | 9 | Widget catalog (Sensor card, Agenda, Weather, …) | 8 | | 10 | Finishing | all | | 11 | Import and export of dashboards | 1, 8 | +| 12 | Basic editor (a grid of regions, a widget in each) | 8, 9 | Phases 3 and 5 may run in parallel once phase 2 has landed the inspector shell. Phase 8 may start in parallel with phases 4–7. @@ -947,6 +948,52 @@ and out of backups. Deliberately simple: export writes a file, import reads a fi --- +## Phase 12 — Basic editor + +A second editor beside the full one. A dashboard is created in one of two **modes** and +keeps it: `advanced` (everything above, the default, and what a stored dashboard without a +`mode` is) or `basic`. There is no conversion in either direction. A basic dashboard is a +grid cut into **regions**, with one widget in each; nothing is dragged, resized or aligned. +It renders through the same pipeline as an advanced one, and everything that reaches a +display is still ODL drawn by `odl-renderer`. + +- [x] **12.1 Model and validation.** `mode` (`basic` | `advanced`) and, for a basic + dashboard, `layout: { columns, rows, gap, regions }`; a widget item carries `region`. A + region is a rectangle of cells (`row`, `column`, `rowSpan`, `columnSpan`, any size up to + the whole grid), and the regions cover every cell exactly once. The backend derives each + widget's `frame` from its region (`basic_layout.py`, through the SDK's `grid()`), so the + layout is the one place that says where a widget is; `schemaVersion` stays 1 and the new + fields are optional. An advanced dashboard may not have a `layout` or a `region`; a basic + one holds widgets only, at most one to a region. `bootstrap` sends the limits of a grid + (`layoutLimits`) and `opendisplay_studio/layout_frames` returns where the cells and + regions of a layout are on a display, so the panel never lays a grid out itself. +- [x] **12.2 Choosing the editor.** The new-dashboard dialog starts with the editor + (Advanced by default), then where the display comes from (a device, a predefined display + or a custom size), the display and the name, a preview of the display with arrows that + turn it, and the advanced display options (advanced mode only). The list of dashboards + marks each card Basic or Advanced and opens it in its own editor. +- [x] **12.3 Display preview.** One drawing of a display (`ods-display-preview`) for the + cards and the dialog: the proportions of the resolution, the housing turned as the display + is set up, its light and button where they are on the device. In the dialog a change of + rotation is animated: a lean back, a swing past and a settle (`rotation-motion.ts`). +- [x] **12.4 Layout tab.** The left panel has the grid (columns, rows, gap, outer padding). + One click on a cell and one on another make a region of the cells between them; a region + that would cut another in two is refused. A double click removes a region. Regions are + lettered A, B, C … in the order they were made, with their size in cells. Resizing the + grid keeps the regions that still fit. +- [x] **12.5 Widgets tab.** The left panel is the library with widgets only. A widget goes + into a region by dragging, or into the selected one (or the first empty one) by a click. + Properties are on the right; there is no structure tree and no arrange bar, and the + canvas keeps its zoom bar. Only an empty region is drawn with a border; a click beside + the regions lets go of the selection, so what is left is the rendered picture. +- [x] **12.6 Tests.** Backend: validation (any rectangles, a region as wide as the grid, + gaps in the tiling refused), frames of a layout, compile and render of a basic dashboard. + Frontend unit: region operations and lettering, placing a widget, hit testing, display + shape and rotation motion. E2E: choosing the editor, the grid, joining and removing + regions, filling them, saving, the gallery marks, selection and borders, the preview. + +--- + ## Deviations from LVGL (deliberate) | LVGL behaviour | Ours | Why | @@ -965,3 +1012,4 @@ and out of backups. Deliberately simple: export writes a file, import reads a fi | Fixed 5 px grid | Grid step is the dashboard `snapSize`; all other thresholds as measured | Displays differ in resolution; user already sets snap size | | — (not an LVGL matter) | Document `schemaVersion` stays 1 and shape changes ship without migrations until the first public release of the dashboard model | Pre-release; the model changes shape every phase (flat list → tree → containers) | | One field holds either a literal or an expression | Item `expressions` map beside the literals | Literals keep their shape (typed TS/Python, `ha-form`), switching the `{}` toggle off restores the value without loss | +| — (not an LVGL matter) | A dashboard has a `mode`; a basic one is a grid of regions with a widget in each, edited in its own editor | A simpler way to make a screen for those who do not need free placement; no conversion between the editors | diff --git a/custom_components/opendisplay_studio/basic_layout.py b/custom_components/opendisplay_studio/basic_layout.py new file mode 100644 index 0000000..b97c06a --- /dev/null +++ b/custom_components/opendisplay_studio/basic_layout.py @@ -0,0 +1,130 @@ +"""The layout of a basic dashboard: a grid cut into regions, a widget in each.""" + +from __future__ import annotations + +from typing import Any, Final + +from .odl import Box +from .sdk.layout import grid +from .validation import fail, integer, string + +MIN_LINES: Final = 1 +MAX_LINES: Final = 12 +DEFAULT_GAP: Final = 8 +MAX_GAP: Final = 64 +MAX_ID_LENGTH: Final = 64 + +type Layout = dict[str, Any] + +LAYOUT_LIMITS: Final = { + "minLines": MIN_LINES, + "maxLines": MAX_LINES, + "defaultGap": DEFAULT_GAP, + "maxGap": MAX_GAP, +} + + +def working_area(width: int, height: int, padding: int) -> Box: + """Return what is left of the display inside its padding.""" + return Box(padding, padding, width - 2 * padding, height - 2 * padding) + + +def grid_cells(area: Box, columns: int, rows: int, gap: int) -> list[Box]: + """Return the cells of the grid in reading order, laid out by the SDK.""" + return grid(area, columns, rows, gap) + + +def region_frame( + cells: list[Box], columns: int, region: dict[str, Any] +) -> dict[str, int]: + """Return the frame of a region: from its first cell to its last.""" + first = cells[region["row"] * columns + region["column"]] + last = cells[ + (region["row"] + region["rowSpan"] - 1) * columns + + region["column"] + + region["columnSpan"] + - 1 + ] + return { + "x": first.x, + "y": first.y, + "width": last.x + last.width - first.x, + "height": last.y + last.height - first.y, + } + + +def _region(value: object, index: int, columns: int, rows: int) -> dict[str, Any]: + name = f"layout.regions[{index}]" + if not isinstance(value, dict): + fail(f"{name} must be an object") + region: dict[str, Any] = { + "id": string(value.get("id"), f"{name}.id", MAX_ID_LENGTH), + "row": integer(value.get("row"), f"{name}.row", 0, rows - 1), + "column": integer(value.get("column"), f"{name}.column", 0, columns - 1), + "rowSpan": integer(value.get("rowSpan"), f"{name}.rowSpan", 1, rows), + "columnSpan": integer( + value.get("columnSpan"), f"{name}.columnSpan", 1, columns + ), + } + if ( + region["row"] + region["rowSpan"] > rows + or region["column"] + region["columnSpan"] > columns + ): + fail(f"{name} reaches beyond the grid") + return region + + +def _check_tiling(regions: list[dict[str, Any]], columns: int, rows: int) -> None: + """Every cell of the grid belongs to exactly one region.""" + owners = [[0] * columns for _ in range(rows)] + for region in regions: + for row in range(region["row"], region["row"] + region["rowSpan"]): + for column in range( + region["column"], region["column"] + region["columnSpan"] + ): + owners[row][column] += 1 + if any(count != 1 for line in owners for count in line): + fail("layout.regions must cover every cell of the grid exactly once") + + +def validate_layout(value: object) -> Layout: + """Check the grid and its regions and return them in normal form.""" + if not isinstance(value, dict): + fail("layout is required for a basic dashboard") + columns = integer(value.get("columns"), "layout.columns", MIN_LINES, MAX_LINES) + rows = integer(value.get("rows"), "layout.rows", MIN_LINES, MAX_LINES) + gap = integer(value.get("gap", DEFAULT_GAP), "layout.gap", 0, MAX_GAP) + raw = value.get("regions") + if not isinstance(raw, list) or not raw: + fail("layout.regions must be a list of regions") + regions = [_region(item, index, columns, rows) for index, item in enumerate(raw)] + if len({region["id"] for region in regions}) != len(regions): + fail("layout.regions must have unique ids") + _check_tiling(regions, columns, rows) + return {"columns": columns, "rows": rows, "gap": gap, "regions": regions} + + +def apply_layout( + items: list[dict[str, Any]], layout: Layout, display: dict[str, int] +) -> None: + """ + Put each widget of a basic dashboard in the frame of its region. + + A basic dashboard holds widgets only, each in a region of its own. The frame a + client sent is replaced: the layout is the one place that says where a widget is. + """ + columns = layout["columns"] + area = working_area(display["width"], display["height"], display["padding"]) + cells = grid_cells(area, columns, layout["rows"], layout["gap"]) + regions = {region["id"]: region for region in layout["regions"]} + taken: set[str] = set() + for item in items: + if item["kind"] != "widget": + fail("a basic dashboard holds widgets only") + region_id = item.get("region") + if not isinstance(region_id, str) or region_id not in regions: + fail(f"{item['id']} needs a region of the layout") + if region_id in taken: + fail("a region holds one widget") + taken.add(region_id) + item["frame"] = region_frame(cells, columns, regions[region_id]) diff --git a/custom_components/opendisplay_studio/dashboards.py b/custom_components/opendisplay_studio/dashboards.py index 496c956..0701bd2 100644 --- a/custom_components/opendisplay_studio/dashboards.py +++ b/custom_components/opendisplay_studio/dashboards.py @@ -13,6 +13,7 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.storage import Store +from .basic_layout import apply_layout, validate_layout from .const import SCHEMA_VERSION, STORAGE_KEY, STORAGE_VERSION from .items import validate_items from .palette import PALETTE_COLORS @@ -33,6 +34,8 @@ MAX_NAME_LENGTH = 100 LANGUAGE_PATTERN = re.compile(r"^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$") PALETTES = frozenset(PALETTE_COLORS) +# Advanced: a free canvas. Basic: a grid of regions with a widget in each. +MODES = frozenset({"advanced", "basic"}) def validate_dashboard( @@ -64,10 +67,15 @@ def validate_dashboard( status = value.get("status", "draft") if status not in {"draft", "ready"}: raise DashboardValidationError("status must be draft or ready") + # A dashboard stored before the modes existed is an advanced one. + mode = value.get("mode", "advanced") + if mode not in MODES: + raise DashboardValidationError("mode must be advanced or basic") normalized: Dashboard = { "schemaVersion": SCHEMA_VERSION, "name": string(value.get("name"), "name", MAX_NAME_LENGTH), "status": status, + "mode": mode, "language": language, "display": { "profileId": display.get("profileId") @@ -86,12 +94,25 @@ def validate_dashboard( }, "items": items, } + _apply_mode(normalized, value) for key in ("id", "createdAt", "updatedAt"): if key in value: normalized[key] = value[key] return normalized +def _apply_mode(normalized: Dashboard, value: dict[str, Any]) -> None: + """Check what only a basic dashboard has, and put its widgets in their regions.""" + if normalized["mode"] == "advanced": + if "layout" in value: + raise DashboardValidationError("layout belongs to a basic dashboard") + if any("region" in item for item in normalized["items"]): + raise DashboardValidationError("region belongs to a basic dashboard") + return + normalized["layout"] = validate_layout(value.get("layout")) + apply_layout(normalized["items"], normalized["layout"], normalized["display"]) + + class DashboardStore: """Serialize dashboard mutations and persist them through HA Store.""" diff --git a/custom_components/opendisplay_studio/frontend/opendisplay-studio.js b/custom_components/opendisplay_studio/frontend/opendisplay-studio.js index f75626d..a76643f 100644 --- a/custom_components/opendisplay_studio/frontend/opendisplay-studio.js +++ b/custom_components/opendisplay_studio/frontend/opendisplay-studio.js @@ -138,6 +138,9 @@ var e = (e, t) => `${e} × ${t}`, t = { deviceDetails: "Dashboard size and colors", colors: "Colors", create: "Create dashboard", + previewLabel: "Display preview", + turnLeft: "Turn 90° to the left", + turnRight: "Turn 90° to the right", creating: "Creating…" }, header: { @@ -528,6 +531,39 @@ var e = (e, t) => `${e} × ${t}`, t = { seven_color: "Seven colors · Spectra 6 and orange", grayscale4: "Grayscale · 4 levels", grayscale16: "Grayscale · 16 levels" + }, + basic: { + modeTitle: "Editor", + basic: "Basic", + basicHint: "A grid of regions, a widget in each.", + advanced: "Advanced", + advancedHint: "Place every element freely.", + badgeBasic: "Basic", + badgeAdvanced: "Advanced", + stepsLabel: "Editor steps", + stepLayout: "Layout", + stepWidgets: "Widgets", + widgetsHeading: "Widgets", + layoutTitle: "Layout", + layoutHeading: "Regions", + gridHeading: "Grid", + columns: "Columns", + rows: "Rows", + gap: "Gap", + regionsHeading: "Regions", + regionsHint: "Click one cell, then another, to join the cells between them into a region. Double-click a region to remove it.", + joinStarted: "Click a second cell to finish the region.", + joinInvalid: "That would cut a region in two.", + cancelJoin: "Cancel", + regionCount: (e) => `${e} ${e === 1 ? "region" : "regions"}`, + cell: (e, t) => `Cell in row ${e} and column ${t}`, + regionSize: (e, t) => `${e}×${t} region`, + region: (e) => `Region ${e}`, + emptyRegion: "Empty region", + emptyRegionHint: "Pick a widget from the list.", + noEmptyRegion: "Every region already holds a widget.", + layoutStepHint: "Draw the regions first, then fill them on the Widgets tab.", + widgetsStepHint: "Drag a widget into a region, or click one to fill the selected region." } }, n = { common: { @@ -664,6 +700,9 @@ var e = (e, t) => `${e} × ${t}`, t = { deviceDetails: "Größe und Farben des Dashboards", colors: "Farben", create: "Dashboard erstellen", + previewLabel: "Vorschau des Displays", + turnLeft: "Um 90° nach links drehen", + turnRight: "Um 90° nach rechts drehen", creating: "Wird erstellt…" }, header: { @@ -1046,6 +1085,39 @@ var e = (e, t) => `${e} × ${t}`, t = { seven_color: "Sieben Farben · Spectra 6 und Orange", grayscale4: "Graustufen · 4 Stufen", grayscale16: "Graustufen · 16 Stufen" + }, + basic: { + modeTitle: "Editor", + basic: "Einfach", + basicHint: "Ein Raster aus Bereichen, in jedem ein Widget.", + advanced: "Erweitert", + advancedHint: "Jedes Element frei platzieren.", + badgeBasic: "Einfach", + badgeAdvanced: "Erweitert", + stepsLabel: "Schritte des Editors", + stepLayout: "Layout", + stepWidgets: "Widgets", + widgetsHeading: "Widgets", + layoutTitle: "Layout", + layoutHeading: "Bereiche", + gridHeading: "Raster", + columns: "Spalten", + rows: "Zeilen", + gap: "Abstand", + regionsHeading: "Bereiche", + regionsHint: "Klicke eine Zelle und dann eine zweite, um die Zellen dazwischen zu einem Bereich zu verbinden. Klicke einen Bereich doppelt an, um ihn zu entfernen.", + joinStarted: "Klicke eine zweite Zelle, um den Bereich abzuschließen.", + joinInvalid: "Das würde einen Bereich zerschneiden.", + cancelJoin: "Abbrechen", + regionCount: (e) => `${e} ${e === 1 ? "Bereich" : "Bereiche"}`, + cell: (e, t) => `Zelle in Zeile ${e} und Spalte ${t}`, + regionSize: (e, t) => `Bereich ${e}×${t}`, + region: (e) => `Bereich ${e}`, + emptyRegion: "Leerer Bereich", + emptyRegionHint: "Wähle ein Widget aus der Liste.", + noEmptyRegion: "Jeder Bereich enthält schon ein Widget.", + layoutStepHint: "Zeichne zuerst die Bereiche und fülle sie dann im Tab Widgets.", + widgetsStepHint: "Ziehe ein Widget in einen Bereich oder klicke es an, um den gewählten Bereich zu füllen." } }, r = (e, t, n, r) => { if (e === 1) return t; @@ -1187,6 +1259,9 @@ var e = (e, t) => `${e} × ${t}`, t = { deviceDetails: "Rozmiar i kolory dashboardu", colors: "Kolory", create: "Utwórz dashboard", + previewLabel: "Podgląd wyświetlacza", + turnLeft: "Obróć o 90° w lewo", + turnRight: "Obróć o 90° w prawo", creating: "Tworzenie…" }, header: { @@ -1569,6 +1644,39 @@ var e = (e, t) => `${e} × ${t}`, t = { seven_color: "Siedem kolorów · Spectra 6 i pomarańczowy", grayscale4: "Skala szarości · 4 poziomy", grayscale16: "Skala szarości · 16 poziomów" + }, + basic: { + modeTitle: "Edytor", + basic: "Podstawowy", + basicHint: "Siatka regionów, w każdym widżet.", + advanced: "Zaawansowany", + advancedHint: "Każdy element ustawiasz swobodnie.", + badgeBasic: "Podstawowy", + badgeAdvanced: "Zaawansowany", + stepsLabel: "Kroki edytora", + stepLayout: "Układ", + stepWidgets: "Widżety", + widgetsHeading: "Widżety", + layoutTitle: "Układ", + layoutHeading: "Regiony", + gridHeading: "Siatka", + columns: "Kolumny", + rows: "Wiersze", + gap: "Odstęp", + regionsHeading: "Regiony", + regionsHint: "Kliknij jedną komórkę, potem drugą, aby połączyć komórki między nimi w region. Kliknij region dwukrotnie, aby go usunąć.", + joinStarted: "Kliknij drugą komórkę, aby zakończyć region.", + joinInvalid: "To przecięłoby region na pół.", + cancelJoin: "Anuluj", + regionCount: (e) => `${e} ${r(e, "region", "regiony", "regionów")}`, + cell: (e, t) => `Komórka w wierszu ${e} i kolumnie ${t}`, + regionSize: (e, t) => `region ${e}×${t}`, + region: (e) => `Region ${e}`, + emptyRegion: "Pusty region", + emptyRegionHint: "Wybierz widżet z listy.", + noEmptyRegion: "Każdy region ma już widżet.", + layoutStepHint: "Najpierw narysuj regiony, potem wypełnij je na karcie Widżety.", + widgetsStepHint: "Przeciągnij widżet do regionu albo kliknij go, aby wypełnić zaznaczony region." } }, a = "en", o = { de: n, @@ -7059,16 +7167,16 @@ var jc = class extends HTMLElement { jc.elementStyles = [], jc.shadowRootOptions = { mode: "open" }, jc[Dc("elementProperties")] = /* @__PURE__ */ new Map(), jc[Dc("finalized")] = /* @__PURE__ */ new Map(), Ec?.({ ReactiveElement: jc }), (Cc.reactiveElementVersions ??= []).push("2.1.2"); //#endregion //#region node_modules/lit-html/lit-html.js -var Mc = globalThis, Nc = (e) => e, Pc = Mc.trustedTypes, Fc = Pc ? Pc.createPolicy("lit-html", { createHTML: (e) => e }) : void 0, Ic = "$lit$", Lc = `lit$${Math.random().toFixed(9).slice(2)}$`, Rc = "?" + Lc, zc = `<${Rc}>`, Bc = document, Vc = () => Bc.createComment(""), Hc = (e) => e === null || typeof e != "object" && typeof e != "function", Uc = Array.isArray, Wc = (e) => Uc(e) || typeof e?.[Symbol.iterator] == "function", Gc = "[ \n\f\r]", Kc = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, qc = /-->/g, Jc = />/g, Yc = RegExp(`>|${Gc}(?:([^\\s"'>=/]+)(${Gc}*=${Gc}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), Xc = /'/g, Zc = /"/g, Qc = /^(?:script|style|textarea|title)$/i, F = ((e) => (t, ...n) => ({ +var Mc = globalThis, Nc = (e) => e, Pc = Mc.trustedTypes, Fc = Pc ? Pc.createPolicy("lit-html", { createHTML: (e) => e }) : void 0, Ic = "$lit$", Lc = `lit$${Math.random().toFixed(9).slice(2)}$`, Rc = "?" + Lc, zc = `<${Rc}>`, Bc = document, Vc = () => Bc.createComment(""), Hc = (e) => e === null || typeof e != "object" && typeof e != "function", Uc = Array.isArray, Wc = (e) => Uc(e) || typeof e?.[Symbol.iterator] == "function", Gc = "[ \n\f\r]", Kc = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, qc = /-->/g, Jc = />/g, Yc = RegExp(`>|${Gc}(?:([^\\s"'>=/]+)(${Gc}*=${Gc}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), Xc = /'/g, Zc = /"/g, Qc = /^(?:script|style|textarea|title)$/i, $c = (e) => (t, ...n) => ({ _$litType$: e, strings: t, values: n -}))(1), $c = Symbol.for("lit-noChange"), I = Symbol.for("lit-nothing"), el = /* @__PURE__ */ new WeakMap(), tl = Bc.createTreeWalker(Bc, 129); -function nl(e, t) { +}), F = $c(1), el = $c(2), tl = Symbol.for("lit-noChange"), I = Symbol.for("lit-nothing"), nl = /* @__PURE__ */ new WeakMap(), rl = Bc.createTreeWalker(Bc, 129); +function il(e, t) { if (!Uc(e) || !e.hasOwnProperty("raw")) throw Error("invalid template strings array"); return Fc === void 0 ? t : Fc.createHTML(t); } -var rl = (e, t) => { +var al = (e, t) => { let n = e.length - 1, r = [], i, a = t === 2 ? "" : t === 3 ? "" : "", o = Kc; for (let t = 0; t < n; t++) { let n = e[t], s, c, l = -1, u = 0; @@ -7076,17 +7184,17 @@ var rl = (e, t) => { let d = o === Yc && e[t + 1].startsWith("/>") ? " " : ""; a += o === Kc ? n + zc : l >= 0 ? (r.push(s), n.slice(0, l) + Ic + n.slice(l) + Lc + d) : n + Lc + (l === -2 ? t : d); } - return [nl(e, a + (e[n] || "") + (t === 2 ? "" : t === 3 ? "" : "")), r]; -}, il = class e { + return [il(e, a + (e[n] || "") + (t === 2 ? "" : t === 3 ? "" : "")), r]; +}, ol = class e { constructor({ strings: t, _$litType$: n }, r) { let i; this.parts = []; - let a = 0, o = 0, s = t.length - 1, c = this.parts, [l, u] = rl(t, n); - if (this.el = e.createElement(l, r), tl.currentNode = this.el.content, n === 2 || n === 3) { + let a = 0, o = 0, s = t.length - 1, c = this.parts, [l, u] = al(t, n); + if (this.el = e.createElement(l, r), rl.currentNode = this.el.content, n === 2 || n === 3) { let e = this.el.content.firstChild; e.replaceWith(...e.childNodes); } - for (; (i = tl.nextNode()) !== null && c.length < s;) { + for (; (i = rl.nextNode()) !== null && c.length < s;) { if (i.nodeType === 1) { if (i.hasAttributes()) for (let e of i.getAttributeNames()) if (e.endsWith(Ic)) { let t = u[o++], n = i.getAttribute(e).split(Lc), r = /([.?@])?(.*)/.exec(t); @@ -7095,7 +7203,7 @@ var rl = (e, t) => { index: a, name: r[2], strings: n, - ctor: r[1] === "." ? ll : r[1] === "?" ? ul : r[1] === "@" ? dl : cl + ctor: r[1] === "." ? dl : r[1] === "?" ? fl : r[1] === "@" ? pl : ul }), i.removeAttribute(e); } else e.startsWith(Lc) && (c.push({ type: 6, @@ -7105,7 +7213,7 @@ var rl = (e, t) => { let e = i.textContent.split(Lc), t = e.length - 1; if (t > 0) { i.textContent = Pc ? Pc.emptyScript : ""; - for (let n = 0; n < t; n++) i.append(e[n], Vc()), tl.nextNode(), c.push({ + for (let n = 0; n < t; n++) i.append(e[n], Vc()), rl.nextNode(), c.push({ type: 2, index: ++a }); @@ -7133,12 +7241,12 @@ var rl = (e, t) => { return n.innerHTML = e, n; } }; -function al(e, t, n = e, r) { - if (t === $c) return t; +function sl(e, t, n = e, r) { + if (t === tl) return t; let i = r === void 0 ? n._$Cl : n._$Co?.[r], a = Hc(t) ? void 0 : t._$litDirective$; - return i?.constructor !== a && (i?._$AO?.(!1), a === void 0 ? i = void 0 : (i = new a(e), i._$AT(e, n, r)), r === void 0 ? n._$Cl = i : (n._$Co ??= [])[r] = i), i !== void 0 && (t = al(e, i._$AS(e, t.values), i, r)), t; + return i?.constructor !== a && (i?._$AO?.(!1), a === void 0 ? i = void 0 : (i = new a(e), i._$AT(e, n, r)), r === void 0 ? n._$Cl = i : (n._$Co ??= [])[r] = i), i !== void 0 && (t = sl(e, i._$AS(e, t.values), i, r)), t; } -var ol = class { +var cl = class { constructor(e, t) { this._$AV = [], this._$AN = void 0, this._$AD = e, this._$AM = t; } @@ -7150,22 +7258,22 @@ var ol = class { } u(e) { let { el: { content: t }, parts: n } = this._$AD, r = (e?.creationScope ?? Bc).importNode(t, !0); - tl.currentNode = r; - let i = tl.nextNode(), a = 0, o = 0, s = n[0]; + rl.currentNode = r; + let i = rl.nextNode(), a = 0, o = 0, s = n[0]; for (; s !== void 0;) { if (a === s.index) { let t; - s.type === 2 ? t = new sl(i, i.nextSibling, this, e) : s.type === 1 ? t = new s.ctor(i, s.name, s.strings, this, e) : s.type === 6 && (t = new fl(i, this, e)), this._$AV.push(t), s = n[++o]; + s.type === 2 ? t = new ll(i, i.nextSibling, this, e) : s.type === 1 ? t = new s.ctor(i, s.name, s.strings, this, e) : s.type === 6 && (t = new ml(i, this, e)), this._$AV.push(t), s = n[++o]; } - a !== s?.index && (i = tl.nextNode(), a++); + a !== s?.index && (i = rl.nextNode(), a++); } - return tl.currentNode = Bc, r; + return rl.currentNode = Bc, r; } p(e) { let t = 0; for (let n of this._$AV) n !== void 0 && (n.strings === void 0 ? n._$AI(e[t]) : (n._$AI(e, n, t), t += n.strings.length - 2)), t++; } -}, sl = class e { +}, ll = class e { get _$AU() { return this._$AM?._$AU ?? this._$Cv; } @@ -7183,7 +7291,7 @@ var ol = class { return this._$AB; } _$AI(e, t = this) { - e = al(this, e, t), Hc(e) ? e === I || e == null || e === "" ? (this._$AH !== I && this._$AR(), this._$AH = I) : e !== this._$AH && e !== $c && this._(e) : e._$litType$ === void 0 ? e.nodeType === void 0 ? Wc(e) ? this.k(e) : this._(e) : this.T(e) : this.$(e); + e = sl(this, e, t), Hc(e) ? e === I || e == null || e === "" ? (this._$AH !== I && this._$AR(), this._$AH = I) : e !== this._$AH && e !== tl && this._(e) : e._$litType$ === void 0 ? e.nodeType === void 0 ? Wc(e) ? this.k(e) : this._(e) : this.T(e) : this.$(e); } O(e) { return this._$AA.parentNode.insertBefore(e, this._$AB); @@ -7195,16 +7303,16 @@ var ol = class { this._$AH !== I && Hc(this._$AH) ? this._$AA.nextSibling.data = e : this.T(Bc.createTextNode(e)), this._$AH = e; } $(e) { - let { values: t, _$litType$: n } = e, r = typeof n == "number" ? this._$AC(e) : (n.el === void 0 && (n.el = il.createElement(nl(n.h, n.h[0]), this.options)), n); + let { values: t, _$litType$: n } = e, r = typeof n == "number" ? this._$AC(e) : (n.el === void 0 && (n.el = ol.createElement(il(n.h, n.h[0]), this.options)), n); if (this._$AH?._$AD === r) this._$AH.p(t); else { - let e = new ol(r, this), n = e.u(this.options); + let e = new cl(r, this), n = e.u(this.options); e.p(t), this.T(n), this._$AH = e; } } _$AC(e) { - let t = el.get(e.strings); - return t === void 0 && el.set(e.strings, t = new il(e)), t; + let t = nl.get(e.strings); + return t === void 0 && nl.set(e.strings, t = new ol(e)), t; } k(t) { Uc(this._$AH) || (this._$AH = [], this._$AR()); @@ -7221,7 +7329,7 @@ var ol = class { setConnected(e) { this._$AM === void 0 && (this._$Cv = e, this._$AP?.(e)); } -}, cl = class { +}, ul = class { get tagName() { return this.element.tagName; } @@ -7233,43 +7341,43 @@ var ol = class { } _$AI(e, t = this, n, r) { let i = this.strings, a = !1; - if (i === void 0) e = al(this, e, t, 0), a = !Hc(e) || e !== this._$AH && e !== $c, a && (this._$AH = e); + if (i === void 0) e = sl(this, e, t, 0), a = !Hc(e) || e !== this._$AH && e !== tl, a && (this._$AH = e); else { let r = e, o, s; - for (e = i[0], o = 0; o < i.length - 1; o++) s = al(this, r[n + o], t, o), s === $c && (s = this._$AH[o]), a ||= !Hc(s) || s !== this._$AH[o], s === I ? e = I : e !== I && (e += (s ?? "") + i[o + 1]), this._$AH[o] = s; + for (e = i[0], o = 0; o < i.length - 1; o++) s = sl(this, r[n + o], t, o), s === tl && (s = this._$AH[o]), a ||= !Hc(s) || s !== this._$AH[o], s === I ? e = I : e !== I && (e += (s ?? "") + i[o + 1]), this._$AH[o] = s; } a && !r && this.j(e); } j(e) { e === I ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, e ?? ""); } -}, ll = class extends cl { +}, dl = class extends ul { constructor() { super(...arguments), this.type = 3; } j(e) { this.element[this.name] = e === I ? void 0 : e; } -}, ul = class extends cl { +}, fl = class extends ul { constructor() { super(...arguments), this.type = 4; } j(e) { this.element.toggleAttribute(this.name, !!e && e !== I); } -}, dl = class extends cl { +}, pl = class extends ul { constructor(e, t, n, r, i) { super(e, t, n, r, i), this.type = 5; } _$AI(e, t = this) { - if ((e = al(this, e, t, 0) ?? I) === $c) return; + if ((e = sl(this, e, t, 0) ?? I) === tl) return; let n = this._$AH, r = e === I && n !== I || e.capture !== n.capture || e.once !== n.once || e.passive !== n.passive, i = e !== I && (n === I || r); r && this.element.removeEventListener(this.name, this, n), i && this.element.addEventListener(this.name, this, e), this._$AH = e; } handleEvent(e) { typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, e) : this._$AH.handleEvent(e); } -}, fl = class { +}, ml = class { constructor(e, t, n) { this.element = e, this.type = 6, this._$AN = void 0, this._$AM = t, this.options = n; } @@ -7277,18 +7385,18 @@ var ol = class { return this._$AM._$AU; } _$AI(e) { - al(this, e); + sl(this, e); } -}, pl = Mc.litHtmlPolyfillSupport; -pl?.(il, sl), (Mc.litHtmlVersions ??= []).push("3.3.3"); -var ml = (e, t, n) => { +}, hl = Mc.litHtmlPolyfillSupport; +hl?.(ol, ll), (Mc.litHtmlVersions ??= []).push("3.3.3"); +var gl = (e, t, n) => { let r = n?.renderBefore ?? t, i = r._$litPart$; if (i === void 0) { let e = n?.renderBefore ?? null; - r._$litPart$ = i = new sl(t.insertBefore(Vc(), e), e, void 0, n ?? {}); + r._$litPart$ = i = new ll(t.insertBefore(Vc(), e), e, void 0, n ?? {}); } return i._$AI(e), i; -}, hl = globalThis, L = class extends jc { +}, _l = globalThis, L = class extends jc { constructor() { super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0; } @@ -7298,7 +7406,7 @@ var ml = (e, t, n) => { } update(e) { let t = this.render(); - this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = ml(t, this.renderRoot, this.renderOptions); + this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = gl(t, this.renderRoot, this.renderOptions); } connectedCallback() { super.connectedCallback(), this._$Do?.setConnected(!0); @@ -7307,25 +7415,25 @@ var ml = (e, t, n) => { super.disconnectedCallback(), this._$Do?.setConnected(!1); } render() { - return $c; + return tl; } }; -L._$litElement$ = !0, L.finalized = !0, hl.litElementHydrateSupport?.({ LitElement: L }); -var gl = hl.litElementPolyfillSupport; -gl?.({ LitElement: L }), (hl.litElementVersions ??= []).push("4.2.2"); +L._$litElement$ = !0, L.finalized = !0, _l.litElementHydrateSupport?.({ LitElement: L }); +var vl = _l.litElementPolyfillSupport; +vl?.({ LitElement: L }), (_l.litElementVersions ??= []).push("4.2.2"); //#endregion //#region node_modules/@lit/reactive-element/decorators/custom-element.js var R = (e) => (t, n) => { n === void 0 ? customElements.define(e, t) : n.addInitializer(() => { customElements.define(e, t); }); -}, _l = { +}, yl = { attribute: !0, type: String, converter: Oc, reflect: !1, hasChanged: kc -}, vl = (e = _l, t, n) => { +}, bl = (e = yl, t, n) => { let { kind: r, metadata: i } = n, a = globalThis.litPropertyMetadata.get(i); if (a === void 0 && globalThis.litPropertyMetadata.set(i, a = /* @__PURE__ */ new Map()), r === "setter" && ((e = Object.create(e)).wrapped = !0), a.set(n.name, e), r === "accessor") { let { name: r } = n; @@ -7349,7 +7457,7 @@ var R = (e) => (t, n) => { throw Error("Unsupported decorator location: " + r); }; function z(e) { - return (t, n) => typeof n == "object" ? vl(e, t, n) : ((e, t, n) => { + return (t, n) => typeof n == "object" ? bl(e, t, n) : ((e, t, n) => { let r = t.hasOwnProperty(n); return t.constructor.createProperty(n, e), r ? Object.getOwnPropertyDescriptor(t, n) : void 0; })(e, t, n); @@ -7365,10 +7473,10 @@ function B(e) { } //#endregion //#region node_modules/@lit/reactive-element/decorators/base.js -var yl = (e, t, n) => (n.configurable = !0, n.enumerable = !0, Reflect.decorate && typeof t != "object" && Object.defineProperty(e, t, n), n); +var xl = (e, t, n) => (n.configurable = !0, n.enumerable = !0, Reflect.decorate && typeof t != "object" && Object.defineProperty(e, t, n), n); //#endregion //#region node_modules/@lit/reactive-element/decorators/query.js -function bl(e, t) { +function Sl(e, t) { return (n, r, i) => { let a = (t) => t.renderRoot?.querySelector(e) ?? null; if (t) { @@ -7383,29 +7491,29 @@ function bl(e, t) { } }; })(); - return yl(n, r, { get() { + return xl(n, r, { get() { let n = e.call(this); return n === void 0 && (n = a(this), (n !== null || this.hasUpdated) && t.call(this, n)), n; } }); } - return yl(n, r, { get() { + return xl(n, r, { get() { return a(this); } }); }; } //#endregion //#region node_modules/lit-html/directive.js -var xl = { +var Cl = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 -}, Sl = (e) => (...t) => ({ +}, wl = (e) => (...t) => ({ _$litDirective$: e, values: t -}), Cl = class { +}), Tl = class { constructor(e) {} get _$AU() { return this._$AM._$AU; @@ -7419,9 +7527,9 @@ var xl = { update(e, t) { return this.render(...t); } -}, wl = "important", Tl = " !" + wl, V = Sl(class extends Cl { +}, El = "important", Dl = " !" + El, V = wl(class extends Tl { constructor(e) { - if (super(e), e.type !== xl.ATTRIBUTE || e.name !== "style" || e.strings?.length > 2) throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute."); + if (super(e), e.type !== Cl.ATTRIBUTE || e.name !== "style" || e.strings?.length > 2) throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute."); } render(e) { return Object.keys(e).reduce((t, n) => { @@ -7437,13 +7545,13 @@ var xl = { let r = t[e]; if (r != null) { this.ft.add(e); - let t = typeof r == "string" && r.endsWith(Tl); - e.includes("-") || t ? n.setProperty(e, t ? r.slice(0, -11) : r, t ? wl : "") : n[e] = r; + let t = typeof r == "string" && r.endsWith(Dl); + e.includes("-") || t ? n.setProperty(e, t ? r.slice(0, -11) : r, t ? El : "") : n[e] = r; } } - return $c; + return tl; } -}), El = (e, t, n, r, i, a) => { +}), Ol = (e, t, n, r, i, a) => { let o = e.primitive, s = a?.fields.find((e) => e.key === t); if (s?.shape === "coordinate") { let i = x(e), a = { ...o }, c = Number(Reflect.get(a, t)), l = s.axis === "x", u = (l ? i.x : i.y) - c, [d, f] = gt(l ? r.x : r.y, l ? r.width : r.height, l ? i.width : i.height); @@ -7454,9 +7562,9 @@ var xl = { let e = et(s.min, i, n), r = et(s.max, i, n); Object.assign(o, { [t]: _(n, e, r) }); } -}, Dl = (e, t, n, r, i) => { +}, kl = (e, t, n, r, i) => { t === "x" && (e.x = _(n, ...gt(r.x, r.width, e.width))), t === "y" && (e.y = _(n, ...gt(r.y, r.height, e.height))), t === "width" && (e.width = _(n, 1, Qe(i.width))), t === "height" && (e.height = _(n, 1, Qe(i.height))); -}, Ol = (e, t, n, r, i) => { +}, Al = (e, t, n, r, i) => { if (t === "x") { let t = e.x_end - e.x_start; e.x_start = _(n, ...gt(r.x, r.width, t + 1)), e.x_end = e.x_start + t; @@ -7466,10 +7574,10 @@ var xl = { e.y_start = _(n, ...gt(r.y, r.height, t + 1)), e.y_end = e.y_start + t; } t === "width" && (e.x_end = _(e.x_start + Math.max(1, n) - 1, e.x_start + 1, e.x_start + Qe(i.width) - 1)), t === "height" && (e.y_end = _(e.y_start + Math.max(1, n) - 1, e.y_start + 1, e.y_start + Qe(i.height) - 1)); -}, kl = (e, t, n, r, i) => { +}, jl = (e, t, n, r, i) => { let a = pt(r); if (e.kind === "widget") { - t === "padding" && (e.layout.padding = _(n, 0, 128)), Dl(e.frame, t, n, a, r.display); + t === "padding" && (e.layout.padding = _(n, 0, 128)), kl(e.frame, t, n, a, r.display); return; } if (e.kind === "container") { @@ -7477,47 +7585,47 @@ var xl = { width: e.width, height: e.height }; - Dl(e, t, n, a, r.display), e.grouped && ft(e, e.width / Math.max(1, o.width), e.height / Math.max(1, o.height), i, r.display); + kl(e, t, n, a, r.display), e.grouped && ft(e, e.width / Math.max(1, o.width), e.height / Math.max(1, o.height), i, r.display); return; } let o = e.primitive; - ue(o) ? Ol(o, t, n, a, r.display) : El(e, t, n, a, r.display, Bo(e, i)); -}, Al = (e, t, n, r, i) => { + ue(o) ? Al(o, t, n, a, r.display) : Ol(e, t, n, a, r.display, Bo(e, i)); +}, Ml = (e, t, n, r, i) => { let a = w(e.items, t); if (!a || a.item.locked) return; let { item: o, offset: s } = a; - S(o, s.x, s.y), kl(o, n, jl(n, r, s), e, i), S(o, -s.x, -s.y); -}, jl = (e, t, n) => e === "x" ? t + n.x : e === "y" ? t + n.y : t, Ml = (e) => e.items.forEach((t) => ht(t, e)), Nl = (e, t, n) => { - t === "padding" && (e.display.padding = _(n, 0, Math.floor((Math.min(e.display.width, e.display.height) - 1) / 2))), t === "snapSize" && (e.display.snapSize = _(n, 1, 256)), Ml(e); -}, Pl = (e, t) => { + S(o, s.x, s.y), jl(o, n, Nl(n, r, s), e, i), S(o, -s.x, -s.y); +}, Nl = (e, t, n) => e === "x" ? t + n.x : e === "y" ? t + n.y : t, Pl = (e) => e.items.forEach((t) => ht(t, e)), Fl = (e, t, n) => { + t === "padding" && (e.display.padding = _(n, 0, Math.floor((Math.min(e.display.width, e.display.height) - 1) / 2))), t === "snapSize" && (e.display.snapSize = _(n, 1, 256)), Pl(e); +}, Il = (e, t) => { xo[e.display.palette].includes(t) && (e.display.background = t); -}, Fl = (e, t, n) => { +}, Ll = (e, t, n) => { let r = T(e.items, t); r && (r[n] = !r[n]); -}, Il = (e, t) => { +}, Rl = (e, t) => { Pt(e, t); -}, Ll = (e, t, n, r) => { +}, zl = (e, t, n, r) => { if (r === "inside") { Nt(e, t, n || void 0, S); return; } Rt(e, t, n, r, S); -}, Rl = (e, t, n) => { +}, Bl = (e, t, n) => { let r = T(e.items, t), i = n.trim(); r && i && (r.name = i.slice(0, 100)); -}, zl = (e, t, n) => { +}, Vl = (e, t, n) => { let r = T(e.items, t); r?.kind === "widget" && (r.widget.options = { ...r.widget.options, ...n }); -}, Bl = (e, t, n, r) => { +}, Hl = (e, t, n, r) => { let i = T(e.items, t); i?.kind === "widget" && (i.widget.sources = { ...i.widget.sources, [n]: r }); -}, Vl = (e, t, n, r, i) => { +}, Ul = (e, t, n, r, i) => { let a = w(e.items, t); if (a?.item.kind !== "primitive" || a.item.locked) return; let o = a.item, s = ["x", "y"].some((e) => o.expressions?.[e]); @@ -7529,7 +7637,7 @@ var xl = { ...o.primitive, [n]: r }; -}, Hl = (e, t, n) => { +}, Wl = (e, t, n) => { let r = T(e.items, t); if (!(r?.kind !== "primitive" || r.locked) && (r.primitive = { ...r.primitive, @@ -7538,7 +7646,7 @@ var xl = { for (let e of Object.keys(n)) delete r.expressions[e]; Object.keys(r.expressions).length === 0 && delete r.expressions; } -}, Ul = (e, t, n, r) => { +}, Gl = (e, t, n, r) => { let i = T(e.items, t); if (i?.kind !== "primitive") return; let a = ts(n, Bo(i, r)); @@ -7546,7 +7654,7 @@ var xl = { ...i.primitive, ...a }; -}, Wl = (e, t, n, r) => { +}, Kl = (e, t, n, r) => { let i = pt(r), a = Math.min(e.layout.defaultSize?.width ?? 240, i.width), o = Math.min(e.layout.defaultSize?.height ?? 144, i.height); return { id: g(), @@ -7568,7 +7676,7 @@ var xl = { }, layout: { padding: 0 } }; -}, Gl = (e, t, n, r, i) => { +}, ql = (e, t, n, r, i) => { let { width: a, height: o } = i.display, s = at(e.find((e) => e.type === t.trim()), { x: Math.round(a / 2), y: Math.round(o / 2), @@ -7585,21 +7693,21 @@ var xl = { primitive: s }, l = x(c); return S(c, Math.round(n - (l.x + l.width / 2)), Math.round(r - (l.y + l.height / 2))), ht(c, i), c; -}, Kl = (e, t) => { +}, Jl = (e, t) => { let n = pt(e), r = E(e.items).length * Math.max(e.display.snapSize, 5) * 3 % Math.max(1, Math.min(n.width, n.height) / 3); return { x: mt(n.x + Math.min(24 + r, Math.max(0, n.width - 1)), e, t), y: mt(n.y + Math.min(24 + r, Math.max(0, n.height - 1)), e, t) }; -}, ql = (e, t) => { +}, Yl = (e, t) => { if (t === "visible") return !e.hidden; if (e.kind === "primitive") return Object.entries(e.primitive).find(([e]) => e === t)?.[1]; -}, Jl = (e, t, n, r) => { +}, Xl = (e, t, n, r) => { let i = T(e.items, t); if (!i || i.locked) return; let a = { ...i.expressions }; - r === null ? delete a[n] : a[n] = r ?? kn(ql(i, n)), Object.keys(a).length === 0 ? delete i.expressions : i.expressions = a; -}, Yl = { + r === null ? delete a[n] : a[n] = r ?? kn(Yl(i, n)), Object.keys(a).length === 0 ? delete i.expressions : i.expressions = a; +}, Zl = { align: { selection: 2, parent: 1 @@ -7608,7 +7716,7 @@ var xl = { selection: 3, parent: 2 } -}, Xl = (e, t) => t === 1 ? "parent" : e, Zl = { +}, Ql = (e, t) => t === 1 ? "parent" : e, $l = { left: { axis: "x", fraction: 0 @@ -7633,11 +7741,11 @@ var xl = { axis: "y", fraction: 1 } -}, Ql = (e, t) => t === "x" ? e.x : e.y, $l = (e, t) => t === "x" ? e.width : e.height, eu = (e, t) => Ql(e, t) + $l(e, t), tu = (e, t, n) => ({ +}, eu = (e, t) => t === "x" ? e.x : e.y, tu = (e, t) => t === "x" ? e.width : e.height, nu = (e, t) => eu(e, t) + tu(e, t), ru = (e, t, n) => ({ id: e, dx: t === "x" ? n : 0, dy: t === "y" ? n : 0 -}), nu = (e, t) => { +}), iu = (e, t) => { let { parent: n, offset: r } = t; return n ? { x: r.x, @@ -7645,48 +7753,48 @@ var xl = { width: n.width, height: n.height } : pt(e); -}, ru = (e, t, n) => { +}, au = (e, t, n) => { let r = new Set(t); return [...r].flatMap((t) => { let i = w(e.items, t); - return !i || i.item.locked || !n.movable(i.item) || iu(e, t, r) ? [] : [{ + return !i || i.item.locked || !n.movable(i.item) || ou(e, t, r) ? [] : [{ id: t, box: At(x(i.item, n.measure(i.item)), i.offset), - area: nu(e, i) + area: iu(e, i) }]; }); -}, iu = (e, t, n) => { +}, ou = (e, t, n) => { let r = w(e.items, t)?.parent; for (; r;) { if (n.has(r.id)) return !0; r = w(e.items, r.id)?.parent; } return !1; -}, au = (e) => e.filter((e) => e.dx !== 0 || e.dy !== 0), ou = (e, t, n, r) => { - let i = ru(e, t, r), a = Xl(r.target, i.length); - if (i.length < Yl.align[a]) return []; - let { axis: o, fraction: s } = Zl[n], c = Qt(i.map((e) => e.box)); - return au(i.map((e) => { - let t = a === "parent" ? e.area : c, n = $l(t, o) - $l(e.box, o), r = Ql(t, o) + n * s; - return tu(e.id, o, Math.round(r - Ql(e.box, o))); +}, su = (e) => e.filter((e) => e.dx !== 0 || e.dy !== 0), cu = (e, t, n, r) => { + let i = au(e, t, r), a = Ql(r.target, i.length); + if (i.length < Zl.align[a]) return []; + let { axis: o, fraction: s } = $l[n], c = Qt(i.map((e) => e.box)); + return su(i.map((e) => { + let t = a === "parent" ? e.area : c, n = tu(t, o) - tu(e.box, o), r = eu(t, o) + n * s; + return ru(e.id, o, Math.round(r - eu(e.box, o))); })); -}, su = (e, t) => { +}, lu = (e, t) => { let [n, ...r] = t.map((e) => e.area); return r.every((e) => e.x === n.x && e.y === n.y && e.width === n.width && e.height === n.height) ? n : pt(e); -}, cu = (e, t, n, r) => { - let i = ru(e, t, r); - if (i.length < Yl.distribute[r.target]) return []; - let a = n === "horizontal" ? "x" : "y", o = [...i].sort((e, t) => Ql(e.box, a) - Ql(t.box, a) || eu(e.box, a) - eu(t.box, a)), s = r.target === "parent" ? su(e, i) : Qt(i.map((e) => e.box)), c = o.reduce((e, t) => e + $l(t.box, a), 0), l = ($l(s, a) - c) / (o.length - 1), u = 0; - return au(o.map((e, t) => { - let n = Math.round(Ql(s, a) + u + l * t); - return u += $l(e.box, a), tu(e.id, a, n - Ql(e.box, a)); +}, uu = (e, t, n, r) => { + let i = au(e, t, r); + if (i.length < Zl.distribute[r.target]) return []; + let a = n === "horizontal" ? "x" : "y", o = [...i].sort((e, t) => eu(e.box, a) - eu(t.box, a) || nu(e.box, a) - nu(t.box, a)), s = r.target === "parent" ? lu(e, i) : Qt(i.map((e) => e.box)), c = o.reduce((e, t) => e + tu(t.box, a), 0), l = (tu(s, a) - c) / (o.length - 1), u = 0; + return su(o.map((e, t) => { + let n = Math.round(eu(s, a) + u + l * t); + return u += tu(e.box, a), ru(e.id, a, n - eu(e.box, a)); })); -}, lu = (e, t) => { +}, du = (e, t) => { for (let n of t) { let t = w(e.items, n.id); t && S(t.item, n.dx, n.dy); } -}, uu = (e) => ({ +}, fu = (e) => ({ canUndo: !1, canRedo: !1, item: e, @@ -7694,13 +7802,13 @@ var xl = { canGroup: e.kind === "container" && !e.grouped, canUngroup: e.kind === "container" && e.grouped, canEnter: e.kind === "container" && e.grouped -}), du = (e) => e.targets ?? (e.item ? [e.item] : []), fu = (e) => du(e).length > 0, pu = (e) => du(e).filter((e) => !e.locked).length, mu = (e) => { - let t = pu(e), n = Xl(e.alignTo ?? "selection", t); - return t >= Yl.align[n]; -}, hu = (e) => pu(e) >= Yl.distribute[e.alignTo ?? "selection"], H = (e, t) => { - let n = du(e).map((e) => e.id); +}), pu = (e) => e.targets ?? (e.item ? [e.item] : []), mu = (e) => pu(e).length > 0, hu = (e) => pu(e).filter((e) => !e.locked).length, gu = (e) => { + let t = hu(e), n = Ql(e.alignTo ?? "selection", t); + return t >= Zl.align[n]; +}, _u = (e) => hu(e) >= Zl.distribute[e.alignTo ?? "selection"], H = (e, t) => { + let n = pu(e).map((e) => e.id); n.length > 0 && t(n); -}, gu = { +}, vu = { left: { key: "ArrowLeft", icon: "mdi:arrow-left" @@ -7717,45 +7825,45 @@ var xl = { key: "ArrowDown", icon: "mdi:arrow-down" } -}, _u = () => Object.keys(gu).flatMap((e) => [!1, !0].map((n) => ({ +}, yu = () => Object.keys(vu).flatMap((e) => [!1, !0].map((n) => ({ id: n ? `nudge-${e}-snap` : `nudge-${e}`, group: "arrange", label: () => t.commands.nudge[e], - icon: () => gu[e].icon, + icon: () => vu[e].icon, shortcuts: [{ - key: gu[e].key, + key: vu[e].key, shift: n }], - isEnabled: fu, + isEnabled: mu, isRelevant: () => !1, run: (t, r) => H(t, (t) => r.nudge(t, e, n)) -}))), vu = { +}))), bu = { left: "mdi:align-horizontal-left", center: "mdi:align-horizontal-center", right: "mdi:align-horizontal-right", top: "mdi:align-vertical-top", middle: "mdi:align-vertical-center", bottom: "mdi:align-vertical-bottom" -}, yu = { +}, xu = { horizontal: "mdi:arrow-expand-horizontal", vertical: "mdi:arrow-expand-vertical" -}, bu = () => Object.keys(vu).map((e) => ({ +}, Su = () => Object.keys(bu).map((e) => ({ id: `align-${e}`, group: "arrange", label: () => t.commands.align[e], - icon: () => vu[e], + icon: () => bu[e], shortcuts: [], - isEnabled: mu, + isEnabled: gu, run: (t, n) => H(t, (t) => n.align(t, e)) -})), xu = () => Object.keys(yu).map((e) => ({ +})), Cu = () => Object.keys(xu).map((e) => ({ id: `distribute-${e}`, group: "arrange", label: () => t.commands.distribute[e], - icon: () => yu[e], + icon: () => xu[e], shortcuts: [], - isEnabled: hu, + isEnabled: _u, run: (t, n) => H(t, (t) => n.distribute(t, e)) -})), Su = [ +})), wu = [ { id: "undo", group: "history", @@ -7790,7 +7898,7 @@ var xl = { label: () => t.commands.delete, icon: () => "mdi:delete-outline", shortcuts: [{ key: "Delete" }, { key: "Backspace" }], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.requestDelete(e)) }, { @@ -7799,7 +7907,7 @@ var xl = { label: ({ item: e }) => e?.hidden ? t.commands.show : t.commands.hide, icon: ({ item: e }) => e?.hidden ? "mdi:eye-off-outline" : "mdi:eye-outline", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.toggleFlag(e, "hidden")) }, { @@ -7808,7 +7916,7 @@ var xl = { label: ({ item: e }) => e?.locked ? t.commands.unlock : t.commands.lock, icon: ({ item: e }) => e?.locked ? "mdi:lock" : "mdi:lock-open-variant-outline", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.toggleFlag(e, "locked")) }, { @@ -7820,7 +7928,7 @@ var xl = { key: "c", mod: !0 }], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.copy(e)) }, { @@ -7832,7 +7940,7 @@ var xl = { key: "x", mod: !0 }], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.cut(e)) }, { @@ -7865,7 +7973,7 @@ var xl = { key: "d", mod: !0 }], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.duplicate(e)) }, { @@ -7885,7 +7993,7 @@ var xl = { label: () => t.commands.bringToFront, icon: () => "mdi:arrange-bring-to-front", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.arrange(e, "front")) }, { @@ -7894,7 +8002,7 @@ var xl = { label: () => t.commands.sendToBack, icon: () => "mdi:arrange-send-to-back", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.arrange(e, "back")) }, { @@ -7903,7 +8011,7 @@ var xl = { label: () => t.commands.moveUp, icon: () => "mdi:arrow-up", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.arrange(e, "up")) }, { @@ -7912,12 +8020,12 @@ var xl = { label: () => t.commands.moveDown, icon: () => "mdi:arrow-down", shortcuts: [], - isEnabled: fu, + isEnabled: mu, run: (e, t) => H(e, (e) => t.arrange(e, "down")) }, - ...bu(), - ...xu(), - ..._u(), + ...Su(), + ...Cu(), + ...yu(), { id: "group", group: "group", @@ -7975,7 +8083,7 @@ var xl = { label: () => t.commands.deselect, icon: () => "mdi:selection-off", shortcuts: [{ key: "Escape" }], - isEnabled: fu, + isEnabled: mu, isRelevant: () => !1, run: (e, t) => t.deselect() }, @@ -8054,17 +8162,31 @@ var xl = { isEnabled: () => !0, run: (e, t) => t.showShortcuts() } -], Cu = (e) => Su.some((t) => t.id === e), wu = (e) => { - let t = Su.find((t) => t.id === e); +], Tu = /* @__PURE__ */ new Set([ + "undo", + "redo", + "delete-item", + "deselect", + "save", + "toggle-code", + "zoom-in", + "zoom-out", + "zoom-reset", + "show-shortcuts" +]), Eu = wu.map((e) => Tu.has(e.id) ? e : { + ...e, + isEnabled: (t) => !t.basic && e.isEnabled(t) +}), Du = (e) => Eu.some((t) => t.id === e), Ou = (e) => { + let t = Eu.find((t) => t.id === e); if (!t) throw Error(`Unknown command ${e}`); return t; -}, Tu = (e, t) => { +}, ku = (e, t) => { let n = t.ctrlKey || t.metaKey; - return t.key.toLowerCase() === e.key.toLowerCase() && n === !!e.mod && (t.shiftKey === !!e.shift || Eu(e)) && !t.altKey; -}, Eu = (e) => e.key === "?" || e.key === "+", Du = (e, t) => { - let n = Su.filter((t) => t.shortcuts.some((t) => Tu(t, e))); + return t.key.toLowerCase() === e.key.toLowerCase() && n === !!e.mod && (t.shiftKey === !!e.shift || Au(e)) && !t.altKey; +}, Au = (e) => e.key === "?" || e.key === "+", ju = (e, t) => { + let n = Eu.filter((t) => t.shortcuts.some((t) => ku(t, e))); return t ? n.find((e) => e.isEnabled(t)) : n[0]; -}, Ou = { +}, Mu = { Delete: "Del", Backspace: "⌫", Escape: "Esc", @@ -8072,15 +8194,15 @@ var xl = { ArrowRight: "→", ArrowUp: "↑", ArrowDown: "↓" -}, ku = (e, t) => { - let n = Ou[e.key] ?? e.key.toUpperCase(); +}, Nu = (e, t) => { + let n = Mu[e.key] ?? e.key.toUpperCase(); return t ? `${e.mod ? "⌘" : ""}${e.shift ? "⇧" : ""}${n}` : [ e.mod ? "Ctrl" : "", e.shift ? "Shift" : "", n ].filter(Boolean).join("+"); -}, Au = (e, t, n = !1) => { - let r = e.label(t), [i] = e.shortcuts, a = i ? ku(i, n) : ""; +}, Pu = (e, t, n = !1) => { + let r = e.label(t), [i] = e.shortcuts, a = i ? Nu(i, n) : ""; return { label: r, icon: e.icon(t), @@ -8088,7 +8210,7 @@ var xl = { shortcut: a, enabled: e.isEnabled(t) }; -}, ju = [ +}, Fu = [ [ "copy", "cut", @@ -8103,7 +8225,7 @@ var xl = { "enter-group", "exit-group" ] -], Mu = [ +], Iu = [ [ "copy", "cut", @@ -8119,8 +8241,8 @@ var xl = { "enter-group", "exit-group" ] -], Nu = [["paste", "paste-here"]], Pu = (e, t, n) => e.flatMap((e, r) => e.map((e) => wu(e)).filter((e) => e.isRelevant?.(t) ?? !0).map((e, i) => { - let a = Au(e, t, n); +], Lu = [["paste", "paste-here"]], Ru = (e, t, n) => e.flatMap((e, r) => e.map((e) => Ou(e)).filter((e) => e.isRelevant?.(t) ?? !0).map((e, i) => { + let a = Pu(e, t, n); return { id: e.id, label: a.label, @@ -8130,29 +8252,30 @@ var xl = { danger: e.id === "delete-item", separatorBefore: i === 0 && r > 0 }; -})), Fu = [ +})), zu = [ 0, 90, 180, 270 -], Iu = (e) => Fu.some((t) => t === e), Lu = (e) => e === 90 || e === 270, Ru = (e, t) => Lu(t) ? { +], Bu = (e, t) => zu[(zu.indexOf(e) + t + zu.length) % zu.length], Vu = (e) => zu.some((t) => t === e), Hu = (e) => e === 90 || e === 270, Uu = (e, t) => Hu(t) ? { width: e.height, height: e.width } : { width: e.width, height: e.height -}, zu = (e, t, n) => Lu(t) === Lu(n) ? e : { +}, Wu = (e, t, n) => Hu(t) === Hu(n) ? e : { width: e.height, height: e.width -}, Bu = (e, t) => { +}, Gu = (e, t) => { let n = Number(e); - return Iu(n) ? n : t; -}, Vu = (e, t = "custom") => { + return Vu(n) ? n : t; +}, Ku = (e, t = "custom") => { let n = Oo(t); return { id: "", schemaVersion: 1, name: "", + mode: "advanced", status: "draft", language: e || "en", display: { @@ -8170,7 +8293,7 @@ var xl = { createdAt: "", updatedAt: "" }; -}, Hu = (e) => ({ +}, qu = (e) => ({ name: e.name, width: e.display.width, height: e.display.height, @@ -8179,50 +8302,50 @@ var xl = { rotation: String(e.display.rotation), padding: e.display.padding, snapSize: e.display.snapSize -}), Uu = (e, t) => { +}), Ju = (e, t) => { let n = structuredClone(e); return Object.assign(n.display, t), xo[t.palette].includes(n.display.background) || (n.display.background = "white"), n; -}, Wu = (e, t) => Uu(e, { +}, Yu = (e, t) => Ju(e, { profileId: "custom", deviceId: t.id, - ...Ru(t, e.display.rotation), + ...Uu(t, e.display.rotation), palette: t.palette -}), Gu = (e, t, n = t.defaultPalette) => Uu(e, { +}), Xu = (e, t, n = t.defaultPalette) => Ju(e, { profileId: t.id, deviceId: null, - ...Ru(t, e.display.rotation), + ...Uu(t, e.display.rotation), palette: t.palettes.includes(n) ? n : t.defaultPalette -}), Ku = (e, t) => { +}), Zu = (e, t) => { let n = { - ...Hu(e), + ...qu(e), ...t }, r = structuredClone(e); r.name = String(n.name); let i = { width: Math.round(Number(n.width) || 0), height: Math.round(Number(n.height) || 0) - }, a = i.width !== e.display.width || i.height !== e.display.height, o = Bu(n.rotation, e.display.rotation), s = a ? i : zu(i, e.display.rotation, o); + }, a = i.width !== e.display.width || i.height !== e.display.height, o = Gu(n.rotation, e.display.rotation), s = a ? i : Wu(i, e.display.rotation, o); a && (r.display.profileId = "custom", r.display.deviceId = null), r.display.width = s.width, r.display.height = s.height, r.display.rotation = o, r.display.palette = n.palette in bo ? n.palette : "bw", r.display.padding = Math.round(Number(n.padding) || 0), r.display.snapSize = Math.round(Number(n.snapSize) || 0); let c = xo[r.display.palette]; return r.display.background = c.includes(n.background) ? n.background : "white", r; -}, qu = (e) => { +}, Qu = (e) => { let { width: t, height: n, padding: r, snapSize: i } = e.display; return !!e.name.trim() && t >= 64 && t <= 4096 && n >= 64 && n <= 4096 && r >= 0 && r * 2 < Math.min(t, n) && i >= 1 && i <= 256; -}, Ju = (e, t, n, r) => { +}, $u = (e, t, n, r) => { let i = t.trim().toLocaleLowerCase(r); return e.filter((e) => !i || e.name.toLocaleLowerCase(r).includes(i)).sort((e, t) => n === "name" ? e.name.localeCompare(t.name, r) : t.updatedAt.localeCompare(e.updatedAt) || e.name.localeCompare(t.name, r)); -}, Yu = (e, t, n) => { +}, ed = (e, t, n) => { let r = new Set(t.map((e) => e.name.toLocaleLowerCase(n))), i = `${e.name} copy`, a = i, o = 2; for (; r.has(a.toLocaleLowerCase(n));) a = `${i} ${o++}`; return a; -}, Xu = Object.keys(bo).filter(ko), Zu = Do.filter((e) => e.id !== "custom"), Qu = { +}, td = Object.keys(bo).filter(ko), nd = Do.filter((e) => e.id !== "custom"), rd = { size: !0, - palettes: Xu, + palettes: td, backgrounds: [] -}, $u = (e) => ({ - ...Qu, +}, id = (e) => ({ + ...rd, backgrounds: xo[e.display.palette] -}), ed = (e, t) => ({ +}), ad = (e, t) => ({ name: e, label: t, required: !0, @@ -8232,12 +8355,12 @@ var xl = { max: 4096, unit_of_measurement: "px" } } -}), td = () => [{ +}), od = () => [{ name: "dimensions", type: "grid", flatten: !0, - schema: [ed("width", t.fields.width), ed("height", t.fields.height)] -}], nd = (e) => [{ + schema: [ad("width", t.fields.width), ad("height", t.fields.height)] +}], sd = (e) => [{ name: "palette", label: t.fields.palette, required: !0, @@ -8248,7 +8371,7 @@ var xl = { label: bo[e] })) } } -}], rd = (e) => [{ +}], cd = (e) => [{ name: "background", label: t.fields.background, required: !0, @@ -8259,18 +8382,18 @@ var xl = { label: `${e[0].toUpperCase()}${e.slice(1)}` })) } } -}], id = () => [{ +}], ld = () => [{ name: "rotation", label: t.fields.rotation, required: !0, selector: { select: { mode: "dropdown", - options: Fu.map((e) => ({ + options: zu.map((e) => ({ value: String(e), label: t.rotations[e] })) } } -}], ad = () => [{ +}], ud = () => [{ name: "advanced", type: "expandable", flatten: !0, @@ -8295,97 +8418,224 @@ var xl = { unit_of_measurement: "px" } } }] -}], od = (e = Qu) => [ - { - name: "name", - label: t.fields.name, - required: !0, - selector: { text: {} } - }, - ...e.size ? td() : [], - ...e.palettes.length > 1 ? nd(e.palettes) : [], - ...e.backgrounds.length > 0 ? rd(e.backgrounds) : [], - ...id(), - ...ad() -], sd = (e) => "label" in e ? e.label : e.title ?? "", cd = { +}], dd = () => [{ + name: "name", + label: t.fields.name, + required: !0, + selector: { text: {} } +}], fd = (e = rd) => [ + ...dd(), + ...e.size ? od() : [], + ...e.palettes.length > 1 ? sd(e.palettes) : [], + ...e.backgrounds.length > 0 ? cd(e.backgrounds) : [], + ...ld(), + ...ud() +], pd = (e) => "label" in e ? e.label : e.title ?? "", md = { bwr: "#d32f2f", bwry: "#d32f2f", bwy: "#d6a800", spectra6: "#246bfd", seven_color: "#ff8000" -}, ld = (e) => cd[e] ?? "#202124", ud = (e, t) => { +}, hd = (e) => md[e] ?? "#202124", gd = (e, t) => { let n = new Date(e.updatedAt); return Number.isNaN(n.getTime()) ? "" : new Intl.DateTimeFormat(t, { dateStyle: "medium" }).format(n); -}, dd = (e) => e.target.value, fd = (e) => e.composedPath().some((e) => e instanceof HTMLElement && (e.matches("input, textarea, select") || e.isContentEditable)), pd = () => /Mac|iPhone|iPad/.test(navigator.platform), md = (e) => e.shiftKey || e.ctrlKey || e.metaKey, hd = (e, t, n = "application/json") => { +}, _d = (e) => e.target.value, vd = (e) => e.composedPath().some((e) => e instanceof HTMLElement && (e.matches("input, textarea, select") || e.isContentEditable)), yd = () => /Mac|iPhone|iPad/.test(navigator.platform), bd = (e) => e.shiftKey || e.ctrlKey || e.metaKey, xd = (e, t, n = "application/json") => { let r = URL.createObjectURL(new Blob([t], { type: n })), i = document.createElement("a"); i.href = r, i.download = e, i.click(), URL.revokeObjectURL(r); -}, gd = (e) => new Promise((t) => { +}, Sd = (e) => new Promise((t) => { let n = document.createElement("input"); n.type = "file", n.accept = e, n.addEventListener("change", () => t(n.files?.[0])), n.addEventListener("cancel", () => t(void 0)), n.click(); -}), _d = "dashboard", vd = (e) => `${e.normalize("NFKD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/ł/g, "l").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || _d}.json`, yd = (e) => Object.fromEntries(e.map((e) => [e.source, e.suggestion])), bd = (e) => { +}), Cd = "dashboard", wd = (e) => `${e.normalize("NFKD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/ł/g, "l").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || Cd}.json`, Td = (e) => Object.fromEntries(e.map((e) => [e.source, e.suggestion])), Ed = (e) => { try { return JSON.parse(e); } catch { return; } -}, xd = (e) => typeof e == "string" && e !== "" ? e : void 0, U = (e, t) => e instanceof Error || typeof e == "object" && e && "message" in e ? xd(e.message) ?? t : xd(e) ?? t, Sd = (e) => { - if (typeof e == "object" && e && "code" in e) return xd(e.code); -}, Cd = (e) => e.callWS({ +}, Dd = (e) => typeof e == "string" && e !== "" ? e : void 0, U = (e, t) => e instanceof Error || typeof e == "object" && e && "message" in e ? Dd(e.message) ?? t : Dd(e) ?? t, Od = (e) => { + if (typeof e == "object" && e && "code" in e) return Dd(e.code); +}, kd = (e) => e.callWS({ type: "opendisplay_studio/bootstrap", language: e.language -}), wd = (e) => e.callWS({ +}), Ad = (e, t, n) => e.callWS({ + type: "opendisplay_studio/layout_frames", + width: t.width, + height: t.height, + padding: t.padding, + layout: n +}), jd = (e) => e.callWS({ type: "opendisplay_studio/reload_widgets", language: e.language -}), Td = async (e, t) => (await e.callWS({ +}), Md = async (e, t) => (await e.callWS({ type: "opendisplay_studio/create_dashboard", dashboard: t -})).dashboard, Ed = async (e, t) => (await e.callWS({ +})).dashboard, Nd = async (e, t) => (await e.callWS({ type: "opendisplay_studio/update_dashboard", dashboard_id: t.id, dashboard: t -})).dashboard, Dd = async (e, t) => { +})).dashboard, Pd = async (e, t) => { await e.callWS({ type: "opendisplay_studio/delete_dashboard", dashboard_id: t }); -}, Od = (e, t) => e.callWS({ +}, Fd = (e, t) => e.callWS({ type: "opendisplay_studio/compose_preview", dashboard: structuredClone(t) -}), kd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_devices" })).devices, Ad = async (e, t) => { +}), Id = async (e) => (await e.callWS({ type: "opendisplay_studio/list_devices" })).devices, Ld = async (e, t) => { await e.callWS({ type: "opendisplay_studio/send_to_device", dashboard: structuredClone(t) }); -}, jd = async (e, t) => (await e.callWS({ +}, Rd = async (e, t) => (await e.callWS({ type: "opendisplay_studio/export_dashboard", dashboard: structuredClone(t) -})).file, Md = (e, t, n, r = {}) => e.callWS({ +})).file, zd = (e, t, n, r = {}) => e.callWS({ type: "opendisplay_studio/prepare_import", file: t, display: n, colorMap: r -}), Nd, Pd = (e) => (Nd ??= e.callWS({ type: "opendisplay_studio/list_icons" }).then((e) => ({ +}), Bd, Vd = (e) => (Bd ??= e.callWS({ type: "opendisplay_studio/list_icons" }).then((e) => ({ names: e.icons, glyphs: Object.fromEntries(Object.entries(e.glyphs).map(([e, t]) => [e, String.fromCodePoint(t)])) -})), Nd), Fd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_fonts" })).fonts, Id = async (e, t, n) => (await e.callWS({ +})), Bd), Hd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_fonts" })).fonts, Ud = async (e, t, n) => (await e.callWS({ type: "opendisplay_studio/install_font", filename: t, data: n -})).fonts, Ld = async (e, t, n) => (await e.callWS({ +})).fonts, Wd = async (e, t, n) => (await e.callWS({ type: "opendisplay_studio/delete_font", name: t, force: n -})).fonts, Rd, zd = (e) => (Rd ??= Fd(e).catch((e) => { - throw Rd = void 0, e; -}), Rd), Bd = (e) => { - Rd = Promise.resolve(e); -}, Vd = (e) => [e.family, e.style].filter((e) => e !== "" && e !== "Regular").join(" "), Hd = (e, t) => e.find((e) => e.name === t), W = (e, t, ...n) => { +})).fonts, Gd, Kd = (e) => (Gd ??= Hd(e).catch((e) => { + throw Gd = void 0, e; +}), Gd), qd = (e) => { + Gd = Promise.resolve(e); +}, Jd = (e) => [e.family, e.style].filter((e) => e !== "" && e !== "Regular").join(" "), Yd = (e, t) => e.find((e) => e.name === t), W = (e, t, ...n) => { e.dispatchEvent(new CustomEvent(t, { detail: n[0], bubbles: !0, composed: !0 })); -}, Ud = 100, Wd = class { +}, Xd = 26, Zd = (e) => { + let t = String.fromCharCode(65 + e % Xd); + return e < Xd ? t : Zd(Math.floor(e / Xd) - 1) + t; +}, Qd = "region-", $d = (e) => { + let t = 1; + for (; e.has(`${Qd}${t}`);) t += 1; + let n = `${Qd}${t}`; + return e.add(n), n; +}, ef = (e) => e.rowSpan > 1 || e.columnSpan > 1, tf = (e, t) => e.row - t.row || e.column - t.column, nf = (e) => { + let t = []; + for (let n = e.row; n < e.row + e.rowSpan; n += 1) for (let r = e.column; r < e.column + e.columnSpan; r += 1) t.push({ + row: n, + column: r + }); + return t; +}, rf = (e, t) => e.regions.find((e) => nf(e).some((e) => e.row === t.row && e.column === t.column)), af = (e, t) => ({ + row: Math.min(e.row, t.row), + column: Math.min(e.column, t.column), + rowSpan: Math.abs(e.row - t.row) + 1, + columnSpan: Math.abs(e.column - t.column) + 1 +}), of = (e) => { + let t = [...e.regions], n = new Set(t.map((e) => e.id)); + for (let r = 0; r < e.rows; r += 1) for (let i = 0; i < e.columns; i += 1) rf({ + ...e, + regions: t + }, { + row: r, + column: i + }) || t.push({ + id: $d(n), + row: r, + column: i, + rowSpan: 1, + columnSpan: 1 + }); + return sf(t); +}, sf = (e) => [...e.filter(ef), ...e.filter((e) => !ef(e)).sort(tf)], cf = (e, t, n) => ({ + columns: e, + rows: t, + gap: n, + regions: of({ + columns: e, + rows: t, + gap: n, + regions: [] + }) +}), lf = (e, t) => e.row >= t.row && e.column >= t.column && e.row + e.rowSpan <= t.row + t.rowSpan && e.column + e.columnSpan <= t.column + t.columnSpan, uf = (e, t) => e.row < t.row + t.rowSpan && e.row + e.rowSpan > t.row && e.column < t.column + t.columnSpan && e.column + e.columnSpan > t.column, df = (e, t) => e.regions.filter((e) => uf(e, t)).sort(tf), ff = (e, t) => { + let n = df(e, t); + return n.length > 1 && n.every((e) => lf(e, t)); +}, pf = (e, t, n) => { + let r = df(e, t), i = r.find((e) => n.has(e.id)) ?? r[0], a = r.filter((e) => e.id !== i.id), o = e.regions.filter((e) => !r.includes(e)).concat({ + id: i.id, + ...t + }); + return { + layout: { + ...e, + regions: sf(o) + }, + removedRegionIds: a.map((e) => e.id) + }; +}, mf = (e, t) => { + let n = e.regions.find((e) => e.id === t); + if (!n) return e; + let r = e.regions.filter((e) => e !== n), i = { + id: n.id, + row: n.row, + column: n.column, + rowSpan: 1, + columnSpan: 1 + }, a = of({ + ...e, + regions: [...r, i] + }); + return { + ...e, + regions: a + }; +}, hf = (e, t, n) => { + let r = { + row: 0, + column: 0, + rowSpan: n, + columnSpan: t + }, i = e.regions.filter((e) => lf(e, r)), a = e.regions.filter((e) => !i.includes(e)), o = { + ...e, + columns: t, + rows: n, + regions: i + }; + return { + layout: { + ...o, + regions: of(o) + }, + removedRegionIds: a.map((e) => e.id) + }; +}, gf = (e, t) => e.regions.find((e) => t.x >= e.x && t.x < e.x + e.width && t.y >= e.y && t.y < e.y + e.height)?.id, _f = (e, t, n) => { + let r = structuredClone(e); + return r.mode = t, t === "basic" ? r.layout = cf(2, 2, n) : delete r.layout, r; +}, vf = (e) => e.items.filter((e) => e.kind === "widget"), yf = (e, t) => vf(e).find((e) => e.region === t), bf = (e) => new Set(vf(e).flatMap((e) => e.region ?? [])), xf = (e, t, n) => { + let r = bf(e), i = t.regions.filter((e) => !r.has(e.id)); + return i.find((e) => e.id === n) ?? i[0]; +}, Sf = (e, t, n, r) => { + let i = Kl(t, 0, 0, e); + return i.region = n.id, i.frame = { ...r }, e.items.push(i), i; +}, Cf = (e, t) => e.filter((e) => e.kind !== "widget" || !t.includes(e.region ?? "")), wf = (e, t) => { + e.layout = t.layout, e.items = Cf(e.items, t.removedRegionIds); +}, Tf = (e, t) => { + if (!e.layout) return; + let n = bf(e); + wf(e, pf(e.layout, t, n)); +}, Ef = (e, t) => { + e.layout &&= mf(e.layout, t); +}, Df = (e, t) => { + e.layout && wf(e, hf(e.layout, t.columns, t.rows)); +}, Of = (e, t) => { + e.layout &&= { + ...e.layout, + gap: t + }; +}, kf = 100, Af = class { constructor() { this.undoStack = [], this.redoStack = []; } @@ -8396,7 +8646,7 @@ var xl = { return this.redoStack.length; } record(e) { - this.undoStack.push(structuredClone(e)), this.undoStack.length > Ud && this.undoStack.shift(), this.redoStack = []; + this.undoStack.push(structuredClone(e)), this.undoStack.length > kf && this.undoStack.shift(), this.redoStack = []; } undo(e) { let t = this.undoStack.pop(); @@ -8409,7 +8659,7 @@ var xl = { clear() { this.undoStack = [], this.redoStack = []; } -}, Gd = (e, t) => { +}, jf = (e, t) => { let n = w(e.items, t); if (!n) return; let { parent: r } = n; @@ -8419,8 +8669,8 @@ var xl = { width: r.width, height: r.height } : pt(e); -}, Kd = (e, t, n, r) => { - let i = w(e.items, t), a = Gd(e, t); +}, Mf = (e, t, n, r) => { + let i = w(e.items, t), a = jf(e, t); if (!i || !a || i.item.locked) return; let o = x(i.item, r), s = ce(n, "lt"), c = a.x + (a.width - o.width) * s.x, l = a.y + (a.height - o.height) * s.y; S(i.item, Math.round(c - o.x), Math.round(l - o.y)); @@ -8495,11 +8745,10 @@ var xl = { ha-dialog { --dialog-content-padding: 0; } -`, qd = P` +`, Nf = P` .dashboard-card, .dashboard-add-card { min-width: 0; - min-height: 236px; padding: 0; border: 1px solid var(--studio-border); border-radius: 13px; @@ -8507,6 +8756,10 @@ var xl = { background: var(--studio-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); } + /* A card is as tall as its picture and its two lines; the add card matches it. */ + .dashboard-add-card { + min-height: 200px; + } .dashboard-card:hover, .dashboard-card:focus-within, .dashboard-add-card:hover, @@ -8520,7 +8773,7 @@ var xl = { outline: 0; transform: translateY(-1px); } -`, Jd = P` +`, Pf = P` .box { display: flex; align-items: center; @@ -8614,9 +8867,9 @@ var xl = { background: var(--primary-color); color: var(--text-primary-color, #fff); } -`, Yd = Sl(class extends Cl { +`, Ff = wl(class extends Tl { constructor(e) { - if (super(e), e.type !== xl.ATTRIBUTE || e.name !== "class" || e.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute."); + if (super(e), e.type !== Cl.ATTRIBUTE || e.name !== "class" || e.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute."); } render(e) { return " " + Object.keys(e).filter((t) => e[t]).join(" ") + " "; @@ -8633,18 +8886,18 @@ var xl = { let r = !!t[e]; r === this.st.has(e) || this.nt?.has(e) || (r ? (n.add(e), this.st.add(e)) : (n.remove(e), this.st.delete(e))); } - return $c; + return tl; } -}), Xd = 2, q = (e, t) => t === "x" ? e.x : e.y, J = (e, t) => t === "x" ? e.width : e.height, Zd = (e, t) => { +}), If = 2, q = (e, t) => t === "x" ? e.x : e.y, J = (e, t) => t === "x" ? e.width : e.height, Lf = (e, t) => { let n = q(e, t), r = J(e, t); return [ n, n + r / 2, n + r ]; -}, Qd = (e, t, n) => { +}, Rf = (e, t, n) => { let r = [], i = (t, i, a) => { - for (let o of Zd(t, n)) Zd(e, n).forEach((e, t) => { + for (let o of Lf(t, n)) Lf(e, n).forEach((e, t) => { let n = Math.abs(o - e); n <= i && r.push({ offset: Math.round(o - e), @@ -8655,9 +8908,9 @@ var xl = { }); }); }; - return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r.push(...ef(e, t.siblings, n)), r.sort(nf)[0]; -}, $d = (e, t, n) => q(e, n) < q(t, n) + J(t, n) && q(t, n) < q(e, n) + J(e, n), ef = (e, t, n) => { - let r = n === "x" ? "y" : "x", i = t.filter((t) => $d(t, e, r)), a = []; + return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r.push(...Bf(e, t.siblings, n)), r.sort(Hf)[0]; +}, zf = (e, t, n) => q(e, n) < q(t, n) + J(t, n) && q(t, n) < q(e, n) + J(e, n), Bf = (e, t, n) => { + let r = n === "x" ? "y" : "x", i = t.filter((t) => zf(t, e, r)), a = []; for (let t of i) for (let r of i) { let i = q(r, n) - (q(t, n) + J(t, n)) - J(e, n); if (i < 0) continue; @@ -8669,22 +8922,22 @@ var xl = { }); } return a; -}, tf = (e) => e.distance - (e.source === "parent" ? Xd : 0), nf = (e, t) => tf(e) - tf(t) || Number(t.source === "parent") - Number(e.source === "parent"), rf = (e, t, n) => ({ - dx: af(e, t, "x", n), - dy: af(e, t, "y", n) -}), af = (e, t, n, r) => { - let i = Qd(e, t, n), a = r?.[n]; +}, Vf = (e) => e.distance - (e.source === "parent" ? If : 0), Hf = (e, t) => Vf(e) - Vf(t) || Number(t.source === "parent") - Number(e.source === "parent"), Uf = (e, t, n) => ({ + dx: Wf(e, t, "x", n), + dy: Wf(e, t, "y", n) +}), Wf = (e, t, n, r) => { + let i = Rf(e, t, n), a = r?.[n]; if (a) { - let t = Zd(e, n)[a.own], r = Math.abs(a.line - t); + let t = Lf(e, n)[a.own], r = Math.abs(a.line - t); if (r <= 12 && (!i || i.distance >= r)) return Math.round(a.line - t); } return r && (i?.source === "parent" && i.own !== void 0 && i.line !== void 0 ? r[n] = { own: i.own, line: i.line } : delete r[n]), i?.offset ?? 0; -}, of = (e, t, n) => { +}, Gf = (e, t, n) => { let r = [], i = (t, i, a) => { - for (let o of Zd(t, n)) { + for (let o of Lf(t, n)) { let t = Math.abs(o - e); t <= i && r.push({ offset: Math.round(o - e), @@ -8694,25 +8947,25 @@ var xl = { } }; return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r; -}, sf = (e, t, n) => { +}, Kf = (e, t, n) => { let [r, i] = n === "x" ? ["w", "e"] : ["n", "s"]; if (t.includes(r)) return q(e, n); if (t.includes(i)) return q(e, n) + J(e, n); -}, cf = (e, t, n) => { +}, qf = (e, t, n) => { let r = (r) => { - let i = sf(e, t, r); - return i === void 0 ? 0 : of(i, n, r).sort(nf)[0]?.offset ?? 0; + let i = Kf(e, t, r); + return i === void 0 ? 0 : Gf(i, n, r).sort(Hf)[0]?.offset ?? 0; }; return { dx: r("x"), dy: r("y") }; -}, lf = .5, uf = (e, t) => { +}, Jf = .5, Yf = (e, t) => { let n = [], r = [...t.siblings, t.parent]; for (let t of ["x", "y"]) { let i = t === "x" ? "y" : "x"; - for (let a of Zd(e, t)) { - let o = r.filter((e) => Zd(e, t).some((e) => Math.abs(e - a) <= lf)); + for (let a of Lf(e, t)) { + let o = r.filter((e) => Lf(e, t).some((e) => Math.abs(e - a) <= Jf)); if (o.length === 0) continue; let s = [e, ...o].map((e) => [q(e, i), q(e, i) + J(e, i)]); n.push({ @@ -8723,17 +8976,17 @@ var xl = { }); } } - return pf(n); -}, df = (e, t, n) => { - let r = n === "x" ? "y" : "x", i = t.filter((t) => $d(t, e, r)), a = (e) => q(e, n) + J(e, n); + return Qf(n); +}, Xf = (e, t, n) => { + let r = n === "x" ? "y" : "x", i = t.filter((t) => zf(t, e, r)), a = (e) => q(e, n) + J(e, n); return { before: i.filter((t) => a(t) <= q(e, n)).sort((e, t) => a(t) - a(e))[0], after: i.filter((t) => q(t, n) >= q(e, n) + J(e, n)).sort((e, t) => q(e, n) - q(t, n))[0] }; -}, ff = (e, t) => { +}, Zf = (e, t) => { let n = []; for (let r of ["x", "y"]) { - let { before: i, after: a } = df(e, t, r); + let { before: i, after: a } = Xf(e, t, r); if (!i || !a) continue; let o = q(i, r) + J(i, r), s = q(a, r), c = q(e, r) - o, l = s - (q(e, r) + J(e, r)); if (Math.abs(c - l) > 3) continue; @@ -8751,19 +9004,19 @@ var xl = { }); } return n; -}, pf = (e) => e.filter((t, n) => e.findIndex((e) => e.axis === t.axis && Math.abs(e.position - t.position) <= lf) === n), mf = (e, t, n) => n?.absolute ? { +}, Qf = (e) => e.filter((t, n) => e.findIndex((e) => e.axis === t.axis && Math.abs(e.position - t.position) <= Jf) === n), $f = (e, t, n) => n?.absolute ? { x: n.x, y: n.y, width: n.width, height: n.height -} : At(x(e, n), t), hf = (e, t, n) => t.flatMap((t) => { +} : At(x(e, n), t), ep = (e, t, n) => t.flatMap((t) => { let r = w(e.items, t); return r ? [{ original: structuredClone(r.item), offset: r.offset, measured: n(r.item) }] : []; -}), gf = (e) => Qt(e.map((e) => At(x(e.original, e.measured), e.offset))), _f = (e, t, n, r) => At(x(t, n && e.kind === "primitive" && t.kind === "primitive" ? je(e.primitive, t.primitive, n) : n), r), vf = (e, t, n, r, i, a, o) => { +}), tp = (e) => Qt(e.map((e) => At(x(e.original, e.measured), e.offset))), np = (e, t, n, r) => At(x(t, n && e.kind === "primitive" && t.kind === "primitive" ? je(e.primitive, t.primitive, n) : n), r), rp = (e, t, n, r, i, a, o) => { let s = a.offset ?? { x: 0, y: 0 @@ -8774,36 +9027,36 @@ var xl = { }, r, o, i, { ...a, snapEnabled: s - }), l = (t) => _f(e, t, a.measured, s), u = c(r.dx, r.dy, a.snapEnabled); + }), l = (t) => np(e, t, a.measured, s), u = c(r.dx, r.dy, a.snapEnabled); if (!o || !a.snapEnabled) return { item: u, guides: [] }; - let d = l(u), f = cf(d, t, o); + let d = l(u), f = qf(d, t, o); if (f.dx === 0 && f.dy === 0) return { item: u, - guides: uf(d, o) + guides: Yf(d, o) }; - let p = l(e), m = (e) => (sf(d, t, e) ?? 0) - (sf(p, t, e) ?? 0), h = c(m("x") + f.dx, m("y") + f.dy, !1); + let p = l(e), m = (e) => (Kf(d, t, e) ?? 0) - (Kf(p, t, e) ?? 0), h = c(m("x") + f.dx, m("y") + f.dy, !1); return { item: h, - guides: uf(l(h), o) + guides: Yf(l(h), o) }; -}, yf = (e, t, n, r) => { +}, ip = (e, t, n, r) => { let i = w(e.items, n); if (!i) return; let a = i.parent?.id, o = zt(e.items).filter((e) => e.parent?.id === a).filter((e) => !e.item.hidden).filter((e) => !t.includes(e.item.id)).flatMap((e) => { let t = C(e.item) ? Bt(e) : At(x(e.item, r(e.item)), e.offset); return t ? [t] : []; - }), s = i.parent ? bf(e, i.parent.id) : pt(e); + }), s = i.parent ? ap(e, i.parent.id) : pt(e); return s ? { siblings: o, parent: s } : void 0; -}, bf = (e, t) => { +}, ap = (e, t) => { let n = w(e.items, t); return n && C(n.item) ? At(x(n.item), n.offset) : void 0; -}, xf = (e, t, n, r, i, a, o, s) => { +}, op = (e, t, n, r, i, a, o, s) => { let c = e.find((e) => e.original.id === t); if (!c) return []; let l = St(c.original, { mode: "move" }, n, r, i, { @@ -8812,7 +9065,7 @@ var xl = { measured: c.measured }), u = x(c.original, c.measured), d = x(l, c.measured), f = d.x - u.x, p = d.y - u.y; if (o && a && !c.original.locked) { - let t = gf(e), i = rf({ + let t = tp(e), i = Uf({ ...t, x: t.x + n, y: t.y + r @@ -8824,36 +9077,36 @@ var xl = { let n = structuredClone(e.original); return n.locked || S(n, f, p), n; }); -}, Sf = (e, t, n) => { +}, sp = (e, t, n) => { let r = e.flatMap((e) => { let n = t.find((t) => t.id === e.original.id); return n ? [At(x(n, e.measured), e.offset)] : []; }); - return r.length > 0 ? uf(Qt(r), n) : []; -}, Cf = (e, t, n) => { + return r.length > 0 ? Yf(Qt(r), n) : []; +}, cp = (e, t, n) => { let r = e.flatMap((e) => { let n = t.find((t) => t.id === e.original.id); return n ? [At(x(n, e.measured), e.offset)] : []; }); - return r.length > 0 ? ff(Qt(r), n.siblings) : []; -}, wf = (e, t, n) => { + return r.length > 0 ? Zf(Qt(r), n.siblings) : []; +}, lp = (e, t, n) => { let r = w(e.items, t); - if (r) return mf(r.item, r.offset, n(r.item)); -}, Tf = (e, t, n) => { - let r = t.flatMap((t) => wf(e, t, n) ?? []); + if (r) return $f(r.item, r.offset, n(r.item)); +}, up = (e, t, n) => { + let r = t.flatMap((t) => lp(e, t, n) ?? []); return r.length > 0 ? Qt(r) : void 0; -}, Ef = (e, t, n, r) => { +}, dp = (e, t, n, r) => { let i = n ? w(e.items, n)?.item : void 0, a = i && C(i) ? i.id : void 0; return zt(e.items).filter((e) => (e.parent?.id ?? void 0) === a).filter((e) => !e.item.hidden).filter((e) => { - let n = C(e.item) ? Bt(e) : mf(e.item, e.offset, r(e.item)); + let n = C(e.item) ? Bt(e) : $f(e.item, e.offset, r(e.item)); return n !== void 0 && Mt(n, t); }).map((e) => e.item.id); -}, Df = (e, t) => ({ +}, fp = (e, t) => ({ x: Math.min(e.x, t.x), y: Math.min(e.y, t.y), width: Math.abs(t.x - e.x), height: Math.abs(t.y - e.y) -}), Of = (e) => { +}), pp = (e) => { let { origin: t, threshold: n = 0, target: r = window, onActivate: i, onMove: a, onEnd: o, onCancel: s } = e, c = !1, l = () => { r.removeEventListener("pointermove", u), r.removeEventListener("pointerup", d), r.removeEventListener("pointercancel", f); }, u = (e) => { @@ -8868,18 +9121,18 @@ var xl = { l(), s?.(); }; return r.addEventListener("pointermove", u), r.addEventListener("pointerup", d), r.addEventListener("pointercancel", f), l; -}, kf = (e) => Array.isArray(e) && e.length === 2 && e.every((e) => typeof e == "number"), Af = (e) => Array.isArray(e) ? e.filter(kf).map(([e, t]) => [e, t]) : [], jf = (e) => e.length < 256, Mf = (e) => e.length > 3, Nf = (e) => { - if (!jf(e) || e.length === 0) return e; +}, mp = (e) => Array.isArray(e) && e.length === 2 && e.every((e) => typeof e == "number"), hp = (e) => Array.isArray(e) ? e.filter(mp).map(([e, t]) => [e, t]) : [], gp = (e) => e.length < 256, _p = (e) => e.length > 3, vp = (e) => { + if (!gp(e) || e.length === 0) return e; let [t, n] = e[e.length - 1], [r, i] = e[0]; return [...e, [Math.round((t + r) / 2), Math.round((n + i) / 2)]]; -}, Pf = (e, t) => Mf(e) ? e.filter((e, n) => n !== t) : e, Ff = (e, t, n, r) => e.map((e, i) => i === t ? n === 0 ? [r, e[1]] : [e[0], r] : e), If = (e, t, n) => e.map((e, r) => r === t ? n : e), Lf = (e, t, n) => jf(e) ? [ +}, yp = (e, t) => _p(e) ? e.filter((e, n) => n !== t) : e, bp = (e, t, n, r) => e.map((e, i) => i === t ? n === 0 ? [r, e[1]] : [e[0], r] : e), xp = (e, t, n) => e.map((e, r) => r === t ? n : e), Sp = (e, t, n) => gp(e) ? [ ...e.slice(0, t + 1), n, ...e.slice(t + 1) -] : e, Rf = (e, t) => [Math.round((e[0] + t[0]) / 2), Math.round((e[1] + t[1]) / 2)], zf = (e) => { - if (e.type === "polygon") return Af(e.points); +] : e, Cp = (e, t) => [Math.round((e[0] + t[0]) / 2), Math.round((e[1] + t[1]) / 2)], wp = (e) => { + if (e.type === "polygon") return hp(e.points); if (e.type === "line") return [[e.x_start, e.y_start], [e.x_end, e.y_end]]; -}, Bf = (e, t) => { +}, Tp = (e, t) => { if (e.type === "polygon") return { ...e, points: t @@ -8905,13 +9158,303 @@ function Y(e, t, n, r) { return i > 3 && a && Object.defineProperty(t, n, a), a; } //#endregion +//#region src/ods-region-layer.ts +var Ep = (e) => ({ + left: `${e.x}px`, + top: `${e.y}px`, + width: `${e.width}px`, + height: `${e.height}px` +}), Dp = class extends L { + constructor(...e) { + super(...e), this.step = "layout", this.selectedRegionId = "", this.onKeyDown = (e) => { + e.key === "Escape" && this.corner && this.stopJoining(); + }; + } + static { + this.styles = [G, P` + :host { + position: absolute; + inset: 0; + pointer-events: none; + } + button { + position: absolute; + box-sizing: border-box; + padding: 0; + pointer-events: auto; + cursor: pointer; + background: transparent; + color: var(--studio-text); + } + .cell { + border: calc(1px * var(--ui, 1)) dashed var(--studio-accent); + } + .cell.joined { + border-color: transparent; + } + .cell:hover, + .cell.in-rectangle { + background: var(--studio-accent-soft); + } + .cell.corner { + background: var(--studio-accent-soft); + border-style: solid; + } + .cell.in-rectangle.invalid { + background: color-mix( + in srgb, + var(--error-color, #db4437) 18%, + transparent + ); + border-color: var(--error-color, #db4437); + } + .outline { + position: absolute; + box-sizing: border-box; + border: calc(2px * var(--ui, 1)) solid var(--studio-accent); + pointer-events: none; + } + .outline { + display: grid; + place-content: center; + justify-items: center; + gap: calc(2px * var(--ui, 1)); + color: var(--studio-text); + } + .letter { + font-size: calc(26px * var(--ui, 1)); + font-weight: 700; + } + .size { + color: var(--studio-muted); + font: calc(10px * var(--ui, 1)) var(--code-font-family, monospace); + } + .outline.selected { + background: var(--studio-accent-soft); + box-shadow: 0 0 0 calc(2px * var(--ui, 1)) var(--studio-accent); + } + /* A region with a widget draws nothing of its own, so the picture is what will be + rendered; only an empty region is marked, and the selected one is outlined. */ + .slot { + border: 0; + } + .slot:hover { + box-shadow: inset 0 0 0 calc(1px * var(--ui, 1)) var(--studio-accent); + } + .slot.empty { + border: calc(1px * var(--ui, 1)) dashed var(--studio-accent); + background: color-mix(in srgb, var(--studio-surface) 70%, transparent); + } + .slot.empty:hover { + background: var(--studio-accent-soft); + box-shadow: none; + } + .slot.selected { + border: calc(2px * var(--ui, 1)) solid var(--studio-accent); + box-shadow: none; + } + .slot.empty.selected { + background: var(--studio-accent-soft); + } + .slot-label { + position: absolute; + top: 0; + left: 0; + max-width: 100%; + padding: calc(2px * var(--ui, 1)) calc(6px * var(--ui, 1)); + overflow: hidden; + background: var(--studio-accent); + color: var(--studio-on-accent, #fff); + font-size: calc(11px * var(--ui, 1)); + text-overflow: ellipsis; + white-space: nowrap; + } + .slot-empty { + display: grid; + gap: calc(4px * var(--ui, 1)); + place-items: center; + font-size: calc(12px * var(--ui, 1)); + } + .slot-empty ha-icon { + --mdc-icon-size: calc(28px * var(--ui, 1)); + color: var(--studio-accent); + } + .status { + position: absolute; + bottom: calc(8px * var(--ui, 1)); + left: 50%; + padding: calc(4px * var(--ui, 1)) calc(10px * var(--ui, 1)); + border-radius: 999px; + background: var(--studio-text); + color: var(--studio-surface); + font-size: calc(12px * var(--ui, 1)); + transform: translateX(-50%); + white-space: nowrap; + } + `]; + } + connectedCallback() { + super.connectedCallback(), window.addEventListener("keydown", this.onKeyDown); + } + disconnectedCallback() { + super.disconnectedCallback(), window.removeEventListener("keydown", this.onKeyDown); + } + willUpdate(e) { + e.has("step") && this.stopJoining(); + } + get layout() { + return this.dashboard.layout; + } + hoverCell(e) { + this.hover = e; + } + stopJoining() { + this.corner = void 0, this.hover = void 0; + } + cellAt(e, t) { + return { + row: Math.floor(e / t.columns), + column: e % t.columns + }; + } + isCorner(e) { + return this.corner?.row === e.row && this.corner.column === e.column; + } + get joining() { + if (!(!this.corner || !this.hover)) return af(this.corner, this.hover); + } + isInJoin(e) { + let t = this.joining; + return t ? e.row >= t.row && e.row < t.row + t.rowSpan && e.column >= t.column && e.column < t.column + t.columnSpan : !1; + } + isInJoinedRegion(e, t) { + let n = rf(t, e); + return n !== void 0 && (n.rowSpan > 1 || n.columnSpan > 1); + } + joinIsValid(e) { + let t = this.joining; + return t !== void 0 && ff(e, t); + } + onCellClick(e, t) { + let n = rf(t, e); + if (!this.corner) { + this.corner = e, n && W(this, "region-select", { regionId: n.id }); + return; + } + let r = af(this.corner, e); + if (r.rowSpan === 1 && r.columnSpan === 1) { + this.stopJoining(); + return; + } + ff(t, r) && (this.stopJoining(), W(this, "regions-merge", { rectangle: r })); + } + onCellDoubleClick(e, t) { + let n = rf(t, e); + n && this.isInJoinedRegion(e, t) && (this.stopJoining(), W(this, "region-split", { regionId: n.id })); + } + onSlotClick(e) { + W(this, "region-select", { regionId: e }); + } + renderCell(e, n, r) { + let i = this.cellAt(n, r), a = this.isInJoin(i); + return F` + + `; + } + renderOutline(e, n, r) { + let i = e.regions.find((e) => e.id === n.id); + return i ? F` +
+ ${Zd(r)} + + ${t.basic.regionSize(n.columnSpan, n.rowSpan)} + +
+ ` : I; + } + renderLayoutStep(e, t) { + return F` + ${t.regions.map((t, n) => this.renderOutline(e, t, n))} + ${e.cells.map((e, n) => this.renderCell(e, n, t))} + ${this.renderStatus(t)} + `; + } + statusMessage(e) { + if (this.corner) return this.joining !== void 0 && !this.joinIsValid(e) ? t.basic.joinInvalid : t.basic.joinStarted; + } + renderStatus(e) { + let t = this.statusMessage(e); + return t ? F` +
${t}
+ ` : I; + } + renderSlotContent(e, n) { + let r = yf(this.dashboard, e); + return r ? e === this.selectedRegionId ? F` + ${r.name} + ` : I : F` + + ${n} + ${t.basic.emptyRegion} + + `; + } + renderSlot(e, n, r) { + let i = !yf(this.dashboard, n), a = n === this.selectedRegionId; + return F` + + `; + } + renderWidgetsStep(e) { + return F` + ${e.regions.map((e, t) => this.renderSlot(e, e.id, Zd(t)))} + `; + } + render() { + let e = this.layout, t = this.frames; + return !e || !t ? I : this.step === "layout" ? this.renderLayoutStep(t, e) : this.renderWidgetsStep(t); + } +}; +Y([z({ attribute: !1 })], Dp.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], Dp.prototype, "frames", void 0), Y([z()], Dp.prototype, "step", void 0), Y([z()], Dp.prototype, "selectedRegionId", void 0), Y([B()], Dp.prototype, "corner", void 0), Y([B()], Dp.prototype, "hover", void 0), Dp = Y([R("ods-region-layer")], Dp); +//#endregion //#region src/ods-zoom-bar.ts -var Vf = [ +var Op = [ .5, 1, 2, 3 -], Hf = class extends L { +], kp = class extends L { constructor(...e) { super(...e), this.zoom = 1; } @@ -8974,7 +9517,7 @@ var Vf = [ - ${Vf.map((e) => F` + ${Op.map((e) => F` @@ -10011,30 +10568,30 @@ var Uf = 3, Wf = 1, Gf = (e, t) => ({ } addPointAfter(e, t, n) { let r = t[(n + 1) % t.length]; - this.changePoints(e, Lf(t, n, Rf(t[n], r))); + this.changePoints(e, Sp(t, n, Cp(t[n], r))); } onPointHandleDoubleClick(e, t, n) { if (e.stopPropagation(), t.kind !== "primitive" || t.locked) return; - let r = zf(t.primitive); - !r || t.primitive.type !== "polygon" || this.changePoints(t, Pf(r, n)); + let r = wp(t.primitive); + !r || t.primitive.type !== "polygon" || this.changePoints(t, yp(r, n)); } onPointHandlePointerDown(e, t, n) { this.startsViewDrag(e) || (e.stopPropagation(), e.preventDefault(), W(this, "item-select", { itemId: t.id }), !(t.kind !== "primitive" || t.locked) && this.beginPointDrag(e, t, n)); } beginPointDrag(e, t, n) { - let r = zf(t.primitive); + let r = wp(t.primitive); if (!r) return; this.stopGesture?.(); let i = structuredClone(this.dashboard), a = this.watchEscape(i, () => void 0), o = w(this.dashboard.items, t.id)?.offset ?? { x: 0, y: 0 - }, { width: s, height: c } = this.dashboard.display, l = Of({ + }, { width: s, height: c } = this.dashboard.display, l = pp({ origin: e, - threshold: Uf, + threshold: Ap, onMove: (i) => { let { dx: a, dy: l } = this.displayDelta(e, i), u = this.snapEnabled && !i.ctrlKey && !i.metaKey, d = (e, t, n) => _(mt(e + t, this.dashboard, u) - t, -n, 2 * n), f = [d(r[n][0] + a, o.x, s), d(r[n][1] + l, o.y, c)], p = { ...t, - primitive: Bf(t.primitive, If(r, n, f)) + primitive: Tp(t.primitive, xp(r, n, f)) }; W(this, "items-transform", { items: [p] }); }, @@ -10074,13 +10631,13 @@ var Uf = 3, Wf = 1, Gf = (e, t) => ({ }; } renderPlaced(e) { - let { item: t } = e, n = mf(t, e.offset, this.measure(t)), r = this.selectedItemIds.includes(t.id), i = this.selectedItemIds.length === 1; + let { item: t } = e, n = $f(t, e.offset, this.measure(t)), r = this.selectedItemIds.includes(t.id), i = this.selectedItemIds.length === 1; return F`
this.onItemPointerDown(e, t)} @@ -10098,11 +10655,11 @@ var Uf = 3, Wf = 1, Gf = (e, t) => ({ } renderSelectionBox() { if (this.selectedItemIds.length < 2) return I; - let e = Tf(this.dashboard, this.selectedItemIds, this.measure); + let e = up(this.dashboard, this.selectedItemIds, this.measure); return e ? F`
${this.renderSelectionSize(e)}
@@ -10148,12 +10705,12 @@ var Uf = 3, Wf = 1, Gf = (e, t) => ({ return this.marquee ? F`
` : I; } renderCommandButton(e, t) { - let n = Au(wu(e), t, pd()); + let n = Pu(Ou(e), t, yd()); return F`
`; } - renderToolbar() { - let e = this.dashboard, { width: n, height: r, padding: i, snapSize: a } = e.display, o = Yd({ - "tool-toggle": !0, - active: this.snapEnabled - }), s = Yd({ + renderPanToggle() { + return F` + + `; + } + renderGridToggle() { + return F` + + `; + } + renderSnapToggle() { + return F` + + `; + } + renderHistoryControls() { + return F` +
+ ${this.renderCommandButton("undo", this.historyContext)} + ${this.renderCommandButton("redo", this.historyContext)} +
+ `; + } + renderZoomReadout() { + return F` + ${Math.round(this.viewport.zoom * 100)}% + `; + } + renderToolbar() { + let e = this.dashboard, { width: n, height: r, padding: i } = e.display; return F`
${t.common.sizeInPixels(n, r)} ${t.canvas.layers(Dt(e.items))} ${t.canvas.padding(i)} -
- ${this.renderCommandButton("undo", this.historyContext)} - ${this.renderCommandButton("redo", this.historyContext)} -
- - - - - ${Math.round(this.viewport.zoom * 100)}% - + ${this.renderHistoryControls()} ${this.renderPanToggle()} + ${this.renderGridToggle()} ${this.renderSnapToggle()} + ${this.renderZoomReadout()} +
+ `; + } + renderBasicToolbar() { + let { width: e, height: n, padding: r } = this.dashboard.display; + return F` +
+ ${t.common.sizeInPixels(e, n)} + ${t.canvas.padding(r)} + ${this.renderHistoryControls()} ${this.renderPanToggle()} + ${this.renderZoomReadout()}
`; } @@ -10293,20 +10882,44 @@ var Uf = 3, Wf = 1, Gf = (e, t) => ({ renderClipFrame(e) { return e === 0 ? I : F` + `; + } + renderRegions() { + return F` + + `; + } + renderItems() { + let e = this.dashboard, t = V({ + ...Mp(pt(e), e.display), + "--snap-size": `${e.display.snapSize * this.viewport.zoom}px` + }); + return F` + + ${zt(e.items).map((e) => this.renderPlaced(e))} + ${this.renderSelectionBox()} ${this.renderMarquee()} + ${this.guides.map((e) => this.renderGuide(e))} + ${this.spacing.map((e) => this.renderSpacing(e))} `; } renderStage() { - let e = this.dashboard, { width: t, height: n, snapSize: r } = e.display, { zoom: i, panX: a, panY: o } = this.viewport, s = V({ transform: `translate(${a}px, ${o}px) scale(${i})` }), c = V({ - width: `${t}px`, - height: `${n}px`, - "--ui": String(1 / i) - }), l = V({ - ...Gf(pt(e), e.display), - "--snap-size": `${r * i}px` + let { width: e, height: t } = this.dashboard.display, { zoom: n, panX: r, panY: i } = this.viewport, a = V({ transform: `translate(${r}px, ${i}px) scale(${n})` }), o = V({ + width: `${e}px`, + height: `${t}px`, + "--ui": String(1 / n) }); return F`
({ @dragover=${this.onStageDragOver} @drop=${this.onStageDrop} > -
+
${this.renderPreview()} - - ${zt(e.items).map((e) => this.renderPlaced(e))} - ${this.renderSelectionBox()} ${this.renderMarquee()} - ${this.guides.map((e) => this.renderGuide(e))} - ${this.spacing.map((e) => this.renderSpacing(e))} + ${this.isBasic ? this.renderRegions() : this.renderItems()}
({ } render() { return F` -
- ${this.renderToolbar()} ${this.renderArrangeBar()} ${this.renderStage()} +
+ ${this.isBasic ? this.renderBasicToolbar() : this.renderToolbar()} + ${this.isBasic ? I : this.renderArrangeBar()} + ${this.renderStage()}
`; } }; -Y([z({ attribute: !1 })], X.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], X.prototype, "preview", void 0), Y([z({ attribute: !1 })], X.prototype, "widgets", void 0), Y([z({ attribute: !1 })], X.prototype, "primitives", void 0), Y([z()], X.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], X.prototype, "selectedItemIds", void 0), Y([z()], X.prototype, "enteredGroupId", void 0), Y([z({ type: Boolean })], X.prototype, "snapEnabled", void 0), Y([z()], X.prototype, "alignTo", void 0), Y([z({ type: Boolean })], X.prototype, "acceptingDrop", void 0), Y([z({ type: Boolean })], X.prototype, "canUndo", void 0), Y([z({ type: Boolean })], X.prototype, "canRedo", void 0), Y([z({ attribute: !1 })], X.prototype, "viewport", void 0), Y([bl(".canvas")], X.prototype, "canvas", void 0), Y([bl(".canvas-stage")], X.prototype, "stage", void 0), Y([B()], X.prototype, "dropContainerId", void 0), Y([B()], X.prototype, "marquee", void 0), Y([B()], X.prototype, "guides", void 0), Y([B()], X.prototype, "spacing", void 0), Y([B()], X.prototype, "panMode", void 0), Y([B()], X.prototype, "gridVisible", void 0), Y([B()], X.prototype, "spaceHeld", void 0), X = Y([R("ods-canvas")], X); +Y([z({ attribute: !1 })], X.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], X.prototype, "preview", void 0), Y([z({ attribute: !1 })], X.prototype, "widgets", void 0), Y([z({ attribute: !1 })], X.prototype, "primitives", void 0), Y([z()], X.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], X.prototype, "selectedItemIds", void 0), Y([z()], X.prototype, "enteredGroupId", void 0), Y([z({ type: Boolean })], X.prototype, "snapEnabled", void 0), Y([z()], X.prototype, "alignTo", void 0), Y([z({ type: Boolean })], X.prototype, "acceptingDrop", void 0), Y([z({ type: Boolean })], X.prototype, "canUndo", void 0), Y([z({ type: Boolean })], X.prototype, "canRedo", void 0), Y([z({ attribute: !1 })], X.prototype, "layoutFrames", void 0), Y([z()], X.prototype, "basicStep", void 0), Y([z()], X.prototype, "selectedRegionId", void 0), Y([z({ attribute: !1 })], X.prototype, "viewport", void 0), Y([Sl(".canvas")], X.prototype, "canvas", void 0), Y([Sl(".canvas-stage")], X.prototype, "stage", void 0), Y([B()], X.prototype, "dropContainerId", void 0), Y([B()], X.prototype, "marquee", void 0), Y([B()], X.prototype, "guides", void 0), Y([B()], X.prototype, "spacing", void 0), Y([B()], X.prototype, "panMode", void 0), Y([B()], X.prototype, "gridVisible", void 0), Y([B()], X.prototype, "spaceHeld", void 0), X = Y([R("ods-canvas")], X); //#endregion //#region src/ods-code-view.ts -var Yf = { +var Ip = { idle: "mdi:content-copy", copied: "mdi:check", failed: "mdi:alert-circle-outline" -}, Xf = 2200, Zf = class extends L { +}, Lp = 2200, Rp = class extends L { constructor(...e) { super(...e), this.copyState = "idle"; } @@ -10463,7 +11070,7 @@ var Yf = { } this.copyTimer = window.setTimeout(() => { this.copyState = "idle"; - }, Xf); + }, Lp); } } render() { @@ -10484,7 +11091,7 @@ var Yf = { > ${t.code.copy[this.copyState]} @@ -10507,10 +11114,10 @@ var Yf = { `; } }; -Y([z({ attribute: !1 })], Zf.prototype, "preview", void 0), Y([B()], Zf.prototype, "copyState", void 0), Zf = Y([R("ods-code-view")], Zf); +Y([z({ attribute: !1 })], Rp.prototype, "preview", void 0), Y([B()], Rp.prototype, "copyState", void 0), Rp = Y([R("ods-code-view")], Rp); //#endregion //#region src/ods-confirm-dialog.ts -var Qf = class extends L { +var zp = class extends L { constructor(...e) { super(...e), this.eyebrow = "", this.heading = "", this.body = "", this.confirmLabel = ""; } @@ -10616,26 +11223,26 @@ var Qf = class extends L { `; } }; -Y([z()], Qf.prototype, "eyebrow", void 0), Y([z()], Qf.prototype, "heading", void 0), Y([z()], Qf.prototype, "body", void 0), Y([z()], Qf.prototype, "confirmLabel", void 0), Qf = Y([R("ods-confirm-dialog")], Qf); +Y([z()], zp.prototype, "eyebrow", void 0), Y([z()], zp.prototype, "heading", void 0), Y([z()], zp.prototype, "body", void 0), Y([z()], zp.prototype, "confirmLabel", void 0), zp = Y([R("ods-confirm-dialog")], zp); //#endregion //#region src/series.ts -var $f = "entity", ep = (e) => e.shape === "objects" && (e.nested ?? []).some((e) => e.shape === "entity"), tp = (e) => typeof e == "object" && !!e && !Array.isArray(e), np = (e) => Array.isArray(e) ? e.filter(tp) : [], rp = (e, t = "") => { +var Bp = "entity", Vp = (e) => e.shape === "objects" && (e.nested ?? []).some((e) => e.shape === "entity"), Hp = (e) => typeof e == "object" && !!e && !Array.isArray(e), Up = (e) => Array.isArray(e) ? e.filter(Hp) : [], Wp = (e, t = "") => { let n = (e.nested ?? []).flatMap((e) => e.default === void 0 ? [] : [[e.key, e.default]]); return { ...Object.fromEntries(n), - [$f]: t + [Bp]: t }; -}, ip = (e, t) => t.length < (typeof e.max == "number" ? e.max : t.length + 1), ap = (e, t) => t.length > (typeof e.min == "number" ? e.min : 1), op = (e, t, n) => e.map((e, r) => r === t ? { +}, Gp = (e, t) => t.length < (typeof e.max == "number" ? e.max : t.length + 1), Kp = (e, t) => t.length > (typeof e.min == "number" ? e.min : 1), qp = (e, t, n) => e.map((e, r) => r === t ? { ...e, ...n -} : e), sp = (e, t) => e.filter((e, n) => n !== t), cp = class extends L { +} : e), Jp = (e, t) => e.filter((e, n) => n !== t), Yp = class extends L { constructor(...e) { super(...e), this.label = "", this.fieldKey = "", this.unit = "", this.placeholder = "", this.value = 0, this.min = 0, this.max = 4096, this.disabled = !1; } static { this.styles = [ G, - Jd, + Pf, P` :host { display: block; @@ -10728,7 +11335,7 @@ var $f = "entity", ep = (e) => e.shape === "objects" && (e.nested ?? []).some((e onChange(e) { W(this, "field-change", { key: this.fieldKey, - value: dd(e) + value: _d(e) }); } render() { @@ -10755,10 +11362,10 @@ var $f = "entity", ep = (e) => e.shape === "objects" && (e.nested ?? []).some((e `; } }; -Y([z()], cp.prototype, "label", void 0), Y([z()], cp.prototype, "fieldKey", void 0), Y([z()], cp.prototype, "unit", void 0), Y([z()], cp.prototype, "placeholder", void 0), Y([z({ attribute: !1 })], cp.prototype, "value", void 0), Y([z({ type: Number })], cp.prototype, "min", void 0), Y([z({ type: Number })], cp.prototype, "max", void 0), Y([z({ type: Boolean })], cp.prototype, "disabled", void 0), Y([bl("input")], cp.prototype, "input", void 0), cp = Y([R("ods-property-field")], cp); +Y([z()], Yp.prototype, "label", void 0), Y([z()], Yp.prototype, "fieldKey", void 0), Y([z()], Yp.prototype, "unit", void 0), Y([z()], Yp.prototype, "placeholder", void 0), Y([z({ attribute: !1 })], Yp.prototype, "value", void 0), Y([z({ type: Number })], Yp.prototype, "min", void 0), Y([z({ type: Number })], Yp.prototype, "max", void 0), Y([z({ type: Boolean })], Yp.prototype, "disabled", void 0), Y([Sl("input")], Yp.prototype, "input", void 0), Yp = Y([R("ods-property-field")], Yp); //#endregion //#region src/ods-anchor-picker.ts -var lp = [ +var Xp = [ "lt", "mt", "rt", @@ -10768,7 +11375,7 @@ var lp = [ "lb", "mb", "rb" -], up = (e) => lp.some((t) => t === e), dp = class extends L { +], Zp = (e) => Xp.some((t) => t === e), Qp = class extends L { constructor(...e) { super(...e), this.value = "", this.disabled = !1; } @@ -10837,15 +11444,15 @@ var lp = [ render() { return F`
- ${lp.map((e) => this.renderPosition(e))} + ${Xp.map((e) => this.renderPosition(e))}
`; } }; -Y([z()], dp.prototype, "value", void 0), Y([z({ type: Boolean })], dp.prototype, "disabled", void 0), dp = Y([R("ods-anchor-picker")], dp); +Y([z()], Qp.prototype, "value", void 0), Y([z({ type: Boolean })], Qp.prototype, "disabled", void 0), Qp = Y([R("ods-anchor-picker")], Qp); //#endregion //#region src/ods-color-picker.ts -var fp = class extends L { +var $p = class extends L { constructor(...e) { super(...e), this.palette = "bw", this.value = "", this.nullable = !1; } @@ -10932,10 +11539,10 @@ var fp = class extends L { `; } }; -Y([z()], fp.prototype, "palette", void 0), Y([z()], fp.prototype, "value", void 0), Y([z({ type: Boolean })], fp.prototype, "nullable", void 0), fp = Y([R("ods-color-picker")], fp); +Y([z()], $p.prototype, "palette", void 0), Y([z()], $p.prototype, "value", void 0), Y([z({ type: Boolean })], $p.prototype, "nullable", void 0), $p = Y([R("ods-color-picker")], $p); //#endregion //#region src/font-faces.ts -var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-font", hp = "ods-mdi", gp = /* @__PURE__ */ new Map(), _p = (e) => `ods-font-${e.name.replace(/[^A-Za-z0-9_-]/g, "_")}-${e.version}`, vp = (e) => `${pp}/${encodeURIComponent(e.name)}?v=${e.version}`, yp = async (e, t, n) => { +var em = "/api/opendisplay_studio/fonts", tm = "/api/opendisplay_studio/icon-font", nm = "ods-mdi", rm = /* @__PURE__ */ new Map(), im = (e) => `ods-font-${e.name.replace(/[^A-Za-z0-9_-]/g, "_")}-${e.version}`, am = (e) => `${em}/${encodeURIComponent(e.name)}?v=${e.version}`, om = async (e, t, n) => { if (e.fetchWithAuth) try { let r = await e.fetchWithAuth(n); if (!r.ok) return; @@ -10944,32 +11551,32 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon } catch { return; } -}, bp = (e, t, n) => { - let r = gp.get(t); - return r || (r = yp(e, t, n), gp.set(t, r)), r; -}, xp = (e, t) => bp(e, _p(t), vp(t)), Sp = (e) => bp(e, hp, mp), Cp = "mdi:", wp = 36, Tp = 288, Ep = 6, Dp = (e) => e.startsWith(Cp) ? e.slice(4) : e, Op = (e, t) => { +}, sm = (e, t, n) => { + let r = rm.get(t); + return r || (r = om(e, t, n), rm.set(t, r)), r; +}, cm = (e, t) => sm(e, im(t), am(t)), lm = (e) => sm(e, nm, tm), um = "mdi:", dm = 36, fm = 288, pm = 6, mm = (e) => e.startsWith(um) ? e.slice(4) : e, hm = (e, t) => { let n = t.trim().toLowerCase().split(/\s+/).filter(Boolean); if (n.length === 0) return e; let r = e.filter((e) => n.every((t) => e.includes(t))), i = n[0], a = r.filter((e) => e.startsWith(i)), o = r.filter((e) => !e.startsWith(i)); return [...a, ...o]; -}, kp = (e, t) => ({ - first: Math.max(0, Math.floor(e / wp) - Ep), - last: Math.min(t, Math.ceil((e + Tp) / wp) + Ep) -}), Ap = class extends L { +}, gm = (e, t) => ({ + first: Math.max(0, Math.floor(e / dm) - pm), + last: Math.min(t, Math.ceil((e + fm) / dm) + pm) +}), _m = class extends L { constructor(...e) { super(...e), this.icons = [], this.glyphs = {}, this.value = "", this.iconFontReady = !1, this.search = "", this.listScroll = 0; } static { this.styles = [ G, - Jd, + Pf, P` :host { display: block; } .list { position: relative; - height: ${Tp}px; + height: ${fm}px; margin-top: 8px; overflow: auto; overscroll-behavior: contain; @@ -10984,7 +11591,7 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon align-items: center; gap: 10px; width: 100%; - height: ${wp}px; + height: ${dm}px; padding: 0 8px; border: 1px solid transparent; border-radius: 7px; @@ -11016,7 +11623,7 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon .glyph { flex: none; width: 22px; - font-family: "${mc(hp)}"; + font-family: "${mc(nm)}"; font-size: 22px; line-height: 22px; text-align: center; @@ -11033,7 +11640,7 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon e.has("hass") && this.hass && !this.iconFontReady && this.loadGlyphs(this.hass); } async loadGlyphs(e) { - this.iconFontReady = await Sp(e) !== void 0; + this.iconFontReady = await lm(e) !== void 0; } onSearch(e) { e.target instanceof HTMLInputElement && (this.search = e.target.value, this.listScroll = 0, this.list?.scrollTo({ top: 0 })); @@ -11049,7 +11656,7 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon return this.iconFontReady && t ? F` ` : F` - + `; } renderIcon(e) { @@ -11058,7 +11665,7 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon type="button" title=${e} aria-label=${e} - aria-pressed=${e === Dp(this.value) ? "true" : "false"} + aria-pressed=${e === mm(this.value) ? "true" : "false"} @click=${() => this.choose(e)} > ${this.renderPicture(e)} @@ -11067,17 +11674,17 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon `; } renderResults() { - let e = Op(this.icons, this.search); + let e = hm(this.icons, this.search); if (e.length === 0) return F`

${t.iconPicker.noMatch}

`; - let { first: n, last: r } = kp(this.listScroll, e.length); + let { first: n, last: r } = gm(this.listScroll, e.length); return F`
-
+
${e.slice(n, r).map((e) => this.renderIcon(e))}
@@ -11100,10 +11707,10 @@ var pp = "/api/opendisplay_studio/fonts", mp = "/api/opendisplay_studio/icon-fon `; } }; -Y([z({ attribute: !1 })], Ap.prototype, "hass", void 0), Y([z({ attribute: !1 })], Ap.prototype, "icons", void 0), Y([z({ attribute: !1 })], Ap.prototype, "glyphs", void 0), Y([z()], Ap.prototype, "value", void 0), Y([B()], Ap.prototype, "iconFontReady", void 0), Y([B()], Ap.prototype, "search", void 0), Y([B()], Ap.prototype, "listScroll", void 0), Y([bl(".list")], Ap.prototype, "list", void 0), Ap = Y([R("ods-icon-picker")], Ap); +Y([z({ attribute: !1 })], _m.prototype, "hass", void 0), Y([z({ attribute: !1 })], _m.prototype, "icons", void 0), Y([z({ attribute: !1 })], _m.prototype, "glyphs", void 0), Y([z()], _m.prototype, "value", void 0), Y([B()], _m.prototype, "iconFontReady", void 0), Y([B()], _m.prototype, "search", void 0), Y([B()], _m.prototype, "listScroll", void 0), Y([Sl(".list")], _m.prototype, "list", void 0), _m = Y([R("ods-icon-picker")], _m); //#endregion //#region src/ods-popover.ts -var jp = 6, Mp = 8, Np = class extends L { +var vm = 6, ym = 8, bm = class extends L { constructor(...e) { super(...e), this.heading = "", this.width = 220, this.resizeObserver = new ResizeObserver(() => this.place()), this.onOutsidePointer = (e) => { e.composedPath().includes(this) || this.close(); @@ -11178,8 +11785,8 @@ var jp = 6, Mp = 8, Np = class extends L { place() { let e = this.panel; if (!e || !this.anchor) return; - let t = e.offsetHeight, n = this.anchor.bottom + jp, r = n + t + Mp <= window.innerHeight ? n : this.anchor.top - jp - t, i = Math.min(this.width, window.innerWidth - 16), a = Math.min(Math.max(Mp, this.anchor.left), window.innerWidth - i - Mp); - e.style.top = `${Math.max(Mp, r)}px`, e.style.left = `${a}px`, e.style.width = `${i}px`; + let t = e.offsetHeight, n = this.anchor.bottom + vm, r = n + t + ym <= window.innerHeight ? n : this.anchor.top - vm - t, i = Math.min(this.width, window.innerWidth - 16), a = Math.min(Math.max(ym, this.anchor.left), window.innerWidth - i - ym); + e.style.top = `${Math.max(ym, r)}px`, e.style.left = `${a}px`, e.style.width = `${i}px`; } render() { return this.anchor ? F` @@ -11205,17 +11812,17 @@ var jp = 6, Mp = 8, Np = class extends L { ` : I; } }; -Y([z()], Np.prototype, "heading", void 0), Y([z({ attribute: !1 })], Np.prototype, "anchor", void 0), Y([z({ type: Number })], Np.prototype, "width", void 0), Y([bl(".popover")], Np.prototype, "panel", void 0), Np = Y([R("ods-popover")], Np); +Y([z()], bm.prototype, "heading", void 0), Y([z({ attribute: !1 })], bm.prototype, "anchor", void 0), Y([z({ type: Number })], bm.prototype, "width", void 0), Y([Sl(".popover")], bm.prototype, "panel", void 0), bm = Y([R("ods-popover")], bm); //#endregion //#region src/ods-icon-field.ts -var Pp = "mdi:", Fp = 250, Ip = -1, Lp = class extends L { +var xm = "mdi:", Sm = 250, Cm = -1, wm = class extends L { constructor(...e) { super(...e), this.disabled = !1, this.names = [], this.glyphs = {}, this.closedAt = 0; } static { this.styles = [ G, - Jd, + Pf, P` :host { display: block; @@ -11304,14 +11911,14 @@ var Pp = "mdi:", Fp = 250, Ip = -1, Lp = class extends L { } async loadNames() { if (!(this.names.length > 0 || !this.hass)) try { - let e = await Pd(this.hass); + let e = await Vd(this.hass); this.names = e.names, this.glyphs = e.glyphs; } catch { this.names = []; } } openAt(e, t) { - if (this.disabled || Date.now() - this.closedAt < Fp) return; + if (this.disabled || Date.now() - this.closedAt < Sm) return; let n = t.currentTarget; n instanceof HTMLElement && (this.open = { index: e, @@ -11322,14 +11929,14 @@ var Pp = "mdi:", Fp = 250, Ip = -1, Lp = class extends L { this.openAt(0, e); } openNew(e) { - this.openAt(Ip, e); + this.openAt(Cm, e); } close() { this.closedAt = Date.now(), this.open = void 0; } onIconChange(e) { - let t = Dp(e.detail.icon), n = this.open?.index ?? 0; - this.isList ? n === Ip ? this.change([...this.icons, t]) : this.change(this.icons.map((e, r) => r === n ? t : e)) : this.change(t), this.close(); + let t = mm(e.detail.icon), n = this.open?.index ?? 0; + this.isList ? n === Cm ? this.change([...this.icons, t]) : this.change(this.icons.map((e, r) => r === n ? t : e)) : this.change(t), this.close(); } removeAt(e) { let t = this.icons.filter((t, n) => n !== e); @@ -11359,7 +11966,7 @@ var Pp = "mdi:", Fp = 250, Ip = -1, Lp = class extends L { .disabled=${this.disabled} @click=${(e) => this.openAt(n, e)} > - + @@ -11443,17 +12050,17 @@ var Pp = "mdi:", Fp = 250, Ip = -1, Lp = class extends L { `; } }; -Y([z({ attribute: !1 })], Lp.prototype, "hass", void 0), Y([z({ attribute: !1 })], Lp.prototype, "field", void 0), Y([z({ attribute: !1 })], Lp.prototype, "value", void 0), Y([z({ type: Boolean })], Lp.prototype, "disabled", void 0), Y([B()], Lp.prototype, "open", void 0), Y([B()], Lp.prototype, "names", void 0), Y([B()], Lp.prototype, "glyphs", void 0), Lp = Y([R("ods-icon-field")], Lp); +Y([z({ attribute: !1 })], wm.prototype, "hass", void 0), Y([z({ attribute: !1 })], wm.prototype, "field", void 0), Y([z({ attribute: !1 })], wm.prototype, "value", void 0), Y([z({ type: Boolean })], wm.prototype, "disabled", void 0), Y([B()], wm.prototype, "open", void 0), Y([B()], wm.prototype, "names", void 0), Y([B()], wm.prototype, "glyphs", void 0), wm = Y([R("ods-icon-field")], wm); //#endregion //#region src/ods-points-field.ts -var Rp = class extends L { +var Tm = class extends L { constructor(...e) { super(...e), this.disabled = !1; } static { this.styles = [ G, - Jd, + Pf, P` :host { display: block; @@ -11505,7 +12112,7 @@ var Rp = class extends L { ]; } get points() { - return Af(this.value); + return hp(this.value); } change(e) { W(this, "primitive-field-change", { @@ -11520,7 +12127,7 @@ var Rp = class extends L { n.target.value = String(this.points[e][t]); return; } - this.change(Ff(this.points, e, t, r)); + this.change(bp(this.points, e, t, r)); } onXChange(e, t) { this.onCoordinateChange(e, 0, t); @@ -11529,10 +12136,10 @@ var Rp = class extends L { this.onCoordinateChange(e, 1, t); } removeAt(e) { - this.change(Pf(this.points, e)); + this.change(yp(this.points, e)); } add() { - this.change(Nf(this.points)); + this.change(vp(this.points)); } renderCoordinate(e, t, n) { return F` @@ -11559,7 +12166,7 @@ var Rp = class extends L { type="button" title=${r} aria-label=${r} - .disabled=${this.disabled || !Mf(this.points)} + .disabled=${this.disabled || !_p(this.points)} @click=${() => this.removeAt(n)} > @@ -11576,7 +12183,7 @@ var Rp = class extends L { ${this.renderPicker()} `; } }; -Y([z({ attribute: !1 })], fm.prototype, "hass", void 0), Y([z({ attribute: !1 })], fm.prototype, "field", void 0), Y([z()], fm.prototype, "value", void 0), Y([z({ type: Boolean })], fm.prototype, "disabled", void 0), Y([B()], fm.prototype, "anchor", void 0), fm = Y([R("ods-image-field")], fm); +Y([z({ attribute: !1 })], $m.prototype, "hass", void 0), Y([z({ attribute: !1 })], $m.prototype, "field", void 0), Y([z()], $m.prototype, "value", void 0), Y([z({ type: Boolean })], $m.prototype, "disabled", void 0), Y([B()], $m.prototype, "anchor", void 0), $m = Y([R("ods-image-field")], $m); //#endregion //#region src/ods-value-field.ts -var pm = 250, mm = 4, hm = "lt", gm = class extends L { +var eh = 250, th = 4, nh = "lt", rh = class extends L { constructor(...e) { super(...e), this.palette = "bw", this.display = { width: 800, @@ -12328,7 +12935,7 @@ var pm = 250, mm = 4, hm = "lt", gm = class extends L { static { this.styles = [ G, - Jd, + Pf, P` :host { display: block; @@ -12433,7 +13040,7 @@ var pm = 250, mm = 4, hm = "lt", gm = class extends L { }); } openPicker(e, t) { - if (this.disabled || Date.now() - this.closedAt < pm) return; + if (this.disabled || Date.now() - this.closedAt < eh) return; let n = t.currentTarget; n instanceof HTMLElement && (this.picker = { kind: e, @@ -12558,14 +13165,14 @@ var pm = 250, mm = 4, hm = "lt", gm = class extends L { renderAnchorMark(e) { return F` - ${lp.map((t) => F` + ${Xp.map((t) => F` `)} `; } renderAnchor() { - let e = String(this.value ?? "") || hm, n = up(e) ? t.anchors[e] : e; + let e = String(this.value ?? "") || nh, n = Zp(e) ? t.anchors[e] : e; return F` - ${ym.map((e) => this.renderGroup(e))} + ${oh.map((e) => this.renderGroup(e))}
`; } }; -bm = Y([R("ods-shortcuts-dialog")], bm); +sh = Y([R("ods-shortcuts-dialog")], sh); //#endregion -//#region src/ods-dashboard-card.ts -var xm = () => [ - { - id: "rename", - label: t.gallery.menu.rename, - icon: "mdi:pencil-outline" - }, - { +//#region src/ods-basic-steps.ts +var ch = class extends L { + constructor(...e) { + super(...e), this.step = "layout"; + } + static { + this.styles = [ + G, + K, + Pf, + P` + :host { + display: block; + padding: var(--ha-space-2, 8px) 9px; + border-inline-end: 1px solid var(--studio-border); + border-bottom: 1px solid var(--studio-border); + background: var(--studio-surface); + } + .segmented { + height: 32px; + } + .segmented button { + font-size: 12px; + } + .segmented button[aria-pressed="true"] { + background: var(--studio-accent); + } + ` + ]; + } + renderStep(e, t) { + return F` + + `; + } + render() { + return F` +
+ ${this.renderStep("layout", t.basic.stepLayout)} + ${this.renderStep("widgets", t.basic.stepWidgets)} +
+ `; + } +}; +Y([z()], ch.prototype, "step", void 0), ch = Y([R("ods-basic-steps")], ch); +//#endregion +//#region src/display-shape.ts +var lh = .03, uh = 2.5, dh = 5, fh = (e, t, n) => Math.min(n, Math.max(t, e)), ph = (e) => e === 90 || e === 270, mh = (e, t) => ph(t) ? { + width: e.height, + height: e.width +} : e, hh = (e, t) => { + let n = mh(e, e.rotation), r = fh(Math.min(t.width, t.height) * lh, uh, dh), i = Math.min((t.width - 2 * r) / n.width, (t.height - 2 * r) / n.height), a = { + width: n.width * i, + height: n.height * i + }; + return { + housing: { + width: a.width + 2 * r, + height: a.height + 2 * r + }, + screen: a, + bezel: r + }; +}, gh = (e) => e * Math.PI / 180, _h = (e, t) => { + let n = Math.abs(Math.cos(gh(t))), r = Math.abs(Math.sin(gh(t))); + return { + width: e.width * n + e.height * r, + height: e.width * r + e.height * n + }; +}, vh = (e, t, n) => { + let r = _h(e, t); + return Math.min(1, n.width / r.width, n.height / r.height); +}, yh = (e, t) => { + let n = Math.abs(Math.cos(gh(t))), r = Math.abs(Math.sin(gh(t))), i = _h(e, t), a = i.width / i.height, o = Math.min(e.width / (n + r / a), e.height / (r + n / a)); + return { + width: o, + height: o / a + }; +}, bh = 6, xh = 9, Sh = .13, Ch = .76, wh = (e) => Math.sin(Math.PI / 2 * e), Th = (e) => 1 - (1 - e) ** 3, Eh = (e) => Math.min(1, Math.max(0, e)), Dh = (e, t, n) => { + let r = Math.sign(t - e); + if (r === 0) return t; + let i = Eh(n); + if (i >= 1) return t; + if (i < Sh) { + let t = wh(i / Sh); + return e - r * bh * t; + } + if (i < Ch) { + let n = Th((i - Sh) / .63); + return e - r * bh + (t - e + r * 15) * n; + } + let a = Th((i - Ch) / .24); + return t + r * xh * (1 - a); +}, Oh = (e, t) => { + let n = (t - (e % 360 + 360) % 360 + 540) % 360 - 180; + return n === -180 ? 180 : n; +}, kh = { + width: 240, + height: 92 +}, Ah = class extends L { + constructor(...e) { + super(...e), this.width = 800, this.height = 480, this.rotation = 0, this.background = "white", this.accent = "#202124", this.box = kh, this.turns = !1, this.angle = 0, this.target = 0, this.frame = 0; + } + static { + this.styles = P` + :host { + display: block; + } + svg { + display: block; + width: 100%; + height: 100%; + } + .housing { + fill: #35383b; + } + .screen { + stroke: color-mix(in srgb, var(--studio-text, #202124) 30%, transparent); + stroke-width: 0.5; + } + .light { + fill: #4fd1a5; + } + .button { + fill: #8a9096; + } + .skeleton-title { + fill: color-mix(in srgb, var(--studio-muted, #68727a) 50%, transparent); + } + .skeleton-line { + fill: color-mix(in srgb, var(--studio-muted, #68727a) 28%, transparent); + } + .skeleton-block { + fill: color-mix( + in srgb, + var(--display-accent, #202124) 18%, + var(--studio-surface, #fff) + ); + } + .skeleton-accent { + fill: var(--display-accent, #202124); + } + `; + } + connectedCallback() { + super.connectedCallback(), this.angle = this.rotation, this.target = this.rotation; + } + disconnectedCallback() { + super.disconnectedCallback(), cancelAnimationFrame(this.frame); + } + willUpdate(e) { + e.has("rotation") && this.hasUpdated && this.turnTo(this.rotation); + } + turnTo(e) { + cancelAnimationFrame(this.frame); + let t = this.angle; + if (this.target += Oh(this.target, e), !this.turns || jh()) { + this.angle = this.target; + return; + } + let n = this.target, r = performance.now(), i = (e) => { + let a = (e - r) / 860; + this.angle = Dh(t, n, a), a < 1 && (this.frame = requestAnimationFrame(i)); + }; + this.frame = requestAnimationFrame(i); + } + renderSkeleton(e) { + let t = -e.width / 2, n = -e.height / 2, r = Math.max(3, e.height * .04), i = n + e.height * .25; + return el` + + + + + `; + } + renderHousing(e) { + let { housing: t, screen: n, bezel: r } = e; + return el` + + + + + `; + } + render() { + let e = this.box, n = hh({ + width: this.width, + height: this.height, + rotation: this.rotation + }, e), r = vh(n.housing, this.angle, e), i = yh(n.screen, this.angle), a = `${t.common.sizeInPixels(this.width, this.height)} · ${this.rotation}°`, o = `translate(${`${e.width / 2} ${e.height / 2}`}) rotate(${this.angle}) scale(${r})`; + return F` + + + ${this.renderHousing(n)} + ${this.renderSkeleton(i)} + + + `; + } +}; +Y([z({ type: Number })], Ah.prototype, "width", void 0), Y([z({ type: Number })], Ah.prototype, "height", void 0), Y([z({ type: Number })], Ah.prototype, "rotation", void 0), Y([z()], Ah.prototype, "background", void 0), Y([z()], Ah.prototype, "accent", void 0), Y([z({ attribute: !1 })], Ah.prototype, "box", void 0), Y([z({ type: Boolean })], Ah.prototype, "turns", void 0), Y([B()], Ah.prototype, "angle", void 0), Ah = Y([R("ods-display-preview")], Ah); +var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh = { + width: 240, + height: 92 +}, Nh = () => [ + { + id: "rename", + label: t.gallery.menu.rename, + icon: "mdi:pencil-outline" + }, + { id: "duplicate", label: t.gallery.menu.duplicate, icon: "mdi:content-copy" @@ -13248,7 +14126,7 @@ var xm = () => [ icon: "mdi:delete-outline", danger: !0 } -], Sm = class extends L { +], Ph = class extends L { constructor(...e) { super(...e), this.language = "en", this.menuOpen = !1, this.renaming = !1, this.draftName = ""; } @@ -13256,7 +14134,7 @@ var xm = () => [ this.styles = [ G, K, - qd, + Nf, P` :host { display: contents; @@ -13287,7 +14165,7 @@ var xm = () => [ display: grid; place-items: center; overflow: hidden; - padding: 23px; + padding: 35px 23px 23px; border-radius: 12px 12px 0 0; background: color-mix( in srgb, @@ -13296,54 +14174,6 @@ var xm = () => [ ); pointer-events: none; } - .dashboard-miniature { - position: relative; - width: min(145px, 70%); - max-height: 96px; - overflow: hidden; - border: 2px solid - color-mix(in srgb, var(--dashboard-accent) 22%, var(--studio-border)); - border-radius: 9px; - box-shadow: 0 7px 18px rgba(0, 0, 0, 0.12); - } - .dashboard-miniature > span { - position: absolute; - display: block; - border-radius: 99px; - } - .miniature-title { - left: 12%; - top: 25%; - width: 25%; - height: 4%; - min-height: 3px; - background: color-mix(in srgb, var(--studio-muted) 50%, transparent); - } - .miniature-accent { - right: 12%; - top: 25%; - width: 5px; - height: 5px; - background: var(--dashboard-accent); - } - .miniature-line { - left: 12%; - bottom: 26%; - width: 48%; - height: 4%; - min-height: 3px; - background: color-mix(in srgb, var(--studio-muted) 28%, transparent); - } - .miniature-line.long { - bottom: 39%; - width: 72%; - height: 13%; - background: color-mix( - in srgb, - var(--dashboard-accent) 18%, - var(--studio-surface) - ); - } .dashboard-resolution { position: absolute; right: 11px; @@ -13392,22 +14222,26 @@ var xm = () => [ font-weight: 700; pointer-events: auto; } - .dashboard-card-meta { - display: flex; - align-items: center; - gap: 7px; + .dashboard-card-copy small { color: var(--studio-muted); font-size: 10px; } - .dashboard-card-meta > span + span::before { - content: "·"; - margin-right: 7px; - } - .dashboard-card-copy small { - color: var(--studio-muted); + .mode-badge { + position: absolute; + top: var(--ha-space-2, 8px); + inset-inline-start: var(--ha-space-2, 8px); + padding: 1px 7px; + border: 1px solid var(--studio-border); + border-radius: 999px; + background: var(--studio-surface); + color: var(--studio-accent); font-size: 10px; + font-weight: 600; } .palette-dots { + position: absolute; + inset-inline-start: 11px; + bottom: var(--ha-space-2, 8px); display: inline-flex; align-items: center; gap: 2px; @@ -13486,14 +14320,14 @@ var xm = () => [ e.stopPropagation(), W(this, "dashboard-menu-toggle", { dashboardId: this.dashboard.id }); } onMenuSelect(e) { - let t = xm().find((t) => t.id === e.detail.id); + let t = Nh().find((t) => t.id === e.detail.id); t && (e.stopPropagation(), W(this, "dashboard-menu-action", { dashboard: this.dashboard, action: t.id })); } onRenameInput(e) { - W(this, "dashboard-rename-input", { name: dd(e) }); + W(this, "dashboard-rename-input", { name: _d(e) }); } onRenameKeyDown(e) { e.stopPropagation(), e.key === "Enter" ? (e.preventDefault(), W(this, "dashboard-rename-commit")) : e.key === "Escape" && (e.preventDefault(), W(this, "dashboard-rename-cancel")); @@ -13505,19 +14339,17 @@ var xm = () => [ let { display: e } = this.dashboard; return F`
-
- - - - -
- - ${t.common.size(e.width, e.height)} - + ${this.modeLabel()} + + ${this.renderPaletteDots()} + ${this.resolutionLabel()}
`; } @@ -13543,20 +14375,25 @@ var xm = () => [ `; } - renderMeta() { - let { display: e } = this.dashboard; + resolutionLabel() { + let { width: e, height: n, rotation: r } = this.dashboard.display, i = t.common.size(e, n); + return r === 0 ? i : `${i} · ${r}°`; + } + modeLabel() { + return this.dashboard.mode === "basic" ? t.basic.badgeBasic : t.basic.badgeAdvanced; + } + renderPaletteDots() { + let { palette: e } = this.dashboard.display; return F` - - ${t.common.size(e.width, e.height)} - - ${xo[e.palette].map((e) => F` - - `)} - - ${bo[e.palette]} + + ${xo[e].map((e) => F` + + `)} `; } @@ -13566,7 +14403,7 @@ var xm = () => [ class="dashboard-menu" id=${this.menuId} label=${t.gallery.menuFor(this.dashboard.name)} - .entries=${xm()} + .entries=${Nh()} @menu-select=${this.onMenuSelect} > ` : I; @@ -13574,15 +14411,15 @@ var xm = () => [ render() { let e = this.dashboard; return F` -
${this.renderMiniature()}
- ${this.renderTitle()} ${this.renderMeta()} + ${this.renderTitle()} - ${t.gallery.updated(ud(e, this.language))} + ${t.gallery.updated(gd(e, this.language))}
@@ -13908,7 +14745,7 @@ var Cm = class extends L { W(this, "dashboard-settings-save")} > ${this.saving ? t.gallery.saving : t.gallery.settingsSave} @@ -13918,7 +14755,7 @@ var Cm = class extends L { `; } render() { - let e = Ju(this.dashboards, this.searchText, this.sort, this.language); + let e = $u(this.dashboards, this.searchText, this.sort, this.language); return F`
@@ -14006,17 +14843,142 @@ var Cm = class extends L { `; } }; -Y([z({ attribute: !1 })], Cm.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], Cm.prototype, "hass", void 0), Y([z()], Cm.prototype, "error", void 0), Y([z({ type: Boolean })], Cm.prototype, "saving", void 0), Y([z()], Cm.prototype, "dialog", void 0), Y([z({ attribute: !1 })], Cm.prototype, "draft", void 0), Y([B()], Cm.prototype, "searchText", void 0), Y([B()], Cm.prototype, "sort", void 0), Y([B()], Cm.prototype, "menuDashboardId", void 0), Cm = Y([R("ods-gallery")], Cm); +Y([z({ attribute: !1 })], Fh.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], Fh.prototype, "hass", void 0), Y([z()], Fh.prototype, "error", void 0), Y([z({ type: Boolean })], Fh.prototype, "saving", void 0), Y([z()], Fh.prototype, "dialog", void 0), Y([z({ attribute: !1 })], Fh.prototype, "draft", void 0), Y([B()], Fh.prototype, "searchText", void 0), Y([B()], Fh.prototype, "sort", void 0), Y([B()], Fh.prototype, "menuDashboardId", void 0), Fh = Y([R("ods-gallery")], Fh); +//#endregion +//#region src/ods-layout-panel.ts +var Ih = (e) => e === "columns" || e === "rows" || e === "gap", Lh = "padding", Rh = 1024, zh = class extends L { + constructor(...e) { + super(...e), this.padding = 0; + } + static { + this.styles = [ + G, + K, + P` + :host { + display: contents; + } + .toolbox { + min-width: 0; + min-height: 0; + display: flex; + flex-direction: column; + overflow: auto; + border-inline-end: 1px solid var(--studio-border); + background: var(--studio-surface); + } + .panel-title { + min-height: 58px; + display: flex; + align-items: center; + padding: 11px 12px; + } + .panel-title h2 { + margin: 1px 0 0; + font-size: 15px; + } + .section { + display: grid; + gap: var(--ha-space-2, 8px); + padding: var(--ha-space-1, 4px) var(--ha-space-3, 12px) + var(--ha-space-4, 16px); + } + .section h3 { + margin: 0; + color: var(--studio-muted); + font-size: 11px; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + } + .fields { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: var(--ha-space-2, 8px); + } + p { + margin: 0; + color: var(--studio-muted); + font-size: 12px; + line-height: 1.45; + } + .count { + color: var(--studio-text); + font-weight: 600; + } + ` + ]; + } + onFieldChange(e) { + e.stopPropagation(); + let { key: t, value: n } = e.detail, r = Number(n); + Number.isFinite(r) && (Ih(t) && W(this, "grid-change", { [t]: r }), t === Lh && W(this, "display-number-change", { + key: Lh, + value: r + })); + } + renderField(e, t, n, r, i) { + return F` + + `; + } + renderGrid() { + let { minLines: e, maxLines: n, maxGap: r } = this.limits; + return F` +
+

${t.basic.gridHeading}

+
+ ${this.renderField("columns", this.layout.columns, t.basic.columns, e, n)} + ${this.renderField("rows", this.layout.rows, t.basic.rows, e, n)} + ${this.renderField("gap", this.layout.gap, t.basic.gap, 0, r)} + ${this.renderField(Lh, this.padding, t.fields.padding, 0, Rh)} +
+
+ `; + } + renderRegions() { + return F` +
+

${t.basic.regionsHeading}

+ + ${t.basic.regionCount(this.layout.regions.length)} + +

${t.basic.regionsHint}

+
+ `; + } + render() { + return !this.layout || !this.limits ? I : F` + + `; + } +}; +Y([z({ attribute: !1 })], zh.prototype, "layout", void 0), Y([z({ attribute: !1 })], zh.prototype, "limits", void 0), Y([z({ type: Number })], zh.prototype, "padding", void 0), zh = Y([R("ods-layout-panel")], zh); //#endregion //#region src/font-file.ts -var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some((t) => e.toLowerCase().endsWith(t)), Om = async (e) => { +var Bh = [".ttf", ".otf"], Vh = Bh.join(","), Hh = 2097152, Uh = (e) => Bh.some((t) => e.toLowerCase().endsWith(t)), Wh = async (e) => { let t = new Uint8Array(await e.arrayBuffer()), n = 32768, r = ""; for (let e = 0; e < t.length; e += n) r += String.fromCharCode(...t.subarray(e, e + n)); return btoa(r); -}, km = (e) => e < 1048576 ? `${Math.max(1, Math.round(e / 1024))} KB` : `${(e / 1048576).toFixed(1)} MB`, Am = 6, jm = (e, n) => { - let r = Sd(e); +}, Gh = (e) => e < 1048576 ? `${Math.max(1, Math.round(e / 1024))} KB` : `${(e / 1048576).toFixed(1)} MB`, Kh = 6, qh = (e, n) => { + let r = Od(e); return (r ? t.settings.fonts.errors[r] : void 0) ?? U(e, n); -}, Mm = class extends L { +}, Jh = class extends L { constructor(...e) { super(...e), this.fonts = [], this.error = "", this.busy = !1, this.dragging = !1; } @@ -14122,7 +15084,7 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( } async refresh() { if (this.hass) try { - this.show(await Fd(this.hass)); + this.show(await Hd(this.hass)); } catch (e) { this.error = U(e, t.settings.fonts.loadFailed); } @@ -14131,11 +15093,11 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( e.has("hass") && this.fonts.length === 0 && this.refresh(); } show(e) { - this.fonts = e, Bd(e); + this.fonts = e, qd(e); } async installFile(e) { if (this.hass) { - if (!Dm(e.name)) { + if (!Uh(e.name)) { this.error = t.settings.fonts.notFontFile(e.name); return; } @@ -14144,10 +15106,10 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( return; } try { - let t = await Om(e); - this.show(await Id(this.hass, e.name, t)); + let t = await Wh(e); + this.show(await Ud(this.hass, e.name, t)); } catch (e) { - this.error = jm(e, t.settings.fonts.installFailed); + this.error = qh(e, t.settings.fonts.installFailed); } } } @@ -14187,15 +15149,15 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( if (this.removing = void 0, !(!e || !this.hass)) { this.error = ""; try { - this.show(await Ld(this.hass, e.name, !0)); + this.show(await Wd(this.hass, e.name, !0)); } catch (e) { - this.error = jm(e, t.settings.fonts.removeFailed); + this.error = qh(e, t.settings.fonts.removeFailed); } } } removalBody(e) { if (e.usedBy.length === 0) return t.settings.fonts.removeUnusedBody; - let n = e.usedBy.slice(0, Am).map((e) => e.name).join(", "), r = e.usedBy.length - Am; + let n = e.usedBy.slice(0, Kh).map((e) => e.name).join(", "), r = e.usedBy.length - Kh; return t.settings.fonts.removeUsedBody(e.usedBy.length, r > 0 ? `${n}, +${r}` : n); } renderDrop() { @@ -14209,7 +15171,7 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( ${t.settings.fonts.dropHint} - ${t.settings.fonts.limit(km(Em))} + ${t.settings.fonts.limit(Gh(Hh))} wm.some( wm.some(
${e.family} ${e.style} - ${e.name} · ${km(e.size)} + ${e.name} · ${Gh(e.size)}
${this.renderUsage(e)}
${this.renderAction(e)} @@ -14296,10 +15258,10 @@ var wm = [".ttf", ".otf"], Tm = wm.join(","), Em = 2097152, Dm = (e) => wm.some( `; } }; -Y([z({ attribute: !1 })], Mm.prototype, "hass", void 0), Y([B()], Mm.prototype, "fonts", void 0), Y([B()], Mm.prototype, "error", void 0), Y([B()], Mm.prototype, "busy", void 0), Y([B()], Mm.prototype, "dragging", void 0), Y([B()], Mm.prototype, "removing", void 0), Mm = Y([R("ods-settings-fonts")], Mm); +Y([z({ attribute: !1 })], Jh.prototype, "hass", void 0), Y([B()], Jh.prototype, "fonts", void 0), Y([B()], Jh.prototype, "error", void 0), Y([B()], Jh.prototype, "busy", void 0), Y([B()], Jh.prototype, "dragging", void 0), Y([B()], Jh.prototype, "removing", void 0), Jh = Y([R("ods-settings-fonts")], Jh); //#endregion //#region src/settings-stats.ts -var Nm = (e) => { +var Yh = (e) => { let t = /* @__PURE__ */ new Map(); for (let n of e) for (let e of E(n.items)) { if (e.kind !== "widget") continue; @@ -14307,8 +15269,8 @@ var Nm = (e) => { t.set(n, (t.get(n) ?? 0) + 1); } return t; -}, Pm = (e, t) => { - let n = new Map(t.map((e) => [e.id, e.name])), r = [...Nm(e)].map(([e, t]) => ({ +}, Xh = (e, t) => { + let n = new Map(t.map((e) => [e.id, e.name])), r = [...Yh(e)].map(([e, t]) => ({ id: e, name: n.get(e) ?? e, count: t @@ -14318,7 +15280,7 @@ var Nm = (e) => { elements: e.reduce((e, t) => e + E(t.items).length, 0), widgetUse: r }; -}, Fm = class extends L { +}, Zh = class extends L { constructor(...e) { super(...e), this.dashboards = [], this.widgets = [], this.fontCount = 0; } @@ -14416,7 +15378,7 @@ var Nm = (e) => { `; } render() { - let e = Pm(this.dashboards, this.widgets), n = t.settings.overview; + let e = Xh(this.dashboards, this.widgets), n = t.settings.overview; return F`
    ${this.renderTile(n.dashboards, e.dashboards)} @@ -14429,10 +15391,10 @@ var Nm = (e) => { `; } }; -Y([z({ attribute: !1 })], Fm.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], Fm.prototype, "widgets", void 0), Y([z({ type: Number })], Fm.prototype, "fontCount", void 0), Fm = Y([R("ods-settings-overview")], Fm); +Y([z({ attribute: !1 })], Zh.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], Zh.prototype, "widgets", void 0), Y([z({ type: Number })], Zh.prototype, "fontCount", void 0), Zh = Y([R("ods-settings-overview")], Zh); //#endregion //#region src/ods-settings-widgets.ts -var Im = class extends L { +var Qh = class extends L { constructor(...e) { super(...e), this.widgets = [], this.errors = []; } @@ -14617,10 +15579,10 @@ var Im = class extends L { `; } }; -Y([z({ attribute: !1 })], Im.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Im.prototype, "errors", void 0), Im = Y([R("ods-settings-widgets")], Im); +Y([z({ attribute: !1 })], Qh.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Qh.prototype, "errors", void 0), Qh = Y([R("ods-settings-widgets")], Qh); //#endregion //#region src/ods-settings.ts -var Lm = () => ({ +var $h = () => ({ overview: { text: t.settings.about.overview, abilities: [] @@ -14651,7 +15613,7 @@ var Lm = () => ({ } ] } -}), Rm = () => [ +}), eg = () => [ { id: "overview", label: t.settings.tabs.overview, @@ -14667,7 +15629,7 @@ var Lm = () => ({ label: t.settings.tabs.widgets, icon: "mdi:widgets-outline" } -], zm = class extends L { +], tg = class extends L { constructor(...e) { super(...e), this.dashboards = [], this.widgets = [], this.widgetErrors = [], this.tab = "overview", this.fontCount = 0; } @@ -14786,7 +15748,7 @@ var Lm = () => ({ } async countFonts() { if (this.hass) try { - this.fontCount = (await zd(this.hass)).length; + this.fontCount = (await Kd(this.hass)).length; } catch { this.fontCount = 0; } @@ -14825,7 +15787,7 @@ var Lm = () => ({ `; } renderAbout() { - let e = Lm()[this.tab]; + let e = $h()[this.tab]; return F`

    ${e.text}

    @@ -14870,7 +15832,7 @@ var Lm = () => ({
${this.renderAbout()} ${this.renderBody()} @@ -14879,10 +15841,10 @@ var Lm = () => ({ `; } }; -Y([z({ attribute: !1 })], zm.prototype, "hass", void 0), Y([z({ attribute: !1 })], zm.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], zm.prototype, "widgets", void 0), Y([z({ attribute: !1 })], zm.prototype, "widgetErrors", void 0), Y([B()], zm.prototype, "tab", void 0), Y([B()], zm.prototype, "fontCount", void 0), zm = Y([R("ods-settings")], zm); +Y([z({ attribute: !1 })], tg.prototype, "hass", void 0), Y([z({ attribute: !1 })], tg.prototype, "dashboards", void 0), Y([z({ attribute: !1 })], tg.prototype, "widgets", void 0), Y([z({ attribute: !1 })], tg.prototype, "widgetErrors", void 0), Y([B()], tg.prototype, "tab", void 0), Y([B()], tg.prototype, "fontCount", void 0), tg = Y([R("ods-settings")], tg); //#endregion //#region src/ods-header.ts -var Bm = class extends L { +var ng = class extends L { constructor(...e) { super(...e), this.view = "design", this.dirty = !1, this.saving = !1, this.sending = !1; } @@ -15036,7 +15998,7 @@ var Bm = class extends L { ]; } onNameInput(e) { - W(this, "dashboard-name-change", { name: dd(e) }); + W(this, "dashboard-name-change", { name: _d(e) }); } get statusToggleLabel() { return this.dashboard.status === "ready" ? t.header.setDraft : t.header.setReady; @@ -15146,13 +16108,13 @@ var Bm = class extends L { `; } }; -Y([z({ attribute: !1 })], Bm.prototype, "dashboard", void 0), Y([z()], Bm.prototype, "view", void 0), Y([z({ type: Boolean })], Bm.prototype, "dirty", void 0), Y([z({ type: Boolean })], Bm.prototype, "saving", void 0), Y([z({ type: Boolean })], Bm.prototype, "sending", void 0), Bm = Y([R("ods-header")], Bm); +Y([z({ attribute: !1 })], ng.prototype, "dashboard", void 0), Y([z()], ng.prototype, "view", void 0), Y([z({ type: Boolean })], ng.prototype, "dirty", void 0), Y([z({ type: Boolean })], ng.prototype, "saving", void 0), Y([z({ type: Boolean })], ng.prototype, "sending", void 0), ng = Y([R("ods-header")], ng); //#endregion //#region src/item-labels.ts -var Vm = (e, t, n) => { +var rg = (e, t, n) => { if (e.kind === "widget") return t.find((t) => t.id === e.widget.type); if (e.kind !== "container") return n.find((t) => t.type === e.primitive.type); -}, Hm = (e, t, n) => e.kind === "container" ? e.grouped ? "mdi:group" : "mdi:select-all" : Vm(e, t, n)?.icon ?? "mdi:puzzle", Um = (e, t) => JSON.stringify(e ?? null) === JSON.stringify(t ?? null), Wm = (e, t, n = {}) => e.filter((e) => e.key in n || !Um(t[e.key], e.default)), Gm = (e) => Object.fromEntries(e.map((e) => [e.key, e.default ?? null])), Km = "{{ }}", qm = class extends L { +}, ig = (e, t, n) => e.kind === "container" ? e.grouped ? "mdi:group" : "mdi:select-all" : rg(e, t, n)?.icon ?? "mdi:puzzle", ag = (e, t) => JSON.stringify(e ?? null) === JSON.stringify(t ?? null), og = (e, t, n = {}) => e.filter((e) => e.key in n || !ag(t[e.key], e.default)), sg = (e) => Object.fromEntries(e.map((e) => [e.key, e.default ?? null])), cg = "{{ }}", lg = class extends L { constructor(...e) { super(...e), this.label = "", this.fieldKey = "", this.disabled = !1, this.focusEditor = !1; } @@ -15237,7 +16199,7 @@ var Vm = (e, t, n) => { } onLiteralInput(e) { let t = e.composedPath()[0]; - t instanceof HTMLInputElement && t.type === "text" && t.value.trimStart().startsWith("{") && (this.focusEditor = !0, this.change(Km)); + t instanceof HTMLInputElement && t.type === "text" && t.value.trimStart().startsWith("{") && (this.focusEditor = !0, this.change(cg)); } onEditorChange(e) { if (!(e.target instanceof HTMLTextAreaElement)) return; @@ -15285,30 +16247,30 @@ var Vm = (e, t, n) => { `; } }; -Y([z()], qm.prototype, "label", void 0), Y([z()], qm.prototype, "fieldKey", void 0), Y([z()], qm.prototype, "expression", void 0), Y([z({ type: Boolean })], qm.prototype, "disabled", void 0), Y([bl("textarea")], qm.prototype, "editor", void 0), qm = Y([R("ods-expression-field")], qm); +Y([z()], lg.prototype, "label", void 0), Y([z()], lg.prototype, "fieldKey", void 0), Y([z()], lg.prototype, "expression", void 0), Y([z({ type: Boolean })], lg.prototype, "disabled", void 0), Y([Sl("textarea")], lg.prototype, "editor", void 0), lg = Y([R("ods-expression-field")], lg); //#endregion //#region src/structure-model.ts -var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, t) => { +var ug = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), dg = (e, t) => { let n = /* @__PURE__ */ new Set(); - for (let r of E(e)) if (Jm(r, t)) { + for (let r of E(e)) if (ug(r, t)) { n.add(r.id); for (let t of Ot(e, r.id)) n.add(t.id); } return n; -}, Xm = (e, t, n, r) => [...e].reverse().flatMap((e) => { +}, fg = (e, t, n, r) => [...e].reverse().flatMap((e) => { if (r && !r.has(e.id)) return []; let i = { item: e, depth: t }; - return C(e) && (r || !n.has(e.id)) ? [i, ...Xm(e.children, t + 1, n, r)] : [i]; -}), Zm = (e, t, n = "") => { + return C(e) && (r || !n.has(e.id)) ? [i, ...fg(e.children, t + 1, n, r)] : [i]; +}), pg = (e, t, n = "") => { let r = n.trim().toLocaleLowerCase(); - return Xm(e, 0, t, r ? Ym(e, r) : void 0); -}, Qm = (e, t) => t && e >= .25 && e <= .75 ? "inside" : e < .5 ? "before" : "after", $m = (e, t, n) => { + return fg(e, 0, t, r ? dg(e, r) : void 0); +}, mg = (e, t) => t && e >= .25 && e <= .75 ? "inside" : e < .5 ? "before" : "after", hg = (e, t, n) => { let r = e.findIndex((e) => e.item.id === t); return r < 0 ? e[0] : e[Math.min(e.length - 1, Math.max(0, r + n))]; -}, eh = 4, th = 16, nh = (e) => { +}, gg = 4, _g = 16, vg = (e) => { let t = [ "toggle-hidden", "toggle-locked", @@ -15434,14 +16396,14 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, align-items: center; min-height: 34px; gap: 4px; - padding: 2px 3px 2px calc(var(--depth, 0) * ${th}px + 3px); + padding: 2px 3px 2px calc(var(--depth, 0) * ${_g}px + 3px); border: 1px solid transparent; border-radius: 5px; } .layer-row[data-depth]:not([data-depth="0"])::after { content: ""; position: absolute; - left: calc(var(--depth) * ${th}px - 5px); + left: calc(var(--depth) * ${_g}px - 5px); top: 0; bottom: 0; width: 1px; @@ -15621,7 +16583,7 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, n.has(t.id) ? n.delete(t.id) : n.add(t.id), this.collapsed = n; } onSearchInput(e) { - this.searchText = dd(e); + this.searchText = _d(e); } startRename(e) { this.renamingId = e.id, this.updateComplete.then(() => this.shadowRoot?.querySelector(".rename")?.select()); @@ -15629,7 +16591,7 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, commitRename(e, t) { this.renamingId === t.id && (this.renamingId = "", W(this, "item-rename", { itemId: t.id, - name: dd(e) + name: _d(e) })); } onRenameKeyDown(e, t) { @@ -15640,9 +16602,9 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, e.button !== 0 || !(n instanceof HTMLElement) || n.closest("button, input") || this.startDrag(e, t.id); } startDrag(e, t) { - this.stopGesture = Of({ + this.stopGesture = pp({ origin: e, - threshold: eh, + threshold: gg, onActivate: () => { this.draggingId = t, this.suppressClick = !0; }, @@ -15674,7 +16636,7 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, let a = n.getBoundingClientRect(); return { itemId: i.id, - zone: Qm((e.clientY - a.top) / a.height, C(i)) + zone: mg((e.clientY - a.top) / a.height, C(i)) }; } clearDrag() { @@ -15692,7 +16654,7 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, selectRow(e, t) { this.suppressClick || W(this, "item-select", { itemId: t.id, - additive: md(e) + additive: bd(e) }); } selectRoot() { @@ -15717,10 +16679,10 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, } onTreeKeyDown(e) { if (e.target instanceof HTMLInputElement) return; - let t = Zm(this.items, this.collapsed, this.searchText), n = T(this.items, this.selectedItemId); + let t = pg(this.items, this.collapsed, this.searchText), n = T(this.items, this.selectedItemId); if (e.key === "ArrowDown" || e.key === "ArrowUp") { e.preventDefault(); - let n = $m(t, this.selectedItemId, e.key === "ArrowDown" ? 1 : -1); + let n = hg(t, this.selectedItemId, e.key === "ArrowDown" ? 1 : -1); n && this.focusAndSelect(n); } e.key === "ArrowLeft" && n && (e.preventDefault(), this.foldOrGoUp(n, t)), e.key === "ArrowRight" && n && (e.preventDefault(), this.unfoldOrGoDown(n, t)); @@ -15747,9 +16709,9 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, r && this.focusAndSelect(r); } renderCommandButton(e, t) { - let n = uu(t), r = wu(e); + let n = fu(t), r = Ou(e); if (!r.isEnabled(n)) return I; - let i = Au(r, n, pd()); + let i = Pu(r, n, yd()); return F`
`; @@ -15855,7 +16817,7 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, let e = this.dropTarget?.itemId === "" && this.dropTarget.zone === "inside"; return F`
`${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, ` : I; } renderRows() { - let e = Zm(this.items, this.collapsed, this.searchText); + let e = pg(this.items, this.collapsed, this.searchText); return this.items.length === 0 ? F`

${t.structure.empty}

` : F` @@ -15929,15 +16891,15 @@ var Jm = (e, t) => `${e.name} ${p(e)}`.toLocaleLowerCase().includes(t), Ym = (e, `; } }; -Y([z({ attribute: !1 })], Z.prototype, "items", void 0), Y([z({ attribute: !1 })], Z.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Z.prototype, "primitives", void 0), Y([z()], Z.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], Z.prototype, "selectedItemIds", void 0), Y([z()], Z.prototype, "enteredGroupId", void 0), Y([z()], Z.prototype, "renameRequestId", void 0), Y([B()], Z.prototype, "collapsed", void 0), Y([B()], Z.prototype, "searchText", void 0), Y([B()], Z.prototype, "renamingId", void 0), Y([B()], Z.prototype, "draggingId", void 0), Y([B()], Z.prototype, "dropTarget", void 0), Y([bl(".layer-list")], Z.prototype, "layerList", void 0), Z = Y([R("ods-structure")], Z); +Y([z({ attribute: !1 })], Z.prototype, "items", void 0), Y([z({ attribute: !1 })], Z.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Z.prototype, "primitives", void 0), Y([z()], Z.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], Z.prototype, "selectedItemIds", void 0), Y([z()], Z.prototype, "enteredGroupId", void 0), Y([z()], Z.prototype, "renameRequestId", void 0), Y([B()], Z.prototype, "collapsed", void 0), Y([B()], Z.prototype, "searchText", void 0), Y([B()], Z.prototype, "renamingId", void 0), Y([B()], Z.prototype, "draggingId", void 0), Y([B()], Z.prototype, "dropTarget", void 0), Y([Sl(".layer-list")], Z.prototype, "layerList", void 0), Z = Y([R("ods-structure")], Z); //#endregion //#region src/ods-inspector.ts -var rh = 340, ih = 560, ah = () => ({ +var yg = 340, bg = 560, xg = () => ({ key: "background", label: t.fields.background, shape: "color", section: "appearance" -}), oh = ["padding", "snapSize"], sh = (e) => oh.some((t) => t === e), ch = (e) => e.label, Q = class extends L { +}), Sg = ["padding", "snapSize"], Cg = (e) => Sg.some((t) => t === e), wg = (e) => e.label, Q = class extends L { constructor(...e) { super(...e), this.widgets = [], this.primitives = [], this.selectedItemId = "", this.selectedItemIds = [], this.enteredGroupId = "", this.renameRequestId = "", this.collapsed = !1, this.width = 350, this.showCorners = !1; } @@ -16239,11 +17201,11 @@ var rh = 340, ih = 560, ah = () => ({ startResize(e) { e.preventDefault(); let t = e.clientX, n = this.width; - this.stopGesture = Of({ + this.stopGesture = pp({ origin: e, onMove: (e) => { let r = n + t - e.clientX; - W(this, "inspector-resize", { width: _(r, rh, ih) }); + W(this, "inspector-resize", { width: _(r, yg, bg) }); } }); } @@ -16265,7 +17227,7 @@ var rh = 340, ih = 560, ah = () => ({ onDisplayFieldChange(e) { e.stopPropagation(); let { key: t } = e.detail, n = this.numberFrom(e); - n !== void 0 && sh(t) && W(this, "display-number-change", { + n !== void 0 && Cg(t) && W(this, "display-number-change", { key: t, value: n }); @@ -16343,12 +17305,21 @@ var rh = 340, ih = 560, ah = () => ({ renderDashboardBackground() { return F` + `; + } + renderWorkingArea() { + return F` +
+ ${this.renderDisplayField(t.fields.padding, "padding", 0, 1024)} + ${this.renderDisplayField(t.fields.snapSize, "snapSize", 1, 256)} +
+

${t.inspector.workingAreaHelp}

`; } renderDashboardInspector() { @@ -16358,11 +17329,7 @@ var rh = 340, ih = 560, ah = () => ({ ${t.inspector.appearance}
${this.renderDashboardBackground()} -
- ${this.renderDisplayField(t.fields.padding, "padding", 0, 1024)} - ${this.renderDisplayField(t.fields.snapSize, "snapSize", 1, 256)} -
-

${t.inspector.workingAreaHelp}

+ ${this.isBasic ? I : this.renderWorkingArea()}
${this.renderMetrics()} @@ -16493,7 +17460,7 @@ var rh = 340, ih = 560, ah = () => ({ .hass=${this.hass} .data=${{ [e.key]: t }} .schema=${[this.formSchema(e)]} - .computeLabel=${ch} + .computeLabel=${wg} @value-changed=${(t) => n(e.key, t.detail.value[e.key])} >
@@ -16528,7 +17495,7 @@ var rh = 340, ih = 560, ah = () => ({ .hass=${this.hass} .data=${{ [t.key]: nc(t, n) }} .schema=${[this.formSchema(t, t.required)]} - .computeLabel=${ch} + .computeLabel=${wg} @value-changed=${(n) => this.onPicksChange(n, t, e)} > ${t.perSource.length > 0 ? n.map((n) => this.renderPickFields(e, t, n)) : I} @@ -16569,10 +17536,10 @@ var rh = 340, ih = 560, ah = () => ({ `; } renderOptionSection(e, t, n) { - let r = Wm(t.fields.filter((e) => e.default !== void 0), e.widget.options); + let r = og(t.fields.filter((e) => e.default !== void 0), e.widget.options); return F`
- ${this.renderResettableSummary(t.section, r.length > 0, () => W(this, "widget-options-change", { value: Gm(r) }))} + ${this.renderResettableSummary(t.section, r.length > 0, () => W(this, "widget-options-change", { value: sg(r) }))}
${t.fields.map((t) => this.renderWidgetField(t, e.widget.options[t.key], (e, t) => this.setWidgetOption(e, t)))} @@ -16637,17 +17604,17 @@ var rh = 340, ih = 560, ah = () => ({ renderAdvancedFields(e) { let n = es(e, this.primitives, "appearance").filter((e) => e.advanced); return n.length === 0 ? I : F` -
0}> +
0}> ${t.inspector.advanced} ${this.renderValueFields(e, "appearance", !0)}
`; } renderAppearance(e) { - let n = Wm(es(e, this.primitives, "appearance").filter((e) => !e.required || e.default !== void 0), { ...e.primitive }, e.expressions); + let n = og(es(e, this.primitives, "appearance").filter((e) => !e.required || e.default !== void 0), { ...e.primitive }, e.expressions); return F`
- ${this.renderResettableSummary(t.inspector.appearance, n.length > 0, () => W(this, "primitive-fields-reset", { values: Gm(n) }))} + ${this.renderResettableSummary(t.inspector.appearance, n.length > 0, () => W(this, "primitive-fields-reset", { values: sg(n) }))}
${this.renderValueFields(e, "appearance")} ${this.renderAdvancedFields(e)} @@ -16695,7 +17662,8 @@ var rh = 340, ih = 560, ah = () => ({ } renderItemSections(e) { return e.kind === "widget" ? F` - ${this.renderLayoutSection(e)} ${this.renderWidgetSettings(e)} + ${this.isBasic ? I : this.renderLayoutSection(e)} + ${this.renderWidgetSettings(e)} ` : e.kind === "container" ? F` ${this.renderLayoutSection(e)} ${this.renderContainerBackground(e)} @@ -16718,13 +17686,13 @@ var rh = 340, ih = 560, ah = () => ({ } renderItemInspector(e) { return F` - ${this.renderHeader(e.name, t.inspector.subtitle(this.kindOf(e), e.locked), Hm(e, this.widgets, this.primitives))} + ${this.renderHeader(e.name, t.inspector.subtitle(this.kindOf(e), e.locked), ig(e, this.widgets, this.primitives))} ${this.renderGroupedChip(e)} ${this.renderLockedNotice(e)} ${this.renderItemSections(e)} ${this.renderMetrics()} `; } renderMultiInspector() { - let e = this.selectedItemIds.length, n = Tf(this.dashboard, this.selectedItemIds, (e) => this.preview?.itemBounds[e.id]); + let e = this.selectedItemIds.length, n = up(this.dashboard, this.selectedItemIds, (e) => this.preview?.itemBounds[e.id]); return F` ${this.renderHeader(t.inspector.selectedElements(e), t.inspector.selectionHint, "mdi:select-multiple")} ${n ? F` @@ -16770,6 +17738,22 @@ var rh = 340, ih = 560, ah = () => ({ renderProperties(e) { return this.selectedItemIds.length > 1 ? this.renderMultiInspector() : e ? this.renderItemInspector(e) : this.renderDashboardInspector(); } + get isBasic() { + return this.dashboard.mode === "basic"; + } + renderStructure() { + return this.isBasic ? I : F` + + `; + } render() { if (this.collapsed) return this.renderRail(); let e = T(this.dashboard.items, this.selectedItemId); @@ -16782,50 +17766,42 @@ var rh = 340, ih = 560, ah = () => ({ aria-label=${t.inspector.resize} @pointerdown=${this.startResize} >
- + ${this.renderStructure()}
${this.renderProperties(e)}
`; } }; -Y([z({ attribute: !1 })], Q.prototype, "hass", void 0), Y([z({ attribute: !1 })], Q.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], Q.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Q.prototype, "primitives", void 0), Y([z({ attribute: !1 })], Q.prototype, "preview", void 0), Y([z()], Q.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], Q.prototype, "selectedItemIds", void 0), Y([z()], Q.prototype, "enteredGroupId", void 0), Y([z()], Q.prototype, "renameRequestId", void 0), Y([z({ type: Boolean })], Q.prototype, "collapsed", void 0), Y([z({ type: Number })], Q.prototype, "width", void 0), Y([B()], Q.prototype, "showCorners", void 0), Y([bl(".properties")], Q.prototype, "propertiesPanel", void 0), Q = Y([R("ods-inspector")], Q); +Y([z({ attribute: !1 })], Q.prototype, "hass", void 0), Y([z({ attribute: !1 })], Q.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], Q.prototype, "widgets", void 0), Y([z({ attribute: !1 })], Q.prototype, "primitives", void 0), Y([z({ attribute: !1 })], Q.prototype, "preview", void 0), Y([z()], Q.prototype, "selectedItemId", void 0), Y([z({ attribute: !1 })], Q.prototype, "selectedItemIds", void 0), Y([z()], Q.prototype, "enteredGroupId", void 0), Y([z()], Q.prototype, "renameRequestId", void 0), Y([z({ type: Boolean })], Q.prototype, "collapsed", void 0), Y([z({ type: Number })], Q.prototype, "width", void 0), Y([B()], Q.prototype, "showCorners", void 0), Y([Sl(".properties")], Q.prototype, "propertiesPanel", void 0), Q = Y([R("ods-inspector")], Q); //#endregion //#region src/catalog.ts -var lh = (e, t) => { +var Tg = (e, t) => { let n = t.trim().toLocaleLowerCase(); return n ? e.filter((e) => `${e.name} ${e.description}`.toLocaleLowerCase().includes(n)) : e; -}, uh = [ +}, Eg = [ "text", "shapes", "media", "data", "debug" -], dh = (e) => { - let t = [...uh], n = [...new Set(e.map((e) => e.category).filter((e) => !t.includes(e)))]; +], Dg = (e) => { + let t = [...Eg], n = [...new Set(e.map((e) => e.category).filter((e) => !t.includes(e)))]; return [...t, ...n].map((t) => ({ id: t, entries: e.filter((e) => e.category === t) })).filter((e) => e.entries.length > 0); -}, fh = (e) => { +}, Og = (e) => { let t = /* @__PURE__ */ new Map(); for (let n of e) t.set(n.category, [...t.get(n.category) ?? [], n]); return [...t.entries()]; -}, ph = 4, mh = () => ({ +}, kg = 4, Ag = () => ({ id: "container", name: t.library.container, description: t.library.containerHint, icon: "mdi:select-all" -}), hh = class extends L { +}), jg = class extends L { constructor(...e) { - super(...e), this.widgets = [], this.widgetErrors = [], this.primitives = [], this.collapsed = !1, this.searchText = "", this.foldedSections = /* @__PURE__ */ new Set(), this.suppressClick = !1; + super(...e), this.widgets = [], this.widgetErrors = [], this.primitives = [], this.collapsed = !1, this.widgetsOnly = !1, this.searchText = "", this.foldedSections = /* @__PURE__ */ new Set(), this.suppressClick = !1; } static { this.styles = [ @@ -17072,9 +18048,9 @@ var lh = (e, t) => { if (e.button !== 0) return; e.preventDefault(); let r = e.currentTarget.getBoundingClientRect(), i = e.clientX - r.left, a = e.clientY - r.top; - this.stopGesture = Of({ + this.stopGesture = pp({ origin: e, - threshold: ph, + threshold: kg, onActivate: () => W(this, "catalog-drag", { active: !0 }), onMove: (e) => { e.preventDefault(); @@ -17135,7 +18111,7 @@ var lh = (e, t) => { `; } onSearchInput(e) { - this.searchText = dd(e); + this.searchText = _d(e); } addFromClick(e) { this.suppressClick || W(this, "catalog-add", { value: e }); @@ -17188,7 +18164,7 @@ var lh = (e, t) => { return e.length === 0 ? F`

${t.library.noWidgets}

` : F` - ${fh(e).map(([e, t]) => F` + ${Og(e).map(([e, t]) => F`

${e}

${t.map((e) => this.renderEntry({ @@ -17250,15 +18226,19 @@ var lh = (e, t) => { `, n); } renderSections(e, n, r) { + if (this.widgetsOnly) return this.renderWidgetSection(r); let i = this.searchText !== ""; return i && !e.length && !n.length && !r.length ? F`

${t.library.noMatches}

` : F` ${i && e.length === 0 ? I : this.renderContainerSection(e)} - ${dh(n).map((e) => this.renderPrimitiveSection(e.id, e.entries))} + ${Dg(n).map((e) => this.renderPrimitiveSection(e.id, e.entries))} ${i && r.length === 0 ? I : this.renderWidgetSection(r)} `; } + get heading() { + return this.widgetsOnly ? t.basic.widgetsHeading : t.library.heading; + } render() { if (this.collapsed) return F` `; - let e = lh(this.widgets, this.searchText), n = lh([mh()], this.searchText), r = lh(this.primitives, this.searchText).map((e) => ({ + let e = Tg(this.widgets, this.searchText), n = Tg([Ag()], this.searchText), r = Tg(this.primitives, this.searchText).map((e) => ({ ...e, id: e.type })); @@ -17283,7 +18263,7 @@ var lh = (e, t) => {
${t.library.title} -

${t.library.heading}

+

${this.heading}

+ `; + } + renderSource(e, t, n, r) { + return this.renderChoice(this.source === e, t, n, r, () => W(this, "new-dashboard-source", { source: e })); + } + renderMode(e, t, n, r) { + return this.renderChoice(this.dashboard.mode === e, t, n, r, () => W(this, "new-dashboard-mode", { mode: e })); + } + renderModes() { + let e = t.basic; + return F` + ${e.modeTitle} +
+ ${this.renderMode("basic", "mdi:view-grid-plus", e.basic, e.basicHint)} + ${this.renderMode("advanced", "mdi:vector-arrange-below", e.advanced, e.advancedHint)} +
`; } renderSources() { @@ -17468,32 +18529,16 @@ var gh = class extends L {
`; } - renderDisplaySummary() { - let { width: e, height: n, palette: r } = this.dashboard.display; + renderForm(e, t = !1) { return F` -
-
-
${t.fields.resolution}
-
${t.common.sizeInPixels(e, n)}
-
-
-
${t.newDashboard.colors}
-
- ${xo[r].map((e) => F` - - `)} - ${bo[r]} -
-
-
+ `; } renderPicker(e, t, n, r, i) { @@ -17509,51 +18554,107 @@ var gh = class extends L { options: n } } }]} - .computeLabel=${sd} + .computeLabel=${pd} @value-changed=${i} > `; } renderDevicePicker() { - if (this.devices.length === 0) return F` - ${t.newDashboard.noDevices} - `; let e = this.devices.map((e) => ({ value: e.id, label: `${e.name} · ${t.common.size(e.width, e.height)}` })); - return F` - ${this.renderPicker("deviceId", t.newDashboard.device, e, this.deviceId, this.deviceChanged)} - ${this.renderDisplaySummary()} - `; + return this.renderPicker("deviceId", t.newDashboard.device, e, this.deviceId, this.deviceChanged); } renderProfilePicker() { - let e = Zu.map((e) => ({ + let e = nd.map((e) => ({ value: e.id, label: `${e.manufacturer} · ${e.name}` })); + return this.renderPicker("profileId", t.newDashboard.display, e, this.dashboard.display.profileId ?? "", this.profileChanged); + } + get palettes() { + return this.source === "custom" ? td : this.source === "preset" ? Oo(this.dashboard.display.profileId).palettes : []; + } + renderPickerAndName() { + if (this.source === "device" && this.devices.length === 0) return F` + ${t.newDashboard.noDevices} + ${this.renderForm(dd(), !0)} + `; + if (this.source === "custom") { + let e = this.palettes; + return F` +
+ ${this.renderForm(dd(), !0)} + ${this.renderForm(sd(e))} +
+ ${this.renderForm(od())} + `; + } return F` - ${this.renderPicker("profileId", t.newDashboard.display, e, this.dashboard.display.profileId ?? "", this.profileChanged)} - ${this.renderDisplaySummary()} +
${this.source === "device" ? this.renderDevicePicker() : this.renderProfilePicker()} ${this.renderForm(dd(), !0)}
+ ${this.palettes.length > 1 ? this.renderForm(sd(this.palettes)) : I} `; } - renderSourceBody() { - return this.source === "device" ? this.renderDevicePicker() : this.source === "preset" ? this.renderProfilePicker() : I; - } - displayFields() { - return this.source === "custom" ? { - size: !0, - palettes: Xu, - backgrounds: [] - } : this.source === "preset" ? { - size: !1, - palettes: Oo(this.dashboard.display.profileId).palettes, - backgrounds: [] - } : { - size: !1, - palettes: [], - backgrounds: [] - }; + turn(e) { + let t = Bu(this.dashboard.display.rotation, e); + W(this, "new-dashboard-change", { value: { rotation: String(t) } }); + } + renderTurnButton(e, t, n) { + return F` + + `; + } + renderPaletteSummary() { + let { palette: e } = this.dashboard.display; + return F` + + + ${xo[e].map((e) => F` + + `)} + + ${bo[e]} + + `; + } + renderPreview() { + let { display: e } = this.dashboard, n = t.newDashboard; + return F` +
+
+ ${this.renderTurnButton(-1, n.turnLeft, "mdi:rotate-left")} + ${this.renderTurnButton(1, n.turnRight, "mdi:rotate-right")} + +
+
+ + ${t.common.sizeInPixels(e.width, e.height)} · + ${e.rotation}° + + ${this.renderPaletteSummary()} +
+
+ `; + } + renderAdvanced() { + return this.dashboard.mode === "basic" ? I : this.renderForm(ud()); } render() { return F` @@ -17566,16 +18667,10 @@ var gh = class extends L { @closed=${this.close} >
+ ${this.renderModes()} ${t.newDashboard.startFrom} - ${this.renderSources()} ${this.renderSourceBody()} - + ${this.renderSources()} ${this.renderPickerAndName()} + ${this.renderPreview()} ${this.renderAdvanced()}
${this.saving ? t.newDashboard.creating : t.newDashboard.create} @@ -17598,21 +18693,21 @@ var gh = class extends L { `; } }; -Y([z({ attribute: !1 })], gh.prototype, "hass", void 0), Y([z({ attribute: !1 })], gh.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], gh.prototype, "devices", void 0), Y([z()], gh.prototype, "source", void 0), Y([z()], gh.prototype, "deviceId", void 0), Y([z({ type: Boolean })], gh.prototype, "saving", void 0), gh = Y([R("ods-new-dashboard-dialog")], gh); +Y([z({ attribute: !1 })], Ng.prototype, "hass", void 0), Y([z({ attribute: !1 })], Ng.prototype, "dashboard", void 0), Y([z({ attribute: !1 })], Ng.prototype, "devices", void 0), Y([z()], Ng.prototype, "source", void 0), Y([z()], Ng.prototype, "deviceId", void 0), Y([z({ type: Boolean })], Ng.prototype, "saving", void 0), Ng = Y([R("ods-new-dashboard-dialog")], Ng); //#endregion //#region src/ods-app.ts -var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.clipboard", yh = 228, bh = 36, xh = 9, Sh = 8, Ch = () => { +var Pg = (e, t) => Ot(e.items, t).map((e) => e.id), Fg = "opendisplay_studio.clipboard", Ig = 228, Lg = 36, Rg = 9, zg = 8, Bg = () => { try { - let e = window.localStorage.getItem(vh), t = e ? JSON.parse(e) : void 0; - return wh(t) ? t : void 0; + let e = window.localStorage.getItem(Fg), t = e ? JSON.parse(e) : void 0; + return Vg(t) ? t : void 0; } catch { return; } -}, wh = (e) => typeof e == "object" && !!e && "items" in e && Array.isArray(e.items), Th = (e) => { +}, Vg = (e) => typeof e == "object" && !!e && "items" in e && Array.isArray(e.items), Hg = (e) => { try { - window.localStorage.setItem(vh, JSON.stringify(e)); + window.localStorage.setItem(Fg, JSON.stringify(e)); } catch {} -}, Eh = 300, Dh = "debug_grid", Oh = (e, t) => e === "left" ? { +}, Ug = 300, Wg = "debug_grid", Gg = (e, t) => e === "left" ? { dx: -t, dy: 0 } : e === "right" ? { @@ -17624,9 +18719,9 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } : { dx: 0, dy: t -}, kh = 220, Ah = 5e3, $ = class extends L { +}, Kg = 220, qg = 5e3, $ = class extends L { constructor(...e) { - super(...e), this.dashboards = [], this.view = "dashboards", this.widgets = [], this.widgetErrors = [], this.notice = "", this.sending = !1, this.primitives = [], this.selection = [], this.enteredGroupId = "", this.shortcutsOpen = !1, this.renameRequestId = "", this.clipboard = Ch(), this.loading = !0, this.saving = !1, this.dirty = !1, this.error = "", this.draggingCatalog = !1, this.undoCount = 0, this.redoCount = 0, this.pendingDeleteIds = [], this.leftCollapsed = !1, this.rightCollapsed = !1, this.inspectorWidth = 350, this.snapEnabled = !0, this.alignTo = "selection", this.viewport = Es, this.newDashboardOpen = !1, this.newDashboard = Vu("en"), this.newDashboardSource = "custom", this.newDashboardDeviceId = "", this.displayDevices = [], this.previewRequest = 0, this.bootstrapStarted = !1, this.history = new Wd(), this.undo = () => { + super(...e), this.dashboards = [], this.view = "dashboards", this.widgets = [], this.widgetErrors = [], this.notice = "", this.sending = !1, this.primitives = [], this.selection = [], this.enteredGroupId = "", this.shortcutsOpen = !1, this.renameRequestId = "", this.clipboard = Bg(), this.loading = !0, this.saving = !1, this.dirty = !1, this.error = "", this.draggingCatalog = !1, this.undoCount = 0, this.redoCount = 0, this.pendingDeleteIds = [], this.leftCollapsed = !1, this.rightCollapsed = !1, this.inspectorWidth = 350, this.snapEnabled = !0, this.alignTo = "selection", this.viewport = Es, this.newDashboardOpen = !1, this.newDashboard = Ku("en"), this.newDashboardSource = "custom", this.newDashboardDeviceId = "", this.displayDevices = [], this.basicStep = "layout", this.selectedRegionId = "", this.previewRequest = 0, this.layoutRequest = 0, this.layoutKey = "", this.bootstrapStarted = !1, this.history = new Af(), this.undo = () => { this.current && this.restore(this.history.undo(this.current)); }, this.redo = () => { this.current && this.restore(this.history.redo(this.current)); @@ -17637,7 +18732,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.pendingDeleteIds = e; }, toggleFlag: (e, t) => this.mutate((n) => { - for (let r of e) Fl(n, r, t); + for (let r of e) Ll(n, r, t); }), group: (e) => this.groupSelection(e), ungroup: (e) => this.ungroup(e), @@ -17672,8 +18767,8 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.shortcutsOpen = !1; return; } - if (fd(e) || this.view === "dashboards" || this.view === "settings") return; - let t = Du(e, this.commandContext()); + if (vd(e) || this.view === "dashboards" || this.view === "settings") return; + let t = ju(e, this.commandContext()); !t || this.view === "code" && !t.anywhere || (e.preventDefault(), this.runCommand(t.id)); }, this.lastNudgeAt = 0; } @@ -17734,6 +18829,12 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli ); overflow: hidden; } + .basic-left { + min-width: 0; + min-height: 0; + display: grid; + grid-template-rows: auto minmax(0, 1fr); + } .dashboard-empty { position: relative; height: 100%; @@ -17772,7 +18873,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli e.has("hass") && this.hass && f(this.hass.language); } updated(e) { - e.has("hass") && (this.ensureBootstrap(), this.refreshOnStateChange(e.get("hass"))); + e.has("hass") && (this.ensureBootstrap(), this.refreshOnStateChange(e.get("hass"))), this.refreshLayoutFrames(); } disconnectedCallback() { super.disconnectedCallback(), this.previewTimer && window.clearTimeout(this.previewTimer), this.stateTimer && window.clearTimeout(this.stateTimer), this.clockTimer && window.clearTimeout(this.clockTimer), this.noticeTimer && window.clearTimeout(this.noticeTimer), window.removeEventListener("keydown", this.onKeyDown); @@ -17785,8 +18886,8 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (e) { this.loading = !0, this.error = ""; try { - let t = await Cd(e); - this.dashboards = t.dashboards, this.widgets = t.widgets, this.widgetErrors = t.widgetErrors, this.primitives = t.primitives, Bd(t.fonts), this.current = void 0, this.preview = void 0, this.view = "dashboards", this.clearHistory(), this.newDashboard = Vu(e.language); + let t = await kd(e); + this.dashboards = t.dashboards, this.widgets = t.widgets, this.widgetErrors = t.widgetErrors, this.primitives = t.primitives, qd(t.fonts), this.layoutLimits = t.layoutLimits, this.current = void 0, this.preview = void 0, this.view = "dashboards", this.clearHistory(), this.newDashboard = Ku(e.language); } catch (e) { this.error = U(e, t.app.loadFailed); } finally { @@ -17795,12 +18896,12 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } } async openNewDashboard() { - this.displayDevices = await this.loadDisplayDevices(), this.newDashboard = Vu(this.language), this.newDashboardDeviceId = "", this.newDashboardOpen = !0, this.chooseNewDashboardSource(this.displayDevices.length ? "device" : "preset"); + this.displayDevices = await this.loadDisplayDevices(), this.newDashboard = Ku(this.language), this.newDashboardDeviceId = "", this.newDashboardOpen = !0, this.chooseNewDashboardSource(this.displayDevices.length ? "device" : "preset"); } async loadDisplayDevices() { if (!this.hass) return []; try { - return await kd(this.hass); + return await Id(this.hass); } catch { return []; } @@ -17810,18 +18911,18 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } useDevice(e) { let t = this.displayDevices.find((t) => t.id === e); - t && (this.newDashboardDeviceId = t.id, this.newDashboard = Wu(this.newDashboard, t)); + t && (this.newDashboardDeviceId = t.id, this.newDashboard = Yu(this.newDashboard, t)); } useProfile(e) { - let t = Zu.find((t) => t.id === e) ?? Zu[0]; - this.newDashboard = Gu(this.newDashboard, t); + let t = nd.find((t) => t.id === e) ?? nd[0]; + this.newDashboard = Xu(this.newDashboard, t); } async createDashboard() { if (this.hass) { this.saving = !0, this.error = ""; try { - let e = await Td(this.hass, this.newDashboard); - this.dashboards = [...this.dashboards, e], this.current = structuredClone(e), this.clearSelection(), this.dirty = !1, this.newDashboardOpen = !1, this.view = "design", this.clearHistory(), await this.composePreview(), await this.updateComplete, this.showWholeCanvas(); + let e = await Md(this.hass, this.newDashboard); + this.dashboards = [...this.dashboards, e], this.current = structuredClone(e), this.clearSelection(), this.dirty = !1, this.newDashboardOpen = !1, this.view = "design", this.basicStep = "layout", this.clearHistory(), await this.composePreview(), await this.updateComplete, this.showWholeCanvas(); } catch (e) { this.error = U(e, t.app.createFailed); } finally { @@ -17833,7 +18934,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (!(!this.hass || !this.current)) { this.saving = !0, this.error = ""; try { - let e = await Ed(this.hass, this.current); + let e = await Nd(this.hass, this.current); this.current = structuredClone(e), this.dashboards = this.dashboards.map((t) => t.id === e.id ? e : t), this.dirty = !1; } catch (e) { this.error = U(e, t.app.saveFailed); @@ -17846,8 +18947,8 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (!(!this.hass || !this.current)) { this.error = ""; try { - let e = await jd(this.hass, this.current); - hd(vd(this.current.name), JSON.stringify(e, null, 2)); + let e = await Rd(this.hass, this.current); + xd(wd(this.current.name), JSON.stringify(e, null, 2)); } catch (e) { this.error = U(e, t.app.exportFailed); } @@ -17855,16 +18956,16 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } async chooseImport() { if (!this.hass || !this.current) return; - let e = await gd(".json,application/json"); + let e = await Sd(".json,application/json"); if (!e) return; this.error = ""; - let n = bd(await e.text()); + let n = Ed(await e.text()); if (n === void 0) { this.error = t.app.notAJsonFile; return; } try { - let e = await Md(this.hass, n, this.current.display); + let e = await zd(this.hass, n, this.current.display); this.importing = { file: n, plan: e @@ -17879,7 +18980,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli async confirmImport(e) { let { importing: n, hass: r, current: i } = this; if (!(!n || !r || !i)) try { - let { items: a } = await Md(r, n.file, i.display, e.detail.colorMap); + let { items: a } = await zd(r, n.file, i.display, e.detail.colorMap); this.mutate((e) => { e.items = a; }), this.clearSelection(), this.importing = void 0, this.showNotice(t.app.imported(a.length)); @@ -17891,7 +18992,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (!(!this.hass || !this.current)) { this.sending = !0, this.error = ""; try { - await Ad(this.hass, this.current), this.showNotice(t.app.sentToDevice); + await Ld(this.hass, this.current), this.showNotice(t.app.sentToDevice); } catch (e) { this.error = U(e, t.app.sendFailed); } finally { @@ -17904,7 +19005,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.view = "design", this.preview || this.composePreview(); return; } - this.dirty && !window.confirm(t.app.discardChanges) || (this.current = structuredClone(e), this.clearSelection(), this.dirty = !1, this.clearHistory(), this.view = "design", this.composePreview().then(() => this.showWholeCanvas())); + this.dirty && !window.confirm(t.app.discardChanges) || (this.current = structuredClone(e), this.clearSelection(), this.selectedRegionId = "", this.basicStep = vf(e).length > 0 ? "widgets" : "layout", this.dirty = !1, this.clearHistory(), this.view = "design", this.composePreview().then(() => this.showWholeCanvas())); } openAction(e, t) { this.dashboardDraft = structuredClone(e), this.dashboardDialog = t; @@ -17916,7 +19017,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (!(!this.hass || this.saving)) { this.saving = !0, this.error = ""; try { - let t = await Ed(this.hass, e); + let t = await Nd(this.hass, e); return this.dashboards = this.dashboards.map((e) => e.id === t.id ? t : e), this.current?.id === t.id && (this.current = structuredClone(t), this.preview = void 0, this.dirty = !1), t; } catch (e) { this.error = U(e, t); @@ -17943,9 +19044,9 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (!this.hass || this.saving) return; this.saving = !0, this.error = ""; let n = structuredClone(e); - n.id = "", n.name = Yu(e, this.dashboards, this.language), n.status = "draft", n.createdAt = "", n.updatedAt = ""; + n.id = "", n.name = ed(e, this.dashboards, this.language), n.status = "draft", n.createdAt = "", n.updatedAt = ""; try { - let e = await Td(this.hass, n); + let e = await Md(this.hass, n); this.dashboards = [...this.dashboards, e]; } catch (e) { this.error = U(e, t.app.duplicateFailed); @@ -17954,7 +19055,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } } async saveSettings() { - if (this.dashboardDialog !== "settings" || !this.dashboardDraft || !qu(this.dashboardDraft)) return; + if (this.dashboardDialog !== "settings" || !this.dashboardDraft || !Qu(this.dashboardDraft)) return; let e = structuredClone(this.dashboardDraft); e.name = e.name.trim(), await this.updateFromGallery(e, t.app.settingsFailed) && this.closeAction(); } @@ -17963,7 +19064,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli let e = this.dashboardDraft.id; this.saving = !0, this.error = ""; try { - await Dd(this.hass, e), this.dashboards = this.dashboards.filter((t) => t.id !== e), this.current?.id === e && (this.current = void 0, this.clearSelection(), this.preview = void 0, this.dirty = !1, this.clearHistory()), this.closeAction(); + await Pd(this.hass, e), this.dashboards = this.dashboards.filter((t) => t.id !== e), this.current?.id === e && (this.current = void 0, this.clearSelection(), this.preview = void 0, this.dirty = !1, this.clearHistory()), this.closeAction(); } catch (e) { this.error = U(e, t.app.deleteFailed); } finally { @@ -18000,7 +19101,8 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli canEnter: a ? Tt(a) : !1, entered: this.enteredGroupId !== "", canPaste: (this.clipboard?.items.length ?? 0) > 0, - dirty: this.dirty + dirty: this.dirty, + basic: this.isBasic }; } get selectedItems() { @@ -18011,7 +19113,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli return this.selectedItems.at(-1); } runCommand(e, t) { - let n = wu(e), r = this.commandContext(t); + let n = Ou(e), r = this.commandContext(t); n.isEnabled(r) && n.run(r, this.commandActions); } onCommand(e) { @@ -18020,11 +19122,11 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } copy(e) { let t = this.current; - t && (this.clipboard = _n(t, e), Th(this.clipboard)); + t && (this.clipboard = _n(t, e), Hg(this.clipboard)); } cut(e) { this.copy(e), this.mutate((t) => { - for (let n of e) Il(t, n); + for (let n of e) Rl(t, n); }), this.setSelection(this.selection.filter((t) => !e.includes(t))); } paste() { @@ -18040,7 +19142,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.pasteWith(() => ({ anchor: e }), n ? { parentId: n.id } : {}); } pasteWith(e, t) { - let n = this.current, r = this.clipboard ?? Ch(); + let n = this.current, r = this.clipboard ?? Bg(); if (!n || !r) return; let i = []; this.mutate((n) => { @@ -18067,13 +19169,13 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli }; } applyArrangement(e) { - e.length !== 0 && this.mutate((t) => lu(t, e)); + e.length !== 0 && this.mutate((t) => du(t, e)); } align(e, t) { - this.current && this.applyArrangement(ou(this.current, e, t, this.arrangeOptions)); + this.current && this.applyArrangement(cu(this.current, e, t, this.arrangeOptions)); } distribute(e, t) { - this.current && this.applyArrangement(cu(this.current, e, t, this.arrangeOptions)); + this.current && this.applyArrangement(uu(this.current, e, t, this.arrangeOptions)); } onAlignTargetChange(e) { this.alignTo = e.detail.target; @@ -18081,7 +19183,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli nudge(e, t, n) { let r = this.current; if (!r) return; - let { dx: i, dy: a } = Oh(t, n ? r.display.snapSize : 1), o = Date.now() - this.lastNudgeAt > Eh; + let { dx: i, dy: a } = Gg(t, n ? r.display.snapSize : 1), o = Date.now() - this.lastNudgeAt > Ug; this.lastNudgeAt = Date.now(), this.mutate((t) => { wn(t, e, i, a, pt(t), (e) => xs(e, this.primitives).position.length === 0); }, !0, o); @@ -18097,13 +19199,13 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.menu = void 0; } menuLayout(e) { - return e === "empty" ? Nu : e === "tree" ? Mu : ju; + return e === "empty" ? Lu : e === "tree" ? Iu : Fu; } onContextMenu(e) { let { source: n, itemId: r, clientX: i, clientY: a, point: o } = e.detail, s = this.current; if (!s) return; r && !this.selection.includes(r) && this.selectItem(r), !r && n === "empty" && this.clearSelection(); - let c = r ? T(s.items, r) : void 0, l = c ? this.targetsForMenu(c) : [], u = this.commandContext(c, l), d = Pu(this.menuLayout(n), u, pd()); + let c = r ? T(s.items, r) : void 0, l = c ? this.targetsForMenu(c) : [], u = this.commandContext(c, l), d = Ru(this.menuLayout(n), u, yd()); d.length !== 0 && (this.menu = { ...this.menuPosition(i, a, d), label: c?.name ?? t.canvas.menuLabel, @@ -18116,18 +19218,18 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli return this.selection.includes(e.id) ? this.selectedItems : [e]; } menuPosition(e, t, n) { - let r = this.getBoundingClientRect(), i = n.length * bh + n.filter((e) => e.separatorBefore).length * xh + 16, a = e - r.left, o = t - r.top; + let r = this.getBoundingClientRect(), i = n.length * Lg + n.filter((e) => e.separatorBefore).length * Rg + 16, a = e - r.left, o = t - r.top; return { - x: a + yh + Sh > r.width ? Math.max(Sh, a - yh) : a, - y: o + i + Sh > r.height ? Math.max(Sh, r.height - i - Sh) : o + x: a + Ig + zg > r.width ? Math.max(zg, a - Ig) : a, + y: o + i + zg > r.height ? Math.max(zg, r.height - i - zg) : o }; } onMenuSelect(e) { let t = this.menu; if (this.closeMenu(), !t || !this.current) return; let n = t.itemId ? T(this.current.items, t.itemId) : void 0; - if (!Cu(e.detail.id)) return; - let r = wu(e.detail.id), i = this.commandContext(n, n ? this.targetsForMenu(n) : []); + if (!Du(e.detail.id)) return; + let r = Ou(e.detail.id), i = this.commandContext(n, n ? this.targetsForMenu(n) : []); r.isEnabled(i) && (this.menu = t, r.run(i, this.commandActions), this.menu = void 0); } renderMenu() { @@ -18166,7 +19268,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli ` : I; } schedulePreview() { - this.previewTimer && window.clearTimeout(this.previewTimer), this.previewTimer = window.setTimeout(() => void this.composePreview(), kh); + this.previewTimer && window.clearTimeout(this.previewTimer), this.previewTimer = window.setTimeout(() => void this.composePreview(), Kg); } refreshOnStateChange(e) { let t = this.preview?.dependencies; @@ -18180,7 +19282,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.error = ""; let e = ++this.previewRequest, n = structuredClone(this.current); try { - let t = await Od(this.hass, n); + let t = await Fd(this.hass, n); e === this.previewRequest && (this.preview = { ...t, composedFrom: n @@ -18193,10 +19295,14 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli this.view = e, e === "code" && !this.preview && this.composePreview(); } selectItem(e) { - this.setSelection(e ? [e] : []); + if (!e) { + this.clearSelection(); + return; + } + this.setSelection([e]); } clearSelection() { - this.setSelection([]); + this.setSelection([]), this.selectedRegionId = ""; } setSelection(e) { e.length === this.selection.length && e.every((e, t) => e === this.selection[t]) || (this.selection = e); @@ -18209,7 +19315,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } isInsideEntered(e, t) { let n = this.enteredGroupId; - return !n || [t, ..._h(e, t)].includes(n) || _h(e, n).includes(t); + return !n || [t, ...Pg(e, t)].includes(n) || Pg(e, n).includes(t); } showWholeCanvas() { this.canvas?.resetView(), requestAnimationFrame(() => this.canvas?.fitView()); @@ -18220,14 +19326,14 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli if (a === "container") return Zt(i, n, r); if (a === "widget") { let e = this.widgets.find((e) => e.id === o); - return e ? Wl(e, n, r, i) : void 0; + return e ? Kl(e, n, r, i) : void 0; } - if (o === Dh && this.selectExistingGrid(i)) return; - let s = Gl(this.primitives, o, n, r, i); + if (o === Wg && this.selectExistingGrid(i)) return; + let s = ql(this.primitives, o, n, r, i); return s || (this.error = t.app.unsupportedPrimitive(o)), s; } selectExistingGrid(e) { - let t = E(e.items).find((e) => e.kind === "primitive" && e.primitive.type === Dh); + let t = E(e.items).find((e) => e.kind === "primitive" && e.primitive.type === Wg); return t ? (this.selectItem(t.id), !0) : !1; } addAt(e, t, n, r) { @@ -18238,15 +19344,90 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } addFromCatalog(e) { if (!this.current) return; - let { x: t, y: n } = Kl(this.current, this.snapEnabled); + if (this.isBasic) { + this.addToRegion(e, this.selectedRegionId); + return; + } + let { x: t, y: n } = Jl(this.current, this.snapEnabled); this.addAt(e, t, n); } dropFromCatalog(e, t, n) { let r = this.current, i = this.canvas?.displayPointAt(t, n); if (!r || !i) return; + if (this.isBasic) { + this.addToRegion(e, this.regionAtPoint(i)); + return; + } let a = pt(r), o = _(mt(i.x, r, this.snapEnabled), a.x, a.x + a.width - 1), s = _(mt(i.y, r, this.snapEnabled), a.y, a.y + a.height - 1), c = Vt(r.items, o, s, [], this.enteredGroupId || void 0); this.addAt(e, o, s, c?.id); } + get isBasic() { + return this.current?.mode === "basic"; + } + regionAtPoint(e) { + return this.layoutFrames ? gf(this.layoutFrames, e) ?? "" : ""; + } + async refreshLayoutFrames() { + let e = this.current, n = e?.layout; + if (!this.hass || !e || !n) { + this.layoutFrames = void 0, this.layoutKey = ""; + return; + } + let { width: r, height: i, padding: a } = e.display, o = JSON.stringify([ + r, + i, + a, + n + ]); + if (o === this.layoutKey) return; + this.layoutKey = o; + let s = this.layoutRequest += 1; + try { + let t = await Ad(this.hass, e.display, n); + s === this.layoutRequest && (this.layoutFrames = t); + } catch (e) { + this.error = U(e, t.app.previewFailed); + } + } + addToRegion(e, n) { + let r = this.current, i = r?.layout, [a, o] = e.split(":"), s = this.widgets.find((e) => e.id === o); + if (!r || !i || a !== "widget" || !s) return; + let c = xf(r, i, n), l = this.layoutFrames?.regions.find((e) => e.id === c?.id); + if (!c || !l) { + this.showNotice(t.basic.noEmptyRegion); + return; + } + this.mutate((e) => Sf(e, s, c, l)), this.selectRegion(c.id), this.composePreview(); + } + selectRegion(e) { + let t = this.current && yf(this.current, e); + this.setSelection(t ? [t.id] : []), this.selectedRegionId = e; + } + onBasicStepChange(e) { + this.basicStep = e.detail.step; + } + onRegionSelect(e) { + this.selectRegion(e.detail.regionId); + } + onRegionsMerge(e) { + let { rectangle: t } = e.detail; + this.mutate((e) => Tf(e, t)); + let n = this.current?.layout, r = n && rf(n, t); + this.selectRegion(r?.id ?? ""), this.composePreview(); + } + onRegionSplit(e) { + this.mutate((t) => Ef(t, e.detail.regionId)), this.selectRegion(e.detail.regionId); + } + onGridChange(e) { + let { columns: t, rows: n, gap: r } = e.detail; + this.mutate((e) => { + let i = e.layout; + i && (r !== void 0 && Of(e, r), Df(e, { + columns: t ?? i.columns, + rows: n ?? i.rows + })); + }), this.current && this.keepExistingSelection(this.current), this.composePreview(); + } groupSelection(e) { let t; this.mutate((n) => { @@ -18269,7 +19450,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli confirmDeleteItem() { let e = this.pendingDeleteIds; e.length !== 0 && (this.pendingDeleteIds = [], this.mutate((t) => { - for (let n of e) Il(t, n); + for (let n of e) Rl(t, n); }), this.setSelection(this.selection.filter((t) => !e.includes(t)))); } onDashboardOpen(e) { @@ -18290,10 +19471,14 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli }; } onSettingsChange(e) { - this.dashboardDraft &&= Ku(this.dashboardDraft, e.detail.value); + this.dashboardDraft &&= Zu(this.dashboardDraft, e.detail.value); } onNewDashboardChange(e) { - this.newDashboard = Ku(this.newDashboard, e.detail.value); + this.newDashboard = Zu(this.newDashboard, e.detail.value); + } + onNewDashboardMode(e) { + let t = this.layoutLimits?.defaultGap ?? 8; + this.newDashboard = _f(this.newDashboard, e.detail.mode, t); } onNewDashboardSource(e) { this.chooseNewDashboardSource(e.detail.source); @@ -18307,6 +19492,9 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli closeNewDashboard() { this.newDashboardOpen = !1; } + onRenameHandled() { + this.renameRequestId = ""; + } showGallery() { this.view = "dashboards"; } @@ -18343,7 +19531,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } onItemRename(e) { let { itemId: t, name: n } = e.detail; - this.mutate((e) => Rl(e, t, n)); + this.mutate((e) => Bl(e, t, n)); } cancelDeleteItem() { this.pendingDeleteIds = []; @@ -18394,22 +19582,22 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } onLayersReorder(e) { let { itemId: t, targetId: n, edge: r } = e.detail; - this.mutate((e) => Ll(e, t, n, r)); + this.mutate((e) => zl(e, t, n, r)); } onItemNumberChange(e) { let { key: t, value: n } = e.detail; - this.mutate((e) => Al(e, this.selectedItemId, t, n, this.primitives)); + this.mutate((e) => Ml(e, this.selectedItemId, t, n, this.primitives)); } onExpressionChange(e) { let { key: t, template: n } = e.detail; - this.mutate((e) => Jl(e, this.selectedItemId, t, n)); + this.mutate((e) => Xl(e, this.selectedItemId, t, n)); } onDisplayNumberChange(e) { let { key: t, value: n } = e.detail; - this.mutate((e) => Nl(e, t, n)); + this.mutate((e) => Fl(e, t, n)); } onDisplayBackgroundChange(e) { - this.mutate((t) => Pl(t, e.detail.color)); + this.mutate((t) => Il(t, e.detail.color)); } onWidgetOptionsChange(e) { let t = this.selectedItem; @@ -18417,15 +19605,15 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli let n = this.widgets.find((e) => e.id === t.widget.type); if (!n) return; let r = ec(e.detail.value, n); - this.mutate((e) => zl(e, t.id, r)); + this.mutate((e) => Vl(e, t.id, r)); } onWidgetPicksChange(e) { let { sourceKey: t, picks: n } = e.detail; - this.mutate((e) => Bl(e, this.selectedItemId, t, n)); + this.mutate((e) => Hl(e, this.selectedItemId, t, n)); } async reloadWidgets() { if (this.hass) try { - let e = await wd(this.hass); + let e = await jd(this.hass); this.widgets = e.widgets, this.widgetErrors = e.widgetErrors, this.showNotice(t.library.widgetsReloaded(e.widgets.length, e.widgetErrors.length)), this.composePreview(); } catch (e) { this.error = U(e, t.library.reloadFailed); @@ -18434,7 +19622,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli showNotice(e) { this.notice = e, this.noticeTimer && window.clearTimeout(this.noticeTimer), this.noticeTimer = window.setTimeout(() => { this.notice = ""; - }, Ah); + }, qg); } onContainerBackgroundChange(e) { let t = hn(e.detail.value); @@ -18442,19 +19630,19 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli } onAlignInParent(e) { let t = this.selectedItemId, n = this.preview?.itemBounds[t]; - this.mutate((r) => Kd(r, t, e.detail.place, n)); + this.mutate((r) => Mf(r, t, e.detail.place, n)); } onPrimitiveFieldChange(e) { let { key: t, value: n } = e.detail, r = this.selectedItemId, i = this.preview?.itemBounds[r]; - this.mutate((e) => Vl(e, r, t, n, i)); + this.mutate((e) => Ul(e, r, t, n, i)); } onPrimitiveFieldsReset(e) { let { values: t } = e.detail; - this.mutate((e) => Hl(e, this.selectedItemId, t)); + this.mutate((e) => Wl(e, this.selectedItemId, t)); } onPrimitiveChange(e) { let { value: t } = e.detail; - this.mutate((e) => Ul(e, this.selectedItemId, t, this.primitives)); + this.mutate((e) => Gl(e, this.selectedItemId, t, this.primitives)); } renderDeleteDialog() { let e = this.pendingDeleteIds.flatMap((e) => T(this.current?.items ?? [], e) ?? []), [n] = e; @@ -18496,6 +19684,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli .saving=${this.saving} @new-dashboard-change=${this.onNewDashboardChange} @new-dashboard-source=${this.onNewDashboardSource} + @new-dashboard-mode=${this.onNewDashboardMode} @new-dashboard-device=${this.onNewDashboardDevice} @new-dashboard-profile=${this.onNewDashboardProfile} @new-dashboard-close=${this.closeNewDashboard} @@ -18537,90 +19726,151 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli @settings-close=${this.showGallery} @widgets-reload=${this.reloadWidgets} > + `; + } + layoutStyle() { + return V({ + "--toolbox-width": this.leftCollapsed ? "48px" : "255px", + "--inspector-width": this.rightCollapsed ? "48px" : `${this.inspectorWidth}px` + }); + } + renderLibrary(e) { + return F` + + `; + } + renderCanvas(e) { + return F` + 0} + .canRedo=${this.redoCount > 0} + .viewport=${this.viewport} + .layoutFrames=${this.layoutFrames} + .basicStep=${this.basicStep} + .selectedRegionId=${this.selectedRegionId} + @viewport-change=${this.onViewportChange} + @items-transform=${this.onItemsTransform} + @item-transform-end=${this.onItemTransformEnd} + @gesture-cancel=${this.onGestureCancel} + @primitive-field-change=${this.onPrimitiveFieldChange} + @snap-toggle=${this.toggleSnap} + @align-target-change=${this.onAlignTargetChange} + @region-select=${this.onRegionSelect} + @regions-merge=${this.onRegionsMerge} + @region-split=${this.onRegionSplit} + > + `; + } + renderInspector(e) { + return F` + + `; + } + renderDialogs() { + return F` + ${this.renderDeleteDialog()} ${this.renderImportDialog()} + ${this.renderMenu()} ${this.renderShortcutsDialog()} `; } renderDesign(e) { return F`
{ - this.renameRequestId = ""; - }} + @rename-handled=${this.onRenameHandled} @command=${this.onCommand} > - - 0} - .canRedo=${this.redoCount > 0} - .viewport=${this.viewport} - @viewport-change=${this.onViewportChange} - @items-transform=${this.onItemsTransform} - @item-transform-end=${this.onItemTransformEnd} - @gesture-cancel=${this.onGestureCancel} - @primitive-field-change=${this.onPrimitiveFieldChange} - @snap-toggle=${this.toggleSnap} - @align-target-change=${this.onAlignTargetChange} - > - + ${this.renderLibrary(!1)} ${this.renderCanvas(e)} + ${this.renderInspector(e)}
- ${this.renderDeleteDialog()} ${this.renderImportDialog()} - ${this.renderMenu()} ${this.renderShortcutsDialog()} + ${this.renderDialogs()} + `; + } + renderBasicLeft(e) { + return F` +
+ + ${this.basicStep === "layout" ? F` + + ` : this.renderLibrary(!0)} +
+ `; + } + renderBasicDesign(e) { + return F` +
+ ${this.renderBasicLeft(e)} ${this.renderCanvas(e)} + ${this.renderInspector(e)} +
+ ${this.renderDialogs()} `; } renderError() { @@ -18633,6 +19883,9 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli ${this.notice} ` : I; } + renderEditorBody(e) { + return e.mode === "basic" ? this.renderBasicDesign(e) : this.renderDesign(e); + } renderEditor(e) { return F`
@@ -18657,7 +19910,7 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli ${this.renderError()} ${this.renderNotice()} ${this.view === "code" ? F` - ` : this.renderDesign(e)} + ` : this.renderEditorBody(e)}
`; } @@ -18672,6 +19925,6 @@ var _h = (e, t) => Ot(e.items, t).map((e) => e.id), vh = "opendisplay_studio.cli return this.view === "dashboards" || !e ? this.renderGallery() : this.renderEditor(e); } }; -Y([z({ attribute: !1 })], $.prototype, "hass", void 0), Y([B()], $.prototype, "dashboards", void 0), Y([B()], $.prototype, "view", void 0), Y([B()], $.prototype, "widgets", void 0), Y([B()], $.prototype, "widgetErrors", void 0), Y([B()], $.prototype, "notice", void 0), Y([B()], $.prototype, "sending", void 0), Y([B()], $.prototype, "importing", void 0), Y([B()], $.prototype, "primitives", void 0), Y([B()], $.prototype, "current", void 0), Y([B()], $.prototype, "selection", void 0), Y([B()], $.prototype, "enteredGroupId", void 0), Y([B()], $.prototype, "menu", void 0), Y([B()], $.prototype, "shortcutsOpen", void 0), Y([B()], $.prototype, "renameRequestId", void 0), Y([B()], $.prototype, "preview", void 0), Y([B()], $.prototype, "loading", void 0), Y([B()], $.prototype, "saving", void 0), Y([B()], $.prototype, "dirty", void 0), Y([B()], $.prototype, "error", void 0), Y([B()], $.prototype, "draggingCatalog", void 0), Y([B()], $.prototype, "undoCount", void 0), Y([B()], $.prototype, "redoCount", void 0), Y([B()], $.prototype, "pendingDeleteIds", void 0), Y([B()], $.prototype, "leftCollapsed", void 0), Y([B()], $.prototype, "rightCollapsed", void 0), Y([B()], $.prototype, "inspectorWidth", void 0), Y([B()], $.prototype, "snapEnabled", void 0), Y([B()], $.prototype, "alignTo", void 0), Y([B()], $.prototype, "viewport", void 0), Y([B()], $.prototype, "newDashboardOpen", void 0), Y([B()], $.prototype, "newDashboard", void 0), Y([B()], $.prototype, "newDashboardSource", void 0), Y([B()], $.prototype, "newDashboardDeviceId", void 0), Y([B()], $.prototype, "displayDevices", void 0), Y([B()], $.prototype, "dashboardDialog", void 0), Y([B()], $.prototype, "dashboardDraft", void 0), Y([bl("ods-canvas")], $.prototype, "canvas", void 0), $ = Y([R("ods-app")], $); +Y([z({ attribute: !1 })], $.prototype, "hass", void 0), Y([B()], $.prototype, "dashboards", void 0), Y([B()], $.prototype, "view", void 0), Y([B()], $.prototype, "widgets", void 0), Y([B()], $.prototype, "widgetErrors", void 0), Y([B()], $.prototype, "notice", void 0), Y([B()], $.prototype, "sending", void 0), Y([B()], $.prototype, "importing", void 0), Y([B()], $.prototype, "primitives", void 0), Y([B()], $.prototype, "current", void 0), Y([B()], $.prototype, "selection", void 0), Y([B()], $.prototype, "enteredGroupId", void 0), Y([B()], $.prototype, "menu", void 0), Y([B()], $.prototype, "shortcutsOpen", void 0), Y([B()], $.prototype, "renameRequestId", void 0), Y([B()], $.prototype, "preview", void 0), Y([B()], $.prototype, "loading", void 0), Y([B()], $.prototype, "saving", void 0), Y([B()], $.prototype, "dirty", void 0), Y([B()], $.prototype, "error", void 0), Y([B()], $.prototype, "draggingCatalog", void 0), Y([B()], $.prototype, "undoCount", void 0), Y([B()], $.prototype, "redoCount", void 0), Y([B()], $.prototype, "pendingDeleteIds", void 0), Y([B()], $.prototype, "leftCollapsed", void 0), Y([B()], $.prototype, "rightCollapsed", void 0), Y([B()], $.prototype, "inspectorWidth", void 0), Y([B()], $.prototype, "snapEnabled", void 0), Y([B()], $.prototype, "alignTo", void 0), Y([B()], $.prototype, "viewport", void 0), Y([B()], $.prototype, "newDashboardOpen", void 0), Y([B()], $.prototype, "newDashboard", void 0), Y([B()], $.prototype, "newDashboardSource", void 0), Y([B()], $.prototype, "newDashboardDeviceId", void 0), Y([B()], $.prototype, "displayDevices", void 0), Y([B()], $.prototype, "dashboardDialog", void 0), Y([B()], $.prototype, "dashboardDraft", void 0), Y([B()], $.prototype, "layoutLimits", void 0), Y([B()], $.prototype, "layoutFrames", void 0), Y([B()], $.prototype, "basicStep", void 0), Y([B()], $.prototype, "selectedRegionId", void 0), Y([Sl("ods-canvas")], $.prototype, "canvas", void 0), $ = Y([R("ods-app")], $); //#endregion export { $ as OdsApp }; diff --git a/custom_components/opendisplay_studio/items.py b/custom_components/opendisplay_studio/items.py index 6a33f92..faa267d 100644 --- a/custom_components/opendisplay_studio/items.py +++ b/custom_components/opendisplay_studio/items.py @@ -157,6 +157,9 @@ def _validate_widget( "padding": integer(layout.get("padding", 0), "layout.padding", 0, 128) }, } + if "region" in value: + # The region of a basic dashboard the widget fills; its frame follows from it. + item["region"] = string(value["region"], "item.region", 64) _with_expressions( item, _expressions(value, ITEM_EXPRESSIONS, single=_single(relative=relative)) ) diff --git a/custom_components/opendisplay_studio/websocket.py b/custom_components/opendisplay_studio/websocket.py index 241d57c..ebe8aee 100644 --- a/custom_components/opendisplay_studio/websocket.py +++ b/custom_components/opendisplay_studio/websocket.py @@ -9,6 +9,7 @@ from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError, ServiceNotFound +from .basic_layout import LAYOUT_LIMITS from .compiler import DashboardCompileError from .const import DOMAIN, INTEGRATION_VERSION, LOGGER, RENDER_HTTP_PATH from .dashboard_files import DashboardFileError, export_file @@ -20,6 +21,7 @@ from .palette import PALETTE_COLORS from .primitives import DEFAULT_PRIMITIVES from .rendering import OdlRenderError, OdlRenderService +from .websocket_basic import async_register_basic_commands from .websocket_fonts import async_describe_fonts, async_register_font_commands from .widget_reload import async_reload_widgets from .widgets import WidgetRegistry @@ -69,6 +71,7 @@ async def websocket_bootstrap( "widgetErrors": [error.as_dict() for error in _widgets(hass).errors], "primitives": DEFAULT_PRIMITIVES.localized(msg["language"]), "fonts": await async_describe_fonts(hass), + "layoutLimits": LAYOUT_LIMITS, }, ) @@ -350,6 +353,7 @@ def websocket_prepare_import( def async_register_commands(hass: HomeAssistant) -> None: async_register_font_commands(hass) + async_register_basic_commands(hass) websocket_api.async_register_command(hass, websocket_export_dashboard) websocket_api.async_register_command(hass, websocket_prepare_import) websocket_api.async_register_command(hass, websocket_list_icons) diff --git a/custom_components/opendisplay_studio/websocket_basic.py b/custom_components/opendisplay_studio/websocket_basic.py new file mode 100644 index 0000000..f544045 --- /dev/null +++ b/custom_components/opendisplay_studio/websocket_basic.py @@ -0,0 +1,62 @@ +"""The WebSocket command that gives the panel the geometry of a basic layout.""" + +from __future__ import annotations + +from typing import Any + +import voluptuous as vol +from homeassistant.components import websocket_api +from homeassistant.core import HomeAssistant + +from .basic_layout import grid_cells, region_frame, validate_layout, working_area +from .validation import DashboardValidationError + + +@websocket_api.websocket_command( + { + vol.Required("type"): "opendisplay_studio/layout_frames", + vol.Required("width"): vol.All(int, vol.Range(min=64, max=4096)), + vol.Required("height"): vol.All(int, vol.Range(min=64, max=4096)), + vol.Required("padding"): vol.All(int, vol.Range(min=0, max=1024)), + vol.Required("layout"): dict, + } +) +@websocket_api.require_admin +@websocket_api.async_response +async def websocket_layout_frames( + _hass: HomeAssistant, + connection: websocket_api.ActiveConnection, + msg: dict[str, Any], +) -> None: + """ + Return where the cells and the regions of a layout are on the display. + + The panel draws the layout from these boxes and never lays a grid out itself, so + what it shows is what the renderer will draw. + """ + try: + layout = validate_layout(msg["layout"]) + except DashboardValidationError as err: + connection.send_error(msg["id"], "invalid_layout", str(err)) + return + area = working_area(msg["width"], msg["height"], msg["padding"]) + columns = layout["columns"] + cells = grid_cells(area, columns, layout["rows"], layout["gap"]) + connection.send_result( + msg["id"], + { + "cells": [ + {"x": cell.x, "y": cell.y, "width": cell.width, "height": cell.height} + for cell in cells + ], + "regions": [ + {"id": region["id"], **region_frame(cells, columns, region)} + for region in layout["regions"] + ], + }, + ) + + +def async_register_basic_commands(hass: HomeAssistant) -> None: + """Register the commands of the basic editor.""" + websocket_api.async_register_command(hass, websocket_layout_frames) diff --git a/docs/images/basic-gallery.webp b/docs/images/basic-gallery.webp new file mode 100644 index 0000000000000000000000000000000000000000..32d5dc54254ce55825b881a15c1a664771e5cb54 GIT binary patch literal 39038 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 literal 0 HcmV?d00001 diff --git a/docs/images/basic-join.webp b/docs/images/basic-join.webp new file mode 100644 index 0000000000000000000000000000000000000000..e09210e667cb35b6573046b92aec983715b86ff9 GIT binary patch literal 48574 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 SatHwKS{1VEZJ`F%)c*@!RvLN$ literal 0 HcmV?d00001 diff --git a/docs/images/basic-many-regions.webp b/docs/images/basic-many-regions.webp new file mode 100644 index 0000000000000000000000000000000000000000..637b468bf4e5032e8a6f2f52b5d473f02c82c8ad GIT binary patch literal 77660 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 AF8}}l literal 0 HcmV?d00001 diff --git a/docs/images/basic-new-dashboard.webp b/docs/images/basic-new-dashboard.webp new file mode 100644 index 0000000000000000000000000000000000000000..a3261c567504c75a2f3b8e1b72f4749ed2db877c GIT binary patch literal 22106 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 EADJq;ZvX%Q literal 0 HcmV?d00001 diff --git a/docs/images/basic-widgets-empty.webp b/docs/images/basic-widgets-empty.webp new file mode 100644 index 0000000000000000000000000000000000000000..76e25e548fb69f3d2d7d4fde57c26889fba7ea34 GIT binary patch literal 62042 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%0D4De?s=y|BIGo^bHg2r|WiPf18Kd-!omP{msJv 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%0Dqy*(PH7~f5x9k6w zu{<07a$bW)&V8j{eYhMruz6)!KLZOK6u_N)BxseqLsnMHhRx0IV% zW4WAI<a&iAx!MqcMKGWYYPZb{_5XU z=G*w^84#DQ!Oji$B;>KqR1CTS?4J4 zoo_RcG5%N$PzjnC1-%AL8 z^J|S^NbEWCvp$I$f2Cf@<2UX=D>5#jgHrVMhaby%6C29LGg@ldP;>*Lmu_P+eO>CE z`JFfM_l0yWKH!q}CW`5%=gazc=EvzlN|QtNV>;dH<(_e!cZjOhf$)l@70Zz%2-7f( zsBg5DVD=b5AxFcX3sDEfRBy^)C-fQ!xn~o>`Ht%(S@-2MLW!$}^fn#^uPYt~)66rY zyGg2o2X5!+|^3Rkt`DSx|3Rx9L%09hRhJm7jXuX>;&E76mnrRG6CBeE zIIeX&R>&Z)5rfq61{F&WzD>i!UxOatI<8p~<+Z=PG9!W{m#ajH85V zeL|NiRV)MeUCq`WS?*VQ(|Xw4r+##+ZEPe`x*Fy`x&NkJt3t)|z(>*8fprF0 zRiOS53%=7w%%K&}?ID2AaLE2O<|?k6_HQrAOCW-dq7J3YR`qRIO;%|9N><;kQe`BN z(2S?bU{udnE(yo;_ng!98JrD|R#nIhb40yY+d|d0l3o&`d23*Y)by&n1AncC4Ntdb z6ah?TW*|Awiy}Y_vIPkI%%!kCeAu={h~xs6(+8EUv&qh&wZGm{r&}S&_)wq2{+>oG zmE~93gI_(N<8z0^aVCl~bc2c>(#n;&0-0AmN(fCvS=nn$W_TI1Xl+r&{jdID;%$!6 zTZaPAb=+b+@W4jsPt4=qrvM^PLGa z5MSv)!yf-+M9>Fd+1l*C1}`hN@{XwOp!D@yY8i^-G8AZ5*sMu#;7JYsYFmZynxb!T z<&5AVfpa2{60FX$qc5=2a4`LG?m&rf|86Mp{JiRd`RT~kw&IsC?&kJcB+?W~>W3&5 zW0WJ;315+?762GM3k>=}iu^d@R6yS0S#z=BNeL$jDr<*bNU$#yMd2Jb;I;MNB#XAI zD?z6=pA!-0>k`3yH=MG+1i@ae!c1;|wn>~BopLGZesJZX6yyXv1y&lKK3*EC!#pz2 z_E}wXg+o2_fr#?KT5z%vwFJ)vue-E;T5M8+K$OR= z8e>UxnWAj3EtM(}u|{x9!swV4jb_WG$y72Vq@=R$Iv-kkZlLzW6$f#tUmT`@Dc*sG ztK<)Tbwo*}PMO}rK;Yv9HOh)OOc$zgfXxEf@J$SM(!&->@xbz8bGdcgnvHF z=7@kXDimOGN4gb2LpJQ23AQy03{)7}w^NrIDth!sleo@|3`sH4LX?2t-gt^Tkd7pJ zS-P*nVsfBepan3J*qmIXhDupm6Yl;OI3+QVtp+J0>mjig)89GO04w|&1`m5S* zhV~hmr!4c`@9Lsnwc4uoG2^YSs<2U~aV!RbV3-5R)oj}J?8g#q25$wKGvL$R!icq1 zS*kllvWKn3J(3VQ#@o8<3{f!5+SCm=p66?QN#lD;{(tw+5|%s>CJFpXCn)awXF|13 zs~A+*q6n|jii%i=GAdb@W~1U>37Nv;X0u?g?#KTSGbq+W_IYVO3m(-ZdJDdOd0}xH z|A(8==`uo&+?u}#NOGns>e#B9(fF~J zD<<|yCpYL@>J%nl)mQ?mP>k??I|b7R&%!}h7%zRJt;aB=NO+vPtO56uPmQm2Sqr0@)7+ zqAvfazzSq{onSoh6Q)jQDQ#f=kxqU!E(+`fyB*lO_Z>7OX?_sl%{w19)od)B5Rkl3 zFg5%!ajlcleH*<%yA5-evN;b}jr$0oG8$el;U^%b)(Znfi67)xBZvzffW3ul78O-X z60je>seN5c?jp{?c>Zu>8i2uD)&#N8yz<1U&-eaw;XSFN zFA6C{Pt1?RRtc|9APpq?S*vlj5WB3M^Yo@wwmM!U0pp#jb@_GI=QS93v|yb$w7$=!`Mc6w+2b$|{I4|q&nsgInD`vgRC5O7 z;(KyqED$QhvaW|-O-s|{FE|Vr#d`h#uvmLq5Z!f@(yHK8w&*N~k`oOkoi!iKLsmCl z5YMy>{a*xHS^lax;H(0X)-$&!-*HH}4Z>V}LWCHrNeOd8k9(w7UYSVe{sB~bjb3iz z;<(TmMg$CjTI)Fs$Z>F|hnUT~7T_3^>><_usYvpb_V>?1gp#r4(h$tet4uzSQfn33 z0-g?QS4J5v!&ReeC}xv$_4418T2lYfKQ3+O zF54Da26UBt_U`>CD*b!fu4kMZ-}FuwV*VL1!m)P8X}dp!%x5V~>3m$uHX3rR zH6DH-*aqHcuQA&+Nl1bSELM(&a}HANV;m9phd>W0%?^fMvss74?SaxtQ`C4|PcxgK zqLG+tK_awUrcY#Bd7%WEs0(FY-!-2XE~|EJS>!>UY+QU!?0Fp4Yf=kYPSY*C1qm=> zI&HKzLNnqGg*D?>(8*%omkRSpw_QZlgNnL1rhRnws=OFk5T-yj%r&hXI_Ch zGG{)%PtZFir^h)y|2YmVDd%{KanJogGN$G_%=Pj zaSQKfMr^?1271x^#vG|YSh+JIwxF)D9VW|rya3UD?F!}^h;T6241rSA5B}jxCu+;L zf^Z7aELq;f>2K--w{I9w%#3MmpGB$ISh{g%&FmBf2#Xv@?}3~vdD1690N>v&kYmq~VQDZ-1hqg}YBlRA|1q_WxFAcJ9W`EU6+K*$NtyGi zla7scOEkxu{@8*x_{RGsd&B61?H#7mBbzRI=LJ7QeYK65m*$wCaeWsB@TT8nO+$Q= z9-)+^snm0T{aFgh)tMOts1)D*N_D0nsxWdY0ROGCkTGYd^~Q=|$v@42?m{nZ z7jHvpyPA5t9}F{@spC}#VIU@}Oj=Xb-hFYM=RU+~x{-GDDv?CMY3%EPT!DD}8EL)Z ztF{0-yklPuZXAdk?2NDiRr9D&ff%tQSv0^OJ?HOd7-R@zk*~lIMF?6DOk(Wmvc)w651X zRs5}1+V3+cc@=TcT!gZ|R}#8&3w~v8EueMo?Lv}9cABeAPmDFGDpmcyFr+t+m;{2s z)LtL^>Lh?4$G7Hk{0XtTP`5gIv^ly!QUqUFiM;9Ktlg@#<%1`G-tlvyAmXBe6QgD5 z!m=R$b7IKqD$+ouPGQiHIP#^aiQ*%XbI`4YW6vvig}PDOgy=6e6jfA;x z*L;eyWI@*U?EpXfZ_rtMEpee1CV~^HYcn9ce#2+jjnU{V)_^7y4?kC6B<#z-~Lr~?)vV0z`*_61(0IEi7v;H!x)aG_7$SU<3odw^aS%a58p3Y` zPd%T}2ey~G4dTmK;7s+g5Fw00na`n^hJ|BGyT~mRrApjLiB%d`qE@&#f&)m zeiiT?WukzdO2yRi_)c|`xnxi2dC+ydQbheiqM*Nv4H18^_D)Isx>or1q3g>r$FkNQbvk|pmpgSv>hej1*t`xk#aOXaT$3q;3_eFqE6 z@V-`p9fSQFjS7+)qfW~ePj(=@$bKO405oI0ekF1j-VO{TmWL0APy`6j>RmZEK$1`pgJP|=1Z*hq2@Lb!HF-eR4=;zE? z2TySQ6bZGZnppt)=8h2a&D)TjR88`AVbco1<+f>dcu5Otsko~#=_ait@eVVE+@~x# z|1yS*VYFx? zwnnxYvk&^)vQ?x^Vm?{sAAe#S1=X$@a~Wzy#Xj0(ImYxKrvA8m#B{aG(Dh9Go%+Ox zrbykdS0LmBCIuo4tC~jW zhhDTeQTrGG#3he&N>RL*=WV{smf+Z2jB8u(FA5r-2QnRK;WsKnt(3_0gItrOe7^9( zcQoAUetvJ0^KBJyUeq;-LJ!2mV%9dmc!ZgH0Hs+6&IG5pj5))Zfp5V;K?zZ{ss~Bs zDT&-J-CSpY@-zeLw+o%U79GIoV!iZle~Oa7UKqub?wig@_)N^iD_+&W z+%or*9$Rs>lIH=XZvT0n*|U=RKn$GqwS)DLPuy&H$krDR?65_*-x&<>GZ#+QV&X03 zLZHrTJ2KV0_NHg>aSIFA7dgoRl5X={#^o5tT~7AW_|u9uhAO4m&@N+Y!fd4cT9wx+ za!HPMR}B;;^=bRAO3ftPC2GkjG#QJL@2|E4y67DJW3&2CERUecP1QpURUdhZIvtM^ zi%BlLgr|}UI5Big$6+&O58*Xj`tSZY-@b|Q@ zbV+fuZO%G5rO!IY1{9~qgy0-d7Q`}9eX7T20ngc7YK`v8L9$L;zms&9`T~mh$9ldn z$*FK(JON}pr;@9BEFU~tUhWCCX=;br3@%hCElCK*GSvKhYz08$=o-ExFt34}4jejr z8+;nLv^t@v$nO$pa3wYx91H+e3>6(48SJxBXLV|rWdknk6$>#zGSK)!mMPvuQQl@g-WQGV`19M;X3Y{O z#?Q{Cc&r{S!2sdGemAhEI-nArrrDK0vpb!8zP*3nOBGYa3bPxB+uoTCX1 zh4C6z>xx@!AA_(PY^wI3ZY5|v$~vv~Pq#$k#e4O;Qrjpn0$wJU=WgQFNXaCCw^)a4w>JvcxImIJo3|gp5YzTY<*UCzPxWjtl9rd1d zLLVZ3m@s(UQd7M3uTRgTV}ibn7-m;Z8-Z1HI?WnU-(=*y+@AHLF2=)DzkL-@$FlT@gwgZ!os4f=i(a?7~?F@5i@D>f+FNy`2 z-S{;^zTb*3olZC@=XT%|%S=w{k2zgs!A^UL<4Twbh5*;u`!nn3VJ5Bk6HU~+?|*dD z%#_=87qW}fk@Yp){s`NFon5}=_a;@a5qv4~XMIW3yQIt9xvAcZ%!xzX+M_5_9S8ZIXo(4zikaRzAF;gypGVH`XDFU?QL9_ zo)i+Zk?lw)p2fp%@y#mhOfY1gx~GlN?PN522Y1dpi>ngH@&KvgFXBNNIFf@?1j#d~ zecgVF>2%KqI1*V_eHE2mw4|b)#;9|M!>zTt2E$B2Olt*1TrlEoahS+HdBID7*dL&j zWz|s0eO1;@17BmizeY%;;0E4wQg(a+vjf@FWWl&*kC@JbsgUMrm~ln3NB@m{9lN|Z7~x)uNf)@zpFe@& zHu^YKe4ubu4FvqY+4k4t$gtKwCgj!~safy$X)XPO#kYAqtGQR%( z9IX3Nq(QmXS>P_*n^)nE{C2lx1GvN`J>Q3MOXEy6AgG=*D5}Lu^XM?7Wf5HwW~N`t z0Dte$dP2@3l{YDh$88FAR|b-m7c#%6{}w$C#uEygyDA8)LkY0Aqj*@9-Tia|p?&q! zM)zun1DdoDVi+Z$dIu+8N5CirG@Dg$%gBJ-XSrS`{5OS7<{dX%dMHghn`*IfQSp43 zBdupf?0X3lro?<05-=G@swo2C`eR(2#ARwGXre&%Q=PKzSF~QWy{4jzsaXBUpBKTw zTGJ9|hYKw!3UxnQ!9^Bvs&)~SwLJ5%)U9+)?24yUAIL6Q2TG6=fwJ=*#= zIcmf}Zj((*!vYj5mowo9q`^31_YL=8aIs@Fi1HLSi3!(*|^jlXQFC%;; zbnVRGz#Nx7-))SFJsW=_^=mBt@pIC4&E5W#6_bX1XdJQfL!4c#=P5H4Ho)zegeQTd zZ+K>G%n+$y22n+2l!qV56DV_!$A${}lRTgaHXw@Jw?~tOyL+$8zNhSyXnYKPK@CmU z46+)|CBCt!eg&Ad8L%u;b}8$1DS48ekmN%Ysa`I?xAm4DTUjc0Y@*?-_IK(Dt&9WLaZ$Qtz=XNh{|0lxU| zB;M+l;yvH>Jit)53(CG^e1jgB$FmDHXmaBN*sK6>$$#DQq;)Zk)-`Q_-DF}fYfApN zLi-~=l-5t=Uu{2P0I?ND?Y?saO`%|c&D1H@uFE!nl5^4IqwAkNzm32VHLP!=o-qg| z7XKzPr+H;7_!@y*bN?Sn$}9N04xZff#Es2hnsio^b2clUKN$gl#%*E z{y=vMr(*Q&ARPH|&yK$!UXnHWpXEefkv?Sd-r)d#@_O)Zy38FRa79ECL_2`q*1D;Y zu(D9aroacaTPT&21p50_@xJ8xk$YaXsM0h0sdoxInx>NU;$!iL8jdx50H^@9lL7$u zA@qZ$C1eA_KpfFVnF`RqehmZLM``HFl}hgxs_+3DmNC|S_|`Cp0{y7b@pO1hU39ie zcV5oPs=S=Q{atwtG#za^Eut%T8NldWT=Hj3B>fzEQvKERNr)V;avC(7~ z5bUCeXB|$ty1Loj{Sv?3()f$diBS6o;7*^-WMExVFX4^k$zs&6DXlrbor2@87Cbk5 zz@-DkSfJ}H{!VI;L|JT%t!RE4-B_vx*(~PUe2}3R9c$iIQ*RnuNxDcup zPygwJZAVm{gU*z5IbvojfJVr_D*MW>Way)y!Se~MX39TF$v+aa-*9P|M2|@2QmlC( zAZuo=ufdVga76wM8(^5eV+uf>LtNI6$FcY(z0%}np09ZiHKgSfw4kqh`R?nAoJ2V; zwmI)Uoqj(qySh1x%ox9=DCq~4nSS<5(}e)mQrcU#T)EPSU2Ap2Zuu6!R|>a1Uz$Q@Gbj`Jp6Cc7Bck0(^EM3_grQaiaw+z8OHm zxJQkZ3i5F41?Qii*5)ZeA>RDK_5zy+yH>PHuzYTlF(98+5Sc9L2awq$qUovjjX*&jj#I{9F_+o8FHAeF16V1_@?$*<>95IK5dHgKV&-_ zE`tQ6EDW1L*-SP5>rnZoC}iFwhvY0q{?lTsOGoOtep`4RhzrO~%0c6s_h~)ooyID5 zg(aA7LNY6F<_f@Q6(XDW@v570HMBRzgBtWwmr+e*Qd|wUy#!Br2vnR5U9vOnP_nPb zvg!$pqqU_eoo%=`>^Ep@V$YOh43c-;0TOHrmg$6t6CQ6*$ujy?fsIFa6Vn1n+7LwD z1mS->RGu;G4OYotUwcN8)Gq?C49-6OcaqnQxPe;PK@1A@jomJ0?N;gf@tCPqcyyg_ zi>QMtsi0g%Fr;`NWz_`b7nNFvZ#pHM_|O)T(}OKN>T*>3mLWe&gofTmEe^|g^-1TB z&Iq<`eaoIZJEOaC1-B=D3}IM}0`w)-uix2gx==9^2DO{OcgHV+K`lNV`ekZUu~abj zoBW^;^DL<`!6C~Rin9$jRR`s>Q4zbN<%W7XF!Ti-*BXoKMi8r@_>;%uvCdxpE6o(4 zVG;brH!fputPQ>!kj$3DxY@pwjyxuoVG^4XMX$T6X|c3md!N&8`<1iNWdh~$R%p1Q z)myz@ujhn@gisX56xb88svf}*eOQ%@40wpG(qEUj$UN++Wo!gBVs7uwnO}yYMb8+d z@?>vgzdqi3>*x;au5Jf|KjRP)+fvo)j_o%v#VD`~kU+6d8Icin8NCokRC`-v_b`NX z$+wX5A-kGP&Elv<{=S4%SvtJ>?z+aT&0oG#R14#fv41bf%n~j}#y)`4dOHvm@f5mF zdxqOic#r~mp5gS2^y-a%IgGwLb<$8frPA|M-OILwmXRczl3v~;PO@$4s(L2lU~KI;a>K#<1IfRTZKpk-f` zmE~7CQIu9pk;j|f$D2VwYh>KRd@|Fi6{-3vw?+P}76mYlEi>*R2nlVj70SbM7ltH4 zxV}L?B?W`*+|^KbiFz^JD+|AdqP&7=%YG_f>Hm&(gdkX5U&XI2^sF&fp>k7);9A&K z7Z@pEjwZ}j&C;8L*_pV0($Y5KE=}reYUT5NKfO>v6==B4Bp8hxHKBQPovnc1s%6pP zA6X97htf&jaPbuHWT z={!$_^(9q+k-*AC+UYGI(Nye=G22v$C_S5nbLJ$Kt(Lpv>wq?7jN(aYMQXkq zBjq&?O%0%7@&Z|PfD2;rM+-R5f$?d!FE=ge2`D{+zj#_4FP7yGJSE`FrI$9#fD$F; zct^}F=RLyf`lDGPfe}?{Q9@xQ3v2%$!K+KfEnP26wD+$%(9f+0YN&O9lsfx}9R$~a zGF;W!%sa(o(egHB8EuODJ=B6INYI%8TxTy4`%-EX*Jc2iMp9{d=8M58R_V++;zPKZV^5S8aLKM^JZC3BBo zMJ;?608hSj^3G%{j%3RRqB3~kq^u&6h%2yFIC9V#vcOtQq^KT})lW;n0h5|h_~17l z2_=@8mIsp~(>W(^iRiOpwTiijfoNl(8;^vWYvoXSr{QYVj1w)k1WoT~yw2!vZWmz9 z@Bfmy%{nyw9wyKfZ{&o}V9$d?E=s5(s&6Cyw=-*Hun!jg=wP4^GlLV@jGO;*qqPiy z6{;L0RvRqC3i6Aq4**v){33Fuk*6?y5||t8jY7&+^g*BgzkOoKj zh~AR+dv#`dX;yn+_h4RmS*?vSfy|gKdbExccGL5OD9$u*Iam4@2+!a*xUEdyZiZMl zpM(h%^)-V&$;#zzU0ckw)QpZ@IQjouMdUu*pD}?-0Kw}l*vqF!M;T=rsz3EQL>Yk^ zdl&%-scnm{Ck;nFURd8rLA`J3QqcfdDjsorgW-qkqPmZ )J+Y)l6QT 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 RKQh2~Dn$ExyfFgc{{Uo@Op^cr literal 0 HcmV?d00001 diff --git a/docs/images/new-dashboard.webp b/docs/images/new-dashboard.webp index ab579cee98a47beb5d885a965dd88e157b3d7e49..ef495a7c5a4f320249f99d1c02fec4dc426a528d 100644 GIT binary patch literal 22522 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

+}X$VBnoV0f15$(Uy`W}3-V~PO|zSEbElNt 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 literal 49184 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

!>!ZxHVX`lrZL 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 { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + await dialog.getByRole("radio", { name: /Basic/ }).click(); + await dialog.getByRole("radio", { name: /Custom size/ }).click(); + await dialog.getByRole("textbox", { name: "Dashboard name" }).fill(name); + await dialog.getByRole("button", { name: "Create dashboard" }).click(); + await expect(page.locator("ods-region-layer")).toBeVisible(); +}; + +const setNumber = async (page: Page, label: string, value: string) => { + const field = page + .locator("ods-layout-panel") + .getByRole("spinbutton", { name: label }); + await field.fill(value); + await field.press("Enter"); +}; + +const cell = (page: Page, row: number, column: number) => + page.getByRole("button", { + name: `Cell in row ${row} and column ${column}`, + }); + +test.beforeEach(async ({ page }) => { + await openGallery(page); +}); + +test("a new dashboard is advanced unless the basic editor is chosen", async ({ + page, +}) => { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + + await expect(dialog.getByRole("radio", { name: /Advanced/ })).toBeChecked(); + await expect(dialog.getByRole("radio", { name: /Basic/ })).not.toBeChecked(); +}); + +test("the basic editor starts with a grid of four cells and no structure tree", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + + await expect(page.locator("ods-region-layer .cell")).toHaveCount(4); + await expect(page.locator("ods-structure")).toHaveCount(0); + await expect(page.locator(".arrange-bar")).toHaveCount(0); + await expect(page.locator("ods-zoom-bar").getByText("Fit")).toBeVisible(); +}); + +test("changing the columns and rows redraws the grid", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + + await setNumber(page, "Columns", "3"); + await setNumber(page, "Rows", "2"); + + await expect(page.locator("ods-region-layer .cell")).toHaveCount(6); +}); + +test("two clicks join the cells between them into one region, and a double click removes it", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + + await cell(page, 1, 1).click(); + await cell(page, 1, 2).click(); + + await expect(page.locator("ods-region-layer .outline")).toHaveCount(3); + + await cell(page, 1, 1).dblclick(); + + await expect(page.locator("ods-region-layer .outline")).toHaveCount(4); +}); + +test("a joined region cannot be cut by another one", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + await setNumber(page, "Columns", "3"); + await cell(page, 1, 1).click(); + await cell(page, 1, 2).click(); + const regions = page.locator("ods-region-layer .outline"); + const before = await regions.count(); + + await cell(page, 1, 2).click(); + await cell(page, 1, 3).hover(); + await expect(page.getByRole("status")).toContainText("cut a region in two"); + await cell(page, 1, 3).click(); + + await expect(regions).toHaveCount(before); +}); + +test("a widget is put into a region and its properties show on the right", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + + await expect(page.locator("ods-library .catalog-item").first()).toBeVisible(); + await expect(page.locator("ods-library")).not.toContainText("Rectangle"); + await page.locator("ods-region-layer .slot").nth(1).click(); + await page + .locator("ods-library .catalog-item") + .filter({ hasText: "Sensor card" }) + .click(); + + await expect(page.locator("ods-region-layer .slot-label")).toHaveCount(1); + await expect(page.locator("ods-inspector")).toContainText("sensor-card_1"); + await expect(page.locator("ods-inspector")).not.toContainText("Layout"); +}); + +test("the dashboard is saved as basic, with its layout and the region of each widget", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + await page + .locator("ods-library .catalog-item") + .filter({ hasText: "Sensor card" }) + .click(); + await page.getByRole("button", { name: "Save", exact: true }).click(); + + const saved = await page.evaluate(() => window.__ODS_E2E__.dashboards()); + const dashboard = saved.find((item) => item.name === "Basic board"); + + expect(dashboard?.mode).toBe("basic"); + expect(dashboard?.layout?.regions).toHaveLength(4); + expect(dashboard?.items).toHaveLength(1); + expect(lastCall(page, "opendisplay_studio/update_dashboard")).toBeTruthy(); +}); + +test("the gallery marks each dashboard as basic or advanced", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await page.getByRole("button", { name: "Dashboards", exact: true }).click(); + + const card = (name: string) => + page.locator("ods-dashboard-card").filter({ hasText: name }); + await expect(card("Basic board")).toContainText("Basic"); + await expect(card("Kitchen display")).toContainText("Advanced"); +}); + +test("a basic dashboard reopens in the basic editor", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + await page.getByRole("button", { name: "Dashboards", exact: true }).click(); + + await page + .getByRole("button", { name: "Open dashboard Basic board" }) + .click(); + + await expect(page.locator("ods-region-layer")).toBeVisible(); + await expect(page.locator("ods-structure")).toHaveCount(0); +}); + +/** The letter on each region, with where the region lies, left to right then top to bottom. */ +const lettersOnRegions = (page: Page) => + page.locator("ods-region-layer .outline").evaluateAll((outlines) => + outlines + .map((outline) => ({ + letter: outline.querySelector(".letter")?.textContent ?? "", + left: Math.round(outline.getBoundingClientRect().left), + top: Math.round(outline.getBoundingClientRect().top), + })) + .sort((a, b) => a.left - b.left || a.top - b.top) + .map((region) => region.letter) + ); + +const join = async ( + page: Page, + from: [number, number], + to: [number, number] +) => { + await cell(page, ...from).click(); + await cell(page, ...to).click(); +}; + +test("regions are lettered in the order they were made", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + await setNumber(page, "Columns", "4"); + + await join(page, [1, 1], [1, 2]); + await join(page, [2, 1], [2, 2]); + await join(page, [1, 3], [2, 3]); + await join(page, [1, 4], [2, 4]); + + // Read from the left: the two wide regions, then the two tall ones. + expect(await lettersOnRegions(page)).toEqual(["A", "B", "C", "D"]); +}); + +test("a region made later does not take the letter of an earlier one", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await setNumber(page, "Columns", "4"); + + await join(page, [1, 3], [2, 3]); + await join(page, [1, 1], [1, 2]); + + // The tall region was made first, so it is A even though it lies to the right. + const letters = await page + .locator("ods-region-layer .outline") + .evaluateAll((outlines) => + outlines.map((outline) => ({ + letter: outline.querySelector(".letter")?.textContent, + size: outline.querySelector(".size")?.textContent?.trim(), + })) + ); + expect(letters.slice(0, 2)).toEqual([ + { letter: "A", size: "1×2 region" }, + { letter: "B", size: "2×1 region" }, + ]); +}); + +test("a double click removes a region and frees its cells", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await join(page, [1, 1], [1, 2]); + await expect(page.locator("ods-region-layer .outline")).toHaveCount(3); + + await cell(page, 1, 1).dblclick(); + + await expect(page.locator("ods-region-layer .outline")).toHaveCount(4); +}); + +test("a region as wide as the grid is removed by a double click too", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await setNumber(page, "Columns", "4"); + await setNumber(page, "Rows", "1"); + await join(page, [1, 1], [1, 4]); + await expect(page.locator("ods-region-layer .outline")).toHaveCount(1); + await expect(page.locator("ods-region-layer .size")).toHaveText("4×1 region"); + + await cell(page, 1, 3).dblclick(); + + await expect(page.locator("ods-region-layer .outline")).toHaveCount(4); +}); + +test("a region can be of any size, a tall one beside a square one and single cells", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await setNumber(page, "Columns", "4"); + await setNumber(page, "Rows", "4"); + + await join(page, [1, 1], [4, 1]); + await join(page, [1, 2], [2, 3]); + + const sizes = await page.locator("ods-region-layer .size").allTextContents(); + const joined = sizes.map((size) => size.trim()); + expect(joined.slice(0, 2)).toEqual(["1×4 region", "2×2 region"]); + expect(joined.slice(2).every((size) => size === "1×1 region")).toBe(true); + expect(joined).toHaveLength(2 + 4 + 4); +}); + +test("the layout panel has the grid and the padding, and the snap size is gone", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + const panel = page.locator("ods-layout-panel"); + + for (const label of ["Columns", "Rows", "Gap", "Outer padding"]) { + await expect(panel.getByRole("spinbutton", { name: label })).toBeVisible(); + } + await expect(page.locator("ods-inspector")).not.toContainText("Snap size"); + await expect(page.locator("ods-inspector")).not.toContainText( + "Outer padding" + ); + + const padding = panel.getByRole("spinbutton", { name: "Outer padding" }); + await padding.fill("20"); + await padding.press("Enter"); + + await expect(page.locator(".workspace-meta")).toContainText("Padding 20px"); +}); + +const addWidgetToFirstRegion = async (page: Page) => { + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + await page + .locator("ods-library .catalog-item") + .filter({ hasText: "Sensor card" }) + .click(); + await expect(page.locator("ods-region-layer .slot.selected")).toHaveCount(1); +}; + +const borderStyleOf = (locator: Locator) => + locator.evaluate((element) => getComputedStyle(element).borderTopStyle); + +test("a click beside the regions lets go of the selected one", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await addWidgetToFirstRegion(page); + await expect(page.locator("ods-inspector")).toContainText("sensor-card_1"); + + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + + await expect(page.locator("ods-region-layer .slot.selected")).toHaveCount(0); + await expect(page.locator("ods-inspector")).not.toContainText( + "sensor-card_1" + ); + await expect(page.locator("ods-inspector")).toContainText("Dashboard"); +}); + +test("an empty region selected is let go of the same way", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + await page.locator("ods-region-layer .slot").nth(2).click(); + await expect(page.locator("ods-region-layer .slot.selected")).toHaveCount(1); + + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + + await expect(page.locator("ods-region-layer .slot.selected")).toHaveCount(0); +}); + +test("only empty regions are drawn with a dashed border", async ({ page }) => { + await createBasicDashboard(page, "Basic board"); + await addWidgetToFirstRegion(page); + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + await page.mouse.move(5, 5); + + const slots = page.locator("ods-region-layer .slot"); + await expect(slots.nth(0)).toHaveClass(/slot(?!.*empty)/); + expect(await borderStyleOf(slots.nth(0))).toBe("none"); + expect(await borderStyleOf(slots.nth(1))).toBe("dashed"); +}); + +test("a selected region with a widget is outlined, so its picture stays in view", async ({ + page, +}) => { + await createBasicDashboard(page, "Basic board"); + await addWidgetToFirstRegion(page); + + const selected = page.locator("ods-region-layer .slot.selected"); + expect(await borderStyleOf(selected)).toBe("solid"); + const tint = await selected.evaluate( + (element) => getComputedStyle(element).backgroundColor + ); + expect(tint).toBe("rgba(0, 0, 0, 0)"); +}); diff --git a/frontend-src/e2e/dashboard-library.spec.ts b/frontend-src/e2e/dashboard-library.spec.ts index 2951af1..bb451b7 100644 --- a/frontend-src/e2e/dashboard-library.spec.ts +++ b/frontend-src/e2e/dashboard-library.spec.ts @@ -327,7 +327,7 @@ test("duplicates a dashboard as Draft and edits its display settings", async ({ .click(); await expect(dialog).toHaveCount(0); await expect(duplicate).toContainText("640 × 384"); - await expect(duplicate).toContainText("Spectra 6"); + await expect(duplicate.getByRole("img", { name: /Spectra 6/ })).toBeVisible(); const update = await page.evaluate(() => window.__ODS_E2E__ @@ -483,9 +483,7 @@ test.describe("starting a dashboard from a display", () => { "Hallway display · 800 × 480", "Kitchen e-paper · 296 × 128", ]); - const summary = dialog.getByRole("group", { - name: "Dashboard size and colors", - }); + const summary = dialog.getByRole("region", { name: "Display preview" }); await expect(summary).toContainText("800 × 480 px"); await expect(summary).toContainText("Black / white / red"); @@ -539,7 +537,7 @@ test.describe("starting a dashboard from a display", () => { await displays.selectOption("eink-spectra6-13-3"); await expect( - dialog.getByRole("group", { name: "Dashboard size and colors" }) + dialog.getByRole("region", { name: "Display preview" }) ).toContainText("1200 × 1600 px"); await dialog.getByRole("textbox", { name: "Dashboard name" }).fill("Big"); await dialog.getByRole("button", { name: "Create dashboard" }).click(); @@ -642,3 +640,80 @@ test.describe("the display settings of a dashboard", () => { ).toHaveCount(0); }); }); + +test.describe("the display preview of the new dashboard dialog", () => { + const openCustomDialog = async (page: Page) => { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + await dialog.getByRole("radio", { name: /Custom size/ }).click(); + return dialog; + }; + + const display = (dialog: Locator) => + dialog.locator("ods-display-preview svg g").first(); + + test("turns the display a quarter at a time, which swaps its canvas", async ({ + page, + }) => { + const dialog = await openCustomDialog(page); + const preview = dialog.getByRole("region", { name: "Display preview" }); + await expect(preview).toContainText("800 × 480 px · 0°"); + + await dialog.getByRole("button", { name: "Turn 90° to the right" }).click(); + + await expect(preview).toContainText("480 × 800 px · 90°"); + await dialog.getByRole("button", { name: "Turn 90° to the left" }).click(); + await dialog.getByRole("button", { name: "Turn 90° to the left" }).click(); + await expect(preview).toContainText("480 × 800 px · 270°"); + }); + + test("the display leans back, swings round and settles at the new angle", async ({ + page, + }) => { + await page.emulateMedia({ reducedMotion: "no-preference" }); + const dialog = await openCustomDialog(page); + await expect(display(dialog)).toHaveAttribute("transform", /rotate\(0\)/); + + await dialog.getByRole("button", { name: "Turn 90° to the right" }).click(); + + await expect(display(dialog)).not.toHaveAttribute( + "transform", + /rotate\(90\)/ + ); + await expect(display(dialog)).toHaveAttribute("transform", /rotate\(90\)/); + }); + + test("a turned display is created turned, with the canvas it makes", async ({ + page, + }) => { + const dialog = await openCustomDialog(page); + await dialog.getByRole("textbox", { name: "Dashboard name" }).fill("Tall"); + await dialog.getByRole("button", { name: "Turn 90° to the right" }).click(); + + await dialog.getByRole("button", { name: "Create dashboard" }).click(); + + await expect(page.locator(".workspace-meta")).toContainText("480 × 800 px"); + const created = await page.evaluate( + () => + window.__ODS_E2E__ + .calls() + .findLast( + (call) => call.type === "opendisplay_studio/create_dashboard" + )?.dashboard as { display: { rotation: number } } | undefined + ); + expect(created?.display.rotation).toBe(90); + }); + + test("a basic dashboard has no padding or snapping to set here", async ({ + page, + }) => { + const dialog = await openCustomDialog(page); + await expect(dialog.getByText("Advanced display options")).toBeVisible(); + + await dialog.getByRole("radio", { name: /Basic/ }).click(); + + await expect(dialog.getByText("Advanced display options")).toHaveCount(0); + }); +}); diff --git a/frontend-src/e2e/dashboard-library.spec.ts-snapshots/new-dashboard-dialog-chromium-win32.png b/frontend-src/e2e/dashboard-library.spec.ts-snapshots/new-dashboard-dialog-chromium-win32.png index 3e1d90dd98fee70f413355d0d5988a5dda1ba16a..4aa55cbe5ef77eef6540ea0a2fd424a117c1a9c3 100644 GIT binary patch literal 34586 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 _4U$PTP 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 npx playwright test e2e/documentation-basic.spec.ts` + * where the file holds the widgets as the real renderer draws them (widget id → data URL). + */ +test.skip(!process.env.CAPTURE_DOCS, "writes the pictures of the README"); + +const IMAGES = path.join(import.meta.dirname, "..", "..", "docs", "images"); + +const widgetPictures = (): Record => { + const file = process.env.WIDGET_PICTURES; + if (!file) return {}; + return JSON.parse(readFileSync(file, "utf8")).pictures; +}; + +const picture = async (page: Page, name: string, area?: Locator) => { + const target = path.join(IMAGES, `${name}.png`); + if (!area) { + await page.screenshot({ path: target }); + return; + } + const box = await area.boundingBox(); + if (!box) throw new Error(`${name}: nothing to take a picture of`); + const margin = 12; + await page.screenshot({ + path: target, + clip: { + x: Math.max(0, box.x - margin), + y: Math.max(0, box.y - margin), + width: box.width + 2 * margin, + height: box.height + 2 * margin, + }, + }); +}; + +const cell = (page: Page, row: number, column: number) => + page.getByRole("button", { + name: `Cell in row ${row} and column ${column}`, + }); + +const setNumber = async (page: Page, label: string, value: string) => { + const field = page + .locator("ods-layout-panel") + .getByRole("spinbutton", { name: label }); + await field.fill(value); + await field.press("Enter"); +}; + +const putWidgetInRegion = async ( + page: Page, + region: number, + widget: string +) => { + await page.locator("ods-region-layer .slot").nth(region).click(); + await libraryItem(page, widget).click(); +}; + +interface SampleDashboard { + name: string; + mode: "basic" | "advanced"; + status: "draft" | "ready"; + palette: string; + background: string; + size: [number, number]; + rotation?: number; +} + +/** Every kind of color scheme there is, so the list shows each way a card can look. */ +const SAMPLES: SampleDashboard[] = [ + { + name: "Kitchen display", + mode: "advanced", + status: "ready", + palette: "bwr", + background: "white", + size: [800, 480], + }, + { + name: "Living room", + mode: "basic", + status: "draft", + palette: "spectra6", + background: "white", + size: [800, 480], + }, + { + name: "Night clock", + mode: "advanced", + status: "ready", + palette: "bwr", + background: "black", + size: [800, 480], + }, + { + name: "Photo frame", + mode: "basic", + status: "draft", + palette: "grayscale16", + background: "white", + size: [800, 480], + }, + { + name: "Door sign", + mode: "advanced", + status: "ready", + palette: "bw", + background: "white", + size: [296, 128], + }, + { + name: "Hallway panel", + mode: "advanced", + status: "ready", + palette: "bwr", + background: "white", + size: [480, 800], + rotation: 90, + }, + { + name: "Desk plate", + mode: "basic", + status: "draft", + palette: "bw", + background: "white", + size: [800, 480], + rotation: 180, + }, +]; + +test.beforeEach(async ({ page }) => { + const pictures = widgetPictures(); + await page.addInitScript((value) => { + window.__ODS_PROMO__ = { widgetPictures: value }; + }, pictures); + await page.setViewportSize({ width: 1440, height: 900 }); + await openGallery(page); +}); + +test("the list of dashboards", async ({ page }) => { + await page.addInitScript((samples) => { + const dashboards = samples.map((sample, index) => ({ + id: `sample-${index}`, + schemaVersion: 1, + name: sample.name, + mode: sample.mode, + status: sample.status, + language: "en", + display: { + profileId: "custom", + width: sample.size[0], + height: sample.size[1], + palette: sample.palette, + background: sample.background, + padding: 0, + snapSize: 5, + rotation: sample.rotation ?? 0, + deviceId: null, + }, + items: [], + createdAt: "2026-09-20T10:00:00+00:00", + updatedAt: `2026-09-${24 - index}T10:00:00+00:00`, + })); + window.__ODS_PROMO__ = { dashboards: dashboards as never }; + }, SAMPLES); + await page.reload(); + await page.getByText("Night clock").waitFor(); + + await picture(page, "basic-gallery"); +}); + +test("the basic editor, step by step", async ({ page }) => { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + await dialog.getByRole("radio", { name: /Basic/ }).click(); + await dialog.getByRole("radio", { name: /Custom size/ }).click(); + await dialog + .getByRole("textbox", { name: "Dashboard name" }) + .fill("Living room"); + await picture(page, "basic-new-dashboard", dialog); + await dialog.getByRole("button", { name: "Create dashboard" }).click(); + await page.locator("ods-region-layer").waitFor(); + + await setNumber(page, "Columns", "3"); + await setNumber(page, "Rows", "2"); + await picture(page, "basic-grid"); + + await cell(page, 1, 1).click(); + await cell(page, 1, 2).hover(); + await picture(page, "basic-join"); + await cell(page, 1, 2).click(); + await cell(page, 2, 2).click(); + await cell(page, 2, 3).click(); + await cell(page, 1, 1).click(); + await page.keyboard.press("Escape"); + // Leave the keyboard focus ring and the pointer out of the picture. + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + await page.mouse.move(5, 5); + await picture(page, "basic-regions"); + + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + await picture(page, "basic-widgets-empty"); + await putWidgetInRegion(page, 0, "Weather"); + await putWidgetInRegion(page, 1, "Calendar"); + await putWidgetInRegion(page, 2, "Thermometer"); + await putWidgetInRegion(page, 3, "Gauge"); + await page.locator("ods-region-layer .slot").nth(0).click(); + await picture(page, "basic-widgets"); + // A click beside the regions lets go of the selection: what is left is the picture itself. + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + await page.mouse.move(5, 5); + await picture(page, "basic-result"); +}); + +/** The regions of a fine grid, as pairs of corner cells (row, column) joined in this order. */ +const MANY_REGIONS: Array<[[number, number], [number, number]]> = [ + [ + [1, 1], + [2, 2], + ], + [ + [1, 3], + [1, 6], + ], + [ + [2, 3], + [2, 4], + ], + [ + [2, 5], + [4, 5], + ], + [ + [2, 6], + [3, 6], + ], + [ + [3, 1], + [3, 4], + ], + [ + [4, 1], + [4, 2], + ], +]; + +test("a grid with as many regions as you like", async ({ page }) => { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + await dialog.getByRole("radio", { name: /Basic/ }).click(); + await dialog.getByRole("radio", { name: /Custom size/ }).click(); + await dialog + .getByRole("textbox", { name: "Dashboard name" }) + .fill("Control room"); + await dialog.getByRole("button", { name: "Create dashboard" }).click(); + await page.locator("ods-region-layer").waitFor(); + + await setNumber(page, "Columns", "6"); + await setNumber(page, "Rows", "4"); + for (const [from, to] of MANY_REGIONS) { + await cell(page, ...from).click(); + await cell(page, ...to).click(); + } + await page.getByRole("button", { name: "Widgets", exact: true }).click(); + await page.locator(".canvas-stage").click({ position: { x: 20, y: 20 } }); + await page.mouse.move(5, 5); + await picture(page, "basic-many-regions"); +}); + +test("the new dashboard dialog, with the display turned", async ({ page }) => { + await page + .getByRole("button", { name: "New dashboard", exact: true }) + .click(); + const dialog = page.getByRole("dialog", { name: "New dashboard" }); + await dialog + .getByRole("textbox", { name: "Dashboard name" }) + .fill("Hallway panel"); + await dialog.getByRole("button", { name: "Turn 90° to the right" }).click(); + // Wait for the turn to settle: it leans back, swings round and comes to rest. + await page.waitForTimeout(1200); + await picture(page, "new-dashboard", dialog); +}); diff --git a/frontend-src/e2e/elements.spec.ts b/frontend-src/e2e/elements.spec.ts index e70a11d..3da602c 100644 --- a/frontend-src/e2e/elements.spec.ts +++ b/frontend-src/e2e/elements.spec.ts @@ -843,10 +843,10 @@ test.describe("rotation and sending to a device", () => { .click(); const dialog = page.getByRole("dialog", { name: "New dashboard" }); - await dialog.getByRole("combobox", { name: "Rotation" }).selectOption("90"); + await dialog.getByRole("button", { name: "Turn 90° to the right" }).click(); await expect( - dialog.getByRole("group", { name: "Dashboard size and colors" }) + dialog.getByRole("region", { name: "Display preview" }) ).toContainText("480 × 800 px"); await dialog.getByRole("textbox", { name: "Dashboard name" }).fill("Tall"); await dialog.getByRole("button", { name: "Create dashboard" }).click(); diff --git a/frontend-src/src/basic-ops.test.ts b/frontend-src/src/basic-ops.test.ts new file mode 100644 index 0000000..8989297 --- /dev/null +++ b/frontend-src/src/basic-ops.test.ts @@ -0,0 +1,140 @@ +import { describe, expect, it } from "vitest"; +import { + mergeRegionsIn, + occupiedRegionIds, + placeWidget, + regionForNewWidget, + resizeGridIn, + splitRegionIn, + widgetInRegion, + withMode, +} from "./basic-ops"; +import { rectangleBetween } from "./grid-layout"; +import { dashboardWith, widgetDefinition } from "./test-support"; +import type { Dashboard, GridLayout } from "./types"; + +const FRAME = { x: 0, y: 0, width: 100, height: 50 }; + +const basicDashboard = (): Dashboard => withMode(dashboardWith(), "basic", 8); + +const layoutOf = (dashboard: Dashboard): GridLayout => { + if (!dashboard.layout) throw new Error("The dashboard has no layout"); + return dashboard.layout; +}; + +const fill = (dashboard: Dashboard, regionId: string): void => { + const region = layoutOf(dashboard).regions.find((r) => r.id === regionId); + if (!region) throw new Error("No such region"); + placeWidget(dashboard, widgetDefinition("sensor-card"), region, FRAME); +}; + +describe("withMode", () => { + it("starts a basic dashboard with a grid of single-cell regions", () => { + const dashboard = basicDashboard(); + + expect(dashboard.mode).toBe("basic"); + expect(layoutOf(dashboard).regions).toHaveLength(4); + expect(layoutOf(dashboard).gap).toBe(8); + }); + + it("leaves an advanced dashboard without a layout", () => { + const dashboard = withMode(basicDashboard(), "advanced", 8); + + expect(dashboard.mode).toBe("advanced"); + expect(dashboard.layout).toBeUndefined(); + }); +}); + +describe("placeWidget", () => { + it("fills a region with a widget that takes the region's frame", () => { + const dashboard = basicDashboard(); + const [first] = layoutOf(dashboard).regions; + + const widget = placeWidget( + dashboard, + widgetDefinition("sensor-card"), + first, + FRAME + ); + + expect(widget.region).toBe(first.id); + expect(widget.frame).toEqual(FRAME); + expect(widgetInRegion(dashboard, first.id)).toBe(widget); + }); +}); + +describe("regionForNewWidget", () => { + it("prefers the chosen region while it is free", () => { + const dashboard = basicDashboard(); + const layout = layoutOf(dashboard); + + const region = regionForNewWidget(dashboard, layout, layout.regions[2].id); + + expect(region?.id).toBe(layout.regions[2].id); + }); + + it("falls back to the first free region when the chosen one is taken", () => { + const dashboard = basicDashboard(); + const layout = layoutOf(dashboard); + fill(dashboard, layout.regions[0].id); + + const region = regionForNewWidget(dashboard, layout, layout.regions[0].id); + + expect(region?.id).toBe(layout.regions[1].id); + }); + + it("finds nothing when every region holds a widget", () => { + const dashboard = basicDashboard(); + const layout = layoutOf(dashboard); + layout.regions.forEach((region) => fill(dashboard, region.id)); + + expect(regionForNewWidget(dashboard, layout, "")).toBeUndefined(); + }); +}); + +describe("mergeRegionsIn", () => { + it("releases the widget of a region that is joined into another one", () => { + const dashboard = basicDashboard(); + const [first, second] = layoutOf(dashboard).regions; + fill(dashboard, second.id); + + mergeRegionsIn( + dashboard, + rectangleBetween({ row: 0, column: 0 }, { row: 0, column: 1 }) + ); + + expect(occupiedRegionIds(dashboard)).toEqual(new Set([second.id])); + expect(layoutOf(dashboard).regions.some((r) => r.id === first.id)).toBe( + false + ); + }); +}); + +describe("splitRegionIn", () => { + it("keeps the widget in the first cell of the region it was cut from", () => { + const dashboard = basicDashboard(); + mergeRegionsIn( + dashboard, + rectangleBetween({ row: 0, column: 0 }, { row: 1, column: 1 }) + ); + const [whole] = layoutOf(dashboard).regions; + fill(dashboard, whole.id); + + splitRegionIn(dashboard, whole.id); + + expect(layoutOf(dashboard).regions).toHaveLength(4); + expect(widgetInRegion(dashboard, whole.id)).toBeDefined(); + }); +}); + +describe("resizeGridIn", () => { + it("removes the widgets of the regions the smaller grid no longer has", () => { + const dashboard = basicDashboard(); + layoutOf(dashboard).regions.forEach((region) => fill(dashboard, region.id)); + + resizeGridIn(dashboard, { columns: 1, rows: 1 }); + + expect(dashboard.items).toHaveLength(1); + expect(layoutOf(dashboard).regions).toHaveLength(1); + }); +}); diff --git a/frontend-src/src/basic-ops.ts b/frontend-src/src/basic-ops.ts new file mode 100644 index 0000000..ddf7547 --- /dev/null +++ b/frontend-src/src/basic-ops.ts @@ -0,0 +1,117 @@ +import { createWidgetItem } from "./dashboard-ops"; +import { + evenLayout, + mergeRegions, + resizeGrid, + splitRegion, + type CellRectangle, + type LayoutChange, +} from "./grid-layout"; +import type { + Dashboard, + GridLayout, + GridRegion, + ItemFrame, + StudioItem, + WidgetDefinition, + WidgetItem, +} from "./types"; + +/** What a new basic dashboard starts with: a grid of four cells. */ +export const STARTING_COLUMNS = 2; +export const STARTING_ROWS = 2; + +/** A dashboard of the basic editor, started with its grid, or an advanced one without. */ +export const withMode = ( + dashboard: Dashboard, + mode: Dashboard["mode"], + gap: number +): Dashboard => { + const next = structuredClone(dashboard); + next.mode = mode; + if (mode === "basic") { + next.layout = evenLayout(STARTING_COLUMNS, STARTING_ROWS, gap); + } else { + delete next.layout; + } + return next; +}; + +/** Every widget of a basic dashboard holds one region; the rest of its items are none. */ +export const widgetsOf = (dashboard: Dashboard): WidgetItem[] => + dashboard.items.filter((item): item is WidgetItem => item.kind === "widget"); + +export const widgetInRegion = ( + dashboard: Dashboard, + regionId: string +): WidgetItem | undefined => + widgetsOf(dashboard).find((widget) => widget.region === regionId); + +export const occupiedRegionIds = (dashboard: Dashboard): Set => + new Set(widgetsOf(dashboard).flatMap((widget) => widget.region ?? [])); + +/** The region a new widget goes to: the chosen one if it is free, else the first free one. */ +export const regionForNewWidget = ( + dashboard: Dashboard, + layout: GridLayout, + chosenRegionId: string +): GridRegion | undefined => { + const occupied = occupiedRegionIds(dashboard); + const free = layout.regions.filter((region) => !occupied.has(region.id)); + return free.find((region) => region.id === chosenRegionId) ?? free[0]; +}; + +/** Puts a new widget of the given kind into a region, as the last item of the dashboard. */ +export const placeWidget = ( + dashboard: Dashboard, + definition: WidgetDefinition, + region: GridRegion, + frame: ItemFrame +): WidgetItem => { + const widget = createWidgetItem(definition, 0, 0, dashboard); + widget.region = region.id; + widget.frame = { ...frame }; + dashboard.items.push(widget); + return widget; +}; + +const withoutWidgetsIn = ( + items: StudioItem[], + regionIds: string[] +): StudioItem[] => + items.filter( + (item) => item.kind !== "widget" || !regionIds.includes(item.region ?? "") + ); + +/** Replaces the layout and takes away the widgets of the regions the change removed. */ +const applyChange = (dashboard: Dashboard, change: LayoutChange): void => { + dashboard.layout = change.layout; + dashboard.items = withoutWidgetsIn(dashboard.items, change.removedRegionIds); +}; + +export const mergeRegionsIn = ( + dashboard: Dashboard, + rectangle: CellRectangle +): void => { + if (!dashboard.layout) return; + const occupied = occupiedRegionIds(dashboard); + applyChange(dashboard, mergeRegions(dashboard.layout, rectangle, occupied)); +}; + +export const splitRegionIn = (dashboard: Dashboard, regionId: string): void => { + if (!dashboard.layout) return; + dashboard.layout = splitRegion(dashboard.layout, regionId); +}; + +export const resizeGridIn = ( + dashboard: Dashboard, + size: { columns: number; rows: number } +): void => { + if (!dashboard.layout) return; + applyChange(dashboard, resizeGrid(dashboard.layout, size.columns, size.rows)); +}; + +export const setGapIn = (dashboard: Dashboard, gap: number): void => { + if (!dashboard.layout) return; + dashboard.layout = { ...dashboard.layout, gap }; +}; diff --git a/frontend-src/src/commands.ts b/frontend-src/src/commands.ts index 7cba595..cbea485 100644 --- a/frontend-src/src/commands.ts +++ b/frontend-src/src/commands.ts @@ -70,6 +70,8 @@ export interface CommandContext { canPaste?: boolean; /** Whether the dashboard has unsaved changes. */ dirty?: boolean; + /** Whether the dashboard is edited by regions, which leaves out most editing commands. */ + basic?: boolean; } /** The effects a command can have; the shell provides them. */ @@ -240,7 +242,7 @@ const distributeCommands = (): Command[] => }) ); -export const COMMANDS: Command[] = [ +const EDITOR_COMMANDS: Command[] = [ { id: "undo", group: "history", @@ -513,6 +515,33 @@ export const COMMANDS: Command[] = [ }, ]; +/** + * What a basic dashboard still allows. The rest moves, copies or regroups elements, and + * in a basic dashboard a widget goes where its region is and nowhere else. + */ +const BASIC_COMMAND_IDS: ReadonlySet = new Set([ + "undo", + "redo", + "delete-item", + "deselect", + "save", + "toggle-code", + "zoom-in", + "zoom-out", + "zoom-reset", + "show-shortcuts", +]); + +const forDashboardMode = (command: Command): Command => { + if (BASIC_COMMAND_IDS.has(command.id)) return command; + return { + ...command, + isEnabled: (context) => !context.basic && command.isEnabled(context), + }; +}; + +export const COMMANDS: Command[] = EDITOR_COMMANDS.map(forDashboardMode); + /** Whether a string is the id of a registered command. */ export const isCommandId = (id: string): id is CommandId => COMMANDS.some((command) => command.id === id); diff --git a/frontend-src/src/dashboards.ts b/frontend-src/src/dashboards.ts index 88e4927..8f014de 100644 --- a/frontend-src/src/dashboards.ts +++ b/frontend-src/src/dashboards.ts @@ -20,6 +20,15 @@ export type DashboardSource = "device" | "preset" | "custom"; export const ROTATIONS: Rotation[] = [0, 90, 180, 270]; +/** The rotation a quarter turn to the right (1) or to the left (-1) leads to. */ +export const turnedRotation = ( + rotation: Rotation, + direction: 1 | -1 +): Rotation => { + const index = ROTATIONS.indexOf(rotation); + return ROTATIONS[(index + direction + ROTATIONS.length) % ROTATIONS.length]; +}; + export const isRotation = (value: number): value is Rotation => ROTATIONS.some((rotation) => rotation === value); @@ -74,6 +83,7 @@ export const freshDashboard = ( id: "", schemaVersion: 1, name: "", + mode: "advanced", status: "draft", language: language || "en", display: { @@ -280,7 +290,7 @@ const pixelField = (name: string, label: string): StudioFormSchema => ({ }, }); -const sizeFields = (): StudioFormSchema[] => [ +export const sizeFields = (): StudioFormSchema[] => [ { name: "dimensions", type: "grid", @@ -292,7 +302,7 @@ const sizeFields = (): StudioFormSchema[] => [ }, ]; -const paletteFields = (palettes: PaletteId[]): StudioFormSchema[] => [ +export const paletteFields = (palettes: PaletteId[]): StudioFormSchema[] => [ { name: "palette", label: strings.fields.palette, @@ -343,7 +353,7 @@ const rotationFields = (): StudioFormSchema[] => [ }, ]; -const advancedFields = (): StudioFormSchema[] => [ +export const advancedFields = (): StudioFormSchema[] => [ { name: "advanced", type: "expandable", @@ -369,16 +379,20 @@ const advancedFields = (): StudioFormSchema[] => [ }, ]; -/** The `ha-form` schema shared by the create and display-settings dialogs. */ -export const dashboardFormSchema = ( - display: DisplayFields = ALL_DISPLAY_FIELDS -): StudioFormSchema[] => [ +export const nameFields = (): StudioFormSchema[] => [ { name: "name", label: strings.fields.name, required: true, selector: { text: {} }, }, +]; + +/** The `ha-form` schema shared by the create and display-settings dialogs. */ +export const dashboardFormSchema = ( + display: DisplayFields = ALL_DISPLAY_FIELDS +): StudioFormSchema[] => [ + ...nameFields(), ...(display.size ? sizeFields() : []), ...(display.palettes.length > 1 ? paletteFields(display.palettes) : []), ...(display.backgrounds.length > 0 diff --git a/frontend-src/src/dev-layout.ts b/frontend-src/src/dev-layout.ts new file mode 100644 index 0000000..d29e212 --- /dev/null +++ b/frontend-src/src/dev-layout.ts @@ -0,0 +1,80 @@ +import type { Dashboard, ItemFrame, LayoutFrames } from "./types"; + +/** + * The harness's stand-in for the backend's grid: the same split as the SDK's `grid()`, so + * what the panel shows in the harness has the numbers the real backend gives. + */ + +/** Python rounds halves to the even number; so does the backend's split. */ +const roundHalfEven = (value: number): number => { + const floor = Math.floor(value); + const difference = value - floor; + if (difference !== 0.5) return Math.round(value); + return floor % 2 === 0 ? floor : floor + 1; +}; + +const splitLine = ( + total: number, + count: number, + gap: number +): Array<{ offset: number; length: number }> => { + const available = Math.max(count, total - gap * (count - 1)); + const spans: Array<{ offset: number; length: number }> = []; + let start = 0; + for (let index = 0; index < count; index += 1) { + const end = roundHalfEven((available * (index + 1)) / count); + spans.push({ + offset: start + gap * index, + length: Math.max(1, end - start), + }); + start = end; + } + return spans; +}; + +export const mockLayoutFrames = (dashboard: Dashboard): LayoutFrames => { + const layout = dashboard.layout; + if (!layout) return { cells: [], regions: [] }; + const { width, height, padding } = dashboard.display; + const columns = splitLine(width - 2 * padding, layout.columns, layout.gap); + const rows = splitLine(height - 2 * padding, layout.rows, layout.gap); + const cells: ItemFrame[] = rows.flatMap((row) => + columns.map((column) => ({ + x: padding + column.offset, + y: padding + row.offset, + width: column.length, + height: row.length, + })) + ); + const regions = layout.regions.map((region) => { + const first = cells[region.row * layout.columns + region.column]; + const last = + cells[ + (region.row + region.rowSpan - 1) * layout.columns + + region.column + + region.columnSpan - + 1 + ]; + return { + id: region.id, + x: first.x, + y: first.y, + width: last.x + last.width - first.x, + height: last.y + last.height - first.y, + }; + }); + return { cells, regions }; +}; + +/** The dashboard with every widget in the frame of its region, as the backend does. */ +export const withRegionFrames = (dashboard: Dashboard): Dashboard => { + if (dashboard.mode !== "basic") return dashboard; + const { regions } = mockLayoutFrames(dashboard); + const placed = structuredClone(dashboard); + for (const item of placed.items) { + if (item.kind !== "widget") continue; + const frame = regions.find((region) => region.id === item.region); + if (frame) item.frame = { ...frame }; + } + return placed; +}; diff --git a/frontend-src/src/dev.ts b/frontend-src/src/dev.ts index 31ca0a5..efe87a6 100644 --- a/frontend-src/src/dev.ts +++ b/frontend-src/src/dev.ts @@ -10,6 +10,7 @@ import robotoThin from "@fontsource/roboto/files/roboto-latin-100-normal.woff2?u import robotoBlack from "@fontsource/roboto/files/roboto-latin-900-normal.woff2?url"; import robotoMonoBold from "@fontsource/roboto-mono/files/roboto-mono-latin-700-normal.woff2?url"; import robotoMono from "@fontsource/roboto-mono/files/roboto-mono-latin-400-normal.woff2?url"; +import { mockLayoutFrames, withRegionFrames } from "./dev-layout"; import { createId } from "./ids"; import { PALETTE_COLORS, PALETTE_IDS } from "./palettes"; import { loadPrimitiveDefinitions } from "./primitive-definitions"; @@ -30,6 +31,8 @@ import type { Primitive, PrimitiveItem, StudioItem, + WidgetItem, + GridLayout, } from "./types"; const primitiveDefinitions = loadPrimitiveDefinitions(); @@ -570,6 +573,7 @@ const demoDashboard: Dashboard = { id: "demo", schemaVersion: 1, name: "Kitchen display", + mode: "advanced", status: "draft", language: "en", display: { @@ -608,6 +612,7 @@ const hallwayDashboard: Dashboard = { id: "hallway", schemaVersion: 1, name: "Hallway overview", + mode: "advanced", status: "ready", language: "en", display: { @@ -739,6 +744,7 @@ const officeDashboard: Dashboard = { id: "office", schemaVersion: 1, name: "Office status", + mode: "advanced", status: "draft", language: "en", display: { @@ -771,13 +777,38 @@ interface PromoHooks { bounds?: Record; /** Where the renderer turned each rotated primitive about. */ pivots?: Record; + /** A widget as the renderer drew it, by widget type, to show in a basic dashboard's region. */ + widgetPictures?: Record; } const promo = window.__ODS_PROMO__; +const widgetPlacement = (item: WidgetItem): string => { + const { x, y, width, height } = item.frame; + const box = `x="${x}" y="${y}" width="${width}" height="${height}"`; + const picture = promo?.widgetPictures?.[item.widget.type]; + if (picture) return ``; + const label = `x="${x + width / 2}" y="${y + height / 2}" text-anchor="middle"`; + return [ + ``, + `${item.widget.type}`, + ].join(""); +}; + +/** A basic dashboard: the background, and a widget in each region that has one. */ +const basicPreview = (dashboard: Dashboard): string => { + const { width, height, background } = dashboard.display; + const widgets = withRegionFrames(dashboard).items.flatMap((item) => + item.kind === "widget" ? [widgetPlacement(item)] : [] + ); + const svg = `${widgets.join("")}`; + return `data:image/svg+xml,${encodeURIComponent(svg)}`; +}; + const preview = (dashboard: Dashboard): string => { const promoImage = promo?.images?.[dashboard.id]; if (promoImage) return promoImage; + if (dashboard.mode === "basic") return basicPreview(dashboard); const { width, height } = dashboard.display; const svg = `${dashboard.items.length ? "Kitchen" : ""}21.4 °C`; return `data:image/svg+xml,${encodeURIComponent(svg)}`; @@ -952,7 +983,7 @@ const preparedImport = (message: Record): unknown => { const itemBounds = (dashboard: Dashboard): Record => { const result: Record = {}; - collectBounds(dashboard.items, { x: 0, y: 0 }, result); + collectBounds(withRegionFrames(dashboard).items, { x: 0, y: 0 }, result); return result; }; @@ -1140,6 +1171,9 @@ const deleteMockFont = (message: Record): Promise => { return Promise.resolve({ fonts: describeFonts() }); }; +/** What the backend tells the panel a grid may be; the same numbers as `basic_layout.py`. */ +const LAYOUT_LIMITS = { minLines: 1, maxLines: 12, defaultGap: 8, maxGap: 64 }; + /** `?lang=pl` shows the panel in another language, to look at a translation. */ const language = new URLSearchParams(window.location.search).get("lang") ?? "en"; @@ -1182,8 +1216,19 @@ const hass: HomeAssistant = { widgetErrors: widgetErrors(), primitives: primitiveDefinitions, fonts: describeFonts(), + layoutLimits: LAYOUT_LIMITS, } as T; } + if (message.type === "opendisplay_studio/layout_frames") { + const { width, height, padding, layout } = message as unknown as { + width: number; + height: number; + padding: number; + layout: GridLayout; + }; + const display = { ...demoDashboard.display, width, height, padding }; + return mockLayoutFrames({ ...demoDashboard, display, layout }) as T; + } if (message.type === "opendisplay_studio/list_fonts") { return { fonts: describeFonts() } as T; } diff --git a/frontend-src/src/display-shape.test.ts b/frontend-src/src/display-shape.test.ts new file mode 100644 index 0000000..14100de --- /dev/null +++ b/frontend-src/src/display-shape.test.ts @@ -0,0 +1,83 @@ +import { describe, expect, it } from "vitest"; +import { displayShape, fitScale, inkView } from "./display-shape"; + +const BOX = { width: 240, height: 92 }; + +describe("displayShape", () => { + it("keeps the proportions of the device as it is built", () => { + const shape = displayShape({ width: 800, height: 480, rotation: 0 }, BOX); + + expect(shape.screen.width / shape.screen.height).toBeCloseTo(800 / 480); + }); + + it("fits the box, housing included", () => { + const wide = displayShape({ width: 1200, height: 100, rotation: 0 }, BOX); + const tall = displayShape({ width: 100, height: 1200, rotation: 0 }, BOX); + + expect(wide.housing.width).toBeLessThanOrEqual(BOX.width); + expect(tall.housing.height).toBeLessThanOrEqual(BOX.height); + }); + + it("builds a display turned a quarter as the wide device it is", () => { + const portrait = displayShape( + { width: 480, height: 800, rotation: 90 }, + BOX + ); + const landscape = displayShape( + { width: 800, height: 480, rotation: 0 }, + BOX + ); + + expect(portrait.housing).toEqual(landscape.housing); + }); +}); + +describe("fitScale", () => { + const shape = displayShape({ width: 800, height: 480, rotation: 0 }, BOX); + + it("does not shrink a device that is level or upside down", () => { + expect(fitScale(shape.housing, 0, BOX)).toBeCloseTo(1); + expect(fitScale(shape.housing, 180, BOX)).toBeCloseTo(1); + }); + + it("shrinks a wide device turned on its side to the height of the box", () => { + const scale = fitScale(shape.housing, 90, BOX); + + expect(scale).toBeLessThan(1); + expect(shape.housing.width * scale).toBeCloseTo(BOX.height); + }); + + it("shrinks it most between the two", () => { + expect(fitScale(shape.housing, 45, BOX)).toBeLessThan( + fitScale(shape.housing, 90, BOX) + ); + }); +}); + +describe("inkView", () => { + const screen = { width: 160, height: 90 }; + + it("is the screen itself when it is level or upside down", () => { + for (const degrees of [0, 180]) { + const view = inkView(screen, degrees); + expect(view.width).toBeCloseTo(screen.width); + expect(view.height).toBeCloseTo(screen.height); + } + }); + + it("is the screen on its side when it is turned a quarter", () => { + for (const degrees of [90, 270]) { + const view = inkView(screen, degrees); + expect(view.width).toBeCloseTo(screen.height); + expect(view.height).toBeCloseTo(screen.width); + } + }); + + it("always fits inside the screen, even halfway round", () => { + const view = inkView(screen, 45); + const reach = (view.width + view.height) * Math.SQRT1_2; + + expect(reach).toBeLessThanOrEqual(screen.width + 0.001); + expect(reach).toBeLessThanOrEqual(screen.width); + }); +}); diff --git a/frontend-src/src/display-shape.ts b/frontend-src/src/display-shape.ts new file mode 100644 index 0000000..33af0b3 --- /dev/null +++ b/frontend-src/src/display-shape.ts @@ -0,0 +1,96 @@ +import type { Rotation } from "./types"; + +export interface Size { + width: number; + height: number; +} + +/** + * A display drawn for a picture: its housing and its screen as the device is built, before + * it is turned. All sizes are in the units of the box it was fitted into. + */ +export interface DisplayShape { + housing: Size; + screen: Size; + bezel: number; +} + +const BEZEL_RATIO = 0.03; +const MIN_BEZEL = 2.5; +const MAX_BEZEL = 5; + +const clamp = (value: number, low: number, high: number): number => + Math.min(high, Math.max(low, value)); + +const isSideways = (turn: Rotation): boolean => turn === 90 || turn === 270; + +const asBuilt = (size: Size, turn: Rotation): Size => + isSideways(turn) ? { width: size.height, height: size.width } : size; + +/** + * The display as the device is built, as large as the box takes it. `display` is the + * canvas of the dashboard, so a display turned a quarter is already taller than it is wide; + * the device itself is wider, and turning it is what makes the canvas. + */ +export const displayShape = ( + display: Size & { rotation: Rotation }, + box: Size +): DisplayShape => { + const built = asBuilt(display, display.rotation); + const bezel = clamp( + Math.min(box.width, box.height) * BEZEL_RATIO, + MIN_BEZEL, + MAX_BEZEL + ); + const scale = Math.min( + (box.width - 2 * bezel) / built.width, + (box.height - 2 * bezel) / built.height + ); + const screen = { width: built.width * scale, height: built.height * scale }; + return { + housing: { + width: screen.width + 2 * bezel, + height: screen.height + 2 * bezel, + }, + screen, + bezel, + }; +}; + +const radians = (degrees: number): number => (degrees * Math.PI) / 180; + +/** The size of the smallest upright box around a box turned by `degrees`. */ +const turnedBounds = (size: Size, degrees: number): Size => { + const cos = Math.abs(Math.cos(radians(degrees))); + const sin = Math.abs(Math.sin(radians(degrees))); + return { + width: size.width * cos + size.height * sin, + height: size.width * sin + size.height * cos, + }; +}; + +/** + * How much a device turned by `degrees` is shrunk to stay inside the box: not at all when + * it is level or upside down, and the most when it is halfway between. + */ +export const fitScale = (housing: Size, degrees: number, box: Size): number => { + const bounds = turnedBounds(housing, degrees); + return Math.min(1, box.width / bounds.width, box.height / bounds.height); +}; + +/** + * The largest upright box that fits inside a screen turned by `degrees`. The picture on the + * screen is drawn in it, so the content stays upright and inside the screen all the way + * round: it is the screen's own size when level, and the screen turned on its side at 90°. + */ +export const inkView = (screen: Size, degrees: number): Size => { + const cos = Math.abs(Math.cos(radians(degrees))); + const sin = Math.abs(Math.sin(radians(degrees))); + const bounds = turnedBounds(screen, degrees); + const aspect = bounds.width / bounds.height; + const width = Math.min( + screen.width / (cos + sin / aspect), + screen.height / (sin + cos / aspect) + ); + return { width, height: width / aspect }; +}; diff --git a/frontend-src/src/events.ts b/frontend-src/src/events.ts index 7159ea9..d02c612 100644 --- a/frontend-src/src/events.ts +++ b/frontend-src/src/events.ts @@ -1,10 +1,13 @@ import type { AlignTarget } from "./align-selection"; import type { CommandId } from "./commands"; import type { DashboardFormData, DashboardSource } from "./dashboards"; -import type { Dashboard, StudioItem, WidgetPick } from "./types"; +import type { CellRectangle } from "./grid-layout"; +import type { Dashboard, DashboardMode, StudioItem, WidgetPick } from "./types"; import type { Viewport } from "./viewport"; export type EditorView = "dashboards" | "design" | "code" | "settings"; +/** The two tabs of the basic editor: cut the screen into regions, then fill them. */ +export type BasicStep = "layout" | "widgets"; export type DashboardAction = "rename" | "duplicate" | "settings" | "delete"; export type DashboardDialog = Exclude; @@ -30,6 +33,7 @@ export interface OdsEventMap { "new-dashboard-change": { value: Partial }; "new-dashboard-close": undefined; "new-dashboard-source": { source: DashboardSource }; + "new-dashboard-mode": { mode: DashboardMode }; "new-dashboard-device": { deviceId: string }; "new-dashboard-profile": { profileId: string }; "dashboard-create": undefined; @@ -93,6 +97,13 @@ export interface OdsEventMap { "zoom-step": { direction: 1 | -1 }; "zoom-reset": undefined; "zoom-fit": undefined; + // basic editor + "basic-step-change": { step: BasicStep }; + "region-select": { regionId: string }; + /** Two cells were chosen; the regions between them are to become one. */ + "regions-merge": { rectangle: CellRectangle }; + "region-split": { regionId: string }; + "grid-change": { columns?: number; rows?: number; gap?: number }; // structure and inspector "layers-reorder": { itemId: string; diff --git a/frontend-src/src/grid-layout.test.ts b/frontend-src/src/grid-layout.test.ts new file mode 100644 index 0000000..dec3604 --- /dev/null +++ b/frontend-src/src/grid-layout.test.ts @@ -0,0 +1,258 @@ +import { describe, expect, it } from "vitest"; +import { + canMerge, + cellsOf, + evenLayout, + mergeRegions, + rectangleBetween, + regionAt, + regionIdAtPoint, + regionLetter, + regionsIn, + resizeGrid, + splitRegion, +} from "./grid-layout"; + +const ids = (regions: { id: string }[]): string[] => + regions.map((region) => region.id); + +describe("evenLayout", () => { + it("gives every cell a region of its own, in reading order", () => { + const layout = evenLayout(3, 2, 8); + + expect(layout.regions).toHaveLength(6); + expect(layout.regions.map((r) => [r.row, r.column])).toEqual([ + [0, 0], + [0, 1], + [0, 2], + [1, 0], + [1, 1], + [1, 2], + ]); + expect(new Set(ids(layout.regions)).size).toBe(6); + }); +}); + +describe("rectangleBetween", () => { + it("is the same whichever corner is given first", () => { + const forwards = rectangleBetween( + { row: 0, column: 1 }, + { row: 1, column: 2 } + ); + const backwards = rectangleBetween( + { row: 1, column: 2 }, + { row: 0, column: 1 } + ); + + expect(forwards).toEqual({ row: 0, column: 1, rowSpan: 2, columnSpan: 2 }); + expect(backwards).toEqual(forwards); + }); +}); + +describe("mergeRegions", () => { + it("joins the regions in a rectangle into one that covers all their cells", () => { + const layout = evenLayout(2, 2, 8); + const rectangle = rectangleBetween( + { row: 0, column: 0 }, + { row: 0, column: 1 } + ); + + const { layout: merged, removedRegionIds } = mergeRegions( + layout, + rectangle, + new Set() + ); + + expect(merged.regions).toHaveLength(3); + expect(regionAt(merged, { row: 0, column: 1 })).toEqual( + regionAt(merged, { row: 0, column: 0 }) + ); + expect(removedRegionIds).toHaveLength(1); + }); + + it("keeps the region that holds a widget and releases the others", () => { + const layout = evenLayout(2, 1, 8); + const second = layout.regions[1].id; + const rectangle = rectangleBetween( + { row: 0, column: 0 }, + { row: 0, column: 1 } + ); + + const { layout: merged, removedRegionIds } = mergeRegions( + layout, + rectangle, + new Set([second]) + ); + + expect(ids(merged.regions)).toEqual([second]); + expect(removedRegionIds).toEqual([layout.regions[0].id]); + }); + + it("refuses a rectangle that would cut a larger region in two", () => { + const wide = mergeRegions( + evenLayout(3, 1, 8), + rectangleBetween({ row: 0, column: 0 }, { row: 0, column: 1 }), + new Set() + ).layout; + + const cutting = rectangleBetween( + { row: 0, column: 1 }, + { row: 0, column: 2 } + ); + + expect(canMerge(wide, cutting)).toBe(false); + expect( + canMerge( + wide, + rectangleBetween({ row: 0, column: 0 }, { row: 0, column: 2 }) + ) + ).toBe(true); + }); + + it("does not merge a single cell with itself", () => { + const layout = evenLayout(2, 2, 8); + + expect( + canMerge( + layout, + rectangleBetween({ row: 1, column: 1 }, { row: 1, column: 1 }) + ) + ).toBe(false); + }); +}); + +describe("splitRegion", () => { + it("cuts a region back into cells and leaves its id on the first one", () => { + const layout = evenLayout(2, 2, 8); + const merged = mergeRegions( + layout, + rectangleBetween({ row: 0, column: 0 }, { row: 1, column: 1 }), + new Set() + ).layout; + const [only] = merged.regions; + + const split = splitRegion(merged, only.id); + + expect(split.regions).toHaveLength(4); + expect(regionAt(split, { row: 0, column: 0 })?.id).toBe(only.id); + expect( + split.regions.every((r) => r.rowSpan === 1 && r.columnSpan === 1) + ).toBe(true); + }); +}); + +describe("resizeGrid", () => { + it("keeps the regions that still fit and fills the new cells", () => { + const layout = evenLayout(2, 2, 8); + + const { layout: grown, removedRegionIds } = resizeGrid(layout, 3, 2); + + expect(grown.regions).toHaveLength(6); + expect(removedRegionIds).toEqual([]); + expect(ids(grown.regions)).toEqual( + expect.arrayContaining(ids(layout.regions)) + ); + }); + + it("takes away the regions the new edge would cut", () => { + const merged = mergeRegions( + evenLayout(2, 1, 8), + rectangleBetween({ row: 0, column: 0 }, { row: 0, column: 1 }), + new Set() + ).layout; + + const { layout: shrunk, removedRegionIds } = resizeGrid(merged, 1, 1); + + expect(removedRegionIds).toEqual([merged.regions[0].id]); + expect(shrunk.regions).toHaveLength(1); + expect(cellsOf(shrunk.regions[0])).toEqual([{ row: 0, column: 0 }]); + }); + + it("covers every cell of the new grid exactly once", () => { + const { layout } = resizeGrid(evenLayout(3, 3, 8), 2, 4); + + const covered = layout.regions.flatMap((region) => cellsOf(region)); + expect(covered).toHaveLength(8); + expect( + regionsIn(layout, { row: 0, column: 0, rowSpan: 4, columnSpan: 2 }) + ).toHaveLength(8); + }); +}); + +describe("regionIdAtPoint", () => { + const frames = { + cells: [], + regions: [ + { id: "left", x: 0, y: 0, width: 100, height: 100 }, + { id: "right", x: 108, y: 0, width: 100, height: 100 }, + ], + }; + + it("finds the region a point lies in", () => { + expect(regionIdAtPoint(frames, { x: 150, y: 50 })).toBe("right"); + }); + + it("finds nothing in the gap between regions", () => { + expect(regionIdAtPoint(frames, { x: 104, y: 50 })).toBeUndefined(); + }); +}); + +describe("regionLetter", () => { + it("names regions A to Z and then AA, AB …", () => { + expect(regionLetter(0)).toBe("A"); + expect(regionLetter(25)).toBe("Z"); + expect(regionLetter(26)).toBe("AA"); + expect(regionLetter(27)).toBe("AB"); + expect(regionLetter(51)).toBe("AZ"); + expect(regionLetter(52)).toBe("BA"); + }); +}); + +describe("the order regions are named in", () => { + type Layout = ReturnType; + type Corner = [number, number]; + + const join = (layout: Layout, from: Corner, to: Corner) => + mergeRegions( + layout, + rectangleBetween( + { row: from[0], column: from[1] }, + { row: to[0], column: to[1] } + ), + new Set() + ).layout; + + const firstCells = (layout: Layout): string[] => + layout.regions.map((region) => `${region.row},${region.column}`); + + it("follows the order the regions were made in, not where they lie", () => { + let layout = evenLayout(4, 2, 8); + layout = join(layout, [1, 0], [1, 1]); + layout = join(layout, [0, 0], [0, 1]); + layout = join(layout, [0, 3], [1, 3]); + layout = join(layout, [0, 2], [1, 2]); + + expect(firstCells(layout)).toEqual(["1,0", "0,0", "0,3", "0,2"]); + }); + + it("keeps a region in its place when another is made", () => { + let layout = evenLayout(3, 1, 8); + layout = join(layout, [0, 1], [0, 2]); + const first = layout.regions[0].id; + + layout = evenLayout(4, 1, 8); + layout = join(layout, [0, 2], [0, 3]); + const joined = layout.regions[0].id; + layout = join(layout, [0, 0], [0, 1]); + + expect(first).toBeDefined(); + expect(layout.regions[0].id).toBe(joined); + }); + + it("puts the cells nobody joined after the joined regions, in reading order", () => { + let layout = evenLayout(3, 2, 8); + layout = join(layout, [1, 1], [1, 2]); + + expect(firstCells(layout)).toEqual(["1,1", "0,0", "0,1", "0,2", "1,0"]); + }); +}); diff --git a/frontend-src/src/grid-layout.ts b/frontend-src/src/grid-layout.ts new file mode 100644 index 0000000..55dcf23 --- /dev/null +++ b/frontend-src/src/grid-layout.ts @@ -0,0 +1,230 @@ +import type { GridLayout, GridRegion, LayoutFrames } from "./types"; + +export interface CellPosition { + row: number; + column: number; +} + +/** The cells a region covers, as the first cell and how far it reaches. */ +export type CellRectangle = Pick< + GridRegion, + "row" | "column" | "rowSpan" | "columnSpan" +>; + +/** A layout after an edit, with the regions the edit took away. */ +export interface LayoutChange { + layout: GridLayout; + removedRegionIds: string[]; +} + +const LETTERS = 26; + +/** The name a region is shown by: A, B … Z, then AA, AB …, in reading order. */ +export const regionLetter = (index: number): string => { + const letter = String.fromCharCode(65 + (index % LETTERS)); + return index < LETTERS + ? letter + : regionLetter(Math.floor(index / LETTERS) - 1) + letter; +}; + +const REGION_PREFIX = "region-"; + +const unusedRegionId = (used: Set): string => { + let number = 1; + while (used.has(`${REGION_PREFIX}${number}`)) { + number += 1; + } + const id = `${REGION_PREFIX}${number}`; + used.add(id); + return id; +}; + +const isJoined = (region: GridRegion): boolean => + region.rowSpan > 1 || region.columnSpan > 1; + +const readingOrder = (first: GridRegion, second: GridRegion): number => + first.row - second.row || first.column - second.column; + +export const cellsOf = (region: CellRectangle): CellPosition[] => { + const cells: CellPosition[] = []; + for (let row = region.row; row < region.row + region.rowSpan; row += 1) { + for ( + let column = region.column; + column < region.column + region.columnSpan; + column += 1 + ) { + cells.push({ row, column }); + } + } + return cells; +}; + +export const regionAt = ( + layout: GridLayout, + cell: CellPosition +): GridRegion | undefined => + layout.regions.find((region) => + cellsOf(region).some( + (own) => own.row === cell.row && own.column === cell.column + ) + ); + +/** The rectangle of cells between two corners, whichever way they are given. */ +export const rectangleBetween = ( + from: CellPosition, + to: CellPosition +): CellRectangle => ({ + row: Math.min(from.row, to.row), + column: Math.min(from.column, to.column), + rowSpan: Math.abs(from.row - to.row) + 1, + columnSpan: Math.abs(from.column - to.column) + 1, +}); + +/** The regions of the layout, and a one-cell region in each cell none of them covers. */ +const fillGaps = (layout: GridLayout): GridRegion[] => { + const regions = [...layout.regions]; + const used = new Set(regions.map((region) => region.id)); + for (let row = 0; row < layout.rows; row += 1) { + for (let column = 0; column < layout.columns; column += 1) { + if (!regionAt({ ...layout, regions }, { row, column })) { + regions.push({ + id: unusedRegionId(used), + row, + column, + rowSpan: 1, + columnSpan: 1, + }); + } + } + } + return inCreationOrder(regions); +}; + +/** + * The order regions are named in: the ones joined by hand first, in the order they were + * made, then the cells nobody joined, in reading order. A region keeps its place when + * another is made, so its letter does not change under the user. + */ +const inCreationOrder = (regions: GridRegion[]): GridRegion[] => [ + ...regions.filter(isJoined), + ...regions.filter((region) => !isJoined(region)).sort(readingOrder), +]; + +/** Every cell of the grid as a region of its own. */ +export const evenLayout = ( + columns: number, + rows: number, + gap: number +): GridLayout => ({ + columns, + rows, + gap, + regions: fillGaps({ columns, rows, gap, regions: [] }), +}); + +const isInside = (region: GridRegion, rectangle: CellRectangle): boolean => + region.row >= rectangle.row && + region.column >= rectangle.column && + region.row + region.rowSpan <= rectangle.row + rectangle.rowSpan && + region.column + region.columnSpan <= rectangle.column + rectangle.columnSpan; + +const touches = (region: GridRegion, rectangle: CellRectangle): boolean => + region.row < rectangle.row + rectangle.rowSpan && + region.row + region.rowSpan > rectangle.row && + region.column < rectangle.column + rectangle.columnSpan && + region.column + region.columnSpan > rectangle.column; + +/** The regions a rectangle of cells covers, in reading order. */ +export const regionsIn = ( + layout: GridLayout, + rectangle: CellRectangle +): GridRegion[] => + layout.regions + .filter((region) => touches(region, rectangle)) + .sort(readingOrder); + +/** + * Whether the rectangle can become one region: it must take in more than one region and + * cut none of them in two. + */ +export const canMerge = ( + layout: GridLayout, + rectangle: CellRectangle +): boolean => { + const covered = regionsIn(layout, rectangle); + return covered.length > 1 && covered.every((r) => isInside(r, rectangle)); +}; + +/** + * Joins the regions inside a rectangle. The new region keeps the id of the first of them + * that holds a widget, or else of the first one; the widgets of the others are released. + */ +export const mergeRegions = ( + layout: GridLayout, + rectangle: CellRectangle, + occupied: ReadonlySet +): LayoutChange => { + const covered = regionsIn(layout, rectangle); + const kept = covered.find((region) => occupied.has(region.id)) ?? covered[0]; + const removed = covered.filter((region) => region.id !== kept.id); + const regions = layout.regions + .filter((region) => !covered.includes(region)) + .concat({ id: kept.id, ...rectangle }); + return { + layout: { ...layout, regions: inCreationOrder(regions) }, + removedRegionIds: removed.map((region) => region.id), + }; +}; + +/** Cuts a region back into cells; the first cell keeps the id and so the widget. */ +export const splitRegion = ( + layout: GridLayout, + regionId: string +): GridLayout => { + const region = layout.regions.find((candidate) => candidate.id === regionId); + if (!region) { + return layout; + } + const others = layout.regions.filter((candidate) => candidate !== region); + const first: GridRegion = { + id: region.id, + row: region.row, + column: region.column, + rowSpan: 1, + columnSpan: 1, + }; + const regions = fillGaps({ ...layout, regions: [...others, first] }); + return { ...layout, regions }; +}; + +/** + * Gives the grid another size. Regions that still lie inside it stay; the ones the new + * edge would cut are taken away, and every cell left uncovered becomes a region. + */ +export const resizeGrid = ( + layout: GridLayout, + columns: number, + rows: number +): LayoutChange => { + const whole = { row: 0, column: 0, rowSpan: rows, columnSpan: columns }; + const kept = layout.regions.filter((region) => isInside(region, whole)); + const removed = layout.regions.filter((region) => !kept.includes(region)); + const resized = { ...layout, columns, rows, regions: kept }; + return { + layout: { ...resized, regions: fillGaps(resized) }, + removedRegionIds: removed.map((region) => region.id), + }; +}; + +/** The id of the region whose frame contains a point of the display, if there is one. */ +export const regionIdAtPoint = ( + frames: LayoutFrames, + point: { x: number; y: number } +): string | undefined => + frames.regions.find( + (frame) => + point.x >= frame.x && + point.x < frame.x + frame.width && + point.y >= frame.y && + point.y < frame.y + frame.height + )?.id; diff --git a/frontend-src/src/ods-app.ts b/frontend-src/src/ods-app.ts index 4c5da5e..656c49b 100644 --- a/frontend-src/src/ods-app.ts +++ b/frontend-src/src/ods-app.ts @@ -94,7 +94,24 @@ import { chooseFile, downloadFile, isMacPlatform, isTypingTarget } from "./dom"; import { exportFileName, parseJson } from "./dashboard-file"; import { messageFrom } from "./error-message"; import { rememberFonts } from "./font-catalog"; -import { type DashboardDialog, type EditorView, type OdsEvent } from "./events"; +import { + type BasicStep, + type DashboardDialog, + type EditorView, + type OdsEvent, +} from "./events"; +import { + mergeRegionsIn, + placeWidget, + regionForNewWidget, + resizeGridIn, + setGapIn, + splitRegionIn, + widgetInRegion, + widgetsOf, + withMode, +} from "./basic-ops"; +import { regionAt, regionIdAtPoint } from "./grid-layout"; import { snapToGrid, workingArea } from "./geometry"; import { History } from "./history"; import { strings } from "./strings"; @@ -119,6 +136,8 @@ import type { DisplayDevice, HomeAssistant, ImportPlan, + LayoutFrames, + LayoutLimits, PrimitiveDefinition, StudioItem, WidgetLoadError, @@ -131,7 +150,9 @@ import "./ods-confirm-dialog"; import "./ods-import-dialog"; import "./ods-context-menu"; import "./ods-shortcuts-dialog"; +import "./ods-basic-steps"; import "./ods-gallery"; +import "./ods-layout-panel"; import "./ods-settings"; import "./ods-header"; import "./ods-inspector"; @@ -261,6 +282,12 @@ export class OdsApp extends LitElement { ); overflow: hidden; } + .basic-left { + min-width: 0; + min-height: 0; + display: grid; + grid-template-rows: auto minmax(0, 1fr); + } .dashboard-empty { position: relative; height: 100%; @@ -328,6 +355,11 @@ export class OdsApp extends LitElement { @state() private displayDevices: DisplayDevice[] = []; @state() private dashboardDialog?: DashboardDialog; @state() private dashboardDraft?: Dashboard; + @state() private layoutLimits?: LayoutLimits; + /** Where the cells and regions of the open basic dashboard are on its display. */ + @state() private layoutFrames?: LayoutFrames; + @state() private basicStep: BasicStep = "layout"; + @state() private selectedRegionId = ""; @query("ods-canvas") private canvas?: OdsCanvas; @@ -335,6 +367,8 @@ export class OdsApp extends LitElement { private stateTimer?: number; private clockTimer?: number; private previewRequest = 0; + private layoutRequest = 0; + private layoutKey = ""; private bootstrapStarted = false; private readonly history = new History(); @@ -361,6 +395,7 @@ export class OdsApp extends LitElement { this.ensureBootstrap(); this.refreshOnStateChange(changed.get("hass")); } + void this.refreshLayoutFrames(); } disconnectedCallback(): void { super.disconnectedCallback(); @@ -390,6 +425,7 @@ export class OdsApp extends LitElement { this.widgetErrors = data.widgetErrors; this.primitives = data.primitives; rememberFonts(data.fonts); + this.layoutLimits = data.layoutLimits; this.current = undefined; this.preview = undefined; this.view = "dashboards"; @@ -461,6 +497,7 @@ export class OdsApp extends LitElement { this.dirty = false; this.newDashboardOpen = false; this.view = "design"; + this.basicStep = "layout"; this.clearHistory(); await this.composePreview(); await this.updateComplete; @@ -577,6 +614,8 @@ export class OdsApp extends LitElement { if (this.dirty && !window.confirm(strings.app.discardChanges)) return; this.current = structuredClone(dashboard); this.clearSelection(); + this.selectedRegionId = ""; + this.basicStep = widgetsOf(dashboard).length > 0 ? "widgets" : "layout"; this.dirty = false; this.clearHistory(); this.view = "design"; @@ -808,6 +847,7 @@ export class OdsApp extends LitElement { entered: this.enteredGroupId !== "", canPaste: (this.clipboard?.items.length ?? 0) > 0, dirty: this.dirty, + basic: this.isBasic, }; } @@ -1183,10 +1223,16 @@ export class OdsApp extends LitElement { if (view === "code" && !this.preview) void this.composePreview(); } private selectItem(itemId: string): void { - this.setSelection(itemId ? [itemId] : []); + if (!itemId) { + this.clearSelection(); + return; + } + this.setSelection([itemId]); } + /** Nothing is selected: no element, and no region of a basic dashboard either. */ private clearSelection(): void { this.setSelection([]); + this.selectedRegionId = ""; } private setSelection(ids: string[]): void { const same = @@ -1275,6 +1321,10 @@ export class OdsApp extends LitElement { } private addFromCatalog(value: string): void { if (!this.current) return; + if (this.isBasic) { + this.addToRegion(value, this.selectedRegionId); + return; + } const { x, y } = catalogCascadePosition(this.current, this.snapEnabled); this.addAt(value, x, y); } @@ -1286,6 +1336,10 @@ export class OdsApp extends LitElement { const dashboard = this.current; const point = this.canvas?.displayPointAt(clientX, clientY); if (!dashboard || !point) return; + if (this.isBasic) { + this.addToRegion(value, this.regionAtPoint(point)); + return; + } const area = workingArea(dashboard); const x = clamp( snapToGrid(point.x, dashboard, this.snapEnabled), @@ -1307,6 +1361,104 @@ export class OdsApp extends LitElement { this.addAt(value, x, y, target?.id); } + // --- the basic editor -------------------------------------------------------- + + private get isBasic(): boolean { + return this.current?.mode === "basic"; + } + + private regionAtPoint(point: { x: number; y: number }): string { + if (!this.layoutFrames) return ""; + return regionIdAtPoint(this.layoutFrames, point) ?? ""; + } + + /** Asks the backend where the cells and regions are, whenever the grid or display changes. */ + private async refreshLayoutFrames(): Promise { + const dashboard = this.current; + const layout = dashboard?.layout; + if (!this.hass || !dashboard || !layout) { + this.layoutFrames = undefined; + this.layoutKey = ""; + return; + } + const { width, height, padding } = dashboard.display; + const key = JSON.stringify([width, height, padding, layout]); + if (key === this.layoutKey) return; + this.layoutKey = key; + const request = (this.layoutRequest += 1); + try { + const frames = await api.layoutFrames( + this.hass, + dashboard.display, + layout + ); + if (request === this.layoutRequest) this.layoutFrames = frames; + } catch (error) { + this.error = messageFrom(error, strings.app.previewFailed); + } + } + + /** The widget goes to the chosen region, or to the first free one. */ + private addToRegion(value: string, chosenRegionId: string): void { + const dashboard = this.current; + const layout = dashboard?.layout; + const [kind, type] = value.split(":"); + const definition = this.widgets.find((widget) => widget.id === type); + if (!dashboard || !layout || kind !== "widget" || !definition) return; + const region = regionForNewWidget(dashboard, layout, chosenRegionId); + const frame = this.layoutFrames?.regions.find((r) => r.id === region?.id); + if (!region || !frame) { + this.showNotice(strings.basic.noEmptyRegion); + return; + } + this.mutate((next) => placeWidget(next, definition, region, frame)); + this.selectRegion(region.id); + void this.composePreview(); + } + + private selectRegion(regionId: string): void { + const widget = this.current && widgetInRegion(this.current, regionId); + this.setSelection(widget ? [widget.id] : []); + this.selectedRegionId = regionId; + } + + private onBasicStepChange(event: OdsEvent<"basic-step-change">): void { + this.basicStep = event.detail.step; + } + + private onRegionSelect(event: OdsEvent<"region-select">): void { + this.selectRegion(event.detail.regionId); + } + + private onRegionsMerge(event: OdsEvent<"regions-merge">): void { + const { rectangle } = event.detail; + this.mutate((next) => mergeRegionsIn(next, rectangle)); + const layout = this.current?.layout; + const merged = layout && regionAt(layout, rectangle); + this.selectRegion(merged?.id ?? ""); + void this.composePreview(); + } + + private onRegionSplit(event: OdsEvent<"region-split">): void { + this.mutate((next) => splitRegionIn(next, event.detail.regionId)); + this.selectRegion(event.detail.regionId); + } + + private onGridChange(event: OdsEvent<"grid-change">): void { + const { columns, rows, gap } = event.detail; + this.mutate((next) => { + const layout = next.layout; + if (!layout) return; + if (gap !== undefined) setGapIn(next, gap); + resizeGridIn(next, { + columns: columns ?? layout.columns, + rows: rows ?? layout.rows, + }); + }); + if (this.current) this.keepExistingSelection(this.current); + void this.composePreview(); + } + // --- groups ---------------------------------------------------------------- private groupSelection(itemIds: string[]): void { @@ -1390,6 +1542,11 @@ export class OdsApp extends LitElement { ); } + private onNewDashboardMode(event: OdsEvent<"new-dashboard-mode">): void { + const gap = this.layoutLimits?.defaultGap ?? 8; + this.newDashboard = withMode(this.newDashboard, event.detail.mode, gap); + } + private onNewDashboardSource(event: OdsEvent<"new-dashboard-source">): void { this.chooseNewDashboardSource(event.detail.source); } @@ -1408,6 +1565,10 @@ export class OdsApp extends LitElement { this.newDashboardOpen = false; } + private onRenameHandled(): void { + this.renameRequestId = ""; + } + private showGallery(): void { this.view = "dashboards"; } @@ -1720,6 +1881,7 @@ export class OdsApp extends LitElement { .saving=${this.saving} @new-dashboard-change=${this.onNewDashboardChange} @new-dashboard-source=${this.onNewDashboardSource} + @new-dashboard-mode=${this.onNewDashboardMode} @new-dashboard-device=${this.onNewDashboardDevice} @new-dashboard-profile=${this.onNewDashboardProfile} @new-dashboard-close=${this.closeNewDashboard} @@ -1766,91 +1928,167 @@ export class OdsApp extends LitElement { `; } - private renderDesign(dashboard: Dashboard): TemplateResult { - const layoutStyle = styleMap({ + private layoutStyle(): ReturnType { + return styleMap({ "--toolbox-width": this.leftCollapsed ? "48px" : "255px", "--inspector-width": this.rightCollapsed ? "48px" : `${this.inspectorWidth}px`, }); + } + + private renderLibrary(widgetsOnly: boolean): TemplateResult { + return html` + + `; + } + + private renderCanvas(dashboard: Dashboard): TemplateResult { + return html` + 0} + .canRedo=${this.redoCount > 0} + .viewport=${this.viewport} + .layoutFrames=${this.layoutFrames} + .basicStep=${this.basicStep} + .selectedRegionId=${this.selectedRegionId} + @viewport-change=${this.onViewportChange} + @items-transform=${this.onItemsTransform} + @item-transform-end=${this.onItemTransformEnd} + @gesture-cancel=${this.onGestureCancel} + @primitive-field-change=${this.onPrimitiveFieldChange} + @snap-toggle=${this.toggleSnap} + @align-target-change=${this.onAlignTargetChange} + @region-select=${this.onRegionSelect} + @regions-merge=${this.onRegionsMerge} + @region-split=${this.onRegionSplit} + > + `; + } + + private renderInspector(dashboard: Dashboard): TemplateResult { + return html` + + `; + } + + private renderDialogs(): TemplateResult { + return html` + ${this.renderDeleteDialog()} ${this.renderImportDialog()} + ${this.renderMenu()} ${this.renderShortcutsDialog()} + `; + } + + private renderDesign(dashboard: Dashboard): TemplateResult { return html`
{ - this.renameRequestId = ""; - }} + @rename-handled=${this.onRenameHandled} @command=${this.onCommand} > - - 0} - .canRedo=${this.redoCount > 0} - .viewport=${this.viewport} - @viewport-change=${this.onViewportChange} - @items-transform=${this.onItemsTransform} - @item-transform-end=${this.onItemTransformEnd} - @gesture-cancel=${this.onGestureCancel} - @primitive-field-change=${this.onPrimitiveFieldChange} - @snap-toggle=${this.toggleSnap} - @align-target-change=${this.onAlignTargetChange} - > - + ${this.renderLibrary(false)} ${this.renderCanvas(dashboard)} + ${this.renderInspector(dashboard)}
- ${this.renderDeleteDialog()} ${this.renderImportDialog()} - ${this.renderMenu()} ${this.renderShortcutsDialog()} + ${this.renderDialogs()} + `; + } + + /** The left panel of the basic editor: the tabs, and below them the tab's own tools. */ + private renderBasicLeft(dashboard: Dashboard): TemplateResult { + return html` +
+ + ${ + this.basicStep === "layout" + ? html` + + ` + : this.renderLibrary(true) + } +
+ `; + } + + /** + * The basic editor: the same canvas, properties and library as the advanced one, with + * regions on the canvas, no structure tree and no arrange bar. + */ + private renderBasicDesign(dashboard: Dashboard): TemplateResult { + return html` +
+ ${this.renderBasicLeft(dashboard)} ${this.renderCanvas(dashboard)} + ${this.renderInspector(dashboard)} +
+ ${this.renderDialogs()} `; } @@ -1872,6 +2110,12 @@ export class OdsApp extends LitElement { `; } + private renderEditorBody(dashboard: Dashboard): TemplateResult { + return dashboard.mode === "basic" + ? this.renderBasicDesign(dashboard) + : this.renderDesign(dashboard); + } + private renderEditor(dashboard: Dashboard): TemplateResult { return html`
@@ -1899,7 +2143,7 @@ export class OdsApp extends LitElement { ? html` ` - : this.renderDesign(dashboard) + : this.renderEditorBody(dashboard) }
`; diff --git a/frontend-src/src/ods-basic-steps.ts b/frontend-src/src/ods-basic-steps.ts new file mode 100644 index 0000000..ae6d47f --- /dev/null +++ b/frontend-src/src/ods-basic-steps.ts @@ -0,0 +1,67 @@ +import { css, html, LitElement, type TemplateResult } from "lit"; +import { customElement, property } from "lit/decorators.js"; +import { emit } from "./events"; +import type { BasicStep } from "./events"; +import { strings } from "./strings"; +import { baseStyles, chromeStyles, fieldStyles } from "./studio-styles"; + +/** The two tabs of the basic editor: draw the regions, then put widgets into them. */ +@customElement("ods-basic-steps") +export class OdsBasicSteps extends LitElement { + static styles = [ + baseStyles, + chromeStyles, + fieldStyles, + css` + :host { + display: block; + padding: var(--ha-space-2, 8px) 9px; + border-inline-end: 1px solid var(--studio-border); + border-bottom: 1px solid var(--studio-border); + background: var(--studio-surface); + } + .segmented { + height: 32px; + } + .segmented button { + font-size: 12px; + } + .segmented button[aria-pressed="true"] { + background: var(--studio-accent); + } + `, + ]; + + @property() public step: BasicStep = "layout"; + + private renderStep(step: BasicStep, label: string): TemplateResult { + return html` + + `; + } + + protected render(): TemplateResult { + return html` +
+ ${this.renderStep("layout", strings.basic.stepLayout)} + ${this.renderStep("widgets", strings.basic.stepWidgets)} +
+ `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ods-basic-steps": OdsBasicSteps; + } +} diff --git a/frontend-src/src/ods-canvas.ts b/frontend-src/src/ods-canvas.ts index 599ca3c..4d1309d 100644 --- a/frontend-src/src/ods-canvas.ts +++ b/frontend-src/src/ods-canvas.ts @@ -10,7 +10,7 @@ import { type CommandId, } from "./commands"; import { isAdditiveClick, isMacPlatform, isTypingTarget } from "./dom"; -import { emit, type OdsEvent } from "./events"; +import { emit, type BasicStep, type OdsEvent } from "./events"; import { snapToGrid, workingArea } from "./geometry"; import { boxBetween, @@ -68,6 +68,7 @@ import type { PreviewState, Dashboard, ItemBounds, + LayoutFrames, PrimitiveDefinition, PrimitiveItem, StudioItem, @@ -83,6 +84,7 @@ import { zoomStep, type Viewport, } from "./viewport"; +import "./ods-region-layer"; import "./ods-zoom-bar"; const GESTURE_THRESHOLD = 3; @@ -140,6 +142,9 @@ export class OdsCanvas extends LitElement { color: var(--studio-text); overflow: hidden; } + .workspace.basic { + grid-template-rows: 42px minmax(0, 1fr); + } .history-controls { flex: none; display: flex; @@ -655,6 +660,11 @@ export class OdsCanvas extends LitElement { @property({ type: Boolean }) public acceptingDrop = false; @property({ type: Boolean }) public canUndo = false; @property({ type: Boolean }) public canRedo = false; + /** Where the cells and regions of a basic dashboard are; the backend lays them out. */ + @property({ attribute: false }) public layoutFrames?: LayoutFrames; + /** The tab of the basic editor, which decides what the regions on the canvas do. */ + @property() public basicStep: BasicStep = "layout"; + @property() public selectedRegionId = ""; /** Pan and zoom live in the shell so they survive a trip to the code view. */ @property({ attribute: false }) public viewport: Viewport = DEFAULT_VIEWPORT; @@ -714,6 +724,11 @@ export class OdsCanvas extends LitElement { }; } + /** A basic dashboard is edited by regions: nothing on the canvas is moved or resized. */ + private get isBasic(): boolean { + return this.dashboard.mode === "basic"; + } + private setViewport(viewport: Viewport): void { emit(this, "viewport-change", viewport); } @@ -789,7 +804,10 @@ export class OdsCanvas extends LitElement { /** A drag that moves the view, wherever the pointer is. */ private onStagePointerDown(event: PointerEvent): void { - if (!this.startsViewDrag(event, true)) return; + if (!this.startsViewDrag(event, true)) { + this.releaseRegion(event); + return; + } event.preventDefault(); let last = event; this.stopGesture?.(); @@ -808,6 +826,16 @@ export class OdsCanvas extends LitElement { }); } + /** Pressing beside the regions lets go of the selected one, as it does for elements. */ + private releaseRegion(event: PointerEvent): void { + if (!this.isBasic || event.button !== 0) return; + const target = event.target; + const onRegions = + target instanceof Element && + target.closest("ods-region-layer, ods-zoom-bar"); + if (!onRegions) emit(this, "region-select", { regionId: "" }); + } + private toggleGrid(): void { this.gridVisible = !this.gridVisible; } @@ -1183,6 +1211,7 @@ export class OdsCanvas extends LitElement { /** Drag out a box on empty canvas to select what it touches; a plain click deselects. */ private onCanvasPointerDown(event: PointerEvent): void { if (this.startsViewDrag(event, true)) return; + if (this.isBasic) return; const start = this.clampedPointAt(event.clientX, event.clientY); if (!start) return; const additive = event.shiftKey; @@ -1229,6 +1258,7 @@ export class OdsCanvas extends LitElement { private onCanvasContextMenu(event: MouseEvent): void { event.preventDefault(); + if (this.isBasic) return; emit(this, "context-menu", { source: "empty", clientX: event.clientX, @@ -1842,59 +1872,99 @@ export class OdsCanvas extends LitElement { `; } - private renderToolbar(): TemplateResult { - const dashboard = this.dashboard; - const { width, height, padding, snapSize } = dashboard.display; - const snapClasses = classMap({ - "tool-toggle": true, - active: this.snapEnabled, - }); - const panClasses = classMap({ + private renderPanToggle(): TemplateResult { + const classes = classMap({ "tool-toggle": true, active: this.panMode, }); - const gridClasses = classMap({ + return html` + + `; + } + + private renderGridToggle(): TemplateResult { + const classes = classMap({ "tool-toggle": true, active: this.gridVisible, }); + return html` + + `; + } + + private renderSnapToggle(): TemplateResult { + const classes = classMap({ + "tool-toggle": true, + active: this.snapEnabled, + }); + return html` + + `; + } + + private renderHistoryControls(): TemplateResult { + return html` +
+ ${this.renderCommandButton("undo", this.historyContext)} + ${this.renderCommandButton("redo", this.historyContext)} +
+ `; + } + + private renderZoomReadout(): TemplateResult { + return html` + ${Math.round(this.viewport.zoom * 100)}% + `; + } + + /** Free placement: layers, pan, the snap grid and snapping. */ + private renderToolbar(): TemplateResult { + const dashboard = this.dashboard; + const { width, height, padding } = dashboard.display; return html`
${strings.common.sizeInPixels(width, height)} ${strings.canvas.layers(countItems(dashboard.items))} ${strings.canvas.padding(padding)} -
- ${this.renderCommandButton("undo", this.historyContext)} - ${this.renderCommandButton("redo", this.historyContext)} -
- - - - - ${Math.round(this.viewport.zoom * 100)}% - + ${this.renderHistoryControls()} ${this.renderPanToggle()} + ${this.renderGridToggle()} ${this.renderSnapToggle()} + ${this.renderZoomReadout()} +
+ `; + } + + /** Regions: the size, undo and redo, pan and zoom; there is nothing to snap to. */ + private renderBasicToolbar(): TemplateResult { + const { width, height, padding } = this.dashboard.display; + return html` +
+ ${strings.common.sizeInPixels(width, height)} + ${strings.canvas.padding(padding)} + ${this.renderHistoryControls()} ${this.renderPanToggle()} + ${this.renderZoomReadout()}
`; } @@ -1938,9 +2008,40 @@ export class OdsCanvas extends LitElement { `; } + private renderRegions(): TemplateResult { + return html` + + `; + } + + /** The elements of an advanced dashboard, with their handles and guides. */ + private renderItems(): TemplateResult { + const dashboard = this.dashboard; + const workingAreaStyle = styleMap({ + ...percentBox(workingArea(dashboard), dashboard.display), + "--snap-size": `${dashboard.display.snapSize * this.viewport.zoom}px`, + }); + return html` + + ${withOffsets(dashboard.items).map((placed) => this.renderPlaced(placed))} + ${this.renderSelectionBox()} ${this.renderMarquee()} + ${this.guides.map((guide) => this.renderGuide(guide))} + ${this.spacing.map((mark) => this.renderSpacing(mark))} + `; + } + private renderStage(): TemplateResult { const dashboard = this.dashboard; - const { width, height, snapSize } = dashboard.display; + const { width, height } = dashboard.display; const { zoom, panX, panY } = this.viewport; const viewportStyle = styleMap({ transform: `translate(${panX}px, ${panY}px) scale(${zoom})`, @@ -1951,10 +2052,6 @@ export class OdsCanvas extends LitElement { // The overlay is drawn inside the zoomed canvas; this brings its sizes back to the screen. "--ui": String(1 / zoom), }); - const workingAreaStyle = styleMap({ - ...percentBox(workingArea(dashboard), dashboard.display), - "--snap-size": `${snapSize * zoom}px`, - }); const stageClasses = classMap({ "canvas-stage": true, "view-drag": this.spaceHeld, @@ -1976,17 +2073,7 @@ export class OdsCanvas extends LitElement { @contextmenu=${this.onCanvasContextMenu} > ${this.renderPreview()} - - ${withOffsets(dashboard.items).map((placed) => - this.renderPlaced(placed) - )} - ${this.renderSelectionBox()} ${this.renderMarquee()} - ${this.guides.map((guide) => this.renderGuide(guide))} - ${this.spacing.map((mark) => this.renderSpacing(mark))} + ${this.isBasic ? this.renderRegions() : this.renderItems()}

- ${this.renderToolbar()} ${this.renderArrangeBar()} ${this.renderStage()} +
+ ${this.isBasic ? this.renderBasicToolbar() : this.renderToolbar()} + ${this.isBasic ? nothing : this.renderArrangeBar()} + ${this.renderStage()}
`; } diff --git a/frontend-src/src/ods-dashboard-card.ts b/frontend-src/src/ods-dashboard-card.ts index c4e06c0..b0d1fe6 100644 --- a/frontend-src/src/ods-dashboard-card.ts +++ b/frontend-src/src/ods-dashboard-card.ts @@ -16,8 +16,13 @@ import { emit, type DashboardAction, type OdsEvent } from "./events"; import type { ContextMenuEntry } from "./ods-context-menu"; import { strings } from "./strings"; import { baseStyles, chromeStyles, tileStyles } from "./studio-styles"; +import type { Size } from "./display-shape"; import type { Dashboard } from "./types"; import "./ods-context-menu"; +import "./ods-display-preview"; + +/** The field the display is drawn in: the picture area of a card, less its padding. */ +const DISPLAY_BOX: Size = { width: 240, height: 92 }; /** The actions of a card, read when it is drawn so they speak the language of the panel. */ const menu = (): Array => [ @@ -81,7 +86,7 @@ export class OdsDashboardCard extends LitElement { display: grid; place-items: center; overflow: hidden; - padding: 23px; + padding: 35px 23px 23px; border-radius: 12px 12px 0 0; background: color-mix( in srgb, @@ -90,54 +95,6 @@ export class OdsDashboardCard extends LitElement { ); pointer-events: none; } - .dashboard-miniature { - position: relative; - width: min(145px, 70%); - max-height: 96px; - overflow: hidden; - border: 2px solid - color-mix(in srgb, var(--dashboard-accent) 22%, var(--studio-border)); - border-radius: 9px; - box-shadow: 0 7px 18px rgba(0, 0, 0, 0.12); - } - .dashboard-miniature > span { - position: absolute; - display: block; - border-radius: 99px; - } - .miniature-title { - left: 12%; - top: 25%; - width: 25%; - height: 4%; - min-height: 3px; - background: color-mix(in srgb, var(--studio-muted) 50%, transparent); - } - .miniature-accent { - right: 12%; - top: 25%; - width: 5px; - height: 5px; - background: var(--dashboard-accent); - } - .miniature-line { - left: 12%; - bottom: 26%; - width: 48%; - height: 4%; - min-height: 3px; - background: color-mix(in srgb, var(--studio-muted) 28%, transparent); - } - .miniature-line.long { - bottom: 39%; - width: 72%; - height: 13%; - background: color-mix( - in srgb, - var(--dashboard-accent) 18%, - var(--studio-surface) - ); - } .dashboard-resolution { position: absolute; right: 11px; @@ -186,22 +143,26 @@ export class OdsDashboardCard extends LitElement { font-weight: 700; pointer-events: auto; } - .dashboard-card-meta { - display: flex; - align-items: center; - gap: 7px; + .dashboard-card-copy small { color: var(--studio-muted); font-size: 10px; } - .dashboard-card-meta > span + span::before { - content: "·"; - margin-right: 7px; - } - .dashboard-card-copy small { - color: var(--studio-muted); + .mode-badge { + position: absolute; + top: var(--ha-space-2, 8px); + inset-inline-start: var(--ha-space-2, 8px); + padding: 1px 7px; + border: 1px solid var(--studio-border); + border-radius: 999px; + background: var(--studio-surface); + color: var(--studio-accent); font-size: 10px; + font-weight: 600; } .palette-dots { + position: absolute; + inset-inline-start: 11px; + bottom: var(--ha-space-2, 8px); display: inline-flex; align-items: center; gap: 2px; @@ -328,22 +289,19 @@ export class OdsDashboardCard extends LitElement { private renderMiniature(): TemplateResult { const { display } = this.dashboard; - const style = styleMap({ - aspectRatio: `${display.width} / ${display.height}`, - background: display.background, - "--dashboard-accent": dashboardAccent(display.palette), - }); return html`
-
- - - - -
- - ${strings.common.size(display.width, display.height)} - + ${this.modeLabel()} + + ${this.renderPaletteDots()} + ${this.resolutionLabel()}
`; } @@ -375,22 +333,34 @@ export class OdsDashboardCard extends LitElement { `; } - private renderMeta(): TemplateResult { - const { display } = this.dashboard; + /** The resolution of the canvas, and the turn when the display is not upright. */ + private resolutionLabel(): string { + const { width, height, rotation } = this.dashboard.display; + const size = strings.common.size(width, height); + return rotation === 0 ? size : `${size} · ${rotation}°`; + } + + private modeLabel(): string { + return this.dashboard.mode === "basic" + ? strings.basic.badgeBasic + : strings.basic.badgeAdvanced; + } + + /** The colors of the display, level with its resolution in the picture's corner. */ + private renderPaletteDots(): TemplateResult { + const { palette } = this.dashboard.display; return html` - - ${strings.common.size(display.width, display.height)} - - ${PALETTE_COLORS[display.palette].map( - (color) => html` - - ` - )} - - ${PALETTE_LABELS[display.palette]} + + ${PALETTE_COLORS[palette].map( + (color) => html` + + ` + )} `; } @@ -420,7 +390,7 @@ export class OdsDashboardCard extends LitElement {
${this.renderMiniature()}
- ${this.renderTitle()} ${this.renderMeta()} + ${this.renderTitle()} ${strings.gallery.updated(dashboardDate(dashboard, this.language))} diff --git a/frontend-src/src/ods-display-preview.ts b/frontend-src/src/ods-display-preview.ts new file mode 100644 index 0000000..5cedf7c --- /dev/null +++ b/frontend-src/src/ods-display-preview.ts @@ -0,0 +1,234 @@ +import { + css, + html, + LitElement, + svg, + type SVGTemplateResult, + type TemplateResult, +} from "lit"; +import { customElement, property, state } from "lit/decorators.js"; +import { + displayShape, + fitScale, + inkView, + type DisplayShape, + type Size, +} from "./display-shape"; +import { shortestTurn, TURN_DURATION_MS, turnAngleAt } from "./rotation-motion"; +import { strings } from "./strings"; +import type { Rotation } from "./types"; + +/** The field a display is drawn in when the owner does not say. */ +const DEFAULT_BOX: Size = { width: 240, height: 92 }; + +/** + * A drawing of a display in the proportions of its resolution and turned as it is set up: the + * light and the button sit where they are on the housing, so a turned display shows. With + * `turns` a change of `rotation` turns it: a lean back, a swing past, and a settle. + */ +@customElement("ods-display-preview") +export class OdsDisplayPreview extends LitElement { + static styles = css` + :host { + display: block; + } + svg { + display: block; + width: 100%; + height: 100%; + } + .housing { + fill: #35383b; + } + .screen { + stroke: color-mix(in srgb, var(--studio-text, #202124) 30%, transparent); + stroke-width: 0.5; + } + .light { + fill: #4fd1a5; + } + .button { + fill: #8a9096; + } + .skeleton-title { + fill: color-mix(in srgb, var(--studio-muted, #68727a) 50%, transparent); + } + .skeleton-line { + fill: color-mix(in srgb, var(--studio-muted, #68727a) 28%, transparent); + } + .skeleton-block { + fill: color-mix( + in srgb, + var(--display-accent, #202124) 18%, + var(--studio-surface, #fff) + ); + } + .skeleton-accent { + fill: var(--display-accent, #202124); + } + `; + + /** The canvas of the dashboard, so a quarter turn has already swapped them. */ + @property({ type: Number }) public width = 800; + @property({ type: Number }) public height = 480; + @property({ type: Number }) public rotation: Rotation = 0; + @property() public background = "white"; + @property() public accent = "#202124"; + @property({ attribute: false }) public box: Size = DEFAULT_BOX; + /** Whether a change of `rotation` is shown as a turn instead of a jump. */ + @property({ type: Boolean }) public turns = false; + + /** Where the display is turned to now, which is not `rotation` while it is moving. */ + @state() private angle = 0; + /** Where the turn ends; it is not wrapped, so the display never turns the long way. */ + private target = 0; + private frame = 0; + + connectedCallback(): void { + super.connectedCallback(); + this.angle = this.rotation; + this.target = this.rotation; + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + cancelAnimationFrame(this.frame); + } + + protected willUpdate(changed: Map): void { + if (changed.has("rotation") && this.hasUpdated) { + this.turnTo(this.rotation); + } + } + + private turnTo(rotation: Rotation): void { + cancelAnimationFrame(this.frame); + const from = this.angle; + this.target += shortestTurn(this.target, rotation); + if (!this.turns || prefersReducedMotion()) { + this.angle = this.target; + return; + } + const to = this.target; + const started = performance.now(); + const step = (now: number): void => { + const progress = (now - started) / TURN_DURATION_MS; + this.angle = turnAngleAt(from, to, progress); + if (progress < 1) this.frame = requestAnimationFrame(step); + }; + this.frame = requestAnimationFrame(step); + } + + /** The skeleton of a dashboard, drawn upright in the largest box the screen holds. */ + private renderSkeleton(view: Size): SVGTemplateResult { + const left = -view.width / 2; + const top = -view.height / 2; + const barHeight = Math.max(3, view.height * 0.04); + const barTop = top + view.height * 0.25; + return svg` + + + + + `; + } + + private renderHousing(shape: DisplayShape): SVGTemplateResult { + const { housing, screen, bezel } = shape; + return svg` + + + + + `; + } + + protected render(): TemplateResult { + const box = this.box; + const shape = displayShape( + { width: this.width, height: this.height, rotation: this.rotation }, + box + ); + const scale = fitScale(shape.housing, this.angle, box); + const view = inkView(shape.screen, this.angle); + const size = strings.common.sizeInPixels(this.width, this.height); + const label = `${size} · ${this.rotation}°`; + const middle = `${box.width / 2} ${box.height / 2}`; + const placement = `translate(${middle}) rotate(${this.angle}) scale(${scale})`; + return html` + + + ${this.renderHousing(shape)} + ${this.renderSkeleton(view)} + + + `; + } +} + +const prefersReducedMotion = (): boolean => + window.matchMedia("(prefers-reduced-motion: reduce)").matches; + +declare global { + interface HTMLElementTagNameMap { + "ods-display-preview": OdsDisplayPreview; + } +} diff --git a/frontend-src/src/ods-inspector.ts b/frontend-src/src/ods-inspector.ts index 83c3ef1..c050ffb 100644 --- a/frontend-src/src/ods-inspector.ts +++ b/frontend-src/src/ods-inspector.ts @@ -557,6 +557,17 @@ export class OdsInspector extends LitElement { `; } + /** Padding and snapping, for a dashboard whose elements are placed by hand. */ + private renderWorkingArea(): TemplateResult { + return html` +
+ ${this.renderDisplayField(strings.fields.padding, "padding", 0, 1024)} + ${this.renderDisplayField(strings.fields.snapSize, "snapSize", 1, 256)} +
+

${strings.inspector.workingAreaHelp}

+ `; + } + private renderDashboardInspector(): TemplateResult { return html` ${this.renderHeader( @@ -568,11 +579,7 @@ export class OdsInspector extends LitElement { ${strings.inspector.appearance}
${this.renderDashboardBackground()} -
- ${this.renderDisplayField(strings.fields.padding, "padding", 0, 1024)} - ${this.renderDisplayField(strings.fields.snapSize, "snapSize", 1, 256)} -
-

${strings.inspector.workingAreaHelp}

+ ${this.isBasic ? nothing : this.renderWorkingArea()}
${this.renderMetrics()} @@ -1114,7 +1121,8 @@ export class OdsInspector extends LitElement { private renderItemSections(item: StudioItem): TemplateResult { if (item.kind === "widget") { return html` - ${this.renderLayoutSection(item)} ${this.renderWidgetSettings(item)} + ${this.isBasic ? nothing : this.renderLayoutSection(item)} + ${this.renderWidgetSettings(item)} `; } if (item.kind === "container") { @@ -1231,6 +1239,26 @@ export class OdsInspector extends LitElement { return this.renderDashboardInspector(); } + /** A basic dashboard has no tree: its widgets are told apart by their regions. */ + private get isBasic(): boolean { + return this.dashboard.mode === "basic"; + } + + private renderStructure(): TemplateResult | typeof nothing { + if (this.isBasic) return nothing; + return html` + + `; + } + protected render(): TemplateResult { if (this.collapsed) { return this.renderRail(); @@ -1245,15 +1273,7 @@ export class OdsInspector extends LitElement { aria-label=${strings.inspector.resize} @pointerdown=${this.startResize} >
- + ${this.renderStructure()}
${this.renderProperties(item)}
`; diff --git a/frontend-src/src/ods-layout-panel.ts b/frontend-src/src/ods-layout-panel.ts new file mode 100644 index 0000000..91cda59 --- /dev/null +++ b/frontend-src/src/ods-layout-panel.ts @@ -0,0 +1,165 @@ +import { css, html, LitElement, nothing, type TemplateResult } from "lit"; +import { customElement, property } from "lit/decorators.js"; +import { emit, type OdsEvent } from "./events"; +import { strings } from "./strings"; +import { baseStyles, chromeStyles } from "./studio-styles"; +import type { GridLayout, LayoutLimits } from "./types"; +import "./ods-property-field"; + +type GridKey = "columns" | "rows" | "gap"; + +const isGridKey = (key: string): key is GridKey => + key === "columns" || key === "rows" || key === "gap"; + +const PADDING_KEY = "padding"; +const MAX_PADDING = 1024; + +/** + * The left panel of the Layout tab: how many columns and rows the grid has, the gap + * between its cells, and the padding around the grid. + */ +@customElement("ods-layout-panel") +export class OdsLayoutPanel extends LitElement { + static styles = [ + baseStyles, + chromeStyles, + css` + :host { + display: contents; + } + .toolbox { + min-width: 0; + min-height: 0; + display: flex; + flex-direction: column; + overflow: auto; + border-inline-end: 1px solid var(--studio-border); + background: var(--studio-surface); + } + .panel-title { + min-height: 58px; + display: flex; + align-items: center; + padding: 11px 12px; + } + .panel-title h2 { + margin: 1px 0 0; + font-size: 15px; + } + .section { + display: grid; + gap: var(--ha-space-2, 8px); + padding: var(--ha-space-1, 4px) var(--ha-space-3, 12px) + var(--ha-space-4, 16px); + } + .section h3 { + margin: 0; + color: var(--studio-muted); + font-size: 11px; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + } + .fields { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: var(--ha-space-2, 8px); + } + p { + margin: 0; + color: var(--studio-muted); + font-size: 12px; + line-height: 1.45; + } + .count { + color: var(--studio-text); + font-weight: 600; + } + `, + ]; + + @property({ attribute: false }) public layout!: GridLayout; + @property({ attribute: false }) public limits!: LayoutLimits; + /** The space kept free around the grid, a setting of the display. */ + @property({ type: Number }) public padding = 0; + + private onFieldChange(event: OdsEvent<"field-change">): void { + event.stopPropagation(); + const { key, value } = event.detail; + const number = Number(value); + if (!Number.isFinite(number)) return; + if (isGridKey(key)) { + emit(this, "grid-change", { [key]: number }); + } + if (key === PADDING_KEY) { + emit(this, "display-number-change", { key: PADDING_KEY, value: number }); + } + } + + private renderField( + key: GridKey | typeof PADDING_KEY, + value: number, + label: string, + min: number, + max: number + ): TemplateResult { + return html` + + `; + } + + private renderGrid(): TemplateResult { + const { minLines, maxLines, maxGap } = this.limits; + return html` +
+

${strings.basic.gridHeading}

+
+ ${this.renderField("columns", this.layout.columns, strings.basic.columns, minLines, maxLines)} + ${this.renderField("rows", this.layout.rows, strings.basic.rows, minLines, maxLines)} + ${this.renderField("gap", this.layout.gap, strings.basic.gap, 0, maxGap)} + ${this.renderField(PADDING_KEY, this.padding, strings.fields.padding, 0, MAX_PADDING)} +
+
+ `; + } + + private renderRegions(): TemplateResult { + return html` +
+

${strings.basic.regionsHeading}

+ + ${strings.basic.regionCount(this.layout.regions.length)} + +

${strings.basic.regionsHint}

+
+ `; + } + + protected render(): TemplateResult | typeof nothing { + if (!this.layout || !this.limits) return nothing; + return html` + + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ods-layout-panel": OdsLayoutPanel; + } +} diff --git a/frontend-src/src/ods-library.ts b/frontend-src/src/ods-library.ts index f31beae..e78cb21 100644 --- a/frontend-src/src/ods-library.ts +++ b/frontend-src/src/ods-library.ts @@ -287,6 +287,8 @@ export class OdsLibrary extends LitElement { @property({ attribute: false }) public widgetErrors: WidgetLoadError[] = []; @property({ attribute: false }) public primitives: PrimitiveDefinition[] = []; @property({ type: Boolean }) public collapsed = false; + /** The basic editor offers widgets only: no containers and no primitives. */ + @property({ type: Boolean }) public widgetsOnly = false; @state() private searchText = ""; /** The sections the viewer folded; a search opens them all. */ @@ -575,6 +577,9 @@ export class OdsLibrary extends LitElement { primitives: PrimitiveEntry[], widgets: WidgetDefinition[] ): TemplateResult { + if (this.widgetsOnly) { + return this.renderWidgetSection(widgets); + } const searching = this.searchText !== ""; if ( searching && @@ -595,6 +600,12 @@ export class OdsLibrary extends LitElement { `; } + private get heading(): string { + return this.widgetsOnly + ? strings.basic.widgetsHeading + : strings.library.heading; + } + protected render(): TemplateResult { if (this.collapsed) { return html` @@ -622,7 +633,7 @@ export class OdsLibrary extends LitElement {
${strings.library.title} -

${strings.library.heading}

+

${this.heading}

+ `; + } + + private renderPaletteSummary(): TemplateResult { + const { palette } = this.dashboard.display; + return html` + + + ${PALETTE_COLORS[palette].map( + (color) => html` + + ` + )} + + ${PALETTE_LABELS[palette]} + + `; + } + + /** The display as it will be, which the arrows turn a quarter at a time. */ + private renderPreview(): TemplateResult { + const { display } = this.dashboard; + const text = strings.newDashboard; + return html` +
+
+ ${this.renderTurnButton(-1, text.turnLeft, "mdi:rotate-left")} + ${this.renderTurnButton(1, text.turnRight, "mdi:rotate-right")} + +
+
+ + ${strings.common.sizeInPixels(display.width, display.height)} · + ${display.rotation}° + + ${this.renderPaletteSummary()} +
+
+ `; + } + + /** Padding and snapping belong to the editor that places elements by hand. */ + private renderAdvanced(): TemplateResult | typeof nothing { + if (this.dashboard.mode === "basic") return nothing; + return this.renderForm(advancedFields()); } protected render(): TemplateResult { @@ -342,16 +530,10 @@ export class OdsNewDashboardDialog extends LitElement { @closed=${this.close} >
+ ${this.renderModes()} ${strings.newDashboard.startFrom} - ${this.renderSources()} ${this.renderSourceBody()} - + ${this.renderSources()} ${this.renderPickerAndName()} + ${this.renderPreview()} ${this.renderAdvanced()}
=> ({ + left: `${frame.x}px`, + top: `${frame.y}px`, + width: `${frame.width}px`, + height: `${frame.height}px`, +}); + +/** + * The regions of a basic dashboard, drawn over the picture of the display. On the Layout + * tab the cells of the grid take two clicks to join into a region; on the Widgets tab each + * region is a place a widget goes into, and a click selects what is in it. + */ +@customElement("ods-region-layer") +export class OdsRegionLayer extends LitElement { + static styles = [ + baseStyles, + css` + :host { + position: absolute; + inset: 0; + pointer-events: none; + } + button { + position: absolute; + box-sizing: border-box; + padding: 0; + pointer-events: auto; + cursor: pointer; + background: transparent; + color: var(--studio-text); + } + .cell { + border: calc(1px * var(--ui, 1)) dashed var(--studio-accent); + } + .cell.joined { + border-color: transparent; + } + .cell:hover, + .cell.in-rectangle { + background: var(--studio-accent-soft); + } + .cell.corner { + background: var(--studio-accent-soft); + border-style: solid; + } + .cell.in-rectangle.invalid { + background: color-mix( + in srgb, + var(--error-color, #db4437) 18%, + transparent + ); + border-color: var(--error-color, #db4437); + } + .outline { + position: absolute; + box-sizing: border-box; + border: calc(2px * var(--ui, 1)) solid var(--studio-accent); + pointer-events: none; + } + .outline { + display: grid; + place-content: center; + justify-items: center; + gap: calc(2px * var(--ui, 1)); + color: var(--studio-text); + } + .letter { + font-size: calc(26px * var(--ui, 1)); + font-weight: 700; + } + .size { + color: var(--studio-muted); + font: calc(10px * var(--ui, 1)) var(--code-font-family, monospace); + } + .outline.selected { + background: var(--studio-accent-soft); + box-shadow: 0 0 0 calc(2px * var(--ui, 1)) var(--studio-accent); + } + /* A region with a widget draws nothing of its own, so the picture is what will be + rendered; only an empty region is marked, and the selected one is outlined. */ + .slot { + border: 0; + } + .slot:hover { + box-shadow: inset 0 0 0 calc(1px * var(--ui, 1)) var(--studio-accent); + } + .slot.empty { + border: calc(1px * var(--ui, 1)) dashed var(--studio-accent); + background: color-mix(in srgb, var(--studio-surface) 70%, transparent); + } + .slot.empty:hover { + background: var(--studio-accent-soft); + box-shadow: none; + } + .slot.selected { + border: calc(2px * var(--ui, 1)) solid var(--studio-accent); + box-shadow: none; + } + .slot.empty.selected { + background: var(--studio-accent-soft); + } + .slot-label { + position: absolute; + top: 0; + left: 0; + max-width: 100%; + padding: calc(2px * var(--ui, 1)) calc(6px * var(--ui, 1)); + overflow: hidden; + background: var(--studio-accent); + color: var(--studio-on-accent, #fff); + font-size: calc(11px * var(--ui, 1)); + text-overflow: ellipsis; + white-space: nowrap; + } + .slot-empty { + display: grid; + gap: calc(4px * var(--ui, 1)); + place-items: center; + font-size: calc(12px * var(--ui, 1)); + } + .slot-empty ha-icon { + --mdc-icon-size: calc(28px * var(--ui, 1)); + color: var(--studio-accent); + } + .status { + position: absolute; + bottom: calc(8px * var(--ui, 1)); + left: 50%; + padding: calc(4px * var(--ui, 1)) calc(10px * var(--ui, 1)); + border-radius: 999px; + background: var(--studio-text); + color: var(--studio-surface); + font-size: calc(12px * var(--ui, 1)); + transform: translateX(-50%); + white-space: nowrap; + } + `, + ]; + + @property({ attribute: false }) public dashboard!: Dashboard; + @property({ attribute: false }) public frames?: LayoutFrames; + @property() public step: BasicStep = "layout"; + @property() public selectedRegionId = ""; + + /** The first corner of a region being drawn. */ + @state() private corner?: CellPosition; + /** The cell under the pointer; with a corner set, it is the second corner. */ + @state() private hover?: CellPosition; + + connectedCallback(): void { + super.connectedCallback(); + window.addEventListener("keydown", this.onKeyDown); + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + window.removeEventListener("keydown", this.onKeyDown); + } + + protected willUpdate(changed: Map): void { + if (changed.has("step")) { + this.stopJoining(); + } + } + + private get layout(): GridLayout | undefined { + return this.dashboard.layout; + } + + private onKeyDown = (event: KeyboardEvent): void => { + if (event.key === "Escape" && this.corner) { + this.stopJoining(); + } + }; + + private hoverCell(cell: CellPosition): void { + this.hover = cell; + } + + private stopJoining(): void { + this.corner = undefined; + this.hover = undefined; + } + + private cellAt(index: number, layout: GridLayout): CellPosition { + return { + row: Math.floor(index / layout.columns), + column: index % layout.columns, + }; + } + + private isCorner(cell: CellPosition): boolean { + return this.corner?.row === cell.row && this.corner.column === cell.column; + } + + /** The cells from the first corner to the one under the pointer. */ + private get joining(): CellRectangle | undefined { + if (!this.corner || !this.hover) return undefined; + return rectangleBetween(this.corner, this.hover); + } + + private isInJoin(cell: CellPosition): boolean { + const join = this.joining; + if (!join) return false; + return ( + cell.row >= join.row && + cell.row < join.row + join.rowSpan && + cell.column >= join.column && + cell.column < join.column + join.columnSpan + ); + } + + /** A cell of a region of several cells shows no border, so the region reads as one. */ + private isInJoinedRegion(cell: CellPosition, layout: GridLayout): boolean { + const region = regionAt(layout, cell); + return ( + region !== undefined && (region.rowSpan > 1 || region.columnSpan > 1) + ); + } + + private joinIsValid(layout: GridLayout): boolean { + const join = this.joining; + return join !== undefined && canMerge(layout, join); + } + + private onCellClick(cell: CellPosition, layout: GridLayout): void { + const region = regionAt(layout, cell); + if (!this.corner) { + this.corner = cell; + if (region) emit(this, "region-select", { regionId: region.id }); + return; + } + const rectangle = rectangleBetween(this.corner, cell); + if (rectangle.rowSpan === 1 && rectangle.columnSpan === 1) { + this.stopJoining(); + return; + } + if (!canMerge(layout, rectangle)) return; + this.stopJoining(); + emit(this, "regions-merge", { rectangle }); + } + + /** Double-clicking a joined region cuts it back into cells. */ + private onCellDoubleClick(cell: CellPosition, layout: GridLayout): void { + const region = regionAt(layout, cell); + if (region && this.isInJoinedRegion(cell, layout)) { + this.stopJoining(); + emit(this, "region-split", { regionId: region.id }); + } + } + + private onSlotClick(regionId: string): void { + emit(this, "region-select", { regionId }); + } + + private renderCell( + frame: ItemFrame, + index: number, + layout: GridLayout + ): TemplateResult { + const cell = this.cellAt(index, layout); + const inJoin = this.isInJoin(cell); + const classes = [ + "cell", + this.isCorner(cell) ? "corner" : "", + inJoin ? "in-rectangle" : "", + this.isInJoinedRegion(cell, layout) ? "joined" : "", + inJoin && !this.joinIsValid(layout) ? "invalid" : "", + ].join(" "); + return html` + + `; + } + + /** A region of the layout: its letter, and how many cells wide and high it is. */ + private renderOutline( + frames: LayoutFrames, + region: GridRegion, + index: number + ): TemplateResult | typeof nothing { + // The frames come from the backend a moment after the layout changes. + const frame = frames.regions.find( + (candidate) => candidate.id === region.id + ); + if (!frame) return nothing; + const selected = region.id === this.selectedRegionId; + return html` +
+ ${regionLetter(index)} + + ${strings.basic.regionSize(region.columnSpan, region.rowSpan)} + +
+ `; + } + + private renderLayoutStep( + frames: LayoutFrames, + layout: GridLayout + ): TemplateResult { + return html` + ${layout.regions.map((region, index) => + this.renderOutline(frames, region, index) + )} + ${frames.cells.map((frame, index) => + this.renderCell(frame, index, layout) + )} + ${this.renderStatus(layout)} + `; + } + + /** What to do next while a region is being drawn. */ + private statusMessage(layout: GridLayout): string | undefined { + if (this.corner) { + const invalid = this.joining !== undefined && !this.joinIsValid(layout); + return invalid ? strings.basic.joinInvalid : strings.basic.joinStarted; + } + return undefined; + } + + private renderStatus(layout: GridLayout): TemplateResult | typeof nothing { + const message = this.statusMessage(layout); + if (!message) return nothing; + return html` +
${message}
+ `; + } + + /** An empty region says so; a filled one names its widget while it is selected. */ + private renderSlotContent( + regionId: string, + letter: string + ): TemplateResult | typeof nothing { + const widget = widgetInRegion(this.dashboard, regionId); + if (!widget) { + return html` + + ${letter} + ${strings.basic.emptyRegion} + + `; + } + if (regionId !== this.selectedRegionId) return nothing; + return html` + ${widget.name} + `; + } + + private renderSlot( + frame: ItemFrame, + regionId: string, + letter: string + ): TemplateResult { + const empty = !widgetInRegion(this.dashboard, regionId); + const selected = regionId === this.selectedRegionId; + const classes = [ + "slot", + empty ? "empty" : "", + selected ? "selected" : "", + ].join(" "); + return html` + + `; + } + + private renderWidgetsStep(frames: LayoutFrames): TemplateResult { + return html` + ${frames.regions.map((region, index) => + this.renderSlot(region, region.id, regionLetter(index)) + )} + `; + } + + protected render(): TemplateResult | typeof nothing { + const layout = this.layout; + const frames = this.frames; + if (!layout || !frames) return nothing; + return this.step === "layout" + ? this.renderLayoutStep(frames, layout) + : this.renderWidgetsStep(frames); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ods-region-layer": OdsRegionLayer; + } +} diff --git a/frontend-src/src/rotation-motion.test.ts b/frontend-src/src/rotation-motion.test.ts new file mode 100644 index 0000000..ab098ae --- /dev/null +++ b/frontend-src/src/rotation-motion.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from "vitest"; +import { shortestTurn, turnAngleAt } from "./rotation-motion"; + +describe("turnAngleAt", () => { + it("starts where it was and ends where it is going", () => { + expect(turnAngleAt(0, 90, 0)).toBe(0); + expect(turnAngleAt(0, 90, 1)).toBe(90); + expect(turnAngleAt(90, 0, 1)).toBe(0); + }); + + it("first leans back the other way", () => { + expect(turnAngleAt(0, 90, 0.1)).toBeLessThan(0); + expect(turnAngleAt(0, -90, 0.1)).toBeGreaterThan(0); + }); + + it("swings past the end and settles back", () => { + const beyond = turnAngleAt(0, 90, 0.78); + expect(beyond).toBeGreaterThan(90); + + expect(turnAngleAt(0, 90, 0.99)).toBeCloseTo(90, 0); + }); + + it("does not move when there is nowhere to go", () => { + expect(turnAngleAt(90, 90, 0.5)).toBe(90); + }); + + it("never jumps from one moment to the next", () => { + let previous = turnAngleAt(0, 90, 0); + for (let step = 1; step <= 100; step += 1) { + const angle = turnAngleAt(0, 90, step / 100); + expect(Math.abs(angle - previous)).toBeLessThan(12); + previous = angle; + } + }); +}); + +describe("shortestTurn", () => { + it("turns a quarter to either side", () => { + expect(shortestTurn(0, 90)).toBe(90); + expect(shortestTurn(0, 270)).toBe(-90); + }); + + it("keeps turning the same way past a full circle", () => { + expect(shortestTurn(270, 0)).toBe(90); + expect(shortestTurn(90, 0)).toBe(-90); + }); + + it("goes the same way for half a turn, whatever the angle", () => { + expect(shortestTurn(0, 180)).toBe(180); + expect(shortestTurn(90, 270)).toBe(180); + }); + + it("copes with an angle that has gone round many times", () => { + expect(shortestTurn(720 + 90, 180)).toBe(90); + expect(shortestTurn(-450, 0)).toBe(90); + }); +}); diff --git a/frontend-src/src/rotation-motion.ts b/frontend-src/src/rotation-motion.ts new file mode 100644 index 0000000..19ba4d8 --- /dev/null +++ b/frontend-src/src/rotation-motion.ts @@ -0,0 +1,54 @@ +/** + * How a display turns in the preview: it first leans a little the wrong way, swings round + * past where it ends up, and settles back. All in degrees and milliseconds. + */ +export const TURN_DURATION_MS = 860; +const LEAN_BACK_DEGREES = 6; +const OVERSHOOT_DEGREES = 9; + +/** Where each part of the motion ends, as a share of the whole. */ +const LEAN_ENDS = 0.13; +const SWING_ENDS = 0.76; + +const easeOutSine = (progress: number): number => + Math.sin((Math.PI / 2) * progress); + +const easeOutCubic = (progress: number): number => 1 - (1 - progress) ** 3; + +const clamp01 = (value: number): number => Math.min(1, Math.max(0, value)); + +/** The angle at `progress` (0 to 1) of a turn from `from` to `to`. */ +export const turnAngleAt = ( + from: number, + to: number, + progress: number +): number => { + const direction = Math.sign(to - from); + if (direction === 0) return to; + const time = clamp01(progress); + if (time >= 1) return to; + if (time < LEAN_ENDS) { + const lean = easeOutSine(time / LEAN_ENDS); + return from - direction * LEAN_BACK_DEGREES * lean; + } + if (time < SWING_ENDS) { + const swing = easeOutCubic((time - LEAN_ENDS) / (SWING_ENDS - LEAN_ENDS)); + const start = from - direction * LEAN_BACK_DEGREES; + const reach = + to - from + direction * (LEAN_BACK_DEGREES + OVERSHOOT_DEGREES); + return start + reach * swing; + } + const settle = easeOutCubic((time - SWING_ENDS) / (1 - SWING_ENDS)); + return to + direction * OVERSHOOT_DEGREES * (1 - settle); +}; + +/** + * The turn that takes a display from one of the four rotations to another by the short way, + * so going from 270° to 0° keeps turning forward. Half a turn goes the same way as a click on + * the right arrow. + */ +export const shortestTurn = (fromAngle: number, toRotation: number): number => { + const current = ((fromAngle % 360) + 360) % 360; + const raw = ((toRotation - current + 540) % 360) - 180; + return raw === -180 ? 180 : raw; +}; diff --git a/frontend-src/src/strings.de.ts b/frontend-src/src/strings.de.ts index faf2237..7cf55bd 100644 --- a/frontend-src/src/strings.de.ts +++ b/frontend-src/src/strings.de.ts @@ -150,6 +150,9 @@ export const german: StringsOverride = { deviceDetails: "Größe und Farben des Dashboards", colors: "Farben", create: "Dashboard erstellen", + previewLabel: "Vorschau des Displays", + turnLeft: "Um 90° nach links drehen", + turnRight: "Um 90° nach rechts drehen", creating: "Wird erstellt…", }, @@ -585,4 +588,44 @@ export const german: StringsOverride = { grayscale4: "Graustufen · 4 Stufen", grayscale16: "Graustufen · 16 Stufen", }, + + basic: { + modeTitle: "Editor", + basic: "Einfach", + basicHint: "Ein Raster aus Bereichen, in jedem ein Widget.", + advanced: "Erweitert", + advancedHint: "Jedes Element frei platzieren.", + badgeBasic: "Einfach", + badgeAdvanced: "Erweitert", + stepsLabel: "Schritte des Editors", + stepLayout: "Layout", + stepWidgets: "Widgets", + widgetsHeading: "Widgets", + layoutTitle: "Layout", + layoutHeading: "Bereiche", + gridHeading: "Raster", + columns: "Spalten", + rows: "Zeilen", + gap: "Abstand", + regionsHeading: "Bereiche", + regionsHint: + "Klicke eine Zelle und dann eine zweite, um die Zellen dazwischen zu einem Bereich zu verbinden. Klicke einen Bereich doppelt an, um ihn zu entfernen.", + joinStarted: "Klicke eine zweite Zelle, um den Bereich abzuschließen.", + joinInvalid: "Das würde einen Bereich zerschneiden.", + cancelJoin: "Abbrechen", + regionCount: (count: number): string => + `${count} ${count === 1 ? "Bereich" : "Bereiche"}`, + cell: (row: number, column: number): string => + `Zelle in Zeile ${row} und Spalte ${column}`, + regionSize: (columns: number, rows: number): string => + `Bereich ${columns}×${rows}`, + region: (name: string): string => `Bereich ${name}`, + emptyRegion: "Leerer Bereich", + emptyRegionHint: "Wähle ein Widget aus der Liste.", + noEmptyRegion: "Jeder Bereich enthält schon ein Widget.", + layoutStepHint: + "Zeichne zuerst die Bereiche und fülle sie dann im Tab Widgets.", + widgetsStepHint: + "Ziehe ein Widget in einen Bereich oder klicke es an, um den gewählten Bereich zu füllen.", + }, }; diff --git a/frontend-src/src/strings.pl.ts b/frontend-src/src/strings.pl.ts index 1ddef87..79a9991 100644 --- a/frontend-src/src/strings.pl.ts +++ b/frontend-src/src/strings.pl.ts @@ -165,6 +165,9 @@ export const polish: StringsOverride = { deviceDetails: "Rozmiar i kolory dashboardu", colors: "Kolory", create: "Utwórz dashboard", + previewLabel: "Podgląd wyświetlacza", + turnLeft: "Obróć o 90° w lewo", + turnRight: "Obróć o 90° w prawo", creating: "Tworzenie…", }, @@ -595,4 +598,44 @@ export const polish: StringsOverride = { grayscale4: "Skala szarości · 4 poziomy", grayscale16: "Skala szarości · 16 poziomów", }, + + basic: { + modeTitle: "Edytor", + basic: "Podstawowy", + basicHint: "Siatka regionów, w każdym widżet.", + advanced: "Zaawansowany", + advancedHint: "Każdy element ustawiasz swobodnie.", + badgeBasic: "Podstawowy", + badgeAdvanced: "Zaawansowany", + stepsLabel: "Kroki edytora", + stepLayout: "Układ", + stepWidgets: "Widżety", + widgetsHeading: "Widżety", + layoutTitle: "Układ", + layoutHeading: "Regiony", + gridHeading: "Siatka", + columns: "Kolumny", + rows: "Wiersze", + gap: "Odstęp", + regionsHeading: "Regiony", + regionsHint: + "Kliknij jedną komórkę, potem drugą, aby połączyć komórki między nimi w region. Kliknij region dwukrotnie, aby go usunąć.", + joinStarted: "Kliknij drugą komórkę, aby zakończyć region.", + joinInvalid: "To przecięłoby region na pół.", + cancelJoin: "Anuluj", + regionCount: (count: number): string => + `${count} ${plural(count, "region", "regiony", "regionów")}`, + cell: (row: number, column: number): string => + `Komórka w wierszu ${row} i kolumnie ${column}`, + regionSize: (columns: number, rows: number): string => + `region ${columns}×${rows}`, + region: (name: string): string => `Region ${name}`, + emptyRegion: "Pusty region", + emptyRegionHint: "Wybierz widżet z listy.", + noEmptyRegion: "Każdy region ma już widżet.", + layoutStepHint: + "Najpierw narysuj regiony, potem wypełnij je na karcie Widżety.", + widgetsStepHint: + "Przeciągnij widżet do regionu albo kliknij go, aby wypełnić zaznaczony region.", + }, }; diff --git a/frontend-src/src/strings.ts b/frontend-src/src/strings.ts index b3b3339..80b4a2f 100644 --- a/frontend-src/src/strings.ts +++ b/frontend-src/src/strings.ts @@ -154,6 +154,9 @@ export const strings = { deviceDetails: "Dashboard size and colors", colors: "Colors", create: "Create dashboard", + previewLabel: "Display preview", + turnLeft: "Turn 90° to the left", + turnRight: "Turn 90° to the right", creating: "Creating…", }, @@ -590,4 +593,44 @@ export const strings = { grayscale4: "Grayscale · 4 levels", grayscale16: "Grayscale · 16 levels", }, + + basic: { + modeTitle: "Editor", + basic: "Basic", + basicHint: "A grid of regions, a widget in each.", + advanced: "Advanced", + advancedHint: "Place every element freely.", + badgeBasic: "Basic", + badgeAdvanced: "Advanced", + stepsLabel: "Editor steps", + stepLayout: "Layout", + stepWidgets: "Widgets", + widgetsHeading: "Widgets", + layoutTitle: "Layout", + layoutHeading: "Regions", + gridHeading: "Grid", + columns: "Columns", + rows: "Rows", + gap: "Gap", + regionsHeading: "Regions", + regionsHint: + "Click one cell, then another, to join the cells between them into a region. Double-click a region to remove it.", + joinStarted: "Click a second cell to finish the region.", + joinInvalid: "That would cut a region in two.", + cancelJoin: "Cancel", + regionCount: (count: number): string => + `${count} ${count === 1 ? "region" : "regions"}`, + cell: (row: number, column: number): string => + `Cell in row ${row} and column ${column}`, + regionSize: (columns: number, rows: number): string => + `${columns}×${rows} region`, + region: (name: string): string => `Region ${name}`, + emptyRegion: "Empty region", + emptyRegionHint: "Pick a widget from the list.", + noEmptyRegion: "Every region already holds a widget.", + layoutStepHint: + "Draw the regions first, then fill them on the Widgets tab.", + widgetsStepHint: + "Drag a widget into a region, or click one to fill the selected region.", + }, } as const; diff --git a/frontend-src/src/studio-api.ts b/frontend-src/src/studio-api.ts index f6a7821..ed638cf 100644 --- a/frontend-src/src/studio-api.ts +++ b/frontend-src/src/studio-api.ts @@ -6,7 +6,9 @@ import type { FontInfo, HomeAssistant, IconCatalog, + GridLayout, ImportPlan, + LayoutFrames, ReloadWidgetsResponse, } from "./types"; @@ -18,6 +20,20 @@ export const bootstrap = (hass: HomeAssistant): Promise => language: hass.language, }); +/** Where the cells and regions of a layout are on a display, laid out by the backend. */ +export const layoutFrames = ( + hass: HomeAssistant, + display: { width: number; height: number; padding: number }, + layout: GridLayout +): Promise => + hass.callWS({ + type: "opendisplay_studio/layout_frames", + width: display.width, + height: display.height, + padding: display.padding, + layout, + }); + /** Loads the widget packages again, without restarting Home Assistant. */ export const reloadWidgets = ( hass: HomeAssistant diff --git a/frontend-src/src/studio-styles.ts b/frontend-src/src/studio-styles.ts index 4ee14a4..977f2d0 100644 --- a/frontend-src/src/studio-styles.ts +++ b/frontend-src/src/studio-styles.ts @@ -82,7 +82,6 @@ export const tileStyles = css` .dashboard-card, .dashboard-add-card { min-width: 0; - min-height: 236px; padding: 0; border: 1px solid var(--studio-border); border-radius: 13px; @@ -90,6 +89,10 @@ export const tileStyles = css` background: var(--studio-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); } + /* A card is as tall as its picture and its two lines; the add card matches it. */ + .dashboard-add-card { + min-height: 200px; + } .dashboard-card:hover, .dashboard-card:focus-within, .dashboard-add-card:hover, diff --git a/frontend-src/src/test-support.ts b/frontend-src/src/test-support.ts index 93c8abd..ae97ae6 100644 --- a/frontend-src/src/test-support.ts +++ b/frontend-src/src/test-support.ts @@ -72,6 +72,7 @@ export const dashboardWith = ( id: "d1", schemaVersion: 1, name: "Test", + mode: "advanced", status: "draft", language: "en", display: { diff --git a/frontend-src/src/types.ts b/frontend-src/src/types.ts index 92bff97..3bfeb68 100644 --- a/frontend-src/src/types.ts +++ b/frontend-src/src/types.ts @@ -51,6 +51,8 @@ export interface WidgetItem extends ItemState { }; frame: ItemFrame; layout: { padding: number }; + /** The region of a basic dashboard's layout the widget fills; its frame follows it. */ + region?: string; } /** What every primitive but the debug grid can be: turned clockwise about its middle. */ @@ -296,10 +298,47 @@ export type StudioItem = LeafItem | ContainerItem; /** How far, clockwise, the picture is turned before a display gets it. */ export type Rotation = 0 | 90 | 180 | 270; +/** How a dashboard is edited: by regions of a grid (basic) or by free placement (advanced). */ +export type DashboardMode = "basic" | "advanced"; + +/** A rectangle of cells of the grid; every cell of the grid belongs to exactly one. */ +export interface GridRegion { + id: string; + row: number; + column: number; + rowSpan: number; + columnSpan: number; +} + +export interface GridLayout { + columns: number; + rows: number; + gap: number; + regions: GridRegion[]; +} + +/** Where the cells and the regions of a layout are on the display, as the backend lays them. */ +export interface LayoutFrames { + cells: ItemFrame[]; + regions: Array; +} + +/** What the backend accepts of a grid; the panel never declares these itself. */ +export interface LayoutLimits { + minLines: number; + maxLines: number; + defaultGap: number; + maxGap: number; +} + export interface Dashboard { id: string; schemaVersion: 1; name: string; + /** Chosen when the dashboard is created and never changed afterwards. */ + mode: DashboardMode; + /** The grid of a basic dashboard; an advanced one has none. */ + layout?: GridLayout; status: DashboardStatus; language: string; display: { @@ -547,6 +586,7 @@ export interface BootstrapResponse { widgetErrors: WidgetLoadError[]; primitives: PrimitiveDefinition[]; fonts: FontInfo[]; + layoutLimits: LayoutLimits; } export interface ReloadWidgetsResponse { diff --git a/frontend-src/tsconfig.json b/frontend-src/tsconfig.json index a032344..e41d1ea 100644 --- a/frontend-src/tsconfig.json +++ b/frontend-src/tsconfig.json @@ -40,6 +40,15 @@ "src/ods-property-field.ts", "src/ods-structure.ts", "src/ods-zoom-bar.ts", + "src/ods-basic-steps.ts", + "src/ods-display-preview.ts", + "src/display-shape.ts", + "src/rotation-motion.ts", + "src/ods-layout-panel.ts", + "src/ods-region-layer.ts", + "src/basic-ops.ts", + "src/grid-layout.ts", + "src/dev-layout.ts", "src/types.ts", "src/palettes.ts", "src/ods-popover.ts", diff --git a/tests/test_basic_layout.py b/tests/test_basic_layout.py new file mode 100644 index 0000000..edfdce2 --- /dev/null +++ b/tests/test_basic_layout.py @@ -0,0 +1,357 @@ +"""A basic dashboard is a grid cut into regions, with a widget in each region.""" + +from __future__ import annotations + +from copy import deepcopy +from typing import TYPE_CHECKING, Any + +import pytest + +from custom_components.opendisplay_studio.basic_layout import ( + grid_cells, + region_frame, + validate_layout, + working_area, +) +from custom_components.opendisplay_studio.compiler import async_compile_dashboard +from custom_components.opendisplay_studio.dashboards import ( + DashboardValidationError, + validate_dashboard, +) +from custom_components.opendisplay_studio.widgets import DEFAULT_REGISTRY + +from .test_items import dashboard, text +from .test_widgets import widget_item + +if TYPE_CHECKING: + from homeassistant.core import HomeAssistant + + +def region( + region_id: str, row: int, column: int, row_span: int = 1, column_span: int = 1 +) -> dict[str, Any]: + return { + "id": region_id, + "row": row, + "column": column, + "rowSpan": row_span, + "columnSpan": column_span, + } + + +def two_by_two(**overrides: Any) -> dict[str, Any]: + return { + "columns": 2, + "rows": 2, + "gap": 8, + "regions": [ + region("a", 0, 0), + region("b", 0, 1), + region("c", 1, 0), + region("d", 1, 1), + ], + **overrides, + } + + +def in_region(region_id: str, **overrides: Any) -> dict[str, Any]: + item = widget_item("sensor-card", item_id=f"w-{region_id}") + return {**item, "region": region_id, **overrides} + + +def basic(items: list[dict[str, Any]], layout: dict[str, Any] | None = None) -> dict: + return { + **dashboard(items), + "mode": "basic", + "layout": layout if layout is not None else two_by_two(), + } + + +def validated(value: dict[str, Any]) -> dict[str, Any]: + return validate_dashboard(value, DEFAULT_REGISTRY) + + +def test_the_cells_of_a_grid_fill_the_working_area_with_the_gap_between_them() -> None: + area = working_area(800, 480, 20) + + cells = grid_cells(area, 2, 2, 8) + + assert [(c.x, c.y, c.width, c.height) for c in cells] == [ + (20, 20, 376, 216), + (404, 20, 376, 216), + (20, 244, 376, 216), + (404, 244, 376, 216), + ] + + +def test_a_region_spans_from_its_first_cell_to_its_last() -> None: + cells = grid_cells(working_area(800, 480, 0), 2, 2, 8) + + assert region_frame(cells, 2, region("wide", 0, 0, column_span=2)) == { + "x": 0, + "y": 0, + "width": 800, + "height": 236, + } + assert region_frame(cells, 2, region("tall", 0, 1, row_span=2)) == { + "x": 404, + "y": 0, + "width": 396, + "height": 480, + } + + +def test_a_valid_layout_is_kept_as_it_is() -> None: + assert validate_layout(two_by_two()) == two_by_two() + + +def test_a_layout_without_a_gap_gets_the_default_one() -> None: + layout = two_by_two() + del layout["gap"] + + assert validate_layout(layout)["gap"] == 8 + + +@pytest.mark.parametrize( + "layout", + [ + two_by_two(columns=0), + two_by_two(rows=13), + two_by_two(gap=-1), + two_by_two(regions=[]), + two_by_two( + regions=[ + region("a", 0, 0), + region("a", 0, 1), + region("c", 1, 0), + region("d", 1, 1), + ] + ), + # A cell with no region. + two_by_two(regions=[region("a", 0, 0), region("b", 0, 1), region("c", 1, 0)]), + # Two regions on one cell. + two_by_two( + regions=[ + region("a", 0, 0, 2, 2), + region("b", 0, 1), + region("c", 1, 0), + region("d", 1, 1), + ] + ), + # Beyond the grid. + two_by_two( + regions=[region("a", 0, 0, 1, 3), region("c", 1, 0), region("d", 1, 1)] + ), + "a grid", + ], + ids=[ + "no columns", + "too many rows", + "negative gap", + "no regions", + "same id", + "a cell left out", + "overlap", + "beyond the grid", + "not an object", + ], +) +def test_a_layout_that_is_not_a_tiling_of_the_grid_is_refused(layout: Any) -> None: + with pytest.raises(DashboardValidationError): + validate_layout(layout) + + +def test_a_basic_dashboard_puts_each_widget_in_the_frame_of_its_region() -> None: + sent = [in_region("a"), in_region("d")] + for item in sent: + item["frame"] = {"x": 3, "y": 3, "width": 10, "height": 10} + + result = validated(basic(sent)) + + frames = {item["region"]: item["frame"] for item in result["items"]} + assert frames["a"] == {"x": 0, "y": 0, "width": 396, "height": 236} + assert frames["d"] == {"x": 404, "y": 244, "width": 396, "height": 236} + assert result["mode"] == "basic" + assert result["layout"] == two_by_two() + + +def test_a_basic_dashboard_follows_its_padding() -> None: + value = basic([in_region("a")]) + value["display"]["padding"] = 20 + + result = validated(value) + + assert result["items"][0]["frame"]["x"] == 20 + + +def test_a_region_may_be_empty() -> None: + assert validated(basic([in_region("b")]))["items"][0]["region"] == "b" + assert validated(basic([]))["items"] == [] + + +@pytest.mark.parametrize( + "items", + [ + [{**in_region("a"), "region": "nowhere"}], + [{k: v for k, v in in_region("a").items() if k != "region"}], + [in_region("a"), {**in_region("a"), "id": "second"}], + [text()], + ], + ids=["unknown region", "no region", "two widgets in one region", "not a widget"], +) +def test_a_basic_dashboard_holds_one_widget_in_each_region_and_nothing_else( + items: list[dict[str, Any]], +) -> None: + with pytest.raises(DashboardValidationError): + validated(basic(items)) + + +def test_a_basic_dashboard_needs_a_layout() -> None: + value = basic([]) + del value["layout"] + + with pytest.raises(DashboardValidationError): + validated(value) + + +def test_a_dashboard_without_a_mode_is_an_advanced_one_and_stays_as_it_was() -> None: + stored = dashboard([text()]) + assert "mode" not in stored + + result = validated(stored) + + assert result["mode"] == "advanced" + assert "layout" not in result + assert result["items"] == validated({**stored, "mode": "advanced"})["items"] + + +def test_an_advanced_dashboard_refuses_what_belongs_to_a_basic_one() -> None: + with pytest.raises(DashboardValidationError): + validated({**dashboard([]), "layout": two_by_two()}) + with pytest.raises(DashboardValidationError): + validated({**dashboard([in_region("a")])}) + + +def test_an_unknown_mode_is_refused() -> None: + with pytest.raises(DashboardValidationError): + validated({**dashboard([]), "mode": "simple"}) + + +def test_the_mode_survives_a_second_validation() -> None: + first = validated(basic([in_region("a")])) + + assert validated(deepcopy(first)) == first + + +async def test_a_basic_dashboard_is_drawn_inside_the_frames_of_its_regions( + hass: HomeAssistant, +) -> None: + result = validated(basic([in_region("a"), in_region("d")])) + + compiled = await async_compile_dashboard(hass, result, DEFAULT_REGISTRY) + + assert compiled.item_bounds["w-a"] == {"x": 0, "y": 0, "width": 396, "height": 236} + assert compiled.item_bounds["w-d"] == { + "x": 404, + "y": 244, + "width": 396, + "height": 236, + } + + +async def test_the_panel_asks_the_backend_for_the_cells_and_regions_of_a_layout( + call: Any, +) -> None: + layout = { + "columns": 2, + "rows": 2, + "gap": 8, + "regions": [ + {"id": "top", "row": 0, "column": 0, "rowSpan": 1, "columnSpan": 2}, + {"id": "left", "row": 1, "column": 0, "rowSpan": 1, "columnSpan": 1}, + {"id": "right", "row": 1, "column": 1, "rowSpan": 1, "columnSpan": 1}, + ], + } + + response = await call( + "layout_frames", width=800, height=480, padding=20, layout=layout + ) + + assert response["success"] + result = response["result"] + assert [(cell["x"], cell["y"]) for cell in result["cells"]] == [ + (20, 20), + (404, 20), + (20, 244), + (404, 244), + ] + assert result["regions"][0] == { + "id": "top", + "x": 20, + "y": 20, + "width": 760, + "height": 216, + } + + +async def test_a_layout_that_leaves_a_cell_empty_is_refused(call: Any) -> None: + layout = { + "columns": 2, + "rows": 1, + "gap": 8, + "regions": [{"id": "a", "row": 0, "column": 0, "rowSpan": 1, "columnSpan": 1}], + } + + response = await call( + "layout_frames", width=800, height=480, padding=20, layout=layout + ) + + assert response["error"]["code"] == "invalid_layout" + + +def test_a_layout_may_mix_regions_of_any_size() -> None: + """A tall region, a square one and single cells make a valid layout.""" + singles = [ + {"id": f"s{index}", "row": index, "column": 3, "rowSpan": 1, "columnSpan": 1} + for index in range(4) + ] + leftover = [ + { + "id": f"c{row}{column}", + "row": row, + "column": column, + "rowSpan": 1, + "columnSpan": 1, + } + for row in (2, 3) + for column in (1, 2) + ] + layout = { + "columns": 4, + "rows": 4, + "gap": 8, + "regions": [ + {"id": "tall", "row": 0, "column": 0, "rowSpan": 4, "columnSpan": 1}, + {"id": "square", "row": 0, "column": 1, "rowSpan": 2, "columnSpan": 2}, + *leftover, + *singles, + ], + } + + validated = validate_layout(layout) + + assert len(validated["regions"]) == 10 + assert validated["regions"][0]["rowSpan"] == 4 + + +def test_a_region_as_wide_as_the_grid_is_valid() -> None: + layout = { + "columns": 4, + "rows": 1, + "gap": 8, + "regions": [ + {"id": "all", "row": 0, "column": 0, "rowSpan": 1, "columnSpan": 4} + ], + } + + assert validate_layout(layout)["regions"][0]["columnSpan"] == 4 From c04a01d3a8c9163e7ee247b3c0c378e4df3a5a1b Mon Sep 17 00:00:00 2001 From: Misiu Date: Tue, 10 Nov 2026 11:56:21 +0100 Subject: [PATCH 3/7] Make the picture a display receives match the editor pixel for pixel The editor draws a dashboard on a picture with a margin around the display and shows the display part of it. The Media Source and the picture sent to a device were drawn on the display alone. The renderer draws an element that hangs out of the picture only as far as the picture goes, and it turns a text after drawing it, so a turned text that started outside the display lost its first letters in the output while the editor showed it whole. The rotation of the display had nothing to do with it. A dashboard is now always drawn once, on the picture with the margin, and the margin is cut off afterwards when the picture is for a display; the editor keeps it. The display is turned after the cut, as before. Delivered pictures have the size they had. A new test renders seven layouts at all four rotations (a text hanging out of each edge, a turned text partly outside, a rectangle beyond the display, a text inside, and the dashboard that showed the fault: a band, a turned text and an agenda) and compares what the editor shows with what the display receives, turned back, pixel for pixel. Twelve of its cases failed before the change. CLAUDE.md records the rule. --- CLAUDE.md | 4 +- .../opendisplay_studio/delivery.py | 25 ++- .../opendisplay_studio/rendering.py | 25 ++- tests/test_output_matches_preview.py | 169 ++++++++++++++++++ 4 files changed, 210 insertions(+), 13 deletions(-) create mode 100644 tests/test_output_matches_preview.py diff --git a/CLAUDE.md b/CLAUDE.md index 62d0608..8127400 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -141,7 +141,9 @@ dashboard document ─▶ validate ─▶ resolve widget data ─▶ resolve exp (`preview_margin`; elements are shifted into it just before rendering), so what hangs out of the display is seen (the empty margin is transparent) and the canvas outlines the display. - Item bounds stay in display coordinates, and the Media Source picture has no margin. + Item bounds stay in display coordinates. The Media Source picture is drawn on that same + picture, margin and all, and the margin is cut off afterwards, so the display receives + exactly the pixels the editor shows (a test compares them, at every rotation). - **The dashboard document is the only persisted state** (HA `Store`, versioned). No `localStorage`/IndexedDB for dashboards. Per-viewer UI conveniences (panel widths, collapsed sections, clipboard) may use memory or diff --git a/custom_components/opendisplay_studio/delivery.py b/custom_components/opendisplay_studio/delivery.py index 4ef05ce..004a47d 100644 --- a/custom_components/opendisplay_studio/delivery.py +++ b/custom_components/opendisplay_studio/delivery.py @@ -39,7 +39,8 @@ def preview_margin(display: dict[str, Any]) -> int: Elements may lie partly outside the display; seeing them makes moving them back easy. A margin of two fifths of the shorter side, at most 256 px, keeps the picture - small enough to render quickly. + small enough to render quickly. The picture for a display is drawn with the same + margin and then cut to the display, see `async_render_dashboard`. """ shorter_side: int = min(display["width"], display["height"]) return min(PREVIEW_MARGIN_LIMIT, round(shorter_side * 0.4)) @@ -59,16 +60,22 @@ async def async_render_dashboard( from the Media Source or sent to a device, is turned by the dashboard's rotation so it has the display's own width and height. With `with_margin` the picture also shows a margin around the display, where elements that hang out of it are drawn. + + Either way the dashboard is drawn once, on the picture with its margin, and the + margin is cut off afterwards when it is not wanted. The renderer draws an element + that hangs out of the picture only as far as the picture goes, and a turned text is + turned after it is drawn, so drawing the display on its own would give another + picture than the editor shows. The display receives exactly what the editor shows. """ started = monotonic() data = hass.data[DOMAIN] compiled = await async_compile_dashboard(hass, dashboard, data.widgets) display = dashboard["display"] - margin = preview_margin(display) if with_margin else 0 - elements = compiled.elements - if margin: - explicit = expand_debug_grids(elements, display["width"], display["height"]) - elements = translate_elements(explicit, margin, margin) + margin = preview_margin(display) + explicit = expand_debug_grids( + compiled.elements, display["width"], display["height"] + ) + elements = translate_elements(explicit, margin, margin) accent_color = accent_color_for_palette(display["palette"]) pivots = ( await async_find_pivots( @@ -79,7 +86,7 @@ async def async_render_dashboard( margin=margin, accent_color=accent_color, ) - if margin + if with_margin else {} ) picture = await data.renderer.async_render( @@ -91,6 +98,7 @@ async def async_render_dashboard( accent_color=accent_color, rotation=display["rotation"] if for_device else 0, margin=margin, + show_margin=with_margin, ) pipeline_ms = round((monotonic() - started) * 1000, 2) LOGGER.info( @@ -108,4 +116,5 @@ async def async_render_dashboard( pipeline_ms, len(picture.png), ) - return RenderedDashboard(compiled, picture, pipeline_ms, margin, pivots) + shown_margin = margin if with_margin else 0 + return RenderedDashboard(compiled, picture, pipeline_ms, shown_margin, pivots) diff --git a/custom_components/opendisplay_studio/rendering.py b/custom_components/opendisplay_studio/rendering.py index 2223c31..5d6f4f9 100644 --- a/custom_components/opendisplay_studio/rendering.py +++ b/custom_components/opendisplay_studio/rendering.py @@ -55,12 +55,21 @@ def _with_clear_margin(image: Image.Image, margin: int) -> Image.Image: return rgb -def _encode_png(image: Image.Image, rotation: int, margin: int = 0) -> bytes: +def _without_margin(image: Image.Image, margin: int) -> Image.Image: + """Return the display itself: the picture with the margin around it cut off.""" + return image.crop((margin, margin, image.width - margin, image.height - margin)) + + +def _encode_png( + image: Image.Image, rotation: int, margin: int = 0, *, show_margin: bool = False +) -> bytes: + if margin and not show_margin: + image = _without_margin(image, margin) if rotation: # PIL turns counter-clockwise; the dashboard setting is clockwise. image = image.rotate(-rotation, expand=True) output = BytesIO() - if margin: + if margin and show_margin: _with_clear_margin(image, margin).save(output, format="PNG", optimize=False) else: image.convert("RGB").save(output, format="PNG", optimize=False) @@ -93,8 +102,14 @@ async def async_render( # noqa: PLR0913 history: DataProvider | None = None, rotation: int = 0, margin: int = 0, + show_margin: bool = False, ) -> OdlRenderResult: - """Render ODL, check the size, then turn the picture clockwise by `rotation`.""" + """ + Render ODL, check the size, then turn the picture clockwise by `rotation`. + + `width` and `height` include a `margin` drawn around the display. It is cut + off the PNG, unless `show_margin` keeps it for the editor to look at. + """ requested_at = monotonic() async with self._semaphore: started_at = monotonic() @@ -118,7 +133,9 @@ async def async_render( # noqa: PLR0913 f"expected {width}x{height}" ) raise OdlRenderError(message) - png = await asyncio.to_thread(_encode_png, image, rotation, margin) + png = await asyncio.to_thread( + _encode_png, image, rotation, margin, show_margin=show_margin + ) completed_at = monotonic() return OdlRenderResult( png=png, diff --git a/tests/test_output_matches_preview.py b/tests/test_output_matches_preview.py new file mode 100644 index 0000000..8016f0e --- /dev/null +++ b/tests/test_output_matches_preview.py @@ -0,0 +1,169 @@ +"""What a display receives is what the editor shows: the same pixels, only turned.""" + +from __future__ import annotations + +from io import BytesIO +from types import SimpleNamespace +from typing import TYPE_CHECKING, Any + +import pytest +from PIL import Image, ImageChops + +from custom_components.opendisplay_studio.const import DOMAIN +from custom_components.opendisplay_studio.dashboards import validate_dashboard +from custom_components.opendisplay_studio.delivery import ( + async_render_dashboard, + preview_margin, +) +from custom_components.opendisplay_studio.rendering import OdlRenderService +from custom_components.opendisplay_studio.widgets import DEFAULT_REGISTRY + +from .test_items import dashboard as dashboard_with + +if TYPE_CHECKING: + from homeassistant.core import HomeAssistant + +RENDERER = OdlRenderService(None, concurrency=1) # type: ignore[arg-type] +WIDTH = 360 +HEIGHT = 184 + + +def text_item(**fields: Any) -> dict[str, Any]: + primitive = { + "type": "text", + "value": "It should work", + "x": 100, + "y": 90, + "size": 23, + "color": "black", + "anchor": "lm", + "font": "ppb.ttf", + **fields, + } + return { + "id": "label", + "kind": "primitive", + "name": "text_1", + "locked": False, + "hidden": False, + "primitive": primitive, + } + + +def rectangle_item(**fields: Any) -> dict[str, Any]: + primitive = { + "type": "rectangle", + "x_start": 0, + "y_start": 0, + "x_end": 59, + "y_end": 183, + "fill": "red", + "outline": "red", + "width": 2, + **fields, + } + return { + "id": "band", + "kind": "primitive", + "name": "rectangle_1", + "locked": False, + "hidden": False, + "primitive": primitive, + } + + +def dashboard(items: list[dict[str, Any]], rotation: int = 0) -> dict[str, Any]: + value = dashboard_with(items) + value["display"] = { + **value["display"], + "width": WIDTH, + "height": HEIGHT, + "palette": "bwry", + "rotation": rotation, + } + return validate_dashboard(value, DEFAULT_REGISTRY) + + +def picture(png: bytes) -> Image.Image: + return Image.open(BytesIO(png)).convert("RGB") + + +async def shown_in_the_editor( + hass: HomeAssistant, value: dict[str, Any] +) -> Image.Image: + """The display as the editor draws it: the picture with its margin cut off.""" + rendered = await async_render_dashboard( + hass, value, for_device=False, with_margin=True + ) + margin = preview_margin(value["display"]) + with_margin = picture(rendered.picture.png) + return with_margin.crop((margin, margin, margin + WIDTH, margin + HEIGHT)) + + +async def received_by_the_display( + hass: HomeAssistant, value: dict[str, Any] +) -> Image.Image: + """What the Media Source gives, turned back so it can be set beside the editor's.""" + rendered = await async_render_dashboard(hass, value, for_device=True) + delivered = picture(rendered.picture.png) + # The picture was turned clockwise by the dashboard's rotation. + return delivered.rotate(value["display"]["rotation"], expand=True) + + +def same_picture(left: Image.Image, right: Image.Image) -> bool: + """Whether two pictures of one size are the same pixel for pixel.""" + assert left.size == right.size + return ImageChops.difference(left, right).getbbox() is None + + +def agenda_item() -> dict[str, Any]: + return { + "id": "agenda", + "kind": "widget", + "name": "agenda_1", + "locked": False, + "hidden": False, + "widget": { + "type": "agenda", + "version": "1.0.0", + "sources": {"calendars": [{"id": "calendar.family"}]}, + "options": {"maxEvents": 5, "days": 14, "showFrame": False}, + }, + "frame": {"x": 60, "y": 0, "width": 300, "height": 184}, + "layout": {"padding": 0}, + } + + +CASES = { + "a text that hangs out to the left, turned upright": [ + rectangle_item(), + text_item(x=-50, y=92, rotation=-90, color="white"), + ], + "a text that hangs out at the top": [text_item(x=100, y=-8, anchor="lm")], + "a text that hangs out to the right": [text_item(x=300, y=90)], + "a text that hangs out at the bottom": [text_item(x=20, y=190)], + "a turned text partly outside": [text_item(x=-30, y=40, rotation=45)], + "a rectangle that reaches beyond the display": [ + rectangle_item(x_start=-40, y_start=-20, x_end=80, y_end=210) + ], + "a text well inside": [text_item()], + "a band, a text turned upright and a widget": [ + rectangle_item(), + text_item(x=-50, y=92, size=23, rotation=-90, color="white", align="center"), + agenda_item(), + ], +} + + +@pytest.mark.parametrize("rotation", [0, 90, 180, 270]) +@pytest.mark.parametrize("name", list(CASES)) +async def test_the_display_receives_what_the_editor_shows( + hass: HomeAssistant, name: str, rotation: int +) -> None: + hass.data[DOMAIN] = SimpleNamespace(widgets=DEFAULT_REGISTRY, renderer=RENDERER) + value = dashboard(CASES[name], rotation) + + editor = await shown_in_the_editor(hass, value) + display = await received_by_the_display(hass, value) + + assert same_picture(editor, display) From 9fc4cb8dac7c4539594e00c39ff245ef2c9524ed Mon Sep 17 00:00:00 2001 From: Misiu Date: Tue, 10 Nov 2026 19:09:56 +0100 Subject: [PATCH 4/7] Let a dashboard give the Media Source picture as it is designed A dashboard that is turned for its display (rotation 90, say) is shown by the editor in the orientation you design it in, but the Media Source gave the picture turned for the display, so a preview in the media browser or a card in Lovelace looked sideways or, for a portrait picture, ran far below the dialog that shows it: Home Assistant draws an image at the full width of that dialog and has no height limit. Display settings has a new switch, "Media Source picture as designed", off by default. Left off, nothing changes: the picture is turned for the display and goes to opendisplay.upload_image without a rotation. Switched on, the Media Source gives the picture in the orientation of the designer, which suits a preview or a card. It is not turned for the display then, so to show it with opendisplay.upload_image the rotation of the dashboard has to be given as `rotation`; the text under the switch names the value. The OpenDisplay action turns pictures by their EXIF orientation itself, so the orientation is not stored in the picture, which would turn it back before it reaches the device. What the editor sends to a device is always turned for it and goes with rotation 0, whatever the switch says; a test checks both settings. - `display.mediaAsDesigned` (boolean, default false) in the dashboard; a dashboard stored without it keeps being turned. The Media Source reads it; nothing else does. - The display settings form shows the switch and, under it, what rotation to give. The harness form shows helper texts so the text can be seen and tested. - Texts in English, Polish and German. - Tests: the setting (default, stored without it, only a boolean), the Media Source at each rotation in both settings, sending from the editor with both settings; the form data and the helper in unit tests; the switch and the text in e2e. --- .../opendisplay_studio/dashboards.py | 5 + .../frontend/opendisplay-studio.js | 1146 +++++++++-------- .../opendisplay_studio/media_source.py | 6 +- frontend-src/e2e/dashboard-library.spec.ts | 71 + frontend-src/src/dashboards.test.ts | 51 +- frontend-src/src/dashboards.ts | 23 + frontend-src/src/dev.ts | 20 + frontend-src/src/ods-gallery.ts | 2 + frontend-src/src/strings.de.ts | 11 + frontend-src/src/strings.pl.ts | 11 + frontend-src/src/strings.ts | 11 + frontend-src/src/test-support.ts | 1 + frontend-src/src/types.ts | 5 + tests/test_media_rotation.py | 151 +++ 14 files changed, 955 insertions(+), 559 deletions(-) create mode 100644 tests/test_media_rotation.py diff --git a/custom_components/opendisplay_studio/dashboards.py b/custom_components/opendisplay_studio/dashboards.py index 0701bd2..7ef86c9 100644 --- a/custom_components/opendisplay_studio/dashboards.py +++ b/custom_components/opendisplay_studio/dashboards.py @@ -20,6 +20,7 @@ from .primitives import DEFAULT_PRIMITIVES, PrimitiveRegistry from .validation import ( DashboardValidationError, + boolean, color, device_id, integer, @@ -60,6 +61,9 @@ def validate_dashboard( if padding * 2 >= min(width, height): raise DashboardValidationError("display.padding leaves no working area") snap_size = integer(display.get("snapSize", 5), "display.snapSize", 1, 256) + media_as_designed = boolean( + display.get("mediaAsDesigned", False), "display.mediaAsDesigned" + ) items = validate_items(value.get("items", []), registry, primitives, width, height) language = value.get("language", "en") if not isinstance(language, str) or LANGUAGE_PATTERN.fullmatch(language) is None: @@ -91,6 +95,7 @@ def validate_dashboard( "snapSize": snap_size, "rotation": rotation(display.get("rotation", 0)), "deviceId": device_id(display.get("deviceId")), + "mediaAsDesigned": media_as_designed, }, "items": items, } diff --git a/custom_components/opendisplay_studio/frontend/opendisplay-studio.js b/custom_components/opendisplay_studio/frontend/opendisplay-studio.js index a76643f..63a52b0 100644 --- a/custom_components/opendisplay_studio/frontend/opendisplay-studio.js +++ b/custom_components/opendisplay_studio/frontend/opendisplay-studio.js @@ -348,6 +348,14 @@ var e = (e, t) => `${e} × ${t}`, t = { advanced: "Advanced display options", padding: "Outer padding", snapSize: "Snap size", + mediaAsDesigned: "Media Source picture as designed", + mediaAsDesignedHelp: (e) => e === 0 ? "The picture of the Media Source is the same either way: this dashboard is not turned." : [ + "The picture of the Media Source keeps the orientation you see in the designer,", + "which suits a preview or a card. It is not turned for the display, so to show", + `it with opendisplay.upload_image set rotation to ${e}.`, + "Left off, the picture is turned for the display.", + "What the editor sends to a device is always turned for it." + ].join(" "), x: "X", y: "Y", innerPadding: "Inner padding" @@ -893,6 +901,14 @@ var e = (e, t) => `${e} × ${t}`, t = { background: "Hintergrund", advanced: "Erweiterte Display-Optionen", padding: "Äußerer Rand", + mediaAsDesigned: "Bild der Media Source wie im Editor", + mediaAsDesignedHelp: (e) => e === 0 ? "Das Bild der Media Source ist in beiden Fällen gleich: Dieses Dashboard ist nicht gedreht." : [ + "Das Bild der Media Source behält die Ausrichtung aus dem Editor,", + "passend für eine Vorschau oder eine Karte. Es ist nicht für das Display gedreht;", + `um es mit opendisplay.upload_image zu zeigen, setze rotation auf ${e}.`, + "Ausgeschaltet wird das Bild für das Display gedreht.", + "Was der Editor an ein Gerät sendet, ist immer für dieses gedreht." + ].join(" "), snapSize: "Rasterschritt", innerPadding: "Innerer Rand" }, @@ -1452,6 +1468,14 @@ var e = (e, t) => `${e} × ${t}`, t = { background: "Tło", advanced: "Zaawansowane ustawienia wyświetlacza", padding: "Margines zewnętrzny", + mediaAsDesigned: "Obraz Media Source tak jak w edytorze", + mediaAsDesignedHelp: (e) => e === 0 ? "Obraz Media Source jest taki sam w obu przypadkach: ten dashboard nie jest obrócony." : [ + "Obraz Media Source zachowuje orientację z edytora, co dobrze nadaje się", + "do podglądu albo karty. Nie jest obrócony dla wyświetlacza, więc aby pokazać go", + `przez opendisplay.upload_image, ustaw rotation na ${e}.`, + "Gdy wyłączone, obraz jest obrócony dla wyświetlacza.", + "To, co edytor wysyła na urządzenie, jest zawsze obrócone dla niego." + ].join(" "), snapSize: "Krok przyciągania", innerPadding: "Margines wewnętrzny" }, @@ -8287,7 +8311,8 @@ var Cl = { padding: 0, snapSize: 5, rotation: 0, - deviceId: null + deviceId: null, + mediaAsDesigned: !1 }, items: [], createdAt: "", @@ -8301,7 +8326,8 @@ var Cl = { background: e.display.background, rotation: String(e.display.rotation), padding: e.display.padding, - snapSize: e.display.snapSize + snapSize: e.display.snapSize, + mediaAsDesigned: e.display.mediaAsDesigned }), Ju = (e, t) => { let n = structuredClone(e); return Object.assign(n.display, t), xo[t.palette].includes(n.display.background) || (n.display.background = "white"), n; @@ -8325,7 +8351,7 @@ var Cl = { width: Math.round(Number(n.width) || 0), height: Math.round(Number(n.height) || 0) }, a = i.width !== e.display.width || i.height !== e.display.height, o = Gu(n.rotation, e.display.rotation), s = a ? i : Wu(i, e.display.rotation, o); - a && (r.display.profileId = "custom", r.display.deviceId = null), r.display.width = s.width, r.display.height = s.height, r.display.rotation = o, r.display.palette = n.palette in bo ? n.palette : "bw", r.display.padding = Math.round(Number(n.padding) || 0), r.display.snapSize = Math.round(Number(n.snapSize) || 0); + a && (r.display.profileId = "custom", r.display.deviceId = null), r.display.width = s.width, r.display.height = s.height, r.display.rotation = o, r.display.palette = n.palette in bo ? n.palette : "bw", r.display.padding = Math.round(Number(n.padding) || 0), r.display.snapSize = Math.round(Number(n.snapSize) || 0), r.display.mediaAsDesigned = n.mediaAsDesigned === !0; let c = xo[r.display.palette]; return r.display.background = c.includes(n.background) ? n.background : "white", r; }, Qu = (e) => { @@ -8393,7 +8419,11 @@ var Cl = { label: t.rotations[e] })) } } -}], ud = () => [{ +}], ud = "mediaAsDesigned", dd = () => [{ + name: ud, + label: t.fields.mediaAsDesigned, + selector: { boolean: {} } +}], fd = (e) => (n) => "name" in n && n.name === "mediaAsDesigned" ? t.fields.mediaAsDesignedHelp(e) : "", pd = () => [{ name: "advanced", type: "expandable", flatten: !0, @@ -8418,164 +8448,165 @@ var Cl = { unit_of_measurement: "px" } } }] -}], dd = () => [{ +}], md = () => [{ name: "name", label: t.fields.name, required: !0, selector: { text: {} } -}], fd = (e = rd) => [ - ...dd(), +}], hd = (e = rd) => [ + ...md(), ...e.size ? od() : [], ...e.palettes.length > 1 ? sd(e.palettes) : [], ...e.backgrounds.length > 0 ? cd(e.backgrounds) : [], ...ld(), - ...ud() -], pd = (e) => "label" in e ? e.label : e.title ?? "", md = { + ...dd(), + ...pd() +], gd = (e) => "label" in e ? e.label : e.title ?? "", _d = { bwr: "#d32f2f", bwry: "#d32f2f", bwy: "#d6a800", spectra6: "#246bfd", seven_color: "#ff8000" -}, hd = (e) => md[e] ?? "#202124", gd = (e, t) => { +}, vd = (e) => _d[e] ?? "#202124", yd = (e, t) => { let n = new Date(e.updatedAt); return Number.isNaN(n.getTime()) ? "" : new Intl.DateTimeFormat(t, { dateStyle: "medium" }).format(n); -}, _d = (e) => e.target.value, vd = (e) => e.composedPath().some((e) => e instanceof HTMLElement && (e.matches("input, textarea, select") || e.isContentEditable)), yd = () => /Mac|iPhone|iPad/.test(navigator.platform), bd = (e) => e.shiftKey || e.ctrlKey || e.metaKey, xd = (e, t, n = "application/json") => { +}, bd = (e) => e.target.value, xd = (e) => e.composedPath().some((e) => e instanceof HTMLElement && (e.matches("input, textarea, select") || e.isContentEditable)), Sd = () => /Mac|iPhone|iPad/.test(navigator.platform), Cd = (e) => e.shiftKey || e.ctrlKey || e.metaKey, wd = (e, t, n = "application/json") => { let r = URL.createObjectURL(new Blob([t], { type: n })), i = document.createElement("a"); i.href = r, i.download = e, i.click(), URL.revokeObjectURL(r); -}, Sd = (e) => new Promise((t) => { +}, Td = (e) => new Promise((t) => { let n = document.createElement("input"); n.type = "file", n.accept = e, n.addEventListener("change", () => t(n.files?.[0])), n.addEventListener("cancel", () => t(void 0)), n.click(); -}), Cd = "dashboard", wd = (e) => `${e.normalize("NFKD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/ł/g, "l").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || Cd}.json`, Td = (e) => Object.fromEntries(e.map((e) => [e.source, e.suggestion])), Ed = (e) => { +}), Ed = "dashboard", Dd = (e) => `${e.normalize("NFKD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/ł/g, "l").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || Ed}.json`, Od = (e) => Object.fromEntries(e.map((e) => [e.source, e.suggestion])), kd = (e) => { try { return JSON.parse(e); } catch { return; } -}, Dd = (e) => typeof e == "string" && e !== "" ? e : void 0, U = (e, t) => e instanceof Error || typeof e == "object" && e && "message" in e ? Dd(e.message) ?? t : Dd(e) ?? t, Od = (e) => { - if (typeof e == "object" && e && "code" in e) return Dd(e.code); -}, kd = (e) => e.callWS({ +}, Ad = (e) => typeof e == "string" && e !== "" ? e : void 0, U = (e, t) => e instanceof Error || typeof e == "object" && e && "message" in e ? Ad(e.message) ?? t : Ad(e) ?? t, jd = (e) => { + if (typeof e == "object" && e && "code" in e) return Ad(e.code); +}, Md = (e) => e.callWS({ type: "opendisplay_studio/bootstrap", language: e.language -}), Ad = (e, t, n) => e.callWS({ +}), Nd = (e, t, n) => e.callWS({ type: "opendisplay_studio/layout_frames", width: t.width, height: t.height, padding: t.padding, layout: n -}), jd = (e) => e.callWS({ +}), Pd = (e) => e.callWS({ type: "opendisplay_studio/reload_widgets", language: e.language -}), Md = async (e, t) => (await e.callWS({ +}), Fd = async (e, t) => (await e.callWS({ type: "opendisplay_studio/create_dashboard", dashboard: t -})).dashboard, Nd = async (e, t) => (await e.callWS({ +})).dashboard, Id = async (e, t) => (await e.callWS({ type: "opendisplay_studio/update_dashboard", dashboard_id: t.id, dashboard: t -})).dashboard, Pd = async (e, t) => { +})).dashboard, Ld = async (e, t) => { await e.callWS({ type: "opendisplay_studio/delete_dashboard", dashboard_id: t }); -}, Fd = (e, t) => e.callWS({ +}, Rd = (e, t) => e.callWS({ type: "opendisplay_studio/compose_preview", dashboard: structuredClone(t) -}), Id = async (e) => (await e.callWS({ type: "opendisplay_studio/list_devices" })).devices, Ld = async (e, t) => { +}), zd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_devices" })).devices, Bd = async (e, t) => { await e.callWS({ type: "opendisplay_studio/send_to_device", dashboard: structuredClone(t) }); -}, Rd = async (e, t) => (await e.callWS({ +}, Vd = async (e, t) => (await e.callWS({ type: "opendisplay_studio/export_dashboard", dashboard: structuredClone(t) -})).file, zd = (e, t, n, r = {}) => e.callWS({ +})).file, Hd = (e, t, n, r = {}) => e.callWS({ type: "opendisplay_studio/prepare_import", file: t, display: n, colorMap: r -}), Bd, Vd = (e) => (Bd ??= e.callWS({ type: "opendisplay_studio/list_icons" }).then((e) => ({ +}), Ud, Wd = (e) => (Ud ??= e.callWS({ type: "opendisplay_studio/list_icons" }).then((e) => ({ names: e.icons, glyphs: Object.fromEntries(Object.entries(e.glyphs).map(([e, t]) => [e, String.fromCodePoint(t)])) -})), Bd), Hd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_fonts" })).fonts, Ud = async (e, t, n) => (await e.callWS({ +})), Ud), Gd = async (e) => (await e.callWS({ type: "opendisplay_studio/list_fonts" })).fonts, Kd = async (e, t, n) => (await e.callWS({ type: "opendisplay_studio/install_font", filename: t, data: n -})).fonts, Wd = async (e, t, n) => (await e.callWS({ +})).fonts, qd = async (e, t, n) => (await e.callWS({ type: "opendisplay_studio/delete_font", name: t, force: n -})).fonts, Gd, Kd = (e) => (Gd ??= Hd(e).catch((e) => { - throw Gd = void 0, e; -}), Gd), qd = (e) => { - Gd = Promise.resolve(e); -}, Jd = (e) => [e.family, e.style].filter((e) => e !== "" && e !== "Regular").join(" "), Yd = (e, t) => e.find((e) => e.name === t), W = (e, t, ...n) => { +})).fonts, Jd, Yd = (e) => (Jd ??= Gd(e).catch((e) => { + throw Jd = void 0, e; +}), Jd), Xd = (e) => { + Jd = Promise.resolve(e); +}, Zd = (e) => [e.family, e.style].filter((e) => e !== "" && e !== "Regular").join(" "), Qd = (e, t) => e.find((e) => e.name === t), W = (e, t, ...n) => { e.dispatchEvent(new CustomEvent(t, { detail: n[0], bubbles: !0, composed: !0 })); -}, Xd = 26, Zd = (e) => { - let t = String.fromCharCode(65 + e % Xd); - return e < Xd ? t : Zd(Math.floor(e / Xd) - 1) + t; -}, Qd = "region-", $d = (e) => { +}, $d = 26, ef = (e) => { + let t = String.fromCharCode(65 + e % $d); + return e < $d ? t : ef(Math.floor(e / $d) - 1) + t; +}, tf = "region-", nf = (e) => { let t = 1; - for (; e.has(`${Qd}${t}`);) t += 1; - let n = `${Qd}${t}`; + for (; e.has(`${tf}${t}`);) t += 1; + let n = `${tf}${t}`; return e.add(n), n; -}, ef = (e) => e.rowSpan > 1 || e.columnSpan > 1, tf = (e, t) => e.row - t.row || e.column - t.column, nf = (e) => { +}, rf = (e) => e.rowSpan > 1 || e.columnSpan > 1, af = (e, t) => e.row - t.row || e.column - t.column, of = (e) => { let t = []; for (let n = e.row; n < e.row + e.rowSpan; n += 1) for (let r = e.column; r < e.column + e.columnSpan; r += 1) t.push({ row: n, column: r }); return t; -}, rf = (e, t) => e.regions.find((e) => nf(e).some((e) => e.row === t.row && e.column === t.column)), af = (e, t) => ({ +}, sf = (e, t) => e.regions.find((e) => of(e).some((e) => e.row === t.row && e.column === t.column)), cf = (e, t) => ({ row: Math.min(e.row, t.row), column: Math.min(e.column, t.column), rowSpan: Math.abs(e.row - t.row) + 1, columnSpan: Math.abs(e.column - t.column) + 1 -}), of = (e) => { +}), lf = (e) => { let t = [...e.regions], n = new Set(t.map((e) => e.id)); - for (let r = 0; r < e.rows; r += 1) for (let i = 0; i < e.columns; i += 1) rf({ + for (let r = 0; r < e.rows; r += 1) for (let i = 0; i < e.columns; i += 1) sf({ ...e, regions: t }, { row: r, column: i }) || t.push({ - id: $d(n), + id: nf(n), row: r, column: i, rowSpan: 1, columnSpan: 1 }); - return sf(t); -}, sf = (e) => [...e.filter(ef), ...e.filter((e) => !ef(e)).sort(tf)], cf = (e, t, n) => ({ + return uf(t); +}, uf = (e) => [...e.filter(rf), ...e.filter((e) => !rf(e)).sort(af)], df = (e, t, n) => ({ columns: e, rows: t, gap: n, - regions: of({ + regions: lf({ columns: e, rows: t, gap: n, regions: [] }) -}), lf = (e, t) => e.row >= t.row && e.column >= t.column && e.row + e.rowSpan <= t.row + t.rowSpan && e.column + e.columnSpan <= t.column + t.columnSpan, uf = (e, t) => e.row < t.row + t.rowSpan && e.row + e.rowSpan > t.row && e.column < t.column + t.columnSpan && e.column + e.columnSpan > t.column, df = (e, t) => e.regions.filter((e) => uf(e, t)).sort(tf), ff = (e, t) => { - let n = df(e, t); - return n.length > 1 && n.every((e) => lf(e, t)); -}, pf = (e, t, n) => { - let r = df(e, t), i = r.find((e) => n.has(e.id)) ?? r[0], a = r.filter((e) => e.id !== i.id), o = e.regions.filter((e) => !r.includes(e)).concat({ +}), ff = (e, t) => e.row >= t.row && e.column >= t.column && e.row + e.rowSpan <= t.row + t.rowSpan && e.column + e.columnSpan <= t.column + t.columnSpan, pf = (e, t) => e.row < t.row + t.rowSpan && e.row + e.rowSpan > t.row && e.column < t.column + t.columnSpan && e.column + e.columnSpan > t.column, mf = (e, t) => e.regions.filter((e) => pf(e, t)).sort(af), hf = (e, t) => { + let n = mf(e, t); + return n.length > 1 && n.every((e) => ff(e, t)); +}, gf = (e, t, n) => { + let r = mf(e, t), i = r.find((e) => n.has(e.id)) ?? r[0], a = r.filter((e) => e.id !== i.id), o = e.regions.filter((e) => !r.includes(e)).concat({ id: i.id, ...t }); return { layout: { ...e, - regions: sf(o) + regions: uf(o) }, removedRegionIds: a.map((e) => e.id) }; -}, mf = (e, t) => { +}, _f = (e, t) => { let n = e.regions.find((e) => e.id === t); if (!n) return e; let r = e.regions.filter((e) => e !== n), i = { @@ -8584,7 +8615,7 @@ var Cl = { column: n.column, rowSpan: 1, columnSpan: 1 - }, a = of({ + }, a = lf({ ...e, regions: [...r, i] }); @@ -8592,13 +8623,13 @@ var Cl = { ...e, regions: a }; -}, hf = (e, t, n) => { +}, vf = (e, t, n) => { let r = { row: 0, column: 0, rowSpan: n, columnSpan: t - }, i = e.regions.filter((e) => lf(e, r)), a = e.regions.filter((e) => !i.includes(e)), o = { + }, i = e.regions.filter((e) => ff(e, r)), a = e.regions.filter((e) => !i.includes(e)), o = { ...e, columns: t, rows: n, @@ -8607,35 +8638,35 @@ var Cl = { return { layout: { ...o, - regions: of(o) + regions: lf(o) }, removedRegionIds: a.map((e) => e.id) }; -}, gf = (e, t) => e.regions.find((e) => t.x >= e.x && t.x < e.x + e.width && t.y >= e.y && t.y < e.y + e.height)?.id, _f = (e, t, n) => { +}, yf = (e, t) => e.regions.find((e) => t.x >= e.x && t.x < e.x + e.width && t.y >= e.y && t.y < e.y + e.height)?.id, bf = (e, t, n) => { let r = structuredClone(e); - return r.mode = t, t === "basic" ? r.layout = cf(2, 2, n) : delete r.layout, r; -}, vf = (e) => e.items.filter((e) => e.kind === "widget"), yf = (e, t) => vf(e).find((e) => e.region === t), bf = (e) => new Set(vf(e).flatMap((e) => e.region ?? [])), xf = (e, t, n) => { - let r = bf(e), i = t.regions.filter((e) => !r.has(e.id)); + return r.mode = t, t === "basic" ? r.layout = df(2, 2, n) : delete r.layout, r; +}, xf = (e) => e.items.filter((e) => e.kind === "widget"), Sf = (e, t) => xf(e).find((e) => e.region === t), Cf = (e) => new Set(xf(e).flatMap((e) => e.region ?? [])), wf = (e, t, n) => { + let r = Cf(e), i = t.regions.filter((e) => !r.has(e.id)); return i.find((e) => e.id === n) ?? i[0]; -}, Sf = (e, t, n, r) => { +}, Tf = (e, t, n, r) => { let i = Kl(t, 0, 0, e); return i.region = n.id, i.frame = { ...r }, e.items.push(i), i; -}, Cf = (e, t) => e.filter((e) => e.kind !== "widget" || !t.includes(e.region ?? "")), wf = (e, t) => { - e.layout = t.layout, e.items = Cf(e.items, t.removedRegionIds); -}, Tf = (e, t) => { - if (!e.layout) return; - let n = bf(e); - wf(e, pf(e.layout, t, n)); -}, Ef = (e, t) => { - e.layout &&= mf(e.layout, t); -}, Df = (e, t) => { - e.layout && wf(e, hf(e.layout, t.columns, t.rows)); +}, Ef = (e, t) => e.filter((e) => e.kind !== "widget" || !t.includes(e.region ?? "")), Df = (e, t) => { + e.layout = t.layout, e.items = Ef(e.items, t.removedRegionIds); }, Of = (e, t) => { + if (!e.layout) return; + let n = Cf(e); + Df(e, gf(e.layout, t, n)); +}, kf = (e, t) => { + e.layout &&= _f(e.layout, t); +}, Af = (e, t) => { + e.layout && Df(e, vf(e.layout, t.columns, t.rows)); +}, jf = (e, t) => { e.layout &&= { ...e.layout, gap: t }; -}, kf = 100, Af = class { +}, Mf = 100, Nf = class { constructor() { this.undoStack = [], this.redoStack = []; } @@ -8646,7 +8677,7 @@ var Cl = { return this.redoStack.length; } record(e) { - this.undoStack.push(structuredClone(e)), this.undoStack.length > kf && this.undoStack.shift(), this.redoStack = []; + this.undoStack.push(structuredClone(e)), this.undoStack.length > Mf && this.undoStack.shift(), this.redoStack = []; } undo(e) { let t = this.undoStack.pop(); @@ -8659,7 +8690,7 @@ var Cl = { clear() { this.undoStack = [], this.redoStack = []; } -}, jf = (e, t) => { +}, Pf = (e, t) => { let n = w(e.items, t); if (!n) return; let { parent: r } = n; @@ -8669,8 +8700,8 @@ var Cl = { width: r.width, height: r.height } : pt(e); -}, Mf = (e, t, n, r) => { - let i = w(e.items, t), a = jf(e, t); +}, Ff = (e, t, n, r) => { + let i = w(e.items, t), a = Pf(e, t); if (!i || !a || i.item.locked) return; let o = x(i.item, r), s = ce(n, "lt"), c = a.x + (a.width - o.width) * s.x, l = a.y + (a.height - o.height) * s.y; S(i.item, Math.round(c - o.x), Math.round(l - o.y)); @@ -8745,7 +8776,7 @@ var Cl = { ha-dialog { --dialog-content-padding: 0; } -`, Nf = P` +`, If = P` .dashboard-card, .dashboard-add-card { min-width: 0; @@ -8773,7 +8804,7 @@ var Cl = { outline: 0; transform: translateY(-1px); } -`, Pf = P` +`, Lf = P` .box { display: flex; align-items: center; @@ -8867,7 +8898,7 @@ var Cl = { background: var(--primary-color); color: var(--text-primary-color, #fff); } -`, Ff = wl(class extends Tl { +`, Rf = wl(class extends Tl { constructor(e) { if (super(e), e.type !== Cl.ATTRIBUTE || e.name !== "class" || e.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute."); } @@ -8888,16 +8919,16 @@ var Cl = { } return tl; } -}), If = 2, q = (e, t) => t === "x" ? e.x : e.y, J = (e, t) => t === "x" ? e.width : e.height, Lf = (e, t) => { +}), zf = 2, q = (e, t) => t === "x" ? e.x : e.y, J = (e, t) => t === "x" ? e.width : e.height, Bf = (e, t) => { let n = q(e, t), r = J(e, t); return [ n, n + r / 2, n + r ]; -}, Rf = (e, t, n) => { +}, Vf = (e, t, n) => { let r = [], i = (t, i, a) => { - for (let o of Lf(t, n)) Lf(e, n).forEach((e, t) => { + for (let o of Bf(t, n)) Bf(e, n).forEach((e, t) => { let n = Math.abs(o - e); n <= i && r.push({ offset: Math.round(o - e), @@ -8908,9 +8939,9 @@ var Cl = { }); }); }; - return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r.push(...Bf(e, t.siblings, n)), r.sort(Hf)[0]; -}, zf = (e, t, n) => q(e, n) < q(t, n) + J(t, n) && q(t, n) < q(e, n) + J(e, n), Bf = (e, t, n) => { - let r = n === "x" ? "y" : "x", i = t.filter((t) => zf(t, e, r)), a = []; + return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r.push(...Uf(e, t.siblings, n)), r.sort(Gf)[0]; +}, Hf = (e, t, n) => q(e, n) < q(t, n) + J(t, n) && q(t, n) < q(e, n) + J(e, n), Uf = (e, t, n) => { + let r = n === "x" ? "y" : "x", i = t.filter((t) => Hf(t, e, r)), a = []; for (let t of i) for (let r of i) { let i = q(r, n) - (q(t, n) + J(t, n)) - J(e, n); if (i < 0) continue; @@ -8922,22 +8953,22 @@ var Cl = { }); } return a; -}, Vf = (e) => e.distance - (e.source === "parent" ? If : 0), Hf = (e, t) => Vf(e) - Vf(t) || Number(t.source === "parent") - Number(e.source === "parent"), Uf = (e, t, n) => ({ - dx: Wf(e, t, "x", n), - dy: Wf(e, t, "y", n) -}), Wf = (e, t, n, r) => { - let i = Rf(e, t, n), a = r?.[n]; +}, Wf = (e) => e.distance - (e.source === "parent" ? zf : 0), Gf = (e, t) => Wf(e) - Wf(t) || Number(t.source === "parent") - Number(e.source === "parent"), Kf = (e, t, n) => ({ + dx: qf(e, t, "x", n), + dy: qf(e, t, "y", n) +}), qf = (e, t, n, r) => { + let i = Vf(e, t, n), a = r?.[n]; if (a) { - let t = Lf(e, n)[a.own], r = Math.abs(a.line - t); + let t = Bf(e, n)[a.own], r = Math.abs(a.line - t); if (r <= 12 && (!i || i.distance >= r)) return Math.round(a.line - t); } return r && (i?.source === "parent" && i.own !== void 0 && i.line !== void 0 ? r[n] = { own: i.own, line: i.line } : delete r[n]), i?.offset ?? 0; -}, Gf = (e, t, n) => { +}, Jf = (e, t, n) => { let r = [], i = (t, i, a) => { - for (let o of Lf(t, n)) { + for (let o of Bf(t, n)) { let t = Math.abs(o - e); t <= i && r.push({ offset: Math.round(o - e), @@ -8947,25 +8978,25 @@ var Cl = { } }; return t.siblings.forEach((e) => i(e, 5, "sibling")), i(t.parent, 8, "parent"), r; -}, Kf = (e, t, n) => { +}, Yf = (e, t, n) => { let [r, i] = n === "x" ? ["w", "e"] : ["n", "s"]; if (t.includes(r)) return q(e, n); if (t.includes(i)) return q(e, n) + J(e, n); -}, qf = (e, t, n) => { +}, Xf = (e, t, n) => { let r = (r) => { - let i = Kf(e, t, r); - return i === void 0 ? 0 : Gf(i, n, r).sort(Hf)[0]?.offset ?? 0; + let i = Yf(e, t, r); + return i === void 0 ? 0 : Jf(i, n, r).sort(Gf)[0]?.offset ?? 0; }; return { dx: r("x"), dy: r("y") }; -}, Jf = .5, Yf = (e, t) => { +}, Zf = .5, Qf = (e, t) => { let n = [], r = [...t.siblings, t.parent]; for (let t of ["x", "y"]) { let i = t === "x" ? "y" : "x"; - for (let a of Lf(e, t)) { - let o = r.filter((e) => Lf(e, t).some((e) => Math.abs(e - a) <= Jf)); + for (let a of Bf(e, t)) { + let o = r.filter((e) => Bf(e, t).some((e) => Math.abs(e - a) <= Zf)); if (o.length === 0) continue; let s = [e, ...o].map((e) => [q(e, i), q(e, i) + J(e, i)]); n.push({ @@ -8976,17 +9007,17 @@ var Cl = { }); } } - return Qf(n); -}, Xf = (e, t, n) => { - let r = n === "x" ? "y" : "x", i = t.filter((t) => zf(t, e, r)), a = (e) => q(e, n) + J(e, n); + return tp(n); +}, $f = (e, t, n) => { + let r = n === "x" ? "y" : "x", i = t.filter((t) => Hf(t, e, r)), a = (e) => q(e, n) + J(e, n); return { before: i.filter((t) => a(t) <= q(e, n)).sort((e, t) => a(t) - a(e))[0], after: i.filter((t) => q(t, n) >= q(e, n) + J(e, n)).sort((e, t) => q(e, n) - q(t, n))[0] }; -}, Zf = (e, t) => { +}, ep = (e, t) => { let n = []; for (let r of ["x", "y"]) { - let { before: i, after: a } = Xf(e, t, r); + let { before: i, after: a } = $f(e, t, r); if (!i || !a) continue; let o = q(i, r) + J(i, r), s = q(a, r), c = q(e, r) - o, l = s - (q(e, r) + J(e, r)); if (Math.abs(c - l) > 3) continue; @@ -9004,19 +9035,19 @@ var Cl = { }); } return n; -}, Qf = (e) => e.filter((t, n) => e.findIndex((e) => e.axis === t.axis && Math.abs(e.position - t.position) <= Jf) === n), $f = (e, t, n) => n?.absolute ? { +}, tp = (e) => e.filter((t, n) => e.findIndex((e) => e.axis === t.axis && Math.abs(e.position - t.position) <= Zf) === n), np = (e, t, n) => n?.absolute ? { x: n.x, y: n.y, width: n.width, height: n.height -} : At(x(e, n), t), ep = (e, t, n) => t.flatMap((t) => { +} : At(x(e, n), t), rp = (e, t, n) => t.flatMap((t) => { let r = w(e.items, t); return r ? [{ original: structuredClone(r.item), offset: r.offset, measured: n(r.item) }] : []; -}), tp = (e) => Qt(e.map((e) => At(x(e.original, e.measured), e.offset))), np = (e, t, n, r) => At(x(t, n && e.kind === "primitive" && t.kind === "primitive" ? je(e.primitive, t.primitive, n) : n), r), rp = (e, t, n, r, i, a, o) => { +}), ip = (e) => Qt(e.map((e) => At(x(e.original, e.measured), e.offset))), ap = (e, t, n, r) => At(x(t, n && e.kind === "primitive" && t.kind === "primitive" ? je(e.primitive, t.primitive, n) : n), r), op = (e, t, n, r, i, a, o) => { let s = a.offset ?? { x: 0, y: 0 @@ -9027,36 +9058,36 @@ var Cl = { }, r, o, i, { ...a, snapEnabled: s - }), l = (t) => np(e, t, a.measured, s), u = c(r.dx, r.dy, a.snapEnabled); + }), l = (t) => ap(e, t, a.measured, s), u = c(r.dx, r.dy, a.snapEnabled); if (!o || !a.snapEnabled) return { item: u, guides: [] }; - let d = l(u), f = qf(d, t, o); + let d = l(u), f = Xf(d, t, o); if (f.dx === 0 && f.dy === 0) return { item: u, - guides: Yf(d, o) + guides: Qf(d, o) }; - let p = l(e), m = (e) => (Kf(d, t, e) ?? 0) - (Kf(p, t, e) ?? 0), h = c(m("x") + f.dx, m("y") + f.dy, !1); + let p = l(e), m = (e) => (Yf(d, t, e) ?? 0) - (Yf(p, t, e) ?? 0), h = c(m("x") + f.dx, m("y") + f.dy, !1); return { item: h, - guides: Yf(l(h), o) + guides: Qf(l(h), o) }; -}, ip = (e, t, n, r) => { +}, sp = (e, t, n, r) => { let i = w(e.items, n); if (!i) return; let a = i.parent?.id, o = zt(e.items).filter((e) => e.parent?.id === a).filter((e) => !e.item.hidden).filter((e) => !t.includes(e.item.id)).flatMap((e) => { let t = C(e.item) ? Bt(e) : At(x(e.item, r(e.item)), e.offset); return t ? [t] : []; - }), s = i.parent ? ap(e, i.parent.id) : pt(e); + }), s = i.parent ? cp(e, i.parent.id) : pt(e); return s ? { siblings: o, parent: s } : void 0; -}, ap = (e, t) => { +}, cp = (e, t) => { let n = w(e.items, t); return n && C(n.item) ? At(x(n.item), n.offset) : void 0; -}, op = (e, t, n, r, i, a, o, s) => { +}, lp = (e, t, n, r, i, a, o, s) => { let c = e.find((e) => e.original.id === t); if (!c) return []; let l = St(c.original, { mode: "move" }, n, r, i, { @@ -9065,7 +9096,7 @@ var Cl = { measured: c.measured }), u = x(c.original, c.measured), d = x(l, c.measured), f = d.x - u.x, p = d.y - u.y; if (o && a && !c.original.locked) { - let t = tp(e), i = Uf({ + let t = ip(e), i = Kf({ ...t, x: t.x + n, y: t.y + r @@ -9077,36 +9108,36 @@ var Cl = { let n = structuredClone(e.original); return n.locked || S(n, f, p), n; }); -}, sp = (e, t, n) => { +}, up = (e, t, n) => { let r = e.flatMap((e) => { let n = t.find((t) => t.id === e.original.id); return n ? [At(x(n, e.measured), e.offset)] : []; }); - return r.length > 0 ? Yf(Qt(r), n) : []; -}, cp = (e, t, n) => { + return r.length > 0 ? Qf(Qt(r), n) : []; +}, dp = (e, t, n) => { let r = e.flatMap((e) => { let n = t.find((t) => t.id === e.original.id); return n ? [At(x(n, e.measured), e.offset)] : []; }); - return r.length > 0 ? Zf(Qt(r), n.siblings) : []; -}, lp = (e, t, n) => { + return r.length > 0 ? ep(Qt(r), n.siblings) : []; +}, fp = (e, t, n) => { let r = w(e.items, t); - if (r) return $f(r.item, r.offset, n(r.item)); -}, up = (e, t, n) => { - let r = t.flatMap((t) => lp(e, t, n) ?? []); + if (r) return np(r.item, r.offset, n(r.item)); +}, pp = (e, t, n) => { + let r = t.flatMap((t) => fp(e, t, n) ?? []); return r.length > 0 ? Qt(r) : void 0; -}, dp = (e, t, n, r) => { +}, mp = (e, t, n, r) => { let i = n ? w(e.items, n)?.item : void 0, a = i && C(i) ? i.id : void 0; return zt(e.items).filter((e) => (e.parent?.id ?? void 0) === a).filter((e) => !e.item.hidden).filter((e) => { - let n = C(e.item) ? Bt(e) : $f(e.item, e.offset, r(e.item)); + let n = C(e.item) ? Bt(e) : np(e.item, e.offset, r(e.item)); return n !== void 0 && Mt(n, t); }).map((e) => e.item.id); -}, fp = (e, t) => ({ +}, hp = (e, t) => ({ x: Math.min(e.x, t.x), y: Math.min(e.y, t.y), width: Math.abs(t.x - e.x), height: Math.abs(t.y - e.y) -}), pp = (e) => { +}), gp = (e) => { let { origin: t, threshold: n = 0, target: r = window, onActivate: i, onMove: a, onEnd: o, onCancel: s } = e, c = !1, l = () => { r.removeEventListener("pointermove", u), r.removeEventListener("pointerup", d), r.removeEventListener("pointercancel", f); }, u = (e) => { @@ -9121,18 +9152,18 @@ var Cl = { l(), s?.(); }; return r.addEventListener("pointermove", u), r.addEventListener("pointerup", d), r.addEventListener("pointercancel", f), l; -}, mp = (e) => Array.isArray(e) && e.length === 2 && e.every((e) => typeof e == "number"), hp = (e) => Array.isArray(e) ? e.filter(mp).map(([e, t]) => [e, t]) : [], gp = (e) => e.length < 256, _p = (e) => e.length > 3, vp = (e) => { - if (!gp(e) || e.length === 0) return e; +}, _p = (e) => Array.isArray(e) && e.length === 2 && e.every((e) => typeof e == "number"), vp = (e) => Array.isArray(e) ? e.filter(_p).map(([e, t]) => [e, t]) : [], yp = (e) => e.length < 256, bp = (e) => e.length > 3, xp = (e) => { + if (!yp(e) || e.length === 0) return e; let [t, n] = e[e.length - 1], [r, i] = e[0]; return [...e, [Math.round((t + r) / 2), Math.round((n + i) / 2)]]; -}, yp = (e, t) => _p(e) ? e.filter((e, n) => n !== t) : e, bp = (e, t, n, r) => e.map((e, i) => i === t ? n === 0 ? [r, e[1]] : [e[0], r] : e), xp = (e, t, n) => e.map((e, r) => r === t ? n : e), Sp = (e, t, n) => gp(e) ? [ +}, Sp = (e, t) => bp(e) ? e.filter((e, n) => n !== t) : e, Cp = (e, t, n, r) => e.map((e, i) => i === t ? n === 0 ? [r, e[1]] : [e[0], r] : e), wp = (e, t, n) => e.map((e, r) => r === t ? n : e), Tp = (e, t, n) => yp(e) ? [ ...e.slice(0, t + 1), n, ...e.slice(t + 1) -] : e, Cp = (e, t) => [Math.round((e[0] + t[0]) / 2), Math.round((e[1] + t[1]) / 2)], wp = (e) => { - if (e.type === "polygon") return hp(e.points); +] : e, Ep = (e, t) => [Math.round((e[0] + t[0]) / 2), Math.round((e[1] + t[1]) / 2)], Dp = (e) => { + if (e.type === "polygon") return vp(e.points); if (e.type === "line") return [[e.x_start, e.y_start], [e.x_end, e.y_end]]; -}, Tp = (e, t) => { +}, Op = (e, t) => { if (e.type === "polygon") return { ...e, points: t @@ -9159,12 +9190,12 @@ function Y(e, t, n, r) { } //#endregion //#region src/ods-region-layer.ts -var Ep = (e) => ({ +var kp = (e) => ({ left: `${e.x}px`, top: `${e.y}px`, width: `${e.width}px`, height: `${e.height}px` -}), Dp = class extends L { +}), Ap = class extends L { constructor(...e) { super(...e), this.step = "layout", this.selectedRegionId = "", this.onKeyDown = (e) => { e.key === "Escape" && this.corner && this.stopJoining(); @@ -9321,35 +9352,35 @@ var Ep = (e) => ({ return this.corner?.row === e.row && this.corner.column === e.column; } get joining() { - if (!(!this.corner || !this.hover)) return af(this.corner, this.hover); + if (!(!this.corner || !this.hover)) return cf(this.corner, this.hover); } isInJoin(e) { let t = this.joining; return t ? e.row >= t.row && e.row < t.row + t.rowSpan && e.column >= t.column && e.column < t.column + t.columnSpan : !1; } isInJoinedRegion(e, t) { - let n = rf(t, e); + let n = sf(t, e); return n !== void 0 && (n.rowSpan > 1 || n.columnSpan > 1); } joinIsValid(e) { let t = this.joining; - return t !== void 0 && ff(e, t); + return t !== void 0 && hf(e, t); } onCellClick(e, t) { - let n = rf(t, e); + let n = sf(t, e); if (!this.corner) { this.corner = e, n && W(this, "region-select", { regionId: n.id }); return; } - let r = af(this.corner, e); + let r = cf(this.corner, e); if (r.rowSpan === 1 && r.columnSpan === 1) { this.stopJoining(); return; } - ff(t, r) && (this.stopJoining(), W(this, "regions-merge", { rectangle: r })); + hf(t, r) && (this.stopJoining(), W(this, "regions-merge", { rectangle: r })); } onCellDoubleClick(e, t) { - let n = rf(t, e); + let n = sf(t, e); n && this.isInJoinedRegion(e, t) && (this.stopJoining(), W(this, "region-split", { regionId: n.id })); } onSlotClick(e) { @@ -9367,7 +9398,7 @@ var Ep = (e) => ({ this.isInJoinedRegion(i, r) ? "joined" : "", a && !this.joinIsValid(r) ? "invalid" : "" ].join(" ")} - style=${V(Ep(e))} + style=${V(kp(e))} aria-label=${t.basic.cell(i.row + 1, i.column + 1)} @pointerenter=${() => this.hoverCell(i)} @click=${() => this.onCellClick(i, r)} @@ -9380,9 +9411,9 @@ var Ep = (e) => ({ return i ? F`
- ${Zd(r)} + ${ef(r)} ${t.basic.regionSize(n.columnSpan, n.rowSpan)} @@ -9406,7 +9437,7 @@ var Ep = (e) => ({ ` : I; } renderSlotContent(e, n) { - let r = yf(this.dashboard, e); + let r = Sf(this.dashboard, e); return r ? e === this.selectedRegionId ? F` ${r.name} ` : I : F` @@ -9417,7 +9448,7 @@ var Ep = (e) => ({ `; } renderSlot(e, n, r) { - let i = !yf(this.dashboard, n), a = n === this.selectedRegionId; + let i = !Sf(this.dashboard, n), a = n === this.selectedRegionId; return F` - ${Op.map((e) => F` + ${jp.map((e) => F` @@ -10568,30 +10599,30 @@ var Ap = 3, jp = 1, Mp = (e, t) => ({ } addPointAfter(e, t, n) { let r = t[(n + 1) % t.length]; - this.changePoints(e, Sp(t, n, Cp(t[n], r))); + this.changePoints(e, Tp(t, n, Ep(t[n], r))); } onPointHandleDoubleClick(e, t, n) { if (e.stopPropagation(), t.kind !== "primitive" || t.locked) return; - let r = wp(t.primitive); - !r || t.primitive.type !== "polygon" || this.changePoints(t, yp(r, n)); + let r = Dp(t.primitive); + !r || t.primitive.type !== "polygon" || this.changePoints(t, Sp(r, n)); } onPointHandlePointerDown(e, t, n) { this.startsViewDrag(e) || (e.stopPropagation(), e.preventDefault(), W(this, "item-select", { itemId: t.id }), !(t.kind !== "primitive" || t.locked) && this.beginPointDrag(e, t, n)); } beginPointDrag(e, t, n) { - let r = wp(t.primitive); + let r = Dp(t.primitive); if (!r) return; this.stopGesture?.(); let i = structuredClone(this.dashboard), a = this.watchEscape(i, () => void 0), o = w(this.dashboard.items, t.id)?.offset ?? { x: 0, y: 0 - }, { width: s, height: c } = this.dashboard.display, l = pp({ + }, { width: s, height: c } = this.dashboard.display, l = gp({ origin: e, - threshold: Ap, + threshold: Np, onMove: (i) => { let { dx: a, dy: l } = this.displayDelta(e, i), u = this.snapEnabled && !i.ctrlKey && !i.metaKey, d = (e, t, n) => _(mt(e + t, this.dashboard, u) - t, -n, 2 * n), f = [d(r[n][0] + a, o.x, s), d(r[n][1] + l, o.y, c)], p = { ...t, - primitive: Tp(t.primitive, xp(r, n, f)) + primitive: Op(t.primitive, wp(r, n, f)) }; W(this, "items-transform", { items: [p] }); }, @@ -10631,13 +10662,13 @@ var Ap = 3, jp = 1, Mp = (e, t) => ({ }; } renderPlaced(e) { - let { item: t } = e, n = $f(t, e.offset, this.measure(t)), r = this.selectedItemIds.includes(t.id), i = this.selectedItemIds.length === 1; + let { item: t } = e, n = np(t, e.offset, this.measure(t)), r = this.selectedItemIds.includes(t.id), i = this.selectedItemIds.length === 1; return F`
this.onItemPointerDown(e, t)} @@ -10655,11 +10686,11 @@ var Ap = 3, jp = 1, Mp = (e, t) => ({ } renderSelectionBox() { if (this.selectedItemIds.length < 2) return I; - let e = up(this.dashboard, this.selectedItemIds, this.measure); + let e = pp(this.dashboard, this.selectedItemIds, this.measure); return e ? F`
${this.renderSelectionSize(e)}
@@ -10705,12 +10736,12 @@ var Ap = 3, jp = 1, Mp = (e, t) => ({ return this.marquee ? F`
` : I; } renderCommandButton(e, t) { - let n = Pu(Ou(e), t, yd()); + let n = Pu(Ou(e), t, Sd()); return F`
`; } renderPanToggle() { return F` @@ -12050,17 +12081,17 @@ var xm = "mdi:", Sm = 250, Cm = -1, wm = class extends L { `; } }; -Y([z({ attribute: !1 })], wm.prototype, "hass", void 0), Y([z({ attribute: !1 })], wm.prototype, "field", void 0), Y([z({ attribute: !1 })], wm.prototype, "value", void 0), Y([z({ type: Boolean })], wm.prototype, "disabled", void 0), Y([B()], wm.prototype, "open", void 0), Y([B()], wm.prototype, "names", void 0), Y([B()], wm.prototype, "glyphs", void 0), wm = Y([R("ods-icon-field")], wm); +Y([z({ attribute: !1 })], Dm.prototype, "hass", void 0), Y([z({ attribute: !1 })], Dm.prototype, "field", void 0), Y([z({ attribute: !1 })], Dm.prototype, "value", void 0), Y([z({ type: Boolean })], Dm.prototype, "disabled", void 0), Y([B()], Dm.prototype, "open", void 0), Y([B()], Dm.prototype, "names", void 0), Y([B()], Dm.prototype, "glyphs", void 0), Dm = Y([R("ods-icon-field")], Dm); //#endregion //#region src/ods-points-field.ts -var Tm = class extends L { +var Om = class extends L { constructor(...e) { super(...e), this.disabled = !1; } static { this.styles = [ G, - Pf, + Lf, P` :host { display: block; @@ -12112,7 +12143,7 @@ var Tm = class extends L { ]; } get points() { - return hp(this.value); + return vp(this.value); } change(e) { W(this, "primitive-field-change", { @@ -12127,7 +12158,7 @@ var Tm = class extends L { n.target.value = String(this.points[e][t]); return; } - this.change(bp(this.points, e, t, r)); + this.change(Cp(this.points, e, t, r)); } onXChange(e, t) { this.onCoordinateChange(e, 0, t); @@ -12136,10 +12167,10 @@ var Tm = class extends L { this.onCoordinateChange(e, 1, t); } removeAt(e) { - this.change(yp(this.points, e)); + this.change(Sp(this.points, e)); } add() { - this.change(vp(this.points)); + this.change(xp(this.points)); } renderCoordinate(e, t, n) { return F` @@ -12166,7 +12197,7 @@ var Tm = class extends L { type="button" title=${r} aria-label=${r} - .disabled=${this.disabled || !_p(this.points)} + .disabled=${this.disabled || !bp(this.points)} @click=${() => this.removeAt(n)} > @@ -12183,7 +12214,7 @@ var Tm = class extends L { ${this.renderPicker()} `; } }; -Y([z({ attribute: !1 })], $m.prototype, "hass", void 0), Y([z({ attribute: !1 })], $m.prototype, "field", void 0), Y([z()], $m.prototype, "value", void 0), Y([z({ type: Boolean })], $m.prototype, "disabled", void 0), Y([B()], $m.prototype, "anchor", void 0), $m = Y([R("ods-image-field")], $m); +Y([z({ attribute: !1 })], nh.prototype, "hass", void 0), Y([z({ attribute: !1 })], nh.prototype, "field", void 0), Y([z()], nh.prototype, "value", void 0), Y([z({ type: Boolean })], nh.prototype, "disabled", void 0), Y([B()], nh.prototype, "anchor", void 0), nh = Y([R("ods-image-field")], nh); //#endregion //#region src/ods-value-field.ts -var eh = 250, th = 4, nh = "lt", rh = class extends L { +var rh = 250, ih = 4, ah = "lt", oh = class extends L { constructor(...e) { super(...e), this.palette = "bw", this.display = { width: 800, @@ -12935,7 +12966,7 @@ var eh = 250, th = 4, nh = "lt", rh = class extends L { static { this.styles = [ G, - Pf, + Lf, P` :host { display: block; @@ -13040,7 +13071,7 @@ var eh = 250, th = 4, nh = "lt", rh = class extends L { }); } openPicker(e, t) { - if (this.disabled || Date.now() - this.closedAt < eh) return; + if (this.disabled || Date.now() - this.closedAt < rh) return; let n = t.currentTarget; n instanceof HTMLElement && (this.picker = { kind: e, @@ -13165,14 +13196,14 @@ var eh = 250, th = 4, nh = "lt", rh = class extends L { renderAnchorMark(e) { return F` - ${Xp.map((t) => F` + ${$p.map((t) => F` `)} `; } renderAnchor() { - let e = String(this.value ?? "") || nh, n = Zp(e) ? t.anchors[e] : e; + let e = String(this.value ?? "") || ah, n = em(e) ? t.anchors[e] : e; return F` - ${oh.map((e) => this.renderGroup(e))} + ${lh.map((e) => this.renderGroup(e))}
`; } }; -sh = Y([R("ods-shortcuts-dialog")], sh); +uh = Y([R("ods-shortcuts-dialog")], uh); //#endregion //#region src/ods-basic-steps.ts -var ch = class extends L { +var dh = class extends L { constructor(...e) { super(...e), this.step = "layout"; } @@ -13841,7 +13872,7 @@ var ch = class extends L { this.styles = [ G, K, - Pf, + Lf, P` :host { display: block; @@ -13886,14 +13917,14 @@ var ch = class extends L { `; } }; -Y([z()], ch.prototype, "step", void 0), ch = Y([R("ods-basic-steps")], ch); +Y([z()], dh.prototype, "step", void 0), dh = Y([R("ods-basic-steps")], dh); //#endregion //#region src/display-shape.ts -var lh = .03, uh = 2.5, dh = 5, fh = (e, t, n) => Math.min(n, Math.max(t, e)), ph = (e) => e === 90 || e === 270, mh = (e, t) => ph(t) ? { +var fh = .03, ph = 2.5, mh = 5, hh = (e, t, n) => Math.min(n, Math.max(t, e)), gh = (e) => e === 90 || e === 270, _h = (e, t) => gh(t) ? { width: e.height, height: e.width -} : e, hh = (e, t) => { - let n = mh(e, e.rotation), r = fh(Math.min(t.width, t.height) * lh, uh, dh), i = Math.min((t.width - 2 * r) / n.width, (t.height - 2 * r) / n.height), a = { +} : e, vh = (e, t) => { + let n = _h(e, e.rotation), r = hh(Math.min(t.width, t.height) * fh, ph, mh), i = Math.min((t.width - 2 * r) / n.width, (t.height - 2 * r) / n.height), a = { width: n.width * i, height: n.height * i }; @@ -13905,45 +13936,45 @@ var lh = .03, uh = 2.5, dh = 5, fh = (e, t, n) => Math.min(n, Math.max(t, e)), p screen: a, bezel: r }; -}, gh = (e) => e * Math.PI / 180, _h = (e, t) => { - let n = Math.abs(Math.cos(gh(t))), r = Math.abs(Math.sin(gh(t))); +}, yh = (e) => e * Math.PI / 180, bh = (e, t) => { + let n = Math.abs(Math.cos(yh(t))), r = Math.abs(Math.sin(yh(t))); return { width: e.width * n + e.height * r, height: e.width * r + e.height * n }; -}, vh = (e, t, n) => { - let r = _h(e, t); +}, xh = (e, t, n) => { + let r = bh(e, t); return Math.min(1, n.width / r.width, n.height / r.height); -}, yh = (e, t) => { - let n = Math.abs(Math.cos(gh(t))), r = Math.abs(Math.sin(gh(t))), i = _h(e, t), a = i.width / i.height, o = Math.min(e.width / (n + r / a), e.height / (r + n / a)); +}, Sh = (e, t) => { + let n = Math.abs(Math.cos(yh(t))), r = Math.abs(Math.sin(yh(t))), i = bh(e, t), a = i.width / i.height, o = Math.min(e.width / (n + r / a), e.height / (r + n / a)); return { width: o, height: o / a }; -}, bh = 6, xh = 9, Sh = .13, Ch = .76, wh = (e) => Math.sin(Math.PI / 2 * e), Th = (e) => 1 - (1 - e) ** 3, Eh = (e) => Math.min(1, Math.max(0, e)), Dh = (e, t, n) => { +}, Ch = 6, wh = 9, Th = .13, Eh = .76, Dh = (e) => Math.sin(Math.PI / 2 * e), Oh = (e) => 1 - (1 - e) ** 3, kh = (e) => Math.min(1, Math.max(0, e)), Ah = (e, t, n) => { let r = Math.sign(t - e); if (r === 0) return t; - let i = Eh(n); + let i = kh(n); if (i >= 1) return t; - if (i < Sh) { - let t = wh(i / Sh); - return e - r * bh * t; + if (i < Th) { + let t = Dh(i / Th); + return e - r * Ch * t; } - if (i < Ch) { - let n = Th((i - Sh) / .63); - return e - r * bh + (t - e + r * 15) * n; + if (i < Eh) { + let n = Oh((i - Th) / .63); + return e - r * Ch + (t - e + r * 15) * n; } - let a = Th((i - Ch) / .24); - return t + r * xh * (1 - a); -}, Oh = (e, t) => { + let a = Oh((i - Eh) / .24); + return t + r * wh * (1 - a); +}, jh = (e, t) => { let n = (t - (e % 360 + 360) % 360 + 540) % 360 - 180; return n === -180 ? 180 : n; -}, kh = { +}, Mh = { width: 240, height: 92 -}, Ah = class extends L { +}, Nh = class extends L { constructor(...e) { - super(...e), this.width = 800, this.height = 480, this.rotation = 0, this.background = "white", this.accent = "#202124", this.box = kh, this.turns = !1, this.angle = 0, this.target = 0, this.frame = 0; + super(...e), this.width = 800, this.height = 480, this.rotation = 0, this.background = "white", this.accent = "#202124", this.box = Mh, this.turns = !1, this.angle = 0, this.target = 0, this.frame = 0; } static { this.styles = P` @@ -13998,13 +14029,13 @@ var lh = .03, uh = 2.5, dh = 5, fh = (e, t, n) => Math.min(n, Math.max(t, e)), p turnTo(e) { cancelAnimationFrame(this.frame); let t = this.angle; - if (this.target += Oh(this.target, e), !this.turns || jh()) { + if (this.target += jh(this.target, e), !this.turns || Ph()) { this.angle = this.target; return; } let n = this.target, r = performance.now(), i = (e) => { let a = (e - r) / 860; - this.angle = Dh(t, n, a), a < 1 && (this.frame = requestAnimationFrame(i)); + this.angle = Ah(t, n, a), a < 1 && (this.frame = requestAnimationFrame(i)); }; this.frame = requestAnimationFrame(i); } @@ -14080,11 +14111,11 @@ var lh = .03, uh = 2.5, dh = 5, fh = (e, t, n) => Math.min(n, Math.max(t, e)), p `; } render() { - let e = this.box, n = hh({ + let e = this.box, n = vh({ width: this.width, height: this.height, rotation: this.rotation - }, e), r = vh(n.housing, this.angle, e), i = yh(n.screen, this.angle), a = `${t.common.sizeInPixels(this.width, this.height)} · ${this.rotation}°`, o = `translate(${`${e.width / 2} ${e.height / 2}`}) rotate(${this.angle}) scale(${r})`; + }, e), r = xh(n.housing, this.angle, e), i = Sh(n.screen, this.angle), a = `${t.common.sizeInPixels(this.width, this.height)} · ${this.rotation}°`, o = `translate(${`${e.width / 2} ${e.height / 2}`}) rotate(${this.angle}) scale(${r})`; return F` Math.min(n, Math.max(t, e)), p `; } }; -Y([z({ type: Number })], Ah.prototype, "width", void 0), Y([z({ type: Number })], Ah.prototype, "height", void 0), Y([z({ type: Number })], Ah.prototype, "rotation", void 0), Y([z()], Ah.prototype, "background", void 0), Y([z()], Ah.prototype, "accent", void 0), Y([z({ attribute: !1 })], Ah.prototype, "box", void 0), Y([z({ type: Boolean })], Ah.prototype, "turns", void 0), Y([B()], Ah.prototype, "angle", void 0), Ah = Y([R("ods-display-preview")], Ah); -var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh = { +Y([z({ type: Number })], Nh.prototype, "width", void 0), Y([z({ type: Number })], Nh.prototype, "height", void 0), Y([z({ type: Number })], Nh.prototype, "rotation", void 0), Y([z()], Nh.prototype, "background", void 0), Y([z()], Nh.prototype, "accent", void 0), Y([z({ attribute: !1 })], Nh.prototype, "box", void 0), Y([z({ type: Boolean })], Nh.prototype, "turns", void 0), Y([B()], Nh.prototype, "angle", void 0), Nh = Y([R("ods-display-preview")], Nh); +var Ph = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Fh = { width: 240, height: 92 -}, Nh = () => [ +}, Ih = () => [ { id: "rename", label: t.gallery.menu.rename, @@ -14126,7 +14157,7 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh icon: "mdi:delete-outline", danger: !0 } -], Ph = class extends L { +], Lh = class extends L { constructor(...e) { super(...e), this.language = "en", this.menuOpen = !1, this.renaming = !1, this.draftName = ""; } @@ -14134,7 +14165,7 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh this.styles = [ G, K, - Nf, + If, P` :host { display: contents; @@ -14320,14 +14351,14 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh e.stopPropagation(), W(this, "dashboard-menu-toggle", { dashboardId: this.dashboard.id }); } onMenuSelect(e) { - let t = Nh().find((t) => t.id === e.detail.id); + let t = Ih().find((t) => t.id === e.detail.id); t && (e.stopPropagation(), W(this, "dashboard-menu-action", { dashboard: this.dashboard, action: t.id })); } onRenameInput(e) { - W(this, "dashboard-rename-input", { name: _d(e) }); + W(this, "dashboard-rename-input", { name: bd(e) }); } onRenameKeyDown(e) { e.stopPropagation(), e.key === "Enter" ? (e.preventDefault(), W(this, "dashboard-rename-commit")) : e.key === "Escape" && (e.preventDefault(), W(this, "dashboard-rename-cancel")); @@ -14345,8 +14376,8 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh .height=${e.height} .rotation=${e.rotation} .background=${e.background} - .accent=${hd(e.palette)} - .box=${Mh} + .accent=${vd(e.palette)} + .box=${Fh} > ${this.renderPaletteDots()} ${this.resolutionLabel()} @@ -14403,7 +14434,7 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh class="dashboard-menu" id=${this.menuId} label=${t.gallery.menuFor(this.dashboard.name)} - .entries=${Nh()} + .entries=${Ih()} @menu-select=${this.onMenuSelect} > ` : I; @@ -14411,7 +14442,7 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh render() { let e = this.dashboard; return F` -
@@ -14419,7 +14450,7 @@ var jh = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mh
${this.renderTitle()} - ${t.gallery.updated(gd(e, this.language))} + ${t.gallery.updated(yd(e, this.language))}