From a5f44d49ebb583917b90d0f06a302e38b1d87b12 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Wed, 4 Dec 2024 05:59:39 -0700 Subject: [PATCH 01/22] chore: Update Snapshots (#1053) --- ...l-components-render-1-1-chromium-linux.png | Bin 46382 -> 46375 bytes ...ll-components-render-1-1-firefox-linux.png | Bin 79032 -> 78490 bytes ...all-components-render-1-1-webkit-linux.png | Bin 49488 -> 49461 bytes ...l-components-render-2-1-chromium-linux.png | Bin 55966 -> 55163 bytes ...ll-components-render-2-1-firefox-linux.png | Bin 86138 -> 84935 bytes ...all-components-render-2-1-webkit-linux.png | Bin 59297 -> 58457 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-1-1-chromium-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-1-1-chromium-linux.png index 01eeab59136a490a9f7e8f2ca68ad34e8680976e..7150458c7da7869327d94ec4e100185061934814 100644 GIT binary patch literal 46375 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 literal 46382 zcmbTebyQS+^fx--gD40H5-OzwN_Xcd4&B`)-3`(pA|TS;-Q5hWbPnAx(%qeNkNQ0K zUF%)}Lk;FNLk&Bn z?sb#$MNZ=lCN;H_&32k~)cpdsOz-4k>0dm4y>rohB}qdWf%_;Nelr1yJXr8N@gR41 z;fFQas4Y5qJOX|Y_?Mn(K+OC1667=LgZljM^>Zcdv~@t+j2)^=vT8sov;+wW>fi`5O1v1g zFK*$<$%YmdCY#g}P&6_P@%*-}!nO|&em^`+lp|3PPRGW|HaIZAtzoWLQuofpL{eH> z8m6Tk7x;HvpgvU2;K3C;Y2n;a%YsR#YKETP2zzb~CXzqz0D+=8NU%i{6)#br!|#4C zHwg6Z>gUIb=-FWP0aUC%AAm$q(3t;TJx9ZD`+KE_F9$;Q_w{}2{P=?R+i`{*Oz7jE zpG>D`mO`2DsT+}nz{}*T8r}3{q#ywyfNET@J*-lDcohm+v2U+ zO=eX}JeJ^GczlBka^K>;s_{T_Y#vvHShd|rL(vqI|Kg+B+na~Pn#5pUm!$z1rb#>j zr?rmDj&-~oCHwC4pnUOXtrXqZ4+FI4>Rp@t{2t)0ku%{=*vQ!&_zGlj`8n_1&2{H7 zM)|U=h@g`|nl9tgCSarS3B$ziq2q;4MZlme_beyqo<-OgAnpRrzb;@by6eeiiC_f= zs$VZ$R?NBF;*vOrsFxJ?Mui;nJ^izH6sm4$k*e?&A4pNDjwC){lu-VuY3zYh*FSh1x=3ysHI!({{9pz342OV6%gu#gB z;DvgxG2c7%Bo3SNy}%_XJ|5os=IZ9=<~!)3py0)UKzQJr96`Z80TDjFMvfg7BO~$2 zVhzm_x0+5#uSsqlV&WvMq)By+#4-)o+hb`%H@Aml@M*g&cv@?{4g8+}ZlibL))g~o zbEawoGH}nrL!;iD=;zmdjb-tV$9*3{<>adAENPMjf&X;m5Vu|EgOGv2N&q%-rZqjq zu}M}k_CJ57Epb4&Nyw1+*#GC51s4gAhY~#@lX`9axS&SB>GvmKRt^Hs%fo^FcvNUOrWw>Vx9H z#5)HTY*BD=Jwl$4aQ(-R*Es^UNX4)UZFlbsF<>4oNnF;j#zq`6-k!cbTI8oW7gN9! zYPah+y2Dbq-MD>VP2y0OgZYI9qonH+jnsi+&8pPENI?&7?|q^DiFjG0!Q8p`P%2yu zetA}Bv^QJR?6ARzONz;TG<8mDY-~JHq*_y3DIqRHb4FOXd&Xto* ze5@=j1E~cCE5-#YUJVQm22xW{d|0qwwe@KXaKB(`Jlj1}7PH+fet}@y!|+cIR8SZT z?3taVb)f=Y9vnw+IaBy1uKx{~Gf5cAWiub$za}WS7^@Ns#V0W=M^zILDQnPyR(o_R zoPnvRx^GvUY#m=^*4JP1-|>5&3mG7JS)-ClQb=(gG=zA~@ztNbGScmIeaQWWBPP(&vN$kskddwxvb(cG7uV|`E5Z;X5l62xSt{KP z>`=AoOq1jklYN~Y@N3}m z%8JEgA&==HmntKAp=zTWhwb(E0t(Tvr$JD}lb5dugPC+2%#E#8juWV3i{i@GdqsFi z{|4J=9TXCBqE^S=V>?913tr2^-e-ATvbUwU5mT6U(BNiXPhy=Xv zDwVAN@C-kC1_sr;+Uuh%Dk%OZj&kv+w_aW$IJVJT=}+{m#B6)Ad!Hqzq+r=29qw7)zIh{^$m|3R8-Zlr@wD9C z*LG(QjSI|`Nfk6$Kb?ULxDgZV?Jf^!p-sH?Hl8e*VZI4S$m;qoB`)rIjwH^Dii)I? zPUbb3tWKyhX$tw4%4+7Opr9~QM*Iv9@5FFrKc#Wa?mvqZhddZKE?vp8dv9+aSyG~% zam^a25IDBbem5ON(dfLdQ)RBLU#DHC?{s&4#^^p@ZNhdHq*6r<%$e$Q;2xYHAwFa64&8pT>ptqAkZBxU6g!`QNoJ^_lsSoU5BO` z^NG`fjb@{h$vtn6^%t|pMWzXVK?C!nc~os@wUoetOG5Fd4SY-3q(FI#6=r3;Y zk$;Es?(*9B@^3oJAZ5wWGynrY0HCpi@@j~VO z02^%ZI8s0gK5*r~Z~KARtk}SN`7)sWYL~Y}qo%y3hT+~MM$7(NSDE+<5nT6@!%QoY zys*shFX;IZvxPd{nX1|8?|%8w%{i3zmx9R7*GwU+`$PT9A9n%Q=R1Q<3l$cPvI69c zaeQWdU;ISR_hxS{(qBKA2yWS&H=9~)y&#=ms8H;_)%Jv#O!~Ipgpxt{4c3(igN32} zUUxYrWn=@RKR%!j#&c*lS4LGuS;X`K5ous(NYM4xFqm-gTZA7f)?iiP#ySEBo6d*b zt`5*#A@C@-6xRjq4reKk^Kwt$1RV*^`j`e|* zX2Y4xd5Z@3dKS-8^}4>n=5M@d_f~V3h>A1YHs47rjkVAw{K$4Sz(x)Po8zb2TSx)7 zbPVBPVPQEc+^MnHNbT}M61H7Ei)j^JX~RJ$IV|25hhn|toNh5Fsl@i!mnQ#PZ%G`>m?7YByLS)QHp;P}utnILC=iM)MQ98{YIo3A2 zQ>LeZ6~t3kiR?yAFqmtq7iuUOIjik-pnld%4(sury4Se={tK3?bAjr!>H2<2T=&iH zwf1WgK*X_!B?o?7Sx(VT4(7i9j1|)PaZvNnpl!t9?&e9fSY^wL%aAVpO10uN!XX?i z?7b5wq(I|EPIflyo#W=T{^}u%2|T%f%schV_gm+Iej=tg26YyfA=EQodP0jIKd+`9 zlwDjkAZywzFufAHjlHiSg$8-&QB*R&VOJeRz}kMTW8?>D#%nH*I}b=mj$Ib9J{QOR z7?-6Qgm!xmut#BVL|$HF7u3vhgwr5^s zRbu1Ymmd9t>Le*)|1BrRNc({IW5wm<;M_Lwt3zTrqr=0*FJ8O=_9O*y2{<}y!tP3U z7_JSNl!P>JQ)Cm%Capn>5rD?ZCEIof`<`cgsJ`N%>;bMR6fx_M-|3EjI4RyXGc&W> zS|;!pI)cxfw6uhS>ZS~Ug+F!r8>H{hPv^W%W$X5}Pi!LZS=xV&f@N0@Z36Ze>rO5U zvapCb^l*a%@t#3CTEb2Wca+OoF2<;2J3m&qt?gPq)@?JT`#UJk0mO8^ zL)IYkxNh@#y~u3k--9)$Knjj}$M}9-uYJj0tTbKXyy+syKJ(`Uj#JZilgAOQtii7d z3t!c;iL>)-tBErG3@#u*+B4Nu)=G)X3@(f|37>@OI>z(t-PG6D3%AlM)gkKb#_H@S zp85Xj3ekj3c_RfUhlWD?*ZS7%iA?h9r|X3}wWc!w`f1>BNAxYFtz1k6$PY;72DH)0O+;c|JuB;?&y@@4(yW*v)w``Ob+{|LC9KYILl zOq8`6n}L>d< z+aw}wU`4*6q`c&`j)ur5YOv$*GjN2!dU@dEx>swm{~nXofT2GdVVV>482NcSAi|Z9 z?3{8tFdrRy(xwr1k1h1Sf2Eqd=HuvR96S+#6R#HUjkLtN;wF3Z2 zAL4$9W4wxi(QqA_|B5sUCMDVRD@6x>os7TIX1kgONaNR56ys)A*Mj3>V`F((U4?`` zrh-&T)n-}@0@_i~4OwUIo6%1r9+!Loygt}lXLPppY-A-McPJi=pJ+;wE0m#jdoo&U zHAe!BYBe7h2-^)1YHuOnct#oz`!LLL^6>I9?@-6|bwZfTCJNUgeEjbBZi$#~b6&;0 zlVs#^1#sP4Lb|OF3ikGuUCEbM9N1W}3>^sjsz_9>*PnPY*LJbH$YpnY*(piX+10fj z%HaLq0a?+sb7`st5Id{e8ad-DEZ<2RYs=JY1aI{}>2oCuI!H(j+_a;IMN4TtR9yY? zPF(CZ{DPS9Pbi{TU0+uzu+M>)I-eaAXlf1;-S%A*{9^5&oi*P)d<~?ECNgO(j`V+S z1|7Om`ve6t>NX@E!g|9`@|AjpDcKVQjdHmq6+YU%kiy0L0|`KKT}yCei99s*NS z6^X*v0Y9a?YXG7rj!D~WxctZR8_cN^b?>8}Yj~J)RcM$Sszv(=@#)Ak8-|PwJ8lwx zp$zvFPOG_&jwYtRNGn(Uh=wLp}v|eZ=!{+|9 zyBfi$&9`x2elL3he@)xopKY-L7n9f!gxXs=Ej)``^@{m08C2kzx z<1?#j7bK(AOiz^5A3LEYHEITVy&xyGsN-(M$^Z`bWk9X721`tjGP$ zUShWSQg7+(r~O~P4DQruGF$>MuDj#G8$uJT7o5-)W_9|>$hF`yUCjMSSU1A^E+skn z=jn-X9Mi*da{J?sEr2Q#?@34bkSgHbV*6t`VXRfPto_t=&0eo=NC5Dyy2g~GUc|LBgXLf29PM*M(UM9~PawhW?&yFnL`Fw{G&0gIORa;_KgMj%u*Ttb z)1r-esEs2oD|>NV7?qa>tWA$$Wp#D+R2i5gg(QfYn>*X<&P|K#H)1N&**h=Eggn(` z-_B45V$$g7_ALz49(H@$%O;(8X+~mvwmm^gN{U0qoh?VbzX+p>>rL<)O1>ARC){X7 zs=Ek1=P*~QtE+>!algxu`-eop*v3Y+M1#Y4#Md*Rva-Ww5vn$)7H9jG9rH2v+4&JC z3rj_HwWEVeqvuU+m-lt`ib@vlKcTM96t&CUT7>Um8qEmpsd%Y|Ty?c0;$Zq9< zTzn9umU)!cVpjFm#TxM@6TpBR7L!Wrbh zGml9d4Pp}fNFda^7u1BrT%YTS6it>iINp6+zND!*Fz~*!N@x(Eq#Q33H+c3eivI!< z2h1fhO5qKj_(tf0QXz7lF4ZMoykLEO9W7y(HthDXyrhIgZF#xg^{Op5VeC2$O+hDd ztRNb?KalrXT3eHmko>G(?G364sqyo>yAH94&%yBj2{?{7fZ9xnKc#yAjRDk(w7Ud) zjB#_7$|w5m0lSMeR4(o*yiOjT#1%7^2>^iE4v^QZw(MFt;&rryuN;v<+y-u^!+hWr zU^cd~;(_999PxcJ>xn|us_JSz&c}cySS-&?!|T{haE2h&fq{YJ(c@kZu7RYbP+6c* zwXD=G9v2t4SG>3R=JaEQ+M=KnY##1$5dnFf@ZyDxOsKIj^8VJQBdO=h<(EZIH#_d+ zGWQD!85ysLgPn&D0MDAQR*&lPYRUMa4*-=W*Rk}S_a%upY{<^;PA;qMIEeg9jp`@- z92^s~vx$MTwKhe3wYPs`j!&e@B<8RC;JfwYEuH29gYJW-jpQxsC2IN}70A%d5^!Mp z1z_vko<#D;nW$S{JFgy&A(OT0KiwbawC3jJvF&kk){3HHhmx_`FMaNunVEq)UM;U7 zRFD8k{q)nBhKI*;K~=YjH^kzmcJGXM+deixRL6GJabNS+o><&)D-q+5R~3lQFK zrCxe3jY0;Rez-+=n*toe;yfCVZl?)&o1Z5Gbs)JFW&(`PCK$wNbNYVwN)Zu4Zen7R z2M}<HVDiJ_O(_R_w@9QHdIp<|yzSbfeu{-NBRjW-=5TT^-hmR`E=G-%y41^iUH9 zpS?c%pr8=hl? zsw&!|Htzq6Rl3|(H*wE)rXY5=*%=0ZVYLtZ1Bw*X@&2|Gz`8%o0ayh5~YH$CS4?=52TU2W1`+YSo?Fh zfI!c~g)*KVqRqydGx$hL{iCj~jsa`xK>fD>HcafVl^PTChIvE-WYLV42pj{#03ei+ z!DdAJd&@iZt|i+`kCvdI$4P@Dwb-iN=a!tJl&l0nQj%}^|Ne;2sGoZJ- zB3MvBr#Y{v++tlw$wM&fwX6xarpCvsv$H9KpbC+8sGw->3^`N4Y>cc3PB=y8SSof& zF8Wlf*QkGe?s%-H)b}&=F({oWP3DwSg~i5Tm35HHEi|h+s|&5xx%OiP_uGfwV9-0^ zS8@GgV`EnyEr0TrV!M<|hj}{Pk=QIBOgt(dc^XWZjAs%x5QYE1q+`tp5llt^jTYebPDM+&^z6ZkJ?mj|6_g9k8I%HYaL*Bu}INC_%D+N zIk~v#KJfuN_73(H_4#QV;JCdry~FaLcNq-26^`r0FVJkzfv>5j>c3)x`ko4=dA~UX z$Msvy<@)XOycP|;u9b+Pg)m$uxbj&Qdfm&V^4Z9wwKOZ!PIQNnBbq{|o893xZ95HI zz0br`>p*Yve%%EB*qR2=T5Okebxm9%5Ch)IygX2zl6)J5hUQDW!j?eU@|qf=mmu ziOf-88qr$Q5YfLjl+1CrT_YJ+rgP~!f(jhvY$md2TXT(0JFyq!i&upvIN;w&I)v#u zNIk84We~Xicmgwn>$6JP)!^jhS2HB=twDFlmHyDhkBq6%H16#^MOA|*_Wt}pYI=8b z0npe(eSOD;ngM1=&$)Fowp`Y-R#KMRwjZ9*XsXCtUjnx0AX4^yrYw;#ZZFnfT_xdc z$mIQrog#Q`+)FEWLI)c6BPK||!V_$6=jpuE3zIp?AJtomLZ~s+|7iirv|tV9Yl%I9 zJ%<5d#xiLs@$vabw%H}PzxSE~A6Qm^4n%vX)9SqEw!>L6y(^2fkxJk#@C3-pTwLS4YVay5o)40mrW8y;_(L8|dy3Jj|z2xyapHYUzR_^VQ_wB9@M5mjJ z7E?nh4jV|Ij+x%r9BnpVHCubq>abxA6g6~OU8^jwSg`}L8k@7#H8eO)%-B zAS7lMzf+~*M{rO(mEc*^mB+o`4GuR6c38K?aQfmx_D_i%gF@_Wyn$Eb6L+@?jhFq7j9x`RarSWJny!hQ1}Xz3L@pGJx;E%PR`Gg zxS*^1`(5M70P!W&sFk5t#jY!jf#b~%NI(Wyjy8lLNA>e#d2m82XeZ9Ycf=t#n7ACr zR@}zB)UvX&5n>(2RaZ^2-D*~QIU?PuZ(<}8hya{s#F`-ahG=2$jr82D=1Uw=e*qB` z&^wyV`5H+?OLNfXKth!$Hu;-OU%wW!xyiIZ=lyxoPaNTaZ>2~M_5g7PA(IZ?(c7QH zul;b}qdZBwys5KuaM_uMJ#$Dil#&`qRJMr0c!NuW--qf92I`ZoMgaF$pDc816B`xv zjEGniDjy-QqoZ@zx~02{T7UTiWSV8?ZD(&kUv9UMFlGYmb5ulx>-MRgu@Nxvf?w{0 zaYe4=Ba@{rM|MZFF?};LSG`erusII0Pz?9)sDQeqW96v2`RQZ-G@U@`!*AH%@xP(G z0^2(jE$=T0e)`2+0hNLRC1^gEy~ESfz#!MSsHl~#t)oNzPy1)ev@u;?%gf8z3I!(0 zaC96pJb8e{3fh#0;?MU-#TH#3^JcRC&IzO$&jmeo6rb? zW_r=a2R1b|vDXqy>U66WJ-tre=5DU`Y6sr>05vr1`Pp7lVBqQL_sJ5C{h2BtUjb~I-E4b9 zp|^8jU>Bg9wo6v+ua-WDiiDCJt)C?g3=H%tQY|#O7Rkx3+3{!rs*Y#R-Y+yb0po14 zm}1No;Jwy9dpQx7I58dZ3fPL^BYx)bx zH;Vwk$PdvPHZiS}$YL>96_^hkQgKYWLEi%tc`QU69Z&DvFP!S)KGzgYSx_dsv@g5-TxSP8@+d%A0SwBsTx16umVT?o9#^K~3FfufJNFuP9 zX%w7=5&%?z1)Pqn=ZUSS%X>RI4DY&XEIIkOsSURx*ZjX_N7%F%O)(l78FhAc+92*X zfC6g#xi+6msTyo~bnT=}r**N}LN|o`qV%1f1Ko7(|TG47bUv4&gN@L0Cj%@Mk zkGr2O_2dJ)-QU8x&PTJY;NZ-Y4W`qbsqU$%i?#l^vAiKAYWxNu5&)L5(k*>y{qwTL z)4kuY(!zIY<)cB6*vgWafkA=)Z&BGAW`AR7SQnb$nI|CRkQ5*T`9w|tB=aG9qD>rw zUw88{ffWyinrJdeBu8p59t671T!GqL=8XW){{AO{^8Z8d^}kS_DTB`&ydXJh`UO4U zU9oc1(PEUdv9UEPI#=InNzjVTZY5~8q3qowy%F$@enVE6 zmd?-j0RE%TklS3{HMFuyd7754M9WdC==>jse7_7}NF)93e?Y@=-m<5UHDpie4|oM< zYd8Kwq4iu3L4ADxLD0e*rY2VV|A60f0Qj+7{uu%q&&Uq#zj`QM)y zzR?)MBL75G{sUBSLCi1L^u5tR)W@#67AU)83lZ&f7qX8W(29wC#lME4g8JSNs!|^( zw3m$+Xw4sYFCW5c&t`I!@o6r^Xr@fyJr8_FsC94nK<{veZZt6U4oYRNvEd+Y{`0Zm zpg+%(*XBo>HK%bCPCOwMTe6j+v)jAFF9=g&z2m?0{kF-2@yg#p09C0U0M7G2Y@;ga3_AUKaQ$YgG8f>F8B2{AT6W?(w@`q^AtNyOy*NFtt${f!o3X8*VC;&m z%7ysE4@{b_p6XODe)~SSJnn2hU>sAGM)S~zHMq0xY5f_iBmVUdU<*5|=x1wzB|6F% z1D2@G1b$QRi~%}i^1a~#Mm#LPiJnA<|LFA07z+$mNn47`g zpw{vj;^90ZIW=Y1bm?5Vxk5##kxM*G#@_}WAsK&G*1|oXD`JC-xE;u9P3>ARtl~~- z{yJ%Q9z|on-~Eq{x6}7PcIzGBQK!43T-0FngU_b~5D>^tnBT;^`EyQaWq$~$ z;+;_o9d~c7#<3_gpK4L_n;>@s7buB{tl2zQmwLcBR7p*F@g;eYE@`qf#&BV|4qz7_ z+>u_iJ)e$ukYPNb1jl@1?dZG2pP4{UKxfKZ?@{Kh)!-kU8S`&FKMa_IcU~b-H%Z|$ zkei9L?9tmIF}JjrUnUSP*LU%4t>B^hx$&XsT-=Il&P4k=qqddla_dD34dt8dSWaJdb=c(= zq}Noh;-qe=b9D1!c*t#e%2|RyAZVbLbA$ba)k^IHyT0_m$>wOOuev4KRADLqmP$tL zs3e)SKz}9Y2Cs&LMLmY0{X|IKN3a{-YZ~J^Va4j-Q}zU=Jk9@!VX3^g|ASh)@-Ndt zZP#~G@KDa;*Olx>C-w9pHYlf|o$Gd1#O8blJ1~%QrEL}d>{sDr<$~ylUfFm;TsZx$ zCo}FsaLeq1Np=GWJA^xmB977!nuI|gM6H{;kfIwNDHD+?RGQ|Vj25!@MBMt53p*pe#RiEOL@gtC4;*MH8fO!OrbSW5?zvN>ptXd_TX!TL7C}n17@o;B>$V@isuje& zCujgoijt}9%2H-BO4F}n+u=(pJJfcv?zwL?!g!8}?nu3tWV$l^_Zgj=5VDkeu=ob2 zuSIbIz4MS|vX%&`eJezDXn_yh4KJa2YdV1Fy8e^Sm*0!mynCScg_HE=kY9thq|Ebx zQ$;XU2wbQvT<+;i05)g4ib)9fT%Rh0j(h8m@4H%iFa`&ze0LCsD;@Ks5#mw2V8OT?xzVliFle^Y z$V|B-A`xsOn*loB!s=l3fF1a~^EDfwFP+_l3bl?A+CZK(Ld|J!! z=e@p#<u?3Q=&|3ZopEb*V3b2a_3a)bH2JT4G^sZABovPDP_uGEF zv1lxdM^iGT{CfJU-NnmZL~@yasMM|H7VjbwFlPo(Ze1N~Lnl7BS7}_uAJ-RCMa;-% zR_@WmUE%yW5w?{#OPz0RYWT0FDbLcaGSo570R?Z4R1tWYkOJa zN0gd8cphfZPS*WZxuSrlc;=Squ?vTF(i`awyMMGeWlKA-K_IuzI$AICAx?g9-&4Bm zN?G*MFYG+H6>6)d?Ss+O2~!ZukmeI14_9dpl(4mr-3~6xz$`?&*1lhIBo1c!=<;j2 zB{fVReGK-_Wdar<0$2p7iOVsEOYM?Mk>$^i@Y%c4Sg0vH^egdyySxyod=f;Kio$3C z_<%C4edU^R8GWGmfa{AWhE>h0NqpRq;CRcoINN17YV?G-c88ikkT-gA^2E0N<v>aLBf{^U-FrUI2jj73B5!RZ_s^oLmSa-@ zE&0Ky&cUNQ9=Q3-I?uRsH^pC4>t`Qs@$f*KL9A3ES$9DZs0~L-^if5hv{WvPV+SbJ zw3F1Ijw}#;w5wInL?L-`W2WQR$+yy>5EBkxK2huRK8$&xgv&|eMOKY#LWiL0O)iGb z#Gpmk@!;C=K*vYBzr#@JV`&reJ`2CK3{u)!v;J94gmefFM+X_mW!~^9eL6 z$l*yVR3nQ690uO3;T+0(Q4NP7So2yVxp(~{6eXTjGmPHAU!ed1j>k-C7xK>-D}i^a zIN3$aLUhadp66i6AU9wncD42&+R#Zg{RM~I?gaBR-rT2N?c1z4m^UOgg~rI}T$IND zc*>R!wp57pe%cy1RBCCXQ&RcrQeH(#D^x+)XLMV+o9Qp$R$yvVFG}GUh zsXf=;6R(?uOw)h+9tD7k14z#_eczCLC*?Y|GP`^KjRg*C$pAN_^Q|Vl0hvK^j4K-0CfA8;Jz--*Nl7}lS)xVPR#och?>0K*$aFy z^EFfmUP;C%pFPhs{`L>(3kN`-&*cb)RqKQAbZsC|TF)3+5$)tbQ9(4T@OIWuYyaQ) z_gfu+fAgbRU5~Y`B;^5t>us7AeK01wv7uYKpRS;p3`g^T5L9!wV z?CuSJgJPv@02KeK+VK3H=pbK*@TT|BUyNna3bsUxkTS~P5K!P8pHA_}qW~B_y}0Q4 zZ-oE;{vKe9K!@bCFepij6pb{e<1693r`<*Z8X}#Ic@^N*_jpW?bqf{5o{&Czr>=@} z?gH{by}$DVI+tEC#jva2+9oLIFk(_E%QR4W(DbsN4lBD3`6j#WFgkZYV76Upfvx=Gj5+hlO0(wEYn3Rs%{GsLe=e&tGXIJsIe`2+uSE1@z5h(ZqG?Xry)k7V0YP z?T#smqT4f~n4Ci?nkgn5-ty@7>4g%G><<(WGk0wZf51A)Sl_>yZ%^xPt$oi|l{D(dTnz zRh5IiJ-g)-p$um4m1wi5u2AB^rb$A|ux>UM7Md#%O8V})*ovoGV(Ip9I_wf4{J~k^NKxY>DnBX<%IR~IylKcEuR@C+>B#nLl zx+WcKhl|Z-g=$>;tRFD@@jpdUd>N@{<;eZx)$7%-*W|F6qAxtC^IlJnt(~> zWoNJE1jh-w9@EPrwHPlN9~-o8&Wjf)Ek0_lu-^MxOwWRA$GuxH_SR)^$zGqB40xbgP!13b1?!K+h7z*O1!E%Gm}_$&VkG5A`X~JfeWkhQg^WNV<)O*8K2~ zc0`jGo8588ZHfn%*Y{TMBp75Mja}c|aeyy~GRf@1X726l*ZR}HY=FKMcI)^#Kw0sU z%k1`UfG5~XW4zMH!K$dnbcUXqnw^q6Te#nNcE9qW55_yBs*h%k`H0Os2>7^o`^TF7 znmue0lId7|Fl@b)i3WAN9^cZ9D`9u!7FMb<4tf9K;iQcme0-dpk#m0@hKYVos)Wp% zo|_9J<0~{{gD5JF#c#R*@?3yWltQU9s!#*uT4VywfDYw*aPYyDyN~ZzHF`_JBK4D8 zelnZka9@5hE^6wIVO-zWuAdriuCF!JHMi8L7&!KZQurcp<%RF@Gvw3;^7@mL0iBk< z;i~sXy{Z{-1T!035x2ktp9(u$N4*NQ$B!So&R%(V0WC^a^W{9ZOBCSQ%BzdPR-58w zl{eQ`jwtRxht_?C&ok)h;SvSVzXeF1aYukk%ltx7{uIpR;>W!wIv}&5HteewcXj)9 zT)*J%i1a*}48Um*+O!(iJj>MNvSA|zL^=ulXKZM;aizMu2zQ??!?7;Jl#N!DH)&ae z( zU1@4+o?Llwxztsxh%o6?2CAD|Sv9-vbTMkT>cy&*tn=Ii0LoMnop38U)zT*YlLmmK zj=gZjkNNX5C0YX9GveVg?VH-Kp^u&vMA%R)Ofcc9t7`&f52e+xVNO@G45@f_ueP=( zT^|y-KuP}9B`0DBftt^H^msda!3M>8YSD}pX zUc)+@1?!PQVPA9%(AsywGLXyuu`nQq4ibB<3XsyeOG{yA(>(Yn!D_TI+e3SNtu|MF z@C^nvZbWZyg;CKuptA6`Mg9Pq_2ScdG+UilfT~tY8e4x+>C~{k9~|i*$jK?wT{|=+ zGiD-F!VJlB0mMB19yfsz6x>=eK=thSQ`5-?<8xkW<|h^w7GRAkw~|n&TF784epOt9O4sE^h@8bjc`2_;0;ZZ~Y9Y8%k74E7f5Z8V5_=q)OU}517X!a7` zr=$>|prELdAeaL5(?Nm#BevAePEIAuDn_S0b^|9g>+8m?HgmiCON0bhDvEI+xt6UB z4QT7VXTr8BIKon`u0lwq6}mdrQD@ay%NV2e52~*iB@hB@KJ^L#4G6HQBdhsOXS0Z= zrfr}!sj4~!h(igp1?k1$fLTe#Ar*?883==&HqN!d%eLGc<|-z!lV|5|!4+yA2m5#P znt)&?yg)Cg2l`4+C$Op`Mw>24Gyd5~(iE&CpN^I%zB&=-%qW1(=Z0E!ku8Ah_HmsR7usYk0xdO;i(wEzsOGEQA*JJXKRN>_ zINe=6XBX=E_XlRi;HeN#%3s5Q5$zL1-(Xt%*)-39SiQWOU;r7qTO3!4zEK2PH?h%4 zNLU@2Ph#O4gDH@WPTB;%NjL&bnf9Ojb-EttI#*nF~S z3$VTc3lOtV5|@?P3c~GY_CaC2a)EkPSC~U0ZP-c*XZ+&z37*DIUKEnv9$3OFW#*S$EDMt(*> zqxgC-HyBU%5Ou~Si5%wR&pDh8?_)G;;c%>!|Fi(+_t$4TfFKfR5fAkuzFR#S+uV!? z{BYZa8zd*PnE@i>Hhot#$q*z)A6u+lB}iNN(@WF&_;L$thclFn$NF9Cd%pYIB%1ep zj=SORqz(>M!{Ozx{k|?VxCRFT(8GMHG$$?u)>H+F+L~g@snfqX%7KC#R<*T*kLeFic)YbHqv!6B1GC z`cSDW8HNxQZdquyz&WW^1|%B?0wkP$Et&xz)c6lt$jcYN&b?8Y6LMAQMzrxu+y{dJae(c$6c zdi!~4qP$MWj$^rAD^y;h(3^{WE;cqkJ6gTIadDvCVbtAHv(D1}@YfHZZ;R7P{a|V9 zH6DTEdc^#DYvc-is%+8n-m@JCGPDRYQ2o7S=B@`r-lgR8tuC!^$R0e*Pygm#B~hfp zkjP=vC1p_Vwa|50|49H%g|OKTkf#>O64l9)KspDA)|Qu(-2stqa+BGY6Gsj z*ys))e*gX|%SuIAzu^pg2L9kedP0ul+TIVYxhg&3%Q_tS;Qis4JBdm zsBU<}O})CCPz9|v8k_tedckEX2LZZ;YF)LaiZw1a5Z+C}FRZPNYu%?7BjLclXycH5 zk$nl_ku{K!8R{bd4t=$hJON7XYKsk7-O=&l|_iBa~)7OT}73h#?p5wBarNezvSCzB75cUXBUgLfw$eP0fahhD{d zkAvj&qqhwou4w~ZmO!WNe7gJxO-*95ux|GC1Q(Ils$#%@u%JK_bG?@kct79rp+E^w z-dtiE=qUqQeS5WZjQ72PUaE}O`Y&&6fWx5NCID{)sJu^>Er>w}qS~PyE1uWh?*yuZ zYuPm~Y6-MTlNwlxp5lkpsw=;^qGEEgv%~%N1%T2jG|JG9C3`^nSvL|9Ax{;Wb_>We(M|{p$(;cV4a%SX zrU^nv^Zy-oCz}#ruq!|-G*zNaej}(NTM@&6jqU7hiA-^|o_r+$DB_CJrru-%4xU(J z-k@Z!Z(U27DH@iVZ(}f20@xiU5d#1pfxfaTlY!noyk{c;9kO8*i3ys_OhA)y0@33m zaz`6YUuC-ze*I(UI(AX{aCxK4{!3mkbzJpeVIdaV*w(0StbqIVvSP48sr$q6FJEx_ z0+yO@JUkf=8)`+5c#@l1J5o)^rht$SoF?oRldIb?Z9+JBz*N#nM%&rifcXEYflLYt zj<5x^Nc;QN*N=(^%;s816|;1>z3l)94}@g-{K14)xd~N#*t|E@YkEESK+fwLptorN zGtEtq!(!r9W_Wt|ttPCVyG-k@NQ|G=swy0KyaRH z+V)~?roD?x62B9x;vE2C7way3GAKSDO9&L1qfD6?^VZbWg&`s9FWk?b^g7bpP* zdyNve39kqDDdp0hU+kQm){g6K5F$kzc1E)f@Re($Fzeb{&au3~?QvL?Ti5Rn6`ya? zkg9j&yr1G>KCkdGsH79rPLPVvRG-ii1P4wdk^RR&3m`^LrCC+(fF`;q`k8b;FEixK z+QLGyQD%>c*TsBf8IeHnZStfl53Zo75R~tdmO5a5MGmU1snM>ojtMD|2K)zD|GeB> zZtiIw?rA_*Rj5=LOvK2dY>n{p73|%5S+DnC>ygT~t^blaL^TjzzY)GncQhCh;Kv%X)PDpo%U1Z3mULR;%m4wEXt< zB%;-+Uu6(L-u(X;bMGA%)xKMDw3muf`Wi#$vG#5KxJd z5y?5{U;-rPoO5b&ZlG^9?zPW*@7w3xd(Zdoxu^eFA1)@d=lrFr8Z~N^^CFg;?k#-2 zk1Hr6G_?r31>Mn>wAd3Xc+{*- zJ&f#6&~v2U0;u3K}Z*%z?)S{5o)`H)dk1s-f)d+frW+^3Wp|{$|#iBqAbn z&w@AV2O&WflsjIdy(YX~QQFUAI2$2cd|b9VzM`pxBzd{z^qU^bzOVhT#e1%|4A}}~ z5V+gqOI{c>c(uMG^u?`yqzRY=)F3kQ*4q9i*`q6$F7W~r4C?n&<&q>MB;X96sy{9L zERsD>DJwEA%j2`jMUdB7>e+0)Y!t)qdfXEAF3uyijhWG=jr;p|C`xXwB<$tD6ckJH zt&UaQ`~o!?>w5Hou)3_%5apHmUi7rTBGEuLkZ4p-~YC9I0kW zq$RFs2=|toh4=Cem4BynhG?de-_4Q$&1gFac$@7})yFCRIo31PN>QFQsyvrjbRBceu`*`0M2J?97 zioN^N(+b@#L#g*E_W){oU3X^5zOBryDZ^^O@AkH4j+sCKU;J47Ys+jiYn-z?7=3Nb z@bGXDdMoHXL!P5H7bO!@2KdPo!lKpIKW1yB1?F74KLj-@GVbH~2&U z&5r#(wXZc7I`b0i?fEovMg{da^DrGdW{3INM3XBc@6KsSxp5BVK&7L$Pp!uh8lUEv z&)RPXZFBzYk6#32M>vOlN5#j@3k6|RxTK_)sGb%;wHm{>ufjO$?1d(1xCvB|y+zvc zYZau)r|dLR#|}#zYj#&9h>CqpN>*_JKI!v~&^z*CNpf}d^e^X1Ezf`WoX+Qi;0 z4dLmoi9#(X1fwFR55mL`p-Hc6gBVd_{d*UOii!$xUPs5Nsn>5aH&tUmYA3bFv@7V` zILYlJ@pzrHKv>L*EXmsf?r!`or!31DsEFxF*N_ZPhYL`A3Kl6rckhDP0k zxH|Gh_wCrS_PJ8Fdb@=|UT$t~PEJl*0h_KmDf&R+xs5Lf2}CP^+lYqnoSaoh$?6Lg zlsgNx2@j`UONQpls@`D{3^}7-?o=j^&VGYSD7fGETgBF}cPGnY!50znml2lOGi|ol zkWe2;rIqhgw!ZN7oXkpEa=y|93Zbv|QH~ZC7HvoFD^dFd!NIZB=Y~uCF^=@ht@*c^ zyoji`Q6uS!O)>`;FN;9o7K?zu_pTpR&P}rujz8$7B05X7;%aM)FMYhEB@^L>@z5O= z0_XsBdgvCNP_&@l&i0bb*pY0K+y#nzUo9%Q&c2!0`rS3gqPnqX{gy~1t?=5>uen#0 zgEPV}>oQHq$v@i~wz!*KGBaC>XRGJ1808Q;KK}Sa9N&f7&P4+@xr9XH+wCZ!m9Y{B z6z#~|4l4ctdkTomwF&S?{`iAUfTTUF?c zh)vNpg=MQ(ZVk21-BKqFdB%h@u z?j?RT?%L`{%{*Q2FJ$9|h4dw9ag2fLNFujG`@yQU9B9gj>uugLfM|rl9H1(D_p7ojg+yFc_-6uS`^Bp%r2Cr zo|I2SyDDHx^+q$!k#IouwzXiO%)2&NP6}yq)}&7*r6eUKch}Rj-O}Yq7f$!7W)<@! zAT$lGXv3MeuUc*XxL{UF{QdP=`HmFBmTSaxX93z=v@1ucmF(`9wwc*4DS&L+d@jvg zYYevsfpS!my)Dz!`1lR4cfP(^s#$(SU*u-|V)z_G9PVlaTGsD?FvoFft68-WiMz|r zqHH^*XIv<k)YG#BqFE4 zn10AHQ_cw@=PXu24GJG09+iw8$uMM2PEL6djpZD!LrAk(^SMH|C*RA<>o;-SFqO$% zpoUcy$=$;O9g%ksQ1kHcn2(hibkBbTNF&UxcvU&G+-{-swfAOt)(iDA2?Kt9`%4#_ zg{Omr5AEoeS2jW=t0UKDBDFkN=80+!a#jbc+)?G6U{|y%3{itxeNT675l-F=;AjV=d->YOoXUgSt<&ocIGX3qn^RmOU*Gony}L?3i<+98>}1WA z(w&6z2t%zJkEt}^fA{2G5*;iy)4O|BI!@qd%u_qFERi5Au(fpm2Ccwh8Sd=v z!iR^)7mnW42gC^(9PqDl94lL$_Wb1Y=Ny|EZn|^D50-jL@lb!i-Ey}MDyK%H%#D+l z)&|bp<5S15-TbOI_HD^ZEC;BFiEZ~cdLriM?alh?O?5$f?)kSAw^1RoR;|HY4|$Qp zBjS3@M%s&sG!mGsz!?7HVuz8LCgm@*i5_VCm~Yy5tL=80$KZ7K3z7j;ffrZkcCP!- z826F&{zmB9+B*YDWzr)l#B*9%?E2Q1SRY<`cy3~0CQT{h=J%WLW#B*FL?l`YoSSg^ z+!y*6r!3~q_QnRJ5D981)+>K?1zfb_8!5n@om*U7oSeLT>5_?CWK@9a*G}O@jOH=f?1hbQc#>yX}n@XYph9=i>ex-!e{4Kc}|pAztKlTyay-4k52OfvA0OhHwx=hsta9JG)uA0?) zHwjNy3!=-n=N({isf(_FEEA?D>c&J6&NvB;$|=k7v3PKiGL*9Y{QbdEk$t$!5dI-l zB%xT|tY|P@F+;udWu9CQqiR;~=;&y7nXOTqGQ$;!kOBh&MoM)GG_^8iW-FhYo2!Ew zpcm0hRh2zojIy&8jhAbg4HQk&wQyo&BFD;$me{naX}ubnn>j?I_mQrr5KfQPD_q>0 zQ}b|eFD`Z#6|jmsPX7E|y2nHFbC(IpY+%NZi7Hc)$dIR(VN+krvc^CjLMocWW6$Wv zY}=9HkMaxm4W)*vZ6%$Y_UbM~;S7}oJ7DdFT!tiMd9+fxVh)!IV`BIOkE~@0|5%La zm5DsJnNO(=uELoI*2k|?R)ZB9q7d=ZvfbNR^uI+~qPWrEbT@@(Rj#*n?Y_K!2^ZIg zchhjB+Mb_PNT+EP*{XJzo1IoJqvv?j<+&SWHz+nr#a+mk=v>KqEg!pb}*Vm0P$~=tttNuCA^t zg}G!*uy`cf<~-KCU#g|G`SUXd)-^ag`%m{Z#A7ruyJK@?Eb7-ODJ>2M)1Q(Pto@k2 z6+l-EsEp%^myw|f<@M{&V$2K&2A84KvrjW4I5HA)I^-F?8JM?m>&>}I;`b9M`5juK zHe0|8Z4NV@9n-`b#98`3t5qth7q%n`qryvY?EL-1O=n*7^baj^rP<58>OuA zI~IQayyI{ib+f%LTdgf8mQL)ZSGzGs4tgIne*{_^a<|m!LSn;WVaJDs8OHMb+gN3v zJ{te_Ml9f3@dfk5z9rcA)$U6UX-cf`s;Xj?qFB883tU%yiIKO3o@}MfCo0?lOAoQ# zvlvThDDcbaaYs#SrFaop=jCN*vw}n=*xlQHC+i(Nk2rnhS0^sVxMJOr^#6*F@jrD! z{-X<0nFSFyyok#1LyMx~(#>x&q4AX%>2;kqdG$84AdbFNLViiw-m3s*Gj9ov2Fth6^}N=&1&PPaJ%U_QcGznr2=VVS(e z))n>N*Rc=t@wumtQZET#TC|x&QDkFMvAwsnTo!gp;`I{|KisbLN*9xi1v|9Jk&MZ| z;FqkRgI{@G_C0-m^NwO!iiiO{DpHBDLN3(x$-n)|R(4RuwV0tXkd?4;A*s5wkf4$zW2+f9h1(!B zRiaP5{rsY$hpo|aMm-Z#a!2PN(n+5ASl!y%T2N@&eSUlby-QqTHFSxDoTR-SlcbCt z%C*MH^LLwnHs;yLIt)26sNhX#BtN0{I4RqH!yLtBMglbP7j8SnW?t{vg~ zz0Rx8G|bdmxW>hxDU8=;tMpa|b`?7%!MM^Xab@T1O+qdF!*5f)IYX(w9Z&9I3yD3I z3C>(462S|V;IydghG&oS*c<39fZrhQp2LS{_z-j0$eOLdNG}tUny(}s%h98K_X+pO zp`wg;=BnYRs2I7B5eXHhXjIm9RHheEplMP;Rj3Hfz+@ZLjd40Je(kihv^8v%&FE=u zZ6ze!VXL}!^2Maeuik#X+DYprzfHEXBfHcYSIB1Jc6d~ZFY=B`{wAj{FPr9}fnvG> zFak(L-U*i+=?vQ(bbpS|`^HvvU$U(PCEE}x&&&6R`tB=cxVbrp2`zl_CB;^L zKWAUNWE|mp+_A0xgFt$^I$B*ckagehjuLj%o_~U2VLf;sUHT*W1rPm7F0HbaUnq9K zLT+8rj*wBBo>g}*E;O56EGW7Z^;H8ag7m=m(W$rO2EvVjBW&xR?$MO-vLVl%=qqhJ zJoQ$^Ci+VO`I_+f1L!nIV^U_ZqM3eAv6+19wD7 zFv1|SC`WDWHJZO+P2};vnlI0u-F&&6V__C+e4c;5GtyM9=5n?{Mq0vQ`BaiE3)2ug zn{^@ULgSRb{9}ht=ji@yK3Pv4nzzf#dq2ulE{00?kT4E?q53NIyL?l!H-;1cP4CZ5 z?8`BjFx2K=^(K0|_0GIS2&l->F?s&+`#O;q61zS*U2dLkVlb{NL zP#I@z$Nmq5N<0>-0;l#B*7b%!^vnsD4Do>U?<@ZcE_nX5=($fI%5{5XVg^M*Mpk2e zR0lrZSJi!Q!?u__e!H=Cz4{hnZu^62rPbnQ*K$y=m7?H^qA5A1*v3ZlQ}Q%?d@cvw zDp0PQEPZ~YqN$^UW_6*3f?Jr9r@K1=KrXHKl-o*)ZvowCNJx|I7hIpus ztnkpu-$s8WKa09TOlIv8!s&{nWWpFOJ-=`9)cwep zS%aJ)T|(`^zq~QSluU?~1=BX{yfWV1-EFP+Iv_~Y!Fy-ECkq4^XYbTj2`xHLuXXJ0 zIo;Qv=`gj0EMN2I{@p1dAcP%m24#u7+uQqV(! zQX7N7uv;2PNAuj-Z*1FGdui2?KTrq7yB|X1wA^comXt7g2AgYbZ|{Uk+`o19uRR|h zA0&F@bxgt#O!C6wqUqaq0YFyDou_7Faw`lQ{P2R#8(-BnFu3iNic(wZ^!87dw%c7J z68Tvt#9Kp2Lata{S&}A--8m6)A!kYf&%q5^juNtMgyenm+66_LM;=g)!ra~d@}ZTwQBmSZ&S-M)|zlX_P(mT2S{Dls#soYUm00b141C{GON;jIe% zLL!lj9#dV8$g5H~7;eC>JQk--&XFN|mprzYmzRN$MeCI-ry9zrXgc<41PAwgU|=AZ ziKWLyYC3dpn%-i_*4BBNM@mY`>n1jxH=!b%-_UJWE&m`$Zfg9wyIpGXxA_7 zq~>0^L$HRaNo^eb5M|~Uy2-!0>utHZ%OON)+^-G6%)u^YL_~z~;_#uH8{^OV&xZ$U zvQyd0g|KrSRjfW2O^)Q$0=8<}|g#oNE-!)>p%jh!nZ0umnjZr8xy z1^|0por~(i79D*mRA{Hd9km5X?Ol)zHxB%T^mnwlI^CX{#lCB^6m+ zVBf?QOn1$D1^)<^nuo`Bx?;{Cpz<30B3mw1V$`vhG5(zOtHUC8w9BX~-LAzcgkxIYgjc{=8k;v9{Wtw#BlqzLGyh4MBD|n%^@~k-g2O^NyqVZ33PaD zYf-N~6_#OZyO;R-*-;;)cMu3>5!t?y*d(Lcj0}m;#(Vc7mzT{YFY2no7N75{8QZbo z_ZU0$ajsUuHovGnWT^Gb&C3Jj(BGU#WPRBAfAQfd>+3UzB_VtA!`K_%s=kP&IV1i7 z5`)SAue4GB1!j=J@|1(M^=B@<#`R!vSg+F-g~i3k8yWF}Xig`6 zQe=abj|+Otki1U%W65KEj*G+J1QI}{5o2)_3A~q_q0(OS1hIm-R^!e>-)Y}7-qJBb z`+L7{I%Brxdq&PDh`c+n>c*^xE20Tkj!m}H{X!WfC{E4>IfY-mrQp=*)dd9l20ELf zWSID)M;ylOHyE6j-{4+^Rb$rqJQ3JN+@{0E>t77y3`lO<^|fj+ zg=4hcqCbArdE1`elinO7Y}V6A4XMY@ipmnP#E*ARj@C0IOXpt>*cgzpzTnV1SWYP} z0Zw$wA}0im0`7~=*%~yIw*@6to*O@eak@rE);INI6toMgk;2yKVoLB3PF*;XqJ-d? z&+^&Yg1ph?$yJ|a{3^#)O)S-u(zJUiF%~jY0YO3GcUQa8)gXx53o#w;l^klYp}soR4Xj1ToeZjFV7WdUS;%J%UCUO7%?px zTxn1EF_!Zpsc%V&@*2@NrYlGoYdKAOGBm1eP*KhpNonaY#y^Ae6nTjm=r%NfW<{=> zn3|>!O2hfapQ>q?4r8=e;CW>*!?*x zn|Z(Xad=deS?mq}TmU`ssY*OX#H8MTu4cPNPQGm&cMAB(=c%YeVzRIT7f+`E^x$(a z6$aWHjTZnZPYX8qZT3>vA38ZbN~}9270I;^z6+g{LWYGm5mQ(epT}}3kuI1-a2!m` z%%Va=4La4a-)wlp{gm|6rY zopU3TNScClET61FRy2>tCxDzW2*%K&Z(BxvkjqUNLJI~2;auaodOVN|e0MrJx=225 zVd^;ib?Z(o zXD!P!FlKOd@DlAv?U}cvg(G$eN=iz>DbkFnSuUg5>qV*nye*GwvnlF6On^nnq|9R0 zJ}%`LWMeT{Y`JaO^dTl8nXm==5MhL$J`Fnmb{Krj80q|`o5I}PJw5iQ@*cQw2b_Xs zqW-T7{E*fQX3WbS8`VglcEHra(koh2MDHvWn2EphQXa*6*xC=VkcsBO_$eGTl06rB z%pzEU{Oa4$-{0?cZ)X#jq_fl0=KFd}ZNgb$y4_@6Cr_PZZr*#iBY7N;-}(Nwv#>oDw)7XM@T0A?;D#YM+>C8zE;6Fl- z{@0RV|K0C!r36t?TKX*N-VB%xNVjZoyCR#o6dQQvLtE$r=@|ZLi<1A3RjY9pA#lNc zc1^Y6ZZZL?J@3eBsqZ>pIdY_~2r@!2=(#r(tqCm$(tkx*C+dCCiya(IRAXcM6>KVK zF!(hhqJQ%1m3tgchv7Rri!#FGUy8B2cq2vhEX%%STAFA|ON8#-d7#d!XE+3$3$F7S zA*_Ie`z>D(zXdC&S@?3jC_|Zo)AITi0aiY~Sr7vgdH3)QE`%sS$8MQGUELy=pVFP$ zSspc8Y=1p^s>_>{{r!RnaAQ>q&5I!x1Vr_BIJm0YoEp!Kd+>T`sA?(WKCEEyP6jl*f$d)GcS zJbW(d!swpIOi)Kh2YQ!M0M17r=}$3tp=4)iU1wDk_u^PhT&ep|U}{6E=iB4D@Igo8 z62t9C=vEXfWN+A){UNY3CW-l0VSEYfcklChMwvLiU?QZjzVdvP>u$PI7Ng>c z%htr$OFj;PH33a!lPg)FXi960J6La|krBpGWY zU-!rlQM^kO=;=cT1^w#w2%d9su?+~3dFfd?igd`>*H}Lyoxs1MNJm5AtC=QTH zgVBv*rL8G`WkE$p*BZ;adQgNMHQ8`L6TV88u5{hCguEh^U`2)kBcOU3qf4LqByZ~* z8IfHPuskXcfUxQz8q#->!U{HLyd&)*=2)rzm_CA8HZXnNsq1S0SloETv8PrJG{b>S z0k*2^@pRgM6g4%|UO)N-G_3a~_fy)U2g@Yuqqwa!DqL9ZEF={Ezpb1#DAs~8gT=Gg z{rmSF=ma*%y+82$J_AGd*B@63OO-Nuej0P!i#&U51;^r1_wTMxCt&eiVR;hmI6tB7 zvD6yl30>kW%oR2(8JeGo)8ch0aJS;(V%AnxI+j|IcTM3rm7u)?I0y#v%U(ks~EyE$} zt<@PwHGA|065aPA-5`u$DEy%FjBJs5yvC*{|LlcPyIqF9WQ!$0pw17F|Gi`6AOW`9 ziF@&CKPLFq(WceHz|l>q_jPr3hC{6^{-hrCDDsZ)qGsq`DzGuo&t`gh9@bKY`ENha zZ;Rklz?)FUY@dqT+T7Z>exH$nPAq?DS}9G=xy7nxdh8#Fst6u*S!1j77|mCNa=U02 zr1{Z)N{=BP%QWR(S!0?X5v&RZS&PE)T0;&N!^0A0x*Py65MD?)F9}i0dM9y zapLdRR<2)@Ie~BrZ!L{kfj3-Zbu7BEboT@TyrrLhnwgl3iwmOPPg-8&*vYuTORRZD zl~CgFjwSY=4ELTnQEOv=LTFO{?~y+KyW6|Jt#&+P>$es)jwQ@f3_eLEG4(AhS)i4Y zW?w5t(6Mf%-Mv1Dl5OY1WBeFCcbg1HwOJI_0$|Zdm`qtrz`;#1!p-$GB1%e#t20v@ z803AxaL&xne<&IH&*712m%WJ~v|H_|@Ch$bR#!i)+osqQ0VJsADt|c?I zlX3g}iQRd~rsetXM`ZyyO3)lpc1p~jj3wBzo6KkB|A|}@ss2aEWg7ZU7u~O)KO<@W z_swkr9MurssFmwGL$3YJ*$b~<*9$qVjc=tD{Cnn>>FFP{Bv&48k1V?h+Z}k_mjDS} zpL!2fpGD?9A~}6=!j9ke7LDS9Ad0~sAYoi6^!Dbm>cC!;C>{tWYL=4O-K)(+e5P9s zYTTAbkbhoS2m*WFOdOfj!gc(#J8hj@RdckuiS09i?Fo7F!O9&wV}Qu$w4MF>@6Godo|G5xOl;On~}d zLBJ9>iEAbD(%(VgqHwV}oFI3Tt=aRJ?9>b32ss)v?8U6-gT94vPnxM)E#5YN@c(j3$3BV zhX>G(tUc&E=k zV9Y~uBY$gI#n|x!&G)nqjo4yOHsP)u8er? zp#@zWl+zSo(8??OZs&wc+-7HAoD#wzZPvOfAe1UQRf0dr!p*HbcoMUc%4TLfplB17 zj=IMQ-e(H62bZPuNKR}_%m@_Jco6}U0~qrt{#@5_&u?IT<<1`-wxyl8wApw7axTd*-Y*|b?!s*{Y&JQ;aB0Aw?e<_Q$*a8WOD&4qFS6m-SKh?Ic(VDfan}Tk6#0i(@(3n%eVkx z3xtq?8Y>|qqgArr=kB^Id3l!^{EH7!OkVGTWSq9rJ1g8Z&tiU0{s2&o1}i! z%#o3nrsC3lC!K=DL~i-k5ol$p7iB(t!#yI{SY$F(-c!LM>L666>ulT*TYYrU3q4sT z)J|bn{5EEE1e?#TMTSE%wkn)IACOox5Ay=oW+sMi^;yK0BKQLS-1;9y z_#GD83zQw%ta4sRE$5i^t_-=>o==cSvH`&TG|mvn=C`c~0?(&==860^!MUQmyn$ld zCIE<^dWaQ%XdkRD@-+JR zEM7vs(l&K_4)Cb{0M#Hu;qzADPAxbgTJMi44Kl(`j9dS~rc6fCpIK4?4hfTCo|L2&j|J|J$05BY(n?cF886o9JjpfuJHvUHb{`JcMiX-Y} zsMgcw<(ILV=-}G1_DE7M{JVH9lb7*7FY`PGmWh3xyE%{1D!1=O?n>WRUVR$A07gWt2C6?dh+Y~!rzGLZI$aMcbsIh zJe3Uv%^R!XhDJthF-KCs;(H{2@_;w;CP~K|8d8JM=Tj9k4A=JJm(5Xd4&A=?hn{?g zWS8p+7<=MGUZ?T)j+^3;(_-yVz}^?}BQN6pbF~<>R6PsReR&V zMXgZH3>I39ERKZH@QVhp4V;7@{Cs@)G}r$|)9mh_{NY;89pFT}mfckBO+UstD6;6Q zYso646D!a;nr;6;f5xe{_BihRavX9lc0{=Ir}5XTf0kJI`o^C%=7}NtU5#ZN!@kUT z|9>&-{(m5&5t;<4vIk-zj7cRWj^6k)-b4VnUJDS*=~Bbi{7k=w*Y)Imp`yZRvLTHQ zdI3jA2&7n|LYe@f< z$0KHB{l(T(VgN8eoHx2rA4V|O8bozJU9`Rym<`N=bkhv;O?k1Ju|d?r)p0M80Qx}w zlTm*T8(tDroD`IV_bhEg;sN*Kbw1mJOwF9QdlpI$(XK8|spgqlJ3a`{FN~Rpi`2YZ z{T)-lXy6u#;m~Oe*2`1`4z|h2tOlSSw#YcN;jzfnn10)zYM@`gk~FlVe*W}@E+OWnKs*BqU?i%$!;>xR^KkHy2>2s@?|~cf`-mZi*Q_Vi~g_zm_kaGl#Ct z^&IQXu6cPZ0#e<=XqFCC>lKO$%n2s6ws6S$4?(n>JGKk*8#ih zLx-sJI-PSG1!UzM&5@fvL4xQ`SRBx|fe*;XpcqhATIwO_EHWwyju*6mN0-WApg7oL zXWvNV9rQN$e!I-;I%{5E%ZlDX5sRFs5GsW35`gc-aaeCuSg6{sbS`L75`vkOOp*vS zH#ZNYH{;|w-`%oLWhb#ZNXzec!#ExM*q=O`IG zQ>Z$bkD5xYK#*zP#*WcUF-4kE36nnyMS6f9!h2UirP(Gaa$nI1c?JyeHHM$4&yAL*#JmORl4n) zzHHwUOsD|!vZ-l0ke(!wHcVWe@?jh2+5w=Kn>jVopO-CwDMs?blSE{F7zJC&w1|&Z z;QJm2t$-Y!Y@Y6!sjk98jwzff%^axpux4XpD~fUHjV4DEE{{5D?|#sE(^MAT-yRQdt)!qpUL_-2z3iYn zR=O49Wz=g-3%8IIGWvMg6hxv{IttKl(7VW^?UKX378^Sor^CJV0>@e~(_*I3`BYVP zVoCU!8^egq`3Da8%-PVg2Kbg(g#v)xHm&|yyj2dNFwqyA&_)qJ%Ns=4Z8k@S?h4Te zL4apIknb}UL~8To;h&l4F!mynisT%i%;&dC^zo_h$><9RisCdg6__wABR@ssm8xE} z0l>8v5md$YL1t^US|d7Q?`1>ox3-nfk)Oh1VkkLSOFv*_?rZ+FR8~JYFd*nkk^vju z(Y;0zFdM*-a~YO!Y9$$#_3FTxHHN1J)fOy8BvVE2`%i5xEv*>o68EJYA?jUcs0f7` ziVKun)5B$(-ec{D9^Y}|{73`@1v38aAS&JyR=Dt zoG%PCSkmB#y|u%#O^c!8?B^4|x!;L# zeyP`FD7$5}3hhl~T4bSQ*qbPRhboo|Y6u8-9O_0O(2}euPw!cTEE)9qB4q(xZG1Mi zwvCx4GC?Nrn`dMtpu~*?|8XcNb2QRB4s=tTugTIFYPz8%AUkQI0 z=RxcBqU;bIOfMrH$B9ByhxKJD-ehGx{&R%39@tX=KSj*_9{Y`2Ej;Vl=COnXS1%%9 z${px7r$ST#7cdLnoX!B*j?LLNlab<o&+gCL+Y+rwz0C|!K*tnd;WENU8?#YX&1ggE@NCF^#%yYW z=S2wAzZ4m(k5TB(C7cH||KLjkty2iFha|HUpcfnI>)*P4`;OO_LN${jRZ#Znpd4}# zu=fQ@iZ(tL-)v5C+uw+dT?v$K6?s?K9nxRwbfK^MG@@4hZ+hgoW(C%j`_B+5PrN0B z=dXVL{%~8i45gtog+nVE#3r<*ws&y&4sQ21|q8piv=Bb!H`oUxI1IcJ~AaZcyM2ve7BA zqNfuo+`56d@d|VS=I4zQh%5~n1tcUqR)pNJvCxC$Zc}@kjhm7(rx0>35fLwvpDn!B zOu{0`4IvUqolDzcv8NGVLq2{qF*4F>&-j-Zu;;JR^78VEaMw_>zpzwZaNo7>Q9Gcu z&D$fCogX4*ON=|dKlUd*9t!uvdV~l>@JoC97_g4Nn&uc4vlZHfPMtbN#t9mAo*8p5 z>6sPgisf~+F={B@9bJtq0ZV5H=CB^aXEWb$Oe2b0^AbZ#h=|{d)`*VLh{m8KAAfVl ze(8-WE(^7wI3hQw&ZR+zFe;{xF4-HkMq8Ahsj951lQ|#Dy&KgO&dO~vIKA|ncy*-0 z@p$+Q%}?+x#!R<*LE8_EaBGyXcw)!$Ah}$_@ndqt18Zj0!n??_BZF<3Gbj_cJ2SG4 z^BtHKV(OEjc+xgfH5@&#X?bXCTc4eE1|?rptz~0l17XYp>HD6a4(4OGArFJMUcZXm zSsY1}O%$sW83J9z+y3DiHOE0jxvA~u2T)Y#7FbU8=nM!fIfbrX76xQlFit>K&&{a8w6EE@YvWc zf`S&{r4-oq&IL=Z8u$Y>?{E+we%fZN5@<2v|A|JL@Qkm%EN(bcx<^pGZ+HZis+gLc z6@FGfGZfC=z}e;3xsM{BTza-FTXtIP+i12%aKzQej~{*`mCTI4O7PnF+2~c0OL`9< zadc?oTxz-y_7nfb^F-#DGk<+07#bB8+qEgl8~^?qjrKUybC_+u-xjSCh+b}P)hu%h zCDPT^mB72h#FR)H8X9K9a~%f<#{hLIo|jU<&a=EcL-&g{^iP3T^(4JobZ@aUX>)|% zF_Jz$Az`9?`xwx>-;IrOqz`F7a-<3(3i(RUU@;FwA#@$%g|1#~L1X7neSS7u{2~5* zb7qyRNE&Za5>!d+>FF&d<@r8^LT4$dfczaqdvvPR>5N$8>*{~XTUlUHDq#p}SBXD- z(>A{_*sOmK`u%|JSQ?1k9De%rsa1ndmJM3aL`NPxd+drZmj1^#s}jQtu!ftN55Fbq zOb)md-jvi~Y)?_TV_)W8acWnXoApMF^w_n+q^!^TZ@0&6`>%t(8(dd3|EyWX$|?s` zqqZHFxJ@>GcBM#XSZY~8W4aCK9E^Rd_DYr5`|fjXiOE5auG4xwyUML{;67MvXaRji zS4YeGx=+CmVu9Bl;`#d5JZLG4b<$h^a@*^JpsPrL)cal37!wg*pxC2WepgL<*Pe3- z&$FB(EbV{fP9JRUc)vvvT#zpYM#s!A|8Qt5BSpCeKS)|9JICH5;48;_(k**NG59PfGtpw=FE(^xWL^CAV?^La=<7k3R|L z5r|QO?2}oAdEGf@dgj7`@6Cr<@d;6&$Bcbb1Y(feD%MKg>hwR_B_lkg|M@GvQ)m8g z0TJ_mU8%)h%qPKch5hPz3!_tr_@~ziE7H^D2IT(ntMu~n!S0X@6f*+Bk(Tv&AVc|A zW7ro276fXSJ#+Y4hR>e8XDT_n*3X`ww>f}f!PQ2|5T!l@dWwclaJl$zx&{{pZiZ_*QwB4&ZnG({{$Id)c2)kE-q_qU3 z2ZN5eeGa6EcD_B_%p={#xohY9tHgIDl_#%McYV?=7*H#=d@u7(ki>SQz$5#@$WQci zrS<09q^9tOwvxia{MEQV&eAGXWw-6 zX0nL?zQNg7kCq!w+Is)qu#EswXaz0diRq<2R1a5~t*)oeCl6kg>iKRxRquf6wFsP3 z7Zg-__;3PkZdCW|B86I1e62R;P}hQ=FvYgoRL%+=2@2W|^N~^f(7sz2^jSeeBa06~ z_=uPiFI^9MyQ-*=v#|&sIBjkJj9L_Xb5Wrn){^CgYcxT9H(nC=maPfF85S~`}&q+a;O7%igowXaVBa4 zuk(I!4O+SIbdTlioAr-r3$@>H7C1twM{0(K8&{R$-W^*sDrGqX#l4F%sdO;Ae*|t?ob-BZKXikC2bg#zRPS-o=qfju#H*XC~`6_XC?KY znXBPj>D(8+gzL(`El0Vw=i6YF?2g*X8TIAP0r{O!B6i!b`n>sfUKwOEv3^wC9+`IA z)W~C|i$fvSUK2|7s_ZvMaxH_`@(i!atl@!1mbgaHc=&Ta=VAduW^Z zz_}vcms93!GQyai^>97W9}ZEUKeM1MP25D5tJefcNe%6Xn9-JL&A#$hx-9zhIG)ML zO6xmqn@HAQS^(T%-L`>#muhc{&4;KsMy4nL4#QI+8@IBu;&yG#+$V59M}x8$%+ai{ zQG3$9%v+!!aQOy3JvTr9Pz6l=_BBNZ_+x(5%VjUL-z5Nc?>8a)WTx-dP!be&6Q(n+LY#*69B?>n}YM#LhO zv#q=i91_Q`C)BB}!mC*`lru*Pb%HBgkv*s8T=t_6j)Hvd1l0w^I&J)1_4*JJBCf`D z)_pTn99TiHbds#L7iVS`+$Y?IQ8iXU6oU7JgfuN3XD?6*G$30Jei4Kl8X71o*Cfnd zq+(|f7Dk5En`^2Lez77;8}-W92%eZ7WxKaN3u)2eVRRKn+=qu~qg#OJ3SW$n%d)Yc zU=@0oI<<@-zTlcWb|y7*+a1T_Uo9P;cB`DTElXa)IlLCq+-+4YA?40z)T_=KUcu&O z_3+`VIc7F@!8aydDNl#o1nu#K*{qU%=0I|fB$g-35vFoCWyLvSXVRd;0hQXhwb)~J zYKhBy^lE>RnsR#VaQ>aUH*ao^=lJZd5Q2%<94*LEubu_YZd7FC$3!uP^H0EY74J``qvOu{xQn;&^#Q1u;C<-vd$nM@neuBm1+SUO_=2y`ZebRWil@ z(U)>wC$!UTdSR#nuo(94&(CLH_>%DBEj#)9QUYs6hx($NrsUO<;ZkeK7NNg9mA?H> zb956ihh_P(;SIZg1oQ0Px*q7NMSuRd&#}EgouVuD{<<{F!MYEILO_4~I$Il;nAjz8 z+L<5FUU^Y}%L+I`CMK05HD2k2FElk})zofY!B0}w`$Tn1(0Su)Zthx8myt0?q&qGy zr(;TGrO1s`2s1%8K;+ePL&rL)tBxGB?7Y0UZwgM$e|(bn;u%Z%(QZttUWc29$7CG$ z^0I}ZmB>W)@A=WhC@RTSoyH%oj?}p?GNIvncN8z-Bl+uiCiR-tq&4RIC2A#qrEIP> z6BvK$lA53{j*T4!QMa3c*QK6%G)yI}ju0`^-gkKiRoCf{q9e^fA{D_l3QP z4DRLJQg_~*m6Ep1&hx!T^Ruy$5%7%C(g>nYF~MDB^7J2{E3D3@c9zJe$N>L-s-M8R z^D_kL$;rveIqD?-zuIDtZpK&{8S(2k#G`10pWM1kK|x`#ZZ&dHk(?~nLim?w?<6Sh zcI%z~shiMD3(_cDK9pArRcOPAM6Ny)v$j50^sZhqXn(5NoUP5%eyp#zw=vV$)U6M|d3QCtq*jsU|1qx48B4M&#s!C;Un>S~)V*DMiN_;8p+P z8DQ#+H;bIKli%|hX)ULWYMD){iuo-mN$&;nK5C*pAn!Ber*e74Z z$jrcFGi^L_sW>1{*1#a?3BxCou`=6~{QP{s4V#_{`K|OPEu%P|N?(GdH??X_H7r8|T62)94z3$U^=t@h=t0_RL$36x3j$7s?B84PqxsPb>}98V@`IiRu` zas)i&zInHZ#TT<)ZVG&L;R_69>BW}?MFo^xZVcPL`k;{rBIAlVuW>qVm{PrivHJXR zAjzzctvdSs>8pQ+kmbs8+vmsb3jyDZd#P`mOo&n=I5_RaulocNf?3x%>3XM^*Qd@HYrPeG0D8*vWcC zyT8;s212yOd3kA$w&FJfM`|3kbkeUA`beipTDd2vm$}(@&Jp`upmtg4G~jf^McADZ zj$wvaV3WGnlwP)U-I zJtHAYhKyt{ODbXPS;o#-$G(m2Ij4U2bKk%Fe&6@=exA>Bef*)B%XH0L-}#>Bc^t=i zoOyQLzBupBANX8?n3xr}qUQ}aYY%-7509Y4#A%blE&jmMeMTAA_T}c}7?tF8P7z9$ zb@lY>yo0WsVrlB#oTm-Ra97il^uBI513e8Xk74?zS54%!fe~m5U6);*%Dgj@5bKt& zCnRh&!G-%`pLYlik7gnb5A%xH`LaKodjpXOo29h0vwO_^lf8reV@gJsUIk}2Ff6_H zYUOyWfZ(5yD`thzt-tdN16OAjp1^uZcdgCQrAe@k)}?&IJy&{4!F?s{%GFL= zSMWuEobE+(fVD(ifs5>#D)nU;ZofTgqS4+y9a$3z2mqL(7Vfk&A+kG?raYj1CO!fh z91O|D&iMWZ5*+nSO%LYmXIX-4;ByV-kpGdH*tT9x=g+KMA0PM8j)LR_QV+z&IJL;9 zos(U$c4+Y(Jr!1-RK$Y%bSr0uIw{v@KvOHpSmV=Fd&S+qDFIkMqkC$9NX-%1avzM3tE)Z8(inJ-a86}d@qHVQTS|BZ};8d03FI~!;^VO(09`~z=CeZL2yQ|J~8Xq@9?fj7=Locj}mOz7=y&p zZ_8PFF0SHA0+i|c))b)ouuiS<#oBFMSCsXItixnPDSzVJfV}0EZZ;MP^VV<29`kZ3 zdS0QwRGg%J>lO>=hoyLjas|KT1h|~LdO7e3-Vf~)%nAPfVAdpYtIex>8RL+q+1Ama z$5sk~XlrvFCSmKaX}!L{d&%`#(OjnX3)#9Nm>4GxHfsvQq~&WvzB0;tnxId<})$^rvVvez<D{o}@cEe{ zCkx)0?!&JlBXPH_zLCllWu;{trKc_~21DL+pS$08o3t%wv-)L|E_798FDHGQ&yAS} zm_^qK7ZFK*-uYSB_@7kmW8`L~#e`FW<#IWGw%f0dsgtWz%GS--*VliWc1>7NHd!Lo zWseVn(Z^|)EVa5a?J@l}(AwJ07=+>o9VN$3{t`=}Y4^iUzx`8#Vp!346jdcXdt&m2 zzJdiv@P$f?(|xU_O|BRJoPd|XeGvNmifyz-E=|9%kS&DI!=tET+cl27dHl~ANSlHF zKWcfr^!urQRKNaTDbsa+AOBg$gQLX$KWGos+Zv{sH!aZ?Xfx{uOQ)DCI`vS%XW?)^ ztE+G3i)CeI8kY$QiU_8)pyNV+zu^0z<{#~NJU%aF2znrmqf6Q7chtwTB4aqncO7~^ zWpu{aN_GSEnU|v6r6@YS`;lb;1z1wb!r+jPxgS=EYYTeVr*Tr;h(G^zBcsHqC_bK- zA4e_uYWTV|C~cq!PHEiDAGVB3-zP_}(jpjZ)-pkxyY0H&`jlt=T~7%6$6iTOJ8si! zfgo|ZE-q&uS2aN)4F~3kJEH{U7v#TDi@(2HbkojU;7?LhRn(bQzbNS`3(dD^%KDM5 zt(4iR5PvdUILO!)r-Xmp&hMN*6Mf2XYDhLZPWRREkQ(vRr_tmcR7x}k&Qu#Ck)q{> zMWuXn8>X17WLB|(xERN)9L4kq(n{pcT@E>!5u*5wV4 zjEb6TZcYhPHPI|xd+kB}*{fNDO74E^lLFr?*v52lO&uLGos%uXh94!3lqQ$k?{4Zj z?CO1;5GiNc@4rN~Md?u>^$G-@x;eJ4U(x7I6h6KA&Dl`x8U*R0e4-9cPk`z@-c~Pb zjH->wB{?fOBi8Y%rI+VERAnWKfoEZK?MGooiJD3ftUDJzc{O7qyV6xX9UW`gL}tde z!bgu1C>}qc2MNfWo**dI^yLW%W=*Eqg;jf#Vshphd z*M`O(^qafk>-)t)z>hfRzDZt6VY?b5?dx}Qb*NS|N1%6g$oc1Rqd=BDR)g9gxid$% zi6)a~0;Q*%A1l?UXSS5(xes(a$NukCyHF}91Ik{xgO4R3lh|#mXl#vE%XU6*M3MXV zN~b(AtA?cI1rs~;x8yg%#vf*XuC+kLTS)65x%o|7A?e@Bbd9SHOg+-wbuEp4E>JK- zN&vl$b>)V)Bc>`5pU$suLNz}N9=Y{lme&{n$jK6Kfls#0Z&KYdS*XZU_)ROE2v zx!!yR9%CmWrz}TQVxn;2U@0it*0A~&?gPy~v!^B|q*@bAXz2FbBC_`n$tTsFHRA5? zz*waDF6h`yw16h%eo>FlfY&ZYMmZ~w@ySD1;uWrTjZS80t$KKzk(V;ld9E#wu98TbI#OvZ<0-Yz+gn;n{I<^r zEVCmLIU@=?>I$%vb_H1{6h>lWyw3wI$B;FZD~#SOL%%n?7notSS|OK z!|aO(fc5N|&7oGbW1NDU}ShQ5Y{O5c~@TjL3fE_c&> z7m^hMa#V6gZ^=3+yUZ0B2i!~!&K!Ec=^g4+5~+0vH^#~ifHnWxa&S%YX%!1M*8dtEC~%- zlf4%aw2Xll{VSV`cF(~5(tD*Lag+g#Mt`y|+fEKpg^WK^<%QbuJvJuTpb$2=4+W$I zoJ8-l@qCUWx%W6a+5|l@J6+FuoBk#OU|lT9`z~4loQHaH^HiihO!clG&7}#DRIg@1 z(Fc4#AtI8@Hs?Mr=9dsVJ#r|QwBFTau*Q0hQ=?1Wm=HUi-3>^xaaVV2Db5)MHdyb; zVaqRi_woO|6ly|$VD~z}zieN_XoEU&;0N|*bVkO>=(>?IFBU68p@{gq^0t*Ge&)(kw=zkbDd zTHBi60G+CqR!X+d5a&70d!U;tb_%5K+;)jOf2`QRg&Frb=MnR6mxu*hO;OhUT@CvX z%-Iaq*7>!keGE@j%u(Okh0kYbzAj7DN>_u~QcjTXSNQs1jf>J8Rl;v-yQN)QRdjGc zOQ7h@PRA`xzpJd~xO{>oGsi3Sto9HkP2F=2d8PQ!$s(2@_e_`zrI&&LC_m>HFo zD)o7IbRPPZWGdFhZK6dIwX~8l(0$S)BO@L~9xmIgY;5J4pTAn8^*Xv~gmWoN7jtiQ z&HI58jErdTOULxH7W_+j628sVS*9u#B;-1VPbU2Y00JnUfU53TrsqtpQ5LZ-HN5+# z2@Z^TF&rXcto-fQM()7>#Omtm;1FTiUbL0{aPgQgg6EySMJ0Lq_aSMoOb>O*le!TY zJ<`5;puPaB{;Pa8jY%!NrI6On`mQCZ@M~DrsN*lra5Xi;=6(Lr?83s11*^uZpZFvA zHFq;HUMH0I?!c+!8@+!+r%l%ylmp3!A&?<)2LD|n2nq@|R42rf#Du5$M8g`nC2hau zTQzQPO-e@BEgALaJJo9bvr3rhRB+jrWn&DqGH~_8*kx# zYa^ku2`YAS$BAJvd3-DNcd9wx!Bzk`iyzq>y<0%>QdE$P}%`H{J(e>p=d7Wfg*GKe0 zmGM$rgO0ygS)3}A~F+sLsBTLb^BWQxb*vwz78-iy0 zKhaE(zy_gs0=}SsC$Mbs^*NcD&HqSXFYoFHqaH0S`vnmD<8fVa1;U;>Zz;qYT(@i_ z+vk5})9T|{5dYCXY??^4q4w(K?jp*G{;m{GO{-H}`Iz#qT~3mZt1JdPULu$^@Dz-V zIe1sn5}^5}EbwJdCNEJ@A_sg){!A zR2k*vk^evP&7Ul+|M6F?Th4|zTgV+#Q%vYH1mW2Ihl^}&Y;OKh*$f%n3Kv1tC>V0| zE;U93V-_R$>ix|E$~3~}=n}VSc`jDMDSavgt(tXk#q#H3Ze9TcUS#$`?u_Zo z&?KSzd+>KtaCzjUSBxYd*C~(f=_8jcDbZ`*RLZrxq#C-LnmxC<8?Mw|OtXjRf zxStL|Kl5ZXO;)>UU_e$B%8glIUwwA)T+ipv{iMW_Ze`b32cq|)BuOd4LX9~&I1p6PRejBqe@p?!Vlfdi#BgPYU{`uN&CO-t{? za_;>Vwa-4}=AJm|;j`Kw4i2hX^`P-!KegyGHTK!`^yR z>&lPF*rIjrv;{4&L#qxikoD7PsdJxhkt$Tfyq7Z3lcVp!5$N^mrhAF2Zs3dR_>PCv z%3vvqN%f`nXRdyk8uD7+hl`~&(eqGj_(`MV+ay^2amAaEm_pZuH*`OH`+h0N>WJLw z2BrBBd5^r0&kB`2u(TLH^sJjdT-*_9biYgm!acKgD`%XHD1zl(gaEVxdt6D1N{qTn zA4{&+gRGSJGp=sr{z}k{@QD+%2_vaktJ8L5iK{a^VR2{5mZ!dz>-r!z7LSz!n_}H; z1A8;Gi}Y*nrd7Z2Jn-8hHe$;Yie1!m)lS?h=}KxOW}P|MVA4N1HZ~^f@I_|Zf8f|- zs2z-p3D|Uv0pdvg;w;>Y5#Uqyp-Sb-L=(bFHdm(ar3iejt-Xs?NBWiVX`$D-i3<1f z*rU$A@Ng3VR<=78TQ|Xa7v_BqlX^`$C+ta^Ec>B~_N}Tf<4%08+6csb+ZmQ~=a#^O zJru}b7LONu-=wEY*>C)Ma!gh0CHK7hILP#hKNW-3)%DPw)C0*T%tQ;~wGI&y!N-xT zeFX&I_vfpova`QExm|Rw2$}~93-YaB8POo<-Ldz=Zn$}?d%jp4{vJ_TS*fUzl-z_~ zKEg@QljJ?0S6;paTlLPhpgi_L5NxiOETy#T$WvCq+)yo-jJx!iV++<3Es7d7urzNK z6V_K=zIm=fT-XJbRBnDDUtnak9{r92RPs9MF_ew(P2x z&7v&(;bV437f2d5i!s*)QvASZ<&yf)^cJ7C*(^!Ecsy^BD^0G{ZG|eNW}-7+wPj{6 zq9i|2w37^=eY_Mc3#!_jhv#jgi>zdPz538~br0+Dz`Y`c{YVdCO62v!DS!%O zmQ8%YcXh?po6*tQy?O!y7utyHw{Gzga-5CA)h?tA3^E|-gAw1~X5K=n*=vxlgmv1} zkVS8f2~pnPbMt?42HrG3{HaKV_M3cgb-Yc9-EKX!pZNGvB}PEv-HLrp{Ym$lI-ycE z+#_xmaG5;2X|)D!K&(-->`76pmD;7g@Z!jqId;*_4|m;EJVxds!do}s_Sv21nUu;l zEF#N7a>C`>-&9pQVXJY9Wk2epJ;P<6`Kf76v9C7}G=I>}puoLOP779=NtceZC?stc z54#X(8T$wfDkxSLY~(s3WhmPXp6fTlnqZJbXW3nB+6sgMvx$@bcZL@h?%LRJa>~eE z@wh+_Lr9MXswr;MAglc@(_NwUmNUHtg~i1NqwBU{6TQBcZX!}cA>H0>XKVW^m>k_3 z6CZCfvaMRLGvU+1fMC)f2ss;j0^!=RADdO7`)^n`E1|~4~dR@})8LDd8 z*)dm>cn9sw46z~2Y-cWv@jQ2ANUY_UaHyXC^>NugB8lL2X#C(eL`iRWWON^jmif?X zzwi9B*cK2M)IL7~-!T>XJRB}J&sx(8zqGW}wn30aJ-K#NZoiX#aV-uPT`H&G_bZpD z@wNOmXbuE*0q%8n9dCgWS@~EM`*tZF|C-AGIb*k*sZ;;T&Ye3M=A!jarQJ2rb7_AX z7Lqi-6bWS*OI~$%t$O)`b^k3<<5KtK#aL$zOUqa5h#Tl;Fh+ZX{26%uGheDryR;j@ z@Of@+c-%y z(kGT-4$gYEN#C(>x*0-Qg=JLI#8(8#V*i3)S2!G%Hl3l^KP1vP3{gf#-)xv~`gSa6)9d#a_N3kp{p$t2=j2 z?xhcT`jnoBOeQaQmqAa)V$CoXm&i_u{Tq4#SjdU|OB*XTO062XzMSWQo$t!0ucM=* zAc5-ApcrEzTXYn;5*mrFGb-}*a7gdvWJ)j1mIIHWnb$tBcXc&T5)x!<*FTj>#T<5& zhu|=f|06|$W%@7Z=Kn*^^uK@NwF_NN6ZERh2ue{I$DQek=_lao~^6YfNOFX*t=f#H2!GAyKxk zyAJNyaW5~~SV?CY=);lVb#D$Bp1aLozc610l6O=5s~keH&565+|HVpHQ_81ED6klR z1KYym9S-Tn7cDI=vqRdxI$u+_EIIv{nOpMiXhP9KDL_R5)BzbYn>l|E*z8XOfvkoD z2w^MFhOw@K{K~s^2vSe0M^TF+&f4*k7kv`et80w4+f4_D8H$QLxLU04Sl#JJRQ&g7 zxTHJgOomy`(76d}a!gSV6~aOD*Xu;4MzJPpz^GFGKwP1<-|RJM9^e*b?H4a(K2SO; zw>W7A`)dB+m{`gi-Z0>c_o7_4S;z~bih|E(hFfJ7cwVK}ve57N&4G)@`6eNV_8-6; zlM-`1r{eP}S=)&U^a$CRp*@_xBq;eu3EL$oO6vi##nq=!An@cE3K;r$3tX#rTcC> z=F^VGRDH2`iJevrGy6Kh{iO~smY9^{?xg0|d!w`DU-$>S4xAoVg?C#=PSvEI_$ax0 z{z}>$DLn1r=U=o*1-IjgHGQ9sCA}cJ!5+oja#`VarJ3v}r-s)>X>Ks!md?~3Ir`oJ zdk5u35nqq<;|gOX1e4sSB2ZUvs3q1=(3vw=HTnIJgzJ4gaw!1k?;mgL{X21+^9SxA zqYZoV?26jMB|``+%oqXm5n;8%RH2T@Ix_(oT@^I?O;2imyZS@t{ZGvrxA()saHW*& zH|tNTJ}`*(cYQsWBa?i(#x(OXiowaK+Qe~XdT<03LFo#GGd;%Lo~qJ#dKelpQMVtb zlPKtXn-M$?7qB1aOOhkH*f>5sBY-1eep<-;6>4u=(v7bHL4(y5EBzhc73M6b4o<9U z4Pe3|)mwCiJr~tZb9O7sgR*{)7EkdNGX?@InEe4AU49O^l`le9Kw}$cmhmVtAtl>{7(1%v%z%6nx@ zXyFgTB`*#K@+SsJ5Uh$(ZFClq7jSBRc#^@EMT!20`GwBd#U=O`>p?qM*E7nchMCw*95?_1;I{ zj7)8u%rV@?$L@UQvwFhty|}K#lZ$9jEk*3baZ;!`eVuQQldIXqV+v4tgCEB^mxsQq zKD5#v6*44DpX`HpPWz7tkOBg}u#zv}m~}+mgRxEIFa;rXiv%C1O*Wnu6xJV{*V+9l zH}A8fhk|U&VDo%3f=$Vqf?fOpBJq)5+1mK$&Xu#%io@Jl(P#2ub9-7LVQUk+AD7MJ z2CS7qor|*~F2h=*tCt#Q_ayX5OKm&h3dtfKX>%(zXM1!YTq%Z!wZdIl#Zi;Vwq+8lb*qRDjaH&@53VB$MTai zU;I4<{$#{k*MPfZKxTa~&-42hKR;MY)Y#j7{Yb@Y@+FPnE2C!cg9rJN`wb|!>k=@E zkZR|N&!{P z*=hOAXt|N(v$HkRB9$91XsA;@6{j(WO-DwKs3Pu>GMmUm@PfNDrud3w!~=_`w&Pjp zH}A%oI!)Aa+v}7>%Mg%>Hkcj*P+og&81-lATeQdX=bmDQP5Er9QcsUsQ&l$&PY<`V z;UDcZ%iM_+qB){Z;pal}xhYFfkXA4lQXLe@A}Korkx8PysyV9hJYG&yFW^&;B4@g9 zfDKYn1pX6n_Xp-(39!}qqg|W+Mj6qXtug$SVK1q)Nna0#RLwMR0AK|EagNB{2iJ?L zC+~lq>u2j+*qHF`D6Fc-3?*t-SLG6+Bk!p3V7CCo6k}MCVO0VkSVQbRR$;e<^6Pu_ zk8H*!^CLN?j!Vs~3K8mPIR>6* zwO4;_7^LkF|4%a(fx@ZpqaRoJbKBnCXljd67|5u!$HJ-#+hGH-RY8Hl;t5~$ zlF8GRq3qmBM&wXo*g~gHo?-{AZ&Zjh=%4rkdhc*57dY_9u8Z(S*45=Di}m#kwq2O~ zoO2KpdWuoP{X5&&R|xEaPo8YHh4{yU5fTWIqnThvvmo+P!>u1D|La%dbT zMlp*xZc9CyGWlR^z0a;Cp0| z3GZI*GI`O9*Eu^Un_yhaDo|^9z~egKcFjX&pwnw=J@N-h>=Uoy?~Tr>loxu?`frEB zD{0#*?T1k=hji9&t4Vot^N;p3ECwEaq!9{xg097^4RzWriav`wPDG?}xCa~5Js5M& zp%Z_por5%Aarj>gKW&1mdKK_!?#)+{vmMQ=Arju(hhF#H=38b>*j1}R5`E<)vB@r9 zs)=Y>@GGW!zdu_gR>!(4fuqiA6YVrd29Jdla=aWFk%B0kO9HIdQ$7{cr9q zmcl2$hbD{44;AWLUNoL*nqYY2M@!@mCS8yE!G&dX0^YC?!Ub_Qc`=PRk_n8)vCDJx ztepN?mR-=VdIq{Xz!?-AwH9~z3hc_`DzsX5NQPlfmiSa-W5c+*vtzg}T2p;zws!&z_OR z9n`BUt3ysvTDhvSAzt!`a!K!C)%9$t09=k++wWuiR$il=)zu2Li@4Sesv~KIoD4pR zI)619K?W6}2MxH#Hk>`!1Py-kZ(Rl zlr2|1In=ucuDY5kjO`b7)A{$Li1Y8ReWVlrCdO4unM#!J9Mib!LmbJbRIGEq@g8!B zCpM;gtZjtfCUa1Y(E&3`VI4UCBP8a%*M&sRw+c00XM0IXUcA$TY%uwl#G=~hdWC;ah>P-2u}li?_Erww)AS^ zMo-;l1M-`oX}(Ei%y{3bO=_7+syM>v! z4UMkrXs{(4lM`%-E_%{_yg3-c)rzVatk^b1`p{1GA^ zcGRNgQ4rFQr5120)vBX{@cvhi(tX=)HB{*eJDNs90B5ntusUg!cfxznE_x96UVfL$ zT&`MbN33adG}PWGLYwvcc#T^Gx9>y!diMbDgT8>NgZ|R+To9$*Q=Kq~esV&LQf-|E z{^zuP$HC4T0U74O?!bsM{Q2C9R_^OlF_BBny~m#Cr#`kw9qA&Y>HK@(rhBORuySPW8Zj*~F2SZiwqA;`9~ylvr=Bi*cUBe(4r zeO)1IG>0yEN$C3EW=eYq7|UyEcJZ}iBagrRe|29tcuCmyD=qSv+OZprPs?Z7##HS* z^$+M?l3t!2d+-O}rlb8|K;}y>fRpBHA_V`_b`Z+o;`x(4_+q3O` zERt<6n~rv-zqUxxcZ4y&_I{Xm$EGJamOHWf5lTPuMK`4w5U@q`#0SW0X)4q&@2KJ) zV>Qos(?5w!9)ie)OXN%k1%r!Tvn@`VZmVYo@`A^>o=eXh*YU)^Kh6LR2bw_qkkWOz3P6CEXV&GVJV zRcj-bBkzCo7x)+od!V(`LLcD$o>~1K8u>YZl13gHOj^o?^Tf}={yt>LsmmGxZZn}V zI|DXiZ%Rsi$IB1{)+Wmn>3)Oi`-mpB>#Xuj$+hlbY7%F9cEfph)KVn`8 zZ+ty?n@Py(^f%FU2$!6vUWLYbQve4qLlq1BOF9wvibgA@B$pLGeyTl?t!bp0HBM1gixu8iHT{;PVv{gn6pM?skd5!BOck;d6QVG*%rz$)y!;j z?A#C;@j|(GY%fKIy$_K~0(9xXbK6_k@e<<j3VaN7 zlj6v}Uh2#Lzk3k)uQ!Sby7m{#84$-3#--2aGxza!1P=l}kPpRR`}W+Od8mthkQ=#& z_a6w?d=ERf=GhwmW`>v+3AK?LDvGf@wj%B;vuwLfBW{*L7j-rVCL^;=Fa~k>O*au` zwg2*|8QRU@3{WcH_pQGS=5|l7G))Y#uiZFulB}F6Vtjsf;Fl#jKT_H_-xjX&GC1^u zyJ5`bpsS3x3CI{CuC6|Os-GzE=HHFRmq`EOWBb0cc!=#%JB77X>jolX($p@Bwc|B4 zi^p}bkOAr>JCapDHs1czhhab7fHKYLK&g7VG@mWnd!*7L)?sv>_xO^<5wU3}s-1s+ zw9VliYf9X=G5m%dq08h;pKOaeyt|u%$e}L-D}A6Y9yy^5)8kio{lj(Dg$9)ds>x#X zvy8+tfqVu05FTUTzPB~Ky@uQo7YRW^6jfnx( zyZB2;MuBTAhkMm(JdQ{+-xa?-nltt^e^T%A9xbca#&|ddGFBmmi(v@iL6LT04Yo&t z!kK&M37Pjdxo;1b7{}JQoubI2oxA)>8e$9=54$6Zjp1)~gFPddE#OBRV+cOi!@JvC zTVc`mG5BbkbsCR_j%eiPz3Z+9{{|>h>H+R6{qK6FadLK?I~TdF3Fraz`c=%4A{oxU z-EiNr8~shv<)xM+f3bM-x42-yA0Vsi)^T=nu+XueZS4I{4z`LfinpamwZQ<(~=nx z9#IzT0)P1=75A@wLZq3t*Evnlzg%40xTgB~%FB^bzf2m?sZL?iFE`G8Wk_MPay!CQ zHA$cj-8!W!6IkbtW*2fg<%U?<7#6wEj;@t*Hre;{{pni13MK4W48OrrF~3tiTwGks zs;Mh(v3A?vvaNr20F2JIgBc%B_gC?60KZJ<@0>JF@k(4GP;$kv*Ss9OzA`aj7+T<| zl_k&2zoZOCIvQ4WqG9&kw7ma;9OSWhiuuA91<0BUxce%FrC$@7#7k2#T2%FAf4F;V zTVKoIQjTDmE)2Jf*(DR|Zmrr&ty0Nj!^5%byJ$(Ct-cIQtv4->wj2GHir ze!DhGA=X7$y!#kF@W9Dmd2daxnBO@0424e%@Bf!t8ZnA!P6 zgN+cxSVwywP@A1QO5%OVqeK{^r>kBcABKyv*i%;Ac^E z1=Ym(D6ff5#GSRb=h@HrUJ|@`nXL!61*%}v4!TdfC2H%wmXA%+Pe7UD_veW zY$357_!#kA&*TJf=bT_uNsJ;#+;2}0p^MHfz=>3R9h4Fw_pzcsGlP=Hh)bw=iV*i1 zSWn5F*g1&QwHo-@{fu^lO(j7a?K2c9T|%YZ+Q`YNeb;AW{7C8qOOKo%o{{lqC^ea2 z;m1mUjuyoS8_Si5g&Z>$l>}6Ojr|=#-qUJ3yF6Du&~E-#ji=y_mQ2l5bWSUjMgAw) zxnJyzRa^X($_4?K@PXV{zi88gW9oMlIabC$Ct?aQF4I^#RfV?lzT^OfzZSbnIVs6d zKq^BF1TCtM8W4b9jUwC1XhS)+!5g)HA9b&b!$XGP#Nbjh)Kus#F`)vcYAb0i7r^(h z#Rm`w-DS5sVl_~AY3HUymr&aA#8n}gteMLE!=8s^CT^-cT z)*22)i)!g&CRQjEB3R#zpPo1$p;vjc&C-Xh)|Ov9ZEwWw)e7{$;Wdd%+h{nLj8+Q) zZ)eJVyn5RXtcP@l1Zg6Wes<)tzsKtEgVxl|YN`HwK$Dj^tI17&zdbvMn@asGUc|OQ z_-WHQ!fI^D(RFW`Of%PsTd)ira1Y&!GYzDkyXs8{=v8})Bj2`uU3!%J0l?k3Lv9Vk zLG9Vda+B)S9(vX~7!P-og~58)@w!&Y)n;~zK`YN z$%F|`HQ62K&CQ8wP4*7Ic$Ozq6Q6^}UFDmxZC!0rHS%d{!Nn z2)BFto)6+5`6LNAk1GDU%&%X}f-{Y!?b_=kkwD$jZiLC78q4G_#ftyR5budlKJXeoa zADHd?6X<=+)9Sz>_%l(~>f84hWxfXtmC~D(3Mpdo%jUIk(zlX+7g{kzMqH5A5czRc zD87bU1i7=XYLdK=n;M$vM#u@Eb`7-iv`vop)-o4s>T#AS|t*bd*GY3s+!m_r>8uoJS^1)t^*=-BQlBDlH`U*M+{)nr#SX=1nm2| zlnqX_ql-2tD|K^JlAS15ymhZ0I4%w9m~=;L6`Ry>l-qO*?qc+-N^zS7Z2Q|FrpWF` zLA{+-A!D}gCyB+Yxk?ABn%XKRMMyI6U}J<60xq!-rW3gdQ1WQDjj#86ecn_2Mnc8q z8p>4kAF%d7TZ#Zdj~eg7qDr9`9)qdb-_$Nt$!_rE;(pz=yXODy277C7d72^NmsEeY zFwx>yjl(2V5yvSWg9qV1Tz6t4`JQh{={Nah>R&sw7bGx?@9B^SKW#K94^AvuNyb7v zO#8Q^kS=ZcO1nXUfV0yh64si6^Uefu^e#+J0{V7xrhAPEOrvAJLnnUFzD-?79SW=cx`=3d$)cY5HOHh+9s$bXV)ix5fl|abxzgTqZRFwK)J>!Xs$j2< zF&S@(xm)wnf9jW6hl^nBLV|;X4Pb`}`dcz3ddm1_U5Jf7ek>|wg#^|V+P_}LUy6>r z*9{kKYaEdeNI8Gf&hCNKrndF5>bd3-xA&1fQyGznX`aaSK0?Z8H2{toS5tFRw@IPy zzg08_hzGe5IXp!P2Hd5T54#`W?d>i9{^mVa+p;W;agpwS`4*UV4*M*8wzkrZ>Re@U zaZTPRKsyurHPOEr8lYJXC0gDpk@|}3x?K|Dy1LKpb3C7KL1xMO2j5gv9v()1vVvIe zK2Oqjk*qPw@q9`{T>A5C@%-jN{&=8&pQr63^1pLH-#r5ygv;9{y)MF$x+OpNwH8kQ zq_6{ChA2=$C*m7Q7jfIlwdQnqLA`_khe-`W_J4DZFulhkrr=?14W-wLzJ;TKy50R} zxL;oTBXOmSiS)AMuL*lC(&40uifJsffPa7Tm!@V~=Z0%VGR@eLK$N&6D(KDO@qB~ z7V4zUjOu2Sc>g}^@A?7Dq(HUP6xXHWqqcOJU=~LS%im@-t_$y#lf}6E9s8gMGm#JD zL7A1S9M5`PEz8)jg!~=dNb5fMwF~FgaEjwU@AyTVi37LUb)hlhljPYG$Q=^~UNkVy z9$EIJ7!MVjvav~UbAMtGC-#(-8|x>VEOU%Jyg~8eNVmW z&^g+wQwMJ}_eJE>odsP}$VH-N6?mN7G}>B5!3pli2s~fDC+xZy*5o`MhEGCCARJ`! zqfDdaGPKCV)RImaN+rw$a?s1)zCHaMSQc^)wQW?Gvu0-a8IB+XSX`sMul#*7n8@*Q z!-)X5#jbmZdS8Wf=@O*^?fm)Op2jFcZ1aNbfN>~P+QGD4h6LIqW)J9|nOBcVdz5fF)Vdk7ho)Ly#i1>5DS0vQw7+ReN+I!K zk@vwWOR|V(_@xsv#TZE5St*m{^ZF$w?6VW~a<4DAKkvn*?ZPSfUn#=&p}UaECcoJz z-fe+7(kaqpAuh&K0kP54$4PDg>T8A%dOL*8F#)9s!%x8Tp8+Sg2_dA@AoU#j*>bt|Y5Yuso&7M+2j=F7C%+{m zzVNdF?q`@>f`6B)Kd~2#cl!ol5JybG!5R|FL&y(|uQh4BLULdv;)c81x}pgQ&gHGju`vSF6_>z}T(hrBtAwS1qUhiPVb=bN2WnhzN0 zH#xoTieIN%KB$cd1MZWaeRe4z{LY6Xcd7Yp(nB1xC#e4s9@DG=%fvvrH74w1qL6$( zc-=}m`A%;i;8K2Znfk%Ytd}S22k9NGYAHq!9SrX9=k!EHbLuF3eT8qevLmaRFAb~l z-p=rGXpi_|b^86q&es#hPA$PZY3n*!^5*ePy=r!Yc`Qw5o&i9wLXS*>ED*3vqi-$XzyA zoVR3@tlVCJJI3_<^e9{7H9JHArY&-wmKc1NuIX?++OZmlo&6yh{VuY#vz3vOtm4r- zh7D0LAQi%{Po93Fq0O4o26lo2p)HUL;@f`dero&+P=eUyfkJSG{B1FyPVj<^QS8b? z`SNuLftnrdm?pyDtEgf|bo@ixQ9V0UA+rjtQ1t4sa~uMr_?=d$ByzM8-Ck3^1i1r_ zkCnE!sm(Y5Zo_YHh^+R0YeYQKklwbNYJU^FPm5#rDCPOudjR)=YI7fO|2BOt?)}?# zVwb_cApgHAxJ!hTJH9`h`QrU^Kd5$QUUdX zkI_?X@?lbqM^4pOcBpTURj=Q#tG0#wGI{3B9`?Qo;3^{Mh*Sf4niEb6Vae^e)~}xN z(5k2@Vprw)HE31bEq{Y0>k_rQc>aB^M8bsss3X&HQkJ+<^igc`aZ)C_yXbBRb9R8n zkDVrK=`9(=8@7H{(VuJ9&M&!cPBxf{EhhBHt2DTN);$SbTu;5T<>#@-@BFZ9KUr$uO_*u3W;PtzlQv}hkap1e-OGF=byus zgF`zRQ*m zzwNrwRin;}7vjGq_Rn?6kY_Rsb=Z+A8uDJ5{c+b047dKXUgM9kzuu=4W|i%jcRecU zgs76OC+VO5{^aR%-0d4bV_)GDLtLot!q1PZJA3U~2a@-G{aJb@Wh@NxSTM~|j%Txv z;d0&YqK5gLzXI-eA-|LU{YL&$H;GuGv=%G#=J*%t?a$Icar_G?GHqSpeqxl=p;#iD zAB{$u2Z6^LS8x_bUSky-5-Bdo9r@u0Rjif_RuaL3W_tLSu;nO`CwD>?Q#pt*_YDd z$KGUN0=Akyr-z?qKr*-QBZCs8$%LZJ(Z~}5C^Tk9dDD& zjKKKUP_lDD-p~($RMA?}*p(q4Iho*D8R#_J-xQtJ4rTAA>6BwcFhPvli{(cpi*VSn z_d%4H&rTbp4rf`M{Bqr0R0(FF9ao)W4-Gf%x!}-Z2US8`Xk!Q#JI)HY^aRxGU?rTx z#l|H4Chu>yLmTstGMBH<^lP3)A0hO9&0yZ`DV&xB2u*TvXyvFxl%;|YSe1BRVEx+B zW_ErXss_~Y53OotT92^a;K9$yS!$`Oe#hH)unsGkPb9Xv*q5g%(X1?kd=3^Vm%ciJ z&J?~{FXgU87bnBp^0jimUt8Kbev{j@7UC~T{A6LuK|2Y|{CPFY`<+_0&w!3bUy|0? zv|vYmy+A0maz;>KL{RC0Z^5OBYO8Nw-Z58cmzv@D95i@Y^?myhE=EI!1-Rs;6w5=I zA=<^7_sBa??E_dQ)BLiQ23!6muvksvsBMN6g=0*9Y@JlLkd|WV#rq@ zawSA}jC2NlFq=)nx`Y(IB%UK%J{0ljMaJ{10OZA4bs=1Ba*QNWuXY{-neS<3g_YZ| z=z3UySNGi3roYORnNR$5(MKmEhx0fpSBG?P%#zI*6M0P~R(}6b`uTy56H;b_TX4+e zC04WvYyIYE+zO$dxeWrU3;x9GOI<0P7w5i`<7Z1agx_xl#BH6==LL%5`}dvESUo^J z?KXTE>EpJ99KItdXFCFtVS`=+mlWTB!q;7pv3PT;iC34$G@O3St0SJ@rbR3~12WO{ zTedH>&9Inn*w?+5FsX7FnfGaSJ6cKw=j)uCVj)Q>2>CH@yv8N`TYrHE2|p`(JG0ew zvs3D)vi-IBz$&@gtA=&?OfFwnnY?>0GEsNOJ(o{gH@UH^AqQLMp^0~t^knt ziG9q=@fuj-nS7i6+(7mBInDD(s6Xs1%kHGNs@R|!inTwvOkV_C;RMzOkf}+MUM6MM zogDNcKJ6Z`0GjY6moI8@1WXX@#m?|@{*N5set~Hw*ZRuAMlcy;2WLrE4Ex6fVZ}~A zs6hc96CD5n?PkV8wTd292ccb#^7ae_z{Kf_kq03nvbUM(5PwjpWi7D_mdYkV2^L8$$RZ+qb89 zXMgMms=KhR%&8l$U*;XJhui!Z(xYBKO~LvIU@O&fPe~cA9G?xuU~>8$LoRf7`A^P; zXDy~u**d8b9vW8L+8&$Rj)mt&lh(PjO`Q6WTv}%^x{uNM3|41p#fEm=El<*I$*J6h zRQ*W4)aaP=OAXnN8-BWO&&nR@!Q4q1&@3Ot5<9Y$Vqdw>O?XXdthFsSd!d9HlPev5_{)%>se_C~nAC+DXXwV0R6nvB-&SM50R6e`&v& ztZ~y_JOR1GAmpET_Db}Vv2S&!zu)Wmlg&ml_p3ao`*npz^5eUN6W||T}Lh5x!j7hrlj%8Qa;}|ae922!3WX3xktgI@yWBZQFwD#L^ zZTi9HXm;?CNiKLXQGJ5jQ2pEVd)y99_DQyLL6KgiHVtyxIiMh-M60~fsDWnBL+~jm zacu>Ae!`4}ycp=ceu&ujq2^!nnBVGK3`JDZ40ek>^xB-%VjPd{2%O@PUl$R?+Qefa zt4w@>@TSC>wxF4&ZEvsE&OB_FA)nWjWH9VEt=&1xN%unl)imII(+0H_M~}Ybhh>|! zS0W;$ug2FL4$H=idZnD6^fZBsB-+DH#@cL?)r+0U5;3V9eT|-&gcX^OG=o{C$E7Dw z9_Nwm#&)|TcB5M`b!agTSUwjKieMZuwSME`0+IfCJ<<`#1B+!8&VJ?|MZZLd63Mk(rOgk(lf+ zkfp`QF254cDe0u(&>>&gKh< z^|&DS3{8ey30T}e<(qbTcA&D$u)j9K4;>Bgul0%2WLKrW6HLbNV3UlDLF_)ozDPx# z_jUvvY-fKRd>B_HL-ULlVpf)xS9|jt;A*P85KZ%tM0gqPF{Wa;?B<>E?We+x9C?nx z+`^Iagqe&O7r7}HTES-(G${$1Kh{S_)R>*j(ZwF?b1aSx25hF#MCB< zXPoY+I|q}==kG5~dQF`qkM=D1Q>TbMEKq!8nYyj}nt8peeB)kOthz#^1bHqRWJks& z;0KT9dh0Vqt%?0zHA&=Bv&_AmSHA&4^vq(np*2JCLr24W<}a17FE9CxaHer!`UR4V z-AVi^RgNP(*dtS!LTlAm(4EH_*}Jgj1{vc6%#K0Iu=bX>S}23C9d7f!$-3pzFJnI6 zAv#PvGOEI1(1;_tNe4zT?8lOqU1lG@p3ddua+X^&+y)8JHswYO5rH{Na>Ae;8S!m|IMr?bce%u0B9PDm3VlSkic|NnAj6 z`nkYP+IgSCKP3gjDpmA7SCX|UH|U3-!RZZZaXW{wbEuvRyUyQdEVSuK%GAjb;nmk( z_<_I#DuDTYjPe+&oU5xsU;^N>)%!SOQ;$(|kaB@DCRSH7TXR>6n?K#08TLcSv0uB7 zk*m&qy|CaYD1mH29PSbO+2SXX?Cc;*Mvix22*Qk)FzpgRS2%yLJIv92y?^56^J+YQ zYQC&k$e$W7x&Y?+yx5DSnXpm9pLP&TRr!=MVY!`=Z5`K1z*rC3Na(F9eygw@$lG<` zmAQPC-;~e;$h+{`FRWQ?sYB|-&i4>tAyPZ;F^LX72412&GdNbcI-F&G#=ZzS`v=}b zwr6&=~|uJ37=@2&oU#_@S>-J1@ZKBVakaQWMS2U;UrXkWbW^wY$J2-kA49+tdizF z{Onpu^X$Y_5QK)&@&Kpws-XG+*jd4cPcj$X8} z3>UI@8wv=@L~|oh!)smf{OkZ~5Ii@0sCeObNm({|(r&nj4bqdsAj@rt35CzeudrYc zXw~Hu**x;h)xY&bE&aLL4s%I09XE}m=Fm9tP=kq55Kp|+F8*rLU%*W?z83D7`i97gOZkKQu!Ed)p3ffMT z6%o;KZ*u?J;Ia2u*KalPX3PQQ*eYG5Nv3<#&kwY=ji$wVRhlpjc!G3XsEP47CSRfH zniLZ$$rDKZmU(`H+2owi#!o6{Ds`yQo*tAAbVc}Hcr8sz0Cd7|@QX5?*P9?(Ao2pTD&?3S|0*M$a|b=5TMOea5bYd>`y>h&Ma5lf%Q`3>^C987+*3s% z>VAOjn5TCMDGeA>fR;H){~Ci}$XApXuXw&1i;GBzM|?iEj9677o--MZ&FMLDD;f9C>G)6S7qHRJs^vy3fn6yrSu%v-WDNl z*wb3+XTP`7%XF>=SB|%pNf!7eGYVLyy*%;}wtobgOSUGP^fD>*v+m4q-`I5#f5WGe zAn=U(y)7eP4Uxh1UX=F?IPPh!9Ha{l*_CZw!5L~Lfz)eC_@Uj(^;Ck#SDi?u z=u3+X>%JPSLySLESDO<9}26F@JH5l;0DnfD(DS#V<*N;vhT6MVlYRsYh=+gk0fS5R8b zUxqnxyN$0fX&fl@SlmjJXj$fd5%ImC{~{fgr^ERhP%kMQ`=Y=?A-x!ew|yfnFn0R#6X}SK4&OgS#SRr%K8mwF?R#ShpFZhgOEy}Zqt zucfd`xlTv=%ID(~rW~Rt2Paz3OV(*07QuvsbddL=DfQ#svv)s9o?k+ECcpX$t%woq)}%n)a>Py#DoI2EWu#bptgicfc`)wP zRR9*<^1+sWa4Sh|KH2Mi`^`!|FpHE@)Dz7lap~ne3B_SN@1+Y`hRh`b)UNQ#QLuy1 zn5@*^#4>;GueMqb+O9bV$OY1Ptdx>c((5^J5~X9ce;g9j=(bl*e7HAMQCPykpbILFABxmJ-1|xevI;nI@ za?zNB^D~0Qsr80Y=x{?UEJW>$^P_fUWOhauW%Zka+5VO!cfr)`<4y^{sLni^+8`e} z;V5)=p39lEcB$EiWU&J}Uy5?k5EOhPQgxQWpg|Al6lzaue~aaz#$YRN6}!l(ezkdJ zzJTx1PWDlB@z3#!K2Q=>lkPC);!fyt5pag0Yo=EDVpAusK5W`Vwz~Bqh?vDgFx@23 z^LOvHujj@dYim{#Ar(&B7twF3aMBoR(m0_O35{IjIls7u&x>mkM@)A@EH#lUt3=rb zIRUIz`mGjyY<# z6GYCB&AxNNOd!=jijY$=W9>U5C`p#L+T1jrV^PyQv`o*@6r;2 zp;Lo6q9~ln*Ijh*T31;z^)g7db}Xw0 zYIyH0hsVE`8zxcK+SPrdgOjKG1!>w;Y-dps54M+CwZ%O?&J#Y_6H|dR>{bAVpLVI6OyXFo@wlu|IpL9Px4pON z`@F5KV93Hc!2-B1A9boiG9`H{zVykfO2^!$1RLi@_@_}b%FG?DXwRM$361Ebxvu-2 z1%sT(qYLZ!K*}8D#4HGvGFhND_h!kH2Z@VQFti1M1-QC-_D~y5_aH>IlAB1G%a_`mI8ZFtfl(1jO)dDF1&foYL7~eS)Gat+g4F;? z9JE7@ig;=3foj{(-xLu)n0081w|fw)YNuM0s*IWHUkI^^EkjZ4*LD;t$M?@7gJ@UL zXFobA3u-R4=E33);`#`Db{2J7UK-*PF=OWUI0x-IkKNiSFC2GfaHUS{?|Yu!-4(XoaFFCb*kNoUXxz5@{QHYvq(QoOVgf1K zCz`UCx|P*awZtymFm7aZX%H|bDhj2tieoU4szp+<5`N8Nbx;Eo3e5Iv2+HAzxr*a; z^X&%sr_aO8YQGM;qOQg8fp4k-o#&&V6ve@VLEV;z-$JJ3R@55Y{|wRh)*fS}CSFPO zz|SbC_=-5REP9|T$A=3I97guuZ&-)6x<V2g7=KW1&-5 z8-GG)Rhqi?dZ`_zV6n5+1U3_6ikJo^vKD9iI0@0w(|d}ZP&4(A#Pl>LsC-C=5xp1u zgMeeJ-}E_`7t*n2T^DC4vWQ({_x4K7@!lyV+w${uQB@)vjzb%6bJZ-Urq&$9A#dPTN4qlwOtjP&p z+q~>kTyT>JnET1dWb+O>pM8UHokWM9B5Rpq#e+O|DRw}Hzs`Nra?!3K(_{&9>DhC% zLB)?P8CCjA#14OYtlBA&7%cQ5S&HlZ?)N2c!x1{#fa=biWS0{0Ku76cdBSUFrH}Vy zGjl0rFxn9wIN^qFu-aJjS$rBl32iZu-Ynv|!}mDE7@XQY=Td>N)YrAzV@ zvpg~(rbF%~3CW98fpighILg9!_A1H=0PcmMYs@R#ZIXdJ!RqSa5!?AyQL0Nae`%Psapl(jDeXe^~IaDV< z%YeWx2QWEh2A@>OWt+VS!6B9mRKvn2`3M__{Rm{GaTg}LMhAe&-Jt(J+>;p&C2S<7 zpnCxbjqh&8Tmu3VmT*}aNjzGuPXVZ52JDyp_=ieNVgdu1N)}05{tXo0PX~IEH#En9 zGI@^axP~9l+hX%HGn(ayHON7sL+M<8V@sx=@cuS7N-E|1t zPmYm%Jpq-?b?_dKAF7s^)w7I=$SC3)!-|8AMM66>xIsgcO+=5~lhHx{0{L;AGE36H zXOv8_4_YD%ZodlTmpQABhr_GG|3xcItJUh!#9x&dq%42I(kfIyX3(%Y$l4=EEUaSR zBa3T24Mnve)c<{NxCNGD4=tC~`|C@8f2YwKPzE~7a;(7rHWmY{cw%p@$NS%ZBB%tl z#u4C$!T^Ug<5(7dTCIeEPXY{)4b-`gV=wx|Q+c-z+XAqkC6~SHQkBfB&e9ey5SJ#8Vh?x5 z={eXH12Em*ytiVnug!G<1F($Oz$k`zKPg^7r}c23_N-l0IP9s75D7(H4IETf&%+Q&Ie{NlNiFt2VbTaFO&Ec^@f<*q0kqON59 zAE@tagmn0ic-y#l7?gQ?c4$nYoSM;+GtMxanuGw5Wh#O%pvSLSXS3eq!F% zk{Q6o?Wfv`IG&_kefP4n>({DL!ElgAxrl$X$e7g2u13x$D~(^2S~_Bz zl#MFwIKfhT-4ex)Gfn&CFcPM;FX7aCv*BQo%6o0L;Jp@NU4P%8@_y4~EGe}Dk80=H zwW=E5DvK|_&b8c3JO5F_Zdgeh&X>PE)1vOS_v{1~`uSV!(NJT|dL>r%;TR>BWnr-s z_zK-jDYu;+T1WgSFA$$CMI2FnkH-1`jK2TqqpT>zI_T{3TXK4uygK_YvY%Q8m-kam zG+<$8-8-R8aK_Sz{RM8t0rFAJ<^oqjkuGIFooW0Bx3(vo&?|U{q|hw8u)oCEm?Y3W z*zvr1gJ18*a6svky%%tNNE=GjSZ34pBmUOaaFyO1O+K`A$;B3*wb_^BHSWeV`O_Yq zn9o@Or4c*KYd3L^fj7?6CUnIK{eOX0HEcwsY@4JP$= zM#TU>!-gjXXF=5%Gf}1wa7E#IAJ4>>Gkk{1jn4(g?Z?YwHkPHedV%H4Z38|ONXsh+D@4C1s`9+wUzsY@vy)k- zeBSfKYyWhwBb7Gg#oxolKDoC`;mp9Sh60JWr%MR4NCIo#c4@ELJl`%XHm$t?0yfNp{het) zuqkXBDuWUpSaRioG>|K*Qv~?>7+qaDbnVj3It4>22ePN{L64?BWitd?k_7tuY{spl zI@Jap40DwE#6AaLQ#LS@^1t}La^o(-L@pxbsxmauUlvMx2DyP_IRE!0% zyjyz*0u-r>NXII$K%jQ)<*)x}Y!G`%FChXgE5In6lE;oP=*_()qNn%fcOf7J`cq(8 zo_b7vQSjvMyXRFBlu`C@4AeIV-WH#|;%7k8`Ruy64zR+@v0cx7GPCDSsKiuP?Q(M) zN3eX=ntb{XvkdIYG%!?V)y11G??&BgwGUm;nSWJyE-RE?!00-O+K^sWP$p*NFaprt zTfg$GKO9eb`3o^JMb9K`{`q?ID|VX(-(kFU(~?5%k1=PaIACe;qec>K)%NSSp)3A> zz>v*R=?|Z`E+PZSU0kw8O6tc3B-BG-9738nWY#X?dSG1;b1x+4R#|f_z`zaPHb@`( z9MzTEP29fp@QzqGqiD>W+A*u8)d<2qk$s-G;potFYAG(}o9Z(!+3aL<`Y zvs^Ur$+!w6oz}+@ztHj~^&c@*t7|f&ue;t5JVAA`g+8C!;#d$d>}PdI9mL+CWu0hn z4VQ4}HURiw(}uGCC)gc3dgC^|7=r@>FlmL*LylTG(*Z#NrA5Og%+RPub5DcJ6KY}X zbGOOYQ>x{~D`tSmE8aGUJ?b^ki#$45UsW2i`1)>@IIwP*^W;@<@+gh%9-iHGo?rtK zdNX=*}Krma!gaK=zLK301HlPiK-5=COP%etzoZ+R;xz_)<7xinSWH8IJ8!m+b}c{m#rF^ z0)430mmm4;n%I#cshX}TAX%Z~TAV_-i2Zt7V&x@JXoQIXk#J{$R9G&@no{-#t+kVW_5H;u|O|7@?dL>q>2V& zt0&z%uPpC;xZetwGfdid=Ra01FfOf(Kdy-d+_aO>8eu3P-vJ+mQ|JGp+kKZM02N3e zRNI^QIl5`z`yqgC#=@AuU?YO-KU!8a7Xy&8icbkyBa=j4p5}=q2|w%z=48-2nICdh zp(_0_S7<&LnZyOC53SFr5M+CsJ1-v~;jnK2?cGCcEy*_&3R-UOD4)K5j_XHJ@aY>C zC)@o>UQM2I;}7Ewrq4OA#NSKAsg&QF6UxQ*rJGQ&_nMg8(9Z$OcadND1ux{k3DKpJ zRO0t6#-@pLQnYFCpk}L%@5cHMnxSheowi)>Jq~d4Y&NZTdM57MM*1`v)GSjgC187( z<2SyyCyN1ED3|(Tm?tJIMKX9wy3CbJ&f_tmswQ-1@_j-w+tyghMEL8v;+;7m1_Y*R zb2FCR!#lItnpgi@V(Pn{+InipI903MGK9CrZ}-zk{SHizu={N0IMSTtpXdY)x5ke( zC>u-W+rOr{WLcm92I6hK?{+RT42{0&U*bCJ5IitZd-VIxv3gC1ZbR)C+Y5x`JMWY- zC?G7+CvPtuNom^HavEs@i?-P9M~BT7g-&0;m)SbV-7kHhdaRePb+s6&{O!4F#u|Fi z_6-nV$?FvuZEAk1RR-$rMfcRWVS!32#?GP6ba_e3gYWbM9`cK#yJS>Mu;_bareD0E zvibUlk&PjB=7y2+{w7C`cSBCbpWnwP#9Z;}_RFsBCjJnDtcvhZZ-WgX)@avX*uiodnp2NJsomms-MOhM5xlX9Pv?8O{xs@YIK79pu6Hidhft|&xAL@y$8ceSeHy`;wy2>{+8(U6Ku&+I zCZ9P`ciAmfuKW{CMEgxW-Mk^#7hP7;n-=N4TDSMy3oN-tC za_)vZHs;ru0PLHQ+AUJCH^O-^*P*rDPgDE4X`~Ew$#1BpAUySoOCNq3<|=71x<9=i zmmz5oXbE`_jY3`kN;l~3K!j!lRRnKRZ4tM+J_3=`tco%&WmvHxsL}~UOXn9YWGM81 z$JqI9j_QfE@s!QHM=c+iX4mB3!!o%6hNTVM{dMkpyTHQY0DMcq_Xc`oQGlp%N3Xry zXKoQq*tknIFQWcY4&pT> z>ZXx0ti1mcpa?dDJmX7URTmvWdlczf#R=X_+*U=* za001>(}bl-3kOKl4nOMK;+SlKO0W}oH8muZOf8?QkvW@wCAH3J?uSCYVVO-zV_{iy zBu5dT@+VgiGUYt_I+MUItz*d7E-oVdo5F+ggDI;&KvFuRu=LZCXnni+S5+PSbprx~ zjj9~J*URot=@z5VGRwMK%kvygdyUDDXGVz6|5jlgQ6TJg624D_Y%YB&3->w2u^UoD zSWIBO*ePybJ}}Uh z8KChoGJ~zn%JXr>lmT$X6&%?5EYcp}HITxf!S9w`@Co@XRhDXT>q705!=0I^N%Tm? zMU18NNdcXC0(S}8QHwJ8!HWE{=mmK~v5QkF_1Mc$%lB6jwfYlQj3sPu!jBES3 zPgYQ2jo3&CDfutgeP)r!&+G2Ct^vfR({yxYWy>ZBbCsgMH-l0=dTUFPw%i`ELQLW!mCU^(qRhVy)!(X=Gv zq=CsqUfqMJ$$g{Fs zwW%v%1MO)@6%0#2%-!_#2x>Cgj&!JdDePb}*0W-;V{N2*m8fj>mh5`uP7wu1m6s<0 zjU+cOHfEB3I+VT8Ldx)^q~mYP!KE>g+Apo2cA8kEJ?da7ryZq)qJtg>i%Z%**+;B{kKWnD0E3o`S|hSjxvLo*+GpO&-wE*_6H*~k@8F3^y}(| zvg;o{>X^aOsn{iRw0xuCqroeIubaef-Bqu3eXKh)KCJ27Iq#1$N$;}8ed6xl{pdZ z-$-(5MGx#!=KxQzBD6pn|J-R%fVr&{PldIfCZ~IW+CquD{gBZ4^Vb#jH@cVM<0R&S z?ILk*L8nPV;Lfb9&=Id!`@W~k`s58IrNCd48ATyeY)?GK)B}c}V0?l-9>m1)!B4J< z)b$evHg*q%<(pbK7xx)o|M0W8N%&ii| zJQj)NK3j`AHqlAv=I&^Wglvj$uzIn}dk7<;?!mT5l>@+MR)4XVFprFI^{}1CrGI|6 z&VlH->Ld}_rZjh1iJ*0dK@|u5`KNb!CMF`h-fb!c;&TYmqX zeESbg|LNuJGuU+nP(YeOi`(Hu(|@W+?|7p@JrL+6(fy@)8^G_^=5r!uo|$tyG|9R1 zO6L>9-GV?2CIllaq_|1oc;j3t1=#S!b)0h{8Jh|!Wi4!d^Spz1`_SYveZEF0k z;HwXRie4+`pc_l1xC&R0E(zRA3Av`cf-dAe6X3wb5V+$D_p%lTM6>~mj-x=0M*dI< zw1dbX4fp;}&u1+`J1&pQ>QaO6R40RCoU~4+{XZo_5a9@)5|rfsIv%I$-AMorSLW_~ z5m*0nlaop?6yzry?F8+#W=AdbX(|qY?SAbdojQ)`zn0mEq=cLW+``#?F&D8@wTj1C zefR&-Mo=LnBkrY!mZ?5#qB@)+j*otZo~^!o11|}h)eA~xfL_y3-0hj>k~=v3S$A8x z{!jmK?=nx{gr%Vq2ABAv#|YlA?RsucY%fe| z=af4yn~AR-*v$+6JwtykSVDJG8Y;ITBPA((SP&~{RG#ltzj==wf0>i59zj%0qDiMv zD7TFk?x*lbiCPeTB>y8Ciq0f4Aqm`Neo^_CQ+PWV&4zK`el}dqnbZxaVm{vhDi}tJ z2VnLTmrPQg;|k7+lUxKW6ahH3VoN$O5(hFF5fFs1|92J}p#BXAI<<-Og#Oc15Gh9C zPT^|T#Aq&p3zRz_!NhQQimLxtt>cT6?Z6;(06LzHna&*Be@y$iX>-CaU%trsZoP*k z!v^u|VYV8qmPk6+f36@fJN`lUijDIFLiX&KCygj5C<+2B)?Y{U=jkgtj@2j}63YJN zz#4Q+UQLOs%@>f04IyZ-$lv0dlW%!orN6XYE`7uYo4fsQ^{TI3Tk1=?JL8lh!i1|K zo@`BNB(h@H%6qZpQ>V>CLQ48*$fj0uzj$PCK6Tm2zy&K;p}W3|>PJkSjkioJ9lz03DxAv)p@2A2|`>?&*_smKnwG`@jWO_7ni$wUJIOuCD*(~yq#@JD%;FD zD$ymiOR@f6X7KZ|qCmiUgbYj10*(iEK(s_FI#o&XEI?uDC)bYiu3 z`D_G9pdwC<%cX{WQ3if3rA+wf84cTk8Tjpn))m+G zhStp&OSve!D|w*6WB!f^Y%p zCQISn8GZUe;X7FoDL#renVKR-&*g~(Fel!Fu-TS05Dv)7)oHGE7Sl$xzCi!@VM=4A(b8`2-7Wmf1T)oVu9I&T*hL4;c0Q*?xYlS=VtYrXOF2i=Q2t+uvJqz1*>@MipTYPO%$P)n5WH{z%E_4*ZJ+FMr584se4i1rJ; zR^{t-(%;s&-%TcK&)0V|-@~~Jfm4l@au~W$fr>*><KN9@T(!1Dz&DtiQI*y z`uZ@Be&rm+1C9#Ei7%{>6s^6jipjyWLJMgi3b_~bK&44W5j}*c3J!7Zn+`(M?_5`L zf9>y*D>WwrdomT{b#*rdEkZu^XJ}?X7k;nj0Ye0M5$FNf_Yb*i2JW;|N^wj4N-XUL zls{z69Zma%4`0GwEm*5S>=#fKI#@Ze!c`&58epa&PS}lgMIVtZ4b?7-^aBz?$NE~B z&V(`L#9LRJuA;}^w3gK}>q~6fPK-s$FW2c1nX%3uWI)mTXTj{Pm>i0W{e=G1G zgEdC0JTuGQUvE9+>^zaLaf(g1teI-k<|^j>h_%#!ob!V?vOs49YaVvY5EJ$^VS+|&)ijgX z@{Fn;%}_%M-29jOnZ09vOid`GPvKohdQabUrgZ5=MX~jG?yMk?<>RYzu6wUAG%v}H z+#5l8sHe=cyzriH^R8#@R;K^RCj`(hWf*gEavGJ-I?~Nk_a~YMV2h6ig!GZ*yXN&` z{=|XfW1uyGFy%1M*?Ywi(p^DcMh~ixlPaSV{$wY7ur*);${I70;LA{XSBWDKJPmdj zILq3S1lI3ePu;XadnZPc^PfB?FZiLSJ;Km@LeW{;2)GuIS2MP1Lyz*HA#vKI=F;=Y zgbrr;8kurfhpnH?L06%L8bz5?_;ZU0S30`i6lQz4Z;v~T*SRVtK7Z~19arHzb%hT) zapHtq?%XJR>U8L_zswElOMtt;7J9t)Q>ETY#a%eS`Bq`^$D!LoP`Q|k=aj#6Eo3uo zHm!?05ydEmV|;y)3y8bi0jXE5qB@8JvmdA=M-++5+2{C1mJ{NN8yzXZ&h|qk6O-$} zgvxP{$RroIN1%AP7K8C;O*^3>C4{XqhQkx<(GFIK!4szNuQo;g8hy{r7h!`-6Pa|- z{1clec!(H*3#W+)3DZbMu<>J`t#t~4d@aR&+s78zw&cSI0&C_l3&(?YIUD_HN9)1_ z)Ag43DU*hbgy%`O|KUFxHPA>&HBteQ>p zUP!0Pn2O1RF%ogu zN&Zj(Dwp)>y|WERyjpxq_G7%1Tao>-$Nu4zI)`k66|qI+2J~3Uv29a44rY4PsXhvz8@Y8ZFokmb9LO{iX|; zTNx<4&F+Z*WoJ$OrG0dB#L4FR8yh!E9|DWjUroqxc!nGo&e#mK4DHdp>B2{{es>y0 zg?b9z)e=PX?|GoM0S=vX*Gs5kF0NQZEmn~V(-o^pP^pMM%bex2iB6dl(y+feF28uD zr*nj1SSKUx|SDM1YLl8yY0YY0=dBf zm&>yM_F`fteD~V5;J#T030LT2IoflUA9Vebj^N%k0K9*pNI|t8-`G#;7M%wM z*j>LU#`@ZuOk%u+58HetTyDaSyZeJ^MzgL;D(!!nDxHfC2XXi37swo3Yc3P7Gr)}u>j%Xap1>I`k|a8KT!R#fAD@Q0$w7H1wzx$_nT z)?!;M?s(%~@*MCp3&TCxMyC*hO$ou2q`#m1veK9Qzzy|L0%v=+ z{B9LXK`%8oHyTI$af=ZWYM$tQB(xgdQo$Y z{^+ZvQ)f?<;PdckK9CizUzgUR_~%frkOhr7Q4Q8a*yEx%DJL&QBy@rEXE0;4NPnVl zLvPhoKq43Pe$CCQ=@o17{k;wK`?_zG2%e2|yaf^XrPN?I zEhLMW7g6J|VOfRsW(_OpKf?r5vOsXhT=lOE7E6 zXR2H>Djg?s4aFab)8p&%OTw2ewBUNJvdYt^Pp=8GZvOQw;0h>bNprpM_kjPtQ>!_l z$Lyq;_?~nBi;K9Ekd!@9)U+QY5;k&B`Inh)%Md+umwUVm2-M(-m*tFLmG6{71m`^Q z+@k-^PILqzpu7&`U;I|#U|T13=pIK&N>Xq)PQ_<0S&*59z+h%%aZ&L@CYPLB4+z-P zV0ER@N?*wdbtMe_^f^~#FXy(vCwrUp%ih`majxAJacCg9FR$X<5}W(0 zM<@&>Mu1P?DH~S6Mw;NG>izp~HPU1Xij6C6kH%$iHTAC4yH{~T6O={=mV&JDZM@Ao e^K>rN0eqXgxpTu4eG>xzZr#whUUJPM`2PS+eVCX4 delta 29638 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 delta 13883 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 hEZgU6)1bX@N3*MLH%g{6a23xXYUsEh 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

J#_?AriH3D{DXYW>(-VA;C3q z5wUvY&=N6UW4X4f{lJ{4y9Z9exJKfybOHr)t-Za(s53>?O*mHw)|SWLx8CCw5Qup! zw}^`l3W^8{lF5gj_7Q({r-)#oxR>d0iP{tXx%rrb*EK62N%pyBwDDbGnwtai^D#e> zS_X#B(JLEv#9E+M|4oGYqHH(ajHBk{Mpb(0kMq^})y0D?QO(Q8GBS)1Nqho~Ks&v6u-QTg!I!GAh_#Iz;;6Q!T}NtE{Li;%cE` zYQ%rJkdXqn_$kD_k67d{TAb&r8&+_T_N5MUv zoe8R`UF^0>Nq|6>lo+96iatQc5CFWb$8}j9@kW_ zG#Ng-g}WvuCaC&~PmGr+X6B~Y$%(IC6~J?CMGGVs7i(M%Wt}+Vsf9e8a$Wc$CggmRBvr_n0SBqs{J!4K)KMB?` zewO3C`*^T4l{3KZ8^MK@nY4gw&O>UeG15A>8NrC$`5&s0MVA4zIxnN84I0gAM1F6W z5sqW-=cCP2B_L^ui4W7;J}rd&exD%~cn~c9(J;wyR*fTQA>^l|epQp^Wy55FJymkF z#Fx~LoW1lOkn`J1TF~8oSu?A|_7Lwo76^JZxuZ_OZuvSN<)prgSVd;0PI{Z2y}eAj zJ_7>-C8eu~wUrRtk<;4D_wAYlMm7e0V`Gf+zGo@o7ag4=PS7Gou^B3+rzfz;Uw^RN z|Iv=C%>FxGWSIzmc=7$-N|l6r7*kn%vZTwc#eKgDKc4LNY5|Mij~an<;8}fkbc4_+ zm@tz{^2@pjQifwFlcbQgOb$*?|86joCBo_y+}zdlm$cn@w)b;I0rlar$)jH1l9GrA zh?a`F`r;h>=UbNOTyPcRAxVtQ!s4CMyqUOEHJa=}~H-vF#hih?ZN$!z|<$gbjuhg$sJQwmmA)8J{ z&+3!>&!fKT0ysHfXR4pmCtQF?L?a~!Y{E*HXg0UAvZF=u8TeK0jm<5r%zkKu*e#FN zRhgN15a%pTE($q0Ag~=hC@stKOP#lRQjg8%<#fFitOJ$s^>!Kl%GqZdHZlyTE+}RFvbvHE? z#V7mMpD*PfN69uA1mpw(U3+#||4QFY;@B7Sx{D@{e%hfKK(~uRJ$@+nAQS!k?f(Zk CM9=O3 diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-2-1-firefox-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-2-1-firefox-linux.png index 55e1990883cc914df251bca956e967243c8f97b0..083699b0a40935e4ddfc2fb5d573f809ca85b044 100644 GIT binary patch delta 57299 zcmd431yoh-y7#>nA*D2kbT$64Et6>5?ubB&550(I`llG|~;y{mun@ zKW9H@@3Z$g-}~-w9LE|A7_PPEJ+FD+_q?v(_5aVaROHS$fT{4r*c_58t1Tpq+CS2e*lx2WwP#X5%s8vAX zwcFOgj6U~}^x_Q9Hz#4ml&qTLDUYM8O^?3PMyG-b;PQneyP_p>l2$KPL$x}oee>%EL6=sV)Xm!>5nXocGNoAjtRV-*2cBZ2yx9PY!{ur&2YE3 zFMXmFK}e8+ZDMLPiy{v+it$GmDUok)ZzsNb^M>_Ee5biIlf~w0>Qrv2`%@GIEgXVI zOK;fLoaXVXmkNO5QbKWUoN;n|q76F&c}up!vUfPg&Xe1A#M zjdE7Dh^o_sH)j0z`yj}MrMwH8mtqtbOa^eejzCc6X7SbQHRz2#-k7KR6QDmdtJ z8f80OwRXmA7YPNf#NQGWoK$(r52~lA?8`AX9PR1W?CEcjJL^ewEqO9Ow9D-aEUtEa zO>+4&!(uitp0G$IgBuXKTQMo$5v5pXczLlsdM=Cq@>%<%H?Ay~iLFR51&WOt>1cfm z%TL63FDCT>8MBHE_9oqo=pZ>=BLa;rUad4-O}}zArbPy|T!-JJbW6wS1CztVSSreC z{Bv7PgMAbt(-nPC$Odrs9rnBQe&MDB^;&BLLhAfR<_8D_ zpoB<^KT{iyv0Q1Ql7=c_ww(a}O|mMf8>!T73Y(K&Vv}*g9DPkiddkmSkI9|o(*}a7 z)tftfJ!}q-hnT4g@(86>@ga46o$@j4Eau(hGtXpn-RGgu;vifI20>AF`fvuX4CD%*~-jk9kVvIs9Eqx&Rj{ENyf;NxYvHr8>>Soat69i!EIlPA+>A zT>($#79I73IYG>k>ae{>0tfTD{vjCNd_K}wr#^gW(*j3C6DXePSdu@}Ee6-{=VX|X zo!`r&7l(>uUn^(x1R0+0mmvA)DIX&3`8Ob@Q5B(JsnZ?vQqT|44gBGv~!8Q zK8d2tt)%N5R!8aR)RHT@W2eT`^K(d&ZtKy(nro7TlpcJF=mx!kpJyPWs(<(6?)&AXa4;Nrp zh+3tL_$XNP!{IT6Jk${2`jY#rJR0ZVtDrHS?+Fi;b_oQJ?UugJxA*w>8zsZDriXfrB4C6*sx!yUuSfzsb6p~Ml4W?FLvji zx^UQM4tFd`12g!3DpQYMt{66xu$h7+MOlZ(VVrUo!|P$AHZK1#6<#bo*V>}bOeJ&L zHgL{8?-lerYREGfh`GYnX?Z>`5#u;%42$EFSH(ol*)_7(n^aI35xh{OO#-LOgSw2N z#xK;rpXNoqx1OnwwLuL?^v^(*m1UOD#LN!=KB9-t{!ER#3#2<&!?=Vz46R)Zx)e6-F^u{Pe&1xn75XthZ(Yt z$gM_vm|SF<=Nfc;;7wooBl0ba@oY@+HJ07FP3GC<2vaWuF6Nq21xm`dW4lsImYu8) z@zJM3+fHwE06~RJU`2$D;3uO4RaGHz60PYu{@gH+%zEYLI~OYyO#+mTU!T53_xgER z(sgP|hw%DcamMm&Vt|eFXnui2gHMyD$tc6SV)qxKJ~fJN6bIXr81fB?Ys6mEgr0Rv zBpb6i1t~mQ?ZNju`>C#+uTED6QlEL0AMQQBZbVee-2;|~g_4(#hko^BW$r)J@c23y zRAl^pF(+GZ5^vhgQS5_jsMdW>Hf$HGueimiUX7O**m!vReOlXjg6>q`Y=2^S1zvgN zv{jWXbj~%{5j?Wer-mpb;)Y-eZv09xO@5wv%<`qlS~wq5$EsTQnRfC6LO<#t@=)GH z^Zm-E5*!o&+{*Xt280A3>BJ*aL2dom7z(m+GeMO)v=t<_VsZyH#_nEh)iVzQSBIpZ&kgL;3ZfnY%ENCSlb>SL z{`!bz!`KDpi41$ft_==}^VB&X0F~g$2RN#UVkdD+9073RSCtZsWt*7L*Qi zoXJI?-OXux?)#2#UMt_|d_NY8&Gk%Eg{g}6~ky>E+u@L67Z&fmBjs-ql?@rIp4xKkVbgImK z+4btO69d?JTz=Co_a^&qO?ry#;kIKFHlib<-1Xb>@?=yh_6lnuA?Fa4#Fi;@SZ@D% z2U$_XH)tv1p@Gn6J_q!L=O4!g{3#r^eU8XHlrBFcj@mk`jXu!V53MLRot&D|Eunt| z=zcuj{8@HZaHt$HUcSfDlgz~+yZuUmc>||7Ky$0!qZpX=7RQUGfV`(yfazGrwatt9 zJ7na6|F{r}t@y3&H-~YOD=aq5#_8o7@;$_#=eHJrfhzdF#(~Jju$nYfg}l>B6}E62 zE79WV|D!o_0`R_SEpWIJjbl^Jx@7N+{h>o1p9+v-Qm+AIlTL$0 zvK}zB?>KLlM+8O+!lOSd&98ZX6i$MEOiboG>(YRf2Uti;-$Z>pPOIF8lklN-TBk9^57n$~f1b(y)%<;iizcxp zf(hHdTBr4w+rImB`Vi1)>BRAolVwaWGME3vHIfq+^S#O1gU$K3IDzd!NFjIEbA;EF z;favyN1GT^8p17Mq(bP(==JZJhUhnNA+h*|I#7;d)f(j@eL=eD)AZ*f+SMNCmFhlD z^uZZOBGN>biiZNngtWMia!ma$I8<`& znL@;1z^^nJ;4-zEY=%0U3qL_p3)$sL7hr8=b z`m2=}ez47Fukr_gq{!qqvGfbCX}~NJ3tGmj)v3^ynz1pd0sA&`Tvmj~NKt(K#x5^9 z`orPqq;-x|V~p9*Ac?x(h654%ptvb>H3%4FpWuzt{{urLx$JlNUZ_8ZN8 zXwHnr6&s{z4+WVzR~!g^#&&rcwy_a`3ZeL(*)zHYUjZte=lG zSgOC$fq(yvQrHt6JaES?J>JR7Co(S+N-8)80&&}MN<7(K3RCddC^a#>cR5_Y9)*+> zK$bjkX31l2DzFEWGl&E0;TbNjZ-Zl5mHHyJ7E6 z{lQ%RW`>wk(wH0@LZOPHEdNOexkA9gXskD-`0X^`o2g>yhv^cK10^nuO!6;Jq$dx} zXE8@|hx>s^3@p%LNS&1g z(8M-GeTJMk=2TTM!r=4W5U1!47U_GF>x*B&(rffOk3_J~iM?LqLXJ0Q zLwU=V*SidPPiURCr$$lRKl9rCs#!@X`+6`b^jIHQa1giB#^QZ-**nee`hw2tM0?61 zY5P+&BwqWvcbw!oDeFX58%qR#G(_rrF@&t!4J=D}B4IrrP3PL<^vi?XaM!qvU$z(l zmuI=}2%{mZ++A2Z4ae+9+tdExfG6dfJqmY%l%x?`n16C$zvF1*)*-YsJ z3k})q_E#G{vbiN0JBQmpH3I|dl(v&fwf0W!@*rBZa^@asrb|KUa~op@{AZC@X0wS; ztkQs?J75;Q6gO;|;t|UP!@SnmyYoPTG85lWR=ZKWeY)O7b#^cxAvNFv_XmHMH3wJ| zwj2w;X+G<^r$t=535~X6uKBF+_Pob=t76PP$T~&e!+{qfTbH-49ITai6Rigoo=k@( zH~FPp_|dlqby3H+CA;)-Og11ay%R%Gf7rAVgGyAiZj~bBp?%Hvv^f&tO-%>R!V}{Z zMhM?~fpgm1I-du=!l{3?UlN!S9A}KC;MW+`(Thr)Z;dcq)z;Ll8(%|nH4NJ(Q1du; zi~YUu*;U%K#rm(Xu_t{kX3`!!4d7c7iLAlB)7>_JQ|UJJte*T=X@-J66?Z3x?;!aL=;Tuiz+Hn z3WP_dN4owyEHhq6kKT*OAf%#R&f^%>3N7bc^S`=G)+~x}N4J@Fb>Mj0GA{WG-|$>a zTfuF8gk~NleEu4Y@j^|(*mj*Elp(}#lxuCetZK&{j zm#XlXxKFEU=5TEepKIh53)gNK#dVcgF=Zu?aYt6!L;Bv8WA~U@E+(WTWBzOT-Cu?T zEE;z|pkQjCVBm|$#)Pq~`Ayf_k5Q*T(Sa7LWXfdgml0Es6%L^|-6h@h=T_5BM#Zc2 z_v%ThgV05DFmQFzT3G8Xx=zRO?34*7eTXs0#b3~1>rdCjDmPy$7`%RKXlxVChf|FJ zByyP>vAMD?u;`wsdyGph$*AWKC?35#GafNzMp$M3Dwm9o)u+9hb7rMf^hK!6Clski z1V#<{K7XH+lXH|xmN|U5C5qTfQcb>BnWl5Km7UO+9hRbbE%zH6`_zUvM(Fxy982`c z6%K8I<5;1dLZ=}wl6bNa?x|+Oa|iV?Ap28A<(Ios$=pL<72DfV4KJ!qvaSl7@?{XT z+T12h{luSz5OI+@th)!myykhFwm+Y_lj-FeZp7|TF$C{SQ-uC3TQMwh^}M{;H&=6Q zG7h@rM-2MAz4vE=7tXmjl!JcMtgo(PD z^woo%qTVwA3m^n&<(WV5` zSbGzU;$A|UwF}MFov_>wA4KDPfb~*nWx>0+kNu;aBrf~Q>c6gS-Os+U zZeE#JHMSik;E-27&yx7I)J*^mRG>}G_X>f|e-8~}8y^O%z>4Bk>{!?(~tYQUVfK0jiuM8STldzTY`@1ccQG#7PyzrRY26g8CYyY=bd zk__r(+K?9;7lcJE8o`Swnq-?+(O-E3$K=}SGMFp#0?~;M-=@Cy@-t{8BAr03xDQ_HiaD#XI zm*D<1^Sry#Tp=^Zc$nlo0XW|2Hfw`)l9)*zaCYj|ih2_wQa=MHx${M>#!YZK!al=` zHgvCLU7fH*`0OkdgqHDZ{j`F<(rCz76()f**LZLWgW&F)E{ojx%fiE7W?(QQK@KaV z3|ZU;D?j-5LkH#4`l|aB^X5zBJ$RaYA`@-qoSJw;T6BZ2s; zVS?RH94OaB-E)l2N^~R;n6Br{Hkw^nS8U*q;I#x@0m-fQEc`k(DNvqPXtk)6ET64lM{Sv z>GQ=+g857Eq`{Yuh{aJL0_8Cp{Di~3n9w*{TB5rmIq`kNmumD={-48{Tho{})A zKIBAEgdgK8?aifmvNUMdA61h;0=(kg84bP&fLY5Saa%`+vEl(at4=M#N?#K9 zQZ2Y=!52mh+RZ#G{f#*{1wa3}f!hJOKN$;4zr8t0`Tl3@98#oT6BMdU0>Ia|*ceGo zm#`sYeWJ4wxPrznrU^-fJ#~SeA3yGaNn}gb2Q2E*LJ6Dxmo(F_Cb+igrfv6rN$A$N z(+zdNNTNhEC@K5OK5<+B+Mcd^VZ`^Xmx@K;@y+B&XbLTB(eHK-B87riIRW)%gZNRN zM#^$~-D3dwz>*tWTj)|`6QzPsd7OHuo_NsL1h>*?EI4o4(rwF&>gs-0KZ&|7LG^a| zz33g_^LD$?YU7rq zT#a)`fp+--QSI@nUu=PP+Otc)Y8-&3JM|m-y}rBfg`j#?$qN36f(1PQ^ijHnVFrCp zu3dM<_Q~hsD5H^4kV$HVGK0m3@oXR3jN5o5WL)2oC;cc|L^uef@Vj9`*9D~!W1l{2 zV4(gI;QM?co0DcB*Fkow&Iv2-p+SfDB}(y2WkyVLftQ!ga{-Wx%j4Pjr*v&naZLIP zjHdddjxZ4e=PIiY>`Apo0C?}j64Y=6*Bx!RFyQ&-dhcAkiuGDSLbu6NaA1QPqEV!L zk1ercaL0wqJfAvdBTcc$v)W;UaHi-&$nON}dDL_HB;HVzZMua7;ztrqM`H%IXZ|6@ z>P7(*#RI$XgTH%hY;Bu=_r)4_rG8oOjKK5TnP0^Sg)innO>f}n+W>#mCAd0XI^8Tg z*k+?F4{$R{nczvG%D%O{IFEqk=xCaL%WNL!Mij4BxT4`)`0+^>*IQp)YNx*+a;L0qw8J@ja7W{TlRy zr;-m^GnkrB`pejpU6$b)0`A%QQR{l~h+j8B#!`Zj5o6lwKzw?_Q|ogQ68NHwB!rl! zkSAF6c!O*1<+Iz9Wd*8tKjXq@=SvhgLZm(0nfke}QKFc3p7A0L%4Yfcx)v4D<@Yit zJ~AVMVMLm5h1qNK|3E{0XLSElG^B7y_6Hhzw+M83r_P~eE0qZRUh4K&%~CL$THWJ2 z+fDCH>TgWP$_12$_zKyl`C7a4IEjZX4`7Z~V7{H~ddB2_dMZO2#47?OKkf--bEIs) z)cLI`HfNnE2ktJRc%=s7?T${;*`D+p=~ml73kwTJQDK!^^#diUlFp;K1vK8Do*b4Q z0XPpzFkAiZ@FXQlKv>mFLk?#i^%{9!Wp62Wy4pmDZ#!qa0)9VVcH0tjlYr!=1Z~ ze<|ypfhFDaH+V_+()9KM0Gstdcsw;X8R!iyD%V(FyOI^AV^C#N|HU0Woop|1?QMW1=!S$Id_c;&G3KXgVy%bzZnon0sg|WmxvMObV8cIVe2_Wx;V@M9yM^r@5QzETQ(kC54)lqBO#x*T4vA*gL#IKI z%*}2w#rKz9x5*&Ts(5tQ7oDJ`qli28gCYYdzpGr90-RCYCTk&RUge6t<0bX*CJYT) z*M6hf0Cj-+D^6DVs~@ae$FrVQjr1r0UORcP!=jQFV*eNWpS(Bww8&Rnj!z#PHpTDC z)HYhZiq-WHKIilP4L$FpM-gIz?iN(dszkW641CSx#>|nT0V@~Lc63y|N}?a1Du*#E zt;$fnk}HIUTYR3Z%}!6>D^NEWRFPRJJJ72f=CAepd6q3D{=BfY(aF=a>pyJ_?Ma7*0Nu>32`FyD@V97huhQu+iE}CI_R| zzemo4)OiJ*wqJi=V&NmupnfIxTJFP^H{}r*l4nB#r`blcI0i^v0+^wmMyBMKLyx-r|_om^j1h1i_qzRN8R4^YQL4*@xQgfMDPO3Fo8v;wDdzb4zHybvVV0+m7Dm zbR8De^@YfC04GSy@F8T+l071CvL&9+aEgD9ZwRGTXcE6_>!8m-s;;ZsIMc*sdTAbs zz^d#W8$A~dqX+kf(WAB=#jlnnTUE23vTBG*XDk{Q@_HZgk`#4fBJ0(&kQnFy$kF;V z-VdFpVm~a1B3A&Q zu;)}*-lQzQVp72XZZEx@fbG%jV7KwUvD# z49U(2xPm-1FX>}hG3D(qF&@@?Q8>OGa=>BBf|FXrxZ#P4zwiQDCsb5;;mUSXxRTxG zrDd%ObEMJ$7#vCr_YpW(g(LG?80?o zhqBS9(a>-EuO|+2;)(D>D4aHjXAk4lrM-B|R_I+{OX0T#D7PwS_4=dUB?^1D(woya zHjs&4`Sz6DuJmN)av)yN4f7~>Wvov)1>WZTI^Og+^`>UI$-q9Bh`}2Z-kUNvl^YPR z=Y+CyQ|8e#7(PXjwUNa)q@qJ2RKslgY;PX;yUYMR5OZ@nD+?Dz(JYIH$1L*82(Guh z#jbRew#h(Ux`S0A9)p6mur&)r20eL}(m*X=O__hvAB$r2_-yCf^$TPe@;+gj(ZZcG zpWYFp`S?fXxfMl?m*=S_otUWTKw?1lJrYhTGl5+7qTIpbLSvQPm+ndx=$@B{nn|Oq z1>aGwn=gF#i%;u*)b<+5gd(JVp<9vo$OsLFm=<+3@<8`@?f$@0{Dwa$498Zi=x$&G&ym;jZ3WMDWwa-)8%!tTjehb0~Jd zbQf@lI4ge=*prZ+rt~Q7+gelPvgIdj%h{p~#GRQsSu|(2yCYZK0k%JnBh>D}{2M-! z-u->(^a=ZkkXEo))RT9#1{Uz-t?LL5e+ZNhch|YIvEtm>{fL52?pIKKCyp>)70c13 zjqt)Bl@$;Q?G!!h-wg8xNwf$NojenG+AN@Vao9Xs58D4g8M!EWt0_9*# zq~VQ9uqr24@WDpOqS2RK@T;--FR7rZ$VZPboE26QKC$B%^ie?P(k{$4QYde7Lz zq=dm0E0#^qdw-?(lbzlzSnK+Ji=$q+pxC^H2W{8vmhA{7T6QXf3P3Ql8KNL!)QF&# zP%82iTy$ekq3X~q(rxd^4u!AZFB_q{ixeFA`ttR~;PQBL^%lSgqYy3>US3}I(Fe-W_BoPM3WOBDVz-w(~P%Q@sM=%-qxcc-3=Og>*OwYx%$gTz-p)i*h?@KH0a3pgOLwFSXfoZ|m$#H=vmH z-#+dt5nG+CqiCG1-THEFi~{Gw2irp!>Ukbs8f+70cc|X#8_+UOA_>l942Q#Wk03P;6*64iPBgN$48ir)Y5^# z>d(?K@={L$8*#|h)w#9YCtTxt_9AkvMKGthFy}_B%Hv)=8z>>OU{zX|O z;UVsoe&~yop61`Lx(}I8%8#GzG&b}P=Oq+E8I9+wbQ(*pk|tCFKd9F`+ukMn^>HNy zAiqaEEU80beXzqXl1Xf>u(be~dkVAl)(`YD$fJQ`St0M5vXzAxgoh@-ho$2mTe5@c z7S{xF5skMTgCP#Ye0_Ndb^j0~`Smq8cFt1FJKc28w`-hs&M0#Scr&=8akP%W0)e z8x^LpY|mC6SKBW5g}r3W!9>e3sG5r2Am8UB4Qj$u!FHD)iTgQW z@dp%-SVvCx5pbQ=Q2&Z+)Pv6dA+7=b5wGcmYvka(=HHKNfPczs{{6TH_@}()KXA>t zOT)$QZfzdY{#mTa#@XbY^H6RE?{YZ2Ej?x%$p4cvXQJ}0KOzd|`dbN(BK^x*Vy{Ys z)cR}2OvvPO$oKIh@&FBg+8;yjbjn|P1Fo@c#uLLn#Ob&mtbHkVnX@B(PMW&j{qaoQc%2i4=+&ur501$rcvk(Nr6xyAFa)X3o`DyE zq4H8_Hcn1shefn1U4yj9T0j~C8&flrxBU0!-}zgC2`O@8#*@}fm$BJ*QV%rqPd?S& z(d195WTtb;Q$SOYfozV{F(g*K@k<=RwXpq(?iKl+Zq2R1?MU7D7kji@7ORGP;}kO_ zmR(glW%WgkF~P~%;aFH>hA{ou#T`r$w!XyOwG#AlqFA zJHj^vi6-@L*(W=cP0iy(6=<{9#mE~p+=k|>r6@Mva~AC)tF|65RE+5lF*Sm!@sTA6 z>(+Kd9d^kRCMZY6)nmJRQ5)Si(!6-`KN{$BZxAB4S(Jgu85UvZ4WN$&heLm4Qpf{1 zE5Fit^PUcQ+%A-+!yMiRwnuU~lD=th&e_1b6yj~c=PbR<+tLNXOmhI2uNCMp#fL-Hd<=zf_Qfh-E6Q4d9mkz z*6Y7so~1A7%24z2Z(+{s$SlCU=|2f`_)Sv&B0mtf^Y?-a@5XL~cR#)VBL3J!>W#Qb z4k+Qtf!+EFTn3&St<9}2sW=E^-kI53xF)<;iE8>g8Gj^hc+R@YJ@o531Y4H)t&A)a zrbdZzJBRa}p+m6$A?4M`gFg=V8+cYxZ;&%UlZN zFmglfx~RcWYNh{6p0W)!KPdn{mGwxX$qTBIWPFpkH1QRA^;!Cs4HlR6@ z*nKc#RO?{dOz+c1TVT{^-z2!K->-0Y-6vpCAMQPxZ}mTHxN`dqXh3b6>wV3}tG$K3 zymQdv`6`!av6W|iEwnmbg82SDJ+(#ab2(Jvk6Q_* z#t6=k2mw$+1uE#o&oQ@@8bw{;%^$9S(9rheRY9#vd*t2}e(UcJ^EZ@=k_GR^llN+g z3|0e=5iI>ywsc}vNG5q>(4!4UhdT!)g7BX;oE?Vm)VTW*8Gw!*lJuv)dJ-P{6>{4} z{Mn`nzqVfW*|dA@&rX7XiFpk8y4#S>_VF8n>5^F05%_;N8i7As8hP?| z8LmzKwWIN$85+&fIqi1_?y>1qh<`Y{XG?SSJoZ`CUpdl&)r*O&1KWixI5iSMB?90L zxf)IQU!dMn8l*_EfLBxU&O!JCzhyz#!)J^bnCMUKJ!I|&W;6WKpDUg}dnA2*FOi4b zSD!88TFB{$6k*sc@(!!jdsjtqQ5=lWa%Gd}Y3duX)lNI)>;{b?i04>_-_n#w1)RIi z_Fy>Blk=S>PAi#!2zJ%_4jiD@9kldug6W9bmExQG+F6?whEsmI+t ziV*tHL_SOOz-^jaCC$};p`-!+3n|V2UrHL_KS^n7IGndn-DT7QRNgs5hfL*KBip}# zc9)U?c4soQmwaIMusYd?1*&?lLslBk^bMr!-W(yMUP@3mhLQ>2*@?*uH-8t!Dfizt zrvW!zHFIeA(OSgM4pLN*%oE;f(0blu^fAGgnTR7LyqA-9-J2w6O>j?ep3#iYVUa)~faS<&1WZ2B^~HHWh?c*R7~*Gz@6?c3<`*5V)(=*SMS$U>Y!kuit~x6c z`~MqJ4e+m3HUCyo4e-xYHJM>;I`wAKk-hFowG_V&`b=#WI_{Bu(^4VBRcU%FhR>#r z|EV!hbg1Kp)pC;-8igeGBP-X^eb>vwF`Qa=&W;e`xB%5$4reIZOKR_7Bv_1*!Ca+` zB?YfLK03ZLGU$LB1?V8GOt4A>!|g1)bo~Zb8OD9d(A)}}^CPP~)SVtCdOCP$eOE!m~kT_Hi~VosJkY%rWz2*Voa=cQu>ds<}F)? zsTkjCl^fayQ5$`ID?0NTDUu4Lx36|)n*aj?u8pCeuGevl%A`0OV`)|!jyyJVsh)~R z`|Bgu1yC~<$oKP)D(J;lNU0%KJKlhqgVdmaV3mX{VYaC>>sNXCY)ocrSW-cKXrEW_{Tyg$#1itWW!&kQspocjW*>KyR z$&Kw#5;y*I?{59cV6cX*BK76-5ILUBB7@m0ZO8%1qW|%X+kLm=ZLuz4;c#AKxv1qg z#0-e6S}GkK4_&b|uU2w}Am@J6n)aJ>P)UP30*Sr~A^=p! z<}6l*G%_dNjxaS#qj@#B9*ghC{!l8@7G-1Cfhwug(0UX(^)<@KP5IjGM7Ia^#pxi! z24Bf+;0dy5<|7z1T}=$c9dr&SlA;gR0G3%O>nLB39yBTe z<#0(ia=0=ysoEm(OKI1li@Abp!6I=OuCu!J`N7)InRN*oXx{AR3L}c5cuNFq7xCm( zGgMqIeS~X8D(t#dwyM87xYei~VIjnT>qSEcEEOX+T9n z7)1eR@%X}zF6-9{FPc_HENN2^bgT5qLOyXEMerbxUtxzo6T8!r{@m(fuajb(pCWfC z+4XQWX;I~;(Bow1UuaSXb0OggXBpP#M=cl+=lqi9{066Y zQIIM3VNUbx+f!os5h!Ksld0%f71Dg;_8_BOSo6A}H-cHtpe@~Wu}<8!_RHwkED()c zHM9{+4Y9=uhqJjb?+=%|elkEeo>9vYcKGSL`>8&bXdz_6&n34Cf_00|aaTN!vfdT{ zmW?r<%0+fPSoeNfP_KSAdr$5zrV0asrbrn*TfW4{SMI(TO}SVkIl4JPTxZ`L6;z^> z1|zE8{7l1w5(yiTjxuxFPel798iTd|9kA9{!fXl%3@pKXq2irEm^=(X1kx<*!iagF z@9ax_!Ps3H5snf-5*N}{$m|1-meA=M0VL_X=?crZAxS`s;#! ziCX?OX#xJNsO4Xi7U186T3FImd{OQ_@Tr<%540RBT*C_#PTmU?I*kTxXriDEZQ^6q zP2vUcrz#vfs%N<=iZs7RwprZ8Asq*ll5BKnUO<)39#A~dz<9aRn=CojJAL5Pogj|{ z%b`*|V6$$Ug(*AOD6K{+={<#2I&A;OnK*N%0iTf}b0Hk2D4gIsExa`vH!k$JrFC?* zoRN2WymbiAX(Xp>U|=9#$cn!AGjDoP+{z2!8hTl7#vC!g4@?C{pE=#Z`a3aR>Ej#W zgQ4RL)n^bgfXb10(B;5tAZ(zQA;cz6{cbs%F*?M|?yM-|bmHsi#4*bntnPSQ1!0C< ztm68SvF?!vtvcea(GCsD2lvZqdZbXSQEJK?VMcstRHYrM$zQ!gH+8C-VEx&>^;Wu+ zU@AZAD+#NB(&rgOXG+ZXrD;>ePuUD=b7D8DH~W(4BqM&rUY-bDPKWTQ1{7P*nL^|5ezH*|3z;8{YQ;t9!Mq#jBW5CY$x! z(e+Y?b6e{R?6pNz1J|BGRRE}~84cPMy8T~KSg{AQda3<)!VrO5ai-K94z113m7YM- zxp|vjlb@ySm>TWew4_Zm>5Vxd-0LUWVowBK-|`Pc>8*y-WBCABoJzXKqw}D57w|7N z#6&Q!Pz-@Q>8!PjzCDUGb~s}QyrT-L;CbHrG?v{mqHvMtc-48HhPCfDo`SO8;7+>? z)~grW^5@Y5d9bV7qJ9%CV+3wLBd3nCEyRz46(Y%bv&wmaYD0Zph0vQ^_NMs1efJ+f zLGct8IRF3gON5Xfv?^dcWY2mYHBg8bHB)$p5yS{6e|-8s|3Zm@mkNpZy&tDa^OsQ| zBcXduAx8BT5&-a14EIG-g7mZmcjx@&%>KclK^S(UMWTcb;dUiFWn_4CT>>YzFxfcI_I8Z>UE7y8gVsT2&`TePS#D9cVbM|?-tuMk*~03*=LAacIwzFcpz3?J(S*Bq)8B^NkE zRhqWr+j&JUjqsLk+GZE_Y^vtnN(3ndiUdL!C1nI*rc7MRw*>~W0YSI}ybFR*uJ`~F zp%)(p*@{|=4MFVnLjv)AtHeq){EI-55u;w^6UVFS$1HNb?2Cpg&`Dc^bAcWn}d zT7$v&e3k^GOTps?f>vaZAsgGR+1 zoL|5>ZFmhB#z%3&JIOBaUp@-%$RRvORf0SbWx~)^Em1)(-#5=QEj2zh9lunyCyXb^ zf=`(wwEpJry?H4OD+(wqZbibT*Q;RcTo1+qXzcHTm!s3>RS|8tGW_K6ze!e81fMt^ z#g(~67ZG~KP|wlS>yr|L9GMdUPbS3nm->s35VHLIs;{4wN2$Ycj&ekr5zHnl@4*%9 z)wMMiA`D?Eu$hMQ-Jhlgb1kPBFEEHrqv%lkgi8N-Y_#}$mFBo9VaIzu-E>etzA!cqtitY4S0zP2I9f{h$Oi2 zR3P7j_{lg{C^46c=W9HM<|JFrJ~?rv^vt}WF0`r z09ylB+Dml=EMUVBd^Xz`QQu-C6Wa9=tFG1H1IVK3BOfpvcbmHuq+mu!&MPKLpt?WpDzJm2C5AJWwcmJ2y)xoSDoi~cb|ODqdB4Q@I5DO1QG z_-zh|fUZttO4gpwp_DxY1N+lyi}&3-Y^frT$gU<(_hvZU#p#;1lY1~*Vj^j-L$?K7 z)a(=G%uHs14=4*&-T~#S55kb{k_z25zHal>t8qt0!6IuZ&Flu%7cfIJtq!UO2`Y}0lBJ0p}1 z@Z=vXwB<=rmVtA-hxK>;jjsdwNzkssPz{SB5y{_Fk}y~#+chOhb@R`P#{Q3@VOTU-_B zo+7W0Sf#-Jqbfba!_MY&!13b3EVo{kebd825*J3}426_sY5E zeC9Ks#fPOw4F@$+hR_8+=W}XUgVv_}Ej-e|m1Iv`=Z&Ff8(jI1&1YX&PnB?%hi0C5 zOJX3Fn4(%&`)EKM(wL^Yro7shKXL;l<=p#VwD@iDqq&{&@(l}eZs9N=V1d@mS`{M@ z9H67GZ<<`AE7zu{88f~0Tg0=jL}8LxR{atQ%~3pNJ7~J@9#0!Fh3W;2*J-(>rVaUt z%ekf@uhGt+s=9XV{S6Ccf+D9_1@r!N%ss)C)DNXQt-FZZeAJ@agQu>YLnh{!*~PZdJSNovv&qpl!omw0J40}%zVMy0^z)Kj~# zb5y_QjU}h(j3kW`)T2jc-drdYzWRRb@a)vc`}9yE?I+G-k3mg6<(GZ)Xc%|~exQor zS?XQW?#p`|W?mnsgvB=+p~+%`*h1Z(-{0-4zC5z2X*zQzOl&%!1xPW&lmaPG&+>VRpR*8*h9SUt0jWfBTBGx+1 z5;#L}DjZeJ!0l6$Y&;&9O>;HuUjCtWfDsPosSyl3r%&^lx~Yu-QbDp+L>fx(4Gdd$ zl|~!wl1mazka$KU!;%*8$IM=I4HwHgw={NEKw5!GNC*1ROV{~YyZGrDhDgsiIUw>9 zpXaYf1ld3QZbVSH99D8Kd}Aa zo1@xQknQc(ftbBQ4jN%1hqS;$@+{yt`@>JqUa9_K~idB|NG@ek9yBB27he zqjl~~ni-vZctOhVLQ0_a*3Wz5u$f5ip0E-UnZGvTOCXhmsPAP6 zNA%O~u|0g*%P5P5kdXe(cc+aMWvy6Ixv@YOiaW}?q42-(%LHd-6vOriIyKrEc1`LP zYqX}Lj>Z5q?3M4e<#>QRO|d#m4I3^Tks6_oqQ9uEuKu2>Cwbv2^ROwV;cLcrzD^~6 zgG=-sB5upGN1T@xwr2`KpDU1gE(lgdcS4;H z=ALOnC7jc!(AA2L7$k~i)e|cu_XZSdJ?oib!iAp-FK*+_tc^>jwSFADjr~K7R*XYU zvp(y?;c1o;@nnrRL^5M@sXcNW6r#YWU~3VPQ|{e*v}-W|fAU0<4E?>J@Ez36MCSX0 z&F`T-cPvC`OTQyNZ5Z?QI`zD*hzpAo@_umh);)8<1JOng9G0h1`K90wtE_&a!rv^P z@6^r{USv^9zm6Y~;kNc8cGs<-b#8wC%~hR&TI}<%_owV8GFE+s+U0mrg5v;EiB!VtVUPVadmPU2!G3&>p2eypjxk3cmks^NBOiIzk18q zYo92=PDWv-iFsc^E?5g`4QT4Ay`Gxn-G5@Y?X~fi7R_yU)^`{b z{+Y(Bq8hS9qX?*dg$0=(fy^O84xI6#KHKNsS&@Q`x8eIyG3h_NvEh2Ac&`2DiQ`BD zOhkmGfWy4o!Ol)*OUu-_f=oM3&>!KeVz+jb!K`Ipp$m_Nc7~*;(I*R$i3*SfKk_iAow~C7V{9&Qm=$K|LYG3-K@PnEFwajMTkho&MrPA_&w>=qXYern!srKa_L7!oh;TU8)^RY zUC^=?sQKI4u;b1txgYtYsgMF_v3_%L&XRIuc?j^B(e)E+2 zu^}zQs$ca!=Mm1@)y2-$Tb`2BI@6DFZ@@(LyNT=te&lk_86b?|_}#>Lk!qn|W-%3mZo_LdaOH$I z&cN_}IsZCvWrStih>sIehNSNIbwav7aZJi=CR7v!->s;@J$cI`{$K-LQovlq@GxH` z*PkIma@@{%E@5BNdod~1RO8=#NV!WQ{^Hq(1O4=)2Oc|Lj;6z>J=s2Bp`c(X6TT4f zAi!Y3-03=|zrw#$k}zfM!ad^|vVu|Vy6q%fTC{1GS!OvPBfk%MkGy>i*lCey`^5eV zc>NTN<7HMXCNj{&-vlkOq5-(MID+(@pm1R@%Rh?U^^zGA7b^y9iRnK3g>PCQ7QV_? z89God8y>eV8aBPALE(`udPJ_bIHX~~sUn07xKp2yR#{p3F_~w0(5nl;4YN2N7y0j%t@zJ*qDB!soH5d_iDNN6}OVpEsR|_)6Ewaci{Y3Vk;NY zGy0(@T`6yxZrx{(CqsxzoV;U`55=|4nD$gi5~c!^OjU=7O}0oJr4dhCag&-t5^z4}_G;4RLpDHeCnZ(7?#*K}lJZ_L2{QGvJQM2sOK+a9F>}E>-(eK^eFlQ3= z&c|2b^r(yWg7E2N-NK$M9$QR&SdBXb5i=k7o-DJ_q7H_V+`07ThkQ?5KHh+%;@gYE zb%YG7=l7L4P^eJ6n&!(92q)~()5~;8lo%!rgLTmq34Ybu1sTyu^5IPG1Su= za+G5i>Ek^%DC^dRUSZ!ciyH5O|u~GV-t;vG4ZbVS!|LRIJ&6t2?l5j*O4#dt+~wc+ zA~3is;p~l=+C%0Z!f3EYQt!;KV6+s#b`*;@dZvsN5l5M$r7OQMG^s^k=7D!sD8T?@ z@IZ+ozb1K?Mhu|nrc7T24H7ged=(T-0{W=R8Fw9pL>@ww$`n0R{30d95d#UldXf&! z4RUO^OK_v`;FPEX zh5!S;3E1>Sv+rwB8p%#rwuJ-~LtrQhY_oIWBJ8FejQT>;5xq3rUj{~GeKEu|L=>H` zj;0$OwSv!S&Vvf5N2q3bz$lZNbtk^kxE?#?$~J~34S1=!ywT^N=x^}5*f8KuiNIEM zFP?G6zT|)tVvMRGV7&#OpGG&qi7=hO2IJF!Uf{$k-3NbjA*6(rF);+k;J^tZ8{2N8 z4pFH3f!7dX=z+zz)gf*4=N*_lv0xQAA<>7Tso;09C=E5h@YFi?-~00x%>Vm?(BB{Q zzg{xe6Z+?)Dnw+1i^XKDgwPRai=M15gwjI3N5-404r~G<^J0PNrdto#U4MCD;^Mj_ zqNgi^frr6qL||>$@astc^ZCz5Q5wQvB_!gBkp$)~tSF!guW{&g<+nLrJrUwsRFHkQ z9g36<*5;)34B=jU*(7>$vT{-K@lZE}IdejieEBaqNNQCfvZyJ-Ikq;9_!fbCVi>Z9(U>EVsAca6wc)QY9@)fXbpl za}mKH%PKDPh#6F##DD^LA!1lVUhyg_g71Al6-|IQ+G|FQ#b#<{s6zKXK?ibcO8DUB zT7PEbGE00%BEM@3cW@ynvC<47zYx?$Tde>xrp9kto?7&`g$kcD>Qq>B*wiQNkYxj9 zMBRE9`Tno+OhH7fF$ArOVjDubZ(%4Qx52jl$l?0zzo`JH0S`4k7i=&z??zK(ra~td zVbWbDNMH2>(V1#pef`q+8Dit%JYL708Ba@EHOIBlY`+KINA-*C36c?R^xbKDMxS+zd`-I)G8?4@iREV;Kg=-x1!6| zD9hOqh1;CjOGy}!TO;D`LuIL-!HI^yIzK&3g9h_8CMKO4u}Fd-b%EEYDVJJXe4KP@ z9jcCdi_(NJmM1TxY!|w@odR(m834iBwZ41}(lzH+!DV!cIyU#2Uo?^-=cXWw12>G! z2wno$3zSIL<4${VRH_yzOP?N*+{>Sj=dz;)x^1zbLMVR3s`1j>coiS2_C5=_Ma~CF zWhlhan_USo+0`R6RI}Ajs`*l#MOmN2eD4w3Yr>8#D>UdTPqEDh{N>jta=Q98y(1r6 zui96GT+&A&%3zxRvsgmzVvxYrdxY{QDx&TWn0BlUm@P&htSw#oq0=)Dq~!vl8l%-n z9tV6D@$6!0!hI$OdRT*=E;q&=At(QPkS6!F`LStIrEy7oPQoMSM{B*s^|weLOV!oY zr8{W|-{*Avcn%zsGK-1vGG~EFsk|OldyQ0M%(1MDi%ZAVB2)nkj3qZM*l3y=_lbD$ ztH}nN0I&0QNz0az5qj8Q+NlR}`^%dzERMUgRN4AzIj6cukjQYJz7zgO{$`iGhs`s@SH}>Wa zp;=b=Uq*@&KNj_1g+b6;Idl?R)hdler(_V-WG=L4a3xLdK1bW;s=Dz zS4G<+SL8W6ENcey)bwm~Ek1cXekXJj!Xc;RFzt%a7>f6{tNZOQm(10C?vt%dM`yuK zp;hcPgniVJD}m>ueW20~{DHA*?@a6Cs|spt*g#hK(&@n#oex>8XV6Or6DdT{7cJ>nYtBRxMV^K{I%8 zo=kY{)HCT+*m_b)8P^A{K7yRcfXT<_M#CaHZOSv*Z;j(v_Z#f03T#rLnH57RUmuL9 z93pN5B%w05L=J{W$;$IpB5fE=jaR3#HMu=(e&{&SBqMhB2nCsP!~*9dc%-R0$`3!s zzv7jYN8;RvAM3)hp4VnaX2v~!3|)G$JA5}LV6LzkkvK)JW!}_`f}YasKQ~odv#4wx z;`75MW)3MsKfq`iw$XVP(i_AK8~mc*sowonCE!;^KIl*g>DX84(x0Y@yxuLL#0E(M z-j4u5nH_F8YSH3w{uMthltKtLcp>buDYZ5viiUXfc(@g8HRA%TPglnaJ-ylo?n(Md zY=bUW)86ifn_8>TPNrP6^7=?2(?jKq$M9Dm6JrdV`8`mMEdz)L>6XYx89PX;g57|3 z@|s=op-;w_o`xXgQPj~9r?xS9FTeD7UR|6k&uw5Wch8n-r_D#-D*SXCF*h@Lz)i?$ zIr7v>d{S*jHBYBhKi_P30~_zqB#w=)R$G$VSpLHZ9M`M>AAaeAf^-)R{SMR{SNlATTA`2JR=I>4&kSSo;?i!xkSoyzQ~bG& z8srHGll`CamN-ourj|vxCiIH&ucFlfhP+r4f2YP}>vV++j!81Tb{lcJuhtedvr7Y; zsIX#5qd zfYwB+va!59U+*Bl&yoo4J)PJXlhf?>1&$e$p)<_9`vFn?P}uK>kr^E`mJSo36jZtc zB(843tcD6+Uixy|{qid9wFU*GChxT~XEPqyk{+6;HDveCuv%+e6@{$!+P%OV^mxFL z(ZfFTX04o&+KM{|_5#m}qL8R@2(mbYR)^$?vhDi57k-_qo02j4W8Px0-r`+>k$Vwx z=`z^gIkhf;(sWg$q8Pq0P?$+8_i6XtSDrR36m z&x2F?u5drB_FgGy?`~0-YBnUz11v(X@5`&U+p#x91U<#<9*bbCszco^aZmsz3GDRr zG+s-t`8*&2xqD!it}l4{iOh|J^HSo#Ew`N@vkn}~`ik}H`44h}Z||w%6kzbamKv#- z)Yy;PP%OVMS}<9?cs}N|C*mDP=(yUba*#|{@3%1n={-)ae2^PVy_{Qq6L}zCA2ZQ) zzqH#Fcdog1+S{{(kMIt;5cImmi>g26rT4z8j=g=+!RC*V-3h{gu*5>r{5p^ zE^$c%Z3|lq8-qb8hBs|JsNVx+lx##h?Zxl zJ;qhPzYR=>A`Lu|;-)hD`z|(oS$HA=T^>I@Z0NiB#BpjlY7vDUJ|;ePhF9NA z=e)@1iJ0`|x)nyLNd{5Q$4bq(Nl;etI{9E(D!C1}kQB^z#?ZyPSbbew7^gq(qXXim zw+IKM9o>lc_HHd~;|0CLJgsSd13*jyeXjaAk`JH^QiJR%rVKLi5nVQzfH~9_Wz?tg}5%${JG&7+T49Txw)j zf!^G>af2>RySAw2RLg_&>v72gx_a$=0%E22t2Onjbz!$+%R8;mP>rW> zZco#xphUp;Zk?xU9OLA&j^)NNm#a5X%3W8gblcz}xkUJD*{L!|y@3a1sMx%#rHF#Bbb$|ZEq-WZ;8>Eb>3>2`nP zPE+s8c8^Ehf}C&ckR6;og5IqPTT2?8oIINtA{WawHWP=vF#9j#bh3qt_-eJos0fdN z@RmS=#@8&tpSI|=C9fUtqDt7@Oi=1=G{ot|g{5V1GEf$lS!Rv{{%w@yQOB9(Ak^ki zp0@NFiFf6cK}9ymtY6b~eq~-xVj|$2=yNql!PWEmviYMIFSO0JzfV?M8Lwn}dc$Z) zW~h5-ExYyf^3?oAVIO3LlO4|Np%q$Z*Jv`{H*)T@M!`Yo`sD#9afyObp^#wu;0j%L zBhC6?UZ%vhD>p>}G+jB97yK1Z5b8G>kGdjiS4{Y&p`NF0dU@r_S(>7?K*VOadYjq9 zSg!5qwB3VYZW@DwC(pLNR~z>!-xqitW_cyL@2U1kJ(9_C(eJXT+;+i|V4F-ejdr|p z&D`g*uT^|8Kv4MIwApz}@p7k}_fyN>7UsMp#o&TIgV&ZS-ooB3NZ1P!pfJ<0ySKfsFj(~_-2?A&u-iK1%2mj9>cu~ zvigs);*ccIfGT zaJbOHt5N{Hp-v_Y2TgTZ%Qh~2u)er>Y5=NuY+te~j2 zK2R8Y;!TFNZvQwZO}bRVR9?jU*8Qh)T(+Z(R>S#Gs@W=WCXx-z$eAo*?>yboF4UMg zNO)6_UNMo;eQ^HrG)ukO-z^JouP_@KeUL>e$d{$Eg1c;ninz+YjUs`>T3Xp=?ah}Y z<{()+-eCYy{R5<0ng=JxciGUxg?|EffT!f%5Rn}zlKMJ)wlQ6r3u2JbTh9t}D&F;^ z`{zlPVZNV!-P}2#a&g1U*SOybmILcGxJVN`fBtpNK)Ntv_Vwe5aZn{97LiTW-aY8y zYo%W3{t`9C=Qy@p=c}cOdtOE92=>f6)lT^kw7V2$(}{Fm>(Ah<6hin5+v#1J0>v|&iG*-8gx!+6iag7HOy`yElYxeH&MX#_hDS!M zTT`W>@e+qqPGBE<*C!1o?KH%OTSh_agW28HUxm(;$!`jj@xTT*=GTh0KWq1_A3})} zrtxw5)1r#5eBk1P!Th17GLkzme}N!eTDzGBmMv}9ut1fcx#ijY31KA%D_8GcZw;Q+ zkSAv0kr^hbZ8dK8I(HfHNM4Z8MY>;FM(5^cD^!{sC6O(cfQ#{R!#{F9Px!uhoh6GpQgyh}BURsL+kmh)A_ z4c{utlo7|=lm^n>!{16Ik5N1Ba}K!%j!Q`?b}#<#>6*%-v(gk$or|9?XmATm-P@Uh zmdfHgB6Z}K0_}+n2`|-DNL;Q<8@%r6)SBjNnRBIz+HvbcUtYQIQ;8HNIBbqOjHSAq z4_y_FSi$_|;KL*9i8<5&L$er_%BOPE7&^>+fSEN?(;KuttT~Sq!JY0|-Uad7huP(4rM`=ce~+iafe)>2lYL+TRU8v(#zqV?)q- zZ>`DjRYnr8e1L+7iytmkrS*)tkD{H6dag$z)NA@Z zhs%yp#)ZEi28?FswglKXmP;#tLr;+w6e2W)1CAm(;$U0sX$0!siBA27r54V|Kl#OOuo|=j8 zBjA>NkEmv^PWe({MM{zW%7vFu+Qf1;83VCT?ThKFS?_X{C8&1hrz*@%Ts~K?+O+z9 zcOmx(NaiKPV|nSD_9R#gcYvr4T#6L;S+({E$o+W`6yhX|#CO*n+@Th}+>IRf+HCC2 z&yT0h8{rPw>{UsY3?;L$tnyfjFEbzh{?YIjuX>@*OH*tCw_Oo=kSull4$O9@{0FKd-{?T? z%DPc+*yUb(X7Z=2ky_YU79G!lLiMR;xnr=_b1@31#>9($SWzFhe7D4_mw5HIhE(O# zJAn%fUFJ^&6E)b#0RH#d9rJ^+t607N%yHlXtwl+?BdF4|n8>M*TPHaLH}W9H(TXv#gC|=`~S+KV|*Nnmc2DU3sBym|iGt(?^ z`(H4ZM;&0w#nY2GfADc>R1CPm=6euKw;iaGK?iG1iWDAx1t3u;TS>0BH03(O)ky4^ z#Hj)@WNm0dI8gv+%|c$V%StvLrgBg82H?W{)E;Lx3wf{p*sgV6qXJwhm80!f89PFr zhjNb~y&oUju=&w=z!G`&6|29&h~NG6AR7y=*fFuQ7;U5DDg|zJr1s)m?-rt$BZsUc zj@H8cMbXc4cXwW`R^ttxz5!XSr@mitS&`Ql;FTuWFFhg@<(9hNYnKApY*TOFUZ5X7 z>2W>TBP=i7!6&>F#IjMe^B{6b6hUcPseQNGBYoMQe(PTV+TH?y-?7_5AO7*j#1Z(r z?)63ABK1cU6?bq*9HDog^E31HYhCo%jorj;D!xeetKrvI56^$a?s}+{4L3?kh1HTrvSU zuDmNd(c9kmuuH|j-JY1nxhkT+Q2KE)3{F{i^SWQYJS_M^sDlYuq##4|`DtJ6z%{Pw zeh8G3JFXq?s|~%^x$1?~76Td4jlZr~K=c{aIA~k5HC`DF4El#@x90fU2oLW%)+vau zli!kd`U3sPWWm4N(!0^AzY?-@5+;MKoAC7Kz9`PGY2~*pn=3W@W?4BY$ZqkS_9SOh zL%HC)M*mk8*J}H@=TYz!Tc_zaV-YMmTmuc{?wS>HC%uVpnq6H~;j^1@PR22(iWGr& z=py)>t)#QrWC9EA9#m($oKF?o1av`hf<2q6d7)V-OD*qoc(WXuj*E6mUxB7^?P1Ux|dJuE0+FD31Y;lz(t+w4@cz%iJkB0KHF9}2{&JFKU_14!ZD0|eh2j?%O`;Xnr-K)}M< z((L|-O->-QthAY8^#~Sr<(2rjr=cQ^?JpEEEw8!rsO$Q>Rq-N#GTW6QciMTYUJE#~ zv7BZKS5&pG-V7ivb}W}n)n_1@MJ~4_idtZZsQ?=uZ?F3|tMiMkw?-cOB=vyU@%)IO z#Cpwf>}nsr!WIu#Nf%i&L0VrfiCUpIXR2*T}mr>jiwp@ zv+BC(&nX0qaNm1GAglD!F#eAL`p08~`Bu?{@krm1#utVfhVb%6POv?%2@dBa&YczN zZ*b>K%76MMNChQc>0ATPib(hsZ8P*&S@_t%Nh9ZvLB;xy{dtFhyktfLE?uo_1#!E** zOzcNLzoF17faDnTcPwD=T8y_JJFqa^7#Dtq#L5!0iH{cGUX7R8u;}Y2l~|3qmH-`* z+R0>z`50JXW!2D(fXyVqdv@61fL`uUmZ`+0%~+ipkc%b%qD)1IvQGIT6jisxJaA~h z*Qqg1C;q7wEhzhlUY-M+nE}j?meHr~Q)M2lUW|Yc`zJnHwX>o z4ztgkd!M(r_O}<-N3rSjo!7mN>sPMSXZbC^!316Y&ir_vQ>b4lfh(=|e_H_z9x;)^ zKJ_v;rS{988(%uv)^0;)gN-MyJCoh<5boN$DklPcJBQ3d_x`GD4!~%Y1x?x$4`}dS zkm|Urx!JD-aMFmcFv!QK4%_J(5#>zf59eZd9#D)*Drd;B=;vaI#NpjV5sNiro7fJ6m;{e*gZ1I2{OB`|=A5PxyPgio{bvSQvdIJg@!W2LF zq@v`le}T^)WOJBwua_^6_~`LTgLLj!vm+tXgPEW58|kivLM3)PKKuKYoH-qt$v)KJ zTBVX|vsX;8!FP6(bqc3QGD_i{3AWsk{IFmWF6lR@j Jw#jzRv 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 kf%keG2fw1N!lMIKkN^Mx delta 58630 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≪=>ZSVSnXzhtU^4N3zwM%W|W-w!d^j8(qC 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 diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-2-1-webkit-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-2-1-webkit-linux.png index 14da881b14271796b7304a8520342554af87f0df..a46551b34ab80391b976af49b43a83897221b0f9 100644 GIT binary patch delta 40163 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 Y0jAmw*g+$11^@s607*qoM6N<$f}!BR2><{9 delta 41010 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 dT?GJc>)*5D{qU6dZs-62002ovPDHLkV1i6-4|M Date: Wed, 4 Dec 2024 12:42:34 -0700 Subject: [PATCH 02/22] docs: Your First Component (#1052) https://deephaven.atlassian.net/browse/DOC-187 --------- Co-authored-by: Mike Bender --- .../docs/describing/your_first_component.md | 103 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 9 ++ 2 files changed, 112 insertions(+) create mode 100644 plugins/ui/docs/describing/your_first_component.md diff --git a/plugins/ui/docs/describing/your_first_component.md b/plugins/ui/docs/describing/your_first_component.md new file mode 100644 index 000000000..22b3203ba --- /dev/null +++ b/plugins/ui/docs/describing/your_first_component.md @@ -0,0 +1,103 @@ +# Your First Component + +`Components` are one of the core concepts of `deephaven.ui`. They are the foundation upon which you build user interfaces (UI). + +## Components: UI building blocks + +On the Web, HTML lets us create rich structured documents with its built-in set of tags like `

` and `
  • `: + +```html +
    +

    My First Component

    +
      +
    1. Components: UI Building Blocks
    2. +
    3. Defining a Component
    4. +
    5. Defining a Component
    6. +
    +
    +``` + +This markup represents an article `
    `, its heading `

    `, and an (abbreviated) table of contents as an ordered list `
      `. Markup like this, combined with CSS for style, and JavaScript for interactivity, lies behind every sidebar, avatar, modal, dropdown—every piece of UI you see on the Web. + +`Deephaven.ui` lets you use Python code to write custom "components", resuable UI elements for your app. The table of contents code you saw above could be turned into a `table_of_contents` component you could render in the UI. + +As your project grows, you will notice that many of your designs can be composed by reusing components you already wrote, speeding up your development. + +## Defining a component + +A `deephaven.ui` component is a Python function annotated with `@ui.component`. Here is what it looks like: + +```python +from deephaven import ui + + +@ui.component +def table_of_contents(): + return ui.flex( + ui.heading("My First Component"), + ui.text("- Components: UI Building Blocks"), + ui.text("- Defining a Component"), + ui.text("- Using a Component"), + direction="column", + ) + + +my_table_of_contents = table_of_contents() +``` + +And here’s how to build a component: + +### Step 1: Import deephaven.ui + +Your Python code must include this import: + +```python +from deephaven import ui +``` + +This allows you to acces the `@ui.component` annotation and all of the `deephaven.ui` components which you will use to build your component. + +### Step 2: Define the function + +With `def table_of_contents():` you define a Python function with the name `table_of_contents`. It must have the `@ui.component` annotation. + +### Step 3: Add deephaven.ui components + +The component returns a `ui.flex` component with child components `ui.heading` and `ui.text`. + +## Using a component + +Now that you’ve defined your `table_of_contents` component, you can nest it inside other components. You can export an `multiple_contents` component that uses multiple `table_of_contents` components: + +```python +from deephaven import ui + + +@ui.component +def table_of_contents(): + return ui.flex( + ui.heading("My First Component"), + ui.text("- Components: UI Building Blocks"), + ui.text("- Defining a Component"), + ui.text("- Using a Component"), + direction="column", + ) + + +@ui.component +def multiple_contents(): + return ui.flex( + table_of_contents(), + table_of_contents(), + table_of_contents(), + ) + + +my_multiple_contents = multiple_contents() +``` + +## Nesting and organizing components + +Components are regular Python functions, so you can keep multiple components in the same file. This is convenient when components are relatively small or tightly related to each other. If this file gets crowded, you can always move a component to a separate file. See [How do I import one Python script into another in the Deephaven IDE?](/core/docs/reference/community-questions/import-python-script) and [Modularizing Queries](/enterprise/docs/development/modularizing-queries) + +Because the `table_of_contents` components are rendered inside `multiple_contents` we can say that `multiple_contents` is a parent component, rendering each `table_of_contents` as a "child". You can define a component once, and then use it in as many places and as many times as you like. diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index 8d2f995ff..22d631c6d 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -22,6 +22,15 @@ "label": "Architecture", "path": "architecture.md" }, + { + "label": "Describing the UI", + "items": [ + { + "label": "Your First Component", + "path": "describing/your_first_component.md" + } + ] + }, { "label": "Components", "items": [ From 6730aa90abc08020f7d64f71cc8536df15151c80 Mon Sep 17 00:00:00 2001 From: ethanalvizo <55671206+ethanalvizo@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:23:32 -0500 Subject: [PATCH 03/22] feat: ui.meter (#1032) Closes #939 --- plugins/ui/docs/components/meter.md | 158 ++++++++++++++ plugins/ui/docs/sidebar.json | 4 + .../src/deephaven/ui/components/__init__.py | 2 + .../ui/src/deephaven/ui/components/meter.py | 194 ++++++++++++++++++ .../deephaven/ui/components/number_field.py | 4 +- .../{number_field.py => number_format.py} | 2 +- .../deephaven/ui/components/types/__init__.py | 2 +- .../deephaven/ui/components/types/progress.py | 3 + plugins/ui/src/js/src/elements/Meter.tsx | 13 ++ plugins/ui/src/js/src/elements/index.ts | 1 + .../js/src/elements/model/ElementConstants.ts | 1 + plugins/ui/src/js/src/widget/WidgetUtils.tsx | 2 + 12 files changed, 382 insertions(+), 4 deletions(-) create mode 100644 plugins/ui/docs/components/meter.md create mode 100644 plugins/ui/src/deephaven/ui/components/meter.py rename plugins/ui/src/deephaven/ui/components/types/Intl/{number_field.py => number_format.py} (99%) create mode 100644 plugins/ui/src/js/src/elements/Meter.tsx diff --git a/plugins/ui/docs/components/meter.md b/plugins/ui/docs/components/meter.md new file mode 100644 index 000000000..2dd610cc6 --- /dev/null +++ b/plugins/ui/docs/components/meter.md @@ -0,0 +1,158 @@ +# Meter + +Meters visually represent a quantity or achievement, displaying progress on a bar with a label. + +## Example + +```python +from deephaven import ui + + +@ui.component +def ui_meter(): + return ui.meter(label="RAM Usage", value=35) + + +my_meter = ui_meter() +``` + +## Value + +The `value` prop controls the meter and represents the current percentage of progress. By default, the minimum and maximum values are 0 and 100 but a different scale can be used by setting the `min_value` and `max_value` props. + +```python +from deephaven import ui + + +@ui.component +def ui_meter_value(): + return ui.meter(label="Tutorials completed", value=100, min_value=50, max_value=150) + + +my_meter_value = ui_meter_value() +``` + +## Formatting + +The `format_options` prop dictates how the value is displayed and which characters can be inputted. This parameter supports three styles: Percentage, Currency, and Units. + +Note: This prop is compatible with the option parameter of [Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat). + +```python +from deephaven import ui + + +@ui.component +def ui_meter_format(): + return ui.meter( + label="Currency", + value=75, + format_options={"style": "currency", "currency": "USD"}, + ) + + +my_meter_format = ui_meter_format() +``` + +## Labeling + +When a label is provided, value labels are positioned above the meter by default. The `label_position` prop can change where these labels are placed, while the `show_value_prop` can hide them entirely. + +```python +from deephaven import ui + + +@ui.component +def ui_meter_label(): + return [ + ui.meter( + label="Label", + value=50, + ), + ui.meter( + label="Label", + value=50, + label_position="side", + ), + ui.meter(label="Label", value=50, show_value_label=False), + ] + + +my_meter_label = ui_meter_label() +``` + +The `value_label` prop can update the value label directly where showing a different scale makes sense. + +```python +from deephaven import ui + + +@ui.component +def ui_meter_value_label(): + return ui.meter(label="Currency", value=20, value_label="1 of 5") + + +my_meter_value_label = ui_meter_value_label() +``` + +## Size + +The `size` prop controls how thick the meter bar is displayed. + +```python +from deephaven import ui + + +@ui.component +def ui_meter_size(): + return [ + ui.meter(label="Progress", value=75, size="S"), + ui.meter(label="Progress", value=75, size="L"), + ] + + +my_meter_size = ui_meter_size() +``` + +## Variants + +The `variant` prop changes the meter's visual style. It supports four options: informative, positive, critical, and warning. + +```python +from deephaven import ui + + +@ui.component +def ui_meter_variant(): + return [ + ui.meter( + label="Progress", + value=75, + variant="informative", + ), + ui.meter( + label="Progress", + value=75, + variant="positive", + ), + ui.meter( + label="Progress", + value=75, + variant="critical", + ), + ui.meter( + label="Progress", + value=75, + variant="warning", + ), + ] + + +my_meter_variant = ui_meter_variant() +``` + +## API Reference + +```{eval-rst} +.. dhautofunction:: deephaven.ui.meter +``` \ No newline at end of file diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index 22d631c6d..8a4a37699 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -150,6 +150,10 @@ "label": "markdown", "path": "components/markdown.md" }, + { + "label": "meter", + "path": "components/meter.md" + }, { "label": "number_field", "path": "components/number_field.md" diff --git a/plugins/ui/src/deephaven/ui/components/__init__.py b/plugins/ui/src/deephaven/ui/components/__init__.py index c54e95e4a..80fcdf5bc 100644 --- a/plugins/ui/src/deephaven/ui/components/__init__.py +++ b/plugins/ui/src/deephaven/ui/components/__init__.py @@ -38,6 +38,7 @@ from .list_view import list_view from .make_component import make_component as component from .markdown import markdown +from .meter import meter from .number_field import number_field from .panel import panel from .picker import picker @@ -109,6 +110,7 @@ "list_action_menu", "html", "markdown", + "meter", "number_field", "panel", "picker", diff --git a/plugins/ui/src/deephaven/ui/components/meter.py b/plugins/ui/src/deephaven/ui/components/meter.py new file mode 100644 index 000000000..fb724d73e --- /dev/null +++ b/plugins/ui/src/deephaven/ui/components/meter.py @@ -0,0 +1,194 @@ +from __future__ import annotations +from typing import Any +from .types import ( + AlignSelf, + CSSProperties, + DimensionValue, + JustifySelf, + LayoutFlex, + Position, + LabelPosition, + NumberFormatOptions, + MeterVariants, + MeterSizes, +) +from .basic import component_element +from ..elements import Element + + +def meter( + variant: MeterVariants = "informative", + size: MeterSizes = "L", + label_position: LabelPosition = "top", + show_value_label: bool | None = None, + label: Any | None = None, + format_options: NumberFormatOptions | None = None, + value_label: Any | None = None, + value: float = 0, + min_value: float = 0, + max_value: float = 100, + flex: LayoutFlex | None = None, + flex_grow: float | None = None, + flex_shrink: float | None = None, + flex_basis: DimensionValue | None = None, + align_self: AlignSelf | None = None, + justify_self: JustifySelf | None = None, + order: int | None = None, + grid_area: str | None = None, + grid_row: str | None = None, + grid_row_start: str | None = None, + grid_row_end: str | None = None, + grid_column: str | None = None, + grid_column_start: str | None = None, + grid_column_end: str | None = None, + margin: DimensionValue | None = None, + margin_top: DimensionValue | None = None, + margin_bottom: DimensionValue | None = None, + margin_start: DimensionValue | None = None, + margin_end: DimensionValue | None = None, + margin_x: DimensionValue | None = None, + margin_y: DimensionValue | None = None, + width: DimensionValue | None = None, + height: DimensionValue | None = None, + min_width: DimensionValue | None = None, + min_height: DimensionValue | None = None, + max_width: DimensionValue | None = None, + max_height: DimensionValue | None = None, + position: Position | None = None, + top: DimensionValue | None = None, + bottom: DimensionValue | None = None, + start: DimensionValue | None = None, + end: DimensionValue | None = None, + left: DimensionValue | None = None, + right: DimensionValue | None = None, + z_index: int | None = None, + is_hidden: bool | None = None, + id: str | None = None, + aria_label: str | None = None, + aria_labelledby: str | None = None, + aria_describedby: str | None = None, + aria_details: str | None = None, + UNSAFE_class_name: str | None = None, + UNSAFE_style: CSSProperties | None = None, + key: str | None = None, +) -> Element: + """ + Meters visually represent a quantity or achievement, displaying progress on a bar with a label. + + Args: + variant: The visual style of the meter. + size: How thick the bar should be. + label_position: The position of the label relative to the input. + show_value_label: Whether to show the value label. + label: The label for the input. + format_options: Options for formatting the displayed value, which also restricts input characters. + value_label: The label for the value (e.g. 1 of 4). + value: The current value of the input + min_value: The minimum value of the input + max_value: The maximum value of the input + flex: When used in a flex layout, specifies how the element will grow or shrink to fit the space available. + flex_grow: When used in a flex layout, specifies how the element will grow to fit the space available. + flex_shrink: When used in a flex layout, specifies how the element will shrink to fit the space available. + flex_basis: When used in a flex layout, specifies the initial main size of the element. + align_self: Overrides the alignItems property of a flex or grid container. + justify_self: Species how the element is justified inside a flex or grid container. + order: The layout order for the element within a flex or grid container. + grid_area: When used in a grid layout specifies, specifies the named grid area that the element should be placed in within the grid. + grid_row: When used in a grid layout, specifies the row the element should be placed in within the grid. + grid_column: When used in a grid layout, specifies the column the element should be placed in within the grid. + grid_row_start: When used in a grid layout, specifies the starting row to span within the grid. + grid_row_end: When used in a grid layout, specifies the ending row to span within the grid. + grid_column_start: When used in a grid layout, specifies the starting column to span within the grid. + grid_column_end: When used in a grid layout, specifies the ending column to span within the grid. + margin: The margin for all four sides of the element. + margin_top: The margin for the top side of the element. + margin_bottom: The margin for the bottom side of the element. + margin_start: The margin for the logical start side of the element, depending on layout direction. + margin_end: The margin for the logical end side of the element, depending on layout direction. + margin_x: The margin for the left and right sides of the element. + margin_y: The margin for the top and bottom sides of the element. + width: The width of the element. + min_width: The minimum width of the element. + max_width: The maximum width of the element. + height: The height of the element. + min_height: The minimum height of the element. + max_height: The maximum height of the element. + position: The position of the element. + top: The distance from the top of the containing element. + bottom: The distance from the bottom of the containing element. + left: The distance from the left of the containing element. + right: The distance from the right of the containing element. + start: The distance from the start of the containing element, depending on layout direction. + end: The distance from the end of the containing element, depending on layout direction. + z_index: The stack order of the element. + is_hidden: Whether the element is hidden. + id: The unique identifier of the element. + aria_label: The label for the element. + aria_labelledby: The id of the element that labels the current element. + aria_describedby: The id of the element that describes the current element. + aria_details: The id of the element that provides additional information about the current element. + UNSAFE_class_name: A CSS class to apply to the element. + UNSAFE_style: A CSS style to apply to the element. + key: A unique identifier used by React to render elements in a list. + + Returns: + The rendered meter element. + """ + + return component_element( + "Meter", + variant=variant, + size=size, + label_position=label_position, + show_value_label=show_value_label, + label=label, + format_options=format_options, + value_label=value_label, + value=value, + min_value=min_value, + max_value=max_value, + flex=flex, + flex_grow=flex_grow, + flex_shrink=flex_shrink, + flex_basis=flex_basis, + align_self=align_self, + justify_self=justify_self, + order=order, + grid_area=grid_area, + grid_row=grid_row, + grid_row_start=grid_row_start, + grid_row_end=grid_row_end, + grid_column=grid_column, + grid_column_start=grid_column_start, + grid_column_end=grid_column_end, + margin=margin, + margin_top=margin_top, + margin_bottom=margin_bottom, + margin_start=margin_start, + margin_end=margin_end, + margin_x=margin_x, + margin_y=margin_y, + width=width, + height=height, + min_width=min_width, + min_height=min_height, + max_width=max_width, + max_height=max_height, + position=position, + top=top, + bottom=bottom, + start=start, + end=end, + left=left, + right=right, + z_index=z_index, + is_hidden=is_hidden, + id=id, + aria_label=aria_label, + aria_labelledby=aria_labelledby, + aria_describedby=aria_describedby, + aria_details=aria_details, + UNSAFE_class_name=UNSAFE_class_name, + UNSAFE_style=UNSAFE_style, + key=key, + ) diff --git a/plugins/ui/src/deephaven/ui/components/number_field.py b/plugins/ui/src/deephaven/ui/components/number_field.py index 92f4adaf1..9b17c8e28 100644 --- a/plugins/ui/src/deephaven/ui/components/number_field.py +++ b/plugins/ui/src/deephaven/ui/components/number_field.py @@ -12,7 +12,7 @@ LayoutFlex, Position, LabelPosition, - NumberFieldFormatOptions, + NumberFormatOptions, Alignment, ) from .basic import component_element @@ -25,7 +25,7 @@ def number_field( decrement_aria_label: str | None = None, increment_aria_label: str | None = None, is_wheel_disabled: bool | None = None, - format_options: NumberFieldFormatOptions | None = None, + format_options: NumberFormatOptions | None = None, is_disabled: bool | None = None, is_read_only: bool | None = None, is_required: bool | None = None, diff --git a/plugins/ui/src/deephaven/ui/components/types/Intl/number_field.py b/plugins/ui/src/deephaven/ui/components/types/Intl/number_format.py similarity index 99% rename from plugins/ui/src/deephaven/ui/components/types/Intl/number_field.py rename to plugins/ui/src/deephaven/ui/components/types/Intl/number_format.py index cb9849cf3..cf79b980c 100644 --- a/plugins/ui/src/deephaven/ui/components/types/Intl/number_field.py +++ b/plugins/ui/src/deephaven/ui/components/types/Intl/number_format.py @@ -480,7 +480,7 @@ class Options(TypedDict): """ -class NumberFieldFormatOptions(TypedDict): +class NumberFormatOptions(TypedDict): """ Options for formatting the value of a NumberField. This also affects the characters allowed in the input. diff --git a/plugins/ui/src/deephaven/ui/components/types/__init__.py b/plugins/ui/src/deephaven/ui/components/types/__init__.py index 12557f66e..618b8072e 100644 --- a/plugins/ui/src/deephaven/ui/components/types/__init__.py +++ b/plugins/ui/src/deephaven/ui/components/types/__init__.py @@ -6,4 +6,4 @@ from .progress import * from .validate import * from .icon_types import * -from .Intl.number_field import * +from .Intl.number_format import * diff --git a/plugins/ui/src/deephaven/ui/components/types/progress.py b/plugins/ui/src/deephaven/ui/components/types/progress.py index 00ea22fe6..62a7cff8d 100644 --- a/plugins/ui/src/deephaven/ui/components/types/progress.py +++ b/plugins/ui/src/deephaven/ui/components/types/progress.py @@ -2,3 +2,6 @@ ProgressBarSize = Literal["S", "L"] ProgressCircleSize = Literal["S", "M", "L"] + +MeterVariants = Literal["informative", "positive", "critical", "warning"] +MeterSizes = Literal["S", "L"] diff --git a/plugins/ui/src/js/src/elements/Meter.tsx b/plugins/ui/src/js/src/elements/Meter.tsx new file mode 100644 index 000000000..c3aadd819 --- /dev/null +++ b/plugins/ui/src/js/src/elements/Meter.tsx @@ -0,0 +1,13 @@ +import { + Meter as DHCMeter, + MeterProps as DHCMeterProps, +} from '@deephaven/components'; + +export function Meter(props: DHCMeterProps): JSX.Element | null { + // eslint-disable-next-line react/jsx-props-no-spreading + return ; +} + +Meter.displayName = 'Meter'; + +export default Meter; diff --git a/plugins/ui/src/js/src/elements/index.ts b/plugins/ui/src/js/src/elements/index.ts index 58c8846f7..02443263d 100644 --- a/plugins/ui/src/js/src/elements/index.ts +++ b/plugins/ui/src/js/src/elements/index.ts @@ -20,6 +20,7 @@ export * from './Image'; export * from './InlineAlert'; export * from './ListView'; export * from './Markdown'; +export * from './Meter'; export * from './model'; export * from './ObjectView'; export * from './Picker'; diff --git a/plugins/ui/src/js/src/elements/model/ElementConstants.ts b/plugins/ui/src/js/src/elements/model/ElementConstants.ts index 83d386a79..f5e148347 100644 --- a/plugins/ui/src/js/src/elements/model/ElementConstants.ts +++ b/plugins/ui/src/js/src/elements/model/ElementConstants.ts @@ -55,6 +55,7 @@ export const ELEMENT_NAME = { link: uiComponentName('Link'), listView: uiComponentName('ListView'), markdown: uiComponentName('Markdown'), + meter: uiComponentName('Meter'), numberField: uiComponentName('NumberField'), picker: uiComponentName('Picker'), progressBar: uiComponentName('ProgressBar'), diff --git a/plugins/ui/src/js/src/widget/WidgetUtils.tsx b/plugins/ui/src/js/src/widget/WidgetUtils.tsx index a3fc677bf..868fa9352 100644 --- a/plugins/ui/src/js/src/widget/WidgetUtils.tsx +++ b/plugins/ui/src/js/src/widget/WidgetUtils.tsx @@ -67,6 +67,7 @@ import { InlineAlert, ListView, Markdown, + Meter, Picker, ProgressBar, ProgressCircle, @@ -147,6 +148,7 @@ export const elementComponentMap = { [ELEMENT_NAME.listActionMenu]: ListActionMenu, [ELEMENT_NAME.listView]: ListView, [ELEMENT_NAME.markdown]: Markdown, + [ELEMENT_NAME.meter]: Meter, [ELEMENT_NAME.numberField]: NumberField, [ELEMENT_NAME.picker]: Picker, [ELEMENT_NAME.progressBar]: ProgressBar, From 21b752c600f85fef2fb62fd25352819b48eaae03 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Fri, 6 Dec 2024 07:59:42 -0700 Subject: [PATCH 04/22] docs: Importing and Exporting Components (#1054) Co-authored-by: Mike Bender --- .../importing_and_exporting_components.md | 101 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 2 files changed, 105 insertions(+) create mode 100644 plugins/ui/docs/describing/importing_and_exporting_components.md diff --git a/plugins/ui/docs/describing/importing_and_exporting_components.md b/plugins/ui/docs/describing/importing_and_exporting_components.md new file mode 100644 index 000000000..0621e5253 --- /dev/null +++ b/plugins/ui/docs/describing/importing_and_exporting_components.md @@ -0,0 +1,101 @@ +# Importing and Exporting Components + +The value of `deephaven.ui` components lies in their reusability: you can create components that are composed of other components. But as you nest more and more components, it often makes sense to start splitting them into different files. This lets you keep your files easy to scan and reuse components in more places. + +## Exporting and Importing in Deephaven Core + +In Deephaven Core, Python scripts cannot import from other Python scripts by default. In order to import from another script, you must place the script in the `data directory` and tell the Python interpreter where the `data directory` is located. For details on how to do this, see [How do I import one Python script into another in the Deephaven IDE?](/core/docs/reference/community-questions/import-python-script) + +### Example Export in Deephaven Core + +```python +# file1.py +from deephaven import ui + + +@ui.component +def table_of_contents(): + return ui.flex( + ui.heading("My First Component"), + ui.text("- Components: UI Building Blocks"), + ui.text("- Defining a Component"), + ui.text("- Using a Component"), + direction="column", + ) +``` + +### Example Import in Deephaven Core + +```python +# file2.py +# Tell the Python interpreter where the data directory is located +import sys + +sys.path.append("/data/storage/notebooks") + +from deephaven import ui + +# Import component from file1 +from file1 import table_of_contents + + +@ui.component +def multiple_contents(): + return ui.flex( + table_of_contents(), + table_of_contents(), + table_of_contents(), + ) + + +my_multiple_contents = multiple_contents() +``` + +## Exporting and Importing in Deephaven Enterprise + +In Deephaven Enterprise, notebook files are stored in a secure file system which prevents importing by default. In order to import from another script, you can use the `deephaven_enterprise.notebook` module to do either an `exec_notebook` or a `meta_import`. For details on how to do this, see [Modularizing Queries](/enterprise/docs/development/modularizing-queries). + +### Example Export in Deephaven Enterprise + +```python +# file1.py +from deephaven import ui + + +@ui.component +def table_of_contents(): + return ui.flex( + ui.heading("My First Component"), + ui.text("- Components: UI Building Blocks"), + ui.text("- Defining a Component"), + ui.text("- Using a Component"), + direction="column", + ) +``` + +### Example Import in Deephaven Enterprise + +```python +# file2.py +# Use the notebook module to meta_import file1.py +from deephaven_enterprise.notebook import meta_import + +meta_import(db, "nb") + +# Import component from file1 +from nb.file1 import table_of_contents + +from deephaven import ui + + +@ui.component +def multiple_contents(): + return ui.flex( + table_of_contents(), + table_of_contents(), + table_of_contents(), + ) + + +my_multiple_contents = multiple_contents() +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index 8a4a37699..ceafac276 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -28,6 +28,10 @@ { "label": "Your First Component", "path": "describing/your_first_component.md" + }, + { + "label": "Importing and Exporting Components", + "path": "describing/importing_and_exporting_components.md" } ] }, From 6e733506434e5ab89503793fd278bbca77a9aef7 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Wed, 11 Dec 2024 07:13:40 -0700 Subject: [PATCH 05/22] docs: Working with Tables (#1059) - DOC-216 --------- Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> --- plugins/ui/docs/_assets/work_with_tables1.png | Bin 0 -> 20450 bytes plugins/ui/docs/_assets/work_with_tables2.png | Bin 0 -> 68532 bytes .../ui/docs/describing/work_with_tables.md | 139 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 4 files changed, 143 insertions(+) create mode 100644 plugins/ui/docs/_assets/work_with_tables1.png create mode 100644 plugins/ui/docs/_assets/work_with_tables2.png create mode 100644 plugins/ui/docs/describing/work_with_tables.md diff --git a/plugins/ui/docs/_assets/work_with_tables1.png b/plugins/ui/docs/_assets/work_with_tables1.png new file mode 100644 index 0000000000000000000000000000000000000000..1f438f7ab31a07e26510f3c6ef5ba16352061356 GIT binary patch literal 20450 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 A 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 F{x6_N<`Vz_ literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/describing/work_with_tables.md b/plugins/ui/docs/describing/work_with_tables.md new file mode 100644 index 000000000..e283d2983 --- /dev/null +++ b/plugins/ui/docs/describing/work_with_tables.md @@ -0,0 +1,139 @@ +# Work with Tables + +The Deephaven table is the key abstraction that unites static and real-time data for a seamless, integrated experience. Combining tables with `deephaven.ui` components allows you to create your own powerful, data centered workflows. + +For more information, see [Working with Deephaven Tables](/core/docs/getting-started/quickstart/#4-working-with-deephaven-tables). + +## Display a table in a component + +You can display a Deephaven table in a component by doing one of the following: + +- return a table directly from a component +- return a table as part of a `list` or `tuple` +- add a table to a container such as a `flex` or `panel` +- [use ui.table](#use-ui.table) + +```python +from deephaven import new_table, ui +from deephaven.column import int_col + +# Prepend name with an underscore to avoid displaying the source table +_source = new_table([int_col("IntegerColumn", [1, 2, 3])]) + + +@ui.component +def single_table(t): + ui.use_effect(lambda: print("displaying table"), []) + return t + + +@ui.component +def list_table(t): + return [ui.text("list table"), t] + + +@ui.component +def flex_table(t): + return ui.flex(ui.text("flex table"), t) + + +my_single_table = single_table(_source) +my_list_table = list_table(_source) +my_flex_table = flex_table(_source) +``` + +![Display a table in a component](../_assets/work_with_tables1.png) + +## Use `ui.table` + +[`ui.table`](../components/table.md) is a wrapper for Deephaven tables that allows you to change how the table is displayed in the UI and how to handle user events. Here is an example of adding custom color formatting. + +```py +from deephaven import ui +import deephaven.plot.express as dx + +_stocks_table = dx.data.stocks() + +t = ui.table( + _stocks_table, + format_=[ + ui.TableFormat(color="fg"), + ui.TableFormat(cols="Sym", color="white"), + ], +) +``` + +![Use ui.table](../_assets/work_with_tables2.png) + +## Memoize table operations + +If you are working with a table, memoize the table operation. This stores the result in a memoized value and prevents the table from being re-computed on every render. This can be done with the [use_memo](../hooks/use_memo.md) hook. + +```python +from deephaven import time_table, ui +from deephaven.table import Table + + +theme_options = ["accent-200", "red-200", "green-200"] + + +@ui.component +def ui_memo_table_app(): + n, set_n = ui.use_state(1) + theme, set_theme = ui.use_state(theme_options[0]) + + # ✅ Memoize the table operation, only recompute when the dependency `n` changes + result_table = ui.use_memo( + lambda: time_table("PT1s").update(f"x=i*{n}").reverse(), [n] + ) + + return ui.view( + ui.flex( + ui.picker( + *theme_options, label="Theme", selected_key=theme, on_change=set_theme + ), + ui.slider(value=n, min_value=1, max_value=999, on_change=set_n, label="n"), + result_table, + direction="column", + height="100%", + ), + background_color=theme, + align_self="stretch", + flex_grow=1, + ) + + +memo_table_app = ui_memo_table_app() +``` + +## Hooks for tables + +The [`use_table_data`](../hooks/use_table_data.md) hook lets you use a table's data. This is useful when you want to listen to an updating table and use the data in your component. + +```python +from deephaven import time_table, ui + + +@ui.component +def ui_table_data(table): + table_data = ui.use_table_data(table) + return ui.heading(f"The table data is {table_data}") + + +table_data = ui_table_data(time_table("PT1s").update("x=i").tail(5)) +``` + +The [`use_cell_data`](../hooks/use_cell_data.md) hook lets you use the cell data of the first cell (first row in the first column) in a table. This is useful when you want to listen to an updating table and use the data in your component. + +```python +from deephaven import time_table, ui + + +@ui.component +def ui_table_first_cell(table): + cell_value = ui.use_cell_data(table) + return ui.heading(f"The first cell value is {cell_value}") + + +table_first_cell = ui_table_first_cell(time_table("PT1s").tail(1)) +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index ceafac276..cce11e0b9 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -32,6 +32,10 @@ { "label": "Importing and Exporting Components", "path": "describing/importing_and_exporting_components.md" + }, + { + "label": "Working with Tables", + "path": "describing/work_with_tables.md" } ] }, From 2c7bc017f7455985d37d5e5d051592aafdb4e484 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 12 Dec 2024 09:24:34 -0600 Subject: [PATCH 06/22] fix: switch to webgl by default for line plot (#992) Fixes #991 Used code from that issue ``` from deephaven.plot import express as dx from deephaven.plot.figure import Figure _stocks = dx.data.stocks() p = dx.line(_stocks, "Timestamp", "Random") ``` --- .../src/deephaven/plot/express/plots/line.py | 7 +- .../deephaven/plot/express/plots/test_line.py | 78 +++++++++++++++++++ tests/app.d/ui_flex.py | 4 +- 3 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 plugins/plotly-express/test/deephaven/plot/express/plots/test_line.py diff --git a/plugins/plotly-express/src/deephaven/plot/express/plots/line.py b/plugins/plotly-express/src/deephaven/plot/express/plots/line.py index 3be48a0f0..9c1783058 100644 --- a/plugins/plotly-express/src/deephaven/plot/express/plots/line.py +++ b/plugins/plotly-express/src/deephaven/plot/express/plots/line.py @@ -56,7 +56,7 @@ def line( line_shape: str = "linear", title: str | None = None, template: str | None = None, - render_mode: str = "svg", + render_mode: str = "webgl", unsafe_update_figure: Callable = default_callback, ) -> DeephavenFigure: """Returns a line chart @@ -170,8 +170,9 @@ def line( 'spline', 'vhv', 'hvh', 'vh', 'hv'. Default 'linear' title: The title of the chart template: The template for the chart. - render_mode: Either "svg" or "webgl". Setting to "webgl" will lead to a more - performant plot but there may be graphical bugs. + render_mode: Either "svg" or "webgl". The default is "webgl" as it leads to a more + performant plot but there may be graphical bugs, in which case it is + recommended to switch to "svg" unsafe_update_figure: An update function that takes a plotly figure as an argument and optionally returns a plotly figure. If a figure is not returned, the plotly figure passed will be assumed to be the return diff --git a/plugins/plotly-express/test/deephaven/plot/express/plots/test_line.py b/plugins/plotly-express/test/deephaven/plot/express/plots/test_line.py new file mode 100644 index 000000000..bb96322fb --- /dev/null +++ b/plugins/plotly-express/test/deephaven/plot/express/plots/test_line.py @@ -0,0 +1,78 @@ +import unittest + +from ..BaseTest import BaseTestCase + + +class LineTestCase(BaseTestCase): + def setUp(self) -> None: + from deephaven import new_table + from deephaven.column import int_col + + self.source = new_table( + [ + int_col("X", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("X2", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("Y", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("Y2", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("size", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("text", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("hover_name", [1, 2, 2, 3, 3, 3, 4, 4, 5]), + int_col("category", [1, 2, 1, 2, 1, 2, 1, 2, 1]), + ] + ) + + def test_basic_scatter(self): + import src.deephaven.plot.express as dx + from deephaven.constants import NULL_INT + + chart = dx.line(self.source, x="X", y="Y").to_dict(self.exporter) + + expected_data = [ + { + "hovertemplate": "X=%{x}
      Y=%{y}", + "legendgroup": "", + "line": {"color": "#636efa", "dash": "solid", "shape": "linear"}, + "marker": {"symbol": "circle"}, + "mode": "lines", + "name": "", + "showlegend": False, + "x": [NULL_INT], + "xaxis": "x", + "y": [NULL_INT], + "yaxis": "y", + "type": "scattergl", + } + ] + + expected_layout = { + "legend": {"tracegroupgap": 0}, + "margin": {"t": 60}, + "xaxis": { + "anchor": "y", + "domain": [0.0, 1.0], + "side": "bottom", + "title": {"text": "X"}, + }, + "yaxis": { + "anchor": "x", + "domain": [0.0, 1.0], + "side": "left", + "title": {"text": "Y"}, + }, + } + + expected_mappings = [ + { + "table": 0, + "data_columns": {"X": ["/plotly/data/0/x"], "Y": ["/plotly/data/0/y"]}, + } + ] + + self.assert_chart_equals( + chart, + expected_data=expected_data, + expected_layout=expected_layout, + expected_mappings=expected_mappings, + expected_is_user_set_template=False, + expected_is_user_set_color=False, + ) diff --git a/tests/app.d/ui_flex.py b/tests/app.d/ui_flex.py index 4c0292aff..a2b4f6ef2 100644 --- a/tests/app.d/ui_flex.py +++ b/tests/app.d/ui_flex.py @@ -3,7 +3,9 @@ from deephaven import empty_table _t_flex = empty_table(100).update(["x = i", "y = sin(i)"]) -_p_flex = dx.line(_t_flex, x="x", y="y") +# By default, dx.line renders with webgl but some tests use the trace class to see if the chart is rendered, +# which is not there in webgl. +_p_flex = dx.line(_t_flex, x="x", y="y", render_mode="svg") @ui.component From da08ad037d2637da66b93692105fc43165d116d2 Mon Sep 17 00:00:00 2001 From: mikebender Date: Thu, 12 Dec 2024 15:58:14 -0500 Subject: [PATCH 07/22] chore(version): ui-v0.24.0 --- package-lock.json | 2 +- plugins/ui/CHANGELOG.md | 15 +++++++++++++++ plugins/ui/setup.cfg | 2 +- plugins/ui/src/js/package.json | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d00aff72..e5e78cc13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32318,7 +32318,7 @@ }, "plugins/ui/src/js": { "name": "@deephaven/js-plugin-ui", - "version": "0.23.1", + "version": "0.24.0", "license": "Apache-2.0", "dependencies": { "@deephaven/chart": "^0.99.0", diff --git a/plugins/ui/CHANGELOG.md b/plugins/ui/CHANGELOG.md index 28d768713..557e10ac6 100644 --- a/plugins/ui/CHANGELOG.md +++ b/plugins/ui/CHANGELOG.md @@ -2,6 +2,21 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. - - - +## ui-v0.24.0 - 2024-12-12 +#### Bug Fixes +- UI loading duplicate panels in embed iframe (#1043) - (e1559a4) - Matthew Runyon +#### Documentation +- Working with Tables (#1059) - (6e73350) - dgodinez-dh +- Importing and Exporting Components (#1054) - (21b752c) - dgodinez-dh +- Your First Component (#1052) - (ce3843a) - dgodinez-dh +- Add Stack with tabs to dashboard docs (#1048) - (cf0c994) - mofojed +#### Features +- ui.meter (#1032) - (6730aa9) - ethanalvizo +- ui.avatar (#1027) - (2738a1d) - Akshat Jawne +- Toast Implementation (#1030) - (e53b322) - dgodinez-dh + +- - - + ## ui-v0.23.1 - 2024-11-23 - - - diff --git a/plugins/ui/setup.cfg b/plugins/ui/setup.cfg index 4a4948d6c..c7129cdab 100644 --- a/plugins/ui/setup.cfg +++ b/plugins/ui/setup.cfg @@ -3,7 +3,7 @@ name = deephaven-plugin-ui description = deephaven.ui plugin long_description = file: README.md long_description_content_type = text/markdown -version = 0.23.1.dev0 +version = 0.24.0 url = https://github.com/deephaven/deephaven-plugins project_urls = Source Code = https://github.com/deephaven/deephaven-plugins diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json index 57c71f8b3..a51cc6cf4 100644 --- a/plugins/ui/src/js/package.json +++ b/plugins/ui/src/js/package.json @@ -1,6 +1,6 @@ { "name": "@deephaven/js-plugin-ui", - "version": "0.23.1", + "version": "0.24.0", "description": "Deephaven UI plugin", "keywords": [ "Deephaven", From 0d20b6a3aa0becb82d2d4290f64c70920aba7d84 Mon Sep 17 00:00:00 2001 From: mikebender Date: Thu, 12 Dec 2024 15:58:14 -0500 Subject: [PATCH 08/22] chore(version): update ui version to 0.24.0.dev0 --- plugins/ui/setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ui/setup.cfg b/plugins/ui/setup.cfg index c7129cdab..6af963036 100644 --- a/plugins/ui/setup.cfg +++ b/plugins/ui/setup.cfg @@ -3,7 +3,7 @@ name = deephaven-plugin-ui description = deephaven.ui plugin long_description = file: README.md long_description_content_type = text/markdown -version = 0.24.0 +version = 0.24.0.dev0 url = https://github.com/deephaven/deephaven-plugins project_urls = Source Code = https://github.com/deephaven/deephaven-plugins From 9d7a3b31c027ccc75e241570568aaf2b46326e09 Mon Sep 17 00:00:00 2001 From: mikebender Date: Thu, 12 Dec 2024 16:17:37 -0500 Subject: [PATCH 09/22] chore(version): plotly-express-v0.12.1 --- package-lock.json | 2 +- plugins/plotly-express/CHANGELOG.md | 6 ++++++ plugins/plotly-express/setup.cfg | 2 +- plugins/plotly-express/src/js/package.json | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5e78cc13..05d19d59e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32033,7 +32033,7 @@ }, "plugins/plotly-express/src/js": { "name": "@deephaven/js-plugin-plotly-express", - "version": "0.12.0", + "version": "0.12.1", "license": "Apache-2.0", "dependencies": { "@deephaven/chart": "0.97.0", diff --git a/plugins/plotly-express/CHANGELOG.md b/plugins/plotly-express/CHANGELOG.md index dace500b4..88b82fa39 100644 --- a/plugins/plotly-express/CHANGELOG.md +++ b/plugins/plotly-express/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. - - - +## plotly-express-v0.12.1 - 2024-12-12 +#### Bug Fixes +- switch to webgl by default for line plot (#992) - (2c7bc01) - Joe + +- - - + ## plotly-express-v0.12.0 - 2024-11-23 #### Bug Fixes - `dx` now respects the webgl flag (#934) - (9cdf1ee) - Joe diff --git a/plugins/plotly-express/setup.cfg b/plugins/plotly-express/setup.cfg index 7c1405431..32da8ac31 100644 --- a/plugins/plotly-express/setup.cfg +++ b/plugins/plotly-express/setup.cfg @@ -3,7 +3,7 @@ name = deephaven-plugin-plotly-express description = Deephaven Chart Plugin long_description = file: README.md long_description_content_type = text/markdown -version = 0.12.0.dev0 +version = 0.12.1 url = https://github.com/deephaven/deephaven-plugins project_urls = Source Code = https://github.com/deephaven/deephaven-plugins diff --git a/plugins/plotly-express/src/js/package.json b/plugins/plotly-express/src/js/package.json index 5bf082ab3..61c4739ef 100644 --- a/plugins/plotly-express/src/js/package.json +++ b/plugins/plotly-express/src/js/package.json @@ -1,6 +1,6 @@ { "name": "@deephaven/js-plugin-plotly-express", - "version": "0.12.0", + "version": "0.12.1", "description": "Deephaven plotly express plugin", "keywords": [ "Deephaven", From 3b34be4e91d402ddf61c8ae3518ba2e5a6f616eb Mon Sep 17 00:00:00 2001 From: mikebender Date: Thu, 12 Dec 2024 16:17:37 -0500 Subject: [PATCH 10/22] chore(version): update plotly-express version to 0.12.1.dev0 --- plugins/plotly-express/setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/plotly-express/setup.cfg b/plugins/plotly-express/setup.cfg index 32da8ac31..501796c6c 100644 --- a/plugins/plotly-express/setup.cfg +++ b/plugins/plotly-express/setup.cfg @@ -3,7 +3,7 @@ name = deephaven-plugin-plotly-express description = Deephaven Chart Plugin long_description = file: README.md long_description_content_type = text/markdown -version = 0.12.1 +version = 0.12.1.dev0 url = https://github.com/deephaven/deephaven-plugins project_urls = Source Code = https://github.com/deephaven/deephaven-plugins From 0ce76342ed9c2d1ce707bba3bb59956064023996 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:50:13 -0700 Subject: [PATCH 11/22] docs: Conditional Rendering (#1060) https://deephaven.atlassian.net/browse/DOC-224 --------- Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> Co-authored-by: Mike Bender --- .../docs/_assets/conditional_rendering1.png | Bin 0 -> 8388 bytes .../docs/_assets/conditional_rendering2.png | Bin 0 -> 9173 bytes .../docs/_assets/conditional_rendering3.png | Bin 0 -> 6532 bytes .../docs/describing/conditional_rendering.md | 191 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 5 files changed, 195 insertions(+) create mode 100644 plugins/ui/docs/_assets/conditional_rendering1.png create mode 100644 plugins/ui/docs/_assets/conditional_rendering2.png create mode 100644 plugins/ui/docs/_assets/conditional_rendering3.png create mode 100644 plugins/ui/docs/describing/conditional_rendering.md diff --git a/plugins/ui/docs/_assets/conditional_rendering1.png b/plugins/ui/docs/_assets/conditional_rendering1.png new file mode 100644 index 0000000000000000000000000000000000000000..16dbe5eaf07b12194470018825d804da2bfb9082 GIT binary patch literal 8388 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 literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/_assets/conditional_rendering2.png b/plugins/ui/docs/_assets/conditional_rendering2.png new file mode 100644 index 0000000000000000000000000000000000000000..98075135db1291f90ec898773fd58a167b2581b8 GIT binary patch literal 9173 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 literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/_assets/conditional_rendering3.png b/plugins/ui/docs/_assets/conditional_rendering3.png new file mode 100644 index 0000000000000000000000000000000000000000..feae519d1a90bd82b56f38883392b44d8e1536f8 GIT binary patch literal 6532 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 A3jhEB literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/describing/conditional_rendering.md b/plugins/ui/docs/describing/conditional_rendering.md new file mode 100644 index 000000000..bd92cec11 --- /dev/null +++ b/plugins/ui/docs/describing/conditional_rendering.md @@ -0,0 +1,191 @@ +# Conditional Rendering + +Your components will often need to display different things depending on different conditions. In `deephaven.ui`, you can conditionally render components using Python syntax like if statements, the `and` operator, and the ternary operator. + +## Conditional returning + +Consider a `packing_list` component rendering several `item` components, which can be marked as packed or not: + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + return ui.text("- ", name) + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` + +![my_packing_list](../_assets/conditional_rendering1.png) + +Some of the `item` components have their `is_packed` prop set to `True` instead of `False`. + +To add a checkmark (✅) to packed items if `is_packed=True`, you can write an if/else statement like so: + + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + if is_packed: + return ui.text("- ", name + " ✅") + return ui.text("- ", name) + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` + +![my_packing_list2](../_assets/conditional_rendering2.png) + +Notice you are creating branching logic with Python's `if` and `return` statements. In `deephaven.ui`, control flow (like conditions) is handled by Python. + +### Conditionally return nothing with `None` + +In some situations, you do not want to render anything at all. For example, you do not want to show any packed items. A component must return something. In this case, you can return `None`: + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + if is_packed: + return None + return ui.text("- ", name) + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` + +![my_packing_list3](../_assets/conditional_rendering3.png) + +If `is_packed` is `True`, the component will return nothing. Otherwise, it will return a component to render. + +In practice, returning `None` from a component is not common because it might surprise a developer trying to render it. More often, you would conditionally include or exclude the component in the parent component. The next section explains how to do that. + +## Conditionally including components + +In the previous example, you controlled which component would be returned by using an [`if`/`else` statement](https://docs.python.org/3/tutorial/controlflow.html#if-statements). This led to some code duplication. You can remove this duplication by conditionally including components. + +### Conditional ternary + +Python has a [ternary conditional](https://docs.python.org/3/reference/expressions.html#conditional-expressions) in the form: `a if condition else b`. This can simplify the `item` component. + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + return ui.text("- ", name + " ✅" if is_packed else name) + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` + +### Logical `and` operator + +Another common shortcut is the Python [logical `and` operator](https://docs.python.org/3/reference/expressions.html#and). Inside `deephaven.ui` components, it often comes up when you want to render a component when the condition is `True`, or render nothing otherwise. With `and`, you could conditionally render the checkmark only if `is_packed` is `True`: + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + return ui.text("- ", name, is_packed and " ✅") + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` + +A Python `and` expression returns the value of its right side (in our case, the checkmark) if the left side (our condition) is `True`. But if the condition is `False`, the whole expression becomes `False`. `deephaven.ui` considers `False` to be like `None` and does not render anything in its place. + +### Conditionally assigning to a variable + +When the shortcuts get in the way of writing plain code, try using an `if` statement and a variable. You can reassign variables, so start by providing the default content you want to display. Use an `if` statement to reassign an expression to `item_content` if `is_packed` is `True`. + +```python +from deephaven import ui + + +@ui.component +def item(name, is_packed): + item_content = name + if is_packed: + item_content = name + " ✅" + return ui.text("- ", item_content) + + +@ui.component +def packing_list(): + return ui.flex( + ui.heading("Packing list"), + item("Clothes", is_packed=True), + item("Shoes", is_packed=True), + item("Wallet", is_packed=False), + direction="column", + ) + + +my_packing_list = packing_list() +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index cce11e0b9..fbbb118d1 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -36,6 +36,10 @@ { "label": "Working with Tables", "path": "describing/work_with_tables.md" + }, + { + "label": "Conditional Rendering", + "path": "describing/conditional_rendering.md" } ] }, From a6d1aad183bb33bb7809bf4a4ff1528bf657331d Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:13:55 -0700 Subject: [PATCH 12/22] docs: Update First Component (#1065) https://deephaven.atlassian.net/browse/DOC-187 Fix typos and add images. --- .../ui/docs/_assets/your_first_component1.png | Bin 0 -> 13765 bytes .../ui/docs/_assets/your_first_component2.png | Bin 0 -> 27042 bytes .../ui/docs/describing/your_first_component.md | 8 ++++++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 plugins/ui/docs/_assets/your_first_component1.png create mode 100644 plugins/ui/docs/_assets/your_first_component2.png diff --git a/plugins/ui/docs/_assets/your_first_component1.png b/plugins/ui/docs/_assets/your_first_component1.png new file mode 100644 index 0000000000000000000000000000000000000000..530f5a4b4f72108f9d1beef30a2f9cb8c4de6021 GIT binary patch literal 13765 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 literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/_assets/your_first_component2.png b/plugins/ui/docs/_assets/your_first_component2.png new file mode 100644 index 0000000000000000000000000000000000000000..a779c55dc519a7897b64cb0d42a25aee893629c7 GIT binary patch literal 27042 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 H&%^!;s`, its heading `

      `, and an (abbreviated) table of contents as an ordered list `
        `. Markup like this, combined with CSS for style, and JavaScript for interactivity, lies behind every sidebar, avatar, modal, dropdown—every piece of UI you see on the Web. -`Deephaven.ui` lets you use Python code to write custom "components", resuable UI elements for your app. The table of contents code you saw above could be turned into a `table_of_contents` component you could render in the UI. +`Deephaven.ui` lets you use Python code to write custom "components", reusable UI elements for your app. The table of contents code you saw above could be turned into a `table_of_contents` component you could render in the UI. As your project grows, you will notice that many of your designs can be composed by reusing components you already wrote, speeding up your development. @@ -45,6 +45,8 @@ def table_of_contents(): my_table_of_contents = table_of_contents() ``` +![table_of_contents](../_assets/your_first_component1.png) + And here’s how to build a component: ### Step 1: Import deephaven.ui @@ -55,7 +57,7 @@ Your Python code must include this import: from deephaven import ui ``` -This allows you to acces the `@ui.component` annotation and all of the `deephaven.ui` components which you will use to build your component. +This allows you to access the `@ui.component` annotation and all of the `deephaven.ui` components which you will use to build your component. ### Step 2: Define the function @@ -96,6 +98,8 @@ def multiple_contents(): my_multiple_contents = multiple_contents() ``` +![multiple_contents](../_assets/your_first_component2.png) + ## Nesting and organizing components Components are regular Python functions, so you can keep multiple components in the same file. This is convenient when components are relatively small or tightly related to each other. If this file gets crowded, you can always move a component to a separate file. See [How do I import one Python script into another in the Deephaven IDE?](/core/docs/reference/community-questions/import-python-script) and [Modularizing Queries](/enterprise/docs/development/modularizing-queries) From 21e8c5db9d79c9631aaa1a62ccf4a29187af9cbe Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:15:31 -0700 Subject: [PATCH 13/22] docs: Component Rules (#1055) - DOC-204 --------- Co-authored-by: Mike Bender Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> Co-authored-by: JJ Brosnan <84038776+jjbrosnan@users.noreply.github.com> --- plugins/ui/docs/_assets/component_rules_1.png | Bin 0 -> 5017 bytes plugins/ui/docs/_assets/component_rules_2.png | Bin 0 -> 7684 bytes plugins/ui/docs/describing/component_rules.md | 130 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 4 files changed, 134 insertions(+) create mode 100644 plugins/ui/docs/_assets/component_rules_1.png create mode 100644 plugins/ui/docs/_assets/component_rules_2.png create mode 100644 plugins/ui/docs/describing/component_rules.md diff --git a/plugins/ui/docs/_assets/component_rules_1.png b/plugins/ui/docs/_assets/component_rules_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9a649aaa06598f20139f80b9f8423bd54ed8e1bf GIT binary patch literal 5017 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 literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/describing/component_rules.md b/plugins/ui/docs/describing/component_rules.md new file mode 100644 index 000000000..aabad3d85 --- /dev/null +++ b/plugins/ui/docs/describing/component_rules.md @@ -0,0 +1,130 @@ +# Component Rules + +This guide presents some important rules to remember for `deephaven.ui` components when writing queries. + +## Children and props + +Arguments passed to a component may be either `children` or `props`. `Children` are positional arguments passed to a `parent` component. `Props` are keyword arguments that determine the behavior and rendering style of the component. The `child` positional arguments must be passed first in the desired order. The `prop` keyword arguments can then be added in any order. Placing a `prop` before a `child` argument will cause the `child` to be out of order. + +```python +from deephaven import ui + +my_flex = ui.flex( + ui.heading("Heading"), + ui.button("Button"), + ui.text("Text"), + direction="column", + wrap=True, + width="200px", +) +``` + +![Children and props](../_assets/component_rules_1.png) + +In the above example, the `flex` component is the `parent`. It has three `children`: a `heading`, a `button`, and a `text` component. These `children` will be rendered inside the `flex`. It also has three props: `direction`, `wrap`, and `width`. These three props indicate that the flex should be rendered as a 200 pixel column with wrap enabled. + +## Comparison with JSX + +For developers familiar with React JSX, this example shows how `prop` and `child` arguments are specified in JSX. + +```html +Hello World +``` + +Here is the same component written in `deephaven.ui`. + +```python +my_component("Hello World", prop1="value1") +``` + +## Define your own children and props + +To define `children` and `props` for a custom component, add them as arguments to the component function. As a convention, you may declare the children using the `*` symbol to take any number of arguments. + +```python +from deephaven import ui + + +@ui.component +def custom_flex(*children, is_column): + return ui.flex( + ui.heading("My Component"), + children, + direction="column" if is_column else "row", + ) + + +my_custom_flex = custom_flex(ui.text("text"), ui.button("button"), is_column=True) +``` + +![Define your own children and props](../_assets/component_rules_2.png) + +## Component return values + +A `deephaven.ui` component usually returns a component. However, it may also return: + +- a list or tuple of components. +- `None` if it should perform logic but does not need to be rendered. +- a single value like a `string` or `int`. + +```python +from deephaven import ui + + +@ui.component +def return_component(): + return ui.text("component") + + +@ui.component +def list_of_components(): + return [ui.text("list"), ui.text("of"), ui.text("components")] + + +@ui.component +def return_tuple(): + return (ui.text("a"), ui.text("b")) + + +@ui.component +def return_none(): + print("return none") + return None + + +@ui.component +def return_string(): + return "string" + + +@ui.component +def return_int(): + return 1 + + +my_return_component = return_component() +my_list_of_components = list_of_components() +my_return_tuple = return_tuple() +my_return_none = return_none() +my_return_string = return_string() +my_return_int = return_int() +``` + +## Conditional return + +Return statements can be conditional in order to render different components based on inputs. + +```python +from deephaven import ui + + +@ui.component +def return_conditional(is_button): + if is_button: + return ui.button("button") + return ui.text("text") + + +my_button = return_conditional(True) +my_text = return_conditional(False) +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index fbbb118d1..0cb5d702f 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -33,6 +33,10 @@ "label": "Importing and Exporting Components", "path": "describing/importing_and_exporting_components.md" }, + { + "label": "Component Rules", + "path": "describing/component_rules.md" + }, { "label": "Working with Tables", "path": "describing/work_with_tables.md" From ef7e74198460588d31b9b31a2acad21741d140ff Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Mon, 16 Dec 2024 16:36:00 -0500 Subject: [PATCH 14/22] feat: add undefined type option (#1026) - Closes #549 - Add a new `Undefined` object for nullable props - Nullable props can be declared with `_nullable_props` passed to `component_element`/`BaseElement` - For these props, `None` will be translated to `null` and `Undefined` will not exist in the props object --------- Co-authored-by: Mike Bender Co-authored-by: Brian Ingles Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> --- plugins/ui/docs/architecture.md | 19 +++++ plugins/ui/docs/components/picker.md | 32 +++++++- .../ui/src/deephaven/ui/_internal/utils.py | 81 ++++++++++++++----- .../src/deephaven/ui/components/calendar.py | 11 +-- .../src/deephaven/ui/components/combo_box.py | 12 ++- .../src/deephaven/ui/components/date_field.py | 10 ++- .../deephaven/ui/components/date_picker.py | 10 ++- .../ui/components/date_range_picker.py | 12 ++- .../ui/src/deephaven/ui/components/picker.py | 10 ++- .../deephaven/ui/components/radio_group.py | 12 ++- .../deephaven/ui/components/range_calendar.py | 17 ++-- .../ui/src/deephaven/ui/components/tabs.py | 8 +- .../src/deephaven/ui/components/text_area.py | 7 +- .../src/deephaven/ui/components/text_field.py | 7 +- .../src/deephaven/ui/components/time_field.py | 10 ++- .../src/deephaven/ui/elements/BaseElement.py | 17 +++- plugins/ui/src/deephaven/ui/types/types.py | 29 +++++++ plugins/ui/test/deephaven/ui/test_types.py | 36 +++++++++ plugins/ui/test/deephaven/ui/test_utils.py | 39 +++++++++ 19 files changed, 315 insertions(+), 64 deletions(-) create mode 100644 plugins/ui/test/deephaven/ui/test_types.py diff --git a/plugins/ui/docs/architecture.md b/plugins/ui/docs/architecture.md index 1da0c0fb3..b36c3cbc2 100644 --- a/plugins/ui/docs/architecture.md +++ b/plugins/ui/docs/architecture.md @@ -31,6 +31,25 @@ def my_app(): app = my_app() ``` +## Props + +For almost all components, Python positional arguments are mapped to React children and keyword-only arguments are mapped to React props. Rarely, some arguments are positional and keyword. For example, in `contextual_help`, the footer argument is positional and keyword since it has a default of `None`. It will still be passed as a child. + +```python +from deephaven import ui + + +my_prop_variations = ui.flex("Hello", "World", direction="column") +footer_as_positional = ui.contextual_help("Heading", "Content", "Footer") +footer_as_keyword = ui.contextual_help("Heading", "Content", footer="Footer") +``` + +The strings `"Hello"` and `"World"` will be passed to flex as a child, while `"column"` is passed as the value to the `direction` prop. `"Footer"` is passed as a child even if it's used in a keyword-manner. For more information, see the [`contextual_help`](./components/contextual_help.md) doc. + +### Handling `null` vs `undefined` + +Python has one nullish value (`None`) while JavaScript has two (`null` and `undefined`). In most cases, a distinction is not needed and `None` is mapped to `undefined`. However, for some props, such as `picker`'s `selected_value`, we differentiate between `null` and `undefined` with `None` and `ui.types.Undefined`, respectively. A list of props that need the distinction is passed through the `_nullable_props` parameter to `component_element`/`BaseElement`. + ## Rendering When you call a function decorated by `@ui.component`, it will return an `Element` object that references the function it is decorated by; that is to say, the function does _not_ run immediately. The function runs when the `Element` is rendered by the client, and the result is sent back to the client. This allows the `@ui.component` decorator to execute the function with the appropriate rendering context. The client must also set the initial state before rendering, allowing the client to persist the state and re-render in the future. diff --git a/plugins/ui/docs/components/picker.md b/plugins/ui/docs/components/picker.md index ad375fdc0..0720dddb5 100644 --- a/plugins/ui/docs/components/picker.md +++ b/plugins/ui/docs/components/picker.md @@ -10,7 +10,7 @@ from deephaven import ui @ui.component def ui_picker_basic(): - option, set_option = ui.use_state("") + option, set_option = ui.use_state(None) return ui.picker( "Rarely", @@ -182,6 +182,36 @@ def ui_picker_selected_key_examples(): my_picker_selected_key_examples = ui_picker_selected_key_examples() ``` +Providing a value to the `selected_key` prop runs the component in "controlled" mode where the selection state is driven from the provided value. A value of `None` can be used to indicate nothing is selected while keeping the component in controlled mode. The default value is `ui.types.Undefined`, which causes the component to run in "uncontrolled" mode. + +```python +from deephaven import ui + + +@ui.component +def ui_picker_key_variations(): + controlled_value, set_controlled_value = ui.use_state(None) + + return [ + ui.picker( + "Option 1", + "Option 2", + selected_key=controlled_value, + on_change=set_controlled_value, + label="Key: Controlled", + ), + ui.picker( + "Option 1", + "Option 2", + on_change=lambda x: print(x), + label="Key: Undefined", + ), + ] + + +my_picker_key_variations = ui_picker_key_variations() +``` + ## HTML Forms diff --git a/plugins/ui/src/deephaven/ui/_internal/utils.py b/plugins/ui/src/deephaven/ui/_internal/utils.py index 22a3ec1c5..633fbf850 100644 --- a/plugins/ui/src/deephaven/ui/_internal/utils.py +++ b/plugins/ui/src/deephaven/ui/_internal/utils.py @@ -5,7 +5,6 @@ import sys from functools import partial from deephaven.time import to_j_instant, to_j_zdt, to_j_local_date, to_j_local_time -from deephaven.dtypes import ZonedDateTime, Instant from ..types import ( Date, @@ -15,6 +14,7 @@ JavaTime, LocalDateConvertible, LocalDate, + Undefined, ) T = TypeVar("T") @@ -36,6 +36,19 @@ } +def is_nullish(value: Any) -> bool: + """ + Check if a value is nullish (`None` or `Undefined`). + + Args: + value: The value to check. + + Returns: + Checks if the value is nullish. + """ + return value is None or value is Undefined + + def get_component_name(component: Any) -> str: """ Get the name of the component @@ -138,7 +151,9 @@ def dict_to_camel_case( return convert_dict_keys(dict, to_camel_case) -def dict_to_react_props(dict: dict[str, Any]) -> dict[str, Any]: +def dict_to_react_props( + dict: dict[str, Any], _nullable_props: list[str] = [] +) -> dict[str, Any]: """ Convert a dict to React-style prop names ready for the web. Converts snake_case to camelCase with the exception of special props like `UNSAFE_` or `aria_` props. @@ -150,20 +165,36 @@ def dict_to_react_props(dict: dict[str, Any]) -> dict[str, Any]: Returns: The React props dict. """ - return convert_dict_keys(remove_empty_keys(dict), to_react_prop_case) + return convert_dict_keys( + remove_empty_keys(dict, _nullable_props), to_react_prop_case + ) -def remove_empty_keys(dict: dict[str, Any]) -> dict[str, Any]: +def remove_empty_keys( + dict: dict[str, Any], _nullable_props: list[str] = [] +) -> dict[str, Any]: """ - Remove keys from a dict that have a value of None. + Remove keys from a dict that have a value of None, or Undefined if in _nullable_props. Args: dict: The dict to remove keys from. + _nullable_props: A list of props that get removed if they are Undefined (instead of None). Returns: The dict with keys removed. """ - return {k: v for k, v in dict.items() if v is not None} + cleaned = {} + for k, v in dict.items(): + if k in _nullable_props: + if v is not Undefined: + cleaned[k] = v + else: + if v is Undefined: + raise ValueError("UndefinedType found in a non-nullable prop.") + elif v is not None: + cleaned[k] = v + + return cleaned def _wrapped_callable( @@ -478,10 +509,10 @@ def _get_first_set_key(props: dict[str, Any], sequence: Sequence[str]) -> str | sequence: The sequence to check. Returns: - The first non-None prop, or None if all props are None. + The first non-nullish prop, or None if all props are None. """ for key in sequence: - if props.get(key) is not None: + if not is_nullish(props.get(key)): return key return None @@ -523,9 +554,14 @@ def _prioritized_date_callable_converter( """ first_set_key = _get_first_set_key(props, priority) + # type ignore because pyright is not recognizing the nullish check return ( - _jclass_date_converter(_date_or_range(props[first_set_key])) - if first_set_key is not None + _jclass_date_converter( + _date_or_range( + props[first_set_key] # pyright: ignore[reportGeneralTypeIssues] + ) + ) + if not is_nullish(first_set_key) else default_converter ) @@ -552,9 +588,12 @@ def _prioritized_time_callable_converter( """ first_set_key = _get_first_set_key(props, priority) + # type ignore because pyright is not recognizing the nullish check return ( - _jclass_time_converter(props[first_set_key]) - if first_set_key is not None + _jclass_time_converter( + props[first_set_key] # pyright: ignore[reportGeneralTypeIssues] + ) + if not is_nullish(first_set_key) else default_converter ) @@ -666,11 +705,11 @@ def convert_date_props( The converted props. """ for key in simple_date_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = _convert_to_java_date(props[key]) for key in date_range_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = convert_date_range(props[key], _convert_to_java_date) # the simple props must be converted before this to simplify the callable conversion @@ -680,25 +719,25 @@ def convert_date_props( # Local Dates will default to DAY but we need to default to SECOND for the other types if ( granularity_key is not None - and props.get(granularity_key) is None + and is_nullish(props.get(granularity_key)) and converter != to_j_local_date ): props[granularity_key] = "SECOND" # now that the converter is set, we can convert simple props to strings for key in simple_date_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = str(props[key]) # and convert the date range props to strings for key in date_range_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = convert_date_range(props[key], str) # wrap the date callable with the convert # if there are date range props, we need to convert as a date range for key in callable_date_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): if not callable(props[key]): raise TypeError(f"{key} must be a callable") if len(date_range_props) > 0: @@ -730,7 +769,7 @@ def convert_time_props( The converted props. """ for key in simple_time_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = _convert_to_java_time(props[key]) # the simple props must be converted before this to simplify the callable conversion @@ -738,12 +777,12 @@ def convert_time_props( # now that the converter is set, we can convert simple props to strings for key in simple_time_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): props[key] = str(props[key]) # wrap the date callable with the convert for key in callable_time_props: - if props.get(key) is not None: + if not is_nullish(props.get(key)): if not callable(props[key]): raise TypeError(f"{key} must be a callable") props[key] = _wrap_time_callable(props[key], converter) diff --git a/plugins/ui/src/deephaven/ui/components/calendar.py b/plugins/ui/src/deephaven/ui/components/calendar.py index 4e3e1d76f..400c54494 100644 --- a/plugins/ui/src/deephaven/ui/components/calendar.py +++ b/plugins/ui/src/deephaven/ui/components/calendar.py @@ -15,10 +15,9 @@ from ..elements import Element from .._internal.utils import create_props, convert_date_props, wrap_local_date_callable -from ..types import Date, LocalDateConvertible +from ..types import Date, LocalDateConvertible, Undefined, UndefinedType from .basic import component_element from .make_component import make_component -from deephaven.time import dh_now CalendarElement = Element @@ -43,6 +42,8 @@ "default_focused_value", ] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_calendar_props( props: dict[str, Any], @@ -75,8 +76,8 @@ def _convert_calendar_props( @make_component def calendar( - value: Date | None = None, - default_value: Date | None = None, + value: Date | None | UndefinedType = Undefined, + default_value: Date | None | UndefinedType = Undefined, focused_value: Date | None = None, default_focused_value: Date | None = None, min_value: Date | None = None, @@ -213,4 +214,4 @@ def calendar( _convert_calendar_props(props) - return component_element("Calendar", **props) + return component_element("Calendar", _nullable_props=_NULLABLE_PROPS, **props) diff --git a/plugins/ui/src/deephaven/ui/components/combo_box.py b/plugins/ui/src/deephaven/ui/components/combo_box.py index 80defb967..e7ddadc60 100644 --- a/plugins/ui/src/deephaven/ui/components/combo_box.py +++ b/plugins/ui/src/deephaven/ui/components/combo_box.py @@ -29,7 +29,7 @@ from .item_table_source import ItemTableSource from ..elements import BaseElement, Element from .._internal.utils import create_props, unpack_item_table_source -from ..types import Key +from ..types import Key, Undefined, UndefinedType from .basic import component_element ComboBoxElement = BaseElement @@ -42,6 +42,8 @@ "title_column", } +_NULLABLE_PROPS = ["selected_key"] + def combo_box( *children: Item | SectionElement | Table | PartitionedTable | ItemTableSource, @@ -58,7 +60,7 @@ def combo_box( default_input_value: str | None = None, allows_custom_value: bool | None = None, disabled_keys: list[Key] | None = None, - selected_key: Key | None = None, + selected_key: Key | None | UndefinedType = Undefined, default_selected_key: Key | None = None, is_disabled: bool | None = None, is_read_only: bool | None = None, @@ -75,7 +77,7 @@ def combo_box( necessity_indicator: NecessityIndicator | None = None, contextual_help: Element | None = None, on_open_change: Callable[[bool, MenuTriggerAction], None] | None = None, - on_selection_change: Callable[[Key], None] | None = None, + on_selection_change: Callable[[Key | None], None] | None = None, on_change: Callable[[Key], None] | None = None, on_input_change: Callable[[str], None] | None = None, on_focus: Callable[[FocusEventCallable], None] | None = None, @@ -241,4 +243,6 @@ def combo_box( children, props = unpack_item_table_source(children, props, SUPPORTED_SOURCE_ARGS) - return component_element("ComboBox", *children, **props) + return component_element( + "ComboBox", *children, _nullable_props=_NULLABLE_PROPS, **props + ) diff --git a/plugins/ui/src/deephaven/ui/components/date_field.py b/plugins/ui/src/deephaven/ui/components/date_field.py index b24451fdb..14fecfd08 100644 --- a/plugins/ui/src/deephaven/ui/components/date_field.py +++ b/plugins/ui/src/deephaven/ui/components/date_field.py @@ -25,7 +25,7 @@ create_props, convert_date_props, ) -from ..types import Date, Granularity +from ..types import Date, Granularity, Undefined, UndefinedType from .basic import component_element from .make_component import make_component from deephaven.time import dh_now @@ -47,6 +47,8 @@ # The priority of the date props to determine the format of the date passed to the callable date props _DATE_PROPS_PRIORITY = ["value", "default_value", "placeholder_value"] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_date_field_props( props: dict[str, Any], @@ -76,8 +78,8 @@ def _convert_date_field_props( @make_component def date_field( placeholder_value: Date | None = dh_now(), - value: Date | None = None, - default_value: Date | None = None, + value: Date | None | UndefinedType = Undefined, + default_value: Date | None | UndefinedType = Undefined, min_value: Date | None = None, max_value: Date | None = None, # TODO (issue # 698) we need to implement unavailable_values @@ -261,4 +263,4 @@ def date_field( _convert_date_field_props(props) - return component_element("DateField", **props) + return component_element("DateField", _nullable_props=_NULLABLE_PROPS, **props) diff --git a/plugins/ui/src/deephaven/ui/components/date_picker.py b/plugins/ui/src/deephaven/ui/components/date_picker.py index 1763f8c8b..305248db6 100644 --- a/plugins/ui/src/deephaven/ui/components/date_picker.py +++ b/plugins/ui/src/deephaven/ui/components/date_picker.py @@ -28,7 +28,7 @@ convert_date_props, convert_list_prop, ) -from ..types import Date, Granularity +from ..types import Date, Granularity, Undefined, UndefinedType from .basic import component_element from .make_component import make_component from deephaven.time import dh_now @@ -51,6 +51,8 @@ # The priority of the date props to determine the format of the date passed to the callable date props _DATE_PROPS_PRIORITY = ["value", "default_value", "placeholder_value"] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_date_picker_props( props: dict[str, Any], @@ -80,8 +82,8 @@ def _convert_date_picker_props( @make_component def date_picker( placeholder_value: Date | None = dh_now(), - value: Date | None = None, - default_value: Date | None = None, + value: Date | None | UndefinedType = Undefined, + default_value: Date | None | UndefinedType = Undefined, min_value: Date | None = None, max_value: Date | None = None, # TODO (issue # 698) we need to implement unavailable_values @@ -280,4 +282,4 @@ def date_picker( # [unavailable_values], # ) - return component_element("DatePicker", **props) + return component_element("DatePicker", _nullable_props=_NULLABLE_PROPS, **props) diff --git a/plugins/ui/src/deephaven/ui/components/date_range_picker.py b/plugins/ui/src/deephaven/ui/components/date_range_picker.py index 86768abbc..6f8a1f99b 100644 --- a/plugins/ui/src/deephaven/ui/components/date_range_picker.py +++ b/plugins/ui/src/deephaven/ui/components/date_range_picker.py @@ -28,7 +28,7 @@ convert_date_props, convert_list_prop, ) -from ..types import Date, Granularity, DateRange +from ..types import Date, Granularity, DateRange, Undefined, UndefinedType from .basic import component_element from .make_component import make_component from deephaven.time import dh_now @@ -49,6 +49,8 @@ # The priority of the date props to determine the format of the date passed to the callable date props _DATE_PROPS_PRIORITY = ["value", "default_value", "placeholder_value"] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_date_range_picker_props( props: dict[str, Any], @@ -78,8 +80,8 @@ def _convert_date_range_picker_props( @make_component def date_range_picker( placeholder_value: Date | None = dh_now(), - value: DateRange | None = None, - default_value: DateRange | None = None, + value: DateRange | None | UndefinedType = Undefined, + default_value: DateRange | None | UndefinedType = Undefined, min_value: Date | None = None, max_value: Date | None = None, # TODO (issue # 698) we need to implement unavailable_values @@ -278,4 +280,6 @@ def date_range_picker( _convert_date_range_picker_props(props) - return component_element("DateRangePicker", **props) + return component_element( + "DateRangePicker", _nullable_props=_NULLABLE_PROPS, **props + ) diff --git a/plugins/ui/src/deephaven/ui/components/picker.py b/plugins/ui/src/deephaven/ui/components/picker.py index 1f3fa4471..f24f1c96b 100644 --- a/plugins/ui/src/deephaven/ui/components/picker.py +++ b/plugins/ui/src/deephaven/ui/components/picker.py @@ -8,7 +8,7 @@ from .item_table_source import ItemTableSource from ..elements import BaseElement, Element from .._internal.utils import create_props, unpack_item_table_source -from ..types import Key +from ..types import Key, Undefined, UndefinedType from .types import ( AlignSelf, CSSProperties, @@ -35,11 +35,13 @@ "title_column", } +_NULLABLE_PROPS = ["selected_key"] + def picker( *children: Item | SectionElement | Table | PartitionedTable | ItemTableSource, default_selected_key: Key | None = None, - selected_key: Key | None = None, + selected_key: Key | None | UndefinedType = Undefined, on_selection_change: Callable[[Key], None] | None = None, on_change: Callable[[Key], None] | None = None, is_quiet: bool | None = None, @@ -227,4 +229,6 @@ def picker( children, props = unpack_item_table_source(children, props, SUPPORTED_SOURCE_ARGS) - return component_element("Picker", *children, **props) + return component_element( + "Picker", *children, _nullable_props=_NULLABLE_PROPS, **props + ) diff --git a/plugins/ui/src/deephaven/ui/components/radio_group.py b/plugins/ui/src/deephaven/ui/components/radio_group.py index 2567fe9ce..4477f6f23 100644 --- a/plugins/ui/src/deephaven/ui/components/radio_group.py +++ b/plugins/ui/src/deephaven/ui/components/radio_group.py @@ -19,15 +19,19 @@ ) from .basic import component_element from ..elements import Element +from ..types import Undefined, UndefinedType from .._internal.utils import create_props +_NULLABLE_PROPS = ["value", "default_value"] + + def radio_group( *children: Any, is_emphasized: bool | None = None, orientation: Orientation = "vertical", - value: str | None = None, - default_value: str | None = None, + value: str | None | UndefinedType = Undefined, + default_value: str | None | UndefinedType = Undefined, is_disabled: bool | None = None, is_read_only: bool | None = None, name: str | None = None, @@ -174,4 +178,6 @@ def radio_group( children, props = create_props(locals()) - return component_element(f"RadioGroup", *children, **props) + return component_element( + f"RadioGroup", *children, _nullable_props=_NULLABLE_PROPS, **props + ) diff --git a/plugins/ui/src/deephaven/ui/components/range_calendar.py b/plugins/ui/src/deephaven/ui/components/range_calendar.py index a3082fa83..f006e3f9e 100644 --- a/plugins/ui/src/deephaven/ui/components/range_calendar.py +++ b/plugins/ui/src/deephaven/ui/components/range_calendar.py @@ -15,10 +15,15 @@ from ..elements import Element from .._internal.utils import create_props, convert_date_props, wrap_local_date_callable -from ..types import Date, LocalDateConvertible, DateRange +from ..types import ( + Date, + LocalDateConvertible, + DateRange, + Undefined, + UndefinedType, +) from .basic import component_element from .make_component import make_component -from deephaven.time import dh_now RangeCalendarElement = Element @@ -41,6 +46,8 @@ "default_focused_value", ] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_range_calendar_props( props: dict[str, Any], @@ -73,8 +80,8 @@ def _convert_range_calendar_props( @make_component def range_calendar( - value: DateRange | None = None, - default_value: DateRange | None = None, + value: DateRange | None | UndefinedType = Undefined, + default_value: DateRange | None | UndefinedType = Undefined, focused_value: Date | None = None, default_focused_value: Date | None = None, min_value: Date | None = None, @@ -211,4 +218,4 @@ def range_calendar( _convert_range_calendar_props(props) - return component_element("RangeCalendar", **props) + return component_element("RangeCalendar", _nullable_props=_NULLABLE_PROPS, **props) diff --git a/plugins/ui/src/deephaven/ui/components/tabs.py b/plugins/ui/src/deephaven/ui/components/tabs.py index ebed99672..354db8d48 100644 --- a/plugins/ui/src/deephaven/ui/components/tabs.py +++ b/plugins/ui/src/deephaven/ui/components/tabs.py @@ -14,12 +14,15 @@ Position, ) -from ..types import Key, TabDensity +from ..types import Key, TabDensity, Undefined, UndefinedType from ..elements import BaseElement TabElement = BaseElement +_NULLABLE_PROPS = ["selected_key"] + + def tabs( *children: Any, disabled_keys: Iterable[Key] | None = None, @@ -30,7 +33,7 @@ def tabs( keyboard_activation: KeyboardActivationType | None = "automatic", orientation: Orientation | None = "horizontal", disallow_empty_selection: bool | None = None, - selected_key: Key | None = None, + selected_key: Key | None | UndefinedType = Undefined, default_selected_key: Key | None = None, on_selection_change: Callable[[Key], None] | None = None, on_change: Callable[[Key], None] | None = None, @@ -231,4 +234,5 @@ def tabs( UNSAFE_class_name=UNSAFE_class_name, UNSAFE_style=UNSAFE_style, key=key, + _nullable_props=_NULLABLE_PROPS, ) diff --git a/plugins/ui/src/deephaven/ui/components/text_area.py b/plugins/ui/src/deephaven/ui/components/text_area.py index 67b394947..9df997110 100644 --- a/plugins/ui/src/deephaven/ui/components/text_area.py +++ b/plugins/ui/src/deephaven/ui/components/text_area.py @@ -25,12 +25,16 @@ from .types import IconTypes from .basic import component_element from ..elements import Element +from ..types import Undefined, UndefinedType from .icon import icon as icon_component +_NULLABLE_PROPS = ["icon"] + + def text_area( - icon: Element | IconTypes | None = None, + icon: Element | IconTypes | None | UndefinedType = Undefined, is_quiet: bool | None = None, is_disabled: bool | None = None, is_read_only: bool | None = None, @@ -271,4 +275,5 @@ def text_area( UNSAFE_class_name=UNSAFE_class_name, UNSAFE_style=UNSAFE_style, key=key, + _nullable_props=_NULLABLE_PROPS, ) diff --git a/plugins/ui/src/deephaven/ui/components/text_field.py b/plugins/ui/src/deephaven/ui/components/text_field.py index 52debc960..41985445c 100644 --- a/plugins/ui/src/deephaven/ui/components/text_field.py +++ b/plugins/ui/src/deephaven/ui/components/text_field.py @@ -24,10 +24,14 @@ ) from .basic import component_element from ..elements import Element +from ..types import Undefined, UndefinedType + + +_NULLABLE_PROPS = ["icon"] def text_field( - icon: Element | None = None, + icon: Element | None | UndefinedType = Undefined, is_quiet: bool | None = None, is_disabled: bool | None = None, is_read_only: bool | None = None, @@ -274,4 +278,5 @@ def text_field( UNSAFE_class_name=UNSAFE_class_name, UNSAFE_style=UNSAFE_style, key=key, + _nullable_props=_NULLABLE_PROPS, ) diff --git a/plugins/ui/src/deephaven/ui/components/time_field.py b/plugins/ui/src/deephaven/ui/components/time_field.py index db5d5a98d..7e4002d8c 100644 --- a/plugins/ui/src/deephaven/ui/components/time_field.py +++ b/plugins/ui/src/deephaven/ui/components/time_field.py @@ -25,7 +25,7 @@ create_props, convert_time_props, ) -from ..types import Time, TimeGranularity +from ..types import Time, TimeGranularity, Undefined, UndefinedType from .basic import component_element from .make_component import make_component @@ -44,6 +44,8 @@ # The priority of the time props to determine the format of the time passed to the callable time props _TIME_PROPS_PRIORITY = ["value", "default_value", "placeholder_value"] +_NULLABLE_PROPS = ["value", "default_value"] + def _convert_time_field_props( props: dict[str, Any], @@ -71,8 +73,8 @@ def _convert_time_field_props( @make_component def time_field( placeholder_value: Time | None = None, - value: Time | None = None, - default_value: Time | None = None, + value: Time | None | UndefinedType = Undefined, + default_value: Time | None | UndefinedType = Undefined, min_value: Time | None = None, max_value: Time | None = None, granularity: TimeGranularity | None = "SECOND", @@ -245,4 +247,4 @@ def time_field( _convert_time_field_props(props) - return component_element("TimeField", **props) + return component_element("TimeField", _nullable_props=_NULLABLE_PROPS, **props) diff --git a/plugins/ui/src/deephaven/ui/elements/BaseElement.py b/plugins/ui/src/deephaven/ui/elements/BaseElement.py index c6a425c0f..9cc5a0163 100644 --- a/plugins/ui/src/deephaven/ui/elements/BaseElement.py +++ b/plugins/ui/src/deephaven/ui/elements/BaseElement.py @@ -9,10 +9,23 @@ class BaseElement(Element): """ Base class for basic UI Elements that don't have any special rendering logic. Must provide a name for the element. + + Args: + name: The name of the element, e.g. "div", "span", "deephaven.ui.button", etc. + children: The children + key: The key for the element + _nullable_props: A list of props that can be nullable + props: The props for the element """ def __init__( - self, name: str, /, *children: Any, key: str | None = None, **props: Any + self, + name: str, + /, + *children: Any, + key: str | None = None, + _nullable_props: list[str] = [], + **props: Any, ): self._name = name self._key = key @@ -27,7 +40,7 @@ def __init__( # If there's only one child, we pass it as a single child, not a list # There are many React elements that expect only a single child, and will fail if they get a list (even if it only has one element) props["children"] = children[0] - self._props = dict_to_react_props(props) + self._props = dict_to_react_props(props, _nullable_props) @property def name(self) -> str: diff --git a/plugins/ui/src/deephaven/ui/types/types.py b/plugins/ui/src/deephaven/ui/types/types.py index 9fb60b648..314dd5527 100644 --- a/plugins/ui/src/deephaven/ui/types/types.py +++ b/plugins/ui/src/deephaven/ui/types/types.py @@ -573,3 +573,32 @@ class DateRange(TypedDict): ToastVariant = Literal["positive", "negative", "neutral", "info"] + + +_DISABLE_NULLISH_CONSTRUCTORS = False + + +class UndefinedType: + """ + Placeholder for undefined values. + """ + + def __init__(self) -> None: + if _DISABLE_NULLISH_CONSTRUCTORS: + raise NotImplementedError + + def __bool__(self) -> bool: + return False + + def __copy__(self) -> "UndefinedType": + return self + + def __deepcopy__(self, _: Any) -> "UndefinedType": + return self + + def __eq__(self, other: object) -> bool: + return isinstance(other, UndefinedType) or other is None + + +Undefined = UndefinedType() +_DISABLE_NULLISH_CONSTRUCTORS = True diff --git a/plugins/ui/test/deephaven/ui/test_types.py b/plugins/ui/test/deephaven/ui/test_types.py new file mode 100644 index 000000000..eb6086547 --- /dev/null +++ b/plugins/ui/test/deephaven/ui/test_types.py @@ -0,0 +1,36 @@ +import unittest + +from .BaseTest import BaseTestCase + + +class TypesTest(BaseTestCase): + def test_nullish_equivalences(self): + from deephaven.ui.types import Undefined + + self.assertEqual(Undefined, None) + self.assertEqual(None, Undefined) + + self.assertIsNot(Undefined, None) + self.assertIsNot(None, Undefined) + + def test_nullish_bool(self): + from deephaven.ui.types import Undefined + + self.assertFalse(Undefined) + + def test_nullish_init(self): + from deephaven.ui.types import UndefinedType + + with self.assertRaises(NotImplementedError): + UndefinedType() + + def test_copy(self): + from copy import copy, deepcopy + from deephaven.ui.types import Undefined + + self.assertIs(Undefined, copy(Undefined)) + self.assertIs(Undefined, deepcopy(Undefined)) + + +if __name__ == "__main__": + unittest.main() diff --git a/plugins/ui/test/deephaven/ui/test_utils.py b/plugins/ui/test/deephaven/ui/test_utils.py index 21872969e..51c6412a4 100644 --- a/plugins/ui/test/deephaven/ui/test_utils.py +++ b/plugins/ui/test/deephaven/ui/test_utils.py @@ -117,11 +117,50 @@ def test_dict_to_react_props(self): def test_remove_empty_keys(self): from deephaven.ui._internal.utils import remove_empty_keys + from deephaven.ui.types import Undefined self.assertDictEqual( remove_empty_keys({"foo": "bar", "biz": None, "baz": 0}), {"foo": "bar", "baz": 0}, ) + self.assertDictEqual( + remove_empty_keys( + { + "foo": "bar", + "biz": None, + "baz": 0, + "is_undefined": Undefined, + }, + _nullable_props={"is_undefined"}, + ), + {"foo": "bar", "baz": 0}, + ) + self.assertDictEqual( + remove_empty_keys( + { + "foo": "bar", + "biz": None, + "baz": 0, + "is_undefined": Undefined, + }, + _nullable_props={"biz", "is_undefined"}, + ), + {"foo": "bar", "biz": None, "baz": 0}, + ) + + with self.assertRaises(ValueError) as err: + remove_empty_keys( + { + "foo": "bar", + "biz": None, + "baz": 0, + "is_undefined": Undefined, + } + ) + self.assertEqual( + str(err.exception), + "UndefinedType found in a non-nullable prop.", + ) def test_wrap_callable(self): from deephaven.ui._internal.utils import wrap_callable From 28b5a5191e39495cf3c2e8e9d8e88f464747454d Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:01:24 -0700 Subject: [PATCH 15/22] docs: Using Hooks (#1056) https://deephaven.atlassian.net/browse/DOC-205 --------- Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> Co-authored-by: Mike Bender --- plugins/ui/docs/describing/use_hooks.md | 186 ++++++++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 2 files changed, 190 insertions(+) create mode 100644 plugins/ui/docs/describing/use_hooks.md diff --git a/plugins/ui/docs/describing/use_hooks.md b/plugins/ui/docs/describing/use_hooks.md new file mode 100644 index 000000000..15576ece8 --- /dev/null +++ b/plugins/ui/docs/describing/use_hooks.md @@ -0,0 +1,186 @@ +# Use Hooks + +Hooks are Python functions that isolate reusable parts of a component. Built-in `deephaven.ui` hooks allow you to manage state, cache values, synchronize with external systems, and much more. You can either use the built-in hooks or combine them to build your own. + +## Rules for Hooks + +Hooks are Python functions, but you need to follow two rules when using them. + +1. Only call hooks at the top level. + +Don’t call hooks inside loops, conditions, or nested functions. Instead, always use hooks at the top level of your `deephaven.ui` component function, before any early returns. By following this rule, you ensure that hooks are called in the same order each time a component renders. + +2. Only call hooks from components and custom hooks + +Don’t call hooks from regular Python functions. Instead, you can: + +- Call Hooks from `@ui.component` decorated functions. +- Call hooks from custom hooks. + +Following this rule ensures that all stateful logic in a component is clearly visible from its source code. + +## Built-in Hooks + +`deephaven.ui` has a large number of built-in hooks to help with the development of components. More details can be found in the [`hooks` section](../hooks/overview.md) of the documentation. + +### Use State Hook + +Call [`use_state`](../hooks/use_state.md) at the top level of your component to declare a state variable. + +```python +from deephaven import ui + + +@ui.component +def ui_counter(): + count, set_count = ui.use_state(0) + return ui.button(f"Pressed {count} times", on_press=lambda: set_count(count + 1)) + + +counter = ui_counter() +``` + +The `use_state` hook takes an optional parameter, the initial state. If this is omitted, it initializes to `None`. The hook returns two values: a state variable and a `set` function that lets you update the state and trigger a re-render. + +### Use Memo Hook + +Call [`use_memo`](../hooks/use_memo.md) to cache the result of a calculation, function, or operation. This is useful when you have a value that is expensive to compute and you want to avoid re-computing it on every render. + +```python +from deephaven import ui + + +@ui.component +def ui_todo_list(todos: list[str], filter: str): + filtered_todos = ui.use_memo( + lambda: [todo for todo in todos if filter in todo], [todos, filter] + ) + + return [ + ui.text(f"Showing {len(filtered_todos)} of {len(todos)} todos"), + *[ui.checkbox(todo) for todo in filtered_todos], + ] + + +result = ui_todo_list(["Do grocery shopping", "Walk the dog", "Do laundry"], "Do") +``` + +The `use_memo` hook takes two parameters: a `callable` that returns a value and a list of dependencies. When dependencies are changed, the value is computed once and then stored in the memoized value. The memoized value is returned on subsequent renders until the dependencies change. The memoized value is returned on subsequent renders until the dependencies change. + +### Use Effect Hook + +Call [`use_effect`](../hooks/use_effect.md) to synchronize a component with an external system. An effect runs when it is mounted or a dependency changes. An optional cleanup function runs when dependencies change or the component is unmounted. + +```python +from deephaven import ui + + +@ui.component +def ui_effect_example(): + def handle_mount(): + # effect prints "Mounted" once when component is first rendered + print("Mounted") + # cleanup function prints "Unmounted" when component is closed + return lambda: print("Unmounted") + + # Passing in an empty list for dependencies will run the effect only once when the component is mounted, and cleanup when the component is unmounted + ui.use_effect(handle_mount, []) + + return ui.text("Effect Example") + + +effect_example = ui_effect_example() +``` + +The `use_effect` hook takes two parameters: a callable and a list of dependencies. The callable may return a function for cleanup. + +### Use Callback Hook + +Call [`use_callback`](../hooks/use_callback.md) to memoize a callback function. This prevents unnecessary re-renders when the dependencies of the callback have not changed. + +```python +from deephaven import ui +import time + + +@ui.component +def ui_server(): + theme, set_theme = ui.use_state("red") + + create_server = ui.use_callback(lambda: {"host": "localhost"}, []) + + def connect(): + server = create_server() + print(f"Connecting to {server}") + time.sleep(0.5) + + ui.use_effect(connect, [create_server]) + + return ui.view( + ui.picker( + "red", + "orange", + "yellow", + label="Theme", + selected_key=theme, + on_change=set_theme, + ), + padding="size-100", + background_color=theme, + ) + + +my_server = ui_server() +``` + +The `use_callback` hook takes two parameters: a callable and a list of dependencies. It returns a memoized callback. The memoized callback is returned on subsequent renders until the dependencies change. + +## Build your own hooks + +When you have reusable logic involving one or more hooks, you may want to write a custom hook to encapsulate that logic. A hook is a Python function that follows these guidelines: + +- Hooks can call other hooks, but usage of hooks within hooks follows the same rules as using hooks within components. +- Custom hooks should start with the word `use` to indicate that is a hook and may contain component state and effects. + +### Example: Extracting the `use_server` hook + +Look back at the code example for the `use_callback` hook. The component uses two hooks to connect to a server. This logic can be extracted into a `use_server` hook to make it reusable by other components. + +```python +from deephaven import ui +import time + +# Custom hook +def use_server(): + create_server = ui.use_callback(lambda: {"host": "localhost"}, []) + + def connect(): + server = create_server() + print(f"Connecting to {server}") + time.sleep(0.5) + + ui.use_effect(connect, [create_server]) + + +@ui.component +def ui_server(): + theme, set_theme = ui.use_state("red") + + use_server() + + return ui.view( + ui.picker( + "red", + "orange", + "yellow", + label="Theme", + selected_key=theme, + on_change=set_theme, + ), + padding="size-100", + background_color=theme, + ) + + +my_server = ui_server() +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index 0cb5d702f..107df561c 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -37,6 +37,10 @@ "label": "Component Rules", "path": "describing/component_rules.md" }, + { + "label": "Using Hooks", + "path": "describing/use_hooks.md" + }, { "label": "Working with Tables", "path": "describing/work_with_tables.md" From 7c83ec256d237736d6eee6be6972b503e77b925f Mon Sep 17 00:00:00 2001 From: ethanalvizo <55671206+ethanalvizo@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:17:31 -0500 Subject: [PATCH 16/22] feat: ui.logic button (#1050) Closes #941 --------- Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> --- plugins/ui/docs/components/logic_button.md | 59 +++++ plugins/ui/docs/sidebar.json | 4 + .../src/deephaven/ui/components/__init__.py | 2 + .../deephaven/ui/components/logic_button.py | 233 ++++++++++++++++++ .../ui/src/js/src/elements/LogicButton.tsx | 18 ++ plugins/ui/src/js/src/elements/index.ts | 1 + .../js/src/elements/model/ElementConstants.ts | 1 + plugins/ui/src/js/src/widget/WidgetUtils.tsx | 2 + 8 files changed, 320 insertions(+) create mode 100644 plugins/ui/docs/components/logic_button.md create mode 100644 plugins/ui/src/deephaven/ui/components/logic_button.py create mode 100644 plugins/ui/src/js/src/elements/LogicButton.tsx diff --git a/plugins/ui/docs/components/logic_button.md b/plugins/ui/docs/components/logic_button.md new file mode 100644 index 000000000..7186813ed --- /dev/null +++ b/plugins/ui/docs/components/logic_button.md @@ -0,0 +1,59 @@ +# Logic Button + +A Logic Button shows an operator in a boolean logic sequence. + +## Example + +```python +from deephaven import ui + +my_logic_button_basic = ui.logic_button("Or", variant="or") +``` + +## Events + +Logic buttons handles user interaction through the `on_press` prop. + +```python +from deephaven import ui + + +@ui.component +def ui_toggle_logic_button(): + variant, set_variant = ui.use_state("or") + + return ui.logic_button( + variant, + variant=variant, + on_press=lambda: set_variant("and" if variant == "or" else "or"), + ) + + +my_toggle_logic_button = ui_toggle_logic_button() +``` + +## Variants + +```python +from deephaven import ui + + +@ui.component +def ui_logic_button_variants(): + + return [ + ui.logic_button("Or", variant="or"), + ui.logic_button("And", variant="and"), + ] + + +my_logic_button_variants = ui_logic_button_variants() +``` + +## Disabled state + +```python +from deephaven import ui + +my_logic_button_disabled = ui.logic_button("Or", variant="or", is_disabled=True) +``` diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index 107df561c..ccc492b52 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -166,6 +166,10 @@ "label": "list_view", "path": "components/list_view.md" }, + { + "label": "logic_button", + "path": "components/logic_button.md" + }, { "label": "markdown", "path": "components/markdown.md" diff --git a/plugins/ui/src/deephaven/ui/components/__init__.py b/plugins/ui/src/deephaven/ui/components/__init__.py index 80fcdf5bc..2702cd42a 100644 --- a/plugins/ui/src/deephaven/ui/components/__init__.py +++ b/plugins/ui/src/deephaven/ui/components/__init__.py @@ -36,6 +36,7 @@ from .list_action_group import list_action_group from .list_action_menu import list_action_menu from .list_view import list_view +from .logic_button import logic_button from .make_component import make_component as component from .markdown import markdown from .meter import meter @@ -108,6 +109,7 @@ "list_view", "list_action_group", "list_action_menu", + "logic_button", "html", "markdown", "meter", diff --git a/plugins/ui/src/deephaven/ui/components/logic_button.py b/plugins/ui/src/deephaven/ui/components/logic_button.py new file mode 100644 index 000000000..d836bdd0e --- /dev/null +++ b/plugins/ui/src/deephaven/ui/components/logic_button.py @@ -0,0 +1,233 @@ +from __future__ import annotations +from typing import Any, Callable +from .types import ( + # Accessibility + AriaExpanded, + AriaHasPopup, + AriaPressed, + # Events + ButtonType, + FocusEventCallable, + KeyboardEventCallable, + PressEventCallable, + StaticColor, + # Layout + AlignSelf, + CSSProperties, + DimensionValue, + JustifySelf, + LayoutFlex, + Position, +) +from .basic import component_element +from ..elements import Element + + +def logic_button( + *children: Any, + variant: str | None = None, + is_disabled: bool | None = None, + auto_focus: bool | None = None, + type: ButtonType = "button", + on_press: PressEventCallable | None = None, + on_press_start: PressEventCallable | None = None, + on_press_end: PressEventCallable | None = None, + on_press_change: Callable[[bool], None] | None = None, + on_press_up: PressEventCallable | None = None, + on_focus: FocusEventCallable | None = None, + on_blur: FocusEventCallable | None = None, + on_focus_change: Callable[[bool], None] | None = None, + on_key_down: KeyboardEventCallable | None = None, + on_key_up: KeyboardEventCallable | None = None, + flex: LayoutFlex | None = None, + flex_grow: float | None = None, + flex_shrink: float | None = None, + flex_basis: DimensionValue | None = None, + align_self: AlignSelf | None = None, + justify_self: JustifySelf | None = None, + order: int | None = None, + grid_area: str | None = None, + grid_column: str | None = None, + grid_row: str | None = None, + grid_column_start: str | None = None, + grid_column_end: str | None = None, + grid_row_start: str | None = None, + grid_row_end: str | None = None, + margin: DimensionValue | None = None, + margin_top: DimensionValue | None = None, + margin_bottom: DimensionValue | None = None, + margin_start: DimensionValue | None = None, + margin_end: DimensionValue | None = None, + margin_x: DimensionValue | None = None, + margin_y: DimensionValue | None = None, + width: DimensionValue | None = None, + height: DimensionValue | None = None, + min_width: DimensionValue | None = None, + min_height: DimensionValue | None = None, + max_width: DimensionValue | None = None, + max_height: DimensionValue | None = None, + position: Position | None = None, + top: DimensionValue | None = None, + bottom: DimensionValue | None = None, + left: DimensionValue | None = None, + right: DimensionValue | None = None, + start: DimensionValue | None = None, + end: DimensionValue | None = None, + z_index: int | None = None, + is_hidden: bool | None = None, + id: str | None = None, + exclude_from_tab_order: bool | None = None, + aria_expanded: AriaExpanded | None = None, + aria_haspopup: AriaHasPopup | None = None, + aria_controls: str | None = None, + aria_label: str | None = None, + aria_labelledby: str | None = None, + aria_describedby: str | None = None, + aria_pressed: AriaPressed | None = None, + aria_details: str | None = None, + UNSAFE_class_name: str | None = None, + UNSAFE_style: CSSProperties | None = None, + key: str | None = None, +) -> Element: + """ + + A LogicButton shows an operator in a boolean logic sequence. + + Args: + *children: The children to render inside the button. + variant: The variant of the button. (default: "primary") + is_disabled: Whether the button is disabled. + auto_focus: Whether the button should automatically get focus when the page loads. + type: The type of button to render. (default: "button") + on_press: Function called when the button is pressed. + on_press_start: Function called when the button is pressed. + on_press_end: Function called when a press interaction ends, either over the target or when the pointer leaves the target. + on_press_up: Function called when the button is released. + on_press_change: Function called when the press state changes. + on_focus: Function called when the button receives focus. + on_blur: Function called when the button loses focus. + on_focus_change: Function called when the focus state changes. + on_key_down: Function called when a key is pressed. + on_key_up: Function called when a key is released. + flex: When used in a flex layout, specifies how the element will grow or shrink to fit the space available. + flex_grow: When used in a flex layout, specifies how much the element will grow to fit the space available. + flex_shrink: When used in a flex layout, specifies how much the element will shrink to fit the space available. + flex_basis: When used in a flex layout, specifies the initial size of the element. + align_self: Overrides the align_items property of a flex or grid container. + justify_self: Specifies how the element is justified inside a flex or grid container. + order: The layout order for the element within a flex or grid container. + grid_area: The name of the grid area to place the element in. + grid_row: The name of the grid row to place the element in. + grid_row_start: The name of the grid row to start the element in. + grid_row_end: The name of the grid row to end the element in. + grid_column: The name of the grid column to place the element in. + grid_column_start: The name of the grid column to start the element in. + grid_column_end: The name of the grid column to end the element in. + margin: The margin to apply around the element. + margin_top: The margin to apply above the element. + margin_bottom: The margin to apply below the element. + margin_start: The margin to apply before the element. + margin_end: The margin to apply after the element. + margin_x: The margin to apply to the left and right of the element. + margin_y: The margin to apply to the top and bottom of the element. + width: The width of the element. + height: The height of the element. + min_width: The minimum width of the element. + min_height: The minimum height of the element. + max_width: The maximum width of the element. + max_height: The maximum height of the element. + position: Specifies how the element is positioned. + top: The distance from the top of the containing element. + bottom: The distance from the bottom of the containing element. + start: The distance from the start of the containing element. + end: The distance from the end of the containing element. + left: The distance from the left of the containing element. + right: The distance from the right of the containing element. + z_index: The stack order of the element. + is_hidden: Whether the element is hidden. + id: A unique identifier for the element. + exclude_from_tab_order: Whether the element should be excluded from the tab order. + aria_expanded: Whether the element is expanded. + aria_haspopup: Whether the element has a popup. + aria_controls: The id of the element that the element controls. + aria_label: The label for the element. + aria_labelledby: The id of the element that labels the element. + aria_describedby: The id of the element that describes the element. + aria_pressed: Whether the element is pressed. + aria_details: The details for the element. + UNSAFE_class_name: A CSS class to apply to the element. + UNSAFE_style: A CSS style to apply to the element. + key: A unique identifier used by React to render elements in a list. + + Returns: + The rendered toggle button element. + + """ + + return component_element( + "LogicButton", + *children, + variant=variant, + is_disabled=is_disabled, + type=type, + auto_focus=auto_focus, + on_press=on_press, + on_press_start=on_press_start, + on_press_end=on_press_end, + on_press_change=on_press_change, + on_press_up=on_press_up, + on_focus=on_focus, + on_blur=on_blur, + on_focus_change=on_focus_change, + on_key_down=on_key_down, + on_key_up=on_key_up, + flex=flex, + flex_grow=flex_grow, + flex_shrink=flex_shrink, + flex_basis=flex_basis, + align_self=align_self, + justify_self=justify_self, + order=order, + grid_area=grid_area, + grid_column=grid_column, + grid_row=grid_row, + grid_column_start=grid_column_start, + grid_column_end=grid_column_end, + grid_row_start=grid_row_start, + grid_row_end=grid_row_end, + margin=margin, + margin_top=margin_top, + margin_bottom=margin_bottom, + margin_start=margin_start, + margin_end=margin_end, + margin_x=margin_x, + margin_y=margin_y, + width=width, + height=height, + min_width=min_width, + min_height=min_height, + max_width=max_width, + max_height=max_height, + position=position, + top=top, + bottom=bottom, + left=left, + right=right, + start=start, + end=end, + z_index=z_index, + is_hidden=is_hidden, + id=id, + exclude_from_tab_order=exclude_from_tab_order, + aria_expanded=aria_expanded, + aria_haspopup=aria_haspopup, + aria_controls=aria_controls, + aria_label=aria_label, + aria_labelledby=aria_labelledby, + aria_describedby=aria_describedby, + aria_pressed=aria_pressed, + aria_details=aria_details, + UNSAFE_class_name=UNSAFE_class_name, + UNSAFE_style=UNSAFE_style, + key=key, + ) diff --git a/plugins/ui/src/js/src/elements/LogicButton.tsx b/plugins/ui/src/js/src/elements/LogicButton.tsx new file mode 100644 index 000000000..2be528af9 --- /dev/null +++ b/plugins/ui/src/js/src/elements/LogicButton.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { + LogicButton as DHCLogicButton, + LogicButtonProps as DHCLogicButtonProps, +} from '@deephaven/components'; +import { useButtonProps } from './hooks/useButtonProps'; +import { SerializedButtonEventProps } from './model/SerializedPropTypes'; + +export function LogicButton( + props: SerializedButtonEventProps +): JSX.Element { + const buttonProps = useButtonProps(props); + + // eslint-disable-next-line react/jsx-props-no-spreading + return ; +} + +export default LogicButton; diff --git a/plugins/ui/src/js/src/elements/index.ts b/plugins/ui/src/js/src/elements/index.ts index 02443263d..8bb2aec39 100644 --- a/plugins/ui/src/js/src/elements/index.ts +++ b/plugins/ui/src/js/src/elements/index.ts @@ -19,6 +19,7 @@ export * from './IllustratedMessage'; export * from './Image'; export * from './InlineAlert'; export * from './ListView'; +export * from './LogicButton'; export * from './Markdown'; export * from './Meter'; export * from './model'; diff --git a/plugins/ui/src/js/src/elements/model/ElementConstants.ts b/plugins/ui/src/js/src/elements/model/ElementConstants.ts index f5e148347..2b16d4678 100644 --- a/plugins/ui/src/js/src/elements/model/ElementConstants.ts +++ b/plugins/ui/src/js/src/elements/model/ElementConstants.ts @@ -54,6 +54,7 @@ export const ELEMENT_NAME = { listActionMenu: uiComponentName('ListActionMenu'), link: uiComponentName('Link'), listView: uiComponentName('ListView'), + logicButton: uiComponentName('LogicButton'), markdown: uiComponentName('Markdown'), meter: uiComponentName('Meter'), numberField: uiComponentName('NumberField'), diff --git a/plugins/ui/src/js/src/widget/WidgetUtils.tsx b/plugins/ui/src/js/src/widget/WidgetUtils.tsx index 868fa9352..ed42404b8 100644 --- a/plugins/ui/src/js/src/widget/WidgetUtils.tsx +++ b/plugins/ui/src/js/src/widget/WidgetUtils.tsx @@ -66,6 +66,7 @@ import { Image, InlineAlert, ListView, + LogicButton, Markdown, Meter, Picker, @@ -147,6 +148,7 @@ export const elementComponentMap = { [ELEMENT_NAME.listActionGroup]: ListActionGroup, [ELEMENT_NAME.listActionMenu]: ListActionMenu, [ELEMENT_NAME.listView]: ListView, + [ELEMENT_NAME.logicButton]: LogicButton, [ELEMENT_NAME.markdown]: Markdown, [ELEMENT_NAME.meter]: Meter, [ELEMENT_NAME.numberField]: NumberField, From 018b16a8bf59fd997b2210c79236dce35089b6c0 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Thu, 19 Dec 2024 11:35:54 -0500 Subject: [PATCH 17/22] ci: add TypeScript type check (#989) - Closes #618 - Fixes leftover type issues --------- Co-authored-by: Mike Bender --- .github/workflows/typescript-check.yml | 27 ++++++++++ .../src/DashboardPlugin/DashboardPlugin.tsx | 2 +- .../ui/src/js/src/elements/SearchField.tsx | 3 +- .../src/js/src/elements/UITable/UITable.tsx | 4 +- .../src/elements/UITable/UITableModel.test.ts | 12 +++++ tools/check_typescript_ci.py | 50 +++++++++++++++++++ 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/typescript-check.yml create mode 100644 tools/check_typescript_ci.py diff --git a/.github/workflows/typescript-check.yml b/.github/workflows/typescript-check.yml new file mode 100644 index 000000000..73042926a --- /dev/null +++ b/.github/workflows/typescript-check.yml @@ -0,0 +1,27 @@ +name: Check TypeScript types + +on: + push: + branches: + - main + - 'release/**' + - 'feature/**' + pull_request: + branches: + - main + - 'release/**' + - 'feature/**' + +jobs: + typescript-check: + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci + - name: Check TypeScript types + run: python tools/check_typescript_ci.py + diff --git a/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx b/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx index 75e6c4cad..2475c1fb5 100644 --- a/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx +++ b/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx @@ -28,7 +28,7 @@ export function DashboardPlugin({ widget: VariableDefinition; }) => { const { id: widgetId, name, type } = widget; - if (type === dh.VariableType.TABLE || type === dh.VariableType.FIGURE) { + if (type === 'Table' || type === 'Figure') { // Just ignore table and figure types - only want interesting other types return; } diff --git a/plugins/ui/src/js/src/elements/SearchField.tsx b/plugins/ui/src/js/src/elements/SearchField.tsx index 4f58dd796..a58b292ce 100644 --- a/plugins/ui/src/js/src/elements/SearchField.tsx +++ b/plugins/ui/src/js/src/elements/SearchField.tsx @@ -8,9 +8,10 @@ import { useKeyboardEventCallback, } from './hooks'; import useDebouncedOnChange from './hooks/useDebouncedOnChange'; +import { SerializedTextInputEventProps } from './model'; export function SearchField( - props: DHCSearchFieldProps & { + props: SerializedTextInputEventProps & { onSubmit?: (value: string) => void; onClear?: () => void; } diff --git a/plugins/ui/src/js/src/elements/UITable/UITable.tsx b/plugins/ui/src/js/src/elements/UITable/UITable.tsx index f0f29b211..bd3283858 100644 --- a/plugins/ui/src/js/src/elements/UITable/UITable.tsx +++ b/plugins/ui/src/js/src/elements/UITable/UITable.tsx @@ -306,7 +306,9 @@ export function UITable({ if (alwaysFetchColumnsArray[0] === false) { return []; } - return alwaysFetchColumnsArray.filter(v => typeof v === 'string'); + return alwaysFetchColumnsArray.filter( + v => typeof v === 'string' + ) as string[]; }, [alwaysFetchColumnsArray, modelColumns]); const mouseHandlers = useMemo( diff --git a/plugins/ui/src/js/src/elements/UITable/UITableModel.test.ts b/plugins/ui/src/js/src/elements/UITable/UITableModel.test.ts index 0c7df094e..707086e1b 100644 --- a/plugins/ui/src/js/src/elements/UITable/UITableModel.test.ts +++ b/plugins/ui/src/js/src/elements/UITable/UITableModel.test.ts @@ -33,6 +33,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ color: 'red' }, { color: 'blue' }], + displayNameMap: {}, }); expect(model.getFormatOptionForCell(0, 0, 'color')).toBe('blue'); expect(model.getFormatOptionForCell(1, 1, 'color')).toBe('blue'); @@ -48,6 +49,7 @@ describe('Formatting', () => { { cols: 'column0', color: 'red' }, { cols: 'column1', color: 'blue' }, ], + displayNameMap: {}, }); expect(model.getFormatOptionForCell(0, 0, 'color')).toBe('red'); expect(model.getFormatOptionForCell(1, 1, 'color')).toBe('blue'); @@ -71,6 +73,7 @@ describe('Formatting', () => { { color: 'red', if_: 'even' }, { cols: 'column1', color: 'blue', if_: 'even' }, ], + displayNameMap: {}, }); expect(model.getFormatOptionForCell(0, 0, 'color')).toBe('red'); expect(model.getFormatOptionForCell(0, 1, 'color')).toBeUndefined(); @@ -86,6 +89,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ cols: 'column0', color: 'red' }], + displayNameMap: {}, }); expect(model.getFormatOptionForCell(1, 1, 'color')).toBeUndefined(); expect( @@ -104,6 +108,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ color: 'red', if_: 'even' }], + displayNameMap: {}, }); expect(model.getFormatOptionForCell(0, 0, 'color')).toBeUndefined(); expect(model.getFormatOptionForCell(0, 1, 'color')).toBeUndefined(); @@ -119,6 +124,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ color: 'red' }], + displayNameMap: {}, }); expect(model.colorForCell(0, 0, {} as IrisGridThemeType)).toBe('red'); }); @@ -130,6 +136,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [], + displayNameMap: {}, }); expect(model.colorForCell(0, 0, {} as IrisGridThemeType)).toBeUndefined(); expect(MOCK_BASE_MODEL.colorForCell).toHaveBeenCalledTimes(1); @@ -145,6 +152,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ background_color: 'black' }], + displayNameMap: {}, }); expect( model.colorForCell(0, 0, { white: 'white' } as IrisGridThemeType) @@ -162,6 +170,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ background_color: 'white' }], + displayNameMap: {}, }); expect( model.colorForCell(0, 0, { black: 'black' } as IrisGridThemeType) @@ -176,6 +185,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ color: 'foo' }], + displayNameMap: {}, }); model.setColorMap(new Map([['foo', 'bar']])); expect(model.colorForCell(0, 0, {} as IrisGridThemeType)).toBe('bar'); @@ -190,6 +200,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [], + displayNameMap: {}, }); expect( model.backgroundColorForCell(0, 0, {} as IrisGridThemeType) @@ -204,6 +215,7 @@ describe('Formatting', () => { table: MOCK_TABLE, databars: [], format: [{ background_color: 'foo' }], + displayNameMap: {}, }); model.setColorMap(new Map([['foo', 'bar']])); expect(model.backgroundColorForCell(0, 0, {} as IrisGridThemeType)).toBe( diff --git a/tools/check_typescript_ci.py b/tools/check_typescript_ci.py new file mode 100644 index 000000000..6f07f38dd --- /dev/null +++ b/tools/check_typescript_ci.py @@ -0,0 +1,50 @@ +from re import fullmatch +from subprocess import run +from sys import exit + + +def main(): + print("Checking TypeScript types...") + res = run( + ["npx", "tsc", "-p", ".", "--emitDeclarationOnly", "false", "--noEmit"], + capture_output=True, + ) + + if res.returncode == 0: + return 0 + + messages = [] + for line in res.stdout.decode("utf-8").splitlines(): + if len(line) == 0: + continue + # If there's an indent, that means it's a continuation of the previous line + # For example, the error message could be like: + # > Argument of type 'FUNCTION_1_TYPE | undefined' is not assignable to parameter of type 'FUNCTION_2_TYPE'. + # > Type 'FUNCTION_1_TYPE' is not assignable to type 'FUNCTION_2_TYPE'. + # > Types of parameters `PARAM_1` and `PARAM_2` are incompatible. + # > Type 'PARAM_1_TYPE' is not assignable to type 'PARAM_2_TYPE'. + if line[0] == " " and len(messages) > 0: + messages[-1] += "\n" + line + else: + messages.append(line) + + for message in messages: + # Check if the message is actually an error and extract the details + # Error message format: file(line,col): error_message + match = fullmatch(r"(.+?)\((\d+),(\d+)\): ([\s\S]+)", message) + if match is None: + continue + + file, line, col, error_message = match.groups() + # Newlines in GitHub Actions annotations are escaped as %0A + # https://github.com/actions/toolkit/issues/193#issuecomment-605394935 + error_message = error_message.replace("\n", "%0A") + # GitHub Actions annotation format + print(f"::error file={file},line={line},col={col}::{error_message}") + + return res.returncode + + +if __name__ == "__main__": + # Exit with returncode so GitHub Actions fails properly + exit(main()) From 30f37301940cb0eca2d8015e5409f2d4c2bae675 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Fri, 20 Dec 2024 06:15:42 -0700 Subject: [PATCH 18/22] docs: Pure Components (#1064) https://deephaven.atlassian.net/browse/DOC-237 --------- Co-authored-by: Mike Bender Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> --- plugins/ui/docs/_assets/pure_components1.png | Bin 0 -> 10266 bytes plugins/ui/docs/_assets/pure_components2.png | Bin 0 -> 14894 bytes plugins/ui/docs/_assets/pure_components3.png | Bin 0 -> 48050 bytes plugins/ui/docs/describing/pure_components.md | 116 ++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 5 files changed, 120 insertions(+) create mode 100644 plugins/ui/docs/_assets/pure_components1.png create mode 100644 plugins/ui/docs/_assets/pure_components2.png create mode 100644 plugins/ui/docs/_assets/pure_components3.png create mode 100644 plugins/ui/docs/describing/pure_components.md diff --git a/plugins/ui/docs/_assets/pure_components1.png b/plugins/ui/docs/_assets/pure_components1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2af21eedfb735de8cda9a957592056f7279aeac GIT binary patch literal 10266 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 literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/_assets/pure_components2.png b/plugins/ui/docs/_assets/pure_components2.png new file mode 100644 index 0000000000000000000000000000000000000000..480e41fef883321325899bc6058dc8ba2e6b151a GIT binary patch literal 14894 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 z z-tLhPXjec`vXkxAFcd-f#e^gjIl6vEa4`%d8&yev$qK);^DQG>%>rnaoT`Rh|H|EP zex~T00Bh3me*XSfcxumQ?_(*g#%Y+i7=3NS;)&%Nnb%`@p|Hk<{K|}UJ*NIEvnGa4l~rI!D6R@?h64yU@e1{U-#uLr8l zBv96+nsGnAO77WmZE2~Jv`zKo@jIG?lWnwm$79=!!p2xWiEBQg%`~0kn_;v3;|qJf zPTm&6EVku=cAPl*ABG`p$BKB;l4tM|u`W?H2q1y`V@HQ>wsvGRdzr&cl@5!@sQt)- z**)>Meo&Lg)sK{eNsk6>v!0V{8#3gp=4B>lkDmaUpHp3*9D?+Uo|yCFZpFwab9;>%A8 ztHzjdPbdn6jDMcyicNF5!~oE_`+LTaTfS`Lp#1}(%!m`-Y>7S432eQ&C)I33FQN-A zngtq*^dVLJDdRuX#4TAt8i4 z$`+xPvK_gIv)?aBB5zI$5Q{#oE4Cq3EI_M1 z$FC-fuJ1)cO-Nt+pG4B6^hXQ;={&$iDISWh&4`FlVHx8E$@Zax>5f*OOBxD*dZj-N z-bk`VOO+Lq$oH~!3n4xnPu#Xu;^cP~t^+<oFh(un1?q8tP+?e*<5r_WLS%Om8! u`d;4upTJWE@&CrY>woROT5U}xGJrMC{TOr%TR43v(m=;pyX^YiXa5aT$NyOX literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/_assets/pure_components3.png b/plugins/ui/docs/_assets/pure_components3.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4f355635468c0aedea334848fc373fb5c58dcd GIT binary patch literal 48050 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 z literal 0 HcmV?d00001 diff --git a/plugins/ui/docs/describing/pure_components.md b/plugins/ui/docs/describing/pure_components.md new file mode 100644 index 000000000..1e0f95d82 --- /dev/null +++ b/plugins/ui/docs/describing/pure_components.md @@ -0,0 +1,116 @@ +# Pure Components + +A [pure function](https://en.wikipedia.org/wiki/Pure_function) returns the same value given the same arguments and has no side effects. By writing `deephaven.ui` components as pure functions, you can avoid bugs and unpredictable behavior. + +## Unintentional side effects + +The rendering process must always be pure. Component functions should always return the same value for the same arguments. They should not _change_ any objects or variables that existed before rendering. That would not be pure. + +Here is a component that breaks this rule by reading and writing a `guest` variable declared outside of it: + +```python +from deephaven import ui + +guest = [0] + + +@ui.component +def cup(): + # changing a preexisting variable + guest[0] += 1 + return ui.text(f"Tea cup for guest {guest[0]}") + + +@ui.component +def tea_set(): + return ui.flex(cup(), cup(), cup(), direction="column") + + +my_tea_set1 = tea_set() +my_tea_set2 = tea_set() +``` + +![side effects](../_assets/pure_components1.png) + +Calling this component multiple times will produce different results. If other components read `guest`, they will produce different results, too, depending on when they are rendered. That is not predictable. + +You can fix this component by passing `guest` as a prop instead: + +```python +from deephaven import ui + + +@ui.component +def cup(guest): + return ui.text(f"Tea cup for guest {guest}") + + +@ui.component +def tea_set(): + return ui.flex(cup(guest=1), cup(guest=2), cup(guest=3), direction="column") + + +my_tea_set1 = tea_set() +my_tea_set2 = tea_set() +``` + +![side effects 2](../_assets/pure_components2.png) + +Now the component is pure. Its returns only depend on the `guest` prop. + +In general, you should not expect components to be rendered in any particular order. Each component should only “think for itself”, and not attempt to coordinate with or depend upon others during rendering. + +## Local mutations + +Pure functions do not mutate variables outside of the function's scope or objects that were created before the function call. However, it is fine to change variables and objects created inside the function. In this example, the component creates a list and adds a dozen cups to it: + +```python +from deephaven import ui + + +@ui.component +def cup(guest): + return ui.text(f"Tea cup for guest {guest}") + + +@ui.component +def tea_set(): + cups = [] + for i in range(1, 13): + cups.append(cup(guest=i)) + return ui.flex(cups, direction="column") + + +my_tea_set1 = tea_set() +my_tea_set2 = tea_set() +``` + +![local mutations](../_assets/pure_components3.png) + +If the `cups` variable was outside the `tea_set` function, this would be a problem. You would be changing a preexisting object by appending items to that list. + +However, because you created them during the same render, no code outside of `tea_set` will be impacted by this. This is a local mutation. + +## Intentional side effects + +While the rendering process must remain pure, at some point, something needs to change. You may need to print a message, update the screen, start an animation, or change data. These changes are called side effects. They must happen on the side rather than during rendering. + +In `deephaven.ui`, side effects usually belong in event handlers. Event handlers are functions that run when you perform some action like clicking a button. Even though the event handlers are defined inside your component, they do not run during rendering, so even handlers do not need to be pure. + +```python +from deephaven import ui + + +@ui.component +def event_handler_example(): + # An event handler for a button + def button_handler(): + print("button pressed") + + return ui.button("button", on_press=button_handler) + + +my_event_handler_example = event_handler_example() +``` + +If an event handler is not the correct place for a certain side effect, you can place it in a [`use_effect`](../hooks/use_effect.md) hook. This tells `deephaven.ui` to execute it later, after rendering, when side effects are allowed. diff --git a/plugins/ui/docs/sidebar.json b/plugins/ui/docs/sidebar.json index ccc492b52..25fe4e356 100644 --- a/plugins/ui/docs/sidebar.json +++ b/plugins/ui/docs/sidebar.json @@ -48,6 +48,10 @@ { "label": "Conditional Rendering", "path": "describing/conditional_rendering.md" + }, + { + "label": "Pure Components", + "path": "describing/pure_components.md" } ] }, From 30a1f9fb8aa442c1c1b7fb44fe090339c71e8236 Mon Sep 17 00:00:00 2001 From: dgodinez-dh <77981300+dgodinez-dh@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:30:17 -0700 Subject: [PATCH 19/22] docs: Render Lists (#1061) https://deephaven.atlassian.net/browse/DOC-232 --------- Co-authored-by: Mike Bender Co-authored-by: margaretkennedy <82049573+margaretkennedy@users.noreply.github.com> --- plugins/ui/docs/_assets/render_lists1.png | Bin 0 -> 10568 bytes plugins/ui/docs/_assets/render_lists2.png | Bin 0 -> 6687 bytes plugins/ui/docs/describing/render_lists.md | 159 +++++++++++++++++++++ plugins/ui/docs/sidebar.json | 4 + 4 files changed, 163 insertions(+) create mode 100644 plugins/ui/docs/_assets/render_lists1.png create mode 100644 plugins/ui/docs/_assets/render_lists2.png create mode 100644 plugins/ui/docs/describing/render_lists.md diff --git a/plugins/ui/docs/_assets/render_lists1.png b/plugins/ui/docs/_assets/render_lists1.png new file mode 100644 index 0000000000000000000000000000000000000000..eca88bb265446b7a704bbaee1d86ead5bf077df3 GIT binary patch literal 10568 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 Date: Fri, 20 Dec 2024 11:33:05 -0600 Subject: [PATCH 20/22] feat: `dx.indicator` spec (#1062) spec for #1019 Add `dx.indicator` with `NotImplementedError`. Instead of just enabling one indicator, you can create multiple at one time with a plot by that makes subplots of indicators. This enables, for example, the creation of a new indicator automatically as a new symbol ticks in. The default behavior is only a `number` if you only provide `value` and `number+delta` if you provide `reference` as well. https://plotly.com/python/indicator/ Syntax is otherwise generally in line with other `dx` functions and most other behavior is fairly straightforward. --- plugins/plotly-express/docs/indicator.md | 273 ++++++++++++++++++ .../deephaven/plot/express/plots/indicator.py | 105 +++++++ .../deephaven/plot/express/types/__init__.py | 2 +- .../src/deephaven/plot/express/types/plots.py | 18 +- 4 files changed, 396 insertions(+), 2 deletions(-) create mode 100644 plugins/plotly-express/docs/indicator.md create mode 100644 plugins/plotly-express/src/deephaven/plot/express/plots/indicator.py diff --git a/plugins/plotly-express/docs/indicator.md b/plugins/plotly-express/docs/indicator.md new file mode 100644 index 000000000..c7e52f4d3 --- /dev/null +++ b/plugins/plotly-express/docs/indicator.md @@ -0,0 +1,273 @@ +# Indicator Plot + +An indicator plot is a type of plot that highlights a collection of numeric values. + +### What are indicator plots useful for? + +- **Highlight specific metrics**: Indicator plots are useful when you want to highlight specific numeric metrics in a visually appealing way. +- **Compare metrics to a reference value**: Indicator plots are useful to compare metrics to a reference value, such as a starting value or a target value. +- **Compare metrics to each other**: Indicator plots are useful to compare multiple metrics to each other by highlighting where they fall relative to each other. + +## Examples + +### A basic indicator plot + +Visualize a single numeric value by passing the column name to the `value` argument. The table should contain only one row. + +```python +import deephaven.plot.express as dx +from deephaven import agg as agg + +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price") +``` + +### A delta indicator plot + +Visualize a single numeric value with a delta to a reference value by passing the reference column name to the `reference` argument. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_agg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price"), agg.first(cols="StartingPrice = Price")]) + +indicator_plot = dx.indicator(dog_agg, value="Price", reference="StartingPrice") +``` + +## Indicator plots from variables + +Pass variables into a table to create an indicator plot. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import new_table +from deephaven.column import int_col + +my_value = 10 +my_reference = 5 + +my_table = new_table([ + int_col("MyValue", [my_value]), + int_col("MyReference", [my_reference]) +]) + +indicator_plot = dx.indicator(my_table, value="MyValue", reference="MyReference") +``` + +# Delta only indicator plot + +Visualize only the delta to a reference value by passing `number=False`. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_agg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price"), agg.first(cols="StartingPrice = Price")]) + +indicator_plot = dx.indicator(dog_agg, value="Price", reference="StartingPrice", number=False) +``` + +### An angular indicator plot + +Visualize a single numeric value with an angular gauge by passing `gauge="angular"`. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price", gauge="angular") +``` + +### A hidden axis bullet indicator plot + +Visualize a single numeric value with a bullet gauge by passing `gauge="bullet"`. Hide the axis by passing `axis=False`. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price", gauge="bullet", axis=False) +``` + +### Prefixes and suffixes + +Add a prefix and suffix to the numeric value by passing `prefix` and `suffix`. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price", prefix="$", suffix="USD") +``` + +### Delta Symbols + +Modify the symbol before the delta value by passing `increasing_text` and `decreasing_text`. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price", increasing_text="Up: ", decreasing_text="Down: ") +``` + +### Indicator with text + +Add text to the indicator by passing the text column name to the `text` argument. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +from deephaven import agg as agg +my_table = dx.data.stocks() + +# subset data and aggregate prices, keeping the Sym +dog_avg = my_table.where("Sym = `DOG`").agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator(dog_avg, value="Price", text="Sym") +``` + +### Multiple indicators + +Visualize multiple numeric values by passing in a table with multiple rows. By default, a square grid of indicators is created. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +my_table = dx.data.stocks() + +# aggregate for average prices by Sym +sym_avg = my_table.agg_by([agg.avg(cols="Price")], by="Sym") + +indicator_plot = dx.indicator(sym_avg, value="Price") +``` + +### Multiple rows + +By default, a grid of indicators is created. To create a specific amount of rows with a dynamic number of columns, pass the number of rows to the `rows` argument. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +my_table = dx.data.stocks() + +# aggregate for average prices by Sym +sym_avg = my_table.agg_by([agg.avg(cols="Price")], by="Sym") + +indicator_plot = dx.indicator(sym_avg, value="Price", rows=2) +``` + +### Multiple columns + +By default, a grid of indicators is created. To create a specific amount of columns with a dynamic number of rows, pass the number of columns to the `columns` argument. + +```python order=indicator_plot,my_table +import deephaven.plot.express as dx +my_table = dx.data.stocks() + +# aggregate for average prices by Sym +sym_avg = my_table.agg_by([agg.avg(cols="Price")], by="Sym") + +indicator_plot = dx.indicator(sym_avg, value="Price", columns=2) +``` + +### Delta colors + +Change the color of the delta value based on whether it is increasing or decreasing by passing `increasing_color_sequence` and `decreasing_color_sequence`. +These colors are applied sequentially to the indicators and looped if there are more indicators than colors. + +```python +import deephaven.plot.express as dx +from deephaven import agg as agg + +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +sym_agg = my_table.agg_by( + [agg.avg(cols="Price"), agg.first(cols="StartingPrice = Price")] +) + +indicator_plot = dx.indicator( + sym_agg, + value="Price", + reference="Starting Price", + increasing_color_sequence=["green", "darkgreen"], + decreasing_color_sequence=["red", "darkred"], +) +``` + +### Gauge colors + +Change the color of the gauge based on the value by passing `gauge_color_sequence`. +These colors are applied sequentially to the indicators and looped if there are more indicators than colors. + +```python +import deephaven.plot.express as dx +from deephaven import agg as agg + +my_table = dx.data.stocks() + +# subset data and aggregate for DOG prices +sym_agg = my_table.agg_by([agg.avg(cols="Price")]) + +indicator_plot = dx.indicator( + sym_agg, value="Price", gauge_color_sequence=["green", "darkgreen"] +) +``` + +### Plot by + +Create groups of styled indicators by passing the grouping categorical column name to the `by` argument. +`increasing_color_map` and `decreasing_color_map` can be used to style the indicators based on the group. + +```python +import deephaven.plot.express as dx +from deephaven import agg as agg + +my_table = dx.data.stocks() + +# subset data and aggregate prices, keeping the Sym +sym_agg = my_table.agg_by( + [ + agg.avg(cols="Price"), + agg.first(cols="StartingPrice = Price"), + agg.last(cols="Sym"), + ] +) + +indicator_plot = dx.indicator( + sym_agg, + value="Price", + reference="StartingPrice", + by="Sym", + increasing_color_map={"DOG": "darkgreen"}, + decreasing_color_map={"DOG": "darkred"}, +) +``` + +## API Reference +```{eval-rst} +.. dhautofunction:: deephaven.plot.express.indicator +``` diff --git a/plugins/plotly-express/src/deephaven/plot/express/plots/indicator.py b/plugins/plotly-express/src/deephaven/plot/express/plots/indicator.py new file mode 100644 index 000000000..16a54117e --- /dev/null +++ b/plugins/plotly-express/src/deephaven/plot/express/plots/indicator.py @@ -0,0 +1,105 @@ +from __future__ import annotations + +from typing import Callable + +from ..shared import default_callback +from ..deephaven_figure import DeephavenFigure +from ..types import PartitionableTableLike, Gauge, StyleDict + + +def indicator( + table: PartitionableTableLike, + value: str | None, + reference: str | None = None, + text: str | None = None, + by: str | list[str] | None = None, + by_vars: str | tuple[str, ...] = "gauge_color", + increasing_color: str | list[str] | None = None, + decreasing_color: str | list[str] | None = None, + gauge_color: str | list[str] | None = None, + increasing_color_sequence: list[str] | None = None, + increasing_color_map: StyleDict | None = None, + decreasing_color_sequence: list[str] | None = None, + decreasing_color_map: StyleDict | None = None, + gauge_color_sequence: list[str] | None = None, + gauge_color_map: StyleDict | None = None, + number: bool = True, + gauge: Gauge | None = None, + axis: bool = True, + prefix: str | None = None, + suffix: str | None = None, + increasing_text: str | None = "▲", + decreasing_text: str | None = "▼", + rows: int | None = None, + columns: int | None = None, + unsafe_update_figure: Callable = default_callback, +) -> DeephavenFigure: + """ + Create an indicator chart. + + Args: + table: A table to pull data from. + value: The column to use as the value. + reference: The column to use as the reference value. + by: A column or list of columns that contain values to plot the figure traces by. + All values or combination of values map to a unique design. The variable + by_vars specifies which design elements are used. + This is overriden if any specialized design variables such as increasing_color are specified + by_vars: A string or list of string that contain design elements to plot by. + Can contain increasing_color and decreasing_color + If associated maps or sequences are specified, they are used to map by column values + to designs. Otherwise, default values are used. + increasing_color: A column or list of columns used for a plot by on delta increasing color. + Only valid if reference is not None. + See increasing_color_map for additional behaviors. + decreasing_color: A column or list of columns used for a plot by on delta increasing color. + Only valid if reference is not None. + See decreasing_color_map for additional behaviors. + gauge_color: A column or list of columns used for a plot by on color. + Only valid if gauge is not None. + See gauge_color_map for additional behaviors. + text: A column that contains text annotations. + increasing_color_sequence: A list of colors to sequentially apply to + the series. The colors loop, so if there are more series than colors, + colors are reused. + increasing_color_map: A dict with keys that are strings of the column values (or a tuple + of combinations of column values) which map to colors. + decreasing_color_sequence: A list of colors to sequentially apply to + the series. The colors loop, so if there are more series than colors, + colors are reused. + decreasing_color_map: A dict with keys that are strings of the column values (or a tuple + of combinations of column values) which map to colors. + gauge_color_sequence: A list of colors to sequentially apply to + the series. The colors loop, so if there are more series than colors, + colors are reused. + gauge_color_map: A dict with keys that are strings of the column values (or a tuple + of combinations of column values) which map to colors. + number: True to show the number, False to hide it. + gauge: Specifies the type of gauge to use. + Set to "angular" for a half-circle gauge and "bullet" for a horizontal gauge. + axis: True to show the axis. Only valid if gauge is set. + prefix: A string to prepend to the number value. + suffix: A string to append to the number value. + increasing_text: The text to display before the delta if the number value + is greater than the reference value. + decreasing_text: The text to display before the delta if the number value + is less than the reference value. + rows: The number of rows of indicators to create. + If None, the number of rows is determined by the number of columns. + If both rows and columns are None, a square grid is created. + columns: The number of columns of indicators to create. + If None, the number of columns is determined by the number of rows. + If both rows and columns are None, a square grid is created. + unsafe_update_figure: An update function that takes a plotly figure + as an argument and optionally returns a plotly figure. If a figure is + not returned, the plotly figure passed will be assumed to be the return + value. Used to add any custom changes to the underlying plotly figure. + Note that the existing data traces should not be removed. This may lead + to unexpected behavior if traces are modified in a way that break data + mappings. + + Returns: + A DeephavenFigure that contains the indicator chart + + """ + raise NotImplementedError diff --git a/plugins/plotly-express/src/deephaven/plot/express/types/__init__.py b/plugins/plotly-express/src/deephaven/plot/express/types/__init__.py index 0417cd135..3f89c08c0 100644 --- a/plugins/plotly-express/src/deephaven/plot/express/types/__init__.py +++ b/plugins/plotly-express/src/deephaven/plot/express/types/__init__.py @@ -1 +1 @@ -from .plots import PartitionableTableLike, TableLike +from .plots import PartitionableTableLike, TableLike, Gauge, StyleDict, StyleMap diff --git a/plugins/plotly-express/src/deephaven/plot/express/types/plots.py b/plugins/plotly-express/src/deephaven/plot/express/types/plots.py index 25cc51aa9..172d8d220 100644 --- a/plugins/plotly-express/src/deephaven/plot/express/types/plots.py +++ b/plugins/plotly-express/src/deephaven/plot/express/types/plots.py @@ -1,6 +1,22 @@ -from typing import Union +from __future__ import annotations + +from typing import Union, Literal, Tuple, Dict from pandas import DataFrame from deephaven.table import Table, PartitionedTable TableLike = Union[Table, DataFrame] PartitionableTableLike = Union[PartitionedTable, TableLike] +Gauge = Literal["shape", "bullet"] + +# StyleDict is a dictionary that maps column values to style values. +StyleDict = Dict[Union[str, Tuple[str]], str] + +# In addition to StyleDict, StyleMap can also be a string literal "identity" or "by" +# that specifies how to map column values to style values. +# If "identity", the column values are taken as literal style values. +# If "by", the column values are used to map to style values. +# "by" is only used to override parameters that default to numeric mapping on a continuous scale, such as scatter color. +# Providing a tuple of "by" and a StyleDict is equivalent to providing a StyleDict. +StyleMap = Union[ + Literal["identity"], Literal["by"], Tuple[Literal["by"], StyleDict], StyleDict +] From 716b3d9384fdfbfc494ab6dc6398212ebc11b030 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Fri, 20 Dec 2024 16:03:07 -0500 Subject: [PATCH 21/22] fix: label prop typing (#1071) - Fixes #988 - Adds `NodeType`, which mirrors the React Node type --- plugins/ui/src/deephaven/ui/components/combo_box.py | 4 ++-- plugins/ui/src/deephaven/ui/components/date_field.py | 4 ++-- plugins/ui/src/deephaven/ui/components/date_picker.py | 4 ++-- .../ui/src/deephaven/ui/components/date_range_picker.py | 4 ++-- plugins/ui/src/deephaven/ui/components/picker.py | 4 ++-- plugins/ui/src/deephaven/ui/components/progress_bar.py | 7 +++---- plugins/ui/src/deephaven/ui/components/time_field.py | 4 ++-- plugins/ui/src/deephaven/ui/elements/Element.py | 6 +++++- plugins/ui/src/deephaven/ui/elements/__init__.py | 2 +- 9 files changed, 21 insertions(+), 18 deletions(-) diff --git a/plugins/ui/src/deephaven/ui/components/combo_box.py b/plugins/ui/src/deephaven/ui/components/combo_box.py index e7ddadc60..b8d6514cd 100644 --- a/plugins/ui/src/deephaven/ui/components/combo_box.py +++ b/plugins/ui/src/deephaven/ui/components/combo_box.py @@ -27,7 +27,7 @@ from .section import SectionElement from .item import Item from .item_table_source import ItemTableSource -from ..elements import BaseElement, Element +from ..elements import BaseElement, Element, NodeType from .._internal.utils import create_props, unpack_item_table_source from ..types import Key, Undefined, UndefinedType from .basic import component_element @@ -67,7 +67,7 @@ def combo_box( is_required: bool | None = None, validation_behavior: ValidationBehavior = "aria", auto_focus: bool | None = None, - label: Element | None = None, + label: NodeType = None, description: Element | None = None, error_message: Element | None = None, name: str | None = None, diff --git a/plugins/ui/src/deephaven/ui/components/date_field.py b/plugins/ui/src/deephaven/ui/components/date_field.py index 14fecfd08..8dafbd244 100644 --- a/plugins/ui/src/deephaven/ui/components/date_field.py +++ b/plugins/ui/src/deephaven/ui/components/date_field.py @@ -20,7 +20,7 @@ Alignment, ) -from ..elements import Element +from ..elements import Element, NodeType from .._internal.utils import ( create_props, convert_date_props, @@ -93,7 +93,7 @@ def date_field( is_required: bool | None = None, validation_behavior: ValidationBehavior | None = None, auto_focus: bool | None = None, - label: Element | None = None, + label: NodeType = None, description: Element | None = None, error_message: Element | None = None, is_open: bool | None = None, diff --git a/plugins/ui/src/deephaven/ui/components/date_picker.py b/plugins/ui/src/deephaven/ui/components/date_picker.py index 305248db6..ab886b40a 100644 --- a/plugins/ui/src/deephaven/ui/components/date_picker.py +++ b/plugins/ui/src/deephaven/ui/components/date_picker.py @@ -22,7 +22,7 @@ ) from ..hooks import use_memo -from ..elements import Element +from ..elements import Element, NodeType from .._internal.utils import ( create_props, convert_date_props, @@ -98,7 +98,7 @@ def date_picker( is_required: bool | None = None, validation_behavior: ValidationBehavior | None = None, auto_focus: bool | None = None, - label: Element | None = None, + label: NodeType = None, description: Element | None = None, error_message: Element | None = None, is_open: bool | None = None, diff --git a/plugins/ui/src/deephaven/ui/components/date_range_picker.py b/plugins/ui/src/deephaven/ui/components/date_range_picker.py index 6f8a1f99b..45d4fb950 100644 --- a/plugins/ui/src/deephaven/ui/components/date_range_picker.py +++ b/plugins/ui/src/deephaven/ui/components/date_range_picker.py @@ -22,7 +22,7 @@ ) from ..hooks import use_memo -from ..elements import Element +from ..elements import Element, NodeType from .._internal.utils import ( create_props, convert_date_props, @@ -96,7 +96,7 @@ def date_range_picker( is_required: bool | None = None, validation_behavior: ValidationBehavior | None = None, auto_focus: bool | None = None, - label: Element | None = None, + label: NodeType = None, description: Element | None = None, error_message: Element | None = None, is_open: bool | None = None, diff --git a/plugins/ui/src/deephaven/ui/components/picker.py b/plugins/ui/src/deephaven/ui/components/picker.py index f24f1c96b..cc02c583d 100644 --- a/plugins/ui/src/deephaven/ui/components/picker.py +++ b/plugins/ui/src/deephaven/ui/components/picker.py @@ -6,7 +6,7 @@ from .basic import component_element from .section import SectionElement, Item from .item_table_source import ItemTableSource -from ..elements import BaseElement, Element +from ..elements import BaseElement, Element, NodeType from .._internal.utils import create_props, unpack_item_table_source from ..types import Key, Undefined, UndefinedType from .types import ( @@ -60,7 +60,7 @@ def picker( validation_behavior: ValidationBehavior | None = None, description: Element | None = None, error_message: Element | None = None, - label: Element | None = None, + label: NodeType = None, placeholder: str | None = None, is_loading: bool | None = None, label_position: LabelPosition = "top", diff --git a/plugins/ui/src/deephaven/ui/components/progress_bar.py b/plugins/ui/src/deephaven/ui/components/progress_bar.py index ee2a7ef28..9c2945165 100644 --- a/plugins/ui/src/deephaven/ui/components/progress_bar.py +++ b/plugins/ui/src/deephaven/ui/components/progress_bar.py @@ -14,9 +14,8 @@ Position, ProgressBarSize, ) - from .basic import component_element -from ..elements import Element +from ..elements import Element, NodeType ProgressBarElement = Element @@ -26,9 +25,9 @@ def progress_bar( static_color: StaticColor | None = None, label_position: LabelPosition = "top", show_value_label: bool | None = None, - label: Element | None = None, + label: NodeType = None, # format_options, # omitted because need to connect it to Deephaven formatting options as well - value_label: Element | None = None, + value_label: NodeType = None, value: float = 0, min_value: float = 0, max_value: float = 100, diff --git a/plugins/ui/src/deephaven/ui/components/time_field.py b/plugins/ui/src/deephaven/ui/components/time_field.py index 7e4002d8c..91d1129d5 100644 --- a/plugins/ui/src/deephaven/ui/components/time_field.py +++ b/plugins/ui/src/deephaven/ui/components/time_field.py @@ -20,7 +20,7 @@ Alignment, ) -from ..elements import Element +from ..elements import Element, NodeType from .._internal.utils import ( create_props, convert_time_props, @@ -86,7 +86,7 @@ def time_field( is_required: bool | None = None, validation_behavior: ValidationBehavior | None = None, auto_focus: bool | None = None, - label: Element | None = None, + label: NodeType = None, description: Element | None = None, error_message: Element | None = None, name: str | None = None, diff --git a/plugins/ui/src/deephaven/ui/elements/Element.py b/plugins/ui/src/deephaven/ui/elements/Element.py index fe6a168f9..d094ae7fc 100644 --- a/plugins/ui/src/deephaven/ui/elements/Element.py +++ b/plugins/ui/src/deephaven/ui/elements/Element.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Any, Dict +from typing import Any, Dict, List, Union from .._internal import RenderContext PropsType = Dict[str, Any] @@ -45,3 +45,7 @@ def render(self, context: RenderContext) -> PropsType: The props of this element. """ pass + + +# Some props don't support Undefined, so they need to add it themselves +NodeType = Union[None, bool, int, str, Element, List["NodeType"]] diff --git a/plugins/ui/src/deephaven/ui/elements/__init__.py b/plugins/ui/src/deephaven/ui/elements/__init__.py index 21143a2f9..8065f588d 100644 --- a/plugins/ui/src/deephaven/ui/elements/__init__.py +++ b/plugins/ui/src/deephaven/ui/elements/__init__.py @@ -1,4 +1,4 @@ -from .Element import Element, PropsType +from .Element import Element, PropsType, NodeType from .BaseElement import BaseElement from .DashboardElement import DashboardElement from .FunctionElement import FunctionElement From 6b261d607cbb3fc826da4e4069471fc57cce3cd2 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 23 Dec 2024 12:55:29 -0600 Subject: [PATCH 22/22] fix: Allow autodoc functions to have no parameters (#1072) Fixes https://deephaven.atlassian.net/browse/DH-18247 Allows autodoc functions to have no parameters and adds better error checking for params to ensure that all expected parameters are there in a fine-tuned way. Tested on all existing docs as well as a local `use_render_queue` doc. --- .../deephaven/ui/components/action_menu.py | 2 +- .../ui/src/deephaven/ui/components/column.py | 2 +- sphinx_ext/deephaven_autodoc.py | 56 ++++++++++++++----- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/plugins/ui/src/deephaven/ui/components/action_menu.py b/plugins/ui/src/deephaven/ui/components/action_menu.py index 2eca69c3b..10bb485ca 100644 --- a/plugins/ui/src/deephaven/ui/components/action_menu.py +++ b/plugins/ui/src/deephaven/ui/components/action_menu.py @@ -91,7 +91,7 @@ def action_menu( ActionMenu combines an ActionButton with a Menu for simple "more actions" use cases. Args: - children: The contents of the collection. + *children: The contents of the collection. is_disabled: Whether the button is disabled. is_quiet: Whether the button should be displayed with a quiet style. auto_focus: Whether the element should receive focus on render. diff --git a/plugins/ui/src/deephaven/ui/components/column.py b/plugins/ui/src/deephaven/ui/components/column.py index 4dbeea67b..85d9a981a 100644 --- a/plugins/ui/src/deephaven/ui/components/column.py +++ b/plugins/ui/src/deephaven/ui/components/column.py @@ -13,7 +13,7 @@ def column( Each element will be placed below its prior sibling. Args: - children: Elements to render in the column. + *children: Elements to render in the column. width: The percent width of the column relative to other children of its parent. If not provided, the column will be sized automatically. key: A unique identifier used by React to render elements in a list. diff --git a/sphinx_ext/deephaven_autodoc.py b/sphinx_ext/deephaven_autodoc.py index 56e6e946b..d987a12c2 100644 --- a/sphinx_ext/deephaven_autodoc.py +++ b/sphinx_ext/deephaven_autodoc.py @@ -46,10 +46,13 @@ class SignatureData(TypedDict): AUTOFUNCTION_COMMENT_PREFIX = "AutofunctionCommentPrefix:" +# Some parameters don't need to be documented such as function parameter dividers +UNDOCUMENTED_PARAMS = {"*", "/"} + def extract_parameter_defaults( node: sphinx.addnodes.desc_parameterlist, -) -> ParamDefaults: +) -> tuple[ParamDefaults, set[str]]: """ Extract the default values for the parameters from the parameter list @@ -57,20 +60,24 @@ def extract_parameter_defaults( node: The node to extract the defaults from Returns: - The parameter defaults + The parameter defaults and the expected parameters for comparison """ defaults = {} + expected_params = set() for child in node.children: params = child.astext().split("=") if len(params) == 2: defaults[params[0]] = params[1] - # otherwise, no default value - do not add it because None is not the same as no default - return defaults + # otherwise, no default value - do not add it to defaults because None is not the same as no default + # but add it to expected_params so that we can check that all parameters are documented + expected_params.add(params[0]) + + return defaults, expected_params def extract_signature_data( node: sphinx.addnodes.desc_signature, -) -> tuple[FunctionMetadata, ParamDefaults]: +) -> tuple[FunctionMetadata, ParamDefaults, set[str]]: """ Extract the signature data from the signature node The default values for the parameters are extracted from the signature @@ -79,18 +86,19 @@ def extract_signature_data( node: The node to extract the signature data from Returns: - The function metadata and the parameter defaults + The function metadata, the parameter defaults, and the expected parameters """ result = {} param_defaults = {} + expected_params = set() for child in node.children: if isinstance(child, sphinx.addnodes.desc_addname): result["module_name"] = child.astext() elif isinstance(child, sphinx.addnodes.desc_name): result["name"] = child.astext() elif isinstance(child, sphinx.addnodes.desc_parameterlist): - param_defaults = extract_parameter_defaults(child) - return FunctionMetadata(**result), param_defaults + param_defaults, expected_params = extract_parameter_defaults(child) + return FunctionMetadata(**result), param_defaults, expected_params def extract_list_item(node: docutils.nodes.list_item) -> ParamData: @@ -108,7 +116,7 @@ def extract_list_item(node: docutils.nodes.list_item) -> ParamData: match = re.match(r"(.+?) \((.*?)\) -- (.+)", field, re.DOTALL) if match is None: raise ValueError( - f"Could not match {field} to extract param data. " + f"Could not match '{field}' to extract param data. " f"Verify this parameter is documented correctly within 'Args:' with type and description." ) matched = match.groups() @@ -245,6 +253,18 @@ def attach_parameter_defaults(params: Params, param_defaults: ParamDefaults) -> param["default"] = param_defaults[name] +def missing_parameters(params: Params, expected_params: set[str]) -> set[str]: + """ + Get the parameters that are missing from the documentation + + Args: + params: The parameters that are documented + expected_params: The parameters that are expected + """ + param_names = set(param["name"] for param in params) + return expected_params - UNDOCUMENTED_PARAMS - param_names + + def extract_desc_data(node: sphinx.addnodes.desc) -> SignatureData: """ Extract the content of the description. @@ -258,21 +278,27 @@ def extract_desc_data(node: sphinx.addnodes.desc) -> SignatureData: """ result = {} param_defaults = {} + params_expected = set() for child_node in node.children: if isinstance(child_node, sphinx.addnodes.desc_signature): - signature_results, param_defaults = extract_signature_data(child_node) + signature_results, param_defaults, params_expected = extract_signature_data( + child_node + ) result.update(signature_results) elif isinstance(child_node, sphinx.addnodes.desc_content): result.update(extract_content_data(child_node)) # map all to lowercase for consistency function = f"{result['module_name']}{result['name']}" - try: - result["parameters"] = result.pop("Parameters") - except KeyError: + + result["parameters"] = result.pop("Parameters") if "Parameters" in result else [] + missing_params = missing_parameters(result["parameters"], params_expected) + + if missing_params: raise ValueError( - "Parameters missing from description. " - f"Verify the function description for {function} is formatted correctly." + f"Missing documentation for {function} parameters {missing_params}. " + "Verify that parameter names have leading asterisks in the description." ) + try: result["return_description"] = result.pop("Returns") except KeyError: