feat: storybook 생성

This commit is contained in:
2026-04-13 14:15:00 +09:00
parent b390777af0
commit 01bfc751f2
15 changed files with 1671 additions and 2 deletions

View File

@@ -0,0 +1,142 @@
import type { Meta, StoryObj } from '@storybook/react'
import { useState } from 'react'
import { Button } from '../button/Button'
import { ModalBody, ModalFooter, ModalHeader, ModalRoot } from './Modal'
const meta = {
title: 'Components/Modal',
component: ModalRoot,
argTypes: {
isDismissable: { control: 'boolean' },
isKeyboardDismissDisabled: { control: 'boolean' },
},
} satisfies Meta<typeof ModalRoot>
export default meta
type Story = StoryObj<typeof meta>
export const Default: Story = {
render: function Render() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button onClick={() => setIsOpen(true)}> </Button>
<ModalRoot isOpen={isOpen} onOpenChange={setIsOpen}>
<ModalHeader> </ModalHeader>
<ModalBody>
<p className="text-sm"> .</p>
</ModalBody>
<ModalFooter>
<Button color="gray" size="large" onClick={() => setIsOpen(false)}>
</Button>
<Button color="primary" size="large" onClick={() => setIsOpen(false)}>
</Button>
</ModalFooter>
</ModalRoot>
</>
)
},
}
export const WithoutCloseButton: Story = {
render: function Render() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button onClick={() => setIsOpen(true)}> </Button>
<ModalRoot isOpen={isOpen} onOpenChange={setIsOpen}>
<ModalHeader hasCloseButton={false}> </ModalHeader>
<ModalBody>
<p className="text-sm"> .</p>
</ModalBody>
<ModalFooter>
<Button color="primary" size="large" onClick={() => setIsOpen(false)}>
</Button>
</ModalFooter>
</ModalRoot>
</>
)
},
}
export const LongContent: Story = {
render: function Render() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button onClick={() => setIsOpen(true)}> </Button>
<ModalRoot isOpen={isOpen} onOpenChange={setIsOpen}>
<ModalHeader> </ModalHeader>
<ModalBody className="max-h-60 overflow-y-auto">
{Array.from({ length: 20 }, (_, i) => (
<p key={i} className="text-sm mb-2">
{i + 1}: Lorem ipsum dolor sit amet consectetur adipisicing elit.
</p>
))}
</ModalBody>
<ModalFooter>
<Button color="primary" size="large" onClick={() => setIsOpen(false)}>
</Button>
</ModalFooter>
</ModalRoot>
</>
)
},
}
export const NotDismissable: Story = {
render: function Render() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button onClick={() => setIsOpen(true)}> </Button>
<ModalRoot
isOpen={isOpen}
onOpenChange={setIsOpen}
isDismissable={false}
isKeyboardDismissDisabled={true}
>
<ModalHeader hasCloseButton={false}> </ModalHeader>
<ModalBody>
<p className="text-sm"> ESC로 .</p>
</ModalBody>
<ModalFooter>
<Button color="primary" size="large" onClick={() => setIsOpen(false)}>
</Button>
</ModalFooter>
</ModalRoot>
</>
)
},
}
export const ConfirmDialog: Story = {
render: function Render() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button color="primary" onClick={() => setIsOpen(true)}></Button>
<ModalRoot isOpen={isOpen} onOpenChange={setIsOpen} className="w-75">
<ModalBody className="px-7.5 py-8">
<p className="text-sm text-dabeeo-black-34 font-medium text-center">
?
</p>
</ModalBody>
<ModalFooter>
<Button color="gray" size="large" onClick={() => setIsOpen(false)}>
</Button>
<Button color="primary" size="large" onClick={() => setIsOpen(false)}>
</Button>
</ModalFooter>
</ModalRoot>
</>
)
},
}