From 84cbd7dc6d0e16cd4d646beb5dee435b51953e3c Mon Sep 17 00:00:00 2001 From: Roman Pominov Date: Thu, 6 Oct 2022 13:51:32 +0400 Subject: [PATCH 01/15] remove node 14 support --- .github/workflows/main.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index efb144c5ed..f37e4cb4bf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - node: ["14.x", "16.x"] + node: ["16.x"] os: [ubuntu-latest] steps: - name: Checkout repo diff --git a/package.json b/package.json index 8f2f00e5da..6183c444a6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "engines": { "npm": ">=7.0.0", - "node": ">=14 <=16" + "node": "16" }, "dependencies": {}, "packageManager": "yarn@1.22.19", From 5f5cfae96b90cbb3e83bc699694d43fc82a84c94 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 18:12:26 +0200 Subject: [PATCH 02/15] use new combobox in props --- apps/designer/app/auth/login.tsx | 3 - .../features/props-panel/props-panel.tsx | 118 ++++++++++++++---- .../design-system/src/components/combobox.tsx | 10 +- 3 files changed, 102 insertions(+), 29 deletions(-) diff --git a/apps/designer/app/auth/login.tsx b/apps/designer/app/auth/login.tsx index 8172ed3d86..9e2794fc14 100644 --- a/apps/designer/app/auth/login.tsx +++ b/apps/designer/app/auth/login.tsx @@ -1,9 +1,7 @@ import { LinksFunction, MetaFunction } from "@remix-run/node"; import { Form, useLoaderData } from "@remix-run/react"; import { useState } from "react"; - import { - Box, Card, Flex, Heading, @@ -12,7 +10,6 @@ import { TextField, } from "@webstudio-is/design-system"; import interStyles from "~/shared/font-faces/inter.css"; - import { GithubIcon, CommitIcon, GoogleIcon } from "@webstudio-is/icons"; import { LoginButton } from "./components/login-button"; import loginStyles from "./login.css"; diff --git a/apps/designer/app/designer/features/props-panel/props-panel.tsx b/apps/designer/app/designer/features/props-panel/props-panel.tsx index 74a599f36b..e698e2a6f0 100644 --- a/apps/designer/app/designer/features/props-panel/props-panel.tsx +++ b/apps/designer/app/designer/features/props-panel/props-panel.tsx @@ -10,19 +10,99 @@ import type { SelectedInstanceData } from "~/shared/canvas-components"; import { Box, Button, - Combobox, - ComboboxTextField, - ComboboxPopperContent, Grid, + TextField, Tooltip, + useCombobox, + ComboboxPrimitive, + ComboboxContent, + ComboboxAnchor, + ComboboxListbox, + ComboboxListboxItem, + IconButton, } from "@webstudio-is/design-system"; import { PlusIcon, TrashIcon, ExclamationTriangleIcon, + ChevronDownIcon, } from "@webstudio-is/icons"; import { handleChangePropType, usePropsLogic } from "./use-props-logic"; +type ComboboxProps = { + isReadonly: boolean; + isInvalid: boolean; + items: Array; + value: string; + onItemSelect: (value: string | null) => void; + onSubmit: (value: string) => void; +}; + +export const Combobox = ({ + isReadonly, + isInvalid, + items: itemsProp, + value, + onItemSelect, + onSubmit, +}: ComboboxProps) => { + const { + items, + getInputProps, + getComboboxProps, + getToggleButtonProps, + getMenuProps, + getItemProps, + isOpen, + } = useCombobox({ + items: itemsProp, + value, + itemToString: (item) => item ?? "", + onItemSelect, + }); + + return ( + + + + + + + } + onKeyPress={(event) => { + if (event.key === "Enter") { + onSubmit(event.currentTarget.value); + } + }} + /> + + + + {isOpen && + items.map((item, index) => { + return ( + + {item} + + ); + })} + + + + + ); +}; + type PropertyProps = UserProp & { component: Instance["component"]; onChange: handleChangePropType; @@ -33,14 +113,14 @@ const Property = ({ id, prop, value, - required, + required = false, component, onChange, onDelete, }: PropertyProps) => { const meta = componentsMeta[component]; const argType = meta.argTypes?.[prop as keyof typeof meta.argTypes]; - const isInvalidProp = + const isInvalid = prop != null && prop.length > 0 && typeof argType === "undefined" && @@ -56,30 +136,20 @@ const Property = ({ css={{ gridTemplateColumns: "1fr 1fr auto", alignItems: "center" }} > item ?? ""} - onItemSelect={(value) => { + onItemSelect={(value: PropertyProps["value"] | null) => { + if (value !== null) { + onChange(id, "prop", value); + } + }} + onSubmit={(value) => { onChange(id, "prop", value); }} - renderTextField={({ inputProps, toggleProps }) => ( - - )} - renderPopperContent={(props) => ( - - )} + isInvalid={isInvalid} + isReadonly={required} /> - - {isInvalidProp ? ( + {isInvalid ? ( diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index ae936d67d5..95123404b8 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -61,9 +61,15 @@ export const ListboxItemBase: ForwardRefRenderFunction< ); }; +export const ComboboxListbox = Listbox; + export const ComboboxListboxItem = forwardRef(ListboxItemBase); -export const ComboboxPopperContent = PopperContent; +export const ComboboxPrimitive = Popper; + +export const ComboboxContent = PopperContent; + +export const ComboboxAnchor = PopperAnchor; type useComboboxProps = { items: ReadonlyArray; @@ -84,7 +90,7 @@ export function useCombobox({ itemToString, onItemSelect, onItemHighlight, - stateReducer, + stateReducer = (state, { changes }) => changes, }: useComboboxProps) { const [filteredItems, setFilteredItems] = useState(items); const cachedItems = useRef(items); From 87737a4b83388a37c0fad1e0696e26a7ae40aaa6 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:35:09 +0200 Subject: [PATCH 03/15] remove unnecessary reducer --- packages/design-system/src/components/combobox.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index 95123404b8..80e4530a9b 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -169,14 +169,6 @@ export function Combobox({ onItemSelect, onItemHighlight, }: ComboboxProps) { - const stateReducer = useCallback((state, actionAndChanges) => { - const { type, changes } = actionAndChanges; - switch (type) { - default: - return changes; // otherwise business as usual. - } - }, []); - const { items: foundItems, getInputProps, @@ -191,7 +183,6 @@ export function Combobox({ itemToString, onItemSelect, onItemHighlight, - stateReducer, }); return ( From a4c303e78d9f1675568d040f48d77d00e1f9a3ea Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:38:06 +0200 Subject: [PATCH 04/15] use function expressions --- packages/design-system/src/components/combobox.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index 80e4530a9b..fa02112a64 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -83,15 +83,14 @@ type useComboboxProps = { ) => Partial>; }; -// eslint-disable-next-line func-style -export function useCombobox({ +export const useCombobox = ({ items, value, itemToString, onItemSelect, onItemHighlight, stateReducer = (state, { changes }) => changes, -}: useComboboxProps) { +}: useComboboxProps) => { const [filteredItems, setFilteredItems] = useState(items); const cachedItems = useRef(items); @@ -151,7 +150,7 @@ export function useCombobox({ items: filteredItems, // Return filtered items getItemProps: enhancedGetItemProps, }; -} +}; type ComboboxProps = useComboboxProps & { name: string; @@ -159,8 +158,7 @@ type ComboboxProps = useComboboxProps & { placeholder?: string; }; -// eslint-disable-next-line func-style -export function Combobox({ +export const Combobox = ({ items, value = null, name, @@ -168,7 +166,7 @@ export function Combobox({ itemToString, onItemSelect, onItemHighlight, -}: ComboboxProps) { +}: ComboboxProps) => { const { items: foundItems, getInputProps, @@ -219,6 +217,6 @@ export function Combobox({ ); -} +}; Combobox.displayName = "Combobox"; From c984d00603d07fca9febe22ad52bba5224fa36ca Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:42:40 +0200 Subject: [PATCH 05/15] keep original naming inside the mapped name for clarity --- .../features/props-panel/props-panel.tsx | 18 +++++++++--------- .../design-system/src/components/combobox.tsx | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/designer/app/designer/features/props-panel/props-panel.tsx b/apps/designer/app/designer/features/props-panel/props-panel.tsx index e698e2a6f0..888e8833d7 100644 --- a/apps/designer/app/designer/features/props-panel/props-panel.tsx +++ b/apps/designer/app/designer/features/props-panel/props-panel.tsx @@ -14,9 +14,9 @@ import { TextField, Tooltip, useCombobox, - ComboboxPrimitive, - ComboboxContent, - ComboboxAnchor, + ComboboxPopper, + ComboboxPopperContent, + ComboboxPopperAnchor, ComboboxListbox, ComboboxListboxItem, IconButton, @@ -62,9 +62,9 @@ export const Combobox = ({ }); return ( - + - + - - + + {isOpen && items.map((item, index) => { @@ -97,9 +97,9 @@ export const Combobox = ({ ); })} - + - + ); }; diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index fa02112a64..2851a86ce0 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -65,11 +65,11 @@ export const ComboboxListbox = Listbox; export const ComboboxListboxItem = forwardRef(ListboxItemBase); -export const ComboboxPrimitive = Popper; +export const ComboboxPopper = Popper; -export const ComboboxContent = PopperContent; +export const ComboboxPopperContent = PopperContent; -export const ComboboxAnchor = PopperAnchor; +export const ComboboxPopperAnchor = PopperAnchor; type useComboboxProps = { items: ReadonlyArray; From 1063cb743ef71fcd756edb223bf310b1e44648c2 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:47:13 +0200 Subject: [PATCH 06/15] move onKeyPress into props getter to make sure we don't override a handler --- .../designer/features/props-panel/props-panel.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/designer/app/designer/features/props-panel/props-panel.tsx b/apps/designer/app/designer/features/props-panel/props-panel.tsx index 888e8833d7..2b994f6d8d 100644 --- a/apps/designer/app/designer/features/props-panel/props-panel.tsx +++ b/apps/designer/app/designer/features/props-panel/props-panel.tsx @@ -66,7 +66,13 @@ export const Combobox = ({ { + if (event.key === "Enter") { + onSubmit(event.currentTarget.value); + } + }, + })} name="prop" placeholder="Property" readOnly={isReadonly} @@ -76,11 +82,6 @@ export const Combobox = ({ } - onKeyPress={(event) => { - if (event.key === "Enter") { - onSubmit(event.currentTarget.value); - } - }} /> From 311065fd637c0ede8e8640d2271325dc9832d2f3 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:47:26 +0200 Subject: [PATCH 07/15] make linter and jsx parser happy at the same time --- packages/design-system/src/components/combobox.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index 2851a86ce0..e4fdd9b3f6 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -83,7 +83,7 @@ type useComboboxProps = { ) => Partial>; }; -export const useCombobox = ({ +export const useCombobox = ({ items, value, itemToString, @@ -158,7 +158,7 @@ type ComboboxProps = useComboboxProps & { placeholder?: string; }; -export const Combobox = ({ +export const Combobox = ({ items, value = null, name, From fe164432e8868a91b00ed200b3f873680e832d95 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 21:48:38 +0200 Subject: [PATCH 08/15] no need to export --- apps/designer/app/designer/features/props-panel/props-panel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/designer/app/designer/features/props-panel/props-panel.tsx b/apps/designer/app/designer/features/props-panel/props-panel.tsx index 2b994f6d8d..084a501d25 100644 --- a/apps/designer/app/designer/features/props-panel/props-panel.tsx +++ b/apps/designer/app/designer/features/props-panel/props-panel.tsx @@ -38,7 +38,7 @@ type ComboboxProps = { onSubmit: (value: string) => void; }; -export const Combobox = ({ +const Combobox = ({ isReadonly, isInvalid, items: itemsProp, From 28394a16ee0bb10c2ac7d1447c7699667fde8d39 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 23:01:43 +0200 Subject: [PATCH 09/15] update lost pixel baseline --- .../components-combobox--custom-input.png | Bin 6430 -> 0 bytes .../baseline/components-combobox--simple.png | Bin 6430 -> 7001 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .lostpixel/baseline/components-combobox--custom-input.png diff --git a/.lostpixel/baseline/components-combobox--custom-input.png b/.lostpixel/baseline/components-combobox--custom-input.png deleted file mode 100644 index 572fc3220a45efea3016e4992e92fdaa555b7876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6430 zcmeHL`%@EF6yBgUr~}$sQRERiYC9b$SOSTWN7U-1v>kBN5fmh%5*`|Y6JrP=glY$> z3^-clApyoZ)(#XXKEf*`lnM-zWD$^H5=d0Y7J(!fAmrU$^iSw--Jia@_nf_F?|1HZ z?>&3cFd*Cntd;~Y$2Hn@d0P@CLH7KaCLPsyM8hbWtQrBO7q?~`-TkZIJbxaV{w#)h+4)hy7# zoc)>t%Bv~TCAz9?;#1@;(V-||8wu;_E3oTOh*6)p7t(Df4?J5 zanlEx1wa!rR0Iucr13a4v5Je!NuLH<7a{;6fk1<93}~*oBTkX}pWz6-y}d)sGS7m< z#A4VvF?Ty+>Utw=XaYw^4>Jr^-c$^d(}J)MeASpS+06;kBBwos2G&z;Nem?OfcVWH zVL<+5ouo?Pc|$# zA-Rp5-Cq~H!m?)-e!^b%l5LX3<(${Zh@dwkf8aZL$4!`NA`!YX(^#u=&5+Y*G_!u( zMC5Z{h)imBo{DjutZ(H^1tv#Rt=Cnx7aiEx-LD3%^cG&eIM+PR>`yHR?`f8M^T7GO zrq`dW%;8U~Hnm({nO2S8ax&*H(cfsN)y588P`+E5wreyKPUd3yU~L<5!Ph65s$OlSP!ZR>~WSk56+f&u7#?S@bw)A zCu#mEF7Lz)*IW}y9ACKla%?Q2XB1)SRI1n;14^{r9Ec+c=U;p|6>KMdi{5(T)&2-ejQKhmw~1a00eN&(*yqx29k6<4kU9 z#KG&q?x2tfupTP-?Mq5aKVDuj9Or5#nP#aKrhFS)cQ2mGYYkaR)G^&iCs&8BRTE*A zHQI{mNbfD-VX3Kt}Qd#G94$ozlE>OXjma<{c}GT4-zcY8K{}P z&%|!_qe4PU&GS7-T8vVM1lv_oQqra`oPn6smFh{E3i*A=uMBv<36Q^XxbH%SG}?CpZZPhxcyCE@3qZPmT3dj? z#?MhBN&>nPP&vSB03`t>0X-c606ijM9iSwjB%n7&^xBNp4rq-8?}R7`C<*8<1GGj8 gfMxJMC=^}mqgyLV_HEmdfy_7NVC;d${iiPf3!HACIRF3v diff --git a/.lostpixel/baseline/components-combobox--simple.png b/.lostpixel/baseline/components-combobox--simple.png index 572fc3220a45efea3016e4992e92fdaa555b7876..9042b09cfedfd522797ea75426e03b3647ba4d3c 100644 GIT binary patch literal 7001 zcmeHLe^k=v8voi_b}MroyH+Z>=Bl%^YuXfBqSB_zl~YSW5(PQ6n+E=%FC=r`vOq*rbb^58F=wV!2q+3PO;He012s^%eCz&m|J?3&?mztXyw7>x=Y5{< z=Y5{f^M2o=V{y@L8@x6E0N{4y%cukZc-Jvp^K|_>hmho}k{rT?m=OIr&@kXL4FKLA zN1{GM6&hk={AAeUl&yuF`&`j4RpL%Xg(0$4|}pC)bHjTGp8 zk9Qwe7=B_OMK)*n@rrIAE=Ti@ve&h5Z`_4D6}YY(cWQeBao3YTkI8TNjT?FMoT~k; z5j0_vb|FloF=lEg1Fu@3jQ-Ouj#z+lCEVZ!4uEPOm-j&V-CyXSc<(Dco6G2PX`G+}aj~(; zT7fxc3+SBg?HTMjI5>#tBceCco16RbIRrwUA86d^1~C|*u#x8~E9-G0{S6E^{sTjV z8OYU{rY#I#d!$>*Kh<(l^x*)-#(-J2(7Jh4PI~iQ=PgldUex$S>#vF_A{$i_V-B#} zd`VMt1mD~lrHsvP!rA;eM9Y)m6xGR9?EuE?%9v%F35p9d#DQw@3An8n-rs8hV>t_Z zk_Y&Bi_unhQ9}Go?!Q{$Ej-&?Zx4IeBHWPk2{ardNK+Q{Y14f82n+_p%N%}QmLFG8 zkd|*v(NtBK-v%^QWi9Wws4AO6^G`P>anZ?0B;!C# zthPEWCfzrJQol~ZdaXoG4=k8V333xUs%cI=r}p*BVZkEocnG{aXv6Mi%Gi)({Bh)MNdiL`fd zIq~t~CLUK#6fY|*y%JmdW=Nj!hB0-`&&CN9e&WXo^W3Erg8A_TY3^w`nF)Js)hLRs z?t|l+QEZtpw`Fk_c1$Xj^6Z@-%cN4wh_4b|7QS%SAKP(P&K1{E1Ool9u5IeAnvkrH zI#ClTCQJQo4&)$ZTr}nW}dcFUrsY3X+o|;7|55P#VhDDOt+g9L@>RilvF% zAQ*q7hh?u|mb>Jxj<{dEBJ_B~%QsRNJB;Ljnc+m(&D@37S*^!Ms5H$&CBI-ioMalB zSFVo5K!d{&u+|**#%=p#LzPWlVhZmOH*WCZQtIk~u&@NFG>Dh3;j&ry;m+qbu2t1b zFKKlb`bB()O-gv(hy8mGEIEpJbnM^%OVsy`l|F_)>eQaSDnd-zb%@BV=s2S`Lmb@4yYV~H1y}Ijl zw!7-kpsA0<;1P}{F=oYFnr$>*f3L3k9*bq9X{X8E;@Bn4(iV?Nd6jEt`Lk#I;IIU5 z@ycx$1*Y=1jBR7F@VM#Ap?Nxv`zCsRelh;#!UUMqmWL13`f4t^y@N(w=vOwYgLxZ{xha_EY(DU`Aj#e@~q zQ1}8u#@9cW?t~pLdHsrDW>v~Yq=^!vI;BpsNj^34F%RFp;B`WowwFe{kENM;USZ_c z(~N$!DD&242#vEZwFB`^jFn(pX{${mlgW@U6P_8Ge`n90y@a`$*ZfocI$d^fgK_>P zqfR$9?;*P;zU3K!MnsoFxW!is@whVu=0y{tw&~U)B)2_|xwF1$ex9O#g5zMDIzY7| zr;4>Z##3?s;%%cK0z3r-(%*agUAWD*q!XW?tryz`Vh+#2LZ&0e{b7`Li`A3YQr0?Y zkEj{<6w<~@9LQ$HFhENn`~29;d;Ih+ep$p^QBp4^bI0?o{FiwK`10Ls{Wa=c-|0|ge*?|xC9io(YwvB@Ca!0<1 Li)#2B_uan%oBEnk literal 6430 zcmeHL`%@EF6yBgUr~}$sQRERiYC9b$SOSTWN7U-1v>kBN5fmh%5*`|Y6JrP=glY$> z3^-clApyoZ)(#XXKEf*`lnM-zWD$^H5=d0Y7J(!fAmrU$^iSw--Jia@_nf_F?|1HZ z?>&3cFd*Cntd;~Y$2Hn@d0P@CLH7KaCLPsyM8hbWtQrBO7q?~`-TkZIJbxaV{w#)h+4)hy7# zoc)>t%Bv~TCAz9?;#1@;(V-||8wu;_E3oTOh*6)p7t(Df4?J5 zanlEx1wa!rR0Iucr13a4v5Je!NuLH<7a{;6fk1<93}~*oBTkX}pWz6-y}d)sGS7m< z#A4VvF?Ty+>Utw=XaYw^4>Jr^-c$^d(}J)MeASpS+06;kBBwos2G&z;Nem?OfcVWH zVL<+5ouo?Pc|$# zA-Rp5-Cq~H!m?)-e!^b%l5LX3<(${Zh@dwkf8aZL$4!`NA`!YX(^#u=&5+Y*G_!u( zMC5Z{h)imBo{DjutZ(H^1tv#Rt=Cnx7aiEx-LD3%^cG&eIM+PR>`yHR?`f8M^T7GO zrq`dW%;8U~Hnm({nO2S8ax&*H(cfsN)y588P`+E5wreyKPUd3yU~L<5!Ph65s$OlSP!ZR>~WSk56+f&u7#?S@bw)A zCu#mEF7Lz)*IW}y9ACKla%?Q2XB1)SRI1n;14^{r9Ec+c=U;p|6>KMdi{5(T)&2-ejQKhmw~1a00eN&(*yqx29k6<4kU9 z#KG&q?x2tfupTP-?Mq5aKVDuj9Or5#nP#aKrhFS)cQ2mGYYkaR)G^&iCs&8BRTE*A zHQI{mNbfD-VX3Kt}Qd#G94$ozlE>OXjma<{c}GT4-zcY8K{}P z&%|!_qe4PU&GS7-T8vVM1lv_oQqra`oPn6smFh{E3i*A=uMBv<36Q^XxbH%SG}?CpZZPhxcyCE@3qZPmT3dj? z#?MhBN&>nPP&vSB03`t>0X-c606ijM9iSwjB%n7&^xBNp4rq-8?}R7`C<*8<1GGj8 gfMxJMC=^}mqgyLV_HEmdfy_7NVC;d${iiPf3!HACIRF3v From b663d8a4bdd492b625da091b2abb22eb2b5b78e7 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Thu, 6 Oct 2022 23:50:28 +0200 Subject: [PATCH 10/15] extract filtering logic into useFilter hook --- .../src/components/combobox.stories.tsx | 6 +- .../design-system/src/components/combobox.tsx | 68 +++++++++++++------ 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/packages/design-system/src/components/combobox.stories.tsx b/packages/design-system/src/components/combobox.stories.tsx index 5c1abba546..622ddea45a 100644 --- a/packages/design-system/src/components/combobox.stories.tsx +++ b/packages/design-system/src/components/combobox.stories.tsx @@ -11,11 +11,7 @@ export default { }; export const Simple: ComponentStory = () => { - const items = [ - { label: "Apple" }, - { label: "Banana" }, - { label: "Orange" }, - ] as const; + const items = [{ label: "Apple" }, { label: "Banana" }, { label: "Orange" }]; const [value, setValue] = React.useState(null); return ( ({ + items, + itemToString, +}: { + items: Array; + itemToString: (item: Item | null) => string; +}) => { + const [filteredItems, setFilteredItems] = useState>(items); + const cachedItems = useRef(items); + + useEffect(() => { + cachedItems.current = items; + }, [items]); + + const filter = useCallback( + (search?: string) => { + const foundItems: Array = matchSorter(items, search ?? "", { + keys: [(item) => itemToString(item)], + }); + setFilteredItems(foundItems); + }, + [itemToString, items] + ); + + const reset = useCallback(() => { + setFilteredItems(cachedItems.current); + }, []); + + return { + filteredItems, + filter, + reset, + }; +}; + type useComboboxProps = { - items: ReadonlyArray; + items: Array; itemToString: (item: Item | null) => string; value: Item | null; // This is to prevent: "downshift: A component has changed the uncontrolled prop "selectedItem" to be controlled." onItemSelect?: (value: Item | null) => void; @@ -91,23 +126,18 @@ export const useCombobox = ({ onItemHighlight, stateReducer = (state, { changes }) => changes, }: useComboboxProps) => { - const [filteredItems, setFilteredItems] = useState(items); - const cachedItems = useRef(items); + const { filteredItems, filter, reset } = useFilter({ + items, + itemToString, + }); const downshiftProps = useDownshiftCombobox({ - items: filteredItems as Item[], - selectedItem: value, // Avoid downshift warning about switching controlled mode + items: filteredItems, + selectedItem: value, // Prevent downshift warning about switching controlled mode stateReducer, itemToString, onInputValueChange({ inputValue }) { - const foundItems: ReadonlyArray = matchSorter( - items, - inputValue ?? "", - { - keys: [(item) => itemToString(item)], - } - ); - setFilteredItems(foundItems); + filter(inputValue); }, onSelectedItemChange({ selectedItem }) { onItemSelect?.(selectedItem ?? null); @@ -123,14 +153,10 @@ export const useCombobox = ({ downshiftProps; useEffect(() => { - cachedItems.current = items; - }, [items]); - - useEffect(() => { - if (!isOpen) { - setFilteredItems(cachedItems.current); + if (isOpen === false) { + reset(); } - }, [isOpen]); + }, [isOpen, reset]); const enhancedGetItemProps = useCallback( (options) => { @@ -147,7 +173,7 @@ export const useCombobox = ({ return { ...downshiftProps, - items: filteredItems, // Return filtered items + items: filteredItems, getItemProps: enhancedGetItemProps, }; }; From 9325b7082d6418296e9cd21ee3f1a70af5d2d27b Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Sat, 8 Oct 2022 09:32:51 +0200 Subject: [PATCH 11/15] reset > resetFilter --- packages/design-system/src/components/combobox.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/design-system/src/components/combobox.tsx b/packages/design-system/src/components/combobox.tsx index 862bae4fbc..e2916240f4 100644 --- a/packages/design-system/src/components/combobox.tsx +++ b/packages/design-system/src/components/combobox.tsx @@ -95,14 +95,14 @@ const useFilter = ({ [itemToString, items] ); - const reset = useCallback(() => { + const resetFilter = useCallback(() => { setFilteredItems(cachedItems.current); }, []); return { filteredItems, filter, - reset, + resetFilter, }; }; @@ -126,7 +126,7 @@ export const useCombobox = ({ onItemHighlight, stateReducer = (state, { changes }) => changes, }: useComboboxProps) => { - const { filteredItems, filter, reset } = useFilter({ + const { filteredItems, filter, resetFilter } = useFilter({ items, itemToString, }); @@ -154,9 +154,9 @@ export const useCombobox = ({ useEffect(() => { if (isOpen === false) { - reset(); + resetFilter(); } - }, [isOpen, reset]); + }, [isOpen, resetFilter]); const enhancedGetItemProps = useCallback( (options) => { From 1ff68392396048b0a9d73f93c425130dd577c962 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Sat, 8 Oct 2022 16:36:59 +0200 Subject: [PATCH 12/15] fix $untitled font family --- packages/design-system/src/components/button.tsx | 2 +- packages/design-system/src/components/menu.tsx | 2 +- packages/design-system/src/components/text-field.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/design-system/src/components/button.tsx b/packages/design-system/src/components/button.tsx index eb0394f82d..edee5f240b 100644 --- a/packages/design-system/src/components/button.tsx +++ b/packages/design-system/src/components/button.tsx @@ -25,7 +25,7 @@ export const Button = styled("button", { // Custom height: "$5", px: "$2", - fontFamily: "$untitled", + fontFamily: "$sans", fontSize: "$2", fontWeight: 500, fontVariantNumeric: "tabular-nums", diff --git a/packages/design-system/src/components/menu.tsx b/packages/design-system/src/components/menu.tsx index cd0a2eea91..0019f338ad 100644 --- a/packages/design-system/src/components/menu.tsx +++ b/packages/design-system/src/components/menu.tsx @@ -10,7 +10,7 @@ export const baseItemCss = css({ display: "flex", alignItems: "center", justifyContent: "space-between", - fontFamily: "$untitled", + fontFamily: "$sans", fontSize: "$1", fontVariantNumeric: "tabular-nums", lineHeight: "1", diff --git a/packages/design-system/src/components/text-field.tsx b/packages/design-system/src/components/text-field.tsx index c6e79b1ae8..aadbcba47f 100644 --- a/packages/design-system/src/components/text-field.tsx +++ b/packages/design-system/src/components/text-field.tsx @@ -43,7 +43,7 @@ const InputBase = styled("input", { }, "&:-webkit-autofill::first-line": { - fontFamily: "$untitled", + fontFamily: "$sans", color: "$hiContrast", }, From e777b735f3cdc649a7bcaa33449d658a299d4599 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Sat, 8 Oct 2022 18:28:28 +0200 Subject: [PATCH 13/15] apply figma design to text-field, remove size variant --- .../src/components/text-field.stories.tsx | 32 +++----------- .../src/components/text-field.tsx | 44 +++++++++---------- 2 files changed, 27 insertions(+), 49 deletions(-) diff --git a/packages/design-system/src/components/text-field.stories.tsx b/packages/design-system/src/components/text-field.stories.tsx index 28b2bef61e..f49a1c0adb 100644 --- a/packages/design-system/src/components/text-field.stories.tsx +++ b/packages/design-system/src/components/text-field.stories.tsx @@ -2,7 +2,7 @@ import { expect } from "@storybook/jest"; import { userEvent, waitFor, within } from "@storybook/testing-library"; import React from "react"; import { ComponentStory } from "@storybook/react"; -import { BrushIcon, ChevronDownIcon } from "@webstudio-is/icons"; +import { RowGapIcon, ChevronDownIcon } from "@webstudio-is/icons"; import { Button } from "./button"; import { Flex } from "./flex"; import { IconButton } from "./icon-button"; @@ -36,15 +36,6 @@ export const NativeProps: ComponentStory = () => { ); }; -export const Sizes: ComponentStory = () => { - return ( - - - - - ); -}; - export const Variants: ComponentStory = () => { return ( @@ -68,7 +59,7 @@ export const PrefixSuffix: ComponentStory = () => { return ( } + prefix={} suffix={ @@ -77,25 +68,16 @@ export const PrefixSuffix: ComponentStory = () => { /> } + prefix={} suffix={ } /> - } - suffix={ - - - - } - /> } + prefix={} suffix={ @@ -112,7 +94,7 @@ export const Layout: ComponentStory = () => { } + prefix={} suffix={ @@ -147,7 +129,7 @@ export const Layout: ComponentStory = () => { } + prefix={} /> @@ -222,7 +204,7 @@ export const ClickCapture: ComponentStory = (args) => { placeholder="Click on the icon to focus input" prefix={ - + } suffix={ diff --git a/packages/design-system/src/components/text-field.tsx b/packages/design-system/src/components/text-field.tsx index aadbcba47f..d84988cee5 100644 --- a/packages/design-system/src/components/text-field.tsx +++ b/packages/design-system/src/components/text-field.tsx @@ -12,6 +12,7 @@ const InputBase = styled("input", { boxSizing: "border-box", fontFamily: "inherit", fontSize: "inherit", + color: "inherit", margin: "0", padding: "0", flexGrow: 1, @@ -69,9 +70,23 @@ const TextFieldBase = styled("div", { color: "$hiContrast", fontVariantNumeric: "tabular-nums", + px: "$2", + borderRadius: "$1", + fontFamily: "$sans", + fontSize: "$1", + height: 28, // @todo waiting for the sizing scale + lineHeight: 1, + "&[data-has-prefix]": { + paddingLeft: 2, + }, + + "&[data-has-suffix]": { + paddingRight: 2, + }, + "&:focus-within": { boxShadow: - "inset 0px 0px 0px 1px $colors$blue8, 0px 0px 0px 1px $colors$blue8", + "inset 0px 0px 0px 1px $colors$blue10, 0px 0px 0px 1px $colors$blue10", }, "&[aria-disabled=true]": { @@ -86,22 +101,6 @@ const TextFieldBase = styled("div", { }, variants: { - size: { - "1": { - px: "$1", - borderRadius: "$1", - fontSize: "$1", - height: "$5", - lineHeight: "$sizes$5", - }, - "2": { - px: "$2", - borderRadius: "$2", - fontSize: "$3", - height: "$6", - lineHeight: "$sizes$6", - }, - }, variant: { ghost: { boxShadow: "none", @@ -114,7 +113,7 @@ const TextFieldBase = styled("div", { "&:focus": { backgroundColor: "$loContrast", boxShadow: - "inset 0px 0px 0px 1px $colors$blue8, 0px 0px 0px 1px $colors$blue8", + "inset 0px 0px 0px 1px $colors$blue8, 0px 0px 0px 1px $colors$blue10", }, "&:disabled": { backgroundColor: "transparent", @@ -141,14 +140,11 @@ const TextFieldBase = styled("div", { }, }, }, - defaultVariants: { - size: "1", - }, }); type TextFieldProps = Pick< React.ComponentProps, - "size" | "variant" | "state" | "css" + "variant" | "state" | "css" > & Omit, "prefix" | "children"> & { inputRef?: React.Ref; @@ -164,7 +160,6 @@ export const TextField = React.forwardRef( css, disabled, inputRef, - size, state, variant, onFocus, @@ -194,11 +189,12 @@ export const TextField = React.forwardRef( {/* We want input to be the first element in DOM so it receives the focus first */} From 652fcea031dc91bccaa8c5293eb94d5e24427f2e Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Sat, 8 Oct 2022 19:51:35 +0200 Subject: [PATCH 14/15] remove size prop and fix search icon --- apps/designer/app/auth/login.tsx | 1 - apps/designer/app/dashboard/components/card.tsx | 1 - apps/designer/app/designer/features/style-panel/search.tsx | 6 +++++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/designer/app/auth/login.tsx b/apps/designer/app/auth/login.tsx index 9e2794fc14..f300aa904f 100644 --- a/apps/designer/app/auth/login.tsx +++ b/apps/designer/app/auth/login.tsx @@ -84,7 +84,6 @@ export const Login = ({ errorMessage }: { errorMessage: string }) => { }} > { type="search" value={search} inputRef={inputRef} - prefix={} + prefix={ + + + + } suffix={ search.length > 0 && ( Date: Sun, 9 Oct 2022 10:33:30 +0200 Subject: [PATCH 15/15] update lost pixel baseline --- .../baseline/components-combobox--complex.png | Bin 0 -> 10732 bytes .../baseline/components-combobox--simple.png | Bin 7001 -> 7450 bytes .../components-text-field--click-capture.png | Bin 0 -> 8950 bytes .../components-text-field--default.png | Bin 0 -> 5601 bytes .../components-text-field--focus-events.png | Bin 0 -> 8470 bytes .../components-text-field--interactive.png | Bin 0 -> 10014 bytes .../components-text-field--layout.png | Bin 0 -> 18943 bytes .../components-text-field--native-props.png | Bin 0 -> 16180 bytes .../components-text-field--prefix-suffix.png | Bin 0 -> 7058 bytes .../baseline/components-text-field--state.png | Bin 0 -> 6193 bytes .../components-text-field--variants.png | Bin 0 -> 5601 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .lostpixel/baseline/components-combobox--complex.png create mode 100644 .lostpixel/baseline/components-text-field--click-capture.png create mode 100644 .lostpixel/baseline/components-text-field--default.png create mode 100644 .lostpixel/baseline/components-text-field--focus-events.png create mode 100644 .lostpixel/baseline/components-text-field--interactive.png create mode 100644 .lostpixel/baseline/components-text-field--layout.png create mode 100644 .lostpixel/baseline/components-text-field--native-props.png create mode 100644 .lostpixel/baseline/components-text-field--prefix-suffix.png create mode 100644 .lostpixel/baseline/components-text-field--state.png create mode 100644 .lostpixel/baseline/components-text-field--variants.png diff --git a/.lostpixel/baseline/components-combobox--complex.png b/.lostpixel/baseline/components-combobox--complex.png new file mode 100644 index 0000000000000000000000000000000000000000..4e21c7d2876529e1d4b62aee2ba63347ca98d115 GIT binary patch literal 10732 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 literal 0 HcmV?d00001 diff --git a/.lostpixel/baseline/components-combobox--simple.png b/.lostpixel/baseline/components-combobox--simple.png index 9042b09cfedfd522797ea75426e03b3647ba4d3c..dae0b9a6e9e49d9a41ffb1de59e0f82600a0ea50 100644 GIT binary patch delta 2342 zcmX9=dsI@{8mFwB8Aq+vDoeAvHIuV$Y27hxe8Ds})!Y;-1;nQ_l3Bb!$Dws>!o|NW=OH-Ei3nB!AF$pbSR@LPMc zmxn}u)3pW96*^EZm(682f22Aq#5vvSURVqBfHo`o>j<(S z{m`K*g?u)yufJcscKb3Ikls3QPW~gn!gAA&UH9|0MsvApQz3QZdBbdRPhRmK?tOf0 ztQVxnniG8oUs>EupD2Jdj20$SYP=uDB2M4G64Pf~@OiwQDJAtm>-a6wD=-j&VH0?@ zyYNYs;=|&|?Or*~`U`gv4t6WO`fpzAfOfC-h^j!;F`22XajvKI9w9SRPk!B7ULmtUWx~_a z1o>`;Iz0$|qtE{PXb@WYwslZ{0Rwy6gYx?Z;nYcm2DL3FxuWWZJTbx5=Cn?6anw^I z@l|yb1qOy$YwMDg48=wf354^TDqzQKH2m9tChrjG*?%RM~!XDwlhPexWEC?&aGagzW52u>F~SRcH}FadlC6UkMS_+G3$ z$n@_!*z*9$$WE4sA&BF8Q5yUBT{O*+ zYE%CA+v_X^QNgS-x1pR*)$lj0blLRMls~=)+FU%=A+Yd(qX|eyTzq`IDxqP4D9L#J2f< z!LYzrb;Ins*W3(}6#xF{Cf7{)G+b0Wi83vXPg5%whdB-M&To$pyFyd9 zOK)Jn&{P_Y#-D(8%2bk#Fz@~e5o-Adl?vCb>Ev%No1I<+0p~wywo4Tx+jU8##eM^j zGFpr%QB#+;IF>d(XCmu#jgh4VXZrt>o)D9`6Ss?-Fx1JuSpL=N`G0F+5F0CYgZ~-Ca3DWkL?z_@>c4}x^J*uE) z-qTIybBLwY)U8+>Rm8A#2Nh1WC1guXm)k}~L(7se{9&4r^wh3Y4Kug%i_A{SJT*by zxc!iEbc^F~PpPhk7*4lNT6SYG7^*1U(>IV)v$M7#q6~0d!Vyp9b&5;OZr1cDk@#*zmF{9Nk{ z+}Fi^i_+aL8g1@|Of{snHZ4B6TXg50GdDvh6wfya4Gf`#vR`>Y>!Ewu(GdyID58** z?k;5;9z()%Au_4LD6ZJT4&X{S1ffP?QnK^4gQ|0TiOqu%7TaW2HkB6Ev_y-(71NbD+yAOX$Z<-ch|i)UeUil!v()sx1R`Tef?_iGa^ zzr&^RSoo}&#NhzcDJKz*6^BvyO^HsUm(&G)3coXfddC`FT^*Wc(RvzQy!cd??bfWd z=}2u7M)C1BK1C*J2mLE?w`Vk-Me>&&iTQ*!$>eYE9V0CJUjNF)0S;)m60=)DRkGPk zCX-Al6+uwhd;_Yr!8P&-f(+(dj8KEr(*d8rh~okKL|peYAc`~`Hy_DIV@hZ7vAfX` zSRRju!SMA>J^Bw^#Sn@s^nw+BVM$rBG;(_ilFYx7Koa{5D(%fYj=XFNk@o0Ri9_oy zNt8Gr@b;Ngjg1uq<3;Vro@^2ZlWiZ98tZMyWJzgRQG6U)UV}>mjvcwZi;?fCtL;82w&X1%Ft`p0v4Z)|W(uI#w*jUZdbbx_mD`l+@PD^&r8*7J=!-k+roJb;`Hra`z z>jL_-sC`moXVd1=v5piW;US?p(=cPhV-pi|O+Mn@OP2&Q9s!1(84g=Y`^o+3g)g6x z^Crhm*lB>yVKh433GcDbsZ8qJ5|#@Ir^nd<=fOJW+t4C$)(Z`{>}K}aSGDPHEH<)G zvk>iAyvoq@fZ=VDEWEu-y;gB9d^~!}PM@AG^!5(^!8q`KXzxEFPOu4<*HJEf=-@;W zI2b{iDi)@*39MDC7G-pWsgR{%04-O%D#rP9`@VONSck)rIdw8xk4#KdOcW4@kLK#( zcTJ}`Yvax-YXU-CrYP|>ubDMBRbM-vN6k9B7k+)Xvbm$H&X$ZPH6{B)V+UUjMK+LmMD> zuggb%j*XE~4=vvc-|`u#<{~_Jm%i#<&D-k5S?)IpAY9yb3$GF(hwZ=oj6T5m>Ez}A E0eqGL!2kdN delta 1882 zcmX9B@!7LWE!&90(7y0i$}H63TptYQdLL1vbzZ7teLq(X3N7ESzUClf!C$~T?P zm}4wf9qkY)#b zkpBh%9xj)nzl0YzYUjtR>vl>pR_fHX}3OSWQOe=?>i4i2#?CZ@8Tf zoGoT!U{558pQO@~h65p}U@)h% zmnM_T)WG6q&bVFYG7%IX7l&x&8Dme{*vTHQ!LHNO)9`T|%8A_7CBzh9u_Zn>>p@4b zRttg3U(cKAFB8c&^j{l5AKFyUBaNV9wPDRf@ji@lto)Bcf{(fAFLm(WVDQaOa}xZ! zixrxpk1VwK#AqH02m^qHI2CL3KeTw`S2wZV#p^OLgTca6Xdvf7uG@6q;`?|U`9stry%_+*pS|jk@rPW4rjnFh-#||sa>P%vxk`V|> zXkI&=US2*X>%$iLrOu>84Ye9)TIKX!nhKrm9Z6_EHbrG&CX){DpEC}w#6hfF0)piS zOt3pXPmRL+=fIKK+14mbckuni(%$eZXlf|wrBy%>i9|=o%ISx?0S2%!pqVUU-Zt!( za|^X7?fi}g)ms<`hHc5+&+t=YO|DXd0S=)cs8p(z-C6oP>PO8ovU`F~zQZGerB%~O0^0KP!je-fb}?v$z5SKI9c+hP=t zfMBNZxGO>mQc3taB~Mmdz`Q=NZ(AWpWD#h_zm2VXb*+}JL{H|p2 z{Pio!8SXM)2~3ajD;H*QDvi;_S6xrDJXM4Rt$re~rExBavLRrREOQB(Hd<2~ovtIP z){2G&aXZSLlP)WgM*G29{UoAZDC;E68>eJ+07J-Hd2+_3wid#|DxkW2?V1mj3dZAaEJjuD zH5=bOkHd?D5yTxy$2>8zZWoCVZ>@JtMao~2V~1MBy}K1sdB%AQ3JWnPGA!Ad}=@ZXsj7)+3#&lFDfbm zhZ``|u+k?Vf9#9hT;Jnn3f1cT;11o^8wyRmy5%DNS9f0!b-YMhBH#!=kJC?K7R!!W zP`J@9IOGYK9BVr=T+#)G6Z%YMS59|z&&pwB%aSXfv{-2kZeA?KW(mqKTzu2U%^u=b zM{Y(g&0mg`~Nam0_*= z2P%&317bvtjQFZwZ~hZaY3N7>?2lQYWUmy7LXq~C8^#b6+%|3pqaKC&zV~f6SAQy_ m%g*u0iLQX-6-V7>4ncoA{{^AawRg@&a_Ou1=#GD6eD{Aw5AOW{ diff --git a/.lostpixel/baseline/components-text-field--click-capture.png b/.lostpixel/baseline/components-text-field--click-capture.png new file mode 100644 index 0000000000000000000000000000000000000000..3511c42f5b3da6a9266eac7729d596566f67cd64 GIT binary patch literal 8950 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 literal 0 HcmV?d00001 diff --git a/.lostpixel/baseline/components-text-field--default.png b/.lostpixel/baseline/components-text-field--default.png new file mode 100644 index 0000000000000000000000000000000000000000..f7db5735a2a6f03c115e7c1ece416e06f7e86b75 GIT binary patch literal 5601 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 literal 0 HcmV?d00001 diff --git a/.lostpixel/baseline/components-text-field--interactive.png b/.lostpixel/baseline/components-text-field--interactive.png new file mode 100644 index 0000000000000000000000000000000000000000..ce559ea3f99368205e482b460e549b193a7d92f1 GIT binary patch literal 10014 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 R(@EwCl~s9CB>n95e*tr7Nk9Mq literal 0 HcmV?d00001 diff --git a/.lostpixel/baseline/components-text-field--native-props.png b/.lostpixel/baseline/components-text-field--native-props.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0764f33b6b8b08cd601f18bde7ab2a49513dea GIT binary patch literal 16180 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 I>%KGp0K@z23jhEB literal 0 HcmV?d00001 diff --git a/.lostpixel/baseline/components-text-field--variants.png b/.lostpixel/baseline/components-text-field--variants.png new file mode 100644 index 0000000000000000000000000000000000000000..f7db5735a2a6f03c115e7c1ece416e06f7e86b75 GIT binary patch literal 5601 zcmeAS@N?(olHy`uVBq!ia0y~yUX8DA@kRIFoWTrEt3LBq=mBqL!a1HE9X65iX1tgtPDT~{YgfP8aowm+F