From 97fb27c0ceeb979f22eed14567148aa16daedcd3 Mon Sep 17 00:00:00 2001 From: Roman Pominov Date: Thu, 2 Feb 2023 16:39:50 +0400 Subject: [PATCH] Align Switch with Figma (#921) Updated Switch styles, added [demo](https://main--638245578b47d4399fba191a.chromatic.com/?path=/story/library-switch--switch). Closes #801 --- .../baseline/library-switch--switch.png | Bin 0 -> 12807 bytes .../src/components/switch.stories.tsx | 30 ++++ .../design-system/src/components/switch.tsx | 159 ++++++++---------- packages/design-system/src/index.ts | 2 +- 4 files changed, 101 insertions(+), 90 deletions(-) create mode 100644 .lostpixel/baseline/library-switch--switch.png create mode 100644 packages/design-system/src/components/switch.stories.tsx diff --git a/.lostpixel/baseline/library-switch--switch.png b/.lostpixel/baseline/library-switch--switch.png new file mode 100644 index 0000000000000000000000000000000000000000..d543685f32cbf3c0df5594863140d926d67c4ab1 GIT binary patch literal 12807 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 literal 0 HcmV?d00001 diff --git a/packages/design-system/src/components/switch.stories.tsx b/packages/design-system/src/components/switch.stories.tsx new file mode 100644 index 0000000000..15695a1ea8 --- /dev/null +++ b/packages/design-system/src/components/switch.stories.tsx @@ -0,0 +1,30 @@ +import { Switch } from "./switch"; +import { StorySection, StoryGrid } from "./storybook"; + +export default { + title: "Library/Switch", +}; + +const Story = () => { + return ( + <> + + + + + + + + + + + + + + + + + ); +}; + +export { Story as Switch }; diff --git a/packages/design-system/src/components/switch.tsx b/packages/design-system/src/components/switch.tsx index 8fab06370c..121a7a76ae 100644 --- a/packages/design-system/src/components/switch.tsx +++ b/packages/design-system/src/components/switch.tsx @@ -1,96 +1,77 @@ -import React from "react"; -import { styled, VariantProps, CSS } from "../stitches.config"; -import * as SwitchPrimitive from "@radix-ui/react-switch"; -import { theme } from "../stitches.config"; +/** + * Implementation of the "Switch" component from: + * https://www.figma.com/file/sfCE7iLS0k25qCxiifQNLE/%F0%9F%93%9A-Webstudio-Library?node-id=1086%3A3430&t=WVRoENiFP3BSlQa7-0 + */ -const StyledThumb = styled(SwitchPrimitive.Thumb, { - position: "absolute", - left: 0, - width: 13, - height: 13, - backgroundColor: "white", +import { forwardRef, type ComponentProps, type Ref } from "react"; +import * as Primitive from "@radix-ui/react-switch"; +import { type CSS, css, theme } from "../stitches.config"; + +const padding = theme.spacing[1]; +const thumbOffset = `calc(${padding} + ${theme.spacing[2]})`; + +const switchStyles = css({ + all: "unset", // reset