mirror of
https://github.com/mastodon/mastodon.git
synced 2025-10-08 18:14:39 +00:00
111 lines
2.4 KiB
TypeScript
111 lines
2.4 KiB
TypeScript
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
import { fn, expect } from 'storybook/test';
|
|
|
|
import { Alert } from '.';
|
|
|
|
const meta = {
|
|
title: 'Components/Alert',
|
|
component: Alert,
|
|
args: {
|
|
isActive: true,
|
|
animateFrom: 'side',
|
|
title: '',
|
|
message: '',
|
|
action: '',
|
|
onActionClick: fn(),
|
|
},
|
|
argTypes: {
|
|
isActive: {
|
|
control: 'boolean',
|
|
type: 'boolean',
|
|
description: 'Animate to the active (displayed) state of the alert',
|
|
},
|
|
animateFrom: {
|
|
control: 'radio',
|
|
type: 'string',
|
|
options: ['side', 'below'],
|
|
description:
|
|
'Direction that the alert animates in from when activated. `side` is dependent on reading direction, defaulting to left in ltr languages.',
|
|
},
|
|
title: {
|
|
control: 'text',
|
|
type: 'string',
|
|
description: '(Optional) title of the alert',
|
|
},
|
|
message: {
|
|
control: 'text',
|
|
type: 'string',
|
|
description: 'Main alert text',
|
|
},
|
|
action: {
|
|
control: 'text',
|
|
type: 'string',
|
|
description:
|
|
'Label of the alert action (requires `onActionClick` handler)',
|
|
},
|
|
},
|
|
tags: ['test'],
|
|
} satisfies Meta<typeof Alert>;
|
|
|
|
export default meta;
|
|
|
|
type Story = StoryObj<typeof meta>;
|
|
|
|
export const Simple: Story = {
|
|
args: {
|
|
message: 'Post published.',
|
|
},
|
|
render: (args) => (
|
|
<div style={{ overflow: 'clip', padding: '1rem' }}>
|
|
<Alert {...args} />
|
|
</div>
|
|
),
|
|
};
|
|
|
|
export const WithAction: Story = {
|
|
args: {
|
|
...Simple.args,
|
|
action: 'Open',
|
|
},
|
|
render: Simple.render,
|
|
play: async ({ args, canvas, userEvent }) => {
|
|
const button = await canvas.findByRole('button', { name: 'Open' });
|
|
await userEvent.click(button);
|
|
await expect(args.onActionClick).toHaveBeenCalled();
|
|
},
|
|
};
|
|
|
|
export const WithTitle: Story = {
|
|
args: {
|
|
title: 'Warning:',
|
|
message: 'This is an alert',
|
|
},
|
|
render: Simple.render,
|
|
};
|
|
|
|
export const WithDismissButton: Story = {
|
|
args: {
|
|
message: 'More replies found',
|
|
action: 'Show',
|
|
onDismiss: fn(),
|
|
},
|
|
render: Simple.render,
|
|
};
|
|
|
|
export const InSizedContainer: Story = {
|
|
args: WithDismissButton.args,
|
|
render: (args) => (
|
|
<div
|
|
style={{
|
|
overflow: 'clip',
|
|
padding: '1rem',
|
|
width: '380px',
|
|
maxWidth: '100%',
|
|
boxSizing: 'border-box',
|
|
}}
|
|
>
|
|
<Alert {...args} />
|
|
</div>
|
|
),
|
|
};
|