'use client'; import { useState } from 'react'; import { EditIcon, FileTextIcon, MessageCircleIcon, SendIcon, StarIcon, } from 'lucide-react'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { Label } from '@kit/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@kit/ui/select'; import { Switch } from '@kit/ui/switch'; import { Textarea } from '@kit/ui/textarea'; import { generateImportStatement, generatePropsString, useStoryControls, } from '../lib/story-utils'; import { ComponentStoryLayout } from './story-layout'; interface TextareaStoryControls { disabled: boolean; readonly: boolean; required: boolean; resize: 'none' | 'vertical' | 'horizontal' | 'both'; size: 'sm' | 'md' | 'lg'; showCharCount: boolean; maxLength: number; } export default function TextareaStory() { const { controls, updateControl } = useStoryControls({ disabled: false, readonly: false, required: false, resize: 'vertical', size: 'md', showCharCount: false, maxLength: 500, }); const [textValue, setTextValue] = useState(''); const [feedbackValue, setFeedbackValue] = useState(''); const [commentValue, setCommentValue] = useState(''); const generateCode = () => { const propsString = generatePropsString( { placeholder: 'Type your message here...', disabled: controls.disabled, readOnly: controls.readonly, required: controls.required, maxLength: controls.showCharCount ? controls.maxLength : undefined, className: `${sizeClasses[controls.size]} ${resizeClasses[controls.resize]}`, }, { disabled: false, readOnly: false, required: false, }, ); const imports = generateImportStatement(['Textarea'], '@kit/ui/textarea'); const labelImport = `\nimport { Label } from '@kit/ui/label';`; return `${imports}${labelImport}\n\nfunction MessageForm() {\n const [message, setMessage] = useState('');\n\n return (\n
\n \n setMessage(e.target.value)}${propsString}\n />\n ${controls.showCharCount ? `
\n {message.length} / ${controls.maxLength}\n
` : ''}\n
\n );\n}`; }; const sizeClasses = { sm: 'min-h-[50px] text-sm', md: 'min-h-[80px] text-sm', lg: 'min-h-[120px] text-base', }; const resizeClasses = { none: 'resize-none', vertical: 'resize-y', horizontal: 'resize-x', both: 'resize', }; const controlsContent = ( Textarea Controls
updateControl('maxLength', Number(e.target.value))} className="w-full" />
updateControl('disabled', checked)} />
updateControl('readonly', checked)} />
updateControl('required', checked)} />
updateControl('showCharCount', checked) } />
{controls.showCharCount && (

Character Count:

{textValue.length} / {controls.maxLength}

)}
); const previewContent = ( Textarea Preview