From 6334bd832fc4db3b5e5ad79ef785f9ed565a1d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20Moln=C3=A1r?= <38168628+barnabasmolnar@users.noreply.github.com> Date: Tue, 1 Nov 2022 17:29:58 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20editor=20redesign=20=F0=9F=94=A5=20(#57?= =?UTF-8?q?80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Placed eraser into shape switcher (top toolbar). Redesigned top toolbar. * Redesigned zoom and undo-redo buttons. * Started redesigning left toolbar. * Redesigned help dialog. * Colour picker now somewhat in line with new design * [WIP] Changed a bunch of icons. TODO: organise new icons. * [WIP] Organised a bunch of icons. Still some to do * [WIP] Started working on hamburger menu. * Fixed some bugs with hamburger menu. * Menu and left toolbar positioning. * Added some more items to hamburger menu. * Changed some icons. * Modal/dialog styling & bunch of fixes. * Some more dialog improvements & fixes. * Mobile menu changes. * Menu can now be closed with outside click. * Collab avatars and button changes. * Icon sizing. Left toolbar positioning. * Implemented welcome screen rendering logic. * [WIP] Welcome screen content + design. * Some more welcome screen content and design. * Merge fixes. * Tweaked icon set. * Welcome screen darkmode fix. * Content updates. * Various small fixes & adjustments. Moved language selection into menu. Fixed some problematic icons. Slightly moved encryption icon. * Sidebar header redesign. * Libraries content rendering logic + some styling. * Somem more library sidebar styling. * Publish library dialog styling. * scroll-back-to-content btn styling * ColorPicker positioning. * Library button styling. * ColorPicker positioning "fix". * Misc adjustments. * PenMode button changes. * Trying to make mobile somewhat usable. * Added a couple of icons. * Added some shortcuts. * Prevent welcome screen flickering. Fix issue with welcome screen interactivity. Don't show sidebar button when docked. * Icon sizing on smaller screens. * Sidebar styling changes. * Alignment button... well... alignments. * Fix inconsistent padding in left toolbar. * HintViewer changes. * Hamburger menu changes. * Move encryption badge back to its original pos. * Arrowhead changes. Active state, colours + stronger shadow. * Added new custom font. * Fixed bug with library button not rendering. * Fixed issue with lang selection colours. * Add tooltips for undo, redo. * Address some dark mode contrast issues. * (Re)introduce counter for selectedItems in sidebar * [WIP] Tweaked bounding box colour & padding. * Dashed bounding box for remote clients. * Some more bounding box tweaks. * Removed docking animation for now... * Address some RTL issues. * Welcome screen responsiveness. * use lighter selection color in dark mode & align naming * use rounded corners for transform handles * use lighter gray for welcomeScreen text in dark mode * disable selection on dialog buttons * change selection button icon * fix library item width being flexible * library: visually align spinner with first section heading * lint * fix scrollbar color in dark mode & make thinner * adapt properties panel max-height * add shrotcut label to save-to-current-file * fix unrelated `useOutsideClick` firing for active modal * add promo color to e+ menu item * fix type * lowered button size * fix transform handles raidus not accounting for zoom * attempt fix for excal logo on safari * final fix for excal logo on safari * fixing fhd resolution button sized * remove TODO shortcut * Collab related styling changes. Expanding avatar list no longer offsets top toolbar. Added active state & collaborator count badge for collab button. * Tweaked collab button active colours. * Added active style to collab btn in hamburger menu * Remove unnecessary comment. * Added back promo link for non (signed in) E+ users * Go to E+ button added for signed in E+ users. * Close menu & dropdown on modal close. * tweak icons & fix rendering on smaller sizes [part one] * align welcomeScreen icons with other UI * switch icon resize mq to `device-width` * disable welcomeScreen items `:hover` when selecting on canvas * change selection box color and style * reduce selection padding and fix group selection styling * improve collab cursor styling - make name borders round - hide status when "active" - remove black/gray colors * add Twitter to hamburger menu * align collab button * add shortcut for image export dialog * revert yarn.lock * fix more tabler icons * slightly better-looking penMode button * change penMode button & tooltip * revert hamburger menu icon * align padding on lang picker & canvas bg * updated robot txt to allow twitter bot and fb bot * added new OG and tweaked the OG state * add tooltip to collab button * align style for scroll-to-content button * fix pointer-events around toolbar * fix decor arrow positioning and RTL * fix welcomeScreen-item active state in dark mode * change `load` button copy * prevent shadow anim when opening a docked sidebar * update E+ links ga params * show redirect-to-eplus welcomeScreen subheading for signed-in users * make more generic * add ga for eplus redirect button * change copy and icons for hamburger export buttons * update snaps * trim the username to account for trailing spaces * tweaks around decor breakpoints * fix linear element editor test * remove .env change * remove `it.only` Co-authored-by: dwelle Co-authored-by: Maielo Co-authored-by: Aakansha Doshi --- public/Assistant-Bold.woff2 | Bin 0 -> 20380 bytes public/Assistant-Medium.woff2 | Bin 0 -> 20320 bytes public/Assistant-Regular.woff2 | Bin 0 -> 20232 bytes public/Assistant-SemiBold.woff2 | Bin 0 -> 20212 bytes public/fonts.css | 25 + public/index.html | 82 +- public/og-fb-v1.png | Bin 0 -> 26839 bytes public/og-general-v1.png | Bin 0 -> 26502 bytes public/og-twitter-v1.png | Bin 0 -> 27491 bytes public/robots.txt | 6 + src/actions/actionAlign.tsx | 12 +- src/actions/actionCanvas.tsx | 43 +- src/actions/actionDeleteSelected.tsx | 4 +- src/actions/actionDistribute.tsx | 4 +- src/actions/actionDuplicateSelection.tsx | 4 +- src/actions/actionExport.tsx | 16 +- src/actions/actionHistory.tsx | 6 +- src/actions/actionMenu.tsx | 26 +- src/actions/actionProperties.tsx | 122 +- src/actions/actionZindex.tsx | 14 +- src/actions/manager.tsx | 8 +- src/actions/shortcuts.ts | 65 +- src/actions/types.ts | 4 +- src/appState.ts | 6 +- src/clients.ts | 21 +- src/components/Actions.scss | 92 + src/components/Actions.tsx | 54 +- src/components/ActiveFile.tsx | 29 +- src/components/App.tsx | 31 +- src/components/Avatar.scss | 11 +- src/components/Avatar.tsx | 6 +- .../BackgroundPickerAndDarkModeToggle.tsx | 12 - src/components/CheckboxItem.scss | 2 + src/components/ClearCanvas.tsx | 16 +- src/components/CollabButton.scss | 51 +- src/components/CollabButton.tsx | 48 +- src/components/ColorPicker.scss | 138 +- src/components/ColorPicker.tsx | 67 +- src/components/ConfirmDialog.scss | 28 +- src/components/ConfirmDialog.tsx | 34 +- src/components/Dialog.scss | 67 +- src/components/Dialog.tsx | 11 +- src/components/DialogActionButton.scss | 47 + src/components/DialogActionButton.tsx | 46 + src/components/EncryptedIcon.tsx | 19 + src/components/ExportDialog.scss | 2 + src/components/FixedSideContainer.scss | 7 +- src/components/Footer.tsx | 55 +- .../{HelpIcon.tsx => HelpButton.tsx} | 8 +- src/components/HelpDialog.scss | 149 +- src/components/HelpDialog.tsx | 659 ++++--- src/components/HintViewer.scss | 18 +- src/components/IconPicker.scss | 4 +- src/components/IconPicker.tsx | 9 +- src/components/ImageExportDialog.tsx | 25 +- src/components/Island.scss | 1 + src/components/JSONExportDialog.tsx | 18 +- src/components/LayerUI.scss | 14 +- src/components/LayerUI.tsx | 302 +-- src/components/LibraryButton.scss | 32 + src/components/LibraryButton.tsx | 38 +- src/components/LibraryMenu.scss | 124 +- src/components/LibraryMenu.tsx | 37 +- src/components/LibraryMenuBrowseButton.tsx | 31 + src/components/LibraryMenuHeaderContent.tsx | 173 +- src/components/LibraryMenuItems.scss | 52 + src/components/LibraryMenuItems.tsx | 92 +- src/components/LibraryUnit.scss | 75 +- src/components/LibraryUnit.tsx | 16 +- src/components/LockButton.tsx | 27 +- src/components/Menu.scss | 85 + src/components/MenuItem.tsx | 37 + src/components/MenuUtils.tsx | 53 + src/components/MobileMenu.tsx | 111 +- src/components/Modal.scss | 26 +- src/components/Modal.tsx | 1 + src/components/PenModeButton.tsx | 55 +- src/components/PublishLibrary.scss | 6 +- src/components/PublishLibrary.tsx | 15 +- src/components/Sidebar/Sidebar.scss | 129 +- src/components/Sidebar/Sidebar.tsx | 18 +- src/components/Sidebar/SidebarHeader.tsx | 38 +- src/components/Sidebar/common.ts | 1 + src/components/SingleLibraryItem.tsx | 6 +- src/components/Stats.tsx | 4 +- src/components/Toast.tsx | 4 +- src/components/ToolIcon.scss | 131 +- src/components/Toolbar.scss | 95 +- src/components/UserList.scss | 17 +- src/components/UserList.tsx | 20 + src/components/WelcomeScreen.scss | 273 +++ src/components/WelcomeScreen.tsx | 131 ++ src/components/WelcomeScreenDecor.tsx | 11 + src/components/icons.tsx | 1640 +++++++++++------ src/css/styles.scss | 263 ++- src/css/theme.scss | 113 +- src/css/variables.module.scss | 78 +- src/element/Hyperlink.tsx | 8 +- src/element/transformHandles.ts | 4 +- src/excalidraw-app/collab/RoomDialog.scss | 4 + src/excalidraw-app/collab/RoomDialog.tsx | 30 +- .../components/LanguageList.tsx | 52 +- src/excalidraw-app/index.scss | 18 +- src/excalidraw-app/index.tsx | 151 +- src/global.d.ts | 16 + src/hooks/useOutsideClick.ts | 41 + src/locales/en.json | 17 +- src/locales/hu-HU.json | 6 + src/renderer/renderElement.ts | 15 +- src/renderer/renderScene.ts | 123 +- src/scene/types.ts | 1 + src/shapes.tsx | 106 +- .../__snapshots__/contextmenu.test.tsx.snap | 97 +- .../regressionTests.test.tsx.snap | 748 ++------ src/tests/clients.test.ts | 6 +- src/tests/linearElementEditor.test.tsx | 22 +- .../__snapshots__/excalidraw.test.tsx.snap | 542 +++--- .../packages/__snapshots__/utils.test.ts.snap | 3 +- src/types.ts | 4 +- 119 files changed, 4963 insertions(+), 3657 deletions(-) create mode 100644 public/Assistant-Bold.woff2 create mode 100644 public/Assistant-Medium.woff2 create mode 100644 public/Assistant-Regular.woff2 create mode 100644 public/Assistant-SemiBold.woff2 create mode 100644 public/og-fb-v1.png create mode 100644 public/og-general-v1.png create mode 100644 public/og-twitter-v1.png create mode 100644 src/components/Actions.scss delete mode 100644 src/components/BackgroundPickerAndDarkModeToggle.tsx create mode 100644 src/components/DialogActionButton.scss create mode 100644 src/components/DialogActionButton.tsx create mode 100644 src/components/EncryptedIcon.tsx rename src/components/{HelpIcon.tsx => HelpButton.tsx} (61%) create mode 100644 src/components/LibraryButton.scss create mode 100644 src/components/LibraryMenuBrowseButton.tsx create mode 100644 src/components/Menu.scss create mode 100644 src/components/MenuItem.tsx create mode 100644 src/components/MenuUtils.tsx create mode 100644 src/components/WelcomeScreen.scss create mode 100644 src/components/WelcomeScreen.tsx create mode 100644 src/components/WelcomeScreenDecor.tsx create mode 100644 src/hooks/useOutsideClick.ts diff --git a/public/Assistant-Bold.woff2 b/public/Assistant-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..751ba1ceb5883ebce6c67d21c572ae2dfb78f24c GIT binary patch literal 20380 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∈%?q7f-cLnRe z0jyz@G6sB(E5v4tnzp-hmKdoiE6!M3B-=vo1dr003!*XI;>&bv*fMu4GM1>iT0s@) z3pZ`40$WlRGtI^9=D!vXYy9ruCJ}q4A#Odo4t_FAHq6EfsdtG#0qMx9f}16%5{r1U zt}|5M&4&xfc=g;5OW#HyQO*$+W}gS%UG(eC@n<_(@F(Pzdlgn+hS>GC={{ zKd<{w2F9@k{rwT6LTT;Pd*yvtxMffQMI=MBS_C4Mk2YCJ5@9b()8|DNH}MnyjHXGG znh#iA&3Q5_)T>B2H;qD3gjkqj*@#RavXzvFh{0E;cBG0Y++ZW`Pps}pN~jJX_viBdC_(p*jY2*Eilh;5`!Uar1^11AFoSR`TO zH3IzP;Qr_IPd%z7p0=xHojy@mRxY$;!qr|=vfKnhmx(j_nOc3qz^IFHX7fE)*ug$h z<5fhdc*rqEX)R`pt@9Klim9J^m3NCas}g7|3OXR$9Z(PeunWlQ#$78i1*8g~70zAm zwxUW35J?sAtb4FbYdW4uSz`A5ONWF(1vnI6AoKEuZXfEaXfz@6x%N>A>g;==FdZ*? zNobMM%@^5Bqrx6z1BUvOPtA15da>K$xyV4WuCVd7T8>R2Wk)O@WgPt1NMclo%d~mj z)rKz|ajX%59!=XwyUNp0x+4cFLs=y$yOUCg!M^kc~N;r9VAt# zY=G$$#UId&)JXzNh6OjxX_(okhcmmowwL!fWn-jr!AgX$$4VTt9@|JHG7ip;fv_ek zI{TL~a4yO?c|LMp*HuF@QI4R#+?73vM8;wj}*e;BTz zZ~>iT$f1-no}Xeich8MfG)v3x)$RwkndKDm4u2uF*G%k6kr_9h#?l%zB+#=cs-11J z3v(uyoZr318m1-uPJU-&i^tehh6{%;T&8mhOc(9CTlVHo|LS84>f3iJe20NzBg9gv zt?wwyVwH%Dd{{?0tujP_T4gM_&Ghbh0f#aL%czY3K98l!^j_d|#1E?5JFog&zX!^L z;_ukyQ+cjSR;;$j{-&6PUuTaTd`hmd$kd+UJcwbJ(%}72=Q4~injckgvSbmTNciol zwYOpmT_B{=Jok$FH1f?yX6ceD=FRS24|ldwA;h=`#4OYLVdG7 zvEo_j;D{@tl%)kiNQrH zK86g#$LQ(d(FA$9GlD*$4I&nxBg7zl^Q(+W1{EEd$nn6T- zAD15#rKf20XQOZsP0H)J0u`F>V-y?j=ecx#2pbw7$8F=kXlFr}Fk0r`W1`6B)6&n` zs{m7cMom67@IrW_228FywJ5H>8q63~I=D(#>XsWS9gh8l?ThoJ{NSSVx!_x6JgB@c z4Z-c@dbF8$j`Y^>E!8#&MW&gI^=AwB`_bUf!LqvqiF#Bizc%#~0>uFoL@QG(9kIoU zK;ILW9N}o~sd36HDqpQJmi@|(T^be8)fvoCuq+Tus=74Es@Zr=a~-AW22^U|SGnvd zAO|3Xge^n?!ZyUDgajjihz^H_UAaDT-{YA!&%P2Z$yMVM2ryd^TOS252{-B-f!07t zv`uBy#l@%MR_hQXU=WgHOgtS4lhv2vrZy-S*Ei0VR$uyOm8&n74f%$+$YG+5580(q zHJs)p^u)cdo!9lmXijK?RnM8RL|5Y5ez*q&zo znkJ2(YTB*B`_)V$5eTX~wA8$OG+V6C|EDcz^qb=)LQfG71D^=SakJp8<=`JGoyx*V zL;6`eplBO~>Jq8gs*21n2eACSg{BImaIvv)C*IZj74cK^6W3W{R7IuAVHRZtEd4zb z`xK!}mW$o6qd8A*3@TRLwafzmN!1@CuAC=sYPJHa3k+pf;z1Y1uSi!3mMEdjF51qv zrDrQV@A(MZg1_t00c`m*^wHTv$`L^9NR-wDiiE7((PcU(%QWPXI-D@*>Lc6Bb)R?f z6yJS!0PzQ;9v@d-KEa+2=jGD5{EV0=3z^naGJ8Q6t)B?;$>qLs2!?rDDSYyg_5r*~m>(R^h()O)eEs^i>r;G$ zNz$Xecu|=`KsB(Qoip{RRG2YtYzwI;@L=6MklkM{(2&;rH~qorK;aY)eC;E{7`pGZ zk(VBF3Of-``$*CaTTX2tMD|l43M3>&YCf#8!`N_fsJ<=(ICa4O5P`Ek=Pu|~F`59B zI&5@-HHv%6eCZl^7H9gCWwN5A1;>E}2hlzQQMxosMogCBV}kg?x~ozTV)(WFOE*H* zj=pH7Zd;H*eVT%hY}~ZLv$On+tN>l)Bf+FA?Xrz?xzEV#^%7sh8@h&Wi2WS{9bclO z`_99A7>YELHt1H8dAZaTav@XT@3Fy;pl*G!OSt@;GZ%7YsYKAdhLKLkLoYz`b&z`& z8B-R1s>ZDjHEjqDXe1bI)o#i)<=EEfjzJhhj!${k0^t(&eDqKHQ-l`e=lr=+Jkg*8 z`q~bzHMLVqgH~=$@an{xr0}yLYOsSqIUkw@QE;L=Na0h`Blcjrn{kq42>_tsmEc~F z#O!cJ>iE~{Tn^N|P#0hO=s+FY zm;y_;=A4m{IzyrJpt_tjBgaA-o)*>cxTa69STqG-)b@Sq+mgFgQ0f~5Tr{YJuiL=l zWzUfV1=$Iya3nP7>9n|e*DPgk`HA9l_dRq#p$UdFxU@Gu9fck z7m`D)XV4QET{-rFL>^aLxBDTP-e}VNH&U9?G3dyrThCm>a};_`&3^(D%d-{B4O56d zEg5gZ7H1yo8cjRaVAZ;N)u6IwSiQZqdyBoz7_D%?%gxFhBtslxyNC0Sqh$E49n;!2 z+XcgjRlkn1{MMcVg%X~Rg4u4nxOH6FW)m}skfpZ81~zEcJ7ToBvb9-i);a@AsRYq>zuaOODfxA^Ki+Qrf zh0j&{9^*+Is$aJhxQ_esvZjAq(V%aR5YIBI&j_7_uIq|uZED9_v1P?8xoroP@HUfA zF7ICZwW7QYN(t_CNQ_sO9@lQvoymZ@WLt7XJ{OS#IZ`;t4$6P;MOPKlcO3vbz4bnx z_svvWfL*lcp`>L2o8I`~=Lh5=897uztG| z2WzlmplT6X35|y)>q_K37#ySgIiwy|p^~yqiR&S8-Es07nb3Zod*O8B!X`ut%|R)& zf3BsP$EdbcxOzE7)d95PbKYG!Eb(f4d!SeR;x=iFd$zP1l2^Cq58NMknD_7b$cH;2 zVUcChEAw9;fF2J9E)9CR+LOo)qoF(G23B`F^9MDm29cqIgZi|;?>XLk$Iv%tLtEsH zUwm=QdQMGIgTl1q#!9l>q7;hU520@y9uua`YKHCqQ+4N-8O&ITI=@?4mFw1swSJ+m z4tR;cB%ghGy$>1h&a307I%_jo(*m5O;?{;?7!~&kra#>BT<{^pwC^URRQunmJdos zQ|@KZ(wBMx_?gh=NH&r-vEB@pMSMcv7jP zzf`;!N{8?;L;85I?9%mWhjki68Br^$wA{8Y7+xu^1r8!GK4@K0S7%)|-WTvs@L85U z+Ow>f5cFZ1e3Ni|C?xF7$2Hn~+!5&Gk8V(?xNhY3bxF$$<)CGSzO13wA82IOrrTs) zF+S+Wv{$Uv9I$1>T#tQmO^sv0Tvzp4eQK|2NY`)BNRlLhCatWiCL`-Z zvl}{{i6^lWho8B7mLQv!SB~o zy^VFLX_YAuoL)JmvCjGPAlN#0&~0s4OsHQBZBDM=T-;zPYB-xzw+~tpU$@xWV4F3V zTf4j~#@Y#W##*OUEeEkDf_pT9qM>tr_o4HSeFa0FJ=jTapmP7gQ}3Y*3%;t@56)p{ z=XrCEhi8}}D1l;rmUG;FZeAELM9Ubsel30WSLwlNg8lIm$2S;S9ZQZpi=Yn5=cn9j z%mkLoCM4&mQB8h0>W6nS3{>B|tkD(J&nO%Vh$PG*F{4n;(2OvLN%Byk!mif^2Mbok zB^}$B$V4pEg}-PU41`sWvPM_ZH&fY9DRdjX7ko{yKNO5dzhJjv> zs>uT<1Q-t+LO*h z%_%Q`YBf(p?3R0%4{(^!;c zg+fqjBP5y6@rW~CzWSphnnn>QW^I?7piea5W%hZQDKI&2IFvRmJ(HUbl{1YTsleq! zgbB>O+m$txPKt!*@W4Vs?#O>Q#AJ`KEEJGwP?d8m@0q|tnv_Q4i1H!`;d|yJ!fw92 zmlX9oopClYgZn{2|2+z1ng<;^ni*9aEjpQ*lBrQ!EX9r3T#Y zoRCT<50xM)t}&U#Xl}q!q0w$pqja-FH)sY~{qLozqPqD)x22>=V&_|qaB%vxF4_Wj+r%)kH#uWo;Wb44eR` z21cM5F5mr1+c^-TyO}VSt>Gkh5SlSP1q5HztRFuO%RBF6qtnk97{N$y!y8rmz8PkD zs8;^m$_<}uks&c1n=kF5#bg>q>onjeLQ=#`!)}`>JW(bkHJ*Ja%}6-|E3-Ww)S0=3 zH`zuNoF^qeBp%k7$iMTMEX>UW6A0Lp`o}Mw3=(>locZOyauHZ7=-hYYEOd7E zIddn-x*of4(?4yd(a6L{d(YhRtsxGjST;cG6D;fUiPi&gQCugEg2-|Hd#(d};m2*> z{CAmY3{n(B#7|eApgQ41vh~yE1nVbx2_S&GQJ|C0(kW{0npvBc^5aL6zv7z`l&;aZmfQ@X} zA(g6xkp(|QRwMR2j?gHR3vmtyy>c1a2bBR*jdV?ZVcln^yZM`P0y>QnHgqQh#2y=LYZ(*&Sg|OMozn1>$p7{OX~%TI?Q{8ceMXuXk%0K7~Eit z1_51>9j>U3{a{ku@@7`U%`mtfrKl4!7DT4UZTIIaDKHn9HW1551`!^u0NZytGG0(%5M;SbtN zA_oom*pR6=Xs0(UekpY;o`EMDABd~s@H@kbfJ-y`IvZ}gRazJ4EH)`PwzTo&DqzFf zt&8R=NJ;hq*A}m3yLmEjPfuj)Pp*kTpdE6H=a}))yRst>>OJN;po6Y?Wo0S;n&OPd z=x>rjNHUUY$YzH(#O0SZhZRJH<*UaxIu_7?tMN0+P6vl=jUOAntjg6ea!XpDDp)CV zMJxaJz}^1<5D_d_&T9<3b-&l9`~Mcy#}!nwHf^PtA5I#E^<*vqE{9EwU;a_BO10Vy z{~dl^O4Fh5WmvGo%yUoLD6D9rQ{OchEM0OpskpE}<>?M}bFX|)4Pb0A&^ zGNc{XFzyy&Z1~^-*G~}6e#i(xhS;BLwTGE8UxnM5O_)8Gap~)43?pv50W30{`kD6h z2d))#(ajQv`iUFrWMhAb}i?s^FR4rh0%F3rNHg`%D8mobA;e58EFHfRXg}B^+LTeh= zJIftd(3Wya5AG6Tcgk{$_j?adt#RQB*0=()TWR)@** zP8_QJkAb5~xvz)=gnLuM&7+`wEB;)2qeXR`pSaR95!@oguH@-i-tU~Knr&b(j6Ac` zg;B##_aq3E`ZsZ3jQ@}!&qX9TX0y7qR0u{Bd@obsB)2)sS<~@gHj^*1(O1uv*JtuQ za(;iahtgzF3dtst0pWZSK*&y*nsz(LN8~<~lZ|Uc`2jK53-z*2xp(SvaQ#wLVY5zS z&m^pXioh%CB2?-XAvC<@62z8SMM9p<%Myi(iyhQ&=kcIVk#~qd=q%uFW&IzbpoxC^ z)n1vEPq$&@Aj+c~800NF2LBrYYqOaKz9vL=#_YMQStNl+&g*aXkeND`A|YX%6Cl*| zKSKiK_vRSdF9?c60uMv!BDXoqSTl^lEGF0zQNLYm=7a6&+f_qVgqSZj@&waj6RCd& z0x*`rUQJK=bQIr*!z`6qr)RRvM*HqvLU0Irvis%Qk$4%Zhs1uY;u=CGZGEqw2F{oN zlrKmW*f=GPse(+(ODf$!Q!}NrGD#J*#8nV){Am`oCxc9z^dL#VrW^k~Fa|?>^U~&@ zH=DTpX+X7L9)i2@5IO3L}{m^VE6B@ zDQPc``a}JapF=ztW6NFI7qwwnmS%3t^zdY#Ub4A0_;zKb{@ZCO6z$r9coznCu-xEyI{ zhdL_Z*Q{6`nV&(`o>YS3?7|_WdsKH#n!b8Nh2W27O{L}hz<}j~rsABkSb3qnU3p$v z0{qRMT%tU$Ux?(+X)DYZ@}tb>0sFG#2gwV}!%^2YCD@D4SgkPbh_2OLYe2T^7=~}X z5!3gtK4|Mny9cYpp~!&3#yQb4<5dLVR#Ng25a*{73@7L(9?q(50L+hG zJzkrck4~wd)EYp>hvhoMM*8|6R@O9(7(2rs@cS#chJDhgYN)C|6wlj0-SB99${siT zD{!XQ=M4b5)l?%_*SXwSUA@d8Fj2d-MrMY{!GS$8Uv8<3zPlni!b^2k?-uL^_?B9| zAql3@kdZn=Ep8g2*N?zWJ(yvnibhk8#0)*SseDrg_OdyK+7^Yt(d|@9dj^b<+Q4%R zbHbU*xHm4gK)F-MnfB63`HzhWM5x2V7ONe|rLjkf5dL&7vjwAC$QYMpmP>i=5aKH9 zllRH~ohY9O)Dh-7uWC_EjdoF!*U5FE{o5S^iri^n^#nuAJ{vA(4Q$#!CLk<$4ddYq zZcQs}3U_ir_L@Y+xtkS>Pd@G>n*H>gkp_CcfhSJt`{VWI9SND)9x;1t5w*Y|Og*Y88*Qae0<2b)Bft8f{M=uGhP5HliDi8#(hg8(scS zACnBvpl}lY(f_Gqt8oEmvvD)Jc|CArq&t&)iNvvB)!H|i8Fwbv5fckz*35YWC|t#M z#joFRzDrEp{l@g5M~O8{Za|ra{pA}FLI!V*v29y5fU+F>!!-?sfPr_v3|5%7i4@xv zK)wtyW$gbAA^=Q{!^UB@nInenRyL3Qs}pg)vjgr1D$r z;N)zNEMijZKtzAcRow@^j@hV#V9>bet|}QT!4QFfuAePQsd%^ zQl$wEz}M%Xb{b7$L^7>h_#H+@a8%$=?zH97>OP`c(L;LZrt|QR=puq6WKoNjf`o3tQ^zfbV4pq@`bTzM0rl$veS5ShE>093 z6YaNWMYK3RRuCO6h>a%{`=d4!QL$9GsM{N&h4FF1l00EtyztuJQGa}#Ko>k^Mcm_& z@KR(8C^Tk5+shJ|7hPxNUJ86e#~7{XvrQv-D>$Z@GOU zuQ*RKkX>om(AvI48>n0m@GLAh(8`s#iA;ez&0%wHQAB2|iIwUT8qF}8I_YS?5PFRQFl&dqgjT78}d7~=<02%5)34hc#( z;cQfmSriBxHz@34OtPB6RQ$k1+?*$KRIPDFQ-TejdUH;-0?=;SS~*y;)1xgM%QmAs zrLrrIE1;cW=-}mMi^jQJqTbxB4z9t_&dtjb_4@C@ae3M8Jmqwek0;2{tHi+oSAeYR zerBASrZBs-X51~OrUbTb`$Yc7iSlRWuTn_?&gUj6j{NyYN34}Q+ zwe1cGC1T7ZwaP7^AUK<4;|tILhY`dGGi?HX_m_f^ec?Ob%zx?e-r>9;hi*k|HL1k@ zxL9g333!t_2M@6rb01qt*QOzq(HKq0b5Zu|+ViMrO)9DLz9r+%93Ep2ao}%BHsj$} zvAbd9ZbnAe0}JU@BUh|7|4O9nqEjb)w3428Bdl>2Dv&lwje@Q;FO=rxcNwMP`NOLr z#}}yM3ur|3{9)l$qG6)ya8ULcc|sDCl{}G5nV8ICCQTSk9ilOYsFWcFZ3xVdu=k5g z3uL_(i>$Y_pkHivOp4ncHatuRK?g_J=yO}7n5k2P!c6;x1CU@~bAjXDaC~;S9{%t(di9Rs5p|J(!Vg?9X+^cy^Ffh6 zVJ9KM6cbk_5LW)2u$YpNaBskUX&hwQu#`9w zDLy5cN}p8}U~@^Ud-C;yq=tleqG}N>E$`{y(#gdH0zo|mOwN-)5|H?^&WavIt#u&y zsPoz_ZUSQqk}pihlS(oXKLS2sWmRe~WBvVCunKL~%|YRkB!^>3(x4DjUL-6hCM+iq zXCx43TuQi}l91p6-*N9H5$`3U88PV|h&#NnZE(g!tv`or5Ht_Gs%vqXm0vX$K|tg5 z9R>-s3Cs$lG5X1N2R3Q8eiBG03_qnuBcOLgJ!M8d zWkrP%#y7rP6!knFfPh4{ng1c9XlBlv{9l6M5N$2(YOw66kyni)Dp=-?afpJx=8CC% zv*O%wc8JxYlBfaI4l41FSs{YgOtiH$YLe{-dTqsf!0AI&cugk?{@OD*J08r@TJhQb z`0k!Yu6fka&z@@Rd*Q&z5ao5Bp%3HktS##p>xg|>c;o`$X^}e(j;vsr&$DSCbesZP z_X|%{@QwD&+66riuE?V=NJPZ{58%2B_hq;Jae(;WC>MZ$L#4-r6`N%HqJqviD@R5M0=l7hI~48o5-48ac6JmrPN#f`{zwqQ$S^7tg%KKG zO&?b!NxU3*uG6aK`5rB1lZ~-aMwFp!@|*D-^O-oUua9&;jLv&UXT25SMTyVZI}M9e zBpYQ#HiCHXSJ#(5Y)U>vLZsuHqCGF6PXvnN=m}bZXy}3x<3)nuWr6vJjA>^B=b!xY zf5QAoZ#Qi?EZfv~EUbCK4rD&9WOXDW;@9(6w5h{5%-$a8*0;NG18rgt8@W4fO6Op8 z+%g^#GjEII=dpEX2c9qb?k>h(*}N~1A7c4tccpKw_dNg)cRU2?L7?N2=ep4+naLPH z9dpJ7g858Sp2aX2}M-*Zi6h-~Wue{wK^UUJ=YUhbX-+k95ab zcX+K-3v{{-Ywvt8O5y4Pu`Uj{t;XdzTI1`La}H0crv`|b06ax2DiJgop2vb#a45fE zIQajEP#3Bpfnd;GBmn^j*FM-Bl9g>V%e4(<#D7e?>z~C7sSAi z@duz?Zz5)5h$fLJM1&K;Y2t~MxW56{{Fndw=4bT(!}EXj;Q#bPj+OuXuKSFw_p8fC zfMxpgBy_6_!KY_IcLF$r)4jJ&X9dO?mlDE(C4rYt=~H8Y1R_lbT7^zN^2_EkPi}Ex ze5~=-NkcG9Djxy*!Lk}3JUcp4m&4SSaE=xiXi^phjEH=0a4~|!0?hiCy9N%v{2fk^aQ>BairQwjW#M6!&B{AQ#H zGFt)D&8Q?=L|81biBJXJ4FG-1RFZWV`v182kq91P1o@N}Gpk=HM~^$=9MmJ}KJ`H& zCJXb;d&VWg$-Nrq7(I65cm=vjDg!2y`qg75k@#!h^g`jI#~pDF>XAgOh6IwG%iY$b zEVkw+6Yg9;Ll7lF9`FL*mN}3sD4g;y0@@wdS{vA4_0wSQ_K+R(zyF}Q;ss@o0r5+v z^*5%nW>tJ6zJUidBw{i)Py&&{(zuPYFp0?{>qnC;=Vbw~nT$e5kGbvD$LwUxihZKz zLN|#NkW4-w^vv-J62UBtAk&!q*>TG@nv)HHz)e&;qBoXZ%ZU-MX~y3%7|dUV|O z0c0li%W{Poc@7y1;1sh5o$yX2=FI>HU0%^lAk6&DxTanMR=d?_3K)Q1jr8`>JH|zp zOPs+FGKO6gn!`viyDVG;JNOl7v2VewJ$MQ_@LWpZ65!4_MdZ-XORt`5qoAdeOPcAw zZTAG8qqbVokrs|UjFxIhYwCCy6UpMt`rK-1A4}-no5NmLYCoF}6*>-|-VVpd5t8(N zq-w}*x?hGOkbeC$b*As5kibOex-u6hF~g+tu>nfU;;##06AK`Rwoy8=r}(faRmA{jB?Ge3N(~4US|Lr&I5^Z~fsN8katr z-r!5w^o@7-`~v*MY+wL^zX+Rv)nh;0Fb@vdzKr|C zh!b*YNRP8EW|+fU=nN%uR&_dk1Use6G1A-J8@+1gY{u>EqDn-*hM@rIp9T#4^NQ{h zoK~pR75$nQyQ^jn(Dkx}xnTzBaWPTW#N|x99z34j?{> z$$kTGH!{x3@MiA?i&pRWKXL4jMfi59zF<^wY$lh%3WS@j`;7Lzmzj@qw{mzq{GQ)o z6tA9se<>kz>4X4dl5nPvyg-Otr5OPR2H3~#_ma@-XF&j3Y-(mEuIqG0nZ6)z9z*G| z_p=Fc*Gvi#ww_Y#0l;D^y+~9$)NM}&cyeM zSjOH`EsRgf^pmhw^{YB@xm}EJ3pV391men4$%a^{JN{4VtU(1IH zlp`gzavLqx#A6PJGVOkapXoDD2Stzqc`yNe&}ptsxYUQn_aX9Kg&O5rQX8#WX}6j~ zrIsz;}Dx0$v9_qy-!y5M=zdB_ayCXcb=nPBdROK=2cphDaVn;;8>a0<%I zOX=vQvvhD3*a_!NQOexIuop^U>6uRg{Ds+>!GpKszJ?K*ck9 zJ#ZdudoJGB%eh~uWpyyBiG~~#KlQ&+ZV>1bQZcPTdQI}>nB39#zRrpcFzyc)8p?mDA*;)fvB$f6RYTl`!OGReIJK~^d&TaeBCt@c=Xytmb> zAb{iR9&p^s%j)(h2>Gmh*E2X4dDz&x0PL#n%-4`1T)-xITP!0^SGyW4=H0f^#xIm? zBag~lIPCh#=7AleViW$#aFsYhQTRJvxX|z}L)hl*Q87=5;Fa_M*^ai_FcvFb!fx7d zO9mtyRjTY(m)y#;mp8~qH3Knw&uZ|eJOGm|9fK(&vPs0}74&@`stKGSm|#@41k?oC zXIB_>sx-~gOnmkd1dw&L%W3^6pGe}!R0)^HNwGMj&p^_Mh$h5k;an(38NXbhr z9N?8q089MK^X`DVV+p5V4GxgWjn=#*3Qx=?=t-)E6b~GIQwy7dFjkR}bgR>aaU?m@ zR+y)*rm9A13rGm?V8}GW&5ioFHGuaXEudyt)ZT*yJkD+~_j{WKOnrxa0yv+uVK8l7 z;m{Zf)@zbVqv4?GAKa6c|Dqr&XxrE*m~k#ToR5JB(4ku-Vj(u@6@w&;qyH5x|9)u( z3?r1l$Wz8lY+~w499L~F(e-4dY1YEb8|Exnmh4&brLrombk=UTX^UGau_=QsJNEw9 z&%uk7BXhSkitTnpwJn-mc1BmiBL>d^Jj6n;(~QN-p4j%;A8c<(oY1)Oc=L&$AYr1! ze3K+imYkp4Uk~vAb1(&e0Vz{iWX@ts9I@2V)Q&rm#<8^Nlsc)^GH)#>6qw%goW_&_#RFqH7T)Fe)mEYq01qv1_tL$>hEwB6v zDy*pDN-C|a@+zvVs_JU0t*-jU)=*g_3;(B1lu~MGiA#r=%wXM=q0Trq;i4{$-1tl~;4t*r7Ys;sK&YO1ZS`WkAi zspeX0t*!Pt>a45odg`sO{stP9vH;>%&*aLSPYPgX`8*99YCYx%yna*~u z^Ihm-m%8kOk3My!tNyY}GS~_p;2_|B6dCE&4WUZ#)l)Q6svoUcb<585=0sC`E6IDS z{Wc}fcaPglm|*@bB}=HgLQltzHkLfo0qb2tr&K_{wK0LsRX-Sy?a#+kfywGl$XgL! zchxH$Kwn^7>F~guM1}BM7wu$ALQo&5-8G!?<~_TjWC# zef)UxVK)kXjM;rTp(l+d1{(*0lL2d5Uanalpm$bRr6+g3-28Il01bjkOpwqggiY?l ztDo{;ZuXXuia+cb4-DC%p5M%+aVUim6k{-P7D2Kp4oI(qGynhq002;2Zq;IdO>sba zSH%fNP>jK35hR;Ru_{3@iZO8(LDu%mF{b$8S(k(Z=(sc9_vmMd7L8s~THs^<`~y-i z02LeiXi(%gjeOrRLNR}mALFkXbZRd!zD$^J|2e1Nlz5b4rShf8zx3Std;jI4=A&nH z6*o=V=E5wNMOfkNCSs&>9tdo?csa7C4y7x1oT_CICjcWT#$e(sf@D+aT~&;zUl;Z7 TcQlRP`t>*4_1V8ZM$4EBNmmhp literal 0 HcmV?d00001 diff --git a/public/Assistant-SemiBold.woff2 b/public/Assistant-SemiBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d17aa74bba428f3dbb386ed8fe12e1526b955f37 GIT binary patch literal 20212 zcmV)CK*GOwPew8T0RR9108aD(5C8xG0KzN)08Wtr0RR9100000000000000000000 z0000QR2%Pl9E4s5U_Vn-K~ypTiz*Qa3W3N7fuCm!hX?=xHUcCAjtm4K1&u5Rlw1r4 z8*8aIn43BnMZeyxDlR+b^gtEtm=Q2`#_ShopCbdo#sP$Q-j@CU|K}tfW5}irL^I3& z-$dNa-6U`jghR`onUHP~D3eSeBH19`;tU9gDKbUd)mSbkH;4#CG;s(L@)_F(_iC!p z`JkcVA-Y8`(YBpP)+IZw+1u_G%d*}oo@Jkj4-9hK0%08YwJ+1*elG}x4|Xp;aT9@R zMd?0dT=c&V`-_KWSuaTXimK*moozZ5WJ4Fs8W&vz#w~nQ&3Sn~KFi&?2ChO<jbnlTah3PzJwJxuyi>YgK(<+MwDxM}1JwFM2$3T});u!BH>5rjQ)p|--dvGYMUAb~K5~CFG|KGA^r|NF%F4Eu4juDb{ z{DLqTk1!oJ)|)0w?Jl7SA*c`?P6px9@mZ1;!lE=9;S5uA%d_jd#im^a^XpIKmWXQ! zQA=Wp5CS<<(unB$OQmO7&YG=wH=!|L$7t3|mjNn6$MRX>`R~5zU*5GDD=YE>E7NUx z?PIMA*735!><i!)i-?%{PRjf|39@Hk_8fw1W?ffRg`zmd zOw)fKy>_CC-Q(>idoO(^7$JlZLI|U_+pLzWG!`)eHDN7+%%1r3hOt=-y)F|QiBti> z`TtQRFdhJh!x#`XBvKiq+&0J#{gAT;U>AY}6m13&*_=ZN2m%(vC1(-HU;CxxLJ>zE zJ=>9pYtd39=0-3fNkH9jl?qAVlP}zeJKScHdXqO_Ym$p5RGf7AMw@Ira5Hc>K#*Ho zk=Y@T2`CKFkZ=C&$o<7|(85BU*vL&$6jo{UCfk*6>J9C;uxxad+N))>A2!#{*}{AGxeG5vdkS<`q}6YduI6W6F1t+ zbcf0;q#BacToc6-Ct?^toD7^xpVjubboAy8+Pk(dD0cn1-skV?=lPFu#ME|tCV-tJ z@5k&8hb}h(QVm;LDY8$s8jY@`JX&I7@=c{GO@*1ABl}*g9PsR6f<}i@o&G0g&dgXi z(O*DO5OP4SWS%G?O3bwwM@}qF-J7;tRDecibT2|!+4JRiz-cdf84+f*}Z=W1h#*@wKe(b0amB4oQYv?>a{ z2NMaio-Kv*=;PTOSYtN`M^Qgi7Vcp*J{7Qwjdcwm7H6%XTYB)kk;Ej4rB-!PQ5zje9C>5(z^U|xj(;WNe751NmSD5D z`}GO^E3u=GHsC^avG)<8PrB*4?OsGPI*&#?c{h#g7(G6;GAa?9-7kl=yqj}VGL>N( z{F=;d1t6*>vV2$Kr&cK;Tj{J{iS7w95b^EO)F(pblP1i+S)vWK9L}myQq@@)xd&>< zodLC$=>d6?4~=(b7Psalnep8(l;t)n9L2=ig{sK0kJaN)mTlH{SdgQuh7TG+f_0$b4j+*X+Km@wr_9^16)~;hznW z?b9_ujj*Fj9;J=n)CtaF+q&BWLzZSB?t;WJ1|6<=Oe(Ld>bbOt>(Ix@bO2k5xm)pz5~S%zl5O8tA%{HK5wJw1zk8@t)sV*=gqnVVjQv5hWcDHxJ`b@2*X0FftLF*un-3=#o-AAFdY zCaTwHk`}v6)#s2Ej_6n8KmThD8?m81@(^^yJ~Ul%3QKpC;ps_WRC*H}ja8^v^sC4l zh0rvU`ePP#Cn6S&LuhtjdzN?euc9p^MOV#44O?|g+P(;{TLwXwt1@-KsOE#tN0MxK zi1h5D{d2MCoxXbPalhr2xsv*Bs^~r8+Lc;_Hr_x8rd^T|!VbdJQ^_SMNpcm-Zt`i6 zd}0a7va^_~uvAm2p;k+xjw&Z@f_L#lqzT)1wn*2>&IS{zLXgH5$@^4d1R-3{Yms2ecRZN)VB9-?U;-lYuNPe(^!sGy4;{6U;~-J z0AGO-WJ2qfo_pajHS3BMu(OaOFEq4nDK3+-;)+$=mQ6rN@gPemWg`jCB`!&a87)P6 z3qT_(n;BuGQAQhMtZ~MhU{XwNsa=Oo-FoyIZ-R*?nQV%wrp1f~t8z$fw8>^$Y_-j> z9k~;`?5U5naJs3}&J6v}g5+GtJst`ebj({#zmp?Ye3$g#GEPv7Xupfw`|tg2_cq5e z*b`W10`tHIL`~T>e|&9AQfQh=mLgSJPhYh(RBc0Ey-W-pxk5!s({Rr})Xb3v$FUs8 ziEjQw&cq;)C^U2oOf1o2#EOfAZjvY|GMdPaoNkaSFYzU8P-wG}F|BCqp<I`tYfYL2!s+O9*VZasR9H^D@c zOg6<-(`IJ?1(-EfYZWr}W?O8v&9EJI+GS6ktHk-SsUSDH4K;xPi4!kDq9o%Q z05lK~k&yR!WBbT06;R5jqNbsxqi0~Qonr!2j?pUBYDCqlQ?Ef|Z~8_6r4axa?say8 z&mZPn76Z;N-(Nvpsr#$=hVr=(ODk&|TRR6wC)W_{6v?4vR2rQzn9q~ozdUYX6os{=c?1>|bDA ztV6Lr9NF}fYjfPWYg;_;+8(bZ?1)bkb|xTZeXs;-77`m9v6#ygkARSr1%jN~mL(f3 z%0+hEco6ZVVkZ141a+|&wVZ=!ao7?h5z|P=knt2pSw$iH-#E#UM925W2_^VulrWGnKH4YVso#wh zC>(G^fy8*uBElYP5K=KtFJvQ#7$+In$wZbymV|SfFyitxX{6NxHf&@VA;Sm;rkG)h z*}F0zG#6a*z#}ibg57B>$;;egmwzwN@dJjY@;<@t2JIDI9QTN7}%p6|Hz`twb>Jp8-+!jCuH4+CIrU(m~<^OW3! z**nr)jGelAww3etms=Bl_fDI->EUM9GJkaY$AGoOd5Wz%+rqYM-bvc|3v9D|ud%)U zePit3h<`gk_FnFX)6dKIc>oH1HT`N%&3}uov}a^L?DFT*#$)B5={V`a1ici!ddsx| za%N$}h0WJE5L~S8yl^76-xkzLVc)``&PKK;w12~_0#66HwlBF?$=Y4(SPqi4OGd<{1R%n6kQi-^WSt1XanVx+rrE{K-SaGb+m5(9gE)2)8q}_x3ha0#Lc@~ zc*+5<@5Q}(tA`eiWW>rNL!O}_6CuV8vU-&~gPOsX21ek(7nn(Dtd69CxKrr~T*yr3 z#jAo9tPSj7nB9@}@u`*IV%u#&kN(N`qY~M1q`ywuN3U`-zdKYPIS6` zd>3PzJoB{69q=7DSXb?Up5D8BA2%@Ku}g)yzUtJ@hBP?U%U*x1`$K2_-g<2)BX?<( zGk)~dK$mu*#2GpplMSzIm(9)=X3Oc~!P%xc=37DjjO4F+4Qs2d26&HJ!{u@_$0^-@hgC`P30z}rL z?;CPI65W#>uOwX;MTRc9#Jwkr+QOJaEZJbLD^cf@(`9s}WMH(oF7&&ijoLyjY$d>o z^r@by@Z~9+9kh9k;3pT7IT$HnV_ukhoOxWnbCp_(5TW`O^wR4c`j)jZW3aBulA={9 zWSeeLPa8S|dbr>YclgXle&}nmrYiLpQ%r(7ladM{7V!geA5vzPn8`Dq#Q+L^>SwFE z5sUA9*6YMm-6eLZue;USJFmCrgI=Ri~; zXz(7VnWY#tY?DvgruM&sTUrObWPd63r6irme+`L|5tJ6%2hZ37G>SNcJwkId)Yu1g z%aF)Q-N?q^Almx(Vl9fjXhxM5C`Ax58Mo>!L&m~YX9!-AK&H)i(Ps<_>y8)!ONZ3oXC6R&)%-rh~@Xkb@g0HaXm!h6exo-?1sU5S7<{i@Pt! zHefnu(4YQN>F;2Z7aSBBY@IC;DqFYf7#MWtCRmf6i|z!{RH0=!Z!`I~e=?t~LEBvP zwgEtkd3MDzZX&}}B#(xibmfjI-~SgsZzV&xh==%qopT;G=${bdYMu%x%P4sTVHiGZ z%AkGgP%)4=C>cIujDw{2W4_uUB;4}wEv&C22)=zoj1f^LEjh18QOM->EzZJL8i1KN z6E5PzzgmmTU=^c4JxRyG3D3{PRN)$Sd<8}uSe?KxIriwqj)dd>=Y;+L|98N^_&56Nj0@Oe5k$++AF zSRMr8B586%3L~6|Vv0ZEl%*!EnVgwf9z&j#q5@S=B~?~)tGW!;SnKOR4b-=FV?YFh z;1C6c5flUi!AFP?HHZu6ffPUlLZkxqgo8xEgcy3*5yco!LMcskS~58^sOn6A z`7V7pm%1()V_t6`s=l>tWuL!BH-b(xM|Hp5W z-~I%^|36drSHDq{dQ~d$i)nh1um1zUfByO!@%oI(_M`2mgOl1LeWZBA7z6w+bguGW8&{Y5o8YL7QL)hlH5rdXLJF@1nF0e330IAB6+mI8 z7sA0KBqe9bmLnxMp1gSTr4}hlv;-O%vSiDVA5q|lGd=w5G~8rU%`k_SPMMVq>NRQ6 zs@-}UZL--;dmM7aQO95x$>}Ck%!S6UP(VbF$+nwVs;O4KN!~S8t7DGa?34(>Hb={} zVC2XJ5f(a(#6n?W6EGuV%!CUCC(cBC1oIOhOknDTN|P)_s$3Da8*7A7CKzqJNv2z5 zuK5uncDQ~&}FUe6(t-!$eHGcu2bC9D;(vx2KSD$PQy z;;&PYv7?#oNW^AlB7?j!wQ@+Ouq^=W0+bfNDl&T9!hdDdImZ( z%tX|oPKkC=cvM1Ak68sIrvT$Ikk^9sjsP}$FRNM5|@2~g`I$@b8}b9!cF^NP6M?8V3iVPIiKSS88^StW`HB zv=dpC1gG&7%8s%$9frdtMFYIZKmrT|qA{k+&jZC=PzS(qcyYH|n=}`QFp_vZZbr^r z9j#J!mIL-|Mg%r_filc9CftYaYCnt>{S13lhEn-@9OLoaXXF*a%@>klGac7^aH%Wx zIoM%)(lRf2lC&ySN?t%h4$hPDtp+CKh{7cBs1>k0rzDC-lCz_Fp``9H;slk@I+Z=! zlrjsoZ3c9pTK@ox87!uzduWUgq2gf_E2F27Em7uZjyur0cHyH8KLAUbj!+;n#JDN0 zLc~5PeC)b0^XqH&)n#y{aVCcknH+CS2$iHna^ZS7dXl2^?KGhWN@tN4l^9 zfyp$TJ4owAeL#7)B4jG>PF65u7wp;G4pe~WW=?LDJ=HPW#<(HT!s(Cjn^gCRh!i>r z4N%lfxbm=QWs*?ED0<+B(<}4{U&D;&$(f2HG{wg&1+_8H5bXPEbK zigGC>w^xkNZa!ogqvC)Rc>*sbFwRTRz-$AOvn2#&S)3wl`l&qLcc~%W22tb&euo+0 zd_s&YVbT@V!S*aWC+EPCUpSALM8$b%)pj!uT%x&k;!6(DI8biLZ6M03`g_@T z7<*Tdnpdrkn(Ls+G zW(MalZI#(~>VXCqGZg``a~=+QLr0xgY&)w%%McZoGkDS|gXp9IbU8oX$k=`$4Qme6 z*VwaLY9or2I>`cmNaeN*cr!%$XX}i`aVb#Jf}aRwX_^|)9Y=@53BCByZ+D)E9x#S3gdv>vhpb&AcfuO^(@ewZTJMrNs$@hnXwI)^98a$W(?GHlYpKs%n# zJ0Vi@+b6)F(nm2;i7%GH=1PNRN8SPZ-7fL_I?vGUrcy z@@25;xrXCIH_`Sfv^w<5e~A)<&pXQ;-Aj~{WIIYU23bbY(@DCp4E$bztEpis{Gr?X z7YuxKprzIdZH^~`%d0LT`z}%Dr$D0}LnY?IScRW>o!^lA_VHc8#hlR2)gqeJ9X<$5 zBJ=VpM-;s=)~80HyXdxtm1jfH_d1%OrkuH7CrwlXwBP(`S_hErGIu^xVMmy1GpeAh zL|&}5qWfh{SguH-t22^NFv($=FcS-vse(ht zqLfsnnQtq?uxsyAIempKFO6lfdUB`^c@b^qHGY7#CE~LW1@$4u#TiCxKx3^)7hPR> zEGkMFGJxx24rf7|glU235A?)OU9TSqbrfIB;XlTtl6Nd6i3tbq49jlbQJP-KG`)qj zW!#pVBg>g0YQNz0725Gwm9PwR8K;Z90}*33pxwRg&DopTkeg6~8}j+#IKl20ZrGo8 zW=2WZ>-w_3Q+Z0}Je!5QAVDL}DYLuvg1DE_XJHXgp1P?+(NPlWn(0Uu?p^OmL3DRq1lz`ea0%eVkPPENW%n0X%o$5CXI%ec1d^(4UQNXe>t>yg*x$3 zG@G6Jqbul~s;*~zJw4QVgr0}nS+~JIq*`U6GN+%KfduDq)YZzDeZ}4A>PT;Z>?sWe zePWw{$oS2O)Tp<$^4nDF;_`G^fq(+1oIk z7;Kv7B*Sr2rTU~2gl6ji5d6R1hvYnWX|RNdS{Ctq@kYkEWUIiz9Q=mM|JKNo=!+jl z+dI$DVn<5WG9;)R09$i*aGal+<{=r0qP}X=Lw(QHMcCgah&Dh8rG_RJBXuC)nOy$eG<2}R{pHKBOaJ`Dj%uVZ;tmpC6 zxq41zYGDq&2;a-tmI3)m3GW7#WPv=0%gf5hNwn#4_=Sam7y?znT;jFF`2b|l6GKm+ z&xG@Uc7LXGY^`kK^@0Y(Db(%%3(1Jt6l3?#i$3g>9*81-9BxdIIC$#0fvcjyC_6ZX zH$?;yGFJy`!R8NGPM!ewy~Oq}Xo&w{QPhRU1y&WAD3%Nlw{NgficXw#RzxJlO_ERO z_|OUVj7}t|6UMvK2{-z#Je--*mXRzMV^cX{-7pamcdM=@sTUyTc#l8oZ1$>AX+egm z-nC7MjK_dGz<)s)CC5iUEIH}3oWy_1@-jXn$ZyjJLZ!na4fHLJEv1MjO@IM(reTfK zc&7-Dv5Y1<2LKfe%$?0h_|CSKptLd&9AmR`)8c#!jJ>8C_;RQ%Wz1zT(ZDp#Ehb-r zL{)SSXTTMo&3*36a@IUZr;D-yUo@-nx!%GpRVw;J7rS6F+FEz@a--?;6Y47=D_YEa zPdw6|UqZ)BoCVf`$Zz6wG%yPjG6G_Y=|pvtL?>7oALv3IOK8l*rfNGx#>J3YGmEoo zFFei}=qNOc##S5jeekGaRMhCi-t9P5 z2SrAwij!}kfohE~X4&uCf1G6)WBiKXxem9XSXhScy%9AwaFlL%>x)E$-|XTS?$DgQ z$u53Gr3ziI!&q4OxMOnZM=1F_JiZTx1{2uA=IfTgZ{r)GMA2-epQP+RiFpg+Z5W&koZA{J`ZeG4wy+`@q-uGrTv& zYm`TUhji@h{PqFFm*< zkElB&%~Knlozz@H_VY8Z?B8IJkb%I~ePto$No9MZnhu}6^?Kg^qpDn&OSvTRCYKNN z9X*w$JDJc6diblQgaZz>moV4lm#@sl1(%RJhEc~|k;4$Rva(j6Z@BGO=rX=7uBA5p)1WvAV!Z?VBdC$Pk-L{Lk(malN7UFi(#<{) z6a+zJ`4{F!SY=ZS1pcp~#dfdRs4wVZImi2(ePN|W84~-Oy(Mmwj3>3St>vHq8Jg?! ztZNN$X9SB|csgyR@PypB_%Sm-q84^~ef+Khjf!ujebd=iCjyb>d+V1v94lH|9IF?* zqmGc)UZoJV2ScKkDydxyV3pX9cqV_YYV)0rET0>}k35Y$y~K!sjhERUaPXZpEFbV8 z2n9C{VYAPsCo{*t^B^5Wmd}g87oJC+V?i~tsNd&X*Bao@2o-nmjMggg*K*_Jr$TL+ zTHNXN3A)NPWv{1Auk6%A&nLC zOEz(Vktj;GA8R{2_vS3!ovA(&*v38cfpkTJ&zP6>=zJ7KnT&xJ_I9*;Z zrz4*4&2qPIbxW&n#Y#ur_DIUeoyeU_IgyYGTL0 z?Yc+OBl6X;GStbNqJ2@EvnlaJo*|Q(O*@VD+;=^EO6E27`h$LM@1GAM%P(7+$=a~p zqAhCXSh|wHFx8!Zp|Yp6&f!w2H7ZhEXV0 z1giKtRU=m_HC(m9T=ADo+%E|mO6i^NlTAXYJklTmPGsTKfN^b8A|dgnXL78GQ|=Uq z3To!enprWcQs||8A+Q=-IM&E?k9loJyLE7;4_wbb8TmbOG9Orx@?wI)LhkfWYM9}o z7T#mA4OD8OYesaEpWLap6cfOgUk$X?gcEY>5+O`(-M`i0rY{G;hWP`{+QPZ%P2-^* zSxwsu3QG$L4`em(faaw&_h<{Fa|UJ!3Q6b3vpXpgs$Jr0Mo=INN>$`pUc0 zv!U%H<7b}k$o7%pzo4&r&KGP4r~W&$w%zmLFL>(<=mo+0gXhDRGi(0?Y^~!pC$fh= z6Fm`d0?9Uz{T%<2!ogHLSVm>o@W0T^%Wv4y8CtK9R&Jz+Cn1ntMv9-*adnC#u>kMF zQBQzWq_srCt}+qA2}VRlAxo%sSTvy}m4oSs!<+XL=_dGlnz{3RGkVegj-*0@21lNO zCwz+lqhsyV#|bPhT$6@-GJ{4v{67I-nbN6Js~CCRD-!C$Dt4080XTuW_d!3B*Frj_Zlig+< zxu4{fh4m#M1*xi4YMY%_MP0dE$?-DVQ?9)xG2elWJORbLhQe&i3n>e!Gp&_1t`lE> z-4!nFlB})?$frgvqyHT*`e+}(AWf|reNP~u@2S`38;kR~jaC#669!gbkXz-%gLI!> z%kkQ2EOPHwL0lLQ8op+U9j0k;-nm-w)q1va%1Ok&N-P9)L%W9zy#N zBviV=TUJz1ltw<~8`LN?V~EIShjAjVGbf&IT0tVv)5$PGqPDqYbEz~VO9HRH$24y8 z=K$jOn4%xi?o|cJlunLEg7;cD`Pu&*KAa>9jbk3;{zjSSeGM*t@2C)_jNLh$A|%(m zVdamh!^9lR!6&~4tL6J1{7}N@7v(y~D;qfkuRydEqwt+H!K28R4A zg}}^OA~8hzT{!|(B}Wl4Dp>_C>r)Ikhk5F>vI~?(Riu`q;ahW>m#dGeY(xiF-)688%RIF&kN1yof*J9|$>%A?UfMk(p4Y)bCnvZ1 zPT9{~vBp%^XyfT#Cik9()HG=f-NBHdr%A2RHmXB36x{v-sZpZ|F&5*!QYqfIm_c6* z`=nCXyBHinvO_SQWeT>ytUt+Ksf^_PlukSt5*a`C5agN$wYEDP)OI&(KvB+$p?_E0 zeK2$pKVvV^BT*3opH}sl*lDYU;l8|Br`QT!~@UhzVHOZYcGvuVoE*X zFHu1>;$FsvwzQy*?MvT2`Blf={nGl+V*J0`NpwSzh8I6U%7fox{Kw}uWAt4_c#ng| zv^&o)`^{g7fxx~WQ3eN9@IQ@;5L+A)CVKA9^rD02G}yqODgxgjCDn9|z>sK!ncTH` zIseD)Nj8vnvUC-JfXGi8ebi?suxfL&u0G#`GZEkAvsk7O6D&otExBkdR7tp$f2 z{^aGcqh!)R!ZMiJ&JZhIjt6zG^@6H$sX5=vVpv$TcQCthvyOiJ^56~@hhcFt!4o!= zs)WtsF31(QBXEN4n;G7!mKI1xa`d&fnCvhmI%LVm+gcF>Ico!dh z^8W9Q;e_EV=R44jEa$3lLUi}uQBi?YnIBvo3I`clokP;at1s!yt# z`TG>zvz`>oe5f8}?bAF3sEuz|{?V?AZlAmZ+M!%6i8il%vGIAkq4Dt08E8k#k^Dvw z{StlYG}_lKO=M=CTXFJ!W9ggYS+-$lWrl6G?@jbzJVoTQaX|7>5>@22b0ir*9zy$~ zlyQuVE9#cg)|2dqW@p$}Bmt8AY0Xc;2>q(ot00&^ofl!r%9Ztr$#aPqN%^*|wp@l* zWiy{r_d=xH60|7YV~G#vX72=_P3JinY`0v>@>rNGy6V9tEHZ`jgT}zho<8n_jvZ6a z4rY!1h9&K7^%l?h2VHRBO3i_!?1#7tR|%E&b>6tl-RO*WGqcuZpa;Q`=`0(Q?Uu>e zZX1KewnEfp{x>iybBMlFBwj+NFA6L?=#uvY*1fnS; z5|{M^=`uN$USP*mdf(&nBzBtw5Ly|3oWcL@oi689ZC!N&d0sCH}rIr#)XJdH;Waqv|mhUO#q!qCUvXqswGU^gO6Zw zlu6`nbV7KzuY@Ztj4>c%OI3Z{p-n7c{VqIs-svC;1kYKNNY?q#FDS1d^ne~(A^HjL zlvt#A=Vj4~&|YVaO57Dt`Ndr|Y9|={^cF8PSn}zW>$m=@`3nqBSH5PS3EdKVsO+GH z=QhE6&8iS11n5$6L7?IxmK^t z7h>#v-VZx12TU`8_1t{Sep8zdxS?ScPxjoLloDt}eQXF@2S8U+{vUN>@n@@S86jJ` z8=Xg+bb^FR3KA>pJ7ddJW6RXjyFEix08rrz^kx%>YD;a7Sy|Q67{5JlhPtFl6-ps^prbSmy$6 zX;yU0FdJ<#Agn@k@E!Vl$ITTgac4kfBv<`ah!+F=xxZh|`}^faq~5n@b3K@96Sdn! zXF~JgVD~+BS>2OX@U(gmJ$@+Ht3sWKhAtuODf?sXlx{}z0Y3;>ca5Kr- zyZ(RbLR4R)b*SIP`dKDsxR3=9-*GGQrcf+0M+V98K}Jkyy^YM$mZ(MTZjYw3N+V}J zxQ>_}epxoYp^8JO`0&PVGmg?va){lABJhT5y5HNjt$SBZv}@P4ZC&rx_{k((XIVL} zjZY@&aBbyfxK0t^g;$JBFkCU`?DMc^hXF%fR?@e`+9j6FRMKC5xbTB=iC$C87erJl z!^HMk7W=9`%vx#!6*mtHsm2(NzjqaSLU2*^nYc6mQR>*dyL#MFX zX4B`UuYoGS|E#UzDtrz^D6@V zxPx>uo?~E=VwSq8U;IpjJFXI$K`y!CTkr!?9$IzOR)B@1_RgvD6! zh60=DUm~1`gFLz-#NkCudRcjqSSAQkwH|V>zmhTE8ZKghcaaUd3=O-$!SAx|%dD0P6 zN7Dv)1vkFKjfiLmD|HKi`W;SR!21D?T0|r#pm72PY)gFBFY>T!M)BjfPWwnM;7dw* z_=*qju*ti}Yrp>Q$z?O(z|!U4DywVRna!A_j{KzdmK^AT?E3lEQ3#T@q|R-y`Hvj1 zsh?;_pwSZjL}Jx{G}^xbVBObrS7czu2Ux~MjVXC^2=FQ#y7O)iW zV}+KAgsyM(=`uzbH+}ms)4^OMydS|$-;`(D1`piD=PK&)gz~1jP_aNE_0l*FDgCcY zhc_$O;}7cE35k!+u}c|mF75ijUecChU3BVYUzV)_N31BC`@C4lp<}gb{b0sNv5n2K zjq5BhP7v=-|iL^b? z)md)jQ!Lj3>u1ZCmQPq(hVX5o7w<Itn8 zz;6e2#$oE#uQxQd#kckcL&0E!zd^=4r`5OBw|t^AZX<7dJUzFmt*K>^Kj04mf!^Mp zuWj@B&28OEtI$TA{8oGbE3`3a4v{ldY$ufpKS~J`1JV7O{lHT#dmPUqQJDW|4N|iO zsMWx1vFHu)ObUq=KenlBt?t5Wp0?6qc$7vv2g5MxCmQWC3cO&lJ;O*|z_VaoRJN4F zp>_UZB|VrWknw#5Y=t(+ed^llrgQKt;D28ENnE z>Q*&18CLiDy}ST>c%AYMEHbGnon9Zg%cv1hjGgb~6$68gF;GBQ{6S` zNUG~l@4gfIOp}>nO|URZ9o+n^iF**|>$pkJAZIN%$ZILhBq-eHo`8LmZ7kZXwx@Fzc zuvyVB->Tax-#P@sukruQD$dF*M>XCxvq^+2vx>8_z5h3zuy6p0>N?`O`o;F!pGWLX z#x|x_1*EBw^Y-~d$dR>p3r$Nke*4)<}euQQ7qPi1JAv})d1W-Rkws!qeE?v99u>4BaqF}vi zdaY|&;mTiJDOH~B_G19tLy8Od;)up9t*cg=*gnP?q~~WNk;oao$)+8AkVoCgapiP6 zJ@|_E+3@7Xo5UbRWT`ev`f7X4?@g%!7gn90RRd_AMMy6<)fTi^tl^eg6Rq4Lyhh-bTqrkW;#5mmM~*&~~^2b4U=WhWOqsd&=tNAbXPjp6X|{{&>U$jS{{g zLJbi>eiv1MMu$=9W;EI|WiYiM1070D4WTonRY6o3odG2Kn0Z&*Lum$@z&79eneWdC z`9m2aILA-{RGMuOa|HsUrVPZZuBLVlq^9W-p$H>$SUnTXoa1R0w3^aVqn+#8QX!EN z$%G@)VN255z}2Mf;l(JvEy^o^)U#DHRMXXSAVWrS`?C!wdHK8bcTmDSYdvcre`Wm& ztl#3A!;h9K7nU}dcTAkPUKeRxTNqqdZ=%&|%nlNjb)+D+%|Iu~Y;FrXFDxV1k!9KmsjJCRun&(=A!+U8(Lh(y*s(F zDcCFMk?0gJ)AY4cxJt-qIovg7bt@boSMW(|tAG5hj1!zAzdibWO zJ7B2nU|P9{<*Zu`x4`%$;{<+5L^9Rul}srqoWM1j#`8)G#8bRp@zm1Dc)oI>G{hGb zYt_<%0-lJwb>(9YwpM@7|#wb9HP>DbFtBDR`^N>U!-$BL%~f%!jwlg{Qb!s))qGnDB2WZ zZbz;Q%5`x%!V2SzgjUG>iOl>7l+ZdO``>CqyrKGEuy;FUpPIo`@1sz+s+kP+Rw-#Z znL3R`TtX!;1uMomXG?0z%aoCf2<*)7sMyG(bMVX4-sMR%zX$z=7PJN6 zUNzg~qjFm_D80YzhtaGI=rFfjk25L)1YQXb>?Q51*WJ@ipK(uDr`z}U3jXRWoAsTn z@U4QT(VVv!%-fvYn;6W^2M>b;qj@20ULX%=$itcd>fqL1g=x*)Mn6TQPXz5pj@EXz zP0Jo_ErEdS#F;=j`A`JM1y4DaJ;Cct=JntnsrnB1l)IY6S;^(D1c5~% zhBglL<~n!*s1`jyWpV_n*c+TX-*5dXvr@+e_1GiN)W7YzhIf>Al-&r+E0Z|KLSrS@ zvfbveX#e$S09&%7K4&Z1&5h#L+4F=8((Qxm&xvz7)AZEArkNqXB=jv~44FqF00pdPN$Za!Ci7H(2cv z+DLjUpKxVb_8T+K>(olykFv!5_Xc$MjgBAn^uQau)(vWnn;qf{(Bl=oyOuNJ+mrhg z@+NPv+9OPn@2z~okkyiCuX|IB8n1Q~Cjp0i=<)Ap3=m!L2CsF4T9aW;dUCpsPerOt zengrmAEpK9@ruJgiXsMH<|QNT#ct|Hp)D-8diV;JXR_$WEC#1;OCu`US4Nl_@u|=Z zDl~^Y%^AQ;M%t?#$U<9KjvmzYOT%!T^eJ=xu{lpv2Ad-2@rsonIy&G*UgBCWls@%d zl&PMww04~?zwP)RA$ysZjI>vC2n%gtxz$7E+}tnna8!D+o4b>pIJ^iwUS&^Um=wIk zwO%NF4w>^qj)lU{B58T*vDE7e_*AF5ryT@s+ple-GOFGj+XV`?NK-*OgY!@N=a!e( z4&L<0}v zW~q5-sVBh)AM389d6L-!xc5wvopfUGxvmBYFT{&(d0F?Wq2x4J8LhHMwi+@i!CN8-RzhHjEbBRe;DXW+d+t(q3Dk0*s(Z?ud^SvROx>0r!Cpz( zSUySQHnr4wwl32|EI-4gC5P*^+KY0qB6y?WX9ZNXR{!0=;+VQA--jcTqEtL2of|m! z;(uCFW%*dg2AW=AsURypwLJoOe2}O{Z1xtSVx)w@Ae?gm;424<$oyG z0&y;L8A%vRT2%R8`Cs_gLn3boUS`Udc$5S6nq*-K&n6hGuArI<9t*#kp>#~$@99X% z-hflFf65;sNfe<_GKtn8FRIrl5o{p%)RUTn{IR|p-$CV7*k(qAU=E?XpR&WMsC_3l z@8{)I;$f@HfTRrMFH6gsr@C}G{D%7>{mtJ&txp47<49@04TUXDOW*s8c8{*gQNY1` z{oMci>o0Ci%Ty|^;_O#C4aX>W!b9+ae}FCj6$`w(s*nt?q>&XWBrS@+w?N=cwO6?B z&S#MYIw-$m^dQCp#Zt09i)%mk-tLOGva`#{3<+m<6P5)zz!wJgrtV!?rGkG}MPGgD z&tP30q=0{m+o;afiiiD%Vhrh|uI|8C>=4qvcVljJYb!$gRqyBpdb+M_TBYxsu9P+( z4pXyAo&9y&^wQ^0y|%R%r4FGWAIu~3%9ammuM1_3zmAz(0ryAL`tr*!H3ptg+1XHS zI!l@P^+{D3a=I>m5L?&e&ZgFzE065iGYCVi*BA4i{+J`&q)Yu@z$RUM!#BFT^X1;{ zspVHa%71UZ0s;oOZ~o<^svphY5)s5xz?Uz5R0@Fa+;AHER`biC%<(^91_K2A?XWSJ zJUmDz^o2}c$N5MN$}T2&IM+A`t~A+WbyU3lbmp;~k*>-tfBwDY>ZIbUZs!O&DN+`+ zqzSYOCZsP|%GX{1Wu;L+Rr1L8Q&1Ooz;F3~8%A!#Laogn|oLA%+ z&w!yzIf#skdBuS9CM|orkgwR}Hj@URhHJ(d0*6zUj;iFjd8MusWnr>_eq%+n(SrTQUMw|X{jPZ`0@M*iy;;h@(WH%-C>;X z@sb-iw43!wO2oWW%cX*CIyoL@hF04W?n3tA|9w zU_Gy?gmt`PGlg3wbIb?4Q%00T2#no_l=HFrt=D=WFO+lsoio>N)owyEt#E< zk`u%lur&*2NLk!z5IN^IRkgv-x!JzS0_#vD<>V3@xk4Vb0|t z*ZZaETA|ufK9e4AlJ$+{&E@O=@0ap8I`RyU8y+;@+?lE-^m zUMV1&uBa3eOoxv*VLm;u90FKA{hI_yFKwhNMaVzJ9oNue{=ufZ3(#)s$+>hI2nBqV zx5YUUY-hJ4#8dT+ZRu_Q=Z8E`r=?!wEFxe6K0z^u#5yG-mYz-zIp} zOqQWKqNA>!h)M%{k%bu|KrX{;bViTNNIQ|nyqXdCrg1&m)djVI4s2|?sEHtOeyoA* z$FeP9XMh3~Di+7u$w7HkoSM|aQlVz({z&W50f*JX+)p_ z96P5)KPsn5u$Ur@CAe_S+4Uo~QPO!w_;zQwQxbj?yi^eRyX4kru-JXFSX}809E1`G z(Fil?w({3|m-)zSODSCK&YwWX4A&Pb(F|9mnB{5+VTqg-biaX)Ouf!dc0M>ew==Hw zE4JNm%(Xiiz2m+K=5Ole(AKmY2({n79naKRN}09p60+|bm%dC<0wX1x~j{D&;si0o*%6FvEtgPGiWZF+9ARf8LWsp*K{ zELt=Pn{HQcr1D9aj{sXbmsmJ!bP%vLB#g05E&IfQgCTGwN6!+E=%6qzi7;R=NpL>n z5F4C0CmC@O4_uOp1WD)mue<#73{A-`8Oh}CJ`bM8Q~5Vp{xc!jE+j{t?RN0;iZ>s= z!FZV5VEH94IQ}lWWTMN#3kWPwkYFzy65??PA&N37BvVWc+2l}6H!V~>qC*oC0Jn(s zJoGTcnHi?p=7eQd*x`g5UijiAL=a&_5l131(#Rr@LXs=yns0%5QPN0GepFICkSfhW z=@vz8iKWq49Bp)ZEwfXG*D__vj^3jf=%bbsQ_Qi*wVX~NZLIQQlkX1&UOJdq!#s&2 zPRE_l>G^LqbOw{fZf?0ezCb7vOQbTnLa9<~v;YXf2#VnZN$Kq9d1_M^L+TM}NMoAPoE9aHpr_Tkv?aCicdM5a(_bOw{f=Cte@T?}&hx(#EoYRr#l!|JkqZ0{!+|$FZzUDn< z=cfrR8cq1U7jYz>HGR5NU(!J5rj*rda%V zG7JqoFvj1_bR3#t1jQIkoJEjqiUZ^-ya50J002OY*`QMdo8kbuwnQ+3VhkpWAla0_ zmI+2NCe9+rXkQnZ@<;RopS+r5yutfe;j(m-DiWtCk13+McNTLS(hg}If#g~_Lp+~6 zPV4Ps@;tlvi~dVf;Xpk0<9*-$ccbNZI#pVD_0LyP>H?Vvthe`y(ym(8%?QQ(kRQW+ zTP$|L_}YW{2tsdOv13@9VJ2yZWKsN**QUR_<)4vUZqvh^-o| zgvyycJ~W#huGT=503#^IVB#!-WK(i&F%tVq)W09+Y3(D2{c_*+{*9G>#WDZ@-*!tL literal 0 HcmV?d00001 diff --git a/public/fonts.css b/public/fonts.css index a27dd024c..166afd8dd 100644 --- a/public/fonts.css +++ b/public/fonts.css @@ -11,3 +11,28 @@ src: url("Cascadia.woff2"); font-display: swap; } + +@font-face { + font-family: "Assistant"; + src: url("Assistant-Regular.woff2"); + font-display: swap; + font-weight: 400; +} +@font-face { + font-family: "Assistant"; + src: url("Assistant-Medium.woff2"); + font-display: swap; + font-weight: 500; +} +@font-face { + font-family: "Assistant"; + src: url("Assistant-SemiBold.woff2"); + font-display: swap; + font-weight: 600; +} +@font-face { + font-family: "Assistant"; + src: url("Assistant-Bold.woff2"); + font-display: swap; + font-weight: 700; +} diff --git a/public/index.html b/public/index.html index 4a4602b70..e065e6700 100644 --- a/public/index.html +++ b/public/index.html @@ -8,49 +8,57 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover, shrink-to-fit=no" /> - + - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - @@ -158,8 +166,8 @@ body, html { margin: 0; - --ui-font: system-ui, BlinkMacSystemFont, -apple-system, Segoe UI, - Roboto, Helvetica, Arial, sans-serif; + --ui-font: Assistant, system-ui, BlinkMacSystemFont, -apple-system, + Segoe UI, Roboto, Helvetica, Arial, sans-serif; font-family: var(--ui-font); -webkit-text-size-adjust: 100%; diff --git a/public/og-fb-v1.png b/public/og-fb-v1.png new file mode 100644 index 0000000000000000000000000000000000000000..b626ee60a0c434d46fc175e70c07d984c50de35c GIT binary patch literal 26839 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%0A6HRtA zvB&M}UmD9CHx?6Zk}-*f3C)B-6z@aQEU|nFH*In;*XWQ6Yc~>L?w%w_LTX|vSoFa?PtBu6^OCD_xmXHj%3>>}QGI`Ewr_3LU8qzcGcU

#9a+j#egdfIzamKcuuE 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 literal 0 HcmV?d00001 diff --git a/public/og-twitter-v1.png b/public/og-twitter-v1.png new file mode 100644 index 0000000000000000000000000000000000000000..e7834c334b93739c1b9a0a08eb6e146b0f299bb1 GIT binary patch literal 27491 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

- { - updateData(theme); - }} - /> -
+ { + updateData(appState.theme === THEME.LIGHT ? THEME.DARK : THEME.LIGHT); + }} + icon={appState.theme === "dark" ? SunIcon : MoonIcon} + dataTestId="toggle-dark-mode" + shortcut={getShortcutFromShortcutName("toggleTheme")} + /> ), keyTest: (event) => event.altKey && event.shiftKey && event.code === CODES.D, }); diff --git a/src/actions/actionDeleteSelected.tsx b/src/actions/actionDeleteSelected.tsx index 0bbf6cb69..dfba34df7 100644 --- a/src/actions/actionDeleteSelected.tsx +++ b/src/actions/actionDeleteSelected.tsx @@ -1,7 +1,6 @@ import { isSomeElementSelected } from "../scene"; import { KEYS } from "../keys"; import { ToolButton } from "../components/ToolButton"; -import { trash } from "../components/icons"; import { t } from "../i18n"; import { register } from "./register"; import { getNonDeletedElements } from "../element"; @@ -13,6 +12,7 @@ import { LinearElementEditor } from "../element/linearElementEditor"; import { fixBindingsAfterDeletion } from "../element/binding"; import { isBoundToContainer } from "../element/typeChecks"; import { updateActiveTool } from "../utils"; +import { TrashIcon } from "../components/icons"; const deleteSelectedElements = ( elements: readonly ExcalidrawElement[], @@ -149,7 +149,7 @@ export const actionDeleteSelected = register({ PanelComponent: ({ elements, appState, updateData }) => ( updateData(null)} diff --git a/src/actions/actionDistribute.tsx b/src/actions/actionDistribute.tsx index da5095a51..9eaab70d3 100644 --- a/src/actions/actionDistribute.tsx +++ b/src/actions/actionDistribute.tsx @@ -56,7 +56,7 @@ export const distributeHorizontally = register({
{t("labels.arrowheads")} -
+
, + icon: ArrowheadNoneIcon, keyBinding: "q", }, { value: "arrow", text: t("labels.arrowhead_arrow"), - icon: ( - - ), + icon: , keyBinding: "w", }, { value: "bar", text: t("labels.arrowhead_bar"), - icon: , + icon: , keyBinding: "e", }, { value: "dot", text: t("labels.arrowhead_dot"), - icon: , + icon: , keyBinding: "r", }, { value: "triangle", text: t("labels.arrowhead_triangle"), - icon: ( - - ), + icon: , keyBinding: "t", }, ]} @@ -1007,34 +1007,30 @@ export const actionChangeArrowhead = register({ value: null, text: t("labels.arrowhead_none"), keyBinding: "q", - icon: , + icon: ArrowheadNoneIcon, }, { value: "arrow", text: t("labels.arrowhead_arrow"), keyBinding: "w", - icon: ( - - ), + icon: , }, { value: "bar", text: t("labels.arrowhead_bar"), keyBinding: "e", - icon: , + icon: , }, { value: "dot", text: t("labels.arrowhead_dot"), keyBinding: "r", - icon: , + icon: , }, { value: "triangle", text: t("labels.arrowhead_triangle"), - icon: ( - - ), + icon: , keyBinding: "t", }, ]} diff --git a/src/actions/actionZindex.tsx b/src/actions/actionZindex.tsx index 629b38643..07da26217 100644 --- a/src/actions/actionZindex.tsx +++ b/src/actions/actionZindex.tsx @@ -10,10 +10,10 @@ import { t } from "../i18n"; import { getShortcutKey } from "../utils"; import { register } from "./register"; import { - SendBackwardIcon, - BringToFrontIcon, - SendToBackIcon, BringForwardIcon, + BringToFrontIcon, + SendBackwardIcon, + SendToBackIcon, } from "../components/icons"; export const actionSendBackward = register({ @@ -39,7 +39,7 @@ export const actionSendBackward = register({ onClick={() => updateData(null)} title={`${t("labels.sendBackward")} — ${getShortcutKey("CtrlOrCmd+[")}`} > - + {SendBackwardIcon} ), }); @@ -67,7 +67,7 @@ export const actionBringForward = register({ onClick={() => updateData(null)} title={`${t("labels.bringForward")} — ${getShortcutKey("CtrlOrCmd+]")}`} > - + {BringForwardIcon} ), }); @@ -102,7 +102,7 @@ export const actionSendToBack = register({ : getShortcutKey("CtrlOrCmd+Shift+[") }`} > - + {SendToBackIcon} ), }); @@ -138,7 +138,7 @@ export const actionBringToFront = register({ : getShortcutKey("CtrlOrCmd+Shift+]") }`} > - + {BringToFrontIcon} ), }); diff --git a/src/actions/manager.tsx b/src/actions/manager.tsx index e2655e506..c003422f2 100644 --- a/src/actions/manager.tsx +++ b/src/actions/manager.tsx @@ -135,8 +135,13 @@ export class ActionManager { /** * @param data additional data sent to the PanelComponent */ - renderAction = (name: ActionName, data?: PanelComponentProps["data"]) => { + renderAction = ( + name: ActionName, + data?: PanelComponentProps["data"], + isInHamburgerMenu = false, + ) => { const canvasActions = this.app.props.UIOptions.canvasActions; + if ( this.actions[name] && "PanelComponent" in this.actions[name] && @@ -169,6 +174,7 @@ export class ActionManager { updateData={updateData} appProps={this.app.props} data={data} + isInHamburgerMenu={isInHamburgerMenu} /> ); } diff --git a/src/actions/shortcuts.ts b/src/actions/shortcuts.ts index 2d37f20c2..4d53f47af 100644 --- a/src/actions/shortcuts.ts +++ b/src/actions/shortcuts.ts @@ -3,36 +3,45 @@ import { isDarwin } from "../keys"; import { getShortcutKey } from "../utils"; import { ActionName } from "./types"; -export type ShortcutName = SubtypeOf< - ActionName, - | "cut" - | "copy" - | "paste" - | "copyStyles" - | "pasteStyles" - | "selectAll" - | "deleteSelectedElements" - | "duplicateSelection" - | "sendBackward" - | "bringForward" - | "sendToBack" - | "bringToFront" - | "copyAsPng" - | "copyAsSvg" - | "group" - | "ungroup" - | "gridMode" - | "zenMode" - | "stats" - | "addToLibrary" - | "viewMode" - | "flipHorizontal" - | "flipVertical" - | "hyperlink" - | "toggleLock" ->; +export type ShortcutName = + | SubtypeOf< + ActionName, + | "toggleTheme" + | "loadScene" + | "cut" + | "copy" + | "paste" + | "copyStyles" + | "pasteStyles" + | "selectAll" + | "deleteSelectedElements" + | "duplicateSelection" + | "sendBackward" + | "bringForward" + | "sendToBack" + | "bringToFront" + | "copyAsPng" + | "copyAsSvg" + | "group" + | "ungroup" + | "gridMode" + | "zenMode" + | "stats" + | "addToLibrary" + | "viewMode" + | "flipHorizontal" + | "flipVertical" + | "hyperlink" + | "toggleLock" + > + | "saveScene" + | "imageExport"; const shortcutMap: Record = { + toggleTheme: [getShortcutKey("Shit+Alt+D")], + saveScene: [getShortcutKey("CtrlOrCmd+S")], + loadScene: [getShortcutKey("CtrlOrCmd+O")], + imageExport: [getShortcutKey("CtrlOrCmd+Shift+E")], cut: [getShortcutKey("CtrlOrCmd+X")], copy: [getShortcutKey("CtrlOrCmd+C")], paste: [getShortcutKey("CtrlOrCmd+V")], diff --git a/src/actions/types.ts b/src/actions/types.ts index ecde6540d..b04cbef78 100644 --- a/src/actions/types.ts +++ b/src/actions/types.ts @@ -124,7 +124,9 @@ export type PanelComponentProps = { export interface Action { name: ActionName; - PanelComponent?: React.FC; + PanelComponent?: React.FC< + PanelComponentProps & { isInHamburgerMenu: boolean } + >; perform: ActionFn; keyPriority?: number; keyTest?: ( diff --git a/src/appState.ts b/src/appState.ts index ab5011861..b35cd2a2e 100644 --- a/src/appState.ts +++ b/src/appState.ts @@ -19,6 +19,7 @@ export const getDefaultAppState = (): Omit< "offsetTop" | "offsetLeft" | "width" | "height" > => { return { + showWelcomeScreen: false, theme: THEME.LIGHT, collaborators: new Map(), currentChartType: "bar", @@ -67,6 +68,7 @@ export const getDefaultAppState = (): Omit< openMenu: null, openPopup: null, openSidebar: null, + openDialog: null, pasteDialog: { shown: false, data: null }, previousSelectedElementIds: {}, resizingElement: null, @@ -77,7 +79,6 @@ export const getDefaultAppState = (): Omit< selectedGroupIds: {}, selectionElement: null, shouldCacheIgnoreZoom: false, - showHelpDialog: false, showStats: false, startBoundElement: null, suggestedBindings: [], @@ -110,6 +111,7 @@ const APP_STATE_STORAGE_CONF = (< T extends Record, >(config: { [K in keyof T]: K extends keyof AppState ? T[K] : never }) => config)({ + showWelcomeScreen: { browser: true, export: false, server: false }, theme: { browser: true, export: false, server: false }, collaborators: { browser: false, export: false, server: false }, currentChartType: { browser: true, export: false, server: false }, @@ -160,6 +162,7 @@ const APP_STATE_STORAGE_CONF = (< openMenu: { browser: true, export: false, server: false }, openPopup: { browser: false, export: false, server: false }, openSidebar: { browser: true, export: false, server: false }, + openDialog: { browser: false, export: false, server: false }, pasteDialog: { browser: false, export: false, server: false }, previousSelectedElementIds: { browser: true, export: false, server: false }, resizingElement: { browser: false, export: false, server: false }, @@ -170,7 +173,6 @@ const APP_STATE_STORAGE_CONF = (< selectedGroupIds: { browser: true, export: false, server: false }, selectionElement: { browser: false, export: false, server: false }, shouldCacheIgnoreZoom: { browser: true, export: false, server: false }, - showHelpDialog: { browser: false, export: false, server: false }, showStats: { browser: true, export: false, server: false }, startBoundElement: { browser: false, export: false, server: false }, suggestedBindings: { browser: false, export: false, server: false }, diff --git a/src/clients.ts b/src/clients.ts index 147902f44..e31b73eb9 100644 --- a/src/clients.ts +++ b/src/clients.ts @@ -11,27 +11,18 @@ export const getClientColors = (clientId: string, appState: AppState) => { // Naive way of getting an integer out of the clientId const sum = clientId.split("").reduce((a, str) => a + str.charCodeAt(0), 0); - // Skip transparent background. - const backgrounds = colors.elementBackground.slice(1); - const strokes = colors.elementStroke.slice(1); + // Skip transparent & gray colors + const backgrounds = colors.elementBackground.slice(3); + const strokes = colors.elementStroke.slice(3); return { background: backgrounds[sum % backgrounds.length], stroke: strokes[sum % strokes.length], }; }; -export const getClientInitials = (username?: string | null) => { - if (!username) { +export const getClientInitials = (userName?: string | null) => { + if (!userName) { return "?"; } - const names = username.trim().split(" "); - - if (names.length < 2) { - return names[0].substring(0, 2).toUpperCase(); - } - - const firstName = names[0]; - const lastName = names[names.length - 1]; - - return (firstName[0] + lastName[0]).toUpperCase(); + return userName.trim()[0].toUpperCase(); }; diff --git a/src/components/Actions.scss b/src/components/Actions.scss new file mode 100644 index 000000000..925e918d2 --- /dev/null +++ b/src/components/Actions.scss @@ -0,0 +1,92 @@ +.zoom-actions, +.undo-redo-buttons { + background-color: var(--island-bg-color); + border-radius: var(--border-radius-lg); +} + +.zoom-button, +.undo-redo-buttons button { + border: 1px solid var(--default-border-color) !important; + border-radius: 0 !important; + background-color: transparent !important; + font-size: 0.875rem !important; + width: var(--lg-button-size); + height: var(--lg-button-size); + svg { + width: var(--lg-icon-size) !important; + height: var(--lg-icon-size) !important; + } + + .ToolIcon__icon { + width: 100%; + height: 100%; + } +} + +.reset-zoom-button { + border-left: 0 !important; + border-right: 0 !important; + padding: 0 0.625rem !important; + width: 3.75rem !important; + justify-content: center; + color: var(--text-primary-color); +} + +.zoom-out-button { + border-top-left-radius: var(--border-radius-lg) !important; + border-bottom-left-radius: var(--border-radius-lg) !important; + + :root[dir="rtl"] & { + transform: scaleX(-1); + } + + .ToolIcon__icon { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + } +} + +.zoom-in-button { + border-top-right-radius: var(--border-radius-lg) !important; + border-bottom-right-radius: var(--border-radius-lg) !important; + + :root[dir="rtl"] & { + transform: scaleX(-1); + } + + .ToolIcon__icon { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } +} + +.undo-redo-buttons { + .undo-button-container button { + border-top-left-radius: var(--border-radius-lg) !important; + border-bottom-left-radius: var(--border-radius-lg) !important; + border-right: 0 !important; + + :root[dir="rtl"] & { + transform: scaleX(-1); + } + + .ToolIcon__icon { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + } + } + + .redo-button-container button { + border-top-right-radius: var(--border-radius-lg) !important; + border-bottom-right-radius: var(--border-radius-lg) !important; + + :root[dir="rtl"] & { + transform: scaleX(-1); + } + + .ToolIcon__icon { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + } +} diff --git a/src/components/Actions.tsx b/src/components/Actions.tsx index 1ba40ba08..2da4a151d 100644 --- a/src/components/Actions.tsx +++ b/src/components/Actions.tsx @@ -28,6 +28,8 @@ import { trackEvent } from "../analytics"; import { hasBoundTextElement, isBoundToContainer } from "../element/typeChecks"; import clsx from "clsx"; import { actionToggleZenMode } from "../actions"; +import "./Actions.scss"; +import { Tooltip } from "./Tooltip"; export const SelectedShapeActions = ({ appState, @@ -79,12 +81,16 @@ export const SelectedShapeActions = ({ return (
- {((hasStrokeColor(appState.activeTool.type) && - appState.activeTool.type !== "image" && - commonSelectedType !== "image") || - targetElements.some((element) => hasStrokeColor(element.type))) && - renderAction("changeStrokeColor")} - {showChangeBackgroundIcons && renderAction("changeBackgroundColor")} +
+ {((hasStrokeColor(appState.activeTool.type) && + appState.activeTool.type !== "image" && + commonSelectedType !== "image") || + targetElements.some((element) => hasStrokeColor(element.type))) && + renderAction("changeStrokeColor")} +
+ {showChangeBackgroundIcons && ( +
{renderAction("changeBackgroundColor")}
+ )} {showFillIcons && renderAction("changeFillStyle")} {(hasStrokeWidth(appState.activeTool.type) || @@ -163,7 +169,16 @@ export const SelectedShapeActions = ({ )} {targetElements.length > 2 && renderAction("distributeHorizontally")} -
+ {/* breaks the row ˇˇ */} +
+
{renderAction("alignTop")} {renderAction("alignVerticallyCentered")} {renderAction("alignBottom")} @@ -203,22 +218,23 @@ export const ShapesSwitcher = ({ appState: AppState; }) => ( <> - {SHAPES.map(({ value, icon, key }, index) => { + {SHAPES.map(({ value, icon, key, fillable }, index) => { + const numberKey = value === "eraser" ? 0 : index + 1; const label = t(`toolBar.${value}`); const letter = key && (typeof key === "string" ? key : key[0]); const shortcut = letter - ? `${capitalizeString(letter)} ${t("helpDialog.or")} ${index + 1}` - : `${index + 1}`; + ? `${capitalizeString(letter)} ${t("helpDialog.or")} ${numberKey}` + : `${numberKey}`; return ( ( - - + + {renderAction("zoomOut")} - {renderAction("zoomIn")} {renderAction("resetZoom")} + {renderAction("zoomIn")} ); @@ -280,8 +296,12 @@ export const UndoRedoActions = ({ className?: string; }) => (
- {renderAction("undo", { size: "small" })} - {renderAction("redo", { size: "small" })} +
+ {renderAction("undo")} +
+
+ {renderAction("redo")} +
); diff --git a/src/components/ActiveFile.tsx b/src/components/ActiveFile.tsx index a116601ce..d6e7c8fa4 100644 --- a/src/components/ActiveFile.tsx +++ b/src/components/ActiveFile.tsx @@ -1,9 +1,11 @@ -import Stack from "../components/Stack"; -import { ToolButton } from "../components/ToolButton"; -import { save, file } from "../components/icons"; +// TODO barnabasmolnar/editor-redesign +// this icon is not great +import { getShortcutFromShortcutName } from "../actions/shortcuts"; +import { save } from "../components/icons"; import { t } from "../i18n"; import "./ActiveFile.scss"; +import MenuItem from "./MenuItem"; type ActiveFileProps = { fileName?: string; @@ -11,18 +13,11 @@ type ActiveFileProps = { }; export const ActiveFile = ({ fileName, onSave }: ActiveFileProps) => ( - - - {file} - {fileName} - - - + ); diff --git a/src/components/App.tsx b/src/components/App.tsx index b81284596..5d2dac522 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -266,6 +266,10 @@ import { isLocalLink, } from "../element/Hyperlink"; import { shouldShowBoundingBox } from "../element/transformHandles"; +import { atom } from "jotai"; + +export const isMenuOpenAtom = atom(false); +export const isDropdownOpenAtom = atom(false); const deviceContextInitialValue = { isSmScreen: false, @@ -571,6 +575,11 @@ class App extends React.Component { library={this.library} id={this.id} onImageAction={this.onImageAction} + renderWelcomeScreen={ + this.state.showWelcomeScreen && + this.state.activeTool.type === "selection" && + !this.scene.getElementsIncludingDeleted().length + } />
@@ -1085,6 +1094,13 @@ class App extends React.Component { } componentDidUpdate(prevProps: AppProps, prevState: AppState) { + if ( + !this.state.showWelcomeScreen && + !this.scene.getElementsIncludingDeleted().length + ) { + this.setState({ showWelcomeScreen: true }); + } + if ( this.excalidrawContainerRef.current && prevProps.UIOptions.dockedSidebarBreakpoint !== @@ -1276,6 +1292,10 @@ class App extends React.Component { ); }); + const selectionColor = getComputedStyle( + document.querySelector(".excalidraw")!, + ).getPropertyValue("--color-selection"); + renderScene( { elements: renderingElements, @@ -1284,6 +1304,7 @@ class App extends React.Component { rc: this.rc!, canvas: this.canvas!, renderConfig: { + selectionColor, scrollX: this.state.scrollX, scrollY: this.state.scrollY, viewBackgroundColor: this.state.viewBackgroundColor, @@ -1867,8 +1888,16 @@ class App extends React.Component { if (event.key === KEYS.QUESTION_MARK) { this.setState({ - showHelpDialog: true, + openDialog: "help", }); + return; + } else if ( + event.key.toLowerCase() === KEYS.E && + event.shiftKey && + event[KEYS.CTRL_OR_CMD] + ) { + this.setState({ openDialog: "imageExport" }); + return; } if (this.actionManager.handleKeyDown(event)) { diff --git a/src/components/Avatar.scss b/src/components/Avatar.scss index d3f8c8bd3..90e5ce96a 100644 --- a/src/components/Avatar.scss +++ b/src/components/Avatar.scss @@ -2,16 +2,19 @@ .excalidraw { .Avatar { - width: 2.5rem; - height: 2.5rem; - border-radius: 1.25rem; + width: 1.25rem; + height: 1.25rem; + border-radius: 100%; + outline: 2px solid var(--avatar-border-color); + outline-offset: 2px; display: flex; justify-content: center; align-items: center; color: $oc-white; cursor: pointer; - font-size: 0.8rem; + font-size: 0.625rem; font-weight: 500; + line-height: 1; &-img { width: 100%; diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx index 9af4dab58..57a7eec26 100644 --- a/src/components/Avatar.tsx +++ b/src/components/Avatar.tsx @@ -11,13 +11,11 @@ type AvatarProps = { src?: string; }; -export const Avatar = ({ color, border, onClick, name, src }: AvatarProps) => { +export const Avatar = ({ color, onClick, name, src }: AvatarProps) => { const shortName = getClientInitials(name); const [error, setError] = useState(false); const loadImg = !error && src; - const style = loadImg - ? undefined - : { background: color, border: `1px solid ${border}` }; + const style = loadImg ? undefined : { background: color }; return (
{loadImg ? ( diff --git a/src/components/BackgroundPickerAndDarkModeToggle.tsx b/src/components/BackgroundPickerAndDarkModeToggle.tsx deleted file mode 100644 index 603a99a92..000000000 --- a/src/components/BackgroundPickerAndDarkModeToggle.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { ActionManager } from "../actions/manager"; - -export const BackgroundPickerAndDarkModeToggle = ({ - actionManager, -}: { - actionManager: ActionManager; -}) => ( -
- {actionManager.renderAction("changeViewBackgroundColor")} - {actionManager.renderAction("toggleTheme")} -
-); diff --git a/src/components/CheckboxItem.scss b/src/components/CheckboxItem.scss index a0a25ca09..f6439498c 100644 --- a/src/components/CheckboxItem.scss +++ b/src/components/CheckboxItem.scss @@ -64,6 +64,8 @@ color: #{$oc-blue-7}; + border: 0; + &:focus { box-shadow: 0 0 0 3px #{$oc-blue-7}; } diff --git a/src/components/ClearCanvas.tsx b/src/components/ClearCanvas.tsx index ab1cd6704..d6f8ee393 100644 --- a/src/components/ClearCanvas.tsx +++ b/src/components/ClearCanvas.tsx @@ -1,10 +1,9 @@ import { useState } from "react"; import { t } from "../i18n"; -import { useDevice } from "./App"; -import { trash } from "./icons"; -import { ToolButton } from "./ToolButton"; +import { TrashIcon } from "./icons"; import ConfirmDialog from "./ConfirmDialog"; +import MenuItem from "./MenuItem"; const ClearCanvas = ({ onConfirm }: { onConfirm: () => void }) => { const [showDialog, setShowDialog] = useState(false); @@ -14,14 +13,11 @@ const ClearCanvas = ({ onConfirm }: { onConfirm: () => void }) => { return ( <> - {showDialog && ( diff --git a/src/components/CollabButton.scss b/src/components/CollabButton.scss index 93abb07cc..4e09d11c7 100644 --- a/src/components/CollabButton.scss +++ b/src/components/CollabButton.scss @@ -1,6 +1,51 @@ @import "../css/variables.module"; .excalidraw { + .collab-button { + @include outlineButtonStyles; + width: var(--lg-button-size); + height: var(--lg-button-size); + + svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); + } + background-color: var(--color-primary); + border-color: var(--color-primary); + color: white; + flex-shrink: 0; + + &:hover { + background-color: var(--color-primary-darker); + border-color: var(--color-primary-darker); + } + + &:active { + background-color: var(--color-primary-darker); + } + + &.active { + background-color: #0fb884; + border-color: #0fb884; + + svg { + color: #fff; + } + + &:hover, + &:active { + background-color: #0fb884; + border-color: #0fb884; + } + } + } + + &.theme--dark { + .collab-button { + color: var(--color-gray-90); + } + } + .CollabButton.is-collaborating { background-color: var(--button-special-active-bg-color); @@ -24,9 +69,9 @@ bottom: -5px; padding: 3px; border-radius: 50%; - background-color: $oc-green-6; - color: $oc-white; - font-size: 0.6em; + background-color: $oc-green-2; + color: $oc-green-9; + font-size: 0.6rem; font-family: "Cascadia"; } } diff --git a/src/components/CollabButton.tsx b/src/components/CollabButton.tsx index c2f642744..12df839bb 100644 --- a/src/components/CollabButton.tsx +++ b/src/components/CollabButton.tsx @@ -1,37 +1,47 @@ -import clsx from "clsx"; -import { ToolButton } from "./ToolButton"; import { t } from "../i18n"; -import { useDevice } from "../components/App"; -import { users } from "./icons"; +import { UsersIcon } from "./icons"; import "./CollabButton.scss"; +import MenuItem from "./MenuItem"; +import clsx from "clsx"; const CollabButton = ({ isCollaborating, collaboratorCount, onClick, + isInHamburgerMenu = true, }: { isCollaborating: boolean; collaboratorCount: number; onClick: () => void; + isInHamburgerMenu?: boolean; }) => { return ( <> - - {isCollaborating && ( -
{collaboratorCount}
- )} -
+ {isInHamburgerMenu ? ( + + ) : ( + + )} ); }; diff --git a/src/components/ColorPicker.scss b/src/components/ColorPicker.scss index fdcb9baa9..52ea20a19 100644 --- a/src/components/ColorPicker.scss +++ b/src/components/ColorPicker.scss @@ -21,6 +21,23 @@ display: grid; grid-template-columns: auto 1fr; align-items: center; + column-gap: 0.5rem; + } + + .color-picker-control-container + .popover { + position: static; + } + + .color-picker-popover-container { + margin-top: -0.25rem; + + :root[dir="ltr"] & { + margin-left: 0.5rem; + } + + :root[dir="rtl"] & { + margin-left: -3rem; + } } .color-picker-triangle { @@ -30,20 +47,29 @@ border-width: 0 9px 10px; border-color: transparent transparent var(--popup-bg-color); position: absolute; - top: -10px; + top: 10px; :root[dir="ltr"] & { - left: 12px; + transform: rotate(270deg); + left: -14px; } :root[dir="rtl"] & { - right: 12px; + transform: rotate(90deg); + right: -14px; } } .color-picker-triangle-shadow { border-color: transparent transparent transparentize($oc-black, 0.9); - top: -11px; + + :root[dir="ltr"] & { + left: -14px; + } + + :root[dir="rtl"] & { + right: -16px; + } } .color-picker-content--default { @@ -119,16 +145,21 @@ } .color-picker-hash { - background: var(--input-border-color); - height: 1.875rem; - width: 1.875rem; + height: var(--default-button-size); + flex-shrink: 0; + padding: 0.5rem 0.5rem 0.5rem 0.75rem; + border: 1px solid var(--default-border-color); + border-right: 0; + box-sizing: border-box; :root[dir="ltr"] & { - border-radius: 4px 0 0 4px; + border-radius: var(--border-radius-lg) 0 0 var(--border-radius-lg); } :root[dir="rtl"] & { - border-radius: 0 4px 4px 0; + border-radius: 0 var(--border-radius-lg) var(--border-radius-lg) 0; + border-right: 1px solid var(--default-border-color); + border-left: 0; } color: var(--input-label-color); @@ -138,81 +169,64 @@ position: relative; } - .color-input-container:focus-within .color-picker-hash { - box-shadow: 0 0 0 2px var(--focus-highlight-color); - } - - .color-input-container:focus-within .color-picker-hash::before, - .color-input-container:focus-within .color-picker-hash::after { - content: ""; - width: 1px; - height: 100%; - position: absolute; - top: 0; - } - - .color-input-container:focus-within .color-picker-hash::before { - background: var(--input-border-color); - - :root[dir="ltr"] & { - right: -1px; - } - - :root[dir="rtl"] & { - left: -1px; - } - } - - .color-input-container:focus-within .color-picker-hash::after { - background: var(--input-bg-color); - - :root[dir="ltr"] & { - right: -2px; - } - - :root[dir="rtl"] & { - left: -2px; - } - } - .color-input-container { display: flex; + + &:focus-within { + box-shadow: 0 0 0 1px var(--color-primary-darkest); + border-radius: var(--border-radius-lg); + } } .color-picker-input { - width: 11ch; /* length of `transparent` */ + box-sizing: border-box; + width: 100%; margin: 0; - font-size: 1rem; - background-color: var(--input-bg-color); + font-size: 0.875rem; + background-color: transparent; color: var(--text-primary-color); border: 0; outline: none; - height: 1.75em; - box-shadow: var(--input-border-color) 0 0 0 1px inset; + height: var(--default-button-size); + border: 1px solid var(--default-border-color); + border-left: 0; + letter-spacing: 0.4px; :root[dir="ltr"] & { - border-radius: 0 4px 4px 0; + border-radius: 0 var(--border-radius-lg) var(--border-radius-lg) 0; } :root[dir="rtl"] & { - border-radius: 4px 0 0 4px; + border-radius: var(--border-radius-lg) 0 0 var(--border-radius-lg); + border-left: 1px solid var(--default-border-color); + border-right: 0; } - float: left; - padding: 1px; - padding-inline-start: 0.5em; + padding: 0.5rem; + padding-left: 0.25rem; appearance: none; + + &:focus-visible { + box-shadow: none; + } + } + + .color-picker-label-swatch-container { + border: 1px solid var(--default-border-color); + border-radius: var(--border-radius-lg); + width: var(--default-button-size); + height: var(--default-button-size); + box-sizing: border-box; + overflow: hidden; } .color-picker-label-swatch { - height: 1.875rem; - width: 1.875rem; - margin-inline-end: 0.25rem; - border: 1px solid $oc-gray-3; - position: relative; + @include outlineButtonStyles; + background-color: var(--swatch-color) !important; overflow: hidden; - background-color: transparent !important; + position: relative; filter: var(--theme-filter); + border: 0 !important; &:after { content: ""; diff --git a/src/components/ColorPicker.tsx b/src/components/ColorPicker.tsx index 22f9eb267..03ab4a5be 100644 --- a/src/components/ColorPicker.tsx +++ b/src/components/ColorPicker.tsx @@ -365,17 +365,20 @@ export const ColorPicker = ({ appState: AppState; }) => { const pickerButton = React.useRef(null); + const coords = pickerButton.current?.getBoundingClientRect(); return (
-
{isActive ? ( - - event.target !== pickerButton.current && setActive(false) - } +
- { - onChange(changedColor); - }} - onClose={() => { - setActive(false); - pickerButton.current?.focus(); - }} - label={label} - showInput={false} - type={type} - elements={elements} - /> - + + event.target !== pickerButton.current && setActive(false) + } + > + { + onChange(changedColor); + }} + onClose={() => { + setActive(false); + pickerButton.current?.focus(); + }} + label={label} + showInput={false} + type={type} + elements={elements} + /> + +
) : null}
diff --git a/src/components/ConfirmDialog.scss b/src/components/ConfirmDialog.scss index d3987fcc5..82a6dff9b 100644 --- a/src/components/ConfirmDialog.scss +++ b/src/components/ConfirmDialog.scss @@ -4,34 +4,8 @@ .confirm-dialog { &-buttons { display: flex; - padding: 0.2rem 0; + column-gap: 0.5rem; justify-content: flex-end; } - .ToolIcon__icon { - min-width: 2.5rem; - width: auto; - font-size: 1rem; - } - - .ToolIcon_type_button { - margin-left: 0.8rem; - padding: 0 0.5rem; - } - - &__content { - font-size: 1rem; - } - - &--confirm.ToolIcon_type_button { - background-color: $oc-red-6; - - &:hover { - background-color: $oc-red-8; - } - - .ToolIcon__icon { - color: $oc-white; - } - } } } diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx index 459787dfb..30faef788 100644 --- a/src/components/ConfirmDialog.tsx +++ b/src/components/ConfirmDialog.tsx @@ -1,8 +1,11 @@ import { t } from "../i18n"; import { Dialog, DialogProps } from "./Dialog"; -import { ToolButton } from "./ToolButton"; import "./ConfirmDialog.scss"; +import DialogActionButton from "./DialogActionButton"; +import { isMenuOpenAtom } from "./App"; +import { isDropdownOpenAtom } from "./App"; +import { useSetAtom } from "jotai"; interface Props extends Omit { onConfirm: () => void; @@ -20,6 +23,10 @@ const ConfirmDialog = (props: Props) => { className = "", ...rest } = props; + + const setIsMenuOpen = useSetAtom(isMenuOpenAtom); + const setIsDropdownOpen = useSetAtom(isDropdownOpenAtom); + return ( { > {children}
- { + setIsMenuOpen(false); + setIsDropdownOpen(false); + onCancel(); + }} /> - { + setIsMenuOpen(false); + setIsDropdownOpen(false); + onConfirm(); + }} + actionType="danger" />
diff --git a/src/components/Dialog.scss b/src/components/Dialog.scss index 435c56b60..604b3c64e 100644 --- a/src/components/Dialog.scss +++ b/src/components/Dialog.scss @@ -7,68 +7,11 @@ } .Dialog__title { - display: grid; - align-items: center; - margin-top: 0; - grid-template-columns: 1fr calc(var(--space-factor) * 7); - grid-gap: var(--metric); - padding: calc(var(--space-factor) * 2); - text-align: center; - font-variant: small-caps; - font-size: 1.2em; - } - - .Dialog__titleContent { - flex: 1; - } - - .Dialog .Modal__close { - color: var(--icon-fill-color); margin: 0; - } - - .Dialog__content { - padding: 0 16px 16px; - } - - @include isMobile { - .Dialog { - --metric: calc(var(--space-factor) * 4); - --inset-left: #{"max(var(--metric), var(--sal))"}; - --inset-right: #{"max(var(--metric), var(--sar))"}; - } - - .Dialog__title { - grid-template-columns: calc(var(--space-factor) * 7) 1fr calc( - var(--space-factor) * 7 - ); - position: sticky; - top: 0; - padding: calc(var(--space-factor) * 2); - background: var(--island-bg-color); - font-size: 1.25em; - - box-sizing: border-box; - border-bottom: 1px solid var(--button-gray-2); - z-index: 1; - } - - .Dialog__titleContent { - text-align: center; - } - - .Dialog .Island { - width: 100vw; - height: 100%; - box-sizing: border-box; - overflow-y: auto; - padding-left: #{"max(calc(var(--padding) * var(--space-factor)), var(--sal))"}; - padding-right: #{"max(calc(var(--padding) * var(--space-factor)), var(--sar))"}; - padding-bottom: #{"max(calc(var(--padding) * var(--space-factor)), var(--sab))"}; - } - - .Dialog .Modal__close { - order: -1; - } + text-align: left; + font-size: 1.25rem; + border-bottom: 1px solid var(--dialog-border-color); + padding: 0 0 0.75rem; + margin-bottom: 1.5rem; } } diff --git a/src/components/Dialog.tsx b/src/components/Dialog.tsx index 67ad904e7..51d339944 100644 --- a/src/components/Dialog.tsx +++ b/src/components/Dialog.tsx @@ -5,11 +5,13 @@ import { t } from "../i18n"; import { useExcalidrawContainer, useDevice } from "../components/App"; import { KEYS } from "../keys"; import "./Dialog.scss"; -import { back, close } from "./icons"; +import { back, CloseIcon } from "./icons"; import { Island } from "./Island"; import { Modal } from "./Modal"; import { AppState } from "../types"; import { queryFocusableElements } from "../utils"; +import { isMenuOpenAtom, isDropdownOpenAtom } from "./App"; +import { useSetAtom } from "jotai"; export interface DialogProps { children: React.ReactNode; @@ -65,7 +67,12 @@ export const Dialog = (props: DialogProps) => { return () => islandNode.removeEventListener("keydown", handleKeyDown); }, [islandNode, props.autofocus]); + const setIsMenuOpen = useSetAtom(isMenuOpenAtom); + const setIsDropdownOpen = useSetAtom(isDropdownOpenAtom); + const onClose = () => { + setIsMenuOpen(false); + setIsDropdownOpen(false); (lastActiveElement as HTMLElement).focus(); props.onCloseRequest(); }; @@ -88,7 +95,7 @@ export const Dialog = (props: DialogProps) => { title={t("buttons.close")} aria-label={t("buttons.close")} > - {useDevice().isMobile ? back : close} + {useDevice().isMobile ? back : CloseIcon}
{props.children}
diff --git a/src/components/DialogActionButton.scss b/src/components/DialogActionButton.scss new file mode 100644 index 000000000..54c44ba16 --- /dev/null +++ b/src/components/DialogActionButton.scss @@ -0,0 +1,47 @@ +.excalidraw { + .Dialog__action-button { + position: relative; + display: flex; + column-gap: 0.5rem; + align-items: center; + padding: 0.5rem 1.5rem; + border: 1px solid var(--default-border-color); + background-color: transparent; + height: 3rem; + border-radius: var(--border-radius-lg); + letter-spacing: 0.4px; + color: inherit; + font-family: inherit; + font-size: 0.875rem; + font-weight: 600; + user-select: none; + + svg { + display: block; + width: 1rem; + height: 1rem; + } + + &--danger { + background-color: var(--color-danger); + border-color: var(--color-danger); + color: #fff; + } + + &--primary { + background-color: var(--color-primary); + border-color: var(--color-primary); + color: #fff; + } + } + + &.theme--dark { + .Dialog__action-button--danger { + color: var(--color-gray-100); + } + + .Dialog__action-button--primary { + color: var(--color-gray-100); + } + } +} diff --git a/src/components/DialogActionButton.tsx b/src/components/DialogActionButton.tsx new file mode 100644 index 000000000..17f202362 --- /dev/null +++ b/src/components/DialogActionButton.tsx @@ -0,0 +1,46 @@ +import clsx from "clsx"; +import { ReactNode } from "react"; +import "./DialogActionButton.scss"; +import Spinner from "./Spinner"; + +interface DialogActionButtonProps { + label: string; + children?: ReactNode; + actionType?: "primary" | "danger"; + isLoading?: boolean; +} + +const DialogActionButton = ({ + label, + onClick, + className, + children, + actionType, + type = "button", + isLoading, + ...rest +}: DialogActionButtonProps & React.ButtonHTMLAttributes) => { + const cs = actionType ? `Dialog__action-button--${actionType}` : ""; + + return ( + + ); +}; + +export default DialogActionButton; diff --git a/src/components/EncryptedIcon.tsx b/src/components/EncryptedIcon.tsx new file mode 100644 index 000000000..12a936c34 --- /dev/null +++ b/src/components/EncryptedIcon.tsx @@ -0,0 +1,19 @@ +import { t } from "../i18n"; +import { shield } from "./icons"; +import { Tooltip } from "./Tooltip"; + +const EncryptedIcon = () => ( + + + {shield} + + +); + +export default EncryptedIcon; diff --git a/src/components/ExportDialog.scss b/src/components/ExportDialog.scss index 4d476a1e3..c95a116e7 100644 --- a/src/components/ExportDialog.scss +++ b/src/components/ExportDialog.scss @@ -91,6 +91,8 @@ } button.ExportDialog-imageExportButton { + border: 0; + width: 5rem; height: 5rem; margin: 0 0.2em; diff --git a/src/components/FixedSideContainer.scss b/src/components/FixedSideContainer.scss index 62b9869fd..85d0ef083 100644 --- a/src/components/FixedSideContainer.scss +++ b/src/components/FixedSideContainer.scss @@ -9,9 +9,10 @@ } .FixedSideContainer_side_top { - left: var(--space-factor); - top: var(--space-factor); - right: var(--space-factor); + left: 1rem; + top: 1rem; + right: 1rem; + bottom: 1rem; z-index: 2; } diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 0fbcd73d9..825226011 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,5 +1,6 @@ import clsx from "clsx"; import { ActionManager } from "../actions/manager"; +import { t } from "../i18n"; import { AppState, ExcalidrawProps } from "../types"; import { ExitZenModeAction, @@ -8,20 +9,23 @@ import { ZoomActions, } from "./Actions"; import { useDevice } from "./App"; -import { Island } from "./Island"; +import { WelcomeScreenHelpArrow } from "./icons"; import { Section } from "./Section"; import Stack from "./Stack"; +import WelcomeScreenDecor from "./WelcomeScreenDecor"; const Footer = ({ appState, actionManager, renderCustomFooter, showExitZenModeBtn, + renderWelcomeScreen, }: { appState: AppState; actionManager: ActionManager; renderCustomFooter?: ExcalidrawProps["renderFooter"]; showExitZenModeBtn: boolean; + renderWelcomeScreen: boolean; }) => { const device = useDevice(); const showFinalize = @@ -39,31 +43,19 @@ const Footer = ({ >
- - - - {!appState.viewModeEnabled && ( - <> - + -
- {actionManager.renderAction("eraser", { size: "small" })} -
- + {!appState.viewModeEnabled && ( + )} {showFinalize && ( - {actionManager.renderAction("toggleShortcuts")} +
+ +
+
{t("welcomeScreen.helpHints")}
+ {WelcomeScreenHelpArrow} +
+
+ + {actionManager.renderAction("toggleShortcuts")} +
( +export const HelpButton = (props: HelpButtonProps) => ( ); diff --git a/src/components/HelpDialog.scss b/src/components/HelpDialog.scss index 6b5701b84..8a0a08f3c 100644 --- a/src/components/HelpDialog.scss +++ b/src/components/HelpDialog.scss @@ -1,56 +1,115 @@ @import "../css/variables.module"; .excalidraw { - .HelpDialog h3 { - border-bottom: 1px solid var(--button-gray-2); - padding-bottom: 4px; - } + .HelpDialog { + .Modal__content { + max-width: 960px; + } - .HelpDialog--island { - border: 1px solid var(--button-gray-2); - margin-bottom: 16px; - } + h3 { + margin: 1.5rem 0; + font-weight: bold; + font-size: 1.125rem; + } - .HelpDialog--island-title { - margin: 0; - padding: 4px; - background-color: var(--button-gray-1); - text-align: center; - } + &__header { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + } - .HelpDialog--shortcut { - border-top: 1px solid var(--button-gray-2); - } + &__btn { + display: flex; + column-gap: 0.5rem; + align-items: center; + border: 1px solid var(--default-border-color); + padding: 0.625rem 1rem; + border-radius: var(--border-radius-lg); + color: var(--text-primary-color); + font-weight: 600; + font-size: 0.75rem; + letter-spacing: 0.4px; - .HelpDialog--key { - word-break: keep-all; - border: 1px solid var(--button-gray-2); - padding: 2px 8px; - margin: auto 4px; - background-color: var(--button-gray-1); - border-radius: 2px; - font-size: 0.8em; - min-height: 26px; - box-sizing: border-box; - display: flex; - align-items: center; - font-family: inherit; - } + &:hover { + text-decoration: none; + } + } - .HelpDialog--header { - display: flex; - flex-direction: row; - justify-content: space-evenly; - margin-bottom: 32px; - padding-bottom: 16px; - } + &__link-icon { + line-height: 0; + svg { + width: 1rem; + height: 1rem; + } + } - .HelpDialog--btn { - border: 1px solid var(--link-color); - padding: 8px 32px; - border-radius: 4px; - } - .HelpDialog--btn:hover { - text-decoration: none; + &__islands-container { + display: grid; + @media screen and (min-width: 1024px) { + grid-template-columns: 1fr 1fr; + } + grid-column-gap: 1.5rem; + grid-row-gap: 2rem; + } + + @media screen and (min-width: 1024px) { + &__island--tools { + grid-area: 1 / 1 / 2 / 2; + } + &__island--view { + grid-area: 2 / 1 / 3 / 2; + } + &__island--editor { + grid-area: 1 / 2 / 3 / 3; + } + } + + &__island { + h4 { + font-size: 1rem; + font-weight: bold; + margin: 0; + margin-bottom: 0.625rem; + } + + &-content { + border: 1px solid var(--dialog-border-color); + border-radius: var(--border-radius-lg); + } + } + + &__shortcut { + border-bottom: 1px solid var(--dialog-border-color); + padding: 0.375rem 0.75rem; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.875rem; + column-gap: 0.5rem; + + &:last-child { + border-bottom: none; + } + } + + &__key-container { + display: flex; + align-items: center; + column-gap: 0.25rem; + flex-shrink: 0; + } + + &__key { + display: flex; + box-sizing: border-box; + font-size: 0.625rem; + background-color: var(--color-primary-light); + border-radius: var(--border-radius-md); + padding: 0.5rem; + word-break: keep-all; + align-items: center; + font-family: inherit; + line-height: 1; + } } } diff --git a/src/components/HelpDialog.tsx b/src/components/HelpDialog.tsx index 34d24f483..96edf05fc 100644 --- a/src/components/HelpDialog.tsx +++ b/src/components/HelpDialog.tsx @@ -4,32 +4,36 @@ import { isDarwin, isWindows } from "../keys"; import { Dialog } from "./Dialog"; import { getShortcutKey } from "../utils"; import "./HelpDialog.scss"; +import { ExternalLinkIcon } from "./icons"; const Header = () => ( -
+ ); @@ -37,88 +41,61 @@ const Header = () => ( const Section = (props: { title: string; children: React.ReactNode }) => ( <>

{props.title}

- {props.children} +
{props.children}
); -const Columns = (props: { children: React.ReactNode }) => ( -
- {props.children} -
-); - -const Column = (props: { children: React.ReactNode }) => ( -
{props.children}
-); - const ShortcutIsland = (props: { caption: string; children: React.ReactNode; + className?: string; }) => ( -
-

{props.caption}

- {props.children} +
+

{props.caption}

+
{props.children}
); -const Shortcut = (props: { +function* intersperse(as: JSX.Element[][], delim: string | null) { + let first = true; + for (const x of as) { + if (!first) { + yield delim; + } + first = false; + yield x; + } +} + +const Shortcut = ({ + label, + shortcuts, + isOr = true, +}: { label: string; shortcuts: string[]; - isOr: boolean; + isOr?: boolean; }) => { + const splitShortcutKeys = shortcuts.map((shortcut) => { + const keys = shortcut.endsWith("++") + ? [...shortcut.slice(0, -2).split("+"), "+"] + : shortcut.split("+"); + + return keys.map((key) => {key}); + }); + return ( -
-
-
- {props.label} -
-
- {props.shortcuts.map((shortcut, index) => ( - - {shortcut} - {props.isOr && - index !== props.shortcuts.length - 1 && - t("helpDialog.or")} - - ))} -
+
+
{label}
+
+ {[...intersperse(splitShortcutKeys, isOr ? t("helpDialog.or") : null)]}
); }; -Shortcut.defaultProps = { - isOr: true, -}; - const ShortcutKey = (props: { children: React.ReactNode }) => ( - + ); export const HelpDialog = ({ onClose }: { onClose?: () => void }) => { @@ -137,286 +114,276 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => { >
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ")]} - /> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ")]} + /> +
diff --git a/src/components/HintViewer.scss b/src/components/HintViewer.scss index 2e3a15bff..fdbbd0fe6 100644 --- a/src/components/HintViewer.scss +++ b/src/components/HintViewer.scss @@ -14,20 +14,24 @@ $wide-viewport-width: 1000px; top: 100%; max-width: 100%; width: 100%; - margin-top: 6px; + margin-top: 0.5rem; text-align: center; - color: $oc-gray-6; - font-size: 0.8rem; + color: var(--color-gray-40); + font-size: 0.75rem; @include isMobile { position: static; - padding-right: 2em; + padding-right: 2rem; } > span { - padding: 0.2rem 0.4rem; - background-color: var(--overlay-bg-color); - border-radius: 4px; + padding: 0.25rem; + } + } + + &.theme--dark { + .HintViewer { + color: var(--color-gray-60); } } } diff --git a/src/components/IconPicker.scss b/src/components/IconPicker.scss index 5d0857f49..23ec7c36c 100644 --- a/src/components/IconPicker.scss +++ b/src/components/IconPicker.scss @@ -10,7 +10,8 @@ .picker { background: var(--popup-bg-color); border: 0 solid transparentize($oc-white, 0.75); - box-shadow: transparentize($oc-black, 0.75) 0 1px 4px; + // ˇˇ yeah, i dunno, open to suggestions here :D + box-shadow: rgb(0 0 0 / 25%) 2px 2px 4px 2px; border-radius: 4px; position: absolute; } @@ -46,7 +47,6 @@ margin: 0; width: 36px; height: 18px; - opacity: 0.6; pointer-events: none; } } diff --git a/src/components/IconPicker.tsx b/src/components/IconPicker.tsx index 9b6d7ea5c..30b8a97b1 100644 --- a/src/components/IconPicker.tsx +++ b/src/components/IconPicker.tsx @@ -4,6 +4,7 @@ import { Popover } from "./Popover"; import "./IconPicker.scss"; import { isArrowKey, KEYS } from "../keys"; import { getLanguage } from "../i18n"; +import clsx from "clsx"; function Picker({ options, @@ -102,7 +103,9 @@ function Picker({
{options.map((option, i) => (
); } diff --git a/src/components/ImageExportDialog.tsx b/src/components/ImageExportDialog.tsx index 8a8b7038f..2a1e05926 100644 --- a/src/components/ImageExportDialog.tsx +++ b/src/components/ImageExportDialog.tsx @@ -5,14 +5,12 @@ import { canvasToBlob } from "../data/blob"; import { NonDeletedExcalidrawElement } from "../element/types"; import { CanvasError } from "../errors"; import { t } from "../i18n"; -import { useDevice } from "./App"; import { getSelectedElements, isSomeElementSelected } from "../scene"; import { exportToCanvas } from "../scene/export"; import { AppState, BinaryFiles } from "../types"; import { Dialog } from "./Dialog"; -import { clipboard, exportImage } from "./icons"; +import { clipboard } from "./icons"; import Stack from "./Stack"; -import { ToolButton } from "./ToolButton"; import "./ExportDialog.scss"; import OpenColor from "open-color"; import { CheckboxItem } from "./CheckboxItem"; @@ -221,6 +219,7 @@ const ImageExportModal = ({ export const ImageExportDialog = ({ elements, appState, + setAppState, files, exportPadding = DEFAULT_EXPORT_PADDING, actionManager, @@ -229,6 +228,7 @@ export const ImageExportDialog = ({ onExportToClipboard, }: { appState: AppState; + setAppState: React.Component["setState"]; elements: readonly NonDeletedExcalidrawElement[]; files: BinaryFiles; exportPadding?: number; @@ -237,26 +237,13 @@ export const ImageExportDialog = ({ onExportToSvg: ExportCB; onExportToClipboard: ExportCB; }) => { - const [modalIsShown, setModalIsShown] = useState(false); - const handleClose = React.useCallback(() => { - setModalIsShown(false); - }, []); + setAppState({ openDialog: null }); + }, [setAppState]); return ( <> - { - setModalIsShown(true); - }} - data-testid="image-export-button" - icon={exportImage} - type="button" - aria-label={t("buttons.exportImage")} - showAriaLabel={useDevice().isMobile} - title={t("buttons.exportImage")} - /> - {modalIsShown && ( + {appState.openDialog === "imageExport" && ( -
{link}
+
{LinkIcon}

{t("exportDialog.link_title")}

{t("exportDialog.link_details")}
- { setModalIsShown(true); }} - data-testid="json-export-button" - icon={exportFile} - type="button" - aria-label={t("buttons.export")} - showAriaLabel={useDevice().isMobile} - title={t("buttons.export")} + dataTestId="json-export-button" /> {modalIsShown && ( diff --git a/src/components/LayerUI.scss b/src/components/LayerUI.scss index 192233904..c1d3eb89e 100644 --- a/src/components/LayerUI.scss +++ b/src/components/LayerUI.scss @@ -16,8 +16,10 @@ height: 100%; pointer-events: none; z-index: var(--zIndex-layerUI); + &__top-right { display: flex; + gap: 0.75rem; } &__footer { @@ -48,13 +50,6 @@ transform: translate(-999px, 0); } - :root[dir="ltr"] &.layer-ui__wrapper__footer-left--transition-left { - transform: translate(-76px, 0); - } - :root[dir="rtl"] &.layer-ui__wrapper__footer-left--transition-left { - transform: translate(76px, 0); - } - &.layer-ui__wrapper__footer-left--transition-bottom { transform: translate(0, 92px); } @@ -97,14 +92,9 @@ pointer-events: all; } - .layer-ui__wrapper__footer-left { - margin-bottom: 0.2em; - } - .layer-ui__wrapper__footer-right { margin-top: auto; margin-bottom: auto; - margin-inline-end: 1em; } } } diff --git a/src/components/LayerUI.tsx b/src/components/LayerUI.tsx index b5c94154c..a447ed2ab 100644 --- a/src/components/LayerUI.tsx +++ b/src/components/LayerUI.tsx @@ -11,7 +11,6 @@ import { ExportType } from "../scene/types"; import { AppProps, AppState, ExcalidrawProps, BinaryFiles } from "../types"; import { muteFSAbortError } from "../utils"; import { SelectedShapeActions, ShapesSwitcher } from "./Actions"; -import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle"; import CollabButton from "./CollabButton"; import { ErrorDialog } from "./ErrorDialog"; import { ExportCB, ImageExportDialog } from "./ImageExportDialog"; @@ -36,13 +35,26 @@ import "./LayerUI.scss"; import "./Toolbar.scss"; import { PenModeButton } from "./PenModeButton"; import { trackEvent } from "../analytics"; -import { useDevice } from "../components/App"; +import { isMenuOpenAtom, useDevice } from "../components/App"; import { Stats } from "./Stats"; import { actionToggleStats } from "../actions/actionToggleStats"; import Footer from "./Footer"; +import { + ExportImageIcon, + HamburgerMenuIcon, + WelcomeScreenMenuArrow, + WelcomeScreenTopToolbarArrow, +} from "./icons"; +import { MenuLinks, Separator } from "./MenuUtils"; +import { useOutsideClickHook } from "../hooks/useOutsideClick"; +import WelcomeScreen from "./WelcomeScreen"; import { hostSidebarCountersAtom } from "./Sidebar/Sidebar"; import { jotaiScope } from "../jotai"; import { useAtom } from "jotai"; +import { LanguageList } from "../excalidraw-app/components/LanguageList"; +import WelcomeScreenDecor from "./WelcomeScreenDecor"; +import { getShortcutFromShortcutName } from "../actions/shortcuts"; +import MenuItem from "./MenuItem"; interface LayerUIProps { actionManager: ActionManager; @@ -68,6 +80,7 @@ interface LayerUIProps { library: Library; id: string; onImageAction: (data: { insertOnCanvasDirectly: boolean }) => void; + renderWelcomeScreen: boolean; } const LayerUI = ({ actionManager, @@ -92,6 +105,7 @@ const LayerUI = ({ library, id, onImageAction, + renderWelcomeScreen, }: LayerUIProps) => { const device = useDevice(); @@ -151,6 +165,7 @@ const LayerUI = ({ { - return
; - }; - - const renderViewModeCanvasActions = () => { - return ( -
- {/* the zIndex ensures this menu has higher stacking order, - see https://github.com/excalidraw/excalidraw/pull/1445 */} - - - - {renderJSONExportDialog()} - {renderImageExportDialog()} - - - -
- ); - }; + const [isMenuOpen, setIsMenuOpen] = useAtom(isMenuOpenAtom); + const menuRef = useOutsideClickHook(() => setIsMenuOpen(false)); const renderCanvasActions = () => ( -
- {/* the zIndex ensures this menu has higher stacking order, +
+ +
+ {WelcomeScreenMenuArrow} +
{t("welcomeScreen.menuHints")}
+
+
+ + + + {isMenuOpen && ( +
+
+ {/* the zIndex ensures this menu has higher stacking order, see https://github.com/excalidraw/excalidraw/pull/1445 */} - - - - {actionManager.renderAction("clearCanvas")} - - {actionManager.renderAction("loadScene")} - {renderJSONExportDialog()} - {renderImageExportDialog()} - - {onCollabButtonClick && ( - + {actionManager.renderAction("loadScene")} + {/* // TODO barnabasmolnar/editor-redesign */} + {/* is this fine here? */} + {appState.fileHandle && + actionManager.renderAction("saveToActiveFile")} + {renderJSONExportDialog()} + setAppState({ openDialog: "imageExport" })} + shortcut={getShortcutFromShortcutName("imageExport")} /> - )} - - - {appState.fileHandle && ( - <>{actionManager.renderAction("saveToActiveFile")} - )} - - -
+ {onCollabButtonClick && ( + + )} + {actionManager.renderAction("toggleShortcuts", undefined, true)} + {actionManager.renderAction("clearCanvas")} + + + +
+
{actionManager.renderAction("toggleTheme")}
+
+ +
+
+
+ {t("labels.canvasBackground")} +
+
+ {actionManager.renderAction("changeViewBackgroundColor")} +
+
+
+ +
+
+ )} +
); const renderSelectedShapeActions = () => (
@@ -232,10 +276,9 @@ const LayerUI = ({ className={CLASSES.SHAPE_ACTIONS_MENU} padding={2} style={{ - // we want to make sure this doesn't overflow so subtracting 200 - // which is approximately height of zoom footer and top left menu items with some buffer - // if active file name is displayed, subtracting 248 to account for its height - maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`, + // we want to make sure this doesn't overflow so subtracting the + // approximate height of hamburgerMenu + footer + maxHeight: `${appState.height - 166}px`, }} > + {renderWelcomeScreen && !appState.isLoading && ( + + )}
- {appState.viewModeEnabled - ? renderViewModeCanvasActions() - : renderCanvasActions()} + {renderCanvasActions()} {shouldRenderSelectedShapeActions && renderSelectedShapeActions()} {!appState.viewModeEnabled && ( -
+
{(heading: React.ReactNode) => ( - - + - - onLockToggle()} - title={t("toolBar.lock")} - /> - +
+ {t("welcomeScreen.toolbarHints")} +
+ {WelcomeScreenTopToolbarArrow} +
+ + + + - - {heading} - - + { - onImageAction({ - insertOnCanvasDirectly: pointerType !== "mouse", - }); - }} + elements={elements} + isMobile={device.isMobile} + device={device} /> - - - - - + {heading} + + + onLockToggle()} + title={t("toolBar.lock")} + /> +
+ + { + onImageAction({ + insertOnCanvasDirectly: pointerType !== "mouse", + }); + }} + /> + {/* {actionManager.renderAction("eraser", { + // size: "small", + })} */} +
+ + + +
)} )} @@ -338,7 +396,16 @@ const LayerUI = ({ collaborators={appState.collaborators} actionManager={actionManager} /> + {onCollabButtonClick && ( + + )} {renderTopRightUI?.(device.isMobile, appState)} +
@@ -371,13 +438,14 @@ const LayerUI = ({ onClose={() => setAppState({ errorMessage: null })} /> )} - {appState.showHelpDialog && ( + {appState.openDialog === "help" && ( { - setAppState({ showHelpDialog: false }); + setAppState({ openDialog: null }); }} /> )} + {renderImageExportDialog()} {appState.pasteDialog.shown && ( {renderFixedSideContainer()}