diff --git a/packages/react/src/components/MultiSelect/MultiSelectGroup/MultiSelectGroup.story.tsx b/packages/react/src/components/MultiSelect/MultiSelectGroup/MultiSelectGroup.story.tsx new file mode 100644 index 000000000..03b31db59 --- /dev/null +++ b/packages/react/src/components/MultiSelect/MultiSelectGroup/MultiSelectGroup.story.tsx @@ -0,0 +1,97 @@ +import { Meta, StoryObj } from '@storybook/react' +import styled from 'styled-components' +import MultiSelect, { MultiSelectGroup } from '..' + +const StyledMultiSelectGroup = styled(MultiSelectGroup)` + display: grid; + grid-template-columns: 1fr; + gap: 8px; +` + +export default { + title: 'MultiSelect/MultiSelectGroup', + component: MultiSelectGroup, + args: { + name: '', + label: '', + disabled: false, + readonly: false, + invalid: false, + variant: 'default', + }, + argTypes: { + name: { + control: { + type: 'text', + }, + }, + label: { + control: { + type: 'text', + }, + }, + disabled: { + control: { + type: 'boolean', + }, + }, + readonly: { + control: { + type: 'boolean', + }, + }, + invalid: { + control: { + type: 'boolean', + }, + }, + }, + render: function Render({ + name, + label, + onChange, + disabled, + readonly, + invalid, + selected, + className, + }) { + return ( + + {[1, 2, 3, 4].map((idx) => ( + + 選択肢{idx} + + ))} + + ) + }, +} as Meta + +export const Basic: StoryObj = { + args: { + selected: ['選択肢1', '選択肢3'], + }, +} + +export const Invalid: StoryObj = { + args: { + name: 'defaultName', + invalid: true, + }, +} diff --git a/packages/react/src/components/MultiSelect/MultiSelectGroup/__snapshots__/MultiSelectGroup.story.storyshot b/packages/react/src/components/MultiSelect/MultiSelectGroup/__snapshots__/MultiSelectGroup.story.storyshot new file mode 100644 index 000000000..06a00e568 --- /dev/null +++ b/packages/react/src/components/MultiSelect/MultiSelectGroup/__snapshots__/MultiSelectGroup.story.storyshot @@ -0,0 +1,508 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Storyshots MultiSelect/MultiSelectGroup Basic 1`] = ` +.c1 { + display: grid; + grid-template-columns: auto 1fr; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + cursor: pointer; + gap: 4px; +} + +.c1:disabled, +.c1[aria-disabled]:not([aria-disabled='false']) { + opacity: 0.32; + cursor: default; +} + +.c4 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + line-height: 22px; + display: flow-root; + color: var(--charcoal-text2); +} + +.c4::before { + display: block; + width: 0; + height: 0; + content: ''; + margin-top: -4px; +} + +.c4::after { + display: block; + width: 0; + height: 0; + content: ''; + margin-bottom: -4px; +} + +.c2[type='checkbox'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: block; + width: 20px; + height: 20px; + margin: 0; + background-color: var(--charcoal-text3); + border-radius: 999999px; + -webkit-transition: 0.2s background-color,0.2s box-shadow; + transition: 0.2s background-color,0.2s box-shadow; +} + +.c2[type='checkbox']:checked { + background-color: var(--charcoal-brand); +} + +.c2[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:checked:hover[aria-disabled='false'] { + background-color: var(--charcoal-brand-hover); +} + +.c2[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:checked:active[aria-disabled='false'] { + background-color: var(--charcoal-brand-press); +} + +.c2[type='checkbox']:hover:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:hover[aria-disabled='false'] { + background-color: var(--charcoal-text3-hover); +} + +.c2[type='checkbox']:active:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:active[aria-disabled='false'] { + background-color: var(--charcoal-text3-press); +} + +.c3 { + position: absolute; + top: -2px; + left: -2px; + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 24px; + height: 24px; + border-radius: 999999px; + color: var(--charcoal-text5); + -webkit-transition: 0.2s box-shadow; + transition: 0.2s box-shadow; +} + +.c0 { + display: grid; + grid-template-columns: 1fr; + gap: 8px; +} + +
+
+ + + + +
+
+`; + +exports[`Storyshots MultiSelect/MultiSelectGroup Invalid 1`] = ` +.c1 { + display: grid; + grid-template-columns: auto 1fr; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + cursor: pointer; + gap: 4px; +} + +.c1:disabled, +.c1[aria-disabled]:not([aria-disabled='false']) { + opacity: 0.32; + cursor: default; +} + +.c4 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + line-height: 22px; + display: flow-root; + color: var(--charcoal-text2); +} + +.c4::before { + display: block; + width: 0; + height: 0; + content: ''; + margin-top: -4px; +} + +.c4::after { + display: block; + width: 0; + height: 0; + content: ''; + margin-bottom: -4px; +} + +.c2[type='checkbox'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: block; + width: 20px; + height: 20px; + margin: 0; + background-color: var(--charcoal-text3); + border-radius: 999999px; + -webkit-transition: 0.2s background-color,0.2s box-shadow; + transition: 0.2s background-color,0.2s box-shadow; +} + +.c2[type='checkbox']:checked { + background-color: var(--charcoal-brand); +} + +.c2[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:checked:hover[aria-disabled='false'] { + background-color: var(--charcoal-brand-hover); +} + +.c2[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:checked:active[aria-disabled='false'] { + background-color: var(--charcoal-brand-press); +} + +.c2[type='checkbox']:hover:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:hover[aria-disabled='false'] { + background-color: var(--charcoal-text3-hover); +} + +.c2[type='checkbox']:active:not(:disabled):not([aria-disabled]), +.c2[type='checkbox']:active[aria-disabled='false'] { + background-color: var(--charcoal-text3-press); +} + +.c2[type='checkbox']:not(:disabled):not([aria-disabled]), +.c2[type='checkbox'][aria-disabled='false'] { + box-shadow: 0 0 0 4px rgba(255,43,0,0.32); +} + +.c3 { + position: absolute; + top: -2px; + left: -2px; + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 24px; + height: 24px; + border-radius: 999999px; + color: var(--charcoal-text5); + -webkit-transition: 0.2s box-shadow; + transition: 0.2s box-shadow; +} + +.c0 { + display: grid; + grid-template-columns: 1fr; + gap: 8px; +} + +
+
+ + + + +
+
+`; diff --git a/packages/react/src/components/MultiSelect/__snapshots__/index.story.storyshot b/packages/react/src/components/MultiSelect/__snapshots__/index.story.storyshot index 6c91eb26a..afd08541f 100644 --- a/packages/react/src/components/MultiSelect/__snapshots__/index.story.storyshot +++ b/packages/react/src/components/MultiSelect/__snapshots__/index.story.storyshot @@ -133,7 +133,7 @@ exports[`Storyshots MultiSelect Default 1`] = ` > `; -exports[`Storyshots MultiSelect Invalid 1`] = ` -.c1 { - display: grid; - grid-template-columns: auto 1fr; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - position: relative; - cursor: pointer; - gap: 4px; -} - -.c1:disabled, -.c1[aria-disabled]:not([aria-disabled='false']) { - opacity: 0.32; - cursor: default; -} - -.c4 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - font-size: 14px; - line-height: 22px; - display: flow-root; - color: var(--charcoal-text2); -} - -.c4::before { - display: block; - width: 0; - height: 0; - content: ''; - margin-top: -4px; -} - -.c4::after { - display: block; - width: 0; - height: 0; - content: ''; - margin-bottom: -4px; -} - -.c2[type='checkbox'] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - display: block; - width: 20px; - height: 20px; - margin: 0; - background-color: var(--charcoal-text3); - border-radius: 999999px; - -webkit-transition: 0.2s background-color,0.2s box-shadow; - transition: 0.2s background-color,0.2s box-shadow; -} - -.c2[type='checkbox']:checked { - background-color: var(--charcoal-brand); -} - -.c2[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]), -.c2[type='checkbox']:checked:hover[aria-disabled='false'] { - background-color: var(--charcoal-brand-hover); -} - -.c2[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]), -.c2[type='checkbox']:checked:active[aria-disabled='false'] { - background-color: var(--charcoal-brand-press); -} - -.c2[type='checkbox']:hover:not(:disabled):not([aria-disabled]), -.c2[type='checkbox']:hover[aria-disabled='false'] { - background-color: var(--charcoal-text3-hover); -} - -.c2[type='checkbox']:active:not(:disabled):not([aria-disabled]), -.c2[type='checkbox']:active[aria-disabled='false'] { - background-color: var(--charcoal-text3-press); -} - -.c2[type='checkbox']:not(:disabled):not([aria-disabled]), -.c2[type='checkbox'][aria-disabled='false'] { - box-shadow: 0 0 0 4px rgba(255,43,0,0.32); -} - -.c3 { - position: absolute; - top: -2px; - left: -2px; - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - width: 24px; - height: 24px; - border-radius: 999999px; - color: var(--charcoal-text5); - -webkit-transition: 0.2s box-shadow; - transition: 0.2s box-shadow; -} - -.c0 { - display: grid; - grid-template-columns: 1fr; - gap: 8px; -} - -
-
- - - - -
-
-`; - exports[`Storyshots MultiSelect Overlay 1`] = ` .c1 { display: grid; @@ -647,7 +391,7 @@ exports[`Storyshots MultiSelect Overlay 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢1" @@ -677,7 +421,7 @@ exports[`Storyshots MultiSelect Overlay 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢2" @@ -707,7 +451,7 @@ exports[`Storyshots MultiSelect Overlay 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢3" @@ -737,7 +481,7 @@ exports[`Storyshots MultiSelect Overlay 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢4" @@ -898,7 +642,7 @@ exports[`Storyshots MultiSelect Playground 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢1" @@ -928,7 +672,7 @@ exports[`Storyshots MultiSelect Playground 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢2" @@ -958,7 +702,7 @@ exports[`Storyshots MultiSelect Playground 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢3" @@ -988,7 +732,7 @@ exports[`Storyshots MultiSelect Playground 1`] = ` checked={false} className="c2" disabled={false} - name="defaultName" + name="" onChange={[Function]} type="checkbox" value="選択肢4" diff --git a/packages/react/src/components/MultiSelect/index.story.tsx b/packages/react/src/components/MultiSelect/index.story.tsx index 3de025dc1..0b22d154b 100644 --- a/packages/react/src/components/MultiSelect/index.story.tsx +++ b/packages/react/src/components/MultiSelect/index.story.tsx @@ -1,42 +1,18 @@ import { useState } from 'react' -import { Story } from '../../_lib/compat' import styled from 'styled-components' import { MultiSelectGroup, default as MultiSelect } from '.' +import { Meta, StoryObj } from '@storybook/react' + +const StyledMultiSelectGroup = styled(MultiSelectGroup)` + display: grid; + grid-template-columns: 1fr; + gap: 8px; +` export default { title: 'MultiSelect', component: MultiSelect, argTypes: { - name: { - control: { - type: 'text', - }, - }, - label: { - control: { - type: 'text', - }, - }, - selected: { - control: { - type: 'boolean', - }, - }, - disabled: { - control: { - type: 'boolean', - }, - }, - readonly: { - control: { - type: 'boolean', - }, - }, - invalid: { - control: { - type: 'boolean', - }, - }, variant: { control: { type: 'inline-radio', @@ -44,173 +20,55 @@ export default { }, }, }, -} - -type Props = { - name: string - label: string - selected: boolean - onChange: (selected: string[]) => void - disabled?: boolean - readonly?: boolean - invalid?: boolean - variant?: 'default' | 'overlay' - className?: string -} - -const StyledMultiSelectGroup = styled(MultiSelectGroup)` - display: grid; - grid-template-columns: 1fr; - gap: 8px; -` - -const Template: Story = ({ - name, - label, - selected, - onChange, - disabled, - readonly, - invalid, - variant, - className, -}) => { - return ( - - {[1, 2, 3, 4].map((idx) => ( - - 選択肢{idx} - - ))} - - ) -} - -export const Default = Template.bind({}) -Default.args = { - name: '', - label: '', - selected: true, - disabled: false, - readonly: false, - invalid: false, - variant: 'default', - // eslint-disable-next-line no-console - onChange: (selected) => console.log(selected), -} - -type PlaygroundProps = { - name: string - label: string - disabled?: boolean - readonly?: boolean - invalid?: boolean - className?: string - variant?: 'default' | 'overlay' -} - -export const Playground: Story = ({ className, ...props }) => { - const [selected, setSelected] = useState([]) + args: { + variant: 'default', + }, + render: function Render(args) { + return ( + { + // eslint-disable-next-line no-console + console.log('click') + }} + selected={[]} + > + {[1, 2, 3, 4].map((idx) => ( + + 選択肢{idx} + + ))} + + ) + }, +} as Meta - return ( - - {[1, 2, 3, 4].map((idx) => ( - - 選択肢{idx} - - ))} - - ) -} -Playground.args = { - name: 'defaultName', - label: '', - disabled: false, - readonly: false, - invalid: false, - variant: 'default', -} +export const Default: StoryObj = {} -export const Invalid: Story = ({ className, ...props }) => { - const [selected, setSelected] = useState([]) +export const Playground: StoryObj = { + render: function Render(args) { + const [selected, setSelected] = useState([]) - return ( - - {[1, 2, 3, 4].map((idx) => ( - - 選択肢{idx} - - ))} - - ) -} -Invalid.args = { - name: 'defaultName', - label: '', - disabled: false, - readonly: false, - variant: 'default', + return ( + + {[1, 2, 3, 4].map((idx) => ( + + 選択肢{idx} + + ))} + + ) + }, } -export const Overlay: Story = ({ className, ...props }) => { - const [selected, setSelected] = useState([]) - - return ( - - {[1, 2, 3, 4].map((idx) => ( - - 選択肢{idx} - - ))} - - ) -} -Overlay.args = { - name: 'defaultName', - label: '', - disabled: false, - readonly: false, +export const Overlay: StoryObj = { + args: { + variant: 'overlay', + }, }