diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 7889553..3a72168 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,5 +1,7 @@ import type { Preview } from '@storybook/nextjs-vite' +import "../src/app/globals.css"; + const preview: Preview = { parameters: { controls: { diff --git a/src/components/label_component.tsx b/src/components/label_component.tsx new file mode 100644 index 0000000..f85e0af --- /dev/null +++ b/src/components/label_component.tsx @@ -0,0 +1,43 @@ +import type { ReactNode } from "react"; + +interface ILabelProps { + children: ReactNode; + disabled?: boolean; + htmlFor?: string; + size?: 'small' | 'medium' | 'large'; + onClick?: () => void; +} + +const Label = ({ + children, + disabled = false, + htmlFor, + size = 'medium', + onClick, +}: ILabelProps) => { + const getSizeClasses = () => { + switch (size) { + case 'small': + return 'text-xs'; + case 'large': + return 'text-base'; + default: + return 'text-sm'; + } + }; + + const colorClass = disabled ? 'text-gray-400' : 'text-gray-700'; + const cursorClass = disabled ? 'cursor-not-allowed' : 'cursor-pointer'; + + return ( + + ); +}; + +export default Label; diff --git a/src/stories/Label.stories.ts b/src/stories/Label.stories.ts new file mode 100644 index 0000000..699e4d3 --- /dev/null +++ b/src/stories/Label.stories.ts @@ -0,0 +1,52 @@ +import type { Meta, StoryObj } from '@storybook/nextjs-vite'; + +import { fn } from 'storybook/test'; + +import Label from '../components/label_component'; + +const meta = { + title: 'Components/Label', + component: Label, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], + argTypes: { + disabled: { control: 'boolean' }, + size: { + control: { type: 'select' }, + options: ['small', 'medium', 'large'], + }, + }, + args: { onClick: fn() }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Enabled: Story = { + args: { + children: 'Label', + }, +}; + +export const Disabled: Story = { + args: { + children: 'Label', + disabled: true, + }, +}; + +export const Large: Story = { + args: { + size: 'large', + children: 'Label', + }, +}; + +export const Small: Story = { + args: { + size: 'small', + children: 'Label', + }, +}; \ No newline at end of file