Files

139 lines
4.1 KiB
TypeScript

import type { Meta, StoryObj } from '@storybook/react'
import { useState } from 'react'
import { Tab } from './Tab'
const meta = {
title: 'Components/Tab',
component: Tab,
args: {
items: [],
},
} satisfies Meta<typeof Tab>
export default meta
type Story = StoryObj<typeof meta>
const defaultItems = [
{ key: 'tab1', label: '탭 1', children: <div className="p-4"> 1 .</div> },
{ key: 'tab2', label: '탭 2', children: <div className="p-4"> 2 .</div> },
{ key: 'tab3', label: '탭 3', children: <div className="p-4"> 3 .</div> },
]
export const Default: Story = {
args: {
items: defaultItems,
},
}
export const WithDefaultSelected: Story = {
args: {
items: defaultItems,
defaultSelectedKey: 'tab2',
},
}
export const Controlled: Story = {
render: function Render() {
const [selectedKey, setSelectedKey] = useState('tab1')
return (
<Tab
items={defaultItems}
selectedKey={selectedKey}
onSelectionChange={(key) => setSelectedKey(key as string)}
/>
)
},
}
export const WithDisabledTab: Story = {
args: {
items: [
{ key: 'tab1', label: '탭 1', children: <div className="p-4"> 1 .</div> },
{ key: 'tab2', label: '탭 2 (비활성화)', children: <div className="p-4"> 2 .</div>, disabled: true },
{ key: 'tab3', label: '탭 3', children: <div className="p-4"> 3 .</div> },
],
},
}
export const WithRichContent: Story = {
args: {
items: [
{
key: 'overview',
label: '개요',
children: (
<div className="p-4 space-y-2">
<h3 className="text-lg font-bold"> </h3>
<p> .</p>
<ul className="list-disc list-inside">
<li> </li>
<li>AI </li>
<li> </li>
</ul>
</div>
),
},
{
key: 'details',
label: '상세 정보',
children: (
<div className="p-4 space-y-2">
<h3 className="text-lg font-bold"> </h3>
<table className="w-full border-collapse">
<tbody>
<tr className="border-b">
<td className="py-2 font-medium"></td>
<td className="py-2">1.0.0</td>
</tr>
<tr className="border-b">
<td className="py-2 font-medium"> </td>
<td className="py-2">2024-01-15</td>
</tr>
</tbody>
</table>
</div>
),
},
{
key: 'settings',
label: '설정',
children: (
<div className="p-4">
<h3 className="text-lg font-bold mb-4"></h3>
<div className="space-y-4">
<div>
<label className="block text-sm font-medium mb-1"> </label>
<select className="border border-gray-300 rounded px-3 py-2 w-full">
<option> </option>
<option> </option>
<option> </option>
</select>
</div>
</div>
</div>
),
},
],
},
}
export const ManyTabs: Story = {
args: {
items: [
{ key: 'tab1', label: '첫 번째', children: <div className="p-4"> </div> },
{ key: 'tab2', label: '두 번째', children: <div className="p-4"> </div> },
{ key: 'tab3', label: '세 번째', children: <div className="p-4"> </div> },
{ key: 'tab4', label: '네 번째', children: <div className="p-4"> </div> },
{ key: 'tab5', label: '다섯 번째', children: <div className="p-4"> </div> },
],
},
}
export const WithCustomClassName: Story = {
args: {
items: defaultItems,
className: 'bg-gray-50 p-4 rounded-lg',
tabPanelClassName: 'bg-white rounded border',
},
}