import React, { useState } from 'react'; import { EnvelopeIcon, KeyIcon, QuestionMarkCircleIcon, } from '@heroicons/react/24/solid'; import type { ComponentMeta } from '@storybook/react'; import { Select, TextInput } from '@tih/ui'; export default { argTypes: { autoComplete: { control: 'text', }, description: { control: 'text', }, disabled: { control: 'boolean', }, errorMessage: { control: 'text', }, isLabelHidden: { control: 'boolean', }, label: { control: 'text', }, name: { control: 'text', }, placeholder: { control: 'text', }, required: { control: 'boolean', }, type: { control: 'text', }, }, component: TextInput, title: 'TextInput', } as ComponentMeta<typeof TextInput>; export const Basic = { args: { label: 'Name', placeholder: 'John Doe', }, }; export function HiddenLabel() { const [value, setValue] = useState(''); return ( <TextInput isLabelHidden={true} label="Name" placeholder="John Doe" type="text" value={value} onChange={setValue} /> ); } export function Email() { const [value, setValue] = useState(''); return ( <TextInput label="Email" placeholder="john.doe@email.com" startAddOn={EnvelopeIcon} startAddOnType="icon" type="email" value={value} onChange={setValue} /> ); } export function Icon() { const [value, setValue] = useState(''); return ( <div className="space-y-4"> <TextInput endIcon={QuestionMarkCircleIcon} label="Account number" placeholder="000-00-0000" type="text" value={value} onChange={setValue} /> <TextInput label="Account number" placeholder="000-00-0000" startAddOn={QuestionMarkCircleIcon} startAddOnType="icon" type="text" value={value} onChange={setValue} /> </div> ); } export function Disabled() { return ( <div className="space-y-4"> <TextInput disabled={true} label="Disabled input" placeholder="John Doe (Placeholder)" type="text" /> <TextInput disabled={true} label="Disabled input" type="text" value="John Doe (Value)" /> <TextInput disabled={true} endAddOn={ <Select borderStyle="borderless" isLabelHidden={true} label="Currency" options={[ { label: 'USD', value: 'USD', }, { label: 'SGD', value: 'SGD', }, { label: 'EUR', value: 'EUR', }, ]} /> } endAddOnType="element" label="Price" placeholder="0.00" startAddOn="$" startAddOnType="label" type="text" /> </div> ); } export function Required() { return ( <TextInput label="Required input" placeholder="John Doe" required={true} type="text" /> ); } export function Error() { const [value, setValue] = useState('1234'); return ( <TextInput errorMessage={ value.length < 6 ? 'Password must be at least 6 characters' : undefined } label="Password" startAddOn={KeyIcon} startAddOnType="icon" type="password" value={value} onChange={setValue} /> ); } export function Description() { const [value, setValue] = useState('1234567'); return ( <TextInput description="Select a password that is at least 6 characters" errorMessage={ value.length < 6 ? 'Password must be at least 6 characters' : undefined } label="Password" startAddOn={KeyIcon} startAddOnType="icon" type="password" value={value} onChange={setValue} /> ); } export function AddOns() { return ( <div className="space-y-4"> <TextInput label="Price" placeholder="0.00" startAddOn="$" startAddOnType="label" type="text" /> <TextInput endAddOn="USD" endAddOnType="label" label="Price" placeholder="0.00" type="text" /> <TextInput endAddOn="USD" endAddOnType="label" label="Price" placeholder="0.00" startAddOn="$" startAddOnType="label" type="text" /> <TextInput label="Phone Number" placeholder="+1 (123) 456-7890" startAddOn={ <Select borderStyle="borderless" isLabelHidden={true} label="country" options={[ { label: 'US', value: 'US', }, { label: 'SG', value: 'SG', }, { label: 'JP', value: 'JP', }, ]} /> } startAddOnType="element" type="text" /> <TextInput endAddOn={ <Select borderStyle="borderless" isLabelHidden={true} label="Currency" options={[ { label: 'USD', value: 'USD', }, { label: 'SGD', value: 'SGD', }, { label: 'EUR', value: 'EUR', }, ]} /> } endAddOnType="element" label="Price" placeholder="0.00" startAddOn="$" startAddOnType="label" type="text" /> </div> ); }