overleaf-cep/services/web/frontend/stories/modals/modal.stories.tsx
Rebeka Dekany b7032e925f Storybook for the Modal component (#26798)
GitOrigin-RevId: 679935722a8b8a96c55f60be16c0ac34f6e6fbcc
2025-07-04 08:05:26 +00:00

152 lines
3.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Button from '@/features/ui/components/bootstrap-5/button'
import type { Meta, StoryObj } from '@storybook/react'
import OLModal, {
OLModalHeader,
OLModalBody,
OLModalFooter,
OLModalTitle,
} from '@/features/ui/components/ol/ol-modal'
type Story = StoryObj<typeof OLModal>
export const Default: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Heading</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>
Lorem ipsum dolor sit lorem a amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam.
</p>
</OLModalBody>
<OLModalFooter>
<Button variant="secondary">Cancel</Button>
<Button variant="primary">Primary</Button>
</OLModalFooter>
</OLModal>
)
},
}
export const ModalWithAcknowledgment: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Acknowledgment</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>
System requires an acknowledgment from the user. Usually contains
only one primary button.
</p>
</OLModalBody>
<OLModalFooter>
<Button variant="primary">Accept</Button>
</OLModalFooter>
</OLModal>
)
},
}
export const ModalWithSecondary: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Heading</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>
Lorem ipsum dolor sit lorem a amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam.
</p>
</OLModalBody>
<OLModalFooter>
<Button variant="secondary">Cancel</Button>
</OLModalFooter>
</OLModal>
)
},
}
export const ModalWithTertiary: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Heading</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>Used for destructive or irreversible actions.</p>
</OLModalBody>
<OLModalFooter>
<Button variant="secondary">Third</Button>
<Button variant="secondary" className="ms-auto">
Cancel
</Button>
<Button variant="primary">Primary</Button>
</OLModalFooter>
</OLModal>
)
},
}
export const ModalInformative: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Informative</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>
Presents information for the user to be aware of and doesnt require
any action.
</p>
</OLModalBody>
</OLModal>
)
},
}
export const ModalDanger: Story = {
render: args => {
return (
<OLModal show {...args}>
<OLModalHeader closeButton>
<OLModalTitle>Danger</OLModalTitle>
</OLModalHeader>
<OLModalBody>
<p>
Lorem ipsum dolor sit lorem a amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam.
</p>
</OLModalBody>
<OLModalFooter>
<Button variant="secondary">Cancel</Button>
<Button variant="danger">Delete</Button>
</OLModalFooter>
</OLModal>
)
},
}
const meta: Meta<typeof OLModal> = {
title: 'Shared / Components / Modal',
component: OLModal,
argTypes: {
size: {
control: 'radio',
options: ['lg', 'md', 'sm'],
},
},
}
export default meta