From b1e163fd304a42a99ac27deca1ed54860ebffdbd Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Thu, 7 Sep 2023 08:01:44 +0200 Subject: [PATCH] `Welcome Page` refresh (#3219) ### What This PR: - implements a refreshed, toned-down Welcome Page; - add the panel linking to the examples page; - make the UI responsive. This is a PR train, #3191 must be reviewed/fixed/merged first. Fixes: - #3124 - #3043 image ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/3219) (if applicable) - [PR Build Summary](https://build.rerun.io/pr/3219) - [Docs preview](https://rerun.io/preview/53fef8c10871100e6aef8a2e49aff9d28e6cac6f/docs) - [Examples preview](https://rerun.io/preview/53fef8c10871100e6aef8a2e49aff9d28e6cac6f/examples) - [Recent benchmark results](https://ref.rerun.io/dev/bench/) - [Wasm size tracking](https://ref.rerun.io/dev/sizes/) --------- Co-authored-by: Emil Ernerfeldt --- .../data/images/onboarding-configure.png | Bin 0 -> 3149 bytes .../re_ui/data/images/onboarding-examples.jpg | Bin 0 -> 33691 bytes .../data/images/onboarding-live-data.png | Bin 0 -> 3776 bytes .../data/images/onboarding-recorded-data.png | Bin 0 -> 5134 bytes .../data/images/welcome_screen_configure.png | Bin 6058 -> 0 bytes .../data/images/welcome_screen_live_data.png | Bin 13469 -> 0 bytes .../images/welcome_screen_recorded_data.png | Bin 4755 -> 0 bytes crates/re_ui/src/icons.rs | 11 +- crates/re_viewer/data/examples_manifest.json | 28 +- .../src/ui/welcome_screen/example_page.rs | 7 +- crates/re_viewer/src/ui/welcome_screen/mod.rs | 38 +-- .../src/ui/welcome_screen/welcome_page.rs | 301 +++++++++++------- 12 files changed, 224 insertions(+), 161 deletions(-) create mode 100644 crates/re_ui/data/images/onboarding-configure.png create mode 100644 crates/re_ui/data/images/onboarding-examples.jpg create mode 100644 crates/re_ui/data/images/onboarding-live-data.png create mode 100644 crates/re_ui/data/images/onboarding-recorded-data.png delete mode 100644 crates/re_ui/data/images/welcome_screen_configure.png delete mode 100644 crates/re_ui/data/images/welcome_screen_live_data.png delete mode 100644 crates/re_ui/data/images/welcome_screen_recorded_data.png diff --git a/crates/re_ui/data/images/onboarding-configure.png b/crates/re_ui/data/images/onboarding-configure.png new file mode 100644 index 0000000000000000000000000000000000000000..717c4fcdd12cca82fe8ef4db0a702f887d6ca6cd GIT binary patch literal 3149 zcmeHJX;4#H77h^vK~P!3z8Xj%fhZV2Y(NlH6vHCK1PCT-1Pq%(KthWw3Im9s*rI^I z$W|r~h(SpSC;b95hn=bezw92MFt#8MR^}^ zhE#XzOo4+|Ds%SQKU_*2XsHdTz}5xRlGONHY`@s0yKlav#+r%uuaQ+kSr9_Wr|!nZ*ujSQH#- zdN%GN&X;Ivj`?MH)Y-)~An(~6H#UG9r{~<*Zh|PSWEmMF42=;cW~iazQ3T4IRa2W^ zT!s&zI3IL3GBz#%&V6?IK4tgjn}jn!`~Bf16qj;PN~ zY+ti%cv5ql5_HW@*X=s|f2H+i(A#nou#HcdrEbHDj?e4r7e0Q-ES|BLTby##w;%C; z)t-AiVcE;XSC*c$UX>8x$VU!Muk8`f-DIrYiI_E?oB8JWqWO&KRCr!+s}|KC+dXLB zJJ{hw(+Sm^^su_Zc}NtAsl={zuj};BrC+O|IO$T=(oj}S9(8sE)jrsueL=I(wXy$z ztmgjL_${Mm9gO9y>i|NWmP%J$2<-B{!l`lyxmD|6(Mh~mrxaeVbv4zdQJbrUdp9CF zo8eU_h*#w3sZv)BnXJ`>U;IhBr!=UvuEW}O#LCt%q1&r4JZAo}Ub#kjYh=$QwQqs? zWg1|X?!<;xQ=0gKif~!L4Q|#_I=+j?@VT_qm%~mLlbB$JVR-_G=z*LF{{GwM9x>gf z6A>_ zTmk{K0q{}$S0B^;Azu<6ef?tBh8$u_3B$Ju^$6r785n`9j31u*Y{urD(H5#ZIu>^F zpezz$eRZM5DMA*__Pew+zSLXe4x(6s;8D{<4fj}3FCUd}Q}^hLc#6{lL}~P??DOFg z71DKoq^Kc(WltO%%44dNJm>HHK#(H)W@1d2B-8BFR*&B24Y{%?C_wzRo-_BJp8=tr z?~V>Jjh!c7PV~h*s{avmcIMgnF)qB0kzm-F>d5qapxT;<^_wzMnFW2MSayU@cC|AS zRn+Siy#{{9iTqOdXh0hDPUiVVDnCAj*a9Q4c+CFCV-^H*6@=yYC1Z4>0-#2&T11Kh z_>Sg!zz()>@JZTwuPVElr=lgIa! z0(>O`nY0c6&Mn%ENWPpbSV5w4(d-laGY;uExB@_6-z;>QxF&<&K{$-N+xHBL(g1$V zom?GBa3+#vQm{=I#ERcGQIpgZg&%S!Yt|-${xQHbx!M(@*?0N%(aQD-OD)kHp1iE6 zxfEFKKOSFv1V(sECfTMZM9mkv!w8?q0`=Ir-C&?CczVc0k+%eT9CrizT*Dwh4PyI_(Q2(DJ!&4uLBkZXl{G4CZ&* z=b_oo&CH6F`3WZJhHsJ#{%~od0So*EVOjHqz`gRVz~}wHIugA|Nk6FwX+#PrRfQa0$X>$mB)7ic z#Eq~erwu@xD?y(=GtwW1XcueDMmO;VL9WMwwvp)51Kj#Ni4krCAcj#^4d6h_0GE*? zfx26$2P-aZflkkIYW~)#p*dV((tTwIBWr@Unyb7JL5kbq31`17tnP+;kuMS z7O!%MW6eyzi?|uEy4-@BfmU0Uo@(Ox$*Nlqr_)PWXH!8UzEg~CG+!wBTK58Dw@GW! z`N**}kkbdF1?$C>xR-3pfaK1-BjuR3f0)ruF>i(cu1_F@j3u~fa!e)kh0 z;+pS8%ehp2Dy<@6ssGC%u~p&PZ0r_TQ&;4<&okNU(+97^r|SB3J(juS9#z#V3Qv2= z<~SUNEcPg>Up%W)tHs)8F1jo<%X*0yb@?3)ze%k>BPt1)$m45nKPH+?EK0p9_h|m` z$wh)}RqFa^MRaKIt&-N+FK-7XiXwKF;SZ>>8kQUCw| literal 0 HcmV?d00001 diff --git a/crates/re_ui/data/images/onboarding-examples.jpg b/crates/re_ui/data/images/onboarding-examples.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b7387d5ab21c67d88a96b88a639b3def8fb9978 GIT binary patch literal 33691 zcmbq)2UwFy*LFe`1QZNPmkt3zO6YFS^KtN<|%a87^yYKhD-}kr4HF*xn%y~|^&pne#IG8w?2ONhPL5%=FAOMhj z_y8Qd0pJZo(e40%xj8@v000~TFao&%^oJ7g@Bskw0T_SE000cg|4W7grT-j52LRkg z0~r1sgF3waXos4A%>MIAUkLnLV3_*XKc*dQ0MxBKuLWKU@Vw?HtSqkp zP}hf=GyKqg*nY|qKgHvtg80cKKrO?16ifE|-}G-BbOJb!&<)Yq(*s2TbeuqXPT;{a z!0AIP7=b_A&uNEGKstH`MkeMXEUZTl2Q(Z9&;jY`=@{r48Gqac74fzaW>G9iDLSR-h?ss&7dL$PgSfJbe+&!j$x}SMd=ipU(qI{gimIBrhNi&h9r*#smZg1&4%&g~#5Ci@$y6E-p1KJtH$KJBLtQLL`-zktyZ1 zb@dI6P0cN>Po6&O?&{7&@(Xq@C!&6^22dX21XG@CN4c|<}26}qDs+6K>8^~HC-%X z%J2`|F8;%;C&eLeB({IJ_S3WfGsj~7pFI2J*x!Cl0}KGie>VQ($N8oB`T3f)9ZiU1|R|Y zCH$%NKPj*R8iM}4Lro2T%ufd%&=P+J^RG-Y{6p(6_5TnQrT>l;@$Z!VGg620zXs+n z-2m7>z`=$4k|Z@Oe=zFv zhp9$?;rcI3Gj#JD`g{UZZ~f0S|C#UqVumU77cSWTh~ZDPqW&e0KMU^PEch?c{V(qC#2fuDYWUmQA9?wir2hb= zUlIF@UydD&9|EYA&n2b1{GyMa0`1?* zU-@7N_5T~me?|P?HTR#L{ZEelO9l;e?NMN`p@$4k@*#0a(sQ3UWr`RCtkh(L49%(E zSi~AlnLkN;QJFWbwq$%T90any#C+tx1L6Pl`cHy2{gZb8!L+|(_8-{tF9!XSHUCM! z#xQ4>a8?T_sCeS7vZ4I!*sY3SP4t^DeOGkSV2!LpEze2t_ zbjRljhqX5W>ia(f^=Wvn80{t=d$0p!c_5M}G|Jy4M z+$xltX~n(UjF>8;;4jt3&42!iUZ*&v27d@S1bWAn81St>B9u)haT>EJyp z-pIBO+L?~CyWF0JVA9nfY9#=fAyH%vNRL($Nj0kZ)6x<$DoTTFDgb9v?^Zmf?K#_6 zOggGdui>iS2=-%?lm<>GNWLd%lc#Zj;5UTeJ@P}(Zotih(ZkJDb!^lhgq3+1lK)(I z|IRpveEUBwYX7#afx&`)Y)fb-aCSV_X7Y@Rxgiav1jBNlM0sF0q=gEZABn7BvFYeV zN|TyDOhR6_J{tjhNp7{2;~b9m6PFOTK_lbD!ZMHLZe<=)DV?=NH-oc#6tAf%&Y+u) z%^Ig{I(}$A%*qo`oCa}^It6Nei832*jbcT4g1*r-+Ydc;Zzo4RU9Dpw-<3EtLxX1xCh7_Dh-LXY$H zgrs-+LEOGr=a(cDw&^572y!wPkekVrst`C&XO zlM)_bfgFkD_z0-aE`b!TMDbIlAa7xSgYg0!*sE~<=ki@&|F1y)x%&R(o>Pb9Tf%fN z@dXU*=SlLb`!W3J;Q~~G%Yw`LFIre4Zxv^WCO_P`*!r%h_~~2lYpksw8F)B0@rySCY=bok0Izz}uQ$rVWUxp9Zq^c&cD7gv?YLM^M5W9IR zuiDfVLtL8pao|px!1y)9g{p_?_2~tpY<@(ly!1jc3-vrb2-t(x8luO(Gcf`$A)qtT zKwT=sNW3D>k(Eg?eB{$A!G#M-3BUnvGi9m21siZ-ar``mOsN6g8i{YrnDW>Gl21GV z9Q8#HJ;lxqi82j_mbu}PaYiy{c5%+&l{C;6=13vauthH@yHL+i`VdsWgI6_%a@;LH z=;RlhH$yJ5OZE&~vZBArs@Y19L&W>gSVSD?dj)RL=9Pg>d?c(0x?!7tLQ58vT49D^037Ie<=5QGJ0h@g1#ZkcgzjVR|9A ztg*>E-~h{R9-(x=AXr(Co0m-!ar{FhI>e=TC954^+U%0e@)FX5Fkcj}X%z`iLjoykL&vpzZU#!JkwH7TgZ12ApZOsea zFc;0@#+NtMJo1!ij=Nh*Z+WE$qkz4*tLj~x{2rb^L4GbY`r-3J^0Uuv!{hlW782Ob zmFS5i^cVQG4a@#5b72o0fQ5n0N^v~50Bg~$2+)vffb4Y(f{nm{?U5=GW{uK-DdIa_ zVChDQn0nbFh|Pu`vQZdP8d%CTS;+hW%u)hs7F+{H*LwPfmI<(4fgDjZHDQ+n0R7Q| zjU)G5afp3SVBt#fRpBLMCji{Sj050>SW2YYd4%c_$CplUkzS>$y{&g6R2ZYk#zC4z=B) zfuUYPt{}aIOzDcENJk3Ln1#}nQ+1rAfvDUSR~$YQk}Vk}KG#d)m8ue+htKa7GJc_* zq{qPx6?S!dnL)mX8yI#GM=SceLG<;f*5sA+SlzqV2hMd_pGX9^d(!#54K2Y{GgoPm z6jR@T%dv!{Aay?dQ}`7;$H(l$n&5!|Iq7nvZB?t76hc9rRS)?tgDu0;g*AFH35l9~ zfXlM;|3SZF|Q#VDFSNd!m9G%AIU=+rN)WLrd7iOdwFf8!i4 z;g4Ft7kmWl7{h#rDq5oxKjQrrb)OBQ6_~}Uw5sIj#Fq9b%nkgWQfRs;{rQ6W>~3{c zG?u`m03=v^>|sP3%MutMJLuVRC3_)8dw|bMl$b!!3ULucD@5q})&rWYLg-C9ihWU~ z09OJNV1y?b{SglY0cJlJ6Dp|ZeVNdA)I4yiE6G7+i7iC>P(gIzuEB%rBf6#Z{Y?0R z^dW_?lJJj2z~yUB=w`V-(gX_y(7BM!DHD(ecShdkAtz$Hg-`dW6E#XbJXagEZoHvI ziMrS?(h_1yZFs0>h0-^f4~CnJ82RHw)-Mj$MX>S&HaL4yC0R&-aiz3~d{(eG6Q1A) z_v|+5NrS>d3j=g}2)_Ip6qC|j-PRQ^j}n~fr>s1I=m2vn2#`Iay{^g^N-8u6UL@!%kLSO{I7JL8X%{D^@0$0O z()&Mc;CKr8{v@}>*vXSq=y&v!OARc^zVk@$XM|u*Eto@e_XVIJTKSzxuNdfvg|dY= zG6D<5j{qaKEj6~x_>tenBm;EWJIka5%DAaJ>*ni{b-H5_`aEoY3Yp z-EPS&NkUke2QBJkiJ$$p!AZ#i4n}|q2zLW(zO+Yt%MQ>2?3M6`g1WkjvJ27y+a{B1 z;OKVr^lcP_ZoTMKf;aj^-G_nFfgpl8}4@GbvS=L3do)GC{Kz)E~L58ZCDr^qmn1Kk|?(2PiOl^;ID` zf;K;V#Su=mc&kAq2@DB$cB@?}o2M;;0Myc)Z#I%fXbvqafG)Y8RoUVtgd632fk(~S zw2hV@2bzBpCAKuOotVDyB)LNxXbc0aWb=>bKN_M_=qkNNQFBj@g8*hHOCW8GMmEu% zh0L3fw+TkMeleVxf_f=k zl%WKG(F`B}G|dWz|gdv^RviEJ9-2AbYI3KWfVw$dm& zk!UV>h*EZ0p#_44F$9plS^we_MOzxEXs#Uqdkq349(<~|~dThf%j$Pip2)?mAmpJ#RIOc04|^Bw(l6syYt zxlK}=!w)Iy<8GYHHIfEu4eJ(1a}Y~oq|ZnLN+8r{v=QJlg85wi0O|~Vb{?FWXC)^_ zx^v4g>W1FBWuI(3nOO>_)Ei%D2NFV?3M|oF1vTM(bc^?56wLrZMA>xiH0V3G}YANFc47_R$-3;l%gG$r<2B%PbUjE3m37d5zG&sPdXuvpJfAXDqaTHx7 z__2ykY7~E(B@^CS7YKO~&@C%u2-YZMoMA>e(o>CO^tu5&+$^?K`_3)1GoT?l_NQdh zj4{gAH?&aT!zf@6kjLkRN8|+0kMN|1uA8_v#=>A5OC!4CSQF5RXfpqpb_75&x0qy!>$;^jIDhSUVaj-vxwODYx3E~3D;0K1 z(DNL^!ZMr*lGa9-TzUX_l2?W%X)ucw71Adwno&(&tEl}r*csKggXG@E-0iyh83T|I z^h%#;X&wonie7&zS!^4*Dux3*Jcdz%E?G55V#nj@0;bYcHAl_IbJBEA-ik@CDgRny z!DbFHZ>EKm##$6IZdr)tCQDNR48sJNG=K`SCIAoxAJcP)r9d1UT_2!(JBTQXQ>|H3 zHjF~~lZ9z_B+mz#qi{XJyjO5%PD#@UBbO9kzIK)g8WE*maq;ASagJtpp*6BuP^KZX z;L}dsfKBw8=9u)Xl4B)J$yS4ZlcJ(IIn#7Og$B@KLo@+Lhp)_Znyb2>S9@-=B}Z(O z0r}2uTv9gW`@X_`X|qt!LB-lOy!dKxWsYI}kh8?GL1Vy|;j#%%-mmc80_Al?2kF}J zeig&LiRezy`1r%Bs!gA&dRB$wh;PlkhTPQicbE;k5kBFr`)K=$x|)gmv)sJ#C&mo1 z=2ebO0ak(*>$m65=j&Kwf)iZbFNf*ffAFz<2mSEjXAXA%^VeFX;=fU~ubpM-^Zw4R zWBc*clj=)^qxXVe+>6fhXpq)Q=c|6TFSg8^93(<o`hL4Pc-5XuxyZ=J~nH7_LQ z@yX_`vB6ylDE|){g$zWB68P3WkU*CIvwtqtMTA3?k~F;k5puBog>c@8O;vy|_)JZ10SQ7SG>27z@^B zRC6t;@1&Y$3cgF837)}PboJ6hI>Y)YAR&_BJzDz5A z`tzt%`=We(m=d#!b!~W>Z1dMr?FM|^v)VksQx(BSXu07=XCvj8v{uj&9H%=`;cxP!I$W%bc_`Qoc)5eH}fqvb}-oBx9OCdJTRcI9Tx}p2&1%#)d_D#Nah^-i$R@raF5f@noerX#)B0%S3gZx=CbkPtc!+@tEcr0O1sRpl*5bBC6^y{+MQOd z-rCpuhKYUc_;}k#XtV{U6?S&s;s8J+_g6m4S9C;}t!ij|Aq2t=>p#a9jA0Wdm4fXw zZO7*f8kJ=72$j^l4#ny5mbpmuBaS^7RPJtu>fB1n+Yt7i_mMJfm&^_TkyIpbIu4F5 z5^SZznzXY_!NY6H!u-#?Os`%pe$% zp*Wt^ApZu(1UcLXN{`9EF`vaT$l&GKLA__}mfu<3*nhoSftP;}pn+Ttt~nULn|p1J zglHw3?Dz%bjec4%yPCv}e{;2ZS^xUrJC`}>ZV5SePabhBw4SyKnrA6I@>!5f=~OvM zGY3GNgGf~MUh59A9yD>fRuXP)=lU#GT^s$|>`0Y4N5R!AVt!@J@9b7st{%(b+Vqa5 zYRQr~10cC6_)cPsD$n3~)P%VPv;1V4vFMCZ8Z6fDQ)%u*2=^H!8G?g2EN!;^lbpDM z@jepS*17IDHv7)3)5zrL);J-E<<1ngH=F`TJ6c!fwOAw%C?a25MVqqiG`wtIF&=y! zr#qO+wXTto`?&da)tFUwmgZ99dvM9<#udEnsKns8@HQ9Drvi5O~uS-%Q+JXIpj;Z@M~ zc;dy3U|Ez`FklXLm&1WxviV(KC&A=9Ro!Tx8@e-@Ue=N7|KeLsxz8EALQi(6I2_?0 z0V)#gg`a?j={|Ft{mte^I~X#)Yy_R_MBiE{2)D_Ve$*pg{g%7+R({5N>!lAeqrv{_ z{pwYrJ~kY|3zZPJWZiZ6O7Z*d5Q(57R()MSp0g`1G}?G}9(g-9CXAAiCXfPu`?6U^ zVN$e$F?n9VMvJu5^Gcu~qk`{=eY%DUNXu&@4zDdYdJUaOfSKXMl~!S$w7 zU^lH>1jl#)$jq&qGz{)BHO*7L7t&B!FPx~aaEzH&ZS*$GSJBFy>DnyQjk)-ut{H#T z`Hw1GxU>lxm)~VhU(@WgBC5Wxt=_{R71$ysDxhCmrk1nWBl;ql+&BB2kU#9cplgNS zUAN&>JKj;h-gxT!WM4(H;qt?P{)$w8-@XAZE1dbJitA3|ygxIlHL5no612{Z?ff#T zh-b%RUxHL#)T2&N`=wrNKG!;CjS%jnssOCre{^%j|fT9jwS=I^fa7ed$J?or>#&1}-1Q!;QgU8cI=dbD}o-CMdr!Z(5{8y`l09pXts;h@EJtcooO zHqDO(!Y+OH^0nOB6}QrW zcP%C;rKLThv=QoN%r@H80XC;n>{eX6Dw`gKh)LlxH=S*4m78t4rp^!^KFZ3eU=mmo zh&qq5o1Usb7d`V8I6M}6m9=HGxpP##!T=#UU#@Mix)@EXx}^W&H+psQ_yA&<-9s`> zQ?%Yr%&Rnr)fjfCO~?=}d0+8bHXE|a*?#FtB-y{U%>`<>Lv(L{dd@|=xi>uOl%VW& zd-j5hJ=zhYHz)hsJk<9}U#r2zHmh3mIg)O!PT!gN_Pnc-s?RIZeC9W;#H}YeAk(rw zaea#jJ3VE&?y|g^+s;Z#N`^B2*pNoN3`xT4ZKC{|`}qui=v!HZEdjnYy5)f;=7(g` z!{8UU#vAyQOM*IjglC67QjW*w*(_p;Oizro+u}~SHmZo<*Sk0%=j+2l@m9QjWv*4r zlR<&fi=y)R3<ut+oQVU-$RNGR;?4y32rCDAm5i|} zm(-B<0lN#bOF`#SkPm68degXzq}O7non$J#=iKe`Y_|&r95`ic9~HGw*y0tAIVr+5 z8FlprH^*${b~M+DK@3$O~?K5qWhoeT}kJpcsi zSiiGxj+on3gYTbZK=b<8#VjWkf?g}H%usrZR%$PNb@1yx?UlaW9K9w}0*aH8{L1Hl zNkPQ&`Tb2ilKo7Tk*4+e=RXqC?cPN*B|6UQ3b zlQWX&mpi|V`R|#$yl-*wJV9B!zEi+Q#r+g(b1!u+RX-$uHsL}*GCx3Q&zFE%(HVy} zXCe00-B|n?R#oV!{XHm??Si)@%r0&V{Zi1 zSM(goDflbkW|h3flix=$*ZU(@QDTi-!YZgYG)Ze9J7J|3a|O)#{yX}KV*7+md)0|* zYayU(Y@#vAgu>4j>*&|4rMs#1Wh7xH>RUp6I6OnbhezMvmnw)(Eb*M6u=;rs96on_ zT`4m+x-uHOSJ{G68+s^SpyaZu(OczoS+V%(hiA5kna|Y%SL`{8tBe&>{iZ)0bMY!h zLkfBYRTrfM?Q5WN^#zwNO;qTE4ZCu3#U300P{du)nG<4Cq>H`WdF9&g(R@&J#6+Pl zT(^@W7QbJK4$(1DU#aq7++DlbR~eCWRKZFSH)*8k-CGcVJDU>Sa04-wZFZ+{iA$zJ zCi_-y|FtS8%SFV>a&%QotJwXt4bvUSg6=#wDfzQc6Sv^wIcfDpl~ARRSMG;!DaYEXgB)E zp66{jnyjhTVDpXHw}6RG`gItGlF5d-$&1_csT$P{j1>_A{uGI;f?sm>g#v0Ef2S*S z0P`2zN3C-y+yT;Sug4+t2&=0w+Xz9`ESbg?^@qK$&u4hvyC5wVkSz0Zz;hAOUeS>J zJ%4sdl!!eJ{RHZtAl~B0bKRy`W{KUBN--QYgq{D8thj+&E8W`m4WOzJRlxw$)QGXQ zo*_l56+_mOy^7&F#?R%l8%0RL*}0|fGO8Mo*`;B}GHXe!E(TpDx)fl>H1O1Sg}2*t z{gud0LNA7h5ChdDfum6&j*V~4@2h+{8ghlZ-rYdb{(ibk2~JPcy%D8ez3~0R`Lkkz zUO7r+_amwm!OZH_+0{WIEicvH&t`V#pSo#=G!IQ#k@Xg)e^A8_dp2KCqF$MD zJS%o8b==k@LVshT#z%|lU(*-jtL^3cJrf*L#=tQa?cCgPC!B9>Yg}1oNFR9}6ly)nhfP(D z98~Xih*YxEia#|~oMx%$+%gy`(_Ys8oQqq$h^m!wH0lNn`C3Fc07o-d$YAzcDZO+i z@j~_&TPK>@=vwOajyF+uVV#ab>60R%ANbn?&97eb&hc*12A2*fRVe2AhO;4B8~Q_5 zYHyTsdR|X%emXXNC7m;I&;9Bx^5;ym5PGKafuq;^heEi^GqMz8W6}bj!#g=UuC*hT z-s!OPNwsSbMSx~odu09_{@=q#k&#riaRfj6(f~^L-e0Oy^nuPQ&XjqZFXEk3pVETv3r2kwt3ao(aoipYOPYoTQ5Gte*Bb#+N` z4a1~gZI$Sm(E?9KtgKuolt{RWyKUPRT2&RqlN9$Ts!MphOHItzxXLjc((HcA56t-;w%-<1~+h;ar>w1*`jZH}mSqh*^(AlKqFf7c~p$+y)!oGBMpqZ8u^yas9qgV7RY+8*=p-hnHe%45rc#riK9p4jK8;k-5U=v}VcSuZ z7Ame1VF2c(*yJt8awwYA#%ZsW=eNJ1VSaz(kN?PhI$Mi&`_fYtsw=rBQF-0cIuV_- zP|&d_CQgOW+zT_7*i=83UAJsbQ}Ypi3V0pQ%w438<=nZglFBj0 z2xT9{kUOphoV$R$ltn24jhMZUQ>8E$_Q>ii3|nUi#NMYh&EM3KxU&9oJYOPRSs_d_ zX}nmezJS076BtI#W_yuLjsZj0w@{6rO4XkTcy!1bUxN_iDCv0_IYd{Uw&KG2J4+9_ zVMjH%jFjdn0=69i#@sUN5Dl&R*ZMeA&m%@2%A>5kigR#y!#-brqtd32@1?Bg-mVYS zi`TElD_FVht58ym44nviHbH7^au zA79au|1pEi>J82$wUlyz;wG^?Y(_# zojL3Mg4qNeURZOVPD9eU0#|N9X1dDE=3Ct99}ELV23{=DcT#XmkyNR#ed|R|vAH}97E*2Ie|HM)XtO?I2k!5>`!HXnypFr5ec z%ZPp!e?*nJ@#z=|R|;_K3sdnqBHkjtT2NnHnFjG+NlVgyR(H|`nTHfR{X{CE;8!tO>uJdz?pB(pb1lo`mAk zQhiyHx8yq$rN!gtk(YiW@qQWcv!HszDx`M}H!qqUXFpGZaD*f7^rGIRwP{&3Z<&s# z3CmkzkRtJhCw&|p2RtK)c=VqR|PYJ)4?=Q%gU3l9p=l8W*^y3*9}h^nOv@E)=yw^WFx=oCkv4+8U%a(?>MF(Ec_?a7b9DHL;DsC> z(Xy{v{ajVOFLYNbW*?^=xxffr|H%EKIKQ|_OCax>RE>B_(wX;f+H8^cl%%-=UkYxc z7|u_awq2i?|7weoNo#c%37AfE7*41TSP;*znrL+z7SLfbQpDA#=4dd-Ui7RPc;<{h zh8m6IM$pxirv{I&8uF@zknSB(HvcNltl`v-rr%g7jQ`LN#^YVjt7~0i9Tr-@XH!DLX}pY(Ddp6TxZ+M5-m}i;lim+EsIn$nHd0M-*>xTS zY||7=fWxdDYL0h@$CcZ!xl$siF$)tDkZ68sw|$-J6;z|(Q=$EQnks+z8Kr17VuWo^ zg5c0?)ppTsdRbL*3m09T5&3)iBuOkK&L$DVv}2 zCP|~%w5rc;{Pw9EwwzvBIegU%_5&VUZ0>b@!>(N+f??(TT1F(hDv{uukHX4f*6jti zB5Gmp;1NxTC=M^C&|p=)`SD!W;)3)Z-M4mlzL6CFuYMWzGkSeU-KLcI#uV*{&ED;zQnbT$vVtm1A_xl`FOK*z@20Fpo;S9==Q5V`cr;G|^-| zog;ghLif<$CbTrpo68dN3V5Hh0B!eT*`3$g!66qacJi}I>;XXW%GH!8!zB*PmqJIn zFtRr%w`t;P63ITr?#BCZuKUXMIb(d+Tf4a3I;ENgE4VB>EM{9a9DI>GCPI4`i*axE zef#MfyrEdd|w4YZKCfV)Lmq%uM$-<1F0(Z5oyal zw;?U*@B=`MPwOmcG9~wTBC$X*3D)v3H*5scua}?at2rUE94!=OJD{mv>I(ikP-43W)-KBs z3Dgk&Aj5Jgzjmxjj7dW%ql9?{y;*sisQy!qX*?JQsVXzXS7BK9~e1v0x^8l_xB8<>nTuX zuQn74ZEA5Ic%jga@zxo-T%{)joFAE;$&V$uLUNaIHAH^X0*ghPooP$qvA$009lVWO zlII!pBGrQ-keq5hbyk02DPyVOOrp7#XK6LCe+%wrE4g|wa=%K$j*b9+_Dba837h3? zF`u4@(P!Jpp}PLv#DX!BdX4fl8zns2gwBs~*R_PH^~l=yW>Rx@15}HZMAyN_o0t_P6YcWQ`rO;jI|8Rs zqe=8@O9cKTr8ReNkmJ zX9T@A;5X$6171mb!0or*mgU9y8#1^FeoM#Qezn~=A^<$agb*wTITXaTNF1$wJR#3k z#e?YG4m_QI@%NX_isU|q6R#UgeIm}J9+|j`eYI}q^j3Piy@o)u5zoiJfw8OktBx$9 zZ5Ky_c^D zXV0>?N!tu!($D+u+T93V&HG|o1dL(>_L_~S4u74>d1~KriP`r|%O3e^oCLshP!pL$ zc275oHyD&viCDu-HIg*sc}zb=HalgA8PId+cCIJNDw$@b>d!JAQCiX;CKEdC@gR2Diucla&lds^im}PsieVrQL(k+RJRcg zmtN^$H}o*;g1mUY3b>$lvPUgUc1`&dVJAU@%CE-+$9NnDXICn_+Z2P=cVYY^mkKLqoMWp zv-e9yqsF*wQG8u3T52O#Cfywq*`@8oRxmspJbNS;KrbvH)rG_q%OA>=&gvfSLhRE9 zYe4q-Zn+g?HcKxZ3%BdMmWA_z4gqoW^n>cZu0#Twbf+DtqkLTQFPy;qQTnFu@;OoHT&%oDiBYKW3ise+x;>8{K% z>fb$~*%ytypE8CMV)zrb8PDikcZ7?>EB>Ew zjumjI#A~5r;S?@W^&o*nbgJp#vn4{F>~ZZ#3W~GEam?fS&{({N8ZXhi3asWHtZj9$dI-)Th-bV5acj^*<^;Wwe@_`<<8bQ@ z45iv+`n_ju68Z+OpT=1FYd=fFO(ZL>Ux*viLD@Xb!_}nlZDIyARf_5xEa9zf*&(jt z0`4WdqyvCxy_(UxbYhhTt$o4c{SvJ{>0mUQ)BKDvs`Bc@#Kv4@&^oPU1~oHOz7LKU=HvMFT_2Fdn@-#vbKx~e>fNp!mdfG9OFMmw z2p>7QaN*wb%P*`b?+P_rW$VJ0kzb!3tFkuTag+Ite!Pyjdw1%ycwnjOJkw3KVLnqb z$!0U9e1DAtAX)x2Lh=BRm&yEj_>-Sq8AgxqiJBTF_sO`)*pm?Rc4qDO(I1#Wlk!XR zY|c2ZFtgmwb2kEwQu+rK6Gz9Yg70Q22j82CF*4Gy-ZaMON%4Z}WZ2>~R2;!QEQ{QZ z(yQ2>Gi0T)9LdgX)Edi2otF^-N75EjE*>!&A0tMo3|NQSy#p3WM&4|8w$i%W(2G{ zy2qN(7|NM~on_>fEVlNM#^Q-rA?_q`zw7$2^>)d)`z014~rJ z>`u-*p4~9c#XR763~*^IBSt?Sxw>w~J4n+c_{>7?;+C;KZ*3UZwmZv!kLlH4h8Nh^ zbgf~;d-OeGFOn;qR;q~)p8FVQHw&!9@u*kyyjqg5R4+FGJ>=ZbZD>lQ0W;RPi! zO1@{+YoErr-N#tpYad!wpL%hpcvX_v*tAow=hx$aA7CXMcwIrer4&vt8?*hwt%h}%M6=V_b^|5RDT5kfub1uqjv zx>odQ3nKA5#y9fTIRouraWKn8PJ%u(Q}I0k+nHmZC7)z;##=Y?8_AL4xc$KH0OcX%)|PtRyVY%Ag4p4HfZ6cig7&tPc{g@aQzSA>X-dR~+=x1npYJ zrG&c#$(ee*siNy#<#X2Jm@-0?ya`iYb-mjNHml>#k%bhS>^DXMc6c^ooa16UO4^EY zFRJr|X~wK%{3^d{juV3--9=f07hJ-<>U)&pmLu_!hOVz9i}8iteM*|qBZM)%*F(!0 z_S4j@iF~M*74YGQ&~Kl~;th8iT{Y+%AdL>fu2c1L*1B^>dJAiu0&19Db7} z^gdvhZx}tL*UzJJEbH(nvY$K8ZS!+$t_AD!w7_%95UsRj7xnVr9r}5=8aYCl3HiB# zGFfS|9rnMUe`Bb9cF5+^MiAD0=Gl`%*XX=}-s@v_cQ*MC0IZ|4$8VlJucCRum6v6_ z9{vh>Rr-=@4xPb6He{`EvU48X2&KM#7Ih`VF-pC%tfW;XzWjw*FKb*sRqdr^`1SIt z{kA~zx#sWdhFui{`z$hdr%u)!j2RuFPOC3uC$1d{ubk}k-Yb!aUP*P@jQ4f=^!UT# zl7>i~ZIM2YnWa=-B<2n?Wl$T_2LCkKW zknf^=#0E?eVW0bgqcDQrg<9gLIAbJ9RSox zpn`7mez_n%*374Y2LNr1HE+({m-OF0Qf>_9v3PE$tXIPL2A#+qu_3? z|FyX3!w-9Kzzh>3EMEa_?}5`MmTcC@SlxeghwE(iVu6gRkw7A5ihfvgl)`URC8e)< z3>6NUm`-=Jn{zKerIVp_VL(j|6&6y>ivKctC-`^-{Kj%NSSHJEh|F<}R@O7GTQ+k+ zOvq*D*m+oy_=*x!IPF^QoC((PK}M~SE|LBVGI5yOMlVKl>{vr@o*L%fhPPuJ58@pP zT*a@Lq2a~z-Ye%h+i}%J0akz5N!2?${8iTcFWfu`_g-L6%19AOTlG;Iz;n`8+~`hQrENG4v$>VoPN~mc)b0* zMRA_|I0Wd2D&J75Nxoh}5oM-*V24@d!i{64f|$ z7K(bCDVbMfkIW*$+VQebr*TEnbLx#!^RcB;cYgh}xsqo2HkgJ>1nX2wQ_bnOohe@g zV!L5i5_vKW@$yDk+^P?$an%JnxIgBrIYuzan5Gq`ZUCvw8$$&dRCFJ-3h2tIL z@}Cqxok(~v`oaeKICP0jwM((mIN~p>H=o_R6rCwZp%7;@o=3IplXGEx;|ZJ7S2<4v zl~sBZ)kuMg>ki4r;DIDPTy1M)#^W;;zwKaza``BiBKlS)pt2kqpDL`;O}l`_L(czLZCco|zySeV|a8vR_Y6HB;#dc{43{QAl5XKdwz)Tnw8lzCuQ zCa>v(`7O%~<8%9D#;4*pT<8w~0X$6-0?@ zLm9{^BdxJrqj9mx!TrXb6$F1Y6_HaT>>Td;p&T42!H767T|VpxNzJ&y=vLyMQ%_tz zSyiq&+CyDA0GvWyl(&!}qyjfaNXp_n0r-(mcEQ(NA{$Bqo6gV;5=XePhbB-;u+hAy z6CjJ~-1zB)S4KYOUfPYu&!dM z;<{V`Q>7;pmI~qn9#!$m8H@SCITUdx6%GJ?ANME^kMu~}90}cmnqL!ST5q~4XB0+H zUtkDvSS_m1jpt=n(dnw+cz3}=?zXhyJ68~S2K&z9D4|I}M0xeNdM6pcYSMQuxJtZa z=nm{s_#F_dpR+M2wxFJ*D-c2suBmR?;lev_eq6z^bQa51#bC`bnnI2(Dp~{OewbF^ zC?dxos3JWrv(zuvYQzs;+qgLMV05 zL`tx~)|2oEJpAu{V%t=z>m{Y^(nQ+94=`HjNX z*yX>!mf2q@ZOOQt$nq}5+S{N{TXVm(>MA%b>{3sTDA;})UoctrEN=QmdR{CHe~hWL z^6JI6L1)g{Ji1#oZ<9tv?0u?u1@1VrM^`J-eC_=6UfynpmJVmLBaapzwCg~%`#z;F zR5yy)*zj26DE_AEdZWl~^H1+uT<-vn94BXiOk86<)SLf`4Tpf+N#b1ij?Vx-$inq$5qeh7j>&U zP9=0H=FV!_HxF@HD@Nqw+&{pMcY)7Cx}$&L%2NX)sem^qneDKKSgomIu&qdouMe{>_--ne-qpQ^VlM@%cdygO>jeIZi^3|n=)Ujz(2VBj|b zH~y&7?4LR5_?6DtvB!GIohVVw-bWlK6MJyutPfPdTGC4ul5bk~&!eo$!bzxUx@?8t5D2ut7 z?V+y$MfsM-ijl9jaVGu3JYjVnUE846_;`3;8!yhqMpSG6yF}_!<^jKX7OU+440H@D zLrF$Wrze9COET{D#K-mX)^2})_0>-8?Q0lIejB6PGh4XJT0~6FBWkN;AVk7bXcm%a z=p_={CpcgSs&O)&dGUrqU()tvAG`fVYEC<;Kk7`49-gb8^>WaFSRN*W?qkLc9{QuG zQQ1ceF&^UY&^8Nk)4Wy?dY&-fw*!Yo<+{7^V_X&81`B>=%cJN*h$#W{eUG6bXitXo zDBNm&(B!_C(4(iRmO%#eK3p5(m-(SZ8#%6TN1{@?S}aSlC@_W}o^!2ZhX1_&_}vli z>^<_$3UAmYpit|JN$tfN1cb!5B4)av`vPWb-y8zgKc}x~&4R7I7>{%Q+(cY^JpP)X zw;&SAj(_gdw+g(8kNqF{xsw&V%mtVN?w@S4dYazbQcHa~N+5Gts z&hME@6&wT3pp%8&c-MQ1f0i&1I%r z`{b)DK|prT)$9?o=RIsV&5$Acu;6DD)#xkJ!SpCyRfk$UYS(yHVmiBB?zP(&hmsmu zsV&j!d^Z6q!J_{tM9ofAFn4nr-;%Y^pmojAq?bMRUd&tmSo~{EUB4Vbi_F+=R@oQa z?xv9;K7k@aK?9I0eR86kXEiom{;%a!U*4fi2whY$nrIrvAX3+r;*>2E3>g64IXH)} z+5_F8#@)0eO*OR{%>2I2tbR%5Gaq5(AP-&BqJs@B7b{Km4mu4sjm(NDvk40Gz-H%6 z{Wlp`P1H`CtGkgqVA|{^J=b|dm4A~zW{80!6!Y0_C zdofhBB<%Wh2E(70Y*LF5!#W&?w8UaN!#kzE979R@bctI6<22B$mt)jXd_0*^L@&)E(keqxW`RzmI$Jqp~0b zn|Q65a4V(o2NNMQAjwtGAe2vT*TO&dT51on|I5%xs#T=mFF7|($iM>kv_BTiXQi`V zt<7O@I9G>~v7DN3HJBC_C}5aIX4Fgz{1=5#5M?ivAxrH^-u*>{W!7jo_iWK#!fJFIJ;C z?!{#i%*v!(B)c8g_iMZGI>%nchFa(>W1DLP>bww>FQ;qaq2PJoRCw8{)zVkFnF!Wl zeFLk`!ooYl_*3Vl%>e-Z4Lv~66Z6r{ZW)l z50nsc@>J8(_IlFRC^DIR^Rw(AVD{&z$Rg7dGC^u_w!}Uh>za?9QjK`(1wXHP`yU;` z)5R@vmh|auu1(A}9?KbW_YXWhtk~GuYCUsSK&G1RK}>jwU?)Syp>5(du2@Xk(6i-h zP6bD8hNJ%*4YQYF;nh#Ee3RAz;(^(*exW~xRj+-qlD>dj3>;u+0!sZ>E91OE1dn67 zCHEPLrS}T6WeaeP!IA~6Lpd@5Zz;grZVz?`ezYBf9=_N7UXpH~@NBSiW^q=K3lpiR z%_2&Ao6LkrRsKZL53`Jx=@<^S;*L2d=Eo6rckS-6ZMXuZ5|DPs<=%p`|HNPEHskOzL1u8v`)S%7oy6Mp<#Jin-(L&%M| z%w}M^!J3agK|cul^erauFfB%F#!{GACvB(wiSI)}N~?tZa3!8guZ1*o%?TaD&KmTt ze=8@q6er8bpyo2vebsOiWG}&kS8ftc>nRW5I^8vWc2EPGd;5)6*F{7+`p4{WR4-=3MVYWp|HjT@y0H3)^ z5v^Q?eLG2EQSxQ9s|}Vbpgd8l7~{fkP+O5qKS?ea}Z1}uQH?|ApvRn2YdSUfkyL^ufRMriv{4HFw*b^LI+ z+3E`|Q(xxQ*R5_6rBByj-Y!MUTyT6tpDMMrJl;*sL64dC6>RGjWxGUVD$*_sXf^$~ z_LRITI6d5jf<#`EFI&op(+7@(ERX@1IkPsY8G#{3Zlb>U)Gg?dSKBCnI_F8^zlB;~HdQexon(?L4Oq#MIf4GWh_a`_s5 zyUgzPnS$!{gKq^v{w`d_5s|a@xhhxEQ2cEXSd}-LJgFYSzI1{c^@z@zuQJn5YYIxM z0{Aj{M5edhXwRL=ZS(8bnPgwnJEG3icmQukMk>nYRc&0!$8YC;w<@}%|7A3|J9?dr z#=^;C3F__8WarYL_lr{Ud|%Np)b4;?DnkoYAaUQ8*gLA`IpslXbl8lm7!F+|Xgt}Z zLf2N}11F@4ItC2mAZp?r0D6j_=KY278`}=ji@Z$C;H%$G_`pGLv!$b7_1zm-lK z#P2!D+hHC&H@D9Sr%dXpEn}?^pZ}+N5VGZZV(^En~EYEWoM%1y&D4&A08;(7e=^W=;{I& zo+~SlC>7-dRWUba@6Dus?UHz~!%dj4N8k6O-|Xz;@fK4LSxc4Eu=wo$w`uD$EMO-r zqOxT{P3C1W(m$PHa=o&)Jaj}0X#ezs!uCZo?B;UV*`axwCi&4SLDWjT&Qy10)1kSk z#T2a5s@&wus#l9BHc_OKpZV z`L@&C=vS}*?p>SyGq-x3F3Of$-4evz%^S=P_xWrcbXc-u;?WUyUe()ox>bK=NA)|l z>yRcf*{1=ceJz5!kE94=b&VpiI4h;psOc4+8R9yQ940VLEph+dFWXzHAyxmKMUwlV zUBcM9LpMcgNBMx^Qhp-hDwiTMaFe}T zh#C;o+|J63DkZ8li=`{|L7%OX@iSiEr22+PrgdCh5XFRo0A)U=>j~>M375Hg*D#$O zk+y=bd36!hxoI+m`qAb!e5_A)R1Y_cTB=g70c?Yccbp~gF1W_{?CcraPDPMw6)q)9 zIK-wKfXNCU&AM+mBC9qthvW)S+R(g&4_;24rAK4aocy>ni8ga%?RUcVZLn80PAQtr zcSfqJgq@h#bQ`TgSf)Db=dx?_2lzBs>bJb*W9UG-T`;03crkyWlg&bf^$IiK)T-cK zWAN`eV~#|ZIHlAau;}kCq4Rn;N(7y1P%1yeDG~2We(03k(HcTQpiNF%OHNO`vQL|CG24vkm zS%Z-VkZP2iX#w$X>(=mO&SpyL_kfRKq%VP_j#QSf$jpJ?%Nu}@8hu6jDECT~1rk$P zR)h`7;#0Z4o}*#(&Sr!5OeM))%d%bT;@B?zFa=Y^9!qmIU#hll+-L>fh8D~8N6s`Y zse>akC?c;Im{Pqe<86??uo>fuT4(EdeL0F_$`;U!n0xJCEJC=*^VZ7cdbVxF=iv&3_SGyH>_B%3h$bS9^&lj?=r2w=HcZP zS5pFP=*li!$rBnZ0x({@gc|P`J3+4UXK+}L8FE)#|MY_}Y(sXk*Oxi3(=A^}^AT9i z0I4Y;tCcRhSA9OT@wofn^tkfd&$dyBzEZdKu;X~^-7EQq?wPnlYqaNPbo`mSZwNtBr znyjK0Ek)_aAYxnIeDPpr7Io{S&R;g`G2Q0$E5V*>=H5O)G4$C1cD*$dgZet4PHmnv zb{~NV%Ko(?7%2^tc&5fp;6Ql=Nh=-eFQ4o#-&>t;;7P)2s1C^faKPAGkn1#%a%|I3 zo$kF`uQk$-{kL<1C?e+ShC?OnRcc%iT|S$DIvX(|P({Y~RG{*LPH07-t{?goD33ym2I7l9>Q1VxmWtlloFSk7swaT&)ah|0+zSJ7qIx za%(LfI%Xwkq8Ny%(q%+Qbhe7gpX@&V$uK;$M8yL*kD)JpLHke#k*3sWS%}oR{oPkc zE$wdh%S?>#opNR_uSWiYGdliW&qh6E()>k*bm|7U1w*giTUN9*lAfBjr~u|_zbb6lIh(pl!N5I)w@l11WAE8k$W>1i3(*57WE zYIIrQS&l$r-%{V%8Hocj!iK)fkX7`4ynUr*OdV2bwCZEod2I1q1^B{)sVJOArXo9K zgEH=I)Oqp9bgLksTn@%;175?M?gU%x)Mvf7Xe*aHtJNeq-B77)XD44M_?%hrn(F@o z5#oWpJ9P9#vUmA+aLtXg7ONTn0dY12!Qcn+Q{oY$zKF+avu~s2Ek4zGg69f_Bka1; zA}--@w38#OJGY^q~awdkDE1}D?EPqQNWXlziSeC0_xZJ=(v!+=Khr?!clY0E#=4jt2f@7 zhqh+)X-7tWvtw`chzZNucctsZ4sX%NPt)K8n`y{~-z##VdOo9)e)uCmO%YcQHoqi; z4!e3HY-dHHU0jCHXp+GJ3Ao*1Y^(rFXXDO1!pXFZGn}`aiLfVAs1i zg0x(SWFPpiS$we3>Am;TRjL)2-Udcji)PJd$`siDNH2k0Il)bgu^CP1`Ql-j~K+u4kkASII zwnnZJb{i95BHhi3fuXcTN5!f=>6{3|x%$f1y1@F`0~5Ao#t9x2XBakIh1R~6^-t~( z00aWX4&G#~W<1;iQ1w*EdgrQ{+kT~X1zT1m@%9nz?eb-VjUEtq@+vldT1_>H&HY)- zx7b6gPXmwtMliQzE&VzbaR5H4@R2v)3;Janvlxwl$Jw`SRH+}We#`?h*z|{TcMrQ1 zW#f0`sEvq$g-;NOOF|+GUln~0ML4=iSH{h7z5WkH>aL}1>km4*Z&sdk|F~!G_L024 z>iQO?4lm2@)z2m|d~4@X*07xUEGI6Gc`O%;i-gG34Trx9j^g6FB0pEAtx`-SFhbY9 zr6QU7wv%8viwnUuSEV~21shI8Iu1P$$oMMTxC5ApkpZ0EKYe_|626#mwbA`aFEQBC zkd&X~pPJ3Rs_`smN;p*R0R27^*7oIwf+=9?&KP-GjlYQ`*bq6h7WkyLvranNBH}Sm z0IQJ{o3m~dyss_IaM!?Ec!$I)%PZD`PLs!8NRAPLo7y#{>0ph+RnVlmM$-+8PpLTt z0Y|8^+>aPbrA5MnJR<$hVi5~-_#@be#8U3irfp(>pU!rA@UsVJMGq(DDm=Smb*Mf% zwt0^N3$<~{mQT(~?uK(YdKV=RI!4QKUxJ8L>`vndQaKq4EZt2(S(uOvQN32KdP|^J zTK$n;E7J=hXO0+F1m@v~3R{uvms=74(e2xg=K9}(2HQ*BDS&16zmzyDO+Uph-3|R@vb3Kw13=+eeW<%Eg*x z{+k`8%jyW(wJsdn0j#&?iIvtCj-{Ras1^0wgV(?A?!1jOwVA8s97N+VdZu+|JdM2r z$mIy9S4z;Q!^1AF_`ZT`9Zei=yqpK&e`^FVB0k@(qd)$&6cG^mE zSCV1IWm<<7->KKEJu5PL{^ZHw(n;OzKdlq08}gRb!LZcCfSyi?e228VPOL^L)tcND zaMQ47PSQ4%l>{v$>yS>xwQc(0G6O+q5!!D3MtPR#hEOa2u(B)yY`R5xDE=61+CqzO z%}Y2Ied3E9CL7wZYX3W9^O#N>tn_OhWai!oEO_?70ue!8^|O_;eceSUlYNW*Ns*x| zeKccx?|%l?ofQz)9TEFOJ!ccg9SgLEM$o?06xKUun0LKkdvJp|^qu&rDbPyq9Ph!` zy)YM?qq+El|EOjHdK0emhN(0YywIy)TIYZ@c9(qj11WiRH|PUIZefZMLRUP9BO^rc zvogv85<lX@1Bg5=2vBQLAt1owN{9Q!;Spl6<19If2aTVwtG@~VaDRZHg&e}xh z25sk7vR2+EUUdJce4*Px>e>p(o`08lE)X{x`pnNQ<&RViFx#I2KeN;Ulw%owxT1k| ztrOF~?O8OF6!@`dR=NELiO)daDfhS&;%qFc-B}p`8YUUgxxpTFQ|V&^^&ZH=;}j8B z0k-Pt{gacIQ!*80=ngMPS^!wO(p<4hyR1&vDXS%@l8&z#XP7ll&_;1ELkZG?FJ(x+ zA0H)Nn1CidwgiFZ>ol(8p-`^)CwbJ}){X($yO|Cd(3eEwrzBO^iD$81>|I!9>C~3P zkMyasJQ_mGHjD8;8niG6O<}K01sC6DU1YRvXN6k>N3zoLJmEUeot}7L&xwV)f*B!u zd!2bFyCOSrw4aV!&U)GLfVPCf@_Jd|(|3uD#Ll*5`^`)Q{RKiJWaR=A(%3Y}2S%?} z<(NWH4yuG&bzVToBik2j6`XwlJ4+5Y-mc(jMq~FGDccExla*Q&WDys^`-taM_fYL6!IZXsAMVM{%Vz_slm)hE zBv_;}($hB3Z=H+8_b}Ty{rnil?4zA#dF~>6HEXpB>xN#fgwPt6&d7tN&w=jM-CbX@ zN~@rbl{fQ}4vOw;R>$32^_&SVPfO^S*+0%hZ{o?fN41X9jDfamRVb1 zwZnU-H*ZyftbBC$)J}c}B6(_$J5fLE7YcZPQPCD`QRjrw$QkbE|IJP0r_tfuus2t% z+b@TbcuoSf<^XlKLWcX6s8yF^-xeVy0?N1fs>D&!y0RLCT2`&q%`(`VI40Qx;t-D_ z2ik7YJjmSRWpCXhfz|-F%7cQ)e+kW~Ze~rgQ@V>jj!TD!mj^!Lsz~O(D@HB~wBYY} z7vL|?otc`PyIq{Ng3p*M27JlB1g7yeQ#0DOCJ1J+_x~*a6FOIZ0bAO3@sXDQXZ$MU z>R~z^@cy$WL)aZPsP89yx)yaPtgK`$wbdm9rJ$WPp-GZG(Dy96!6$6^6)5t~dU>O$ z_xEh4@MwzT(@)3d88?0BjKaRH;=O+zEI>JbYgfSCE9hz{CSOe+_<08tKrTVBrVr#H z=Iz}>rzk(CLCZ9?i@e=gyJ^ zTWi#$uJ%00Azhz$bVn_(yoaJ>?&rDYGk@G4y&s@O?>9{F17^|CUv z3*4*iUGy*ej8~S!dtM-tTq|K{386VITjG(9a7G<|M6ag4WG+3c;)kGQ=TXZtTsP)&{-8H&N7}UM!b(! zWnv80@k}66Jn>;(Xvr1#i(k_XjBDo=Y^rv^ei z2il`bSh6x!@oO9{lPm%bjTIuPE%=b04@ch{IFvp9AS#}7uHoR)fFPKrc5p;Bw#_Wx z1o`QzqFlU%KsK%0uT%de1Ewh9X`9)M;NTxnH{y-aLf?x`cMPpml!%(nfyS^-elstKcP@FII|MV&cYs~nd(E|>9-)MnlfZ$!?CU~yp$ z+qrZuj)V2mV6sGbMa4w~C+ccJVP>LagBCv+uogxvS4Q=b!V~qO&~F|HNW={>+EN8@ z&jy0Hk5zx!KMu}pd->n|X!O#c(tv9Y)PD=Q~C&$G!ytIg~@SqXg z{MXWv=CR{w$1eLGN{;j55(hAl7RLV?eso~s6z`{ijz5NdsINHMguU8Z9e{+~L+jKV z@C~vsBvBlWo( z3s)S=%)GR=p*Fr;QS4C-R6>Nh2V_{S5T#S{9-r;oFPhE9DQ!+}>l{qzWtVK-tVrK3 zS6%-EUJ4r0Wk%+PUj+7J&w0G;#4i&8=L0r!x4WCP?2}Ke3VnT0X2H7my;-bf3?d_E z2x9i9FCV^%EC=|Ow0zpX#|n`O`=4T9^w+@fEGt9V8WS~QKk#iqCEqW*k2tAK^m+C6 z9T`;iT2XwRDbQaet8W)0g)hv2FJd1{zkwMlhKX6~PeA>Vl0$<^%W$7Zx|SA@TSvom z_#!R)6k<&sUnZ6yQP9N`lXUG1F~4t(_=^g)JP79=6sIeO+9Xo_N${U#83O6dJ$Lwc zt7Oc#y3Z;?(?k*{+LWA5RnMLCP6o)32Om5nwsCMpx}wD5_>84pEA=-r!u<~FQ=9*z!vvsVQ+tfR-Cb5rK!*zFm_HPQYJNYI)xoop_lbc|_pWDZ; z{#tFMc7TSH&XP}gYnRsi#%O`L4(tZIV!!JIt(B-9^8g2h8+o4b06DR^Sf;^I{tT1g zLeEc5_09-gpbMPuaJ3%iGV&GEz7^(Ky_7}(;A3rS=&j^iwrOz*fK)}YqS2{Mqc~|j z>)8`&44QEe$mK9o73C|U``g;ZLpQc6haSA>C&OxSEt>wpV)9!J)yHe=c^%v(4bqPz zQ3?uU;*ydfAZPJy-ij;`YmaZQw7gB;{|5SoRoU_Y9J0J15scgAlgODEl}ZP^kcrEq zP#Tx8x%CAzz`8aZO^r!qQAQWV74t6jk&pv*b|3jxY(pxZZiv7ixfJJ7y>8rOPGC@T z9tl`Z)kV(uuFwq=d|CV(#qi#mE&CVG?&+xhh6p`Au=M!=vS z6&Z%?LwuEQ^UUu!iOGox?qt}PQFla#HHJP&iacw%khn`&bk`doN96C5p9nTb*d`KeZXK0m$n?wV89ox&cXT*oC@T}BU(t9+s=7du(j1a zL-Sd>hcHOvTv+QzdNWcH?{zt@c4QZI3I8`aX7^O6S4eh+mm_cA;ZH-xH;VCOYRNxt zU~<*Xu`MWsWO6;z@la5k^~sCFK26mGeq~)Ng4ruM#qsCAX0}$@^6CO?9&BFiKm9pZ z1qe8_DF_Mi4;9>d`?wYAL#nN$P3GHfnJKw=FtGeX#M*@;$5Gp-c)a{$qIv4e6C(D` z%%W|((UT)rJc)sO+lc$(uAk6fpb0OJh)Ad^zO~E9no9K!!3?(&w$l8+bDuJ_#7?IN zM$~Xw@VDpgcYON^uOF%DvSdW=L7eYOLKS`;=p#26Fho?27qCBe5ZRjn-DK}?g`J8Q z{`2ZPr1*}-kaNAC*Oz=*~CaWJozvf2rQ867i$1Lns}r7g;COb zn51!Qto&5Ll4pKf5Sad0Ep8)rTCh4iVJj<2=-NZ4A{k@17&MN%ocB14Lpl3<)1MKl zk+_wb;gEjJ4+7(u-eZDmMmTtQTC6Nl3E%}8w?ew?l3hnOkq?eOlQP3^WTK0Zh*Bk< z9S|Q+q%A-DK__S({|-KNk*dgC=Xdx9;e7X+hhN`4*O70F;wfuI5j^)BujT+Xb@xpt zVjV<&+vvDE4qnqma39e|MDOULqSrDWX1ck?DK`8BGKltNpww$?FHK_p3bWo*1Z#~^0 zFk;KG*Pf4}m}9LT1Yg>kC$T6z4liXp*aNS=yqGCJIwEh`m?gq!9ELtGUS{r!d0^WY zfm8MG;@-4*Gy$j_r3qW>kzTwhPQk&O(Tra2I$=>#P^` z(8d~kPzXkZ$!@0x$Uh?PN2Tja<&|WDYJ4>StfncGaXsvCwJs^-T>60RHV>Hx2n2tk z0GBS1-nZ4$#?!ydM+PHlyzJNRj|8LtlK;0|ny%a-XW1^ffXSobRE>T-AhsXB2~7$% zQRJe;T78Nwc5++~4gBL?GASsz$mWATV`jpaZ~ooY?mmTn`Qhoo&BIpk`c351MaLZB zs5~=Frr{Z}kZpm!E2K)s4jO#DMQXYWP*zbpc-yKqr-RH(geh04d16UBb+-eBs-J6t z3URl@0`xuzzi)2?s;8jm>ii$nMpRRV$;cd%F>L_GYi3>2=Jl`{_Td2+x7CkOh|}6b z>G-(}2)j*#eoW;h=h(%z?A$4(7eXh?4OY)1U1SCF(g=dWBJnh z5qHu{c5*80`9R0i?Ca(G=Azp6NV$i-QsEgX~EHj8p>3BJoV zH4%pBSpet)`YHHiY{0Ltt^tilDIC)LYOG)6Xx`-?37XELl zq0cU8X7&lD?H;&5}iOUedj?+F9jGVA!@{2#xj!`DaJQR3|S_GA-v zOn<-isq`yTkmZBJf~P&9S3F{_@H}u_C>)94rcl8ZN_{^nYnvFQ_3ML-#iqMFXK+aB z-3?FgzyFhrU7J2)5og$k&^t&jcqIVMs7lK{%v;8D?XH&!Tu8c){~`?}=ol}R0S!fp z65mJ!F^w~tia5N!&XzU5|8p*TN1&T;_C=?I5}Wzg{^{wt){e7FMclxI-t{<@;d*2% zsPG_Us&cJ%AudtW(4&_->02`oc$kMl2Mv0WH6b+1s_?69dA7wfqaj?ZI=FQvj4S0}t4mZ|e0z7-yyL^&-XR_MTiiq@M54e=b4L(K0v}J} zrnk}x#Jy~|8UXDuKO+_ouMepPyH*#@vVCG@m}T%M!1n?8c14~1aDoQQ1MO=$#zea( zWt^KOcVUA4t#(B>v*XNo1@|?(f77t|YLBDknwFbxL$*Cs!T*9$)=1_|(d(a2Iq-0< z<_P56W&(pIzz%%N-gBhfa{r;&Ow!Bam>~Ez+fUER4^#`0hg#^7AkC19=YL2!D?XsUtZa>~27>cDw+Er~7B^2Dp7gRr*BFAnwb%LEjMPoafODe zlnds^(yQ6kdhl8ogo5{xWiXRfq(S-VuEnqnOVuUqZ&1Axl;NE)h;anAY;#iJCn6lR z(JGPm0MDAQfx0hlHh@N(BysTiR3c{z=-66~)gx^e@b1Zj>h?Sua@_~IpT$*wE(~3Y zoCzAF0@&Q^YlG7ABQa>3xGjHNaQ0^{18d?U`|T`lEE}s}oXArjY3~1hJ7go%ciSu3 zx8NpMMt)!-^FMZPrkZ{Qx-Ut5;#}MKR^@E=52YMr{K7;t{Y&?}bNFk?E&#+y=f|D| zaYM8kq}$G~}28 zWdsdtKC-SMx0(}cJ}G~>-?375j3*@ZRcfP#UWw1uG^r5n06%K1ok!xs49|E9Fs(;^ zW5<4+3GP}MR;+NZ6c_s^8?0*#=hf6~H=5%q*95RXv~PwI&HW09OH11ZugYHjXs6{s7tmqgz`fQXK! zw=6$>n~G%d^ibI1rI=d{;|3~ecx|;1`?X8u*qJEB2$IH8malLjdut#)#s6@mJOB6c z>fLp5Nek^DTe6x96LY9}HCboQFZbWK;GUipaw^zDFC5um zRF#TgjZvcJ?+8PAH*ICE7XL>Ths6v2-2?M+&wP-q3 z(no<>ML<0A z_}|U3yO_z#(d@FF0}>xtZ)72m-fat&L%eht{JV3>CsoT*-%esPE~paz83B)mkLU0e z1n$-K7m|D(b(n9Lcwg@xTbh$KLw9!%t!wgzd#i3fR#9d+lDlu@5T=x3rY7+DE@WHu zYV1%M3$`&g=pwwjMr()8gPX4+k2}fje1qBmU#Xp%+>=|;Pj7qYJTzd)EcCABd#c$H zgK_7?#(8zk_L8PI@5Wi3Ont6_skwd5om*qAV0fM6usrYAdXF5;8x-P`!|?dCoa<(@ z5Ug8!B<9M~GTM|6_XecGp&$$8zH;4IXI8L!(C#FB^hzE}LHshuPtwgf3GL*ST^J~! zYIHwU4gz-qGuc$EY}p=wRuP8&%4%gmULqVA5CIe{D}KXlpPSGF%9#A!rHo?-3_RlEz@%w z-#8nTwWZv+cyhsfQbX%1b;lgu*Q#qr+nGpYepMv%3%|zBhUHx(%D;Wqiohwdh%>K} zz$a#bD>89i!H+b&%L-r00kaM*PVFAX&y{tGni34VHFagDMnzA zr&~=&mGoNvcGF*-oX#-g!EfF2q=-~>;-B5Uag3hsaqQIzaY}&;y-$HQW(Kx$$ZBhp zmK6jA$lnW$DaRN!^U+&o*PO7|Mv#JyHtmu2;i}oFTJfAuag4C^n~yH+dX;IoFL9GT ziVS67g~J+V?{UR$EtF{P5w`tnoe*xPP5QQO+YMk13Vv`R1yz1pOOfV7mBo#b<;im` zH{}q?3mhhLiz&s@w)?KYGMLK}{wN#&P_ovCNm~)j+^Wlym-05l^2q}|3oW&rMDcOv zDxTJP`E~T7rG2J%DtMJycTZn6HuX8{Q-jXMk6c>o8RaJvf^y?Nl^FAR!BZ=PqXK7< znS%v^6qT{;!cw%Itm}accw}B8Wz(iX2&kR%?g2X9w!}_YgQ>Jgag#?Eh*&CA=dle! za6=odSGv6GE|l;ZP9BFR-;0!B#xH$Fhw7>=hS9v#IBe(BL<@cyws=gPxL_w~C0y^| z+p*oRcm1nXgk!W>&up#1du@ft?K&NnAEromqHV@pZHEtoVAOBw$`RL;>-D4u|K-ft+0Pr5w?H3Rr@rk09SoFfVB80?N96!UnHxhLoo1 zohh!;oe}diOb+cAgItFpB)t!2I^!*U9iiI`Fjl;s}H~6P_m#B z%!@=5(x>B$e*ZkAzR61JJhn6N-o!OT@T!e%h2*5b{g*ngn0-4%8_;DkBcJKYez~Ql z0sIJw34)mr_vibzil;Km$0^YuscT#}rL4^k&q;=w{W5>5%^y9{Bxuz;scMCAyH4{5TCy-K z6814kMl^+Gu!5B*LRaoaFjt0gIG$}5@jlYPh($0#@2d(hhwoA*@0^ZGDEaPUdrGG5 zV_RH!RtR;nNHfMJoguuW+91(DANcIs!c2$#1532ysrFt-@UEvr^1ufGHcX6=dO7WA zde-KdU9ZrL($ch4vhHC6SW6*bNJ04Er-+YU5Aar}Ld*xyF&P>5^DoG!T+vBzB~loPI`;o_{;+ZNtkE#sUF>nDf#L9omxq9O{6D@L<274jGs<@OdF{;Xl4{6GX3v58n%UI0UVNSU zsx2@8Ro(+01yXXpJcr`htBs%VRfpNwcvdVgr{B{WNB~W=GWiboJ;IHLWXHL1MPF2; zFa$?O+G$za^bDok?{pf-j~o8ufr-iIG_Y6QUS#5IFfn>FK^ZFJ%r37o91nVNz6TEc zcxy+s<^(S<$|r>rW?pT@VIK@CqH)W4f5?JgKM*hW6v;uVSjY5e;O(<}?pY5`qcDme z=?yP?hF6mMZ>p~M{_<|I6Y9aPaM!KG+B2l9;IudKQMRvd2Wrh?#omZZHRrhA&aXxI zg(YoV#(J0go~)?AZrMx%s1Yy2;BM5av87DG2k>mi-nSdv6^fddDwG3sn-FU^>65n0 zP_UMK_>B9q&3)%f^_BD#79nOj>piQh1BQ)K_k@uVn!-^32*DJtAR3>0u#iHn>F$0v zZOgo9DVxunHHSky_?j$r=&jU-l?9OkvIhr}X@HSROSHX*IIma@ZmQ)z@YZY9+@%|D zUJE^Kj6*tp{@t&}v}J4TKen8ym&4v(qY7OVyJSHb42sc?2JR)zJbjf$P?%*d*)GL| zhReq3Dmgg9uo(WHu(xMxqh{(oqQTHKfXf^&TMb1y1|_UP`>Pr93xM}^2+5mo zbjM0ID`s_V9*t!4uw`nBk4Sh>i=Mz*?YtMv2K}x`M-k9v<@U{C3LZed3)K0I8s+pB z6A@h#M}}f#q5BBctb#NsFyCr6P-4w|7si=*R%ynToOTyp6%n<>*AYx!UdA@zeXys{ z>pptfB(62op6m|qdUEia7lGUDZw;;}fMp3I?Sj=|bPA>q&Z?7^8xHL#0;?ZSMrawJ z&g?)XbAxiw{;uU92Qv@nml$rNFiQ=oz_;18x(yMkXKwvPN_JZk`plS&U@JkOOV5(> zMf84I;M<)BVqvzr>_?#-p~)*0quVL>RPzOa{X}W0%Ip3v;c8F^;BRDIpzu^9Y{u{< OK|AoQtoQkUpZ*UiGq?8u literal 0 HcmV?d00001 diff --git a/crates/re_ui/data/images/onboarding-live-data.png b/crates/re_ui/data/images/onboarding-live-data.png new file mode 100644 index 0000000000000000000000000000000000000000..fe722309c2f78cb836f94dede1736aa88b585001 GIT binary patch literal 3776 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 Qcfm$pRz;>l>SMtF0r;ZPCjbBd diff --git a/crates/re_ui/data/images/welcome_screen_recorded_data.png b/crates/re_ui/data/images/welcome_screen_recorded_data.png deleted file mode 100644 index 34ae4c4c4c27fc98bf97e8ef11167e7df3b9b091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4755 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 diff --git a/crates/re_ui/src/icons.rs b/crates/re_ui/src/icons.rs index 5824007a72a4..1072661738b0 100644 --- a/crates/re_ui/src/icons.rs +++ b/crates/re_ui/src/icons.rs @@ -109,15 +109,20 @@ pub const CONTAINER: Icon = Icon::new("container", include_bytes!("../data/icons pub const WELCOME_SCREEN_CONFIGURE: Icon = Icon::new( "welcome_screen_configure", - include_bytes!("../data/images/welcome_screen_configure.png"), + include_bytes!("../data/images/onboarding-configure.png"), ); pub const WELCOME_SCREEN_LIVE_DATA: Icon = Icon::new( "welcome_screen_live_data", - include_bytes!("../data/images/welcome_screen_live_data.png"), + include_bytes!("../data/images/onboarding-live-data.png"), ); pub const WELCOME_SCREEN_RECORDED_DATA: Icon = Icon::new( "welcome_screen_recorded_data", - include_bytes!("../data/images/welcome_screen_recorded_data.png"), + include_bytes!("../data/images/onboarding-recorded-data.png"), +); + +pub const WELCOME_SCREEN_EXAMPLES: Icon = Icon::new( + "welcome_screen_examples", + include_bytes!("../data/images/onboarding-examples.jpg"), ); diff --git a/crates/re_viewer/data/examples_manifest.json b/crates/re_viewer/data/examples_manifest.json index 79e4d619a927..cf97a410b3e0 100644 --- a/crates/re_viewer/data/examples_manifest.json +++ b/crates/re_viewer/data/examples_manifest.json @@ -11,8 +11,8 @@ "object-detection", "pinhole-camera" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/arkit_scenes/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/arkit_scenes/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/arkit_scenes/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/arkit_scenes/data.rrd", "thumbnail": { "url": "https://static.rerun.io/8b90a80c72b27fad289806b7e5dff0c9ac97e87c_arkit_scenes_480w.png", "width": 480, @@ -30,8 +30,8 @@ "pinhole-camera", "time-series" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/structure_from_motion/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/structure_from_motion/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/structure_from_motion/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/structure_from_motion/data.rrd", "thumbnail": { "url": "https://static.rerun.io/033edff752f86bcdc9a81f7877e0b4411ff4e6c5_structure_from_motion_480w.png", "width": 480, @@ -47,8 +47,8 @@ "mri", "dicom" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/dicom_mri/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/dicom_mri/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/dicom_mri/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/dicom_mri/data.rrd", "thumbnail": { "url": "https://static.rerun.io/b8b25dd01e892e6daf5177e6fc05ff5feb19ee8d_dicom_mri_480w.png", "width": 480, @@ -65,8 +65,8 @@ "2D", "3D" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/human_pose_tracking/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/human_pose_tracking/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/human_pose_tracking/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/human_pose_tracking/data.rrd", "thumbnail": { "url": "https://static.rerun.io/277b9c72da1d0d0ae9d221f7552dede9c4d5b2fa_human_pose_tracking_480w.png", "width": 480, @@ -82,8 +82,8 @@ "plots", "api-example" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/plots/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/plots/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/plots/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/plots/data.rrd", "thumbnail": { "url": "https://static.rerun.io/ca0c72df93d70c79b0e640fb4b7c33cdc0bfe5f4_plots_480w.png", "width": 480, @@ -101,8 +101,8 @@ "object-tracking", "opencv" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/detect_and_track_objects/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/detect_and_track_objects/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/detect_and_track_objects/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/detect_and_track_objects/data.rrd", "thumbnail": { "url": "https://static.rerun.io/efb301d64eef6f25e8f6ae29294bd003c0cda3a7_detect_and_track_objects_480w.png", "width": 480, @@ -117,8 +117,8 @@ "3d", "api-example" ], - "demo_url": "https://demo.rerun.io/commit/5be001c/examples/dna/", - "rrd_url": "https://demo.rerun.io/commit/5be001c/examples/dna/data.rrd", + "demo_url": "https://demo.rerun.io/commit/6f0c1f2/examples/dna/", + "rrd_url": "https://demo.rerun.io/commit/6f0c1f2/examples/dna/data.rrd", "thumbnail": { "url": "https://static.rerun.io/ea7a9ab2f716bd37d1bbc1eabf3f55e4f526660e_helix_480w.png", "width": 480, diff --git a/crates/re_viewer/src/ui/welcome_screen/example_page.rs b/crates/re_viewer/src/ui/welcome_screen/example_page.rs index 8bcd4ed2f599..e8dde8ad9922 100644 --- a/crates/re_viewer/src/ui/welcome_screen/example_page.rs +++ b/crates/re_viewer/src/ui/welcome_screen/example_page.rs @@ -1,3 +1,4 @@ +use super::WelcomeScreenResponse; use egui::load::TexturePoll; use egui::{NumExt, TextureOptions, Ui}; use re_log_types::LogMsg; @@ -105,7 +106,7 @@ impl ExamplePage { ui: &mut egui::Ui, rx: &re_smart_channel::ReceiveSet, command_sender: &re_viewer_context::CommandSender, - ) { + ) -> WelcomeScreenResponse { let mut margin = egui::Margin::same(MARGINS); margin.bottom = MARGINS - ROW_VSPACE; egui::Frame { @@ -144,7 +145,7 @@ impl ExamplePage { )); ui.add(egui::Label::new( - egui::RichText::new("Learn from the community.") + egui::RichText::new("Explore what you can build.") .line_height(Some(32.0)) .text_style(re_ui::ReUi::welcome_screen_h1()), )); @@ -232,6 +233,8 @@ impl ExamplePage { }); }); }); + + WelcomeScreenResponse::default() } } diff --git a/crates/re_viewer/src/ui/welcome_screen/mod.rs b/crates/re_viewer/src/ui/welcome_screen/mod.rs index f6a361cba205..6b44c9149788 100644 --- a/crates/re_viewer/src/ui/welcome_screen/mod.rs +++ b/crates/re_viewer/src/ui/welcome_screen/mod.rs @@ -22,6 +22,12 @@ pub struct WelcomeScreen { example_page: example_page::ExamplePage, } +#[derive(Default)] +#[must_use] +pub(super) struct WelcomeScreenResponse { + pub go_to_example_page: bool, +} + impl Default for WelcomeScreen { fn default() -> Self { Self { @@ -66,16 +72,18 @@ impl WelcomeScreen { // TODO(ab): figure out why that happens ui.set_clip_rect(ui.available_rect_before_wrap()); - egui::ScrollArea::new([ - matches!(self.current_page, WelcomeScreenPage::Welcome), - true, - ]) - .id_source(("welcome_screen_page", &self.current_page)) - .auto_shrink([false, false]) - .show(ui, |ui| match self.current_page { - WelcomeScreenPage::Welcome => welcome_page_ui(re_ui, ui, rx, command_sender), - WelcomeScreenPage::Examples => self.example_page.ui(ui, rx, command_sender), - }); + let response: WelcomeScreenResponse = egui::ScrollArea::vertical() + .id_source(("welcome_screen_page", &self.current_page)) + .auto_shrink([false, false]) + .show(ui, |ui| match self.current_page { + WelcomeScreenPage::Welcome => welcome_page_ui(re_ui, ui, rx, command_sender), + WelcomeScreenPage::Examples => self.example_page.ui(ui, rx, command_sender), + }) + .inner; + + if response.go_to_example_page { + self.current_page = WelcomeScreenPage::Examples; + } } } @@ -112,15 +120,8 @@ pub fn loading_ui(ui: &mut egui::Ui, rx: &ReceiveSet) { }); } -fn button_centered_label(ui: &mut egui::Ui, label: impl Into) { - ui.vertical(|ui| { - ui.add_space(9.0); - ui.label(label); - }); -} - fn set_large_button_style(ui: &mut egui::Ui) { - ui.style_mut().spacing.button_padding = egui::vec2(12.0, 9.0); + ui.style_mut().spacing.button_padding = egui::vec2(10.0, 7.0); let visuals = ui.visuals_mut(); visuals.widgets.hovered.expansion = 0.0; visuals.widgets.active.expansion = 0.0; @@ -148,7 +149,6 @@ fn url_large_text_button( if egui::Button::image_and_text(texture_id, ReUi::small_icon_size(), text) .ui(ui) .on_hover_cursor(egui::CursorIcon::PointingHand) - .on_hover_text(url) .clicked() { ui.ctx().output_mut(|o| { diff --git a/crates/re_viewer/src/ui/welcome_screen/welcome_page.rs b/crates/re_viewer/src/ui/welcome_screen/welcome_page.rs index 35cae6a1aafe..e68dae2b8d67 100644 --- a/crates/re_viewer/src/ui/welcome_screen/welcome_page.rs +++ b/crates/re_viewer/src/ui/welcome_screen/welcome_page.rs @@ -1,23 +1,23 @@ -use super::{button_centered_label, large_text_button, status_strings, url_large_text_button}; -use egui::Ui; +use super::{large_text_button, status_strings, url_large_text_button, WelcomeScreenResponse}; +use egui::{NumExt, Ui}; use re_log_types::LogMsg; use re_smart_channel::ReceiveSet; use re_ui::{ReUi, UICommandSender}; -const MIN_COLUMN_WIDTH: f32 = 250.0; -const MAX_COLUMN_WIDTH: f32 = 400.0; - //const CPP_QUICKSTART: &str = "https://www.rerun.io/docs/getting-started/cpp"; const PYTHON_QUICKSTART: &str = "https://www.rerun.io/docs/getting-started/python"; const RUST_QUICKSTART: &str = "https://www.rerun.io/docs/getting-started/rust"; const SPACE_VIEWS_HELP: &str = "https://www.rerun.io/docs/getting-started/viewer-walkthrough"; +/// Show the welcome page. +/// +/// Return `true` if the user wants to switch to the example page. pub(super) fn welcome_page_ui( re_ui: &re_ui::ReUi, ui: &mut egui::Ui, rx: &ReceiveSet, command_sender: &re_viewer_context::CommandSender, -) { +) -> WelcomeScreenResponse { let mut margin = egui::Margin::same(40.0); margin.bottom = 0.0; egui::Frame { @@ -26,26 +26,7 @@ pub(super) fn welcome_page_ui( } .show(ui, |ui| { ui.vertical(|ui| { - ui.add( - egui::Label::new( - egui::RichText::new("Welcome") - .strong() - .text_style(re_ui::ReUi::welcome_screen_h1()), - ) - .wrap(false), - ); - - ui.add( - egui::Label::new( - egui::RichText::new("Visualize multimodal data") - .text_style(re_ui::ReUi::welcome_screen_h2()), - ) - .wrap(false), - ); - - ui.add_space(20.0); - - onboarding_content_ui(re_ui, ui, command_sender); + let show_example = onboarding_content_ui(re_ui, ui, command_sender); for status_strings in status_strings(rx) { if status_strings.long_term { @@ -59,115 +40,189 @@ pub(super) fn welcome_page_ui( }); } } - }); - }); + + show_example + }) + .inner + }) + .inner +} + +struct WelcomePagePanel<'a> { + title: &'static str, + body: &'static str, + image: &'static re_ui::Icon, + add_buttons: Box bool + 'a>, // returns true if example must be shown } fn onboarding_content_ui( re_ui: &ReUi, ui: &mut Ui, command_sender: &re_viewer_context::CommandSender, -) { - let column_spacing = 15.0; - let stability_adjustment = 1.0; // minimize jitter with sizing and scroll bars - let column_width = ((ui.available_width() - 2. * column_spacing) / 3.0 - stability_adjustment) - .clamp(MIN_COLUMN_WIDTH, MAX_COLUMN_WIDTH); - - let grid = egui::Grid::new("welcome_screen_grid") - .spacing(egui::Vec2::splat(column_spacing)) - .min_col_width(column_width) - .max_col_width(column_width); - - grid.show(ui, |ui| { - image_banner( - re_ui, - ui, - &re_ui::icons::WELCOME_SCREEN_LIVE_DATA, - column_width, - ); - image_banner( - re_ui, - ui, - &re_ui::icons::WELCOME_SCREEN_RECORDED_DATA, - column_width, - ); - image_banner( - re_ui, - ui, - &re_ui::icons::WELCOME_SCREEN_CONFIGURE, - column_width, - ); - - ui.end_row(); +) -> WelcomeScreenResponse { + // The panel data is stored in this ad hoc structure such that it can easily be iterated over + // in chunks, to make the layout grid code simpler. + let panels = [ + WelcomePagePanel { + title: "Connect to live data", + body: "Use the Rerun SDK to stream data from your code to the Rerun Viewer. \ + Visualize synchronized data from multiple processes, locally or over a network.", + image: &re_ui::icons::WELCOME_SCREEN_LIVE_DATA, + add_buttons: Box::new(|ui: &mut egui::Ui| { + // TODO(ab): activate when C++ is ready! + // url_large_text_button(re_ui, ui, "C++", CPP_QUICKSTART); + url_large_text_button(re_ui, ui, "Python", PYTHON_QUICKSTART); + url_large_text_button(re_ui, ui, "Rust", RUST_QUICKSTART); + + false + }), + }, + WelcomePagePanel { + title: "Load recorded data", + body: + "Open and visualize recorded data from previous Rerun sessions (.rrd) as well as \ + data in other formats like .gltf and .jpg. Files can be local or remote.", + image: &re_ui::icons::WELCOME_SCREEN_RECORDED_DATA, + add_buttons: Box::new(|ui: &mut egui::Ui| { + if large_text_button(ui, "Open file…").clicked() { + command_sender.send_ui(re_ui::UICommand::Open); + } - ui.vertical(|ui| { - ui.label( - egui::RichText::new("Connect to live data") - .strong() - .text_style(re_ui::ReUi::welcome_screen_h3()), - ); - ui.label( - egui::RichText::new( - "Use the Rerun SDK to stream data from your code to the Rerun Viewer. \ - synchronized data from multiple processes, locally or over a network.", - ) - .text_style(re_ui::ReUi::welcome_screen_body()), - ); - }); + false + }), + }, + WelcomePagePanel { + title: "Build your views", + body: "Add and rearrange views. Configure what data is shown and how. Design \ + interactively in the viewer or (coming soon) directly from code in the SDK.", + image: &re_ui::icons::WELCOME_SCREEN_CONFIGURE, + add_buttons: Box::new(|ui: &mut egui::Ui| { + url_large_text_button(re_ui, ui, "Learn about Views", SPACE_VIEWS_HELP); + + false + }), + }, + WelcomePagePanel { + title: "Start with an example", + body: "Load pre-built examples to explore what you can build with Rerun. Each example \ + comes with easy to run code so you can see how it's done.", + image: &re_ui::icons::WELCOME_SCREEN_EXAMPLES, + add_buttons: Box::new(|ui: &mut egui::Ui| { + large_text_button(ui, "View Examples").clicked() + }), + }, + ]; + + let panel_count = panels.len(); + + const MAX_COLUMN_WIDTH: f32 = 255.0; + const MIN_COLUMN_WIDTH: f32 = 164.0; + + let grid_spacing = egui::vec2(12.0, 16.0); + + let mut column_count = (((ui.available_width() + grid_spacing.x) + / (MIN_COLUMN_WIDTH + grid_spacing.x)) + .floor() as usize) + .clamp(1, panels.len()); + + // we either display 4, 2, or a single column, because 3 columns is ugly with 4 panels. + if column_count == 3 { + column_count = 2; + } - ui.vertical(|ui| { - ui.label( - egui::RichText::new("Load recorded data") - .strong() - .text_style(re_ui::ReUi::welcome_screen_h3()), - ); - ui.label( - egui::RichText::new( - "Open and visualize recorded data from previous Rerun sessions (.rrd) as well \ - as data in formats like .gltf and .jpg.", - ) - .text_style(re_ui::ReUi::welcome_screen_body()), - ); - }); + let column_width = ((ui.available_width() + grid_spacing.x) / column_count as f32 + - grid_spacing.x) + .floor() + .at_most(MAX_COLUMN_WIDTH); + + // this space is added on the left so that the grid is centered + let centering_space = (ui.available_width() + - column_count as f32 * column_width + - (column_count - 1) as f32 * grid_spacing.x) + .max(0.0) + / 2.0; + + ui.horizontal(|ui| { + ui.add_space(centering_space); ui.vertical(|ui| { - ui.label( - egui::RichText::new("Configure your views") - .strong() - .text_style(re_ui::ReUi::welcome_screen_h3()), - ); - ui.label( - egui::RichText::new( - "Add and rearrange views, and configure what data is shown and how. Configure \ - interactively in the viewer or (coming soon) directly from code in the SDK.", - ) - .text_style(re_ui::ReUi::welcome_screen_body()), - ); - }); - - ui.end_row(); - - ui.horizontal(|ui| { - button_centered_label(ui, "Quick start…"); - // TODO(ab): activate when C++ is ready! - // url_large_text_button(re_ui, ui, "C++", CPP_QUICKSTART); - url_large_text_button(re_ui, ui, "Python", PYTHON_QUICKSTART); - url_large_text_button(re_ui, ui, "Rust", RUST_QUICKSTART); - }); - - ui.horizontal(|ui| { - if large_text_button(ui, "Open file…").clicked() { - command_sender.send_ui(re_ui::UICommand::Open); - } - button_centered_label(ui, "Or drop a file anywhere!"); - }); + ui.horizontal_wrapped(|ui| { + ui.add(egui::Label::new( + egui::RichText::new("Welcome.") + .strong() + .line_height(Some(32.0)) + .text_style(re_ui::ReUi::welcome_screen_h1()), + )); - ui.horizontal(|ui| { - url_large_text_button(re_ui, ui, "Learn about Views", SPACE_VIEWS_HELP); - }); + ui.add(egui::Label::new( + egui::RichText::new("Visualize multimodal data.") + .line_height(Some(32.0)) + .text_style(re_ui::ReUi::welcome_screen_h1()), + )); + }); + + ui.add_space(32.0); + + let grid = egui::Grid::new("welcome_screen_grid") + .spacing(grid_spacing) + .min_col_width(column_width) + .max_col_width(column_width); + + grid.show(ui, |ui| { + let mut show_example = false; + + for panels in panels.chunks(column_count) { + if column_count == panel_count { + for panel in panels { + image_banner(re_ui, ui, panel.image, column_width); + } + } else { + for _ in panels { + ui.vertical(|ui| { + ui.add_space(20.0); + }); + } + } + + ui.end_row(); + + for panel in panels { + ui.vertical(|ui| { + // don't let the text get too close to the right-hand content + ui.set_max_width(column_width - 8.0); + + ui.label( + egui::RichText::new(panel.title) + .strong() + .text_style(re_ui::ReUi::welcome_screen_h3()), + ); + ui.label(egui::RichText::new(panel.body).line_height(Some(19.0))); + }); + } + + ui.end_row(); + + for panel in panels { + ui.horizontal(|ui| { + ui.spacing_mut().item_spacing.x = 4.0; + if (panel.add_buttons)(ui) { + show_example = true; + } + }); + } + + ui.end_row(); + } - ui.end_row(); - }); + WelcomeScreenResponse { + go_to_example_page: show_example, + } + }) + .inner + }) + .inner + }) + .inner } fn image_banner(re_ui: &re_ui::ReUi, ui: &mut egui::Ui, image: &re_ui::Icon, column_width: f32) {