Update to CSF3

This commit is contained in:
Nathan Bierema 2023-04-06 21:13:24 -04:00
parent 1a41e23db0
commit edaa2fa420
11 changed files with 570 additions and 545 deletions

View File

@ -1,15 +1,16 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { MdFiberManualRecord } from 'react-icons/md'; import { MdFiberManualRecord } from 'react-icons/md';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Button from './'; import Button from './';
import { ButtonProps } from './Button';
export default { const meta: Meta = {
title: 'Button', title: 'Button',
component: Button, component: Button,
}; };
export default meta;
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
height: 100%; height: 100%;
@ -18,41 +19,45 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
const Template: Story<ButtonProps> = (args) => ( type Story = StoryObj<typeof Button>;
export const Default: Story = {
render: (args) => (
<Container> <Container>
<Button {...args} /> <Button {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
title: 'Hello Tooltip! \\a And from new line hello!', title: 'Hello Tooltip! \\a And from new line hello!',
tooltipPosition: 'top', tooltipPosition: 'top',
primary: true, primary: true,
size: 'normal', size: 'normal',
disabled: false, disabled: false,
children: 'Hello Button', children: 'Hello Button',
}; },
Default.argTypes = { argTypes: {
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
type: { control: { disable: true } }, type: { control: { disable: true } },
mark: { control: { disable: true } }, mark: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };
export const Mark = Template.bind({}); export const Mark: Story = {
Mark.args = { render: Default.render,
args: {
mark: 'base08', mark: 'base08',
title: 'Hello Tooltip', title: 'Hello Tooltip',
tooltipPosition: 'top', tooltipPosition: 'top',
size: 'normal', size: 'normal',
disabled: false, disabled: false,
children: <MdFiberManualRecord />, children: <MdFiberManualRecord />,
}; },
Mark.argTypes = { argTypes: {
children: { control: { disable: true } }, children: { control: { disable: true } },
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
type: { control: { disable: true } }, type: { control: { disable: true } },
primary: { control: { disable: true } }, primary: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };

View File

@ -1,15 +1,16 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import ContextMenu from './'; import ContextMenu from './';
import { items } from './data'; import { items } from './data';
import { ContextMenuProps } from './ContextMenu';
export default { const meta: Meta = {
title: 'ContextMenu', title: 'ContextMenu',
component: ContextMenu, component: ContextMenu,
}; };
export default meta;
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
height: 100%; height: 100%;
@ -18,21 +19,23 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
const Template: Story<ContextMenuProps> = (args) => ( type Story = StoryObj<typeof ContextMenu>;
export const Default: Story = {
render: (args) => (
<Container> <Container>
<ContextMenu {...args} /> <ContextMenu {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
visible: true, visible: true,
x: 100, x: 100,
y: 100, y: 100,
items, items,
}; },
Default.argTypes = { argTypes: {
visible: { control: { disable: true } }, visible: { control: { disable: true } },
items: { control: { disable: true } }, items: { control: { disable: true } },
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
},
}; };

View File

@ -1,21 +1,19 @@
import React from 'react'; import React from 'react';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Dialog from './'; import Dialog from './';
import { schema, uiSchema, formData } from '../Form/schema'; import { schema, uiSchema, formData } from '../Form/schema';
import { DialogProps } from './Dialog';
import { Props as FormProps } from '../Form/Form';
export default { const meta: Meta = {
title: 'Dialog', title: 'Dialog',
component: Dialog, component: Dialog,
}; };
const Template: Story<DialogProps | (DialogProps & FormProps<unknown>)> = ( export default meta;
args
) => <Dialog {...args} />;
export const Default = Template.bind({}); type Story = StoryObj<typeof Dialog>;
Default.args = {
export const Default: Story = {
args: {
title: 'Dialog Title', title: 'Dialog Title',
submitText: 'Submit!', submitText: 'Submit!',
open: true, open: true,
@ -24,16 +22,17 @@ Default.args = {
modal: false, modal: false,
fullWidth: false, fullWidth: false,
children: 'Hello Dialog!', children: 'Hello Dialog!',
}; },
Default.argTypes = { argTypes: {
actions: { control: { disable: true } }, actions: { control: { disable: true } },
onDismiss: { control: { disable: true } }, onDismiss: { control: { disable: true } },
onSubmit: { control: { disable: true } }, onSubmit: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };
export const WithForm = Template.bind({}); export const WithForm: Story = {
WithForm.args = { args: {
open: true, open: true,
noHeader: false, noHeader: false,
noFooter: false, noFooter: false,
@ -42,8 +41,8 @@ WithForm.args = {
formData, formData,
schema, schema,
uiSchema, uiSchema,
}; },
WithForm.argTypes = { argTypes: {
title: { control: { disable: true } }, title: { control: { disable: true } },
children: { control: { disable: true } }, children: { control: { disable: true } },
actions: { control: { disable: true } }, actions: { control: { disable: true } },
@ -51,4 +50,5 @@ WithForm.argTypes = {
onDismiss: { control: { disable: true } }, onDismiss: { control: { disable: true } },
onSubmit: { control: { disable: true } }, onSubmit: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };

View File

@ -1,8 +1,7 @@
import React from 'react'; import React from 'react';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Editor from './'; import Editor from './';
import { default as WithTabsComponent, WithTabsProps } from './WithTabs'; import { default as WithTabsComponent, WithTabsProps } from './WithTabs';
import { EditorProps } from './Editor';
const value = ` const value = `
var themes = []; var themes = [];
@ -12,39 +11,39 @@ function getThemes() {
} }
`; `;
export default { const meta: Meta = {
title: 'Editor', title: 'Editor',
component: Editor, component: Editor,
}; };
const Template: Story<EditorProps> = (args) => <Editor {...args} />; export default meta;
export const Default = Template.bind({}); type Story = StoryObj<typeof Editor>;
Default.args = {
export const Default: Story = {
args: {
value, value,
lineNumbers: true, lineNumbers: true,
lineWrapping: false, lineWrapping: false,
foldGutter: true, foldGutter: true,
readOnly: false, readOnly: false,
autofocus: true, autofocus: true,
}; },
Default.argTypes = { argTypes: {
autofocus: { control: { disable: true } }, autofocus: { control: { disable: true } },
mode: { control: { disable: true } }, mode: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
onChange: { control: { disable: true } }, onChange: { control: { disable: true } },
},
}; };
const WithTabsTemplate: Story<WithTabsProps> = (args) => ( export const WithTabs: StoryObj<WithTabsProps> = {
<WithTabsComponent {...args} /> render: (args) => <WithTabsComponent {...args} />,
); args: {
export const WithTabs = WithTabsTemplate.bind({});
WithTabs.args = {
lineNumbers: true, lineNumbers: true,
position: 'left', position: 'left',
}; },
WithTabs.argTypes = { argTypes: {
value: { control: { disable: true } }, value: { control: { disable: true } },
mode: { control: { disable: true } }, mode: { control: { disable: true } },
lineWrapping: { control: { disable: true } }, lineWrapping: { control: { disable: true } },
@ -53,4 +52,5 @@ WithTabs.argTypes = {
foldGutter: { control: { disable: true } }, foldGutter: { control: { disable: true } },
autofocus: { control: { disable: true } }, autofocus: { control: { disable: true } },
onChange: { control: { disable: true } }, onChange: { control: { disable: true } },
} as any; } as any,
};

View File

@ -1,26 +1,28 @@
import React from 'react'; import React from 'react';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Form from './'; import Form from './';
import { schema, uiSchema, formData } from './schema'; import { schema, uiSchema, formData } from './schema';
import { Props as FormProps } from './Form';
export default { const meta: Meta = {
title: 'Form', title: 'Form',
component: Form, component: Form,
}; };
const Template: Story<FormProps<unknown>> = (args) => <Form {...args} />; export default meta;
export const Default = Template.bind({}); type Story = StoryObj<typeof Form>;
Default.args = {
export const Default: Story = {
args: {
formData, formData,
schema, schema,
uiSchema, uiSchema,
submitText: 'Submit', submitText: 'Submit',
}; },
Default.argTypes = { argTypes: {
children: { control: { disable: true } }, children: { control: { disable: true } },
primaryButton: { control: { disable: true } }, primaryButton: { control: { disable: true } },
noSubmit: { control: { disable: true } }, noSubmit: { control: { disable: true } },
widgets: { control: { disable: true } }, widgets: { control: { disable: true } },
},
}; };

View File

@ -1,8 +1,7 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Notification from './'; import Notification from './';
import { NotificationProps } from './Notification';
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
@ -12,23 +11,27 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
export default { const meta: Meta = {
title: 'Notification', title: 'Notification',
component: Notification, component: Notification,
}; };
const Template: Story<NotificationProps> = (args) => ( export default meta;
type Story = StoryObj<typeof Notification>;
export const Default: Story = {
render: (args) => (
<Container> <Container>
<Notification {...args} /> <Notification {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
type: 'warning', type: 'warning',
children: 'Hello Notification', children: 'Hello Notification',
}; },
Default.argTypes = { argTypes: {
onClose: { control: { disable: true } }, onClose: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };

View File

@ -1,8 +1,7 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import SegmentedControl from './'; import SegmentedControl from './';
import { SegmentedControlProps } from './SegmentedControl';
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
@ -12,25 +11,28 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
export default { const meta: Meta = {
title: 'SegmentedControl', title: 'SegmentedControl',
component: SegmentedControl, component: SegmentedControl,
}; };
// eslint-disable-next-line react/prop-types export default meta;
const Template: Story<SegmentedControlProps> = ({ values, ...args }) => (
type Story = StoryObj<typeof SegmentedControl>;
export const Default: Story = {
render: ({ values, ...args }) => (
<Container> <Container>
<SegmentedControl values={['Button1', 'Button2', 'Button3']} {...args} /> <SegmentedControl values={['Button1', 'Button2', 'Button3']} {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
selected: 'Button1', selected: 'Button1',
disabled: false, disabled: false,
}; },
Default.argTypes = { argTypes: {
values: { control: { disable: true } }, values: { control: { disable: true } },
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };

View File

@ -2,8 +2,7 @@ import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import Select from './'; import Select from './';
import { options } from './options'; import { options } from './options';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import { SelectProps } from './Select';
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
@ -17,18 +16,17 @@ const Container = styled.div`
} }
`; `;
export default { const meta: Meta = {
title: 'Select', title: 'Select',
component: Select, component: Select,
}; };
type TemplateArgs = Omit< export default meta;
SelectProps<{ value: string; label: string }, boolean>,
'value'
> & { value: string };
// eslint-disable-next-line react/prop-types type Story = StoryObj<typeof Select>;
const Template: Story<TemplateArgs> = ({ value, ...args }) => (
export const Default: Story = {
render: ({ value, ...args }) => (
<Container> <Container>
<Select <Select
options={options} options={options}
@ -36,10 +34,8 @@ const Template: Story<TemplateArgs> = ({ value, ...args }) => (
{...args} {...args}
/> />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
value: 'one', value: 'one',
maxMenuHeight: 300, maxMenuHeight: 300,
isClearable: false, isClearable: false,
@ -48,9 +44,10 @@ Default.args = {
isMulti: false, isMulti: false,
isSearchable: true, isSearchable: true,
menuPlacement: 'bottom', menuPlacement: 'bottom',
}; },
Default.argTypes = { argTypes: {
onChange: { onChange: {
action: 'selected', action: 'selected',
}, },
},
}; };

View File

@ -1,8 +1,7 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Slider from './'; import Slider from './';
import { SliderProps } from './Slider';
const Container = styled.div` const Container = styled.div`
display: flex; display: flex;
@ -12,19 +11,22 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
export default { const meta: Meta = {
title: 'Slider', title: 'Slider',
component: Slider, component: Slider,
}; };
const Template: Story<SliderProps> = (args) => ( export default meta;
type Story = StoryObj<typeof Slider>;
export const Default: Story = {
render: (args) => (
<Container> <Container>
<Slider {...args} /> <Slider {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
value: 0, value: 0,
min: 0, min: 0,
max: 100, max: 100,
@ -32,8 +34,9 @@ Default.args = {
sublabel: '(sublabel}', sublabel: '(sublabel}',
withValue: false, withValue: false,
disabled: false, disabled: false,
}; },
Default.argTypes = { argTypes: {
onChange: { control: { disable: true } }, onChange: { control: { disable: true } },
theme: { control: { disable: true } }, theme: { control: { disable: true } },
},
}; };

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import Tabs from './'; import Tabs from './';
import { tabs, simple10Tabs } from './data'; import { tabs, simple10Tabs } from './data';
import { TabsProps } from './Tabs'; import { TabsProps } from './Tabs';
@ -13,41 +13,49 @@ const Container = styled.div`
align-items: center; align-items: center;
`; `;
export default { const meta: Meta = {
title: 'Tabs', title: 'Tabs',
component: Tabs, component: Tabs,
}; };
const Template: Story<TabsProps<object>> = (args) => ( export default meta;
type Story = StoryObj<typeof Tabs>;
export const Default: Story = {
render: (args) => (
<Container> <Container>
<Tabs {...args} /> <Tabs {...args} />
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
tabs: simple10Tabs, tabs: simple10Tabs,
selected: '2', selected: '2',
main: true, main: true,
collapsible: true, collapsible: true,
position: 'left', position: 'left',
}; },
Default.argTypes = { argTypes: {
tabs: { control: { disable: true } }, tabs: { control: { disable: true } },
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
},
}; };
export const WithContent = ( export const WithContext: StoryObj<TabsProps<{ selected: string }>> = {
Template as Story<TabsProps<{ selected: string }>> render: (args) => (
).bind({}); <Container>
WithContent.args = { <Tabs {...args} />
</Container>
),
args: {
tabs, tabs,
selected: 'Tab2', selected: 'Tab2',
main: false, main: false,
collapsible: false, collapsible: false,
position: 'left', position: 'left',
}; },
WithContent.argTypes = { argTypes: {
tabs: { control: { disable: true } }, tabs: { control: { disable: true } },
onClick: { control: { disable: true } }, onClick: { control: { disable: true } },
},
}; };

View File

@ -1,6 +1,6 @@
import React, { ReactNode } from 'react'; import React, { ReactNode } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { Story } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import { MdPlayArrow } from 'react-icons/md'; import { MdPlayArrow } from 'react-icons/md';
import { MdFiberManualRecord } from 'react-icons/md'; import { MdFiberManualRecord } from 'react-icons/md';
import { MdKeyboardArrowLeft } from 'react-icons/md'; import { MdKeyboardArrowLeft } from 'react-icons/md';
@ -34,11 +34,13 @@ const SliderContainer = styled.div`
height: 80px; height: 80px;
`; `;
export default { const meta: Meta = {
title: 'Toolbar', title: 'Toolbar',
component: Toolbar, component: Toolbar,
}; };
export default meta;
interface TemplateArgs { interface TemplateArgs {
borderPosition: BorderPosition; borderPosition: BorderPosition;
title?: string; title?: string;
@ -48,7 +50,8 @@ interface TemplateArgs {
label: ReactNode; label: ReactNode;
} }
const Template: Story<TemplateArgs> = ({ export const Default: StoryObj<TemplateArgs> = {
render: ({
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
borderPosition, borderPosition,
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
@ -86,17 +89,15 @@ const Template: Story<TemplateArgs> = ({
<Select options={options} /> <Select options={options} />
</Toolbar> </Toolbar>
</Container> </Container>
); ),
args: {
export const Default = Template.bind({});
Default.args = {
borderPosition: 'top', borderPosition: 'top',
title: 'Hello Tooltip', title: 'Hello Tooltip',
tooltipPosition: 'top', tooltipPosition: 'top',
disabled: false, disabled: false,
label: 'Hello Button', label: 'Hello Button',
}; },
Default.argTypes = { argTypes: {
borderPosition: { borderPosition: {
control: { control: {
type: 'select', type: 'select',
@ -121,6 +122,7 @@ Default.argTypes = {
onClick: { onClick: {
action: 'button clicked', action: 'button clicked',
}, },
},
}; };
interface TabsTemplateArgs { interface TabsTemplateArgs {
@ -136,7 +138,8 @@ interface TabsTemplateArgs {
position: Position; position: Position;
} }
const TabsTemplate: Story<TabsTemplateArgs> = ({ export const Tabs: StoryObj<TabsTemplateArgs> = {
render: ({
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
title, title,
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
@ -187,10 +190,8 @@ const TabsTemplate: Story<TabsTemplateArgs> = ({
</Button> </Button>
</Toolbar> </Toolbar>
</Container> </Container>
); ),
args: {
export const Tabs = TabsTemplate.bind({});
Tabs.args = {
title: 'Hello Tooltip', title: 'Hello Tooltip',
tooltipPosition: 'top', tooltipPosition: 'top',
disabled: false, disabled: false,
@ -199,8 +200,8 @@ Tabs.args = {
main: true, main: true,
collapsible: true, collapsible: true,
position: 'center', position: 'center',
}; },
Tabs.argTypes = { argTypes: {
tooltipPosition: { tooltipPosition: {
control: { control: {
type: 'select', type: 'select',
@ -228,6 +229,7 @@ Tabs.argTypes = {
options: ['left', 'right', 'center'], options: ['left', 'right', 'center'],
}, },
}, },
},
}; };
interface WithSliderTemplateArgs { interface WithSliderTemplateArgs {
@ -246,7 +248,8 @@ interface WithSliderTemplateArgs {
segmentedControlOnClick: (value: string) => void; segmentedControlOnClick: (value: string) => void;
} }
const WithSliderTemplate: Story<WithSliderTemplateArgs> = ({ export const WithSlider: StoryObj<WithSliderTemplateArgs> = {
render: ({
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
title, title,
// eslint-disable-next-line react/prop-types // eslint-disable-next-line react/prop-types
@ -315,10 +318,8 @@ const WithSliderTemplate: Story<WithSliderTemplateArgs> = ({
</Toolbar> </Toolbar>
</SliderContainer> </SliderContainer>
</Container> </Container>
); ),
args: {
export const WithSlider = WithSliderTemplate.bind({});
WithSlider.args = {
title: 'Play', title: 'Play',
tooltipPosition: 'top', tooltipPosition: 'top',
value: 80, value: 80,
@ -327,8 +328,8 @@ WithSlider.args = {
label: 'Slider label', label: 'Slider label',
withValue: false, withValue: false,
selected: 'live', selected: 'live',
}; },
WithSlider.argTypes = { argTypes: {
tooltipPosition: { tooltipPosition: {
control: { control: {
type: 'select', type: 'select',
@ -365,4 +366,5 @@ WithSlider.argTypes = {
segmentedControlOnClick: { segmentedControlOnClick: {
action: 'button selected', action: 'button selected',
}, },
},
}; };