aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/molecules/grid/grid.stories.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-10-18 19:25:02 +0200
committerArmand Philippot <git@armandphilippot.com>2023-11-11 18:14:41 +0100
commit94448fa278ab352a741ff13f22d6104869571144 (patch)
tree2185e77f2866d11a0144d4ac5a01c71a76807341 /src/components/molecules/grid/grid.stories.tsx
parentc153f93dc8691a71dc76aad3dd618298da9d238a (diff)
feat(components): add a generic Grid component
* merge Columns, Gallery and CardsList into Grid component * add more options to control the grid
Diffstat (limited to 'src/components/molecules/grid/grid.stories.tsx')
-rw-r--r--src/components/molecules/grid/grid.stories.tsx140
1 files changed, 140 insertions, 0 deletions
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<typeof Grid>;
+
+const Template: ComponentStory<typeof Grid> = (args) => <Grid {...args} />;
+
+type ItemProps = {
+ children: ReactNode;
+};
+
+const Item: FC<ItemProps> = ({ children }) => (
+ <div style={{ border: '1px solid #000', padding: '1rem' }}>{children}</div>
+);
+
+export const Default = Template.bind({});
+Default.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+};
+
+export const OneColumn = Template.bind({});
+OneColumn.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ ],
+ col: 1,
+ gap: 'sm',
+};
+
+export const TwoColumns = Template.bind({});
+TwoColumns.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ ],
+ col: 2,
+ gap: 'sm',
+};
+
+export const ThreeColumns = Template.bind({});
+ThreeColumns.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ ],
+ col: 3,
+ gap: 'sm',
+};
+
+export const FixedSize = Template.bind({});
+FixedSize.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+ size: '300px',
+ gap: 'sm',
+};
+
+export const MaxSize = Template.bind({});
+MaxSize.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+ sizeMax: '300px',
+ gap: 'sm',
+};
+
+export const MinSize = Template.bind({});
+MinSize.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+ sizeMin: '100px',
+ gap: 'sm',
+};
+
+export const MinAndMaxSize = Template.bind({});
+MinAndMaxSize.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+ sizeMax: '300px',
+ sizeMin: '100px',
+ gap: 'sm',
+};
+
+export const Fill = Template.bind({});
+Fill.args = {
+ items: [
+ { id: 'item-1', item: <Item>Item 1</Item> },
+ { id: 'item-2', item: <Item>Item 2</Item> },
+ { id: 'item-3', item: <Item>Item 3</Item> },
+ { id: 'item-4', item: <Item>Item 4</Item> },
+ { id: 'item-5', item: <Item>Item 5</Item> },
+ ],
+ col: 'auto-fill',
+ sizeMin: '100px',
+ gap: 'sm',
+};