Skip to content

Commit b347360

Browse files
talissoncostaclaude
andcommitted
feat(storybook): add stories for 39 components
Stories organised into sidebar categories: - Forms: Button, ButtonDropdown, Checkbox, CheckboxGroup, GhostInput, Radio, Switch - Feedback: Banner, EmptyState, InfoMessage, Loader, WarningMessage - Navigation: Breadcrumb, NavSubLink, SidebarLink, Tabs - Layout: AccordionCard, Card, FormGroup, PageTitle, Panel, Row - Data Display: BooleanDotIndicator, ClearFilters, Confidence, DropdownMenu, IdentifierString, LabelWithTooltip, Logo, SettingTitle, StatItem, ToggleChip, Tooltip, VCSProviderTag - Modals: Modal (Alert, Header, CloseButton), ModalDefault - Patterns: SettingRow, Skeleton - Icons: Icons catalogue Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 5385990 commit b347360

38 files changed

+1104
-5
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import AccordionCard from 'components/base/accordion/AccordionCard'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'padded' },
8+
title: 'Components/Layout/AccordionCard',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
export const Default: Story = {
15+
render: () => (
16+
<AccordionCard title='Summary'>
17+
<p className='mb-0'>Accordion content goes here.</p>
18+
</AccordionCard>
19+
),
20+
}
21+
22+
export const DefaultOpen: Story = {
23+
render: () => (
24+
<AccordionCard title='Details' defaultOpen>
25+
<p className='mb-0'>This accordion starts open.</p>
26+
</AccordionCard>
27+
),
28+
}

frontend/documentation/components/Banner.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const meta: Meta<BannerProps> = {
2424
},
2525
component: Banner,
2626
parameters: { layout: 'padded' },
27-
title: 'Components/Banner',
27+
title: 'Components/Feedback/Banner',
2828
}
2929

3030
export default meta
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import BooleanDotIndicator from 'components/BooleanDotIndicator'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'centered' },
8+
title: 'Components/Data Display/BooleanDotIndicator',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
export const Enabled: Story = {
15+
render: () => <BooleanDotIndicator enabled />,
16+
}
17+
18+
export const Disabled: Story = {
19+
render: () => <BooleanDotIndicator enabled={false} />,
20+
}
21+
22+
export const AllStates: Story = {
23+
render: () => (
24+
<div style={{ alignItems: 'center', display: 'flex', gap: 16 }}>
25+
<div style={{ alignItems: 'center', display: 'flex', gap: 6 }}>
26+
<BooleanDotIndicator enabled /> Enabled
27+
</div>
28+
<div style={{ alignItems: 'center', display: 'flex', gap: 6 }}>
29+
<BooleanDotIndicator enabled={false} /> Disabled
30+
</div>
31+
</div>
32+
),
33+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
import { MemoryRouter } from 'react-router-dom'
4+
5+
import Breadcrumb from 'components/Breadcrumb'
6+
7+
const meta: Meta = {
8+
decorators: [
9+
(Story) => (
10+
<MemoryRouter>
11+
<Story />
12+
</MemoryRouter>
13+
),
14+
],
15+
parameters: { layout: 'padded' },
16+
title: 'Components/Navigation/Breadcrumb',
17+
}
18+
export default meta
19+
20+
type Story = StoryObj
21+
22+
export const Default: Story = {
23+
render: () => (
24+
<Breadcrumb
25+
items={[
26+
{ title: 'Projects', url: '/projects' },
27+
{ title: 'My Project', url: '/project/1' },
28+
]}
29+
currentPage='Features'
30+
/>
31+
),
32+
}
33+
34+
export const SingleLevel: Story = {
35+
render: () => (
36+
<Breadcrumb items={[{ title: 'Home', url: '/' }]} currentPage='Settings' />
37+
),
38+
}

frontend/documentation/components/Button.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const meta: Meta<ButtonType> = {
4646
},
4747
component: Button,
4848
parameters: { layout: 'centered' },
49-
title: 'Components/Button',
49+
title: 'Components/Forms/Button',
5050
}
5151

5252
export default meta
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import ButtonDropdown from 'components/base/forms/ButtonDropdown'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'centered' },
8+
title: 'Components/Forms/ButtonDropdown',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
export const Default: Story = {
15+
render: () => (
16+
<ButtonDropdown
17+
dropdownItems={[
18+
{ label: 'Edit', onClick: () => {} },
19+
{ label: 'Duplicate', onClick: () => {} },
20+
{ label: 'Delete', onClick: () => {} },
21+
]}
22+
>
23+
Actions
24+
</ButtonDropdown>
25+
),
26+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import Card from 'components/Card'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'padded' },
8+
title: 'Components/Layout/Card',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
export const Default: Story = {
15+
render: () => (
16+
<Card>
17+
<h5>Card title</h5>
18+
<p className='text-secondary mb-0'>Card content goes here.</p>
19+
</Card>
20+
),
21+
}
22+
23+
export const Nested: Story = {
24+
render: () => (
25+
<Card>
26+
<h5>Outer card</h5>
27+
<Card className='mt-3'>
28+
<p className='mb-0'>Nested card content.</p>
29+
</Card>
30+
</Card>
31+
),
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import React, { useState } from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import Checkbox from 'components/base/forms/Checkbox'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'centered' },
8+
title: 'Components/Forms/Checkbox',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
const InteractiveCheckbox = () => {
15+
const [checked, setChecked] = useState(false)
16+
return (
17+
<Checkbox label='Accept terms' checked={checked} onChange={setChecked} />
18+
)
19+
}
20+
21+
export const Default: Story = {
22+
render: () => <InteractiveCheckbox />,
23+
}
24+
25+
export const States: Story = {
26+
render: () => (
27+
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
28+
<Checkbox label='Unchecked' checked={false} onChange={() => {}} />
29+
<Checkbox label='Checked' checked={true} onChange={() => {}} />
30+
</div>
31+
),
32+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import React, { useState } from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import CheckboxGroup from 'components/base/forms/CheckboxGroup'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'centered' },
8+
title: 'Components/Forms/CheckboxGroup',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
const items = [
15+
{ label: 'Read', value: 'read' },
16+
{ label: 'Write', value: 'write' },
17+
{ label: 'Admin', value: 'admin' },
18+
]
19+
20+
const Interactive = () => {
21+
const [selected, setSelected] = useState<string[]>(['read'])
22+
return (
23+
<CheckboxGroup
24+
items={items}
25+
selectedValues={selected}
26+
onChange={setSelected}
27+
/>
28+
)
29+
}
30+
31+
export const Default: Story = {
32+
render: () => <Interactive />,
33+
}
34+
35+
export const AllSelected: Story = {
36+
render: () => (
37+
<CheckboxGroup
38+
items={items}
39+
selectedValues={['read', 'write', 'admin']}
40+
onChange={() => {}}
41+
/>
42+
),
43+
}
44+
45+
export const NoneSelected: Story = {
46+
render: () => (
47+
<CheckboxGroup items={items} selectedValues={[]} onChange={() => {}} />
48+
),
49+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from 'react'
2+
import type { Meta, StoryObj } from 'storybook'
3+
4+
import ClearFilters from 'components/ClearFilters'
5+
6+
const meta: Meta = {
7+
parameters: { layout: 'centered' },
8+
title: 'Components/Data Display/ClearFilters',
9+
}
10+
export default meta
11+
12+
type Story = StoryObj
13+
14+
export const Default: Story = {
15+
render: () => <ClearFilters onClick={() => {}} />,
16+
}

0 commit comments

Comments
 (0)