From 94448fa278ab352a741ff13f22d6104869571144 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Wed, 18 Oct 2023 19:25:02 +0200 Subject: feat(components): add a generic Grid component * merge Columns, Gallery and CardsList into Grid component * add more options to control the grid --- src/components/molecules/grid/grid.stories.tsx | 140 +++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/components/molecules/grid/grid.stories.tsx (limited to 'src/components/molecules/grid/grid.stories.tsx') diff --git a/src/components/molecules/grid/grid.stories.tsx b/src/components/molecules/grid/grid.stories.tsx new file mode 100644 index 0000000..ce3ee2b --- /dev/null +++ b/src/components/molecules/grid/grid.stories.tsx @@ -0,0 +1,140 @@ +import type { ComponentMeta, ComponentStory } from '@storybook/react'; +import type { FC, ReactNode } from 'react'; +import { Grid } from './grid'; + +export default { + title: 'Molecules/Grid', + component: Grid, + argTypes: { + items: { + description: 'The grid items.', + type: { + name: 'object', + required: true, + value: {}, + }, + }, + }, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +type ItemProps = { + children: ReactNode; +}; + +const Item: FC = ({ children }) => ( +
{children}
+); + +export const Default = Template.bind({}); +Default.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], +}; + +export const OneColumn = Template.bind({}); +OneColumn.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + ], + col: 1, + gap: 'sm', +}; + +export const TwoColumns = Template.bind({}); +TwoColumns.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + ], + col: 2, + gap: 'sm', +}; + +export const ThreeColumns = Template.bind({}); +ThreeColumns.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + ], + col: 3, + gap: 'sm', +}; + +export const FixedSize = Template.bind({}); +FixedSize.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], + size: '300px', + gap: 'sm', +}; + +export const MaxSize = Template.bind({}); +MaxSize.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], + sizeMax: '300px', + gap: 'sm', +}; + +export const MinSize = Template.bind({}); +MinSize.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], + sizeMin: '100px', + gap: 'sm', +}; + +export const MinAndMaxSize = Template.bind({}); +MinAndMaxSize.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], + sizeMax: '300px', + sizeMin: '100px', + gap: 'sm', +}; + +export const Fill = Template.bind({}); +Fill.args = { + items: [ + { id: 'item-1', item: Item 1 }, + { id: 'item-2', item: Item 2 }, + { id: 'item-3', item: Item 3 }, + { id: 'item-4', item: Item 4 }, + { id: 'item-5', item: Item 5 }, + ], + col: 'auto-fill', + sizeMin: '100px', + gap: 'sm', +}; -- cgit v1.2.3