"use client" import type { Meta, StoryObj } from '@storybook/react'; import { DatePicker, DateRangePicker, DateTimePicker, MonthPicker } from './date-picker'; import { Label } from './label'; import { useState } from 'react'; const meta: Meta = { title: 'Components/DatePicker', component: DatePicker, parameters: { layout: 'centered', docs: { description: { component: 'A collection of date picker components for various date selection needs.', }, }, }, tags: ['autodocs'], argTypes: { date: { description: 'The selected date', }, onDateChange: { description: 'Callback function when date changes', }, disabled: { control: 'boolean', description: 'Whether the date picker is disabled', }, }, }; export default meta; type Story = StoryObj; export const Default: Story = { render: () => { const [date, setDate] = useState(new Date()); return (
{date && (
Selected: {date.toLocaleDateString()}
)}
); }, }; export const WithoutDefaultDate: Story = { render: () => { const [date, setDate] = useState(undefined); return (
{date && (
Selected: {date.toLocaleDateString()}
)}
); }, }; export const Disabled: Story = { render: () => { const [date, setDate] = useState(new Date()); return (
); }, }; export const DateRange: Story = { render: () => { const [dateRange, setDateRange] = useState<{ from: Date | undefined; to: Date | undefined; }>({ from: undefined, to: undefined }); return (
{(dateRange.from || dateRange.to) && (
From: {dateRange.from?.toLocaleDateString() || 'Not selected'}
To: {dateRange.to?.toLocaleDateString() || 'Not selected'}
)}
); }, }; export const DateTime: Story = { render: () => { const [dateTime, setDateTime] = useState(new Date()); return (
{dateTime && (
Selected: {dateTime.toLocaleString()}
)}
); }, }; export const MonthOnly: Story = { render: () => { const [month, setMonth] = useState(new Date()); return (
{month && (
Selected: {month.toLocaleDateString('en-US', { month: 'long', year: 'numeric' })}
)}
); }, }; export const FormExample: Story = { render: () => { const [formData, setFormData] = useState({ birthDate: undefined as Date | undefined, eventDateRange: { from: undefined as Date | undefined, to: undefined as Date | undefined }, appointmentDateTime: undefined as Date | undefined, reportingMonth: undefined as Date | undefined, }); return (
setFormData(prev => ({ ...prev, birthDate: date }))} />
setFormData(prev => ({ ...prev, eventDateRange: range }))} />
setFormData(prev => ({ ...prev, appointmentDateTime: date }))} />
setFormData(prev => ({ ...prev, reportingMonth: month }))} />

Form Data:

            {JSON.stringify(
              {
                birthDate: formData.birthDate?.toISOString(),
                eventDateRange: {
                  from: formData.eventDateRange.from?.toISOString(),
                  to: formData.eventDateRange.to?.toISOString(),
                },
                appointmentDateTime: formData.appointmentDateTime?.toISOString(),
                reportingMonth: formData.reportingMonth?.toISOString(),
              },
              null,
              2
            )}
          
); }, }; export const CustomFormats: Story = { render: () => { const [date, setDate] = useState(new Date()); return (
{date && (
Different Formats:
ISO: {date.toISOString().split('T')[0]}
US: {date.toLocaleDateString('en-US')}
UK: {date.toLocaleDateString('en-GB')}
Long: {date.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}
)}
); }, }; export const AllVariants: Story = { render: () => { const [singleDate, setSingleDate] = useState(new Date()); const [dateRange, setDateRange] = useState<{ from: Date | undefined; to: Date | undefined; }>({ from: new Date(), to: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000) }); const [dateTime, setDateTime] = useState(new Date()); const [month, setMonth] = useState(new Date()); return (
); }, };