From bfb32b8b0833ab81ab2a413462d2636aa8e76fcd Mon Sep 17 00:00:00 2001 From: Gottfried Chen Date: Tue, 13 Aug 2024 15:15:21 +0200 Subject: [PATCH] update storybook, fix tailwind integration --- .storybook/preview.tsx | 3 + README.md | 11 +- package.json | 18 +- .../(pages)/dashboard/ClientComponent.tsx | 43 +-- .../(pages)/dashboard/ServerComponent.tsx | 14 +- src/components/ui/Buttons.stories.tsx | 29 +- src/components/ui/ErrorToast.stories.tsx | 11 +- src/components/ui/Inputs.stories.tsx | 12 +- src/components/ui/LoadingOverlay.stories.tsx | 43 +++ src/styles/TextStyles.stories.tsx | 30 ++ src/styles/colors.stories.tsx | 24 ++ tailwind.config.ts | 6 +- yarn.lock | 294 +++++++++--------- 13 files changed, 295 insertions(+), 243 deletions(-) create mode 100644 src/components/ui/LoadingOverlay.stories.tsx create mode 100644 src/styles/TextStyles.stories.tsx create mode 100644 src/styles/colors.stories.tsx diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index ba11509..25bdd36 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -14,6 +14,9 @@ const preview: Preview = { date: /Date$/i, }, }, + nextjs: { + appDirectory: true, + }, }, decorators: [ (Story) => ( diff --git a/README.md b/README.md index 236310a..01e7ca5 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,12 @@ For headless CraftCMS projects there is a separate branch. Use `npm_config_yes=t - Sample Login-Page in the frontend code. - Docker setup +## Storybook +For developing, previewing and testing UI components we **highly recommend** using [storybook](https://storybook.js.org/). Support +for storybook is built in. For examples how to write simple stories see `*.stories.tsx` files (e.g. `src/components/ui/Buttons.stories.tsx`). + +To start the storybook use `yarn storybook`. + ## Builds - Builds are configured as `standalone` in next.config.mjs. SPA style builds (aka `output: "export"`) are not practical, since dynamic routes without `generateStaticParams()` are not supported (see https://nextjs.org/docs/app/building-your-application/deploying/static-exports#unsupported-features). This limitation would not allow any detail sites like `product/[productId]` because those cannot be generated statically. @@ -116,8 +122,3 @@ For social media link images you can use this: https://nextjs.org/docs/app/api-r E.g. robots.txt, sitemap, manifest: See https://nextjs.org/docs/app/api-reference/file-conventions/metadata -## Storybook -For developing and testing UI components we recommend using [storybook](https://storybook.js.org/). Support -for storybook is built in. For examples how to write simple stories see `*.stories.tsx` files (e.g. `src/components/Buttons.stories.tsx`). - -To start the storybook use `yarn storybook`. diff --git a/package.json b/package.json index e386713..ce8371d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "ts": "tsc --noEmit --incremental --preserveWatchOutput --pretty", "ts:watch": "npm run ts -- --watch --project tsconfig.watch.json", "prepare": "husky install", - "storybook": "storybook dev -p 6006", + "storybook": "storybook dev -p 6006 --ci", "build-storybook": "storybook build" }, "dependencies": { @@ -52,13 +52,13 @@ }, "devDependencies": { "@chromatic-com/storybook": "^1.6.1", - "@storybook/addon-essentials": "^8.2.8", - "@storybook/addon-interactions": "^8.2.8", - "@storybook/addon-links": "^8.2.8", - "@storybook/blocks": "^8.2.8", - "@storybook/nextjs": "^8.2.8", - "@storybook/react": "^8.2.8", - "@storybook/test": "^8.2.8", + "@storybook/addon-essentials": "^8.2.9", + "@storybook/addon-interactions": "^8.2.9", + "@storybook/addon-links": "^8.2.9", + "@storybook/blocks": "^8.2.9", + "@storybook/nextjs": "^8.2.9", + "@storybook/react": "^8.2.9", + "@storybook/test": "^8.2.9", "@testing-library/react": "^16.0.0", "@types/negotiator": "^0.6.3", "@types/node": "^20", @@ -76,7 +76,7 @@ "husky": "^8.0.3", "license-checker": "^25.0.1", "postcss": "^8", - "storybook": "^8.2.8", + "storybook": "^8.2.9", "tailwindcss": "^3.4.1", "typescript": "^5", "vitest": "^2.0.5" diff --git a/src/app/[lang]/(pages)/dashboard/ClientComponent.tsx b/src/app/[lang]/(pages)/dashboard/ClientComponent.tsx index ad1125e..9cc736a 100644 --- a/src/app/[lang]/(pages)/dashboard/ClientComponent.tsx +++ b/src/app/[lang]/(pages)/dashboard/ClientComponent.tsx @@ -1,48 +1,20 @@ "use client"; -import NextLink from "next/link"; +import { useLocale } from "@/hooks/useLocale"; import { t, tHtml } from "@/i18n/clientUtil"; -import { Button, Link } from "@mui/material"; -import { sleep } from "@/util/helpers"; -import { useGeneralStore } from "@/stores/generalStore"; import { IntlLink } from "@/routing/IntlLink"; -import { useLocale } from "@/hooks/useLocale"; import { Routes } from "@/routing/Routes"; import { useIntlRouter } from "@/routing/useIntlRouter"; import { useDebugStore } from "@/stores/debugStore"; +import { Button, Link } from "@mui/material"; +import NextLink from "next/link"; // Stuff that has to be in a client component (uses t, tHtml) export const ClientComponent = () => { - const [setIsLoading, setError] = useGeneralStore((state) => [state.setIsLoading, state.setError]); const locale = useLocale(); const router = useIntlRouter(); const debugEnabled = useDebugStore((state) => state.enabled); - const loading = ( - <> - - - - ); - return ( <> @@ -61,15 +33,6 @@ export const ClientComponent = () => { {t(locale === "de" ? "language.english" : "language.german")}
Debug: {debugEnabled ? "enabled" : "disabled"}
- {loading} - {t("common.licenses")} diff --git a/src/app/[lang]/(pages)/dashboard/ServerComponent.tsx b/src/app/[lang]/(pages)/dashboard/ServerComponent.tsx index 89abd7a..196d587 100644 --- a/src/app/[lang]/(pages)/dashboard/ServerComponent.tsx +++ b/src/app/[lang]/(pages)/dashboard/ServerComponent.tsx @@ -1,4 +1,3 @@ -import { Icon } from "@/components/Icon"; import { tServer } from "@/i18n/util"; import { PageProps } from "@/types/PageProps"; import { debug } from "@/util/debug"; @@ -16,16 +15,5 @@ export const ServerComponent = async ({ pageProps }: { pageProps: PageProps }) = await sleep(100); debug.log("loading ServerComponent done"); - return ( - <> - {tServer(pageProps.params.lang, "serverComponent.text")} -

H1 headline

-

H2 headline

-

H3 headline

-

H4 headline

-

Paragraph body1

-

Paragraph body2

- - - ); + return <>{tServer(pageProps.params.lang, "serverComponent.text")}; }; diff --git a/src/components/ui/Buttons.stories.tsx b/src/components/ui/Buttons.stories.tsx index f29bdb9..d0214ed 100644 --- a/src/components/ui/Buttons.stories.tsx +++ b/src/components/ui/Buttons.stories.tsx @@ -1,13 +1,13 @@ +import { Icon } from "@/components/Icon"; +import { SiteContainer } from "@/components/ui/SiteContainer"; import { Button, IconButton } from "@mui/material"; import { Meta, StoryObj } from "@storybook/react"; -import { SiteContainer } from "./SiteContainer"; -import { Icon } from "../Icon"; export default { title: "Buttons", } satisfies Meta; -export const Buttons: StoryObj = { +export const Contained: StoryObj = { render: () => { return ( @@ -17,12 +17,30 @@ export const Buttons: StoryObj = { + + ); + }, +}; + +export const Outlined: StoryObj = { + render: () => { + return ( + + + ); + }, +}; + +export const Icons: StoryObj = { + render: () => { + return ( +
Icon button: @@ -32,9 +50,4 @@ export const Buttons: StoryObj = { ); }, - parameters: { - nextjs: { - appDirectory: true, - }, - }, }; diff --git a/src/components/ui/ErrorToast.stories.tsx b/src/components/ui/ErrorToast.stories.tsx index 17adb3f..4b92939 100644 --- a/src/components/ui/ErrorToast.stories.tsx +++ b/src/components/ui/ErrorToast.stories.tsx @@ -1,14 +1,14 @@ +import { ErrorToast } from "@/components/ui/ErrorToast"; +import { SiteContainer } from "@/components/ui/SiteContainer"; import { useGeneralStore } from "@/stores/generalStore"; import { Button } from "@mui/material"; import { Meta, StoryObj } from "@storybook/react"; -import { ErrorToast } from "./ErrorToast"; -import { SiteContainer } from "./SiteContainer"; export default { title: "Error Toast", } satisfies Meta; -export const TriggerError: StoryObj = { +export const TriggerSingleError: StoryObj = { render: () => { const [setError] = useGeneralStore((state) => [state.setError]); @@ -21,9 +21,4 @@ export const TriggerError: StoryObj = { ); }, - parameters: { - nextjs: { - appDirectory: true, - }, - }, }; diff --git a/src/components/ui/Inputs.stories.tsx b/src/components/ui/Inputs.stories.tsx index 21017dd..78167d3 100644 --- a/src/components/ui/Inputs.stories.tsx +++ b/src/components/ui/Inputs.stories.tsx @@ -1,16 +1,16 @@ +import { CustomInputField } from "@/components/ui/CustomInputField"; +import { SiteContainer } from "@/components/ui/SiteContainer"; import { tServer } from "@/i18n/util"; import { yupResolver } from "@hookform/resolvers/yup"; import { Meta, StoryObj } from "@storybook/react"; import { useForm } from "react-hook-form"; import * as Yup from "yup"; -import { CustomInputField } from "./CustomInputField"; -import { SiteContainer } from "./SiteContainer"; export default { title: "Inputs", } satisfies Meta; -export const Inputs: StoryObj = { +export const EmailInput: StoryObj = { render: () => { const { control } = useForm<{ email: string }>({ defaultValues: { @@ -36,13 +36,9 @@ export const Inputs: StoryObj = { type="email" autoComplete="username" required + style={{ width: 300 }} /> ); }, - parameters: { - nextjs: { - appDirectory: true, - }, - }, }; diff --git a/src/components/ui/LoadingOverlay.stories.tsx b/src/components/ui/LoadingOverlay.stories.tsx new file mode 100644 index 0000000..b9366c9 --- /dev/null +++ b/src/components/ui/LoadingOverlay.stories.tsx @@ -0,0 +1,43 @@ +import { SiteContainer } from "@/components/ui/SiteContainer"; +import { tServer } from "@/i18n/util"; +import { useGeneralStore } from "@/stores/generalStore"; +import { sleep } from "@/util/helpers"; +import { Button } from "@mui/material"; +import { Meta, StoryObj } from "@storybook/react"; +import { LoadingOverlay } from "./LoadingOverlay"; + +export default { + title: "Loading Overlay", +} satisfies Meta; + +export const TriggerOverlay: StoryObj = { + render: () => { + const [setIsLoading] = useGeneralStore((state) => [state.setIsLoading]); + + return ( + + + + + + ); + }, +}; diff --git a/src/styles/TextStyles.stories.tsx b/src/styles/TextStyles.stories.tsx new file mode 100644 index 0000000..d084a89 --- /dev/null +++ b/src/styles/TextStyles.stories.tsx @@ -0,0 +1,30 @@ +import { SiteContainer } from "@/components/ui/SiteContainer"; +import { Meta, StoryObj } from "@storybook/react"; + +export default { + title: "Text Styles", +} satisfies Meta; + +export const Headlines: StoryObj = { + render: () => { + return ( + +

H1 headline

+

H2 headline

+

H3 headline

+

H4 headline

+
+ ); + }, +}; + +export const Paragraphs: StoryObj = { + render: () => { + return ( + +

Paragraph body1

+

Paragraph body2

+
+ ); + }, +}; diff --git a/src/styles/colors.stories.tsx b/src/styles/colors.stories.tsx new file mode 100644 index 0000000..6efe1a8 --- /dev/null +++ b/src/styles/colors.stories.tsx @@ -0,0 +1,24 @@ +import { SiteContainer } from "@/components/ui/SiteContainer"; +import { Meta, StoryObj } from "@storybook/react"; +import { Colors as C } from "./colors"; + +export default { + title: "Colors", +} satisfies Meta; + +export const ColorPalette: StoryObj = { + render: () => { + return ( + +
+ {Object.entries(C).map((entry) => ( +
+ {`${entry[0]}: `} +
+
+ ))} +
+ + ); + }, +}; diff --git a/tailwind.config.ts b/tailwind.config.ts index c788170..b8d71f0 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -2,11 +2,7 @@ import type { Config } from "tailwindcss"; import plugin from "tailwindcss/plugin"; const config: Config = { - content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], + content: ["./src/**/*.{js,ts,jsx,tsx,mdx}"], theme: { extend: { colors: { diff --git a/yarn.lock b/yarn.lock index 20a5c92..153fee0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2009,10 +2009,10 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== -"@storybook/addon-actions@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.2.8.tgz#ee11998e1ff4d337f5e2644b0bc9c00d4b5a62e7" - integrity sha512-dyajqsMNAUktpi7aiml0Fsm4ey8Nh2YwRyTDuTJZ1iJFcFyARqfr5iKH4/qElq80y0FYXGgGRJB+dKJsCdefLw== +"@storybook/addon-actions@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.2.9.tgz#5a27f07f276ec776fb768f5da9bfe2c43fe3e851" + integrity sha512-eh2teOqjga7aoClDVV+/b1gHJqsPwjiU1t+Hg/l4i2CkaBUNdYMEL90nR6fgReOdvvL5YhcPwJ8w38f9TrQcoQ== dependencies: "@storybook/global" "^5.0.0" "@types/uuid" "^9.0.1" @@ -2020,35 +2020,35 @@ polished "^4.2.2" uuid "^9.0.0" -"@storybook/addon-backgrounds@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.2.8.tgz#98ade0d175a2bd906cb926b4bdfa907171d46f0e" - integrity sha512-OqXGpq8KzWwAAQWPnby/v4ayWuUAB18Twgi6zeb+QNLEQdFnSp7kz6+4mP8ZVg8RS3ACGXD31nnvvlF7GYoJjQ== +"@storybook/addon-backgrounds@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.2.9.tgz#7e3e8c939cc19c9f80f482db7e9391bda3d2dbb5" + integrity sha512-eGmZAd742ORBbQ6JepzBCko/in62T4Xg9j9LVa+Cvz/7L1C/RQSuU6sUwbRAsXaz+PMVDksPDCUUNsXl3zUL7w== dependencies: "@storybook/global" "^5.0.0" memoizerific "^1.11.3" ts-dedent "^2.0.0" -"@storybook/addon-controls@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.2.8.tgz#8625423b11e2ab84bfaed0d8ce369fda0c6a3905" - integrity sha512-adhg68CSFaR/r95rgyKU4ZzWwZz+MU0c4vr9hqrR1UGvg/zl33IZQQzb5j5v3Axo0O31yPMaY6LRty7pOv3+/Q== +"@storybook/addon-controls@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.2.9.tgz#43f9ca53e2a709feee0c1fe6db3daee8953d2ddd" + integrity sha512-vaSE78KOE7SO0GrW4e+mdQphSNpvCX/FGybIRxyaKX9h8smoyUwRNHVyCS3ROHTwH324QWu7GDzsOVrnyXOv0A== dependencies: dequal "^2.0.2" lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.2.8.tgz#16c240262675a2b3ee9ddb0c149861305a321c7b" - integrity sha512-8hqUYYveJjR3e/XdXt0vduA7TxFRIFWgXoa9jN5axa63kqfiHcfkpFYPjM8jCRhsfDIRgdrwe2qxsA0wewO1pA== +"@storybook/addon-docs@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.2.9.tgz#bc6737cab5b3620b9291de7c14f92ad92b5a90db" + integrity sha512-flDOxFIGmXg+6lVdwTLMOKsGob1WrT7rG98mn1SNW0Nxhg3Wg+9pQuq1GLxEzKtAgSflmu+xcBRfYhsogyDXkw== dependencies: "@babel/core" "^7.24.4" "@mdx-js/react" "^3.0.0" - "@storybook/blocks" "8.2.8" - "@storybook/csf-plugin" "8.2.8" + "@storybook/blocks" "8.2.9" + "@storybook/csf-plugin" "8.2.9" "@storybook/global" "^5.0.0" - "@storybook/react-dom-shim" "8.2.8" + "@storybook/react-dom-shim" "8.2.9" "@types/react" "^16.8.0 || ^17.0.0 || ^18.0.0" fs-extra "^11.1.0" react "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -2057,81 +2057,81 @@ rehype-slug "^6.0.0" ts-dedent "^2.0.0" -"@storybook/addon-essentials@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.2.8.tgz#d843f662bb14489e054b365bccfd5193f4defdb0" - integrity sha512-NRbFv2ociM1l/Oi/1go/ZC5bUU41n9aKD1DzIbguEKBhUs/TGAES+f5x+7DvYnt3Hvd925/FyTXuMU+vNUeiUA== - dependencies: - "@storybook/addon-actions" "8.2.8" - "@storybook/addon-backgrounds" "8.2.8" - "@storybook/addon-controls" "8.2.8" - "@storybook/addon-docs" "8.2.8" - "@storybook/addon-highlight" "8.2.8" - "@storybook/addon-measure" "8.2.8" - "@storybook/addon-outline" "8.2.8" - "@storybook/addon-toolbars" "8.2.8" - "@storybook/addon-viewport" "8.2.8" +"@storybook/addon-essentials@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.2.9.tgz#3dc29be7e8529869416e77e256cba10cf111ead1" + integrity sha512-B2d3eznGZvPIyCVtYX0UhrYcEfK+3Y2sACmEWpSwtk8KXomFEsZnD95m397BYDRw3/X6qeSLWxqgMfqDTEDeMA== + dependencies: + "@storybook/addon-actions" "8.2.9" + "@storybook/addon-backgrounds" "8.2.9" + "@storybook/addon-controls" "8.2.9" + "@storybook/addon-docs" "8.2.9" + "@storybook/addon-highlight" "8.2.9" + "@storybook/addon-measure" "8.2.9" + "@storybook/addon-outline" "8.2.9" + "@storybook/addon-toolbars" "8.2.9" + "@storybook/addon-viewport" "8.2.9" ts-dedent "^2.0.0" -"@storybook/addon-highlight@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.2.8.tgz#464265aa200c63465217c352d64a5d3974480b89" - integrity sha512-IM1pPx6CCZbHV0bv3oB1qBCGDsr8soq7XLl93tc7mc4hstWSDFfNn7rx4CWycSlCqXlNTKh8cEkbrPrhV9cwbg== +"@storybook/addon-highlight@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.2.9.tgz#684b25461cd82373da49acb0cd704579d573ca0a" + integrity sha512-qdcazeNQoo9QKIq+LJJZZXvFZoLn+i4uhbt1Uf9WtW6oU/c1qxORGVD7jc3zsxbQN9nROVPbJ76sfthogxeqWA== dependencies: "@storybook/global" "^5.0.0" -"@storybook/addon-interactions@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-8.2.8.tgz#80c19ac5b797a04702fcc37458d3c59bbd3031e4" - integrity sha512-ggctlrSlK72xMfhviHHRslZF5tr9aHr1VFwCG/tjF7s1lM3S7OGqgHLJpcja/wNREvq9GMEvX95ZSu5NMh5CtA== +"@storybook/addon-interactions@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-8.2.9.tgz#ead639bcdb3726ed180cf8afaf29bfba574b7bc0" + integrity sha512-oSxBkqpmp1Vm9v/G8mZeFNXD8k6T1NMgzUWzAx7R5m31rfObhoi5Fo1bKQT5BAhSSsdjjd7owTAFKdhwSotSKg== dependencies: "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.2.8" - "@storybook/test" "8.2.8" + "@storybook/instrumenter" "8.2.9" + "@storybook/test" "8.2.9" polished "^4.2.2" ts-dedent "^2.2.0" -"@storybook/addon-links@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.2.8.tgz#6a74e55d32e58d0396bdb92b6243007d94fe7673" - integrity sha512-2igEaSdKAFjKjioT6LGdBxZulpbVCzmlmV//sTu3sQiVnnxRjjGFt77sEeLMajrsSvg9DB1RMbDsvJ4FJTzXfQ== +"@storybook/addon-links@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.2.9.tgz#9dbdebbbe28644e9c52ad2aad6bf4f0988871613" + integrity sha512-RhJzUNdDb7lbliwXb64HMwieIeJ+OQ2Ditue1vmSox6NsSd+pshR+okHpAyoP1+fW+dahNENwAS2Kt2QiI78FA== dependencies: "@storybook/csf" "0.1.11" "@storybook/global" "^5.0.0" ts-dedent "^2.0.0" -"@storybook/addon-measure@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.2.8.tgz#1cbb2e2402e844d8067a6d1193e10b00e3a380d2" - integrity sha512-oqZiX571F9NNy8o/oVyM1Pe2cJz3WJ/OpL0lVbepHrV4ir1f+SDYZdMI58jGBAtoM52cwFc2ZPbzXKQs7a513A== +"@storybook/addon-measure@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.2.9.tgz#998995c31980d635132c42a8d621095e73adb9b6" + integrity sha512-XUfQtYRKWB2dfbPRmHuos816wt1JrLbtRld5ZC8J8ljeqZ4hFBPTQcgI5GAzZqjQuclLC0KuhlA/0bKxdxMMGA== dependencies: "@storybook/global" "^5.0.0" tiny-invariant "^1.3.1" -"@storybook/addon-outline@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.2.8.tgz#1c54be4aae6f573f013e1a425a061bd75fa03230" - integrity sha512-Cbk4Z0ojggiXjpbS2c4WUP56yikQdT4O7+8AuBNNjVUHNvJQADWYovi6SvDmrS5dH1iyIkB+4saXMr0syp+BDw== +"@storybook/addon-outline@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.2.9.tgz#24d24efde347d48c372e128c12de9b6a6245b288" + integrity sha512-p22kI4W7MT0YJOCmg/FfhfH+NpZEDA5tgwstjazSg4ertyhaxziMwWZWiK2JCg0gOAfRJjoYjHz+6/u56iXwgQ== dependencies: "@storybook/global" "^5.0.0" ts-dedent "^2.0.0" -"@storybook/addon-toolbars@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.2.8.tgz#fa00069aa3fd482478d39ad406a2ba900d30b445" - integrity sha512-k64G3FUpX3H/mhJ7AG1r/4Drsk6cdUtxI3yVdgWb7O3Ka7v/OFZexRXRSiV03n5q/kaqVKDu96Tuog57+7EB4w== +"@storybook/addon-toolbars@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.2.9.tgz#a3d92f5fdc021e5578c1085062f9b7989624b569" + integrity sha512-9LMZZ2jRD86Jh6KXedDbAYs4eHj9HtJA9VhSEE2wiqMGwXozpySi7B1GWniNzmFfcgMQ4JHfmD/OrBVTK7Ca/w== -"@storybook/addon-viewport@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.2.8.tgz#cb7987f87c11dd4658fda6194aa66b92944f8b0f" - integrity sha512-/JZeIgB33yhryUvWaNO+3t9akcS8nGLyAUmlljPFr3LUDDYrO/0H9tE4CgjLqtwCXBq3k3s0HLzEJOrKI9Tmbw== +"@storybook/addon-viewport@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.2.9.tgz#56f7273450b72384bb79e9ddeab2f633f869be73" + integrity sha512-lyM24+DJEt8R0YZkJKee34NQWv0REACU6lYDalqJNdKS1sEwzLGWxg1hZXnw2JFdBID9NGVvyYU2w6LDozOB0g== dependencies: memoizerific "^1.11.3" -"@storybook/blocks@8.2.8", "@storybook/blocks@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.2.8.tgz#7449f94306af1d916a8480334d8747ea6fece09f" - integrity sha512-AHBXu9s73Xv9r1JageIL7C4eGf5XYEByai4Y6NYQsE+jF7b7e8oaSUoLW6fWSyLGuqvjRx+5P7GMNI2K1EngBA== +"@storybook/blocks@8.2.9", "@storybook/blocks@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.2.9.tgz#3c9018619704cee23c9e69ff263e3c0aaa9a7ccc" + integrity sha512-5276q/s/UL8arwftuBXovUNHqYo/HPQFMGXEmjVVAMXUyFjzEAfKj3+xU897J6AuL+7XVZG32WnqA+X6LJMrcQ== dependencies: "@storybook/csf" "0.1.11" "@storybook/global" "^5.0.0" @@ -2148,12 +2148,12 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-webpack5@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-8.2.8.tgz#2bf3f130c5d5718c4d2b4d130cdc0dd41bcd2642" - integrity sha512-1eH8OYcsjkFtpodJNsrrgDsR7oDPLpo7FdoF67S9g/mRxTl1RCwhMVdeBHgtfge9kHQ1TlpK9tTXine4G3uA3Q== +"@storybook/builder-webpack5@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-8.2.9.tgz#44a2176b466fea79643045e849a66454c17c7ab1" + integrity sha512-D3oYk4LkteWZ3QLcdUTu/0rUvVNUp/bWwEKAycZDr2uFCOhv8VoS2/l/TaHjn3wpyWpVVKS6GgdP72K++YVufg== dependencies: - "@storybook/core-webpack" "8.2.8" + "@storybook/core-webpack" "8.2.9" "@types/node" "^18.0.0" "@types/semver" "^7.3.4" browser-assert "^1.2.1" @@ -2181,15 +2181,15 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.6.0" -"@storybook/codemod@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.2.8.tgz#e1328f5478007496d411595135509d653d72893d" - integrity sha512-dqD4j6JTsS8BM2y1yHBIe5fHvsGM08qpJQXkE77aXJIm5UfUeuWC7rY0xAheX3fU5G98l3BJk0ySUGspQL5pNg== +"@storybook/codemod@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.2.9.tgz#f6c7f43a5aa326b64544ad6f10038edc32293827" + integrity sha512-3yRx1lFMm1FXWVv+CKDiYM4gOQPEfpcZAQrjfcumxSDUrB091pnU1PeI92Prj3vCdi4+0oPNuN4yDGNUYTMP/A== dependencies: "@babel/core" "^7.24.4" "@babel/preset-env" "^7.24.4" "@babel/types" "^7.24.0" - "@storybook/core" "8.2.8" + "@storybook/core" "8.2.9" "@storybook/csf" "0.1.11" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" @@ -2200,23 +2200,23 @@ recast "^0.23.5" tiny-invariant "^1.3.1" -"@storybook/components@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.2.8.tgz#f839edc0bc1b8ed81f22ee57f3cf283a2554e5af" - integrity sha512-d4fI7Clogx4rgLAM7vZVr9L2EFtAkGXvpkZFuB0H0eyYaxZSbuZYvDCzRglQGQGsqD8IA8URTgPVSXC3L3k6Bg== +"@storybook/components@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.2.9.tgz#a2394749d52940b7a224d1d4801d756b2750b488" + integrity sha512-OkkcZ/f/6o3GdFEEK9ZHKIGHWUHmavZUYs5xaSgU64bOrA2aqEFtfeWWitZYTv3Euhk8MVLWfyEMDfez0AlvDg== -"@storybook/core-webpack@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-8.2.8.tgz#abe9a012b8930c2ce3fd80d637c76015ec420785" - integrity sha512-IvrhsDNM/4aTIfUEtYorz9N9S+9gCVkUuUVTNiX0N9a24BFLTcPebtJZYXbguZqxN/NeJMMfk1k7YLU2cBmdjw== +"@storybook/core-webpack@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-8.2.9.tgz#3a45f9815aad86ebe89e75562be26673d56c08da" + integrity sha512-6yL1su+d8IOTU+UkZqM9SeBcVc/G6vUHLsMdlWNyVtRus2JTMmT0K0/ll56jrm/ym0y98cxUOA1jsImkBubP2Q== dependencies: "@types/node" "^18.0.0" ts-dedent "^2.0.0" -"@storybook/core@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.2.8.tgz#9672a82d6998eb5a3c20262427bf0f974acae675" - integrity sha512-Wwm/Txh87hbxqU9OaxXwdGAmdRBjDn7rlZEPjNBx0tt43SQ11fKambY7nVWrWuw46YsJpdF9V/PQr4noNEXXEA== +"@storybook/core@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.2.9.tgz#68f8659014e06f4f65f6dbdf1dd10850f31d23b3" + integrity sha512-wSER8FpA6Il/jPyDfKm3yohxDtuhisNPTonMVzd3ulNWR4zERLddyO3HrHJJwdqYHLNk4SBFzwMGpQZVws1y0w== dependencies: "@storybook/csf" "0.1.11" "@types/express" "^4.17.21" @@ -2230,10 +2230,10 @@ util "^0.12.4" ws "^8.2.3" -"@storybook/csf-plugin@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.2.8.tgz#04ec4b773d6ae581af777712552fa29e1cd13067" - integrity sha512-CEHY7xloBPE8d8h0wg2AM2kRaZkHK8/vkYMNZPbccqAYj6PQIdTuOcXZIBAhAGydyIBULZmsmmsASxM9RO5fKA== +"@storybook/csf-plugin@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.2.9.tgz#1ef4a4f4bf6a601ffae110dc9722ded834e422fa" + integrity sha512-QQCFb3g12VQQEraDV1UfCmniGhQZKyT6oEt1Im6dzzPJj9NQk+6BjWoDep33CZhBHWoLryrMQd2fjuHxnFRNEA== dependencies: unplugin "^1.3.1" @@ -2261,24 +2261,24 @@ resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.2.10.tgz#d3d44912a3a88f3f04f77ce2c23a7e47e796f766" integrity sha512-310apKdDcjbbX2VSLWPwhEwAgjxTzVagrwucVZIdGPErwiAppX8KvBuWZgPo+rQLVrtH8S+pw1dbUwjcE6d7og== -"@storybook/instrumenter@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.2.8.tgz#326cbf54a2c2c17a3e7760b5ff3beee5b40e21c8" - integrity sha512-6Gk3CzoYQQXBXpW86PKqYSozOB/C9dSYiFvwPRo4XsEfjARDi8yglqkbOtG+FVqKDL66I5krcveB8bTWigqc9g== +"@storybook/instrumenter@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.2.9.tgz#a809f9fb1ce738b2b50ba592d595f8961af92754" + integrity sha512-+DNjTbsMzlDggsvkhRuOy7aGvQJ4oLCPgunP5Se/3yBjG+M2bYDa0EmC5jC2nwZ3ffpuvbzaVe7fWf7R8W9F2Q== dependencies: "@storybook/global" "^5.0.0" "@vitest/utils" "^1.3.1" util "^0.12.4" -"@storybook/manager-api@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.2.8.tgz#0b58210ef86bf9da46bd63104008bf84cb218116" - integrity sha512-wzfRu3vrD9a99pN3W/RJXVtgNGNsy9PyvetjUfgQVtUZ9eXXDuA+tM7ITTu3xvONtV/rT2YEBwzOpowa+r1GNQ== +"@storybook/manager-api@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.2.9.tgz#f09a83fce286bc48783c75e7d7184dd8a5381527" + integrity sha512-mkYvUlfqDw+0WbxIynh5TcrotmoXlumEsOA4+45zuNea8XpEgj5cNBUCnmfEO6yQ85swqkS8YYbMpg1cZyu/Vw== -"@storybook/nextjs@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/nextjs/-/nextjs-8.2.8.tgz#d97ff617b67eb9659aa11312257d0286fde4982d" - integrity sha512-j7ip8JzLGuw1AzRkPZC/dCymYUAj4kVyS3CNmlGEms7h4pAaPr3oTuIRO0AMzRfR3DId4DRho3P4eTLHF5QdIA== +"@storybook/nextjs@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/nextjs/-/nextjs-8.2.9.tgz#bb9b291070a102fafa637c928ca732e186d33af5" + integrity sha512-grWabBWTKp0ltJv+DuHtIH88oVIq2xFeTchVaA6mC9jqxmOilKe2KAQA2QNH6/5CXrGo+MuUO62UsHrYOIwsSg== dependencies: "@babel/core" "^7.24.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -2294,10 +2294,10 @@ "@babel/preset-typescript" "^7.24.1" "@babel/runtime" "^7.24.4" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.11" - "@storybook/builder-webpack5" "8.2.8" - "@storybook/preset-react-webpack" "8.2.8" - "@storybook/react" "8.2.8" - "@storybook/test" "8.2.8" + "@storybook/builder-webpack5" "8.2.9" + "@storybook/preset-react-webpack" "8.2.9" + "@storybook/react" "8.2.9" + "@storybook/test" "8.2.9" "@types/node" "^18.0.0" "@types/semver" "^7.3.4" babel-loader "^9.1.3" @@ -2322,13 +2322,13 @@ optionalDependencies: sharp "^0.33.3" -"@storybook/preset-react-webpack@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-8.2.8.tgz#0f3dd57a5b4075e83fad6c9977fab0554075a778" - integrity sha512-mFeuoKXn2mielz8rix11QcOZr5sNWIIKZ8Le6PG2jPRfLmLWNgL8vJEVPy8y4lWPfzo+Q2tnNefLbMombtga5w== +"@storybook/preset-react-webpack@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-8.2.9.tgz#133f617433ebf22ff190754e0e0c6b121c83901e" + integrity sha512-uBLsUfwymWXGmfN/0vB7gLCC0CWDHc778605SWxakqFx7wGF1FZUW4R46qbDFrHTaKh+bundseRdy5/uklksLQ== dependencies: - "@storybook/core-webpack" "8.2.8" - "@storybook/react" "8.2.8" + "@storybook/core-webpack" "8.2.9" + "@storybook/react" "8.2.9" "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" "@types/node" "^18.0.0" "@types/semver" "^7.3.4" @@ -2341,10 +2341,10 @@ tsconfig-paths "^4.2.0" webpack "5" -"@storybook/preview-api@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.2.8.tgz#33b5e5c7ae6f1ee15d6670328df0c738ccd11709" - integrity sha512-BDt1lo5oEWAaTVCsl6JUHCBFtIWI/Za4qvIdn2Lx9eCA+Ae6IDliosmu273DcvGD9R4OPF6sm1dML3TXILGGcA== +"@storybook/preview-api@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.2.9.tgz#e35ca783a1d98174e73223856397a9767766a737" + integrity sha512-D8/t+a78OJqQAcT/ABa1C4YM/OaLGQ9IvCsp3Q9ruUqDCwuZBj8bG3D4477dlY4owX2ycC0rWYu3VvuK0EmJjA== "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0": version "1.0.6--canary.9.0c3f3b7.0" @@ -2359,22 +2359,22 @@ react-docgen-typescript "^2.2.2" tslib "^2.0.0" -"@storybook/react-dom-shim@8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.2.8.tgz#e84ec809f56850c3027be3804b17a13b79bf7271" - integrity sha512-2my3dGBOpBe30+FsSdQOIYCfxMyT68+SEq0qcXxfuax0BkhhJnZLpwvpqOna6EOVTgBD+Tk1TKmjpGwxuwp4rg== +"@storybook/react-dom-shim@8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.2.9.tgz#db31bdab3a995759a9e45b2dc2ca0888a75fc89d" + integrity sha512-uCAjSQEsNk8somVn1j/I1G9G/uUax5byHseIIV0Eq3gVXttGd7gaWcP+TDHtqIaenWHx4l+hCSuCesxiLWmx4Q== -"@storybook/react@8.2.8", "@storybook/react@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.2.8.tgz#dabd9a613a5383333b8f6dc1d3579bc8aea52e75" - integrity sha512-Nln0DDTQ930P4J+SEkWbLSgaDe8eDd5gP6h3l4b5RwT7sRuSyHtTtYHPCnU9U7sLQ3AbMsclgtJukHXDitlccg== +"@storybook/react@8.2.9", "@storybook/react@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.2.9.tgz#91348ab82e699a2d2f48b9721fe781782badc9ac" + integrity sha512-F2xZcTDxxjpbqt7eP8rEHmlksiKmE/qtPusEWEY4N4jK01kN+ncxSl8gkJpUohMEmAnVC5t/1v/sU57xv1DYpg== dependencies: - "@storybook/components" "^8.2.8" + "@storybook/components" "^8.2.9" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "^8.2.8" - "@storybook/preview-api" "^8.2.8" - "@storybook/react-dom-shim" "8.2.8" - "@storybook/theming" "^8.2.8" + "@storybook/manager-api" "^8.2.9" + "@storybook/preview-api" "^8.2.9" + "@storybook/react-dom-shim" "8.2.9" + "@storybook/theming" "^8.2.9" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^18.0.0" @@ -2391,13 +2391,13 @@ type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/test@8.2.8", "@storybook/test@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.2.8.tgz#f2240f7b934ce0d2e3ec4a030b73989bf17ca9c7" - integrity sha512-Lbt4DHP8WhnakTPw981kP85DeoONKN+zVLjFPa5ptllyT+jazZANjIdGhNUlBdIzOw3oyDXhGlWIdtqztS3pSA== +"@storybook/test@8.2.9", "@storybook/test@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.2.9.tgz#097be36f7618a98713661d548a44dfe584143758" + integrity sha512-O5JZ5S8UVVR7V0ru5AiF/uRO+srAVwji0Iik7ihy8gw3V91WQNMmJh2KkdhG0R1enYeBsYZlipOm+AW7f/MmOA== dependencies: "@storybook/csf" "0.1.11" - "@storybook/instrumenter" "8.2.8" + "@storybook/instrumenter" "8.2.9" "@testing-library/dom" "10.1.0" "@testing-library/jest-dom" "6.4.5" "@testing-library/user-event" "14.5.2" @@ -2405,10 +2405,10 @@ "@vitest/spy" "1.6.0" util "^0.12.4" -"@storybook/theming@^8.2.8": - version "8.2.8" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.2.8.tgz#ceddb44a770f93ffef9bab2d1616e89b7f6ccbde" - integrity sha512-jt5oUO82LN3z5aygNdHucBZcErSicIAwzhR5Kz9E/C9wUbhyZhbWsWyhpZaytu8LJUj2YWAIPS8kq/jGx+qLZA== +"@storybook/theming@^8.2.9": + version "8.2.9" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.2.9.tgz#6eb066f8957272c0bcb0078a8a9bc378ca9311d3" + integrity sha512-OL0NFvowPX85N5zIYdgeKKaFm7V4Vgtci093vL3cDZT13LGH6GuEzJKkUFGuUGNPFlJc+EgTj0o6PYKrOLyQ6w== "@swc/counter@^0.1.3": version "0.1.3" @@ -8565,15 +8565,15 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" -storybook@^8.2.8: - version "8.2.8" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.2.8.tgz#174dc371ba6c3ee2caa4b57c1f6ebeade47f6c6b" - integrity sha512-sh4CNCXkieVgJ5GXrCOESS0BjRbQ9wG7BVnurQPl6izNnB9zR8rag+aUmjPZWBwbj55V1BFA5A/vEsCov21qjg== +storybook@^8.2.9: + version "8.2.9" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.2.9.tgz#35a670cb72367709b6ad3627dfb77c5e25a339f0" + integrity sha512-S7Q/Yt4A+nu1O23rg39lQvBqL2Vg+PKXbserDWUR4LFJtfmoZ2xGO8oFIhJmvvhjUBvolw1q7QDeswPq2i0sGw== dependencies: "@babel/core" "^7.24.4" "@babel/types" "^7.24.0" - "@storybook/codemod" "8.2.8" - "@storybook/core" "8.2.8" + "@storybook/codemod" "8.2.9" + "@storybook/core" "8.2.9" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0"