From 0f936ec0e7606cb79434d94096b6e113a7ce78eb Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Fri, 15 Dec 2023 18:35:16 +0100 Subject: refactor(stories): migrate stories to CSF3 format --- .storybook/main.ts | 2 +- .storybook/overrides/docs-container.js | 36 - .storybook/preview.tsx | 12 +- package.json | 1 + .../atoms/buttons/button-link/button-link.mdx | 71 ++ .../buttons/button-link/button-link.stories.ts | 99 +++ .../buttons/button-link/button-link.stories.tsx | 114 --- src/components/atoms/buttons/button/button.mdx | 80 ++ .../atoms/buttons/button/button.stories.ts | 112 +++ .../atoms/buttons/button/button.stories.tsx | 172 ---- src/components/atoms/figure/figure.stories.tsx | 95 +-- src/components/atoms/flip/flip.stories.tsx | 98 ++- .../fields/boolean-field/boolean-field.stories.ts | 31 + .../fields/boolean-field/boolean-field.stories.tsx | 172 ---- .../forms/fields/checkbox/checkbox.stories.ts | 20 + .../atoms/forms/fields/input/input.stories.tsx | 454 ++++++----- .../atoms/forms/fields/radio/radio.stories.ts | 20 + .../atoms/forms/fields/select/select.stories.tsx | 210 ++--- .../forms/fields/text-area/text-area.stories.tsx | 200 ++--- .../atoms/forms/fieldset/fieldset.stories.tsx | 96 +-- src/components/atoms/forms/label/label.stories.ts | 48 ++ src/components/atoms/forms/label/label.stories.tsx | 119 --- .../atoms/forms/legend/legend.stories.tsx | 38 +- src/components/atoms/heading/heading.stories.ts | 69 ++ src/components/atoms/heading/heading.stories.tsx | 106 --- src/components/atoms/images/icons/icon.stories.ts | 135 ++++ src/components/atoms/images/icons/icon.stories.tsx | 210 ----- src/components/atoms/images/logo/logo.stories.ts | 15 + src/components/atoms/images/logo/logo.stories.tsx | 34 - .../atoms/layout/article/article.stories.ts | 17 + .../atoms/layout/article/article.stories.tsx | 34 - src/components/atoms/layout/aside/aside.stories.ts | 17 + .../atoms/layout/aside/aside.stories.tsx | 34 - .../atoms/layout/footer/footer.stories.ts | 17 + .../atoms/layout/footer/footer.stories.tsx | 34 - .../atoms/layout/header/header.stories.ts | 17 + .../atoms/layout/header/header.stories.tsx | 34 - src/components/atoms/layout/main/main.stories.ts | 17 + src/components/atoms/layout/main/main.stories.tsx | 57 -- src/components/atoms/layout/nav/nav.stories.ts | 17 + src/components/atoms/layout/nav/nav.stories.tsx | 34 - .../atoms/layout/section/section.stories.ts | 17 + .../atoms/layout/section/section.stories.tsx | 37 - src/components/atoms/layout/time/time.stories.ts | 17 + src/components/atoms/layout/time/time.stories.tsx | 32 - src/components/atoms/links/link/link.stories.tsx | 222 ++---- .../links/sharing-link/sharing-link.stories.ts | 59 ++ .../links/sharing-link/sharing-link.stories.tsx | 114 --- .../atoms/links/social-link/social-link.stories.ts | 43 + .../links/social-link/social-link.stories.tsx | 66 -- .../description-list/description-list.stories.tsx | 400 ++++++---- src/components/atoms/lists/list/list.stories.tsx | 290 +++---- .../loaders/progress-bar/progress-bar.stories.ts | 23 + .../loaders/progress-bar/progress-bar.stories.tsx | 60 -- .../atoms/loaders/spinner/spinner.stories.ts | 45 ++ .../atoms/loaders/spinner/spinner.stories.tsx | 37 - src/components/atoms/notice/notice.stories.ts | 39 + src/components/atoms/notice/notice.stories.tsx | 86 -- src/components/atoms/overlay/overlay.stories.tsx | 96 +-- src/components/atoms/sidebar/sidebar.stories.ts | 17 + src/components/atoms/sidebar/sidebar.stories.tsx | 60 -- .../visually-hidden/visually-hidden.stories.tsx | 62 +- .../molecules/branding/branding.stories.tsx | 114 +-- .../buttons/back-to-top/back-to-top.stories.ts | 18 + .../buttons/back-to-top/back-to-top.stories.tsx | 58 -- .../buttons/help-button/help-button.stories.ts | 17 + .../buttons/help-button/help-button.stories.tsx | 50 -- src/components/molecules/card/card.stories.tsx | 871 +++++++++++---------- src/components/molecules/code/code.stories.ts | 140 ++++ src/components/molecules/code/code.stories.tsx | 192 ----- .../molecules/collapsible/collapsible.stories.ts | 31 + .../molecules/collapsible/collapsible.stories.tsx | 72 -- .../molecules/colophon/colophon.stories.tsx | 102 +-- .../molecules/copyright/copyright.stories.ts | 26 + .../molecules/copyright/copyright.stories.tsx | 65 -- .../labelled-field/labelled-field.stories.tsx | 386 ++++++--- .../forms/radio-group/radio-group.stories.tsx | 140 ++-- .../molecules/forms/switch/switch.stories.tsx | 99 ++- src/components/molecules/grid/grid.stories.tsx | 430 +++++----- .../images/flipping-logo/flipping-logo.stories.tsx | 47 +- .../meta-list/meta-item/meta-item.stories.tsx | 149 ++-- .../molecules/meta-list/meta-list.stories.tsx | 49 +- .../molecules/modals/modal/modal.stories.tsx | 337 ++++---- .../molecules/modals/tooltip/tooltip.stories.tsx | 44 +- .../molecules/nav/nav-item/nav-item.stories.tsx | 46 +- .../molecules/nav/nav-link/nav-link.stories.tsx | 202 ++--- .../molecules/nav/nav-list/nav-list.stories.tsx | 41 +- .../approved-comment/approved-comment.stories.ts | 65 ++ .../approved-comment/approved-comment.stories.tsx | 126 --- .../pending-comment/pending-comment.stories.ts | 15 + .../pending-comment/pending-comment.stories.tsx | 21 - .../reply-comment-form.stories.tsx | 30 +- .../comments-list/comments-list.stories.ts | 142 ++++ .../comments-list/comments-list.stories.tsx | 188 ----- .../forms/comment-form/comment-form.stories.ts | 23 + .../forms/comment-form/comment-form.stories.tsx | 44 -- .../forms/contact-form/contact-form.stories.ts | 23 + .../forms/contact-form/contact-form.stories.tsx | 35 - .../forms/search-form/search-form.stories.ts | 30 + .../forms/search-form/search-form.stories.tsx | 46 -- .../ackee-toggle/ackee-toggle.stories.ts | 15 + .../ackee-toggle/ackee-toggle.stories.tsx | 21 - .../motion-toggle/motion-toggle.stories.ts | 15 + .../motion-toggle/motion-toggle.stories.tsx | 21 - .../prism-theme-toggle.stories.ts | 15 + .../prism-theme-toggle.stories.tsx | 20 - .../forms/settings-form/settings-form.stories.ts | 24 + .../forms/settings-form/settings-form.stories.tsx | 21 - .../theme-toggle/theme-toggle.stories.ts | 15 + .../theme-toggle/theme-toggle.stories.tsx | 20 - .../nav/breadcrumbs/breadcrumbs.stories.ts | 36 + .../nav/breadcrumbs/breadcrumbs.stories.tsx | 55 -- .../organisms/nav/main-nav/main-nav.stories.tsx | 107 ++- .../organisms/nav/pagination/pagination.stories.ts | 95 +++ .../nav/pagination/pagination.stories.tsx | 150 ---- .../navbar/navbar-item/navbar-item.stories.ts | 30 + .../navbar/navbar-item/navbar-item.stories.tsx | 38 - src/components/organisms/navbar/navbar.stories.tsx | 108 +-- .../post-preview/post-preview.stories.tsx | 204 ++--- .../organisms/posts-list/posts-list.stories.tsx | 259 ++---- src/components/organisms/posts-list/posts-list.tsx | 2 +- .../project-overview/project-overview.stories.tsx | 90 +-- .../widgets/image-widget/image-widget.stories.tsx | 141 ++-- .../widgets/links-widget/links-widget.stories.tsx | 72 +- .../sharing-widget/sharing-widget.stories.tsx | 59 +- .../social-media-widget.stories.tsx | 49 +- .../widgets/toc-widget/toc-widget.stories.tsx | 63 +- src/components/templates/layout/layout.stories.ts | 17 + src/components/templates/layout/layout.stories.tsx | 117 --- .../page/loading-page-comments.stories.tsx | 37 +- .../templates/page/loading-page.stories.ts | 15 + .../templates/page/loading-page.stories.tsx | 22 - .../templates/page/page-comments.stories.tsx | 96 +-- .../templates/page/page-footer.stories.tsx | 58 +- .../templates/page/page-header.stories.tsx | 106 ++- src/components/templates/page/page.stories.tsx | 723 +++++++++-------- yarn.lock | 71 ++ 137 files changed, 5375 insertions(+), 7166 deletions(-) delete mode 100644 .storybook/overrides/docs-container.js create mode 100644 src/components/atoms/buttons/button-link/button-link.mdx create mode 100644 src/components/atoms/buttons/button-link/button-link.stories.ts delete mode 100644 src/components/atoms/buttons/button-link/button-link.stories.tsx create mode 100644 src/components/atoms/buttons/button/button.mdx create mode 100644 src/components/atoms/buttons/button/button.stories.ts delete mode 100644 src/components/atoms/buttons/button/button.stories.tsx create mode 100644 src/components/atoms/forms/fields/boolean-field/boolean-field.stories.ts delete mode 100644 src/components/atoms/forms/fields/boolean-field/boolean-field.stories.tsx create mode 100644 src/components/atoms/forms/fields/checkbox/checkbox.stories.ts create mode 100644 src/components/atoms/forms/fields/radio/radio.stories.ts create mode 100644 src/components/atoms/forms/label/label.stories.ts delete mode 100644 src/components/atoms/forms/label/label.stories.tsx create mode 100644 src/components/atoms/heading/heading.stories.ts delete mode 100644 src/components/atoms/heading/heading.stories.tsx create mode 100644 src/components/atoms/images/icons/icon.stories.ts delete mode 100644 src/components/atoms/images/icons/icon.stories.tsx create mode 100644 src/components/atoms/images/logo/logo.stories.ts delete mode 100644 src/components/atoms/images/logo/logo.stories.tsx create mode 100644 src/components/atoms/layout/article/article.stories.ts delete mode 100644 src/components/atoms/layout/article/article.stories.tsx create mode 100644 src/components/atoms/layout/aside/aside.stories.ts delete mode 100644 src/components/atoms/layout/aside/aside.stories.tsx create mode 100644 src/components/atoms/layout/footer/footer.stories.ts delete mode 100644 src/components/atoms/layout/footer/footer.stories.tsx create mode 100644 src/components/atoms/layout/header/header.stories.ts delete mode 100644 src/components/atoms/layout/header/header.stories.tsx create mode 100644 src/components/atoms/layout/main/main.stories.ts delete mode 100644 src/components/atoms/layout/main/main.stories.tsx create mode 100644 src/components/atoms/layout/nav/nav.stories.ts delete mode 100644 src/components/atoms/layout/nav/nav.stories.tsx create mode 100644 src/components/atoms/layout/section/section.stories.ts delete mode 100644 src/components/atoms/layout/section/section.stories.tsx create mode 100644 src/components/atoms/layout/time/time.stories.ts delete mode 100644 src/components/atoms/layout/time/time.stories.tsx create mode 100644 src/components/atoms/links/sharing-link/sharing-link.stories.ts delete mode 100644 src/components/atoms/links/sharing-link/sharing-link.stories.tsx create mode 100644 src/components/atoms/links/social-link/social-link.stories.ts delete mode 100644 src/components/atoms/links/social-link/social-link.stories.tsx create mode 100644 src/components/atoms/loaders/progress-bar/progress-bar.stories.ts delete mode 100644 src/components/atoms/loaders/progress-bar/progress-bar.stories.tsx create mode 100644 src/components/atoms/loaders/spinner/spinner.stories.ts delete mode 100644 src/components/atoms/loaders/spinner/spinner.stories.tsx create mode 100644 src/components/atoms/notice/notice.stories.ts delete mode 100644 src/components/atoms/notice/notice.stories.tsx create mode 100644 src/components/atoms/sidebar/sidebar.stories.ts delete mode 100644 src/components/atoms/sidebar/sidebar.stories.tsx create mode 100644 src/components/molecules/buttons/back-to-top/back-to-top.stories.ts delete mode 100644 src/components/molecules/buttons/back-to-top/back-to-top.stories.tsx create mode 100644 src/components/molecules/buttons/help-button/help-button.stories.ts delete mode 100644 src/components/molecules/buttons/help-button/help-button.stories.tsx create mode 100644 src/components/molecules/code/code.stories.ts delete mode 100644 src/components/molecules/code/code.stories.tsx create mode 100644 src/components/molecules/collapsible/collapsible.stories.ts delete mode 100644 src/components/molecules/collapsible/collapsible.stories.tsx create mode 100644 src/components/molecules/copyright/copyright.stories.ts delete mode 100644 src/components/molecules/copyright/copyright.stories.tsx create mode 100644 src/components/organisms/comment/approved-comment/approved-comment.stories.ts delete mode 100644 src/components/organisms/comment/approved-comment/approved-comment.stories.tsx create mode 100644 src/components/organisms/comment/pending-comment/pending-comment.stories.ts delete mode 100644 src/components/organisms/comment/pending-comment/pending-comment.stories.tsx create mode 100644 src/components/organisms/comments-list/comments-list.stories.ts delete mode 100644 src/components/organisms/comments-list/comments-list.stories.tsx create mode 100644 src/components/organisms/forms/comment-form/comment-form.stories.ts delete mode 100644 src/components/organisms/forms/comment-form/comment-form.stories.tsx create mode 100644 src/components/organisms/forms/contact-form/contact-form.stories.ts delete mode 100644 src/components/organisms/forms/contact-form/contact-form.stories.tsx create mode 100644 src/components/organisms/forms/search-form/search-form.stories.ts delete mode 100644 src/components/organisms/forms/search-form/search-form.stories.tsx create mode 100644 src/components/organisms/forms/settings-form/ackee-toggle/ackee-toggle.stories.ts delete mode 100644 src/components/organisms/forms/settings-form/ackee-toggle/ackee-toggle.stories.tsx create mode 100644 src/components/organisms/forms/settings-form/motion-toggle/motion-toggle.stories.ts delete mode 100644 src/components/organisms/forms/settings-form/motion-toggle/motion-toggle.stories.tsx create mode 100644 src/components/organisms/forms/settings-form/prism-theme-toggle/prism-theme-toggle.stories.ts delete mode 100644 src/components/organisms/forms/settings-form/prism-theme-toggle/prism-theme-toggle.stories.tsx create mode 100644 src/components/organisms/forms/settings-form/settings-form.stories.ts delete mode 100644 src/components/organisms/forms/settings-form/settings-form.stories.tsx create mode 100644 src/components/organisms/forms/settings-form/theme-toggle/theme-toggle.stories.ts delete mode 100644 src/components/organisms/forms/settings-form/theme-toggle/theme-toggle.stories.tsx create mode 100644 src/components/organisms/nav/breadcrumbs/breadcrumbs.stories.ts delete mode 100644 src/components/organisms/nav/breadcrumbs/breadcrumbs.stories.tsx create mode 100644 src/components/organisms/nav/pagination/pagination.stories.ts delete mode 100644 src/components/organisms/nav/pagination/pagination.stories.tsx create mode 100644 src/components/organisms/navbar/navbar-item/navbar-item.stories.ts delete mode 100644 src/components/organisms/navbar/navbar-item/navbar-item.stories.tsx create mode 100644 src/components/templates/layout/layout.stories.ts delete mode 100644 src/components/templates/layout/layout.stories.tsx create mode 100644 src/components/templates/page/loading-page.stories.ts delete mode 100644 src/components/templates/page/loading-page.stories.tsx diff --git a/.storybook/main.ts b/.storybook/main.ts index 76b1316..27b7662 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -3,7 +3,7 @@ import { RuleSetRule } from 'webpack'; const config: StorybookConfig = { stories: [ - '../src/**!(content)/*.mdx', + '../src/components/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], addons: [ diff --git a/.storybook/overrides/docs-container.js b/.storybook/overrides/docs-container.js deleted file mode 100644 index f539986..0000000 --- a/.storybook/overrides/docs-container.js +++ /dev/null @@ -1,36 +0,0 @@ -import { DocsContainer as BaseContainer } from '@storybook/addon-docs/blocks'; -import { useDarkMode } from 'storybook-dark-mode'; -import dark from '../themes/dark'; -import light from '../themes/light'; - -/** - * Custom Docs Container to support dark theme. - * - * @see https://github.com/hipstersmoothie/storybook-dark-mode/issues/127#issuecomment-1070524402 - */ -export const DocsContainer = ({ children, context }) => { - const isDark = useDarkMode(); - - return ( - { - const storyContext = context.storyById(id); - return { - ...storyContext, - parameters: { - ...storyContext?.parameters, - docs: { - ...storyContext?.parameters?.docs, - theme: isDark ? dark : light, - }, - }, - }; - }, - }} - > - {children} - - ); -}; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index f36013c..47ea5a8 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,6 +1,6 @@ import type { Decorator, Preview } from '@storybook/react'; import { useDarkMode } from 'storybook-dark-mode'; -import { FC, ReactNode, useEffect } from 'react'; +import React, { FC, ReactNode, useEffect } from 'react'; import { IntlProvider } from 'react-intl'; import { AckeeProvider, @@ -9,10 +9,10 @@ import { ThemeProvider, } from '../src/utils/providers'; import '../src/styles/globals.scss'; -import { DocsContainer } from './overrides/docs-container'; import dark from './themes/dark'; import light from './themes/light'; import { useTheme } from '../src/utils/hooks'; +import { DocsContainer } from '@storybook/blocks'; type ThemeWrapperProps = { children: ReactNode; @@ -77,7 +77,13 @@ const preview: Preview = { stylePreview: true, }, docs: { - container: DocsContainer, + container: ({ children, context }) => { + return ( + + {children} + + ); + }, }, }, }; diff --git a/package.json b/package.json index b475656..3448541 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "@storybook/addon-interactions": "^7.5.3", "@storybook/addon-links": "^7.5.3", "@storybook/blocks": "^7.5.3", + "@storybook/client-api": "^7.6.4", "@storybook/nextjs": "^7.5.3", "@storybook/react": "^7.5.3", "@storybook/testing-library": "^0.2.2", diff --git a/src/components/atoms/buttons/button-link/button-link.mdx b/src/components/atoms/buttons/button-link/button-link.mdx new file mode 100644 index 0000000..e22471e --- /dev/null +++ b/src/components/atoms/buttons/button-link/button-link.mdx @@ -0,0 +1,71 @@ +import { ArgTypes, Canvas, Meta, Primary } from '@storybook/blocks'; +import * as ButtonLinkStories from './button-link.stories'; + + + +# Button + + + +## Kind + +The button appearance can change depending on its kind. + +### Primary + + + +### Secondary (default) + + + +### Tertiary + + + +## States + +It can be: +* enabled, +* disabled +* external. + +### Enabled (default) + + + +### Disabled + + + +### External + + + +## Shapes + +It can either: +* be a circle, +* be a rectangle +* be a square, +* or have an automatic shape. + +### Circle + + + +### Rectangle (default) + + + +### Square + + + +### Auto + + + +## Props + + diff --git a/src/components/atoms/buttons/button-link/button-link.stories.ts b/src/components/atoms/buttons/button-link/button-link.stories.ts new file mode 100644 index 0000000..bbf940c --- /dev/null +++ b/src/components/atoms/buttons/button-link/button-link.stories.ts @@ -0,0 +1,99 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { ButtonLink } from './button-link'; + +const meta = { + component: ButtonLink, + title: 'Atoms/Buttons/ButtonLink', +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { + children: 'Button Link', + isDisabled: false, + to: '#', + }, +}; + +export const Primary: Story = { + name: 'Kind: Primary', + args: { + ...Default.args, + kind: 'primary', + }, +}; + +export const Secondary: Story = { + name: 'Kind: Secondary', + args: { + ...Default.args, + kind: 'secondary', + }, +}; + +export const Tertiary: Story = { + name: 'Kind: Tertiary', + args: { + ...Default.args, + kind: 'tertiary', + }, +}; + +export const Enabled: Story = { + name: 'State: Enabled', + args: { + ...Default.args, + isDisabled: false, + }, +}; + +export const Disabled: Story = { + name: 'State: Disabled', + args: { + ...Default.args, + isDisabled: true, + }, +}; + +export const ExternalLink: Story = { + name: 'State: External', + args: { + ...Default.args, + isExternal: true, + }, +}; + +export const Circle: Story = { + name: 'Shape: Circle', + args: { + ...Default.args, + shape: 'circle', + }, +}; + +export const Rectangle: Story = { + name: 'Shape: Rectangle', + args: { + ...Default.args, + shape: 'rectangle', + }, +}; + +export const Square: Story = { + name: 'Shape: Square', + args: { + ...Default.args, + shape: 'square', + }, +}; + +export const Auto: Story = { + name: 'Shape: Auto', + args: { + ...Default.args, + shape: 'auto', + }, +}; diff --git a/src/components/atoms/buttons/button-link/button-link.stories.tsx b/src/components/atoms/buttons/button-link/button-link.stories.tsx deleted file mode 100644 index f048ce9..0000000 --- a/src/components/atoms/buttons/button-link/button-link.stories.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import type { ComponentMeta, ComponentStory } from '@storybook/react'; -import { ButtonLink } from './button-link'; - -/** - * ButtonLink - Storybook Meta - */ -export default { - title: 'Atoms/Buttons/ButtonLink', - component: ButtonLink, - args: { - isExternal: false, - shape: 'rectangle', - }, - argTypes: { - children: { - control: { - type: 'text', - }, - description: 'The link body.', - type: { - name: 'string', - required: true, - }, - }, - isExternal: { - control: { - type: 'boolean', - }, - description: 'Determine if the link is an external link.', - table: { - category: 'Options', - defaultValue: { summary: false }, - }, - type: { - name: 'boolean', - required: false, - }, - }, - kind: { - control: { - type: 'select', - }, - description: 'The link kind.', - options: ['primary', 'secondary', 'tertiary'], - table: { - category: 'Options', - defaultValue: { summary: 'secondary' }, - }, - type: { - name: 'string', - required: false, - }, - }, - shape: { - control: { - type: 'select', - }, - description: 'The link shape.', - options: ['circle', 'rectangle', 'square'], - table: { - category: 'Options', - defaultValue: { summary: 'rectangle' }, - }, - type: { - name: 'string', - required: false, - }, - }, - to: { - control: { - type: 'text', - }, - description: 'The link target.', - type: { - name: 'string', - required: true, - }, - }, - }, -} as ComponentMeta; - -const Template: ComponentStory = (args) => ( - -); - -/** - * ButtonLink Story - Primary - */ -export const Primary = Template.bind({}); -Primary.args = { - children: 'Link', - kind: 'primary', - to: '#', -}; - -/** - * ButtonLink Story - Secondary - */ -export const Secondary = Template.bind({}); -Secondary.args = { - children: 'Link', - kind: 'secondary', - to: '#', -}; - -/** - * ButtonLink Story - Tertiary - */ -export const Tertiary = Template.bind({}); -Tertiary.args = { - children: 'Link', - kind: 'tertiary', - to: '#', -}; diff --git a/src/components/atoms/buttons/button/button.mdx b/src/components/atoms/buttons/button/button.mdx new file mode 100644 index 0000000..d90156e --- /dev/null +++ b/src/components/atoms/buttons/button/button.mdx @@ -0,0 +1,80 @@ +import { ArgTypes, Canvas, Meta, Primary } from '@storybook/blocks'; +import * as ButtonStories from './button.stories'; + + + +# Button + + + +## Kind + +The button appearance can change depending on its kind. + +### Primary + + + +### Secondary (default) + + + +### Tertiary + + + +### Neutral + + + +## States + +It can either: +* be enabled, +* be disabled +* indicate a loading state, +* indicate a pressed state. + +### Enabled (default) + + + +### Disabled + + + +### Loading + + + +### Pressed + + + +## Shapes + +It can either: +* be a circle, +* be a rectangle +* be a square, +* or conserves its initial shape. + +### Circle + + + +### Rectangle (default) + + + +### Square + + + +### Initial + + + +## Props + + diff --git a/src/components/atoms/buttons/button/button.stories.ts b/src/components/atoms/buttons/button/button.stories.ts new file mode 100644 index 0000000..25fb9f8 --- /dev/null +++ b/src/components/atoms/buttons/button/button.stories.ts @@ -0,0 +1,112 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Button } from './button'; + +const meta = { + component: Button, + title: 'Atoms/Buttons/Button', +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { + children: 'Button', + }, +}; + +export const Primary: Story = { + name: 'Kind: Primary', + args: { + ...Default.args, + kind: 'primary', + }, +}; + +export const Secondary: Story = { + name: 'Kind: Secondary', + args: { + ...Default.args, + kind: 'secondary', + }, +}; + +export const Tertiary: Story = { + name: 'Kind: Tertiary', + args: { + ...Default.args, + kind: 'tertiary', + }, +}; + +export const Neutral: Story = { + name: 'Kind: Neutral', + args: { + ...Default.args, + kind: 'neutral', + }, +}; + +export const Enabled: Story = { + name: 'State: Enabled', + args: { + ...Default.args, + }, +}; + +export const Disabled: Story = { + name: 'State: Disabled', + args: { + ...Default.args, + isDisabled: true, + }, +}; + +export const Loading: Story = { + name: 'State: Loading', + args: { + ...Default.args, + isLoading: true, + }, +}; + +export const Pressed: Story = { + name: 'State: Pressed', + args: { + ...Default.args, + isPressed: true, + }, +}; + +export const Circle: Story = { + name: 'Shape: Circle', + args: { + ...Default.args, + shape: 'circle', + }, +}; + +export const Rectangle: Story = { + name: 'Shape: Rectangle', + args: { + ...Default.args, + shape: 'rectangle', + }, +}; + +export const Square: Story = { + name: 'Shape: Square', + args: { + ...Default.args, + shape: 'square', + }, +}; + +export const Initial: Story = { + name: 'Shape: Initial', + args: { + ...Default.args, + shape: 'initial', + }, +}; diff --git a/src/components/atoms/buttons/button/button.stories.tsx b/src/components/atoms/buttons/button/button.stories.tsx deleted file mode 100644 index 5ce28fb..0000000 --- a/src/components/atoms/buttons/button/button.stories.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import type { ComponentMeta, ComponentStory } from '@storybook/react'; -import { Button } from './button'; - -/** - * Button - Storybook Meta - */ -export default { - title: 'Atoms/Buttons/Button', - component: Button, - args: { - type: 'button', - }, - argTypes: { - children: { - control: { - type: 'text', - }, - description: 'The button body.', - type: { - name: 'string', - required: true, - }, - }, - isDisabled: { - control: { - type: 'boolean', - }, - description: 'Should the button be disabled?', - table: { - category: 'Options', - defaultValue: { summary: false }, - }, - type: { - name: 'boolean', - required: false, - }, - }, - isLoading: { - control: { - type: 'boolean', - }, - description: - 'Should the button be disabled because it is loading something?', - table: { - category: 'Options', - defaultValue: { summary: false }, - }, - type: { - name: 'boolean', - required: false, - }, - }, - isPressed: { - control: { - type: 'boolean', - }, - description: 'Define if the button is currently pressed.', - table: { - category: 'Options', - defaultValue: { summary: false }, - }, - type: { - name: 'boolean', - required: false, - }, - }, - kind: { - control: { - type: 'select', - }, - description: 'Button kind.', - options: ['primary', 'secondary', 'tertiary', 'neutral'], - table: { - category: 'Options', - defaultValue: { summary: 'secondary' }, - }, - type: { - name: 'string', - required: false, - }, - }, - onClick: { - control: { - type: null, - }, - description: 'A callback function to handle click.', - table: { - category: 'Events', - }, - type: { - name: 'function', - required: false, - }, - }, - shape: { - control: { - type: 'select', - }, - description: 'The link shape.', - options: ['circle', 'rectangle', 'square', 'initial'], - table: { - category: 'Options', - defaultValue: { summary: 'rectangle' }, - }, - type: { - name: 'string', - required: false, - }, - }, - type: { - control: { - type: 'select', - }, - description: 'Button type attribute.', - options: ['button', 'reset', 'submit'], - table: { - category: 'Options', - defaultValue: { summary: 'button' }, - }, - type: { - name: 'string', - required: false, - }, - }, - }, -} as ComponentMeta; - -const Template: ComponentStory = (args) =>