gd-ui-library 1.0.21 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Table/Table.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Slider/Slider.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/Rating/Rating.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/TimePicker/TimePicker.tsx","../src/components/InputGroup/InputGroup.tsx","../src/components/Select/Select.tsx","../src/components/Card/Card.tsx","../src/components/List/List.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Chip/Chip.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Popover/Popover.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Timeline/Timeline.tsx","../src/components/TreeView/TreeView.tsx","../src/components/Statistic/Statistic.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Kanban/Kanban.tsx","../src/components/Alert/Alert.tsx","../src/components/Toast/Toast.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Banner/Banner.tsx","../src/components/StatusIndicator/StatusIndicator.tsx","../src/components/Navbar/Navbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Grid/Grid.tsx","../src/components/Stack/Stack.tsx","../src/components/SplitPane/SplitPane.tsx","../src/components/MasonryGrid/MasonryGrid.tsx","../src/components/Layout/Layout.tsx","../src/components/Portal/Portal.tsx","../src/components/Transition/Transition.tsx","../src/components/ClickAwayListener/ClickAwayListener.tsx","../src/components/VirtualScroll/VirtualScroll.tsx","../src/components/InfiniteScroll/InfiniteScroll.tsx","../src/components/LazyLoad/LazyLoad.tsx","../src/components/DebouncedInput/DebouncedInput.tsx","../src/components/AutoComplete/AutoComplete.tsx","../src/components/FormBuilder/FormBuilder.tsx","../src/components/ProductFilter/ProductFilter.tsx","../src/components/Chart/Chart.tsx","../src/components/ShoppingCart/ShoppingCart.tsx","../src/components/RichTextEditor/RichTextEditor.tsx","../src/components/CodeEditor/CodeEditor.tsx","../src/components/FileManager/FileManager.tsx","../src/components/EmailComposer/EmailComposer.tsx","../src/components/CalendarWithEvents/CalendarWithEvents.tsx","../src/components/GanttChart/GanttChart.tsx","../src/validators/email.ts","../src/validators/image.ts","../src/validators/longDescription.ts","../src/validators/name.ts","../src/validators/password.ts","../src/validators/required.ts","../src/validators/shortDescription.ts","../src/validators/slug.ts","../src/validators/url.ts"],"sourcesContent":["import './index.css';\r\nexport { cn } from \"./utils/cn\";\r\nexport { Button } from \"./components/Button/Button\";\r\nexport { Input } from \"./components/Input/Input\";\r\nexport { Table } from \"./components/Table/Table\";\r\nexport { Checkbox } from \"./components/Checkbox/Checkbox\";\r\nexport { Radio } from \"./components/Radio/Radio\";\r\nexport { Toggle } from \"./components/Toggle/Toggle\";\r\nexport { Textarea } from \"./components/Textarea/Textarea\";\r\nexport { Slider } from \"./components/Slider/Slider\";\r\nexport { ColorPicker } from \"./components/ColorPicker/ColorPicker\";\r\nexport { Rating } from \"./components/Rating/Rating\";\r\nexport { OTPInput } from \"./components/OTPInput/OTPInput\";\r\nexport { FileUpload } from \"./components/FileUpload/FileUpload\";\r\nexport { DatePicker } from \"./components/DatePicker/DatePicker\";\r\nexport { TimePicker } from \"./components/TimePicker/TimePicker\";\r\nexport { InputGroup } from \"./components/InputGroup/InputGroup\";\r\nexport { Select } from \"./components/Select/Select\";\r\n\r\n// Display Basics\r\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"./components/Card/Card\";\r\nexport { List, ListItem } from \"./components/List/List\";\r\nexport { Avatar } from \"./components/Avatar/Avatar\";\r\nexport { Badge } from \"./components/Badge/Badge\";\r\nexport { Chip } from \"./components/Chip/Chip\";\r\nexport { EmptyState } from \"./components/EmptyState/EmptyState\";\r\nexport { Tooltip } from \"./components/Tooltip/Tooltip\";\r\n\r\n// Overlays\r\nexport { Popover } from \"./components/Popover/Popover\";\r\nexport { Dialog } from \"./components/Dialog/Dialog\";\r\nexport { Drawer } from \"./components/Drawer/Drawer\";\r\n\r\n// Interactive & Navigation\r\nexport { Accordion } from \"./components/Accordion/Accordion\";\r\nexport { Tabs } from \"./components/Tabs/Tabs\";\r\nexport { Carousel } from \"./components/Carousel/Carousel\";\r\nexport { Timeline } from \"./components/Timeline/Timeline\";\r\nexport { TreeView } from \"./components/TreeView/TreeView\";\r\n\r\n// Advanced/Specific\r\nexport { Statistic } from \"./components/Statistic/Statistic\";\r\nexport { ProgressBar } from \"./components/ProgressBar/ProgressBar\";\r\nexport { Skeleton } from \"./components/Skeleton/Skeleton\";\r\nexport { Calendar } from \"./components/Calendar/Calendar\";\r\nexport { Kanban } from \"./components/Kanban/Kanban\";\r\n\r\n// Feedback & Status\r\nexport { Alert } from \"./components/Alert/Alert\";\r\nexport { toast, Toaster } from \"./components/Toast/Toast\";\r\nexport type { ToastOptions, ToastVariant } from \"./components/Toast/Toast\";\r\nexport { Spinner } from \"./components/Spinner/Spinner\";\r\nexport { Banner } from \"./components/Banner/Banner\";\r\nexport { StatusIndicator } from \"./components/StatusIndicator/StatusIndicator\";\r\n\r\n// Navigation & Menus\r\nexport { Navbar } from \"./components/Navbar/Navbar\";\r\nexport { Sidebar } from \"./components/Sidebar/Sidebar\";\r\nexport type { SidebarItem, SidebarProps } from \"./components/Sidebar/Sidebar\";\r\nexport { Breadcrumb } from \"./components/Breadcrumb/Breadcrumb\";\r\nexport { Pagination } from \"./components/Pagination/Pagination\";\r\nexport { Stepper } from \"./components/Stepper/Stepper\";\r\nexport { Dropdown } from \"./components/Dropdown/Dropdown\";\r\nexport type { DropdownItem, DropdownProps } from \"./components/Dropdown/Dropdown\";\r\n\r\n// Layout & Structure\r\nexport { Grid } from \"./components/Grid/Grid\";\r\nexport { Stack } from \"./components/Stack/Stack\";\r\nexport { SplitPane } from \"./components/SplitPane/SplitPane\";\r\nexport { MasonryGrid } from \"./components/MasonryGrid/MasonryGrid\";\r\nexport { Container, Section, Hero, Footer } from \"./components/Layout/Layout\";\r\n\r\n// Utilities & Behaviors\r\nexport { Portal } from \"./components/Portal/Portal\";\r\nexport { Transition } from \"./components/Transition/Transition\";\r\nexport { ClickAwayListener } from \"./components/ClickAwayListener/ClickAwayListener\";\r\nexport { VirtualScroll } from \"./components/VirtualScroll/VirtualScroll\";\r\nexport { InfiniteScroll } from \"./components/InfiniteScroll/InfiniteScroll\";\r\nexport { LazyLoad } from \"./components/LazyLoad/LazyLoad\";\r\nexport { DebouncedInput } from \"./components/DebouncedInput/DebouncedInput\";\r\n\r\n// Forms & Search\r\nexport { AutoComplete } from \"./components/AutoComplete/AutoComplete\";\r\nexport { FormBuilder } from \"./components/FormBuilder/FormBuilder\";\r\nexport type { FormField, FormFieldType } from \"./components/FormBuilder/FormBuilder\";\r\nexport { ProductFilter } from \"./components/ProductFilter/ProductFilter\";\r\nexport type { FilterGroup, FilterOption } from \"./components/ProductFilter/ProductFilter\";\r\n\r\n// Advanced App Widgets\r\nexport { Chart } from \"./components/Chart/Chart\";\r\nexport type { ChartDataset, ChartType } from \"./components/Chart/Chart\";\r\nexport { ShoppingCart } from \"./components/ShoppingCart/ShoppingCart\";\r\nexport type { CartItem } from \"./components/ShoppingCart/ShoppingCart\";\r\nexport { RichTextEditor } from \"./components/RichTextEditor/RichTextEditor\";\r\nexport { CodeEditor } from \"./components/CodeEditor/CodeEditor\";\r\nexport { FileManager } from \"./components/FileManager/FileManager\";\r\nexport type { FileItem } from \"./components/FileManager/FileManager\";\r\nexport { EmailComposer } from \"./components/EmailComposer/EmailComposer\";\r\nexport { CalendarWithEvents } from \"./components/CalendarWithEvents/CalendarWithEvents\";\r\nexport type { CalendarEvent } from \"./components/CalendarWithEvents/CalendarWithEvents\";\r\nexport { GanttChart } from \"./components/GanttChart/GanttChart\";\r\nexport type { GanttTask } from \"./components/GanttChart/GanttChart\";\r\n\r\nexport * from \"./validators\";\r\n\r","import { clsx, type ClassValue } from \"clsx\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return clsx(inputs)\r\n}\r\n","import React, { ButtonHTMLAttributes, forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: 'default' | 'filled' | 'unstyled';\r\n}\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className,\r\n label,\r\n error,\r\n description,\r\n required,\r\n leftIcon,\r\n rightIcon,\r\n size = 'md',\r\n variant = 'default',\r\n children,\r\n ...props \r\n }, ref) => {\r\n // Base styles\r\n const baseStyles = \"inline-flex items-center justify-center font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none\";\r\n \r\n // Size variants\r\n const sizeStyles = {\r\n sm: \"px-3 py-1.5 text-sm rounded-md\",\r\n md: \"px-4 py-2 text-sm rounded-md\",\r\n lg: \"px-6 py-3 text-base rounded-lg\"\r\n };\r\n \r\n // Style variants\r\n const variantStyles = {\r\n default: \"bg-white text-gray-900 border border-gray-300 hover:bg-gray-50 focus:ring-blue-500\",\r\n filled: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\r\n unstyled: \"\"\r\n };\r\n \r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n variantStyles[variant],\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n aria-invalid={!!error}\r\n aria-describedby={description ? `${props.id}-description` : undefined}\r\n {...props}\r\n >\r\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\r\n {label || children}\r\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\r\n {required && <span className=\"ml-1 text-red-500\">*</span>}\r\n {error && <span className=\"sr-only\">{error}</span>}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";","import React, { forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport { AlertCircle } from \"lucide-react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n description,\r\n required,\r\n placeholder,\r\n leftIcon,\r\n rightIcon,\r\n size = \"md\",\r\n className,\r\n disabled,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).slice(2, 9)}`;\r\n\r\n const sizeClasses = {\r\n sm: \"h-9 text-sm px-3\",\r\n md: \"h-10 text-sm px-3.5\",\r\n lg: \"h-12 text-base px-4\",\r\n }[size];\r\n\r\n return (\r\n <div className=\"w-full space-y-1.5\">\r\n {/* Label */}\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-sm font-medium\",\r\n disabled ? \"text-gray-400\" : \"text-gray-700\"\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-1\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Description */}\r\n {description && !error && (\r\n <p className=\"text-xs text-gray-500\">{description}</p>\r\n )}\r\n\r\n {/* Input wrapper */}\r\n <div className=\"relative\">\r\n {/* Left Icon */}\r\n {leftIcon && (\r\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n aria-invalid={!!error}\r\n className={cn(\r\n \"w-full rounded-lg border border-gray-300 bg-white\",\r\n \"transition-all duration-150 outline-none\",\r\n \"placeholder:text-gray-400 placeholder:text-sm\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\r\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\r\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\r\n leftIcon && \"pl-10\",\r\n rightIcon && \"pr-10\",\r\n sizeClasses,\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {/* Right Icon */}\r\n {rightIcon && (\r\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {rightIcon}\r\n </span>\r\n )}\r\n </div>\r\n \r\n {error && (\r\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\r\n <AlertCircle className=\"w-3.5 h-3.5\" />\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";","import React, { useState, useMemo } from 'react';\nimport { \n Search, ChevronDown, ChevronUp, FileText, \n Download, FileSpreadsheet, Eye, Edit, Trash2,\n FileJson, FileCode\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport * as XLSX from 'xlsx';\n\nexport interface ColumnDef<T> {\n key: string;\n header: string;\n render?: (item: T) => React.ReactNode;\n sortable?: boolean;\n searchable?: boolean;\n}\n\nexport interface TableProps<T> {\n data: T[];\n columns: ColumnDef<T>[];\n onSee?: (item: T) => void;\n onEdit?: (item: T) => void;\n onDelete?: (item: T) => void;\n className?: string;\n exportFileName?: string;\n}\n\nexport function Table<T extends Record<string, any>>({ \n data, \n columns, \n onSee, \n onEdit, \n onDelete,\n className,\n exportFileName = \"export_data\"\n}: TableProps<T>) {\n const [sortConfig, setSortConfig] = useState<{ key: string; direction: 'asc' | 'desc' } | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [columnSearch, setColumnSearch] = useState<Record<string, string>>({});\n const [selectedRows, setSelectedRows] = useState<Set<number>>(new Set());\n\n // Handle Sort\n const handleSort = (key: string) => {\n let direction: 'asc' | 'desc' = 'asc';\n if (sortConfig && sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n setSortConfig({ key, direction });\n };\n\n // Filter and Sort Data\n const processedData = useMemo(() => {\n let result = [...data];\n\n // Global Search\n if (searchQuery) {\n const lowerQuery = searchQuery.toLowerCase();\n result = result.filter(item => \n columns.some(col => {\n const val = item[col.key];\n return val !== null && val !== undefined && String(val).toLowerCase().includes(lowerQuery);\n })\n );\n }\n\n // Column Search\n Object.entries(columnSearch).forEach(([key, query]) => {\n if (query) {\n const lowerQuery = query.toLowerCase();\n result = result.filter(item => {\n const val = item[key];\n return val !== null && val !== undefined && String(val).toLowerCase().includes(lowerQuery);\n });\n }\n });\n\n // Sort\n if (sortConfig) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue < bValue) return sortConfig.direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return sortConfig.direction === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n return result;\n }, [data, columns, sortConfig, searchQuery, columnSearch]);\n\n const toggleSelectAll = () => {\n if (selectedRows.size === processedData.length) {\n setSelectedRows(new Set());\n } else {\n setSelectedRows(new Set(processedData.map((_, index) => index)));\n }\n };\n\n const toggleSelectRow = (index: number) => {\n const newSelected = new Set(selectedRows);\n if (newSelected.has(index)) {\n newSelected.delete(index);\n } else {\n newSelected.add(index);\n }\n setSelectedRows(newSelected);\n };\n\n // Exports\n const getExportData = () => {\n return processedData.map(item => {\n const row: Record<string, any> = {};\n columns.forEach(col => {\n row[col.header] = item[col.key];\n });\n return row;\n });\n };\n\n const exportCSV = () => {\n const exportData = getExportData();\n if (exportData.length === 0) return;\n \n const headers = Object.keys(exportData[0]);\n const csvContent = [\n headers.join(','),\n ...exportData.map(row => headers.map(header => `\"${String(row[header]).replace(/\"/g, '\"\"')}\"`).join(','))\n ].join('\\n');\n \n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.csv`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n const exportExcel = () => {\n const exportData = getExportData();\n const worksheet = XLSX.utils.json_to_sheet(exportData);\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Data\");\n XLSX.writeFile(workbook, `${exportFileName}.xlsx`);\n };\n\n const exportPDF = () => {\n const doc = new jsPDF();\n const exportData = getExportData();\n if (exportData.length === 0) return;\n \n const headers = Object.keys(exportData[0]);\n const body = exportData.map(row => headers.map(header => String(row[header])));\n \n autoTable(doc, {\n head: [headers],\n body: body,\n theme: 'grid',\n styles: { fontSize: 8 },\n headStyles: { fillColor: [59, 130, 246] }\n });\n \n doc.save(`${exportFileName}.pdf`);\n };\n\n const exportJSON = () => {\n const exportData = getExportData();\n const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.json`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n const exportXML = () => {\n const exportData = getExportData();\n let xml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<Root>\\n`;\n exportData.forEach(row => {\n xml += ` <Row>\\n`;\n Object.entries(row).forEach(([key, value]) => {\n const safeKey = key.replace(/[^a-zA-Z0-9]/g, '_');\n xml += ` <${safeKey}>${String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')}</${safeKey}>\\n`;\n });\n xml += ` </Row>\\n`;\n });\n xml += `</Root>`;\n \n const blob = new Blob([xml], { type: 'application/xml' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.xml`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className={cn(\"w-full bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden\", className)}>\n {/* Toolbar */}\n <div className=\"p-4 border-b border-gray-200 flex flex-wrap gap-4 items-center justify-between bg-gray-50/50\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input \n type=\"text\" \n placeholder=\"Search all columns...\" \n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9 pr-4 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none w-64 transition-all\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <ExportButton icon={<FileText className=\"w-4 h-4\" />} label=\"CSV\" onClick={exportCSV} />\n <ExportButton icon={<FileSpreadsheet className=\"w-4 h-4\" />} label=\"Excel\" onClick={exportExcel} />\n <ExportButton icon={<Download className=\"w-4 h-4\" />} label=\"PDF\" onClick={exportPDF} />\n <ExportButton icon={<FileJson className=\"w-4 h-4\" />} label=\"JSON\" onClick={exportJSON} />\n <ExportButton icon={<FileCode className=\"w-4 h-4\" />} label=\"XML\" onClick={exportXML} />\n </div>\n </div>\n\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left text-sm whitespace-nowrap\">\n <thead className=\"bg-gray-50 border-b border-gray-200 text-gray-600 font-medium\">\n <tr>\n <th className=\"px-4 py-3 w-10\">\n <input \n type=\"checkbox\" \n checked={processedData.length > 0 && selectedRows.size === processedData.length}\n onChange={toggleSelectAll}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n </th>\n {columns.map((col) => (\n <th key={col.key} className=\"px-4 py-3\">\n <div className=\"flex flex-col gap-2\">\n <div \n className={cn(\"flex items-center gap-1\", col.sortable && \"cursor-pointer hover:text-gray-900 select-none\")}\n onClick={() => col.sortable && handleSort(col.key)}\n >\n {col.header}\n {col.sortable && (\n <div className=\"flex flex-col text-gray-400\">\n <ChevronUp className={cn(\"w-3 h-3 -mb-1\", sortConfig?.key === col.key && sortConfig.direction === 'asc' && \"text-blue-600\")} />\n <ChevronDown className={cn(\"w-3 h-3\", sortConfig?.key === col.key && sortConfig.direction === 'desc' && \"text-blue-600\")} />\n </div>\n )}\n </div>\n {col.searchable && (\n <input \n type=\"text\"\n placeholder=\"Filter...\"\n value={columnSearch[col.key] || ''}\n onChange={(e) => setColumnSearch(prev => ({ ...prev, [col.key]: e.target.value }))}\n className=\"px-2 py-1 text-xs border border-gray-300 rounded focus:ring-1 focus:ring-blue-500 outline-none w-full font-normal\"\n />\n )}\n </div>\n </th>\n ))}\n {(onSee || onEdit || onDelete) && (\n <th className=\"px-4 py-3 text-right\">Actions</th>\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 bg-white\">\n {processedData.length === 0 ? (\n <tr>\n <td colSpan={columns.length + 2} className=\"px-4 py-12 text-center text-gray-500\">\n No data found\n </td>\n </tr>\n ) : (\n processedData.map((row, index) => (\n <tr \n key={index} \n className={cn(\n \"hover:bg-gray-50 transition-colors\",\n selectedRows.has(index) && \"bg-blue-50/50 hover:bg-blue-50\"\n )}\n >\n <td className=\"px-4 py-3\">\n <input \n type=\"checkbox\" \n checked={selectedRows.has(index)}\n onChange={() => toggleSelectRow(index)}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n </td>\n {columns.map((col) => (\n <td key={col.key} className=\"px-4 py-3 text-gray-700\">\n {col.render ? col.render(row) : row[col.key]}\n </td>\n ))}\n {(onSee || onEdit || onDelete) && (\n <td className=\"px-4 py-3 text-right\">\n <div className=\"flex items-center justify-end gap-2\">\n {onSee && (\n <button onClick={() => onSee(row)} className=\"p-1.5 text-gray-400 hover:text-blue-600 hover:bg-blue-50 rounded-md transition-colors\" title=\"View\">\n <Eye className=\"w-4 h-4\" />\n </button>\n )}\n {onEdit && (\n <button onClick={() => onEdit(row)} className=\"p-1.5 text-gray-400 hover:text-emerald-600 hover:bg-emerald-50 rounded-md transition-colors\" title=\"Edit\">\n <Edit className=\"w-4 h-4\" />\n </button>\n )}\n {onDelete && (\n <button onClick={() => onDelete(row)} className=\"p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-md transition-colors\" title=\"Delete\">\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n \n {/* Footer Info */}\n <div className=\"p-4 border-t border-gray-200 bg-gray-50/50 text-sm text-gray-500 flex justify-between\">\n <div>\n Showing {processedData.length} {processedData.length === 1 ? 'entry' : 'entries'}\n </div>\n {selectedRows.size > 0 && (\n <div className=\"font-medium text-blue-600\">\n {selectedRows.size} {selectedRows.size === 1 ? 'row' : 'rows'} selected\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// Helper Export Button Component\nfunction ExportButton({ icon, label, onClick }: { icon: React.ReactNode, label: string, onClick: () => void }) {\n return (\n <button \n onClick={onClick}\n className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-sm\"\n >\n {icon}\n {label}\n </button>\n );\n}\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, description, error, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"checkbox\"\n className={cn(\n \"w-4 h-4 text-blue-600 bg-white border-gray-300 rounded focus:ring-blue-500 focus:ring-2 transition-all\",\n \"disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed\",\n error && \"border-red-500 text-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n aria-describedby={description ? `${inputId}-description` : undefined}\n />\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col pt-0.5\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p id={`${inputId}-description`} className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\" id={`${inputId}-error`}>{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, description, error, id, ...props }, ref) => {\n const inputId = id || `radio-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"radio\"\n className={cn(\n \"w-4 h-4 text-blue-600 bg-white border-gray-300 focus:ring-blue-500 focus:ring-2 transition-all\",\n \"disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed\",\n error && \"border-red-500 text-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n aria-describedby={description ? `${inputId}-description` : undefined}\n />\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col pt-0.5\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p id={`${inputId}-description`} className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\" id={`${inputId}-error`}>{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ className, label, description, error, size = 'md', id, ...props }, ref) => {\n const inputId = id || `toggle-${Math.random().toString(36).slice(2, 9)}`;\n\n const sizeClasses = {\n sm: { switch: 'w-8 h-4', thumb: 'h-3 w-3 translate-x-4' },\n md: { switch: 'w-10 h-5', thumb: 'h-4 w-4 translate-x-5' },\n lg: { switch: 'w-12 h-6', thumb: 'h-5 w-5 translate-x-6' },\n };\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <label htmlFor={inputId} className=\"flex items-center cursor-pointer relative\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"checkbox\"\n className=\"sr-only peer\"\n aria-invalid={!!error}\n />\n <div className={cn(\n \"bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 transition-all\",\n \"peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\",\n error && \"bg-red-200 peer-checked:bg-red-600 peer-focus:ring-red-500\",\n sizeClasses[size].switch,\n className\n )}></div>\n <div className={cn(\n \"absolute left-0.5 top-[2px] bg-white border-gray-300 border rounded-full transition-all peer-checked:border-white\",\n `peer-checked:${sizeClasses[size].thumb}`,\n size === 'sm' && \"h-3 w-3\",\n size === 'md' && \"h-4 w-4\",\n size === 'lg' && \"h-5 w-5\"\n )}></div>\n </label>\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","import React, { forwardRef } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const textareaId = id || `textarea-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={textareaId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <textarea\n ref={ref}\n id={textareaId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-sm\",\n \"transition-all duration-150 outline-none resize-y min-h-[80px]\",\n \"placeholder:text-gray-400 placeholder:text-sm\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n className\n )}\n {...props}\n />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n showValue?: boolean;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n ({ className, label, description, error, showValue = true, id, value, defaultValue, min = 0, max = 100, ...props }, ref) => {\n const inputId = id || `slider-${Math.random().toString(36).slice(2, 9)}`;\n const displayValue = value ?? defaultValue ?? min;\n\n return (\n <div className=\"w-full space-y-2\">\n {(label || showValue) && (\n <div className=\"flex justify-between items-center\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium\",\n props.disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n </label>\n )}\n {showValue && (\n <span className={cn(\"text-xs font-semibold px-2 py-1 rounded bg-gray-100\", props.disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {displayValue}\n </span>\n )}\n </div>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative flex items-center h-5\">\n <input\n {...props}\n type=\"range\"\n id={inputId}\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n className={cn(\n \"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500\",\n \"accent-blue-600\",\n \"disabled:bg-gray-100 disabled:accent-gray-400 disabled:cursor-not-allowed\",\n error && \"accent-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n />\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ColorPickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {\n label?: string;\n description?: string;\n error?: string;\n value?: string;\n onChange?: (color: string) => void;\n defaultValue?: string;\n}\n\nexport const ColorPicker = forwardRef<HTMLInputElement, ColorPickerProps>(\n ({ className, label, description, error, id, value, defaultValue = \"#000000\", onChange, disabled, ...props }, ref) => {\n const inputId = id || `color-${Math.random().toString(36).slice(2, 9)}`;\n const [internalColor, setInternalColor] = useState(defaultValue);\n \n const currentColor = value !== undefined ? value : internalColor;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newColor = e.target.value;\n if (value === undefined) setInternalColor(newColor);\n onChange?.(newColor);\n };\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n </label>\n )}\n \n <div className=\"flex items-center gap-3\">\n <div className=\"relative\">\n <div \n className={cn(\n \"w-10 h-10 rounded-lg border border-gray-300 shadow-sm overflow-hidden flex-shrink-0 relative\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n style={{ backgroundColor: currentColor }}\n >\n <input\n {...props}\n type=\"color\"\n id={inputId}\n ref={ref}\n value={currentColor}\n onChange={handleChange}\n disabled={disabled}\n className=\"opacity-0 absolute inset-0 w-full h-full cursor-pointer disabled:cursor-not-allowed\"\n aria-invalid={!!error}\n />\n </div>\n </div>\n <div className=\"relative flex-grow max-w-[120px]\">\n <input \n type=\"text\" \n value={currentColor.toUpperCase()}\n onChange={handleChange}\n disabled={disabled}\n className={cn(\n \"w-full border border-gray-300 rounded-md px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none uppercase font-mono\",\n disabled && \"bg-gray-100 text-gray-400 cursor-not-allowed\",\n error && \"border-red-500 focus:ring-red-500 focus:border-red-500\"\n )}\n />\n </div>\n </div>\n\n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n \n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nColorPicker.displayName = 'ColorPicker';\n","import React, { useState } from 'react';\nimport { Star } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface RatingProps {\n maxCount?: number;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n hoverable?: boolean;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n label?: string;\n error?: string;\n className?: string;\n}\n\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n ({ \n maxCount = 5, \n value, \n defaultValue = 0, \n onChange, \n hoverable = true, \n size = 'md', \n disabled = false,\n label,\n error,\n className,\n ...props \n }, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const displayValue = hoverValue !== null ? hoverValue : currentValue;\n\n const handleSelect = (idx: number) => {\n if (disabled) return;\n if (value === undefined) setInternalValue(idx);\n onChange?.(idx);\n };\n\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8'\n };\n\n return (\n <div className=\"space-y-1.5\" ref={ref} {...props}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n <div \n className={cn(\n \"flex items-center gap-1\", \n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className\n )}\n onMouseLeave={() => hoverable && !disabled && setHoverValue(null)}\n >\n {Array.from({ length: maxCount }).map((_, i) => {\n const index = i + 1;\n const isActive = index <= displayValue;\n \n return (\n <Star\n key={index}\n className={cn(\n \"transition-colors\",\n sizeClasses[size],\n isActive ? \"fill-amber-400 text-amber-400\" : \"fill-transparent text-gray-300\",\n !disabled && hoverable && \"hover:scale-110 transition-transform\"\n )}\n onClick={() => handleSelect(index)}\n onMouseEnter={() => hoverable && !disabled && setHoverValue(index)}\n />\n );\n })}\n </div>\n {error && <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>}\n </div>\n );\n }\n);\n\nRating.displayName = 'Rating';\n","import React, { useState, useRef, KeyboardEvent, ChangeEvent, ClipboardEvent } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface OTPInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n label?: string;\n error?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport const OTPInput = React.forwardRef<HTMLDivElement, OTPInputProps>(\n ({ \n length = 6, \n value = '', \n onChange, \n label, \n error, \n description,\n disabled = false,\n className,\n ...props \n }, ref) => {\n const defaultOtp = Array(length).fill('');\n // Safely parse initial value into array\n const initialOtp = value ? value.split('').slice(0, length).concat(Array(Math.max(0, length - value.length)).fill('')) : defaultOtp;\n \n const [otp, setOtp] = useState<string[]>(initialOtp);\n const inputRefs = useRef<React.RefObject<HTMLInputElement | null>[]>(\n Array(length).fill(0).map(() => React.createRef<HTMLInputElement>())\n );\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>, index: number) => {\n const { value } = e.target;\n if (disabled) return;\n \n const newOtp = [...otp];\n // Only allow 1 character (last typed)\n const val = value.slice(-1); \n \n if (!/^[0-9]*$/.test(val)) return; // Only numbers\n \n newOtp[index] = val;\n setOtp(newOtp);\n onChange?.(newOtp.join(''));\n\n // Move to next input\n if (val && index < length - 1) {\n inputRefs.current[index + 1].current?.focus();\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>, index: number) => {\n if (e.key === 'Backspace' && !otp[index] && index > 0) {\n // Move to previous input on backspace if current is empty\n inputRefs.current[index - 1].current?.focus();\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (disabled) return;\n \n const pastedData = e.clipboardData.getData('text').slice(0, length);\n if (!/^[0-9]+$/.test(pastedData)) return;\n\n const pastedArray = pastedData.split('');\n const newOtp = [...otp];\n \n pastedArray.forEach((char, i) => {\n if (i < length) newOtp[i] = char;\n });\n \n setOtp(newOtp);\n onChange?.(newOtp.join(''));\n \n // Focus the next empty input or the last one\n const focusIndex = Math.min(pastedArray.length, length - 1);\n inputRefs.current[focusIndex].current?.focus();\n };\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)} ref={ref} {...props}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"flex gap-2 items-center\">\n {otp.map((digit, index) => (\n <input\n key={index}\n ref={inputRefs.current[index]}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n disabled={disabled}\n onChange={(e) => handleChange(e, index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n onPaste={handlePaste}\n className={cn(\n \"w-10 h-12 text-center text-lg font-semibold rounded-lg border border-gray-300 bg-white shadow-sm\",\n \"transition-all duration-150 outline-none placeholder:text-gray-400\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\"\n )}\n aria-invalid={!!error}\n />\n ))}\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nOTPInput.displayName = 'OTPInput';\n","import React, { forwardRef, useState, useRef } from 'react';\nimport { UploadCloud, X, File as FileIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileUploadProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value'> {\n label?: string;\n description?: string;\n error?: string;\n onChange?: (files: File[]) => void;\n multiple?: boolean;\n maxFiles?: number;\n maxSize?: number; // bytes\n accept?: string;\n}\n\nexport const FileUpload = forwardRef<HTMLInputElement, FileUploadProps>(\n ({ \n className, \n label, \n description, \n error, \n multiple = false, \n maxFiles = 5,\n maxSize, \n accept,\n onChange,\n disabled,\n id, \n ...props \n }, ref) => {\n const inputId = id || `file-${Math.random().toString(36).slice(2, 9)}`;\n const [dragActive, setDragActive] = useState(false);\n const [files, setFiles] = useState<File[]>([]);\n const [localError, setLocalError] = useState<string | null>(null);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = (node: HTMLInputElement) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n\n const handleFiles = (newFiles: FileList | null) => {\n if (!newFiles) return;\n setLocalError(null);\n\n let processed = Array.from(newFiles);\n\n if (maxSize) {\n const invalid = processed.find(f => f.size > maxSize);\n if (invalid) {\n setLocalError(`File ${invalid.name} exceeds max size of ${maxSize / 1024 / 1024}MB`);\n return;\n }\n }\n\n if (!multiple && processed.length > 1) {\n processed = [processed[0]];\n }\n\n if (multiple && files.length + processed.length > maxFiles) {\n setLocalError(`Cannot upload more than ${maxFiles} files`);\n return;\n }\n\n const updated = multiple ? [...files, ...processed] : processed;\n setFiles(updated);\n onChange?.(updated);\n };\n\n const handleDrag = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n if (e.type === \"dragenter\" || e.type === \"dragover\") {\n setDragActive(true);\n } else if (e.type === \"dragleave\") {\n setDragActive(false);\n }\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n if (disabled) return;\n if (e.dataTransfer.files && e.dataTransfer.files[0]) {\n handleFiles(e.dataTransfer.files);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.target.files && e.target.files[0]) {\n handleFiles(e.target.files);\n }\n };\n\n const removeFile = (index: number) => {\n if (disabled) return;\n const updated = files.filter((_, i) => i !== index);\n setFiles(updated);\n onChange?.(updated);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const displayError = error || localError;\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n\n <div \n className={cn(\n \"relative w-full border-2 border-dashed rounded-xl p-6 flex flex-col items-center justify-center text-center transition-colors shadow-sm bg-white\",\n dragActive && \"border-blue-500 bg-blue-50/50\",\n !dragActive && !displayError && \"border-gray-300 hover:bg-gray-50\",\n displayError && \"border-red-500 bg-red-50/50\",\n disabled && \"opacity-50 cursor-not-allowed hover:bg-white\"\n )}\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <input\n {...props}\n ref={combinedRef}\n id={inputId}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n onChange={handleChange}\n className=\"hidden\"\n disabled={disabled}\n aria-invalid={!!displayError}\n />\n \n <div className=\"flex flex-col items-center gap-2 cursor-pointer\">\n <div className={cn(\"p-3 rounded-full\", dragActive ? \"bg-blue-100 text-blue-600\" : \"bg-gray-100 text-gray-500\")}>\n <UploadCloud className=\"w-6 h-6\" />\n </div>\n <div className=\"text-sm\">\n <span className=\"font-semibold text-blue-600\">Click to upload</span> or drag and drop\n </div>\n {(description || accept) && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {description || (accept ? `Accepted files: ${accept}` : \"Upload files here\")}\n </p>\n )}\n {multiple && <p className=\"text-xs text-gray-400\">Max files: {maxFiles}</p>}\n </div>\n </div>\n\n {displayError && (\n <p className=\"text-red-500 text-xs mt-0.5\">{displayError}</p>\n )}\n\n {files.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {files.map((file, i) => (\n <div key={`${file.name}-${i}`} className=\"flex items-center justify-between p-2.5 bg-gray-50 border border-gray-200 rounded-lg text-sm\">\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <FileIcon className=\"w-4 h-4 text-gray-400 flex-shrink-0\" />\n <span className=\"truncate text-gray-700\">{file.name}</span>\n <span className=\"text-xs text-gray-400 flex-shrink-0\">\n ({(file.size / 1024).toFixed(1)} KB)\n </span>\n </div>\n {!disabled && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); removeFile(i); }}\n className=\"p-1 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nFileUpload.displayName = 'FileUpload';\n","import React, { forwardRef } from 'react';\nimport { Calendar, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DatePickerProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const inputId = id || `date-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <input\n {...props}\n type=\"date\"\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none text-gray-700\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n \"[&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-0 [&::-webkit-calendar-picker-indicator]:w-10 [&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:cursor-pointer\",\n className\n )}\n />\n <Calendar className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none\" />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n","import React, { forwardRef } from 'react';\nimport { Clock, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TimePickerProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const inputId = id || `time-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <input\n {...props}\n type=\"time\"\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none text-gray-700\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n \"[&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-0 [&::-webkit-calendar-picker-indicator]:w-10 [&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:cursor-pointer\",\n className\n )}\n />\n <Clock className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none\" />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n","import React, { forwardRef } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface InputGroupProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n addonBefore?: React.ReactNode;\n addonAfter?: React.ReactNode;\n}\n\nexport const InputGroup = forwardRef<HTMLInputElement, InputGroupProps>(\n ({ className, label, error, description, required, addonBefore, addonAfter, id, disabled, ...props }, ref) => {\n const inputId = id || `input-group-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"flex rounded-lg shadow-sm\">\n {addonBefore && (\n <span className=\"inline-flex items-center px-3 rounded-l-lg border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {addonBefore}\n </span>\n )}\n <div className=\"relative flex-grow flex items-center\">\n <input\n {...props}\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100 z-10\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n !addonBefore && \"rounded-l-lg\",\n !addonAfter && \"rounded-r-lg\",\n className\n )}\n />\n </div>\n {addonAfter && (\n <span className=\"inline-flex items-center px-3 rounded-r-lg border border-l-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {addonAfter}\n </span>\n )}\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nInputGroup.displayName = 'InputGroup';\n","import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport { ChevronDown, X, Check, Search } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string | string[];\n onChange?: (value: any) => void;\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: string;\n label?: string;\n error?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n ({ \n options = [], \n value, \n onChange, \n multiple = false, \n searchable = false, \n placeholder = 'Select an option', \n label, \n error, \n description,\n disabled = false,\n className\n }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\n\n // Initial state based on whether it's controlled (value) or uncontrolled\n const [internalValue, setInternalValue] = useState<string | string[]>(multiple ? [] : '');\n const currentValue = value !== undefined ? value : internalValue;\n\n // Handle clicking outside to close\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option: SelectOption) => {\n if (option.disabled || disabled) return;\n\n if (multiple) {\n let currentArray = Array.isArray(currentValue) ? currentValue : [];\n let newArray;\n if (currentArray.includes(option.value)) {\n newArray = currentArray.filter(v => v !== option.value);\n } else {\n newArray = [...currentArray, option.value];\n }\n if (value === undefined) setInternalValue(newArray);\n onChange?.(newArray);\n } else {\n if (value === undefined) setInternalValue(option.value);\n onChange?.(option.value);\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n const handleRemove = (e: React.MouseEvent, valToRemove: string) => {\n e.stopPropagation();\n if (disabled) return;\n if (multiple && Array.isArray(currentValue)) {\n const newArray = currentValue.filter(v => v !== valToRemove);\n if (value === undefined) setInternalValue(newArray);\n onChange?.(newArray);\n }\n };\n\n const filteredOptions = searchable \n ? options.filter(opt => opt.label.toLowerCase().includes(searchQuery.toLowerCase()))\n : options;\n\n const renderDisplayValue = () => {\n if (multiple && Array.isArray(currentValue)) {\n if (currentValue.length === 0) return <span className=\"text-gray-400\">{placeholder}</span>;\n return (\n <div className=\"flex flex-wrap gap-1\">\n {currentValue.map(val => {\n const opt = options.find(o => o.value === val);\n if (!opt) return null;\n return (\n <span key={val} className=\"flex items-center gap-1 bg-blue-100 text-blue-700 px-2 py-0.5 rounded text-xs font-medium\">\n {opt.label}\n <button type=\"button\" onClick={(e) => handleRemove(e, val)} className=\"hover:text-blue-900 focus:outline-none\">\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n } else {\n const opt = options.find(o => o.value === currentValue);\n if (!opt) return <span className=\"text-gray-400\">{placeholder}</span>;\n return <span className=\"text-gray-700 truncate\">{opt.label}</span>;\n }\n };\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)} ref={containerRef}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div \n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n \"w-full min-h-[40px] rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm flex items-center justify-between cursor-pointer\",\n \"transition-all duration-150 outline-none shadow-sm\",\n disabled && \"bg-gray-100 text-gray-400 cursor-not-allowed\",\n error && \"border-red-500 ring-1 ring-red-500\",\n isOpen && !error && \"border-blue-500 ring-2 ring-blue-100\"\n )}\n >\n <div className=\"flex-grow pr-2\">\n {renderDisplayValue()}\n </div>\n <ChevronDown className={cn(\"w-4 h-4 text-gray-400 flex-shrink-0 transition-transform\", isOpen && \"rotate-180\")} />\n </div>\n\n {isOpen && (\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-lg max-h-60 overflow-y-auto animate-in fade-in slide-in-from-top-1 py-1\">\n {searchable && (\n <div className=\"sticky top-0 bg-white px-2 pb-2 pt-1 border-b border-gray-100\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input \n type=\"text\" \n placeholder=\"Search...\" \n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border-none bg-gray-50 rounded-md focus:outline-none focus:ring-1 focus:ring-blue-500\"\n />\n </div>\n </div>\n )}\n \n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-gray-500 text-center\">No options found</div>\n ) : (\n filteredOptions.map((opt) => {\n const isSelected = multiple \n ? Array.isArray(currentValue) && currentValue.includes(opt.value)\n : currentValue === opt.value;\n\n return (\n <div \n key={opt.value}\n onClick={(e) => {\n e.stopPropagation();\n handleSelect(opt);\n }}\n className={cn(\n \"px-3 py-2 text-sm flex items-center justify-between cursor-pointer transition-colors\",\n opt.disabled ? \"text-gray-300 cursor-not-allowed bg-gray-50\" : \"text-gray-700 hover:bg-gray-100\",\n isSelected && \"bg-blue-50 text-blue-700\"\n )}\n >\n <span className=\"truncate\">{opt.label}</span>\n {isSelected && <Check className=\"w-4 h-4 text-blue-600 flex-shrink-0\" />}\n </div>\n );\n })\n )}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = 'Select';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport const Card = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border border-gray-200 bg-white text-gray-950 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-gray-500\", className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n ordered?: boolean;\n divided?: boolean;\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(\n ({ className, ordered = false, divided = false, ...props }, ref) => {\n const Component = ordered ? 'ol' : 'ul';\n \n return (\n <Component\n ref={ref as any}\n className={cn(\n \"flex flex-col text-sm text-gray-700 w-full\",\n ordered ? \"list-decimal pl-5\" : \"list-none\",\n divided && \"divide-y divide-gray-200\",\n className\n )}\n {...props}\n />\n );\n }\n);\nList.displayName = \"List\";\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n ({ className, children, icon, action, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn(\n \"flex items-center justify-between py-3 px-4\",\n \"hover:bg-gray-50 transition-colors\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n {icon && <span className=\"flex-shrink-0 text-gray-400\">{icon}</span>}\n <span>{children}</span>\n </div>\n {action && <div className=\"flex-shrink-0 ml-4\">{action}</div>}\n </li>\n );\n }\n);\nListItem.displayName = \"ListItem\";\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n initials?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n status?: 'online' | 'offline' | 'busy' | 'away';\n indicatorPosition?: 'top-right' | 'bottom-right';\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, src, alt, initials, size = 'md', status, indicatorPosition = 'bottom-right', ...props }, ref) => {\n const sizeClasses = {\n sm: 'w-8 h-8 text-xs',\n md: 'w-10 h-10 text-sm',\n lg: 'w-12 h-12 text-base',\n xl: 'w-16 h-16 text-lg',\n };\n\n const statusColors = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n busy: 'bg-red-500',\n away: 'bg-amber-500',\n };\n\n const indicatorPosClasses = {\n 'top-right': 'top-0 right-0 -translate-y-1/4 translate-x-1/4',\n 'bottom-right': 'bottom-0 right-0 translate-y-1/4 translate-x-1/4',\n };\n\n const indicatorSizeClasses = {\n sm: 'w-2.5 h-2.5 border-2',\n md: 'w-3 h-3 border-2',\n lg: 'w-3.5 h-3.5 border-[2.5px]',\n xl: 'w-4 h-4 border-3',\n };\n\n const displayInitials = initials \n ? initials.substring(0, 2).toUpperCase() \n : alt \n ? alt.substring(0, 2).toUpperCase() \n : \"?\";\n\n return (\n <div \n ref={ref} \n className={cn(\"relative inline-block\", className)} \n {...props}\n >\n <div className={cn(\n \"rounded-full overflow-hidden flex items-center justify-center bg-gray-200 text-gray-700 font-medium\",\n !src && \"border border-gray-300\",\n sizeClasses[size]\n )}>\n {src ? (\n <img src={src} alt={alt || \"Avatar\"} className=\"w-full h-full object-cover\" />\n ) : (\n <span>{displayInitials}</span>\n )}\n </div>\n \n {status && (\n <span className={cn(\n \"absolute rounded-full border-white\",\n statusColors[status],\n indicatorPosClasses[indicatorPosition],\n indicatorSizeClasses[size]\n )} \n aria-label={`Status: ${status}`}\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', size = 'md', children, ...props }, ref) => {\n \n const variantClasses = {\n default: 'bg-gray-100 text-gray-800',\n primary: 'bg-blue-100 text-blue-800',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-amber-100 text-amber-800',\n error: 'bg-red-100 text-red-800',\n outline: 'bg-transparent text-gray-800 border-gray-300 border-[1.5px]'\n };\n\n const sizeClasses = {\n sm: 'px-1.5 py-0 text-[10px]',\n md: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm'\n };\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flexitems-center justify-center font-medium rounded-full\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n","import React, { forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.HTMLAttributes<HTMLDivElement> {\n label: React.ReactNode;\n onRemove?: () => void;\n avatar?: React.ReactNode;\n icon?: React.ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'outline';\n disabled?: boolean;\n}\n\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(\n ({ className, label, onRemove, avatar, icon, variant = 'default', disabled = false, ...props }, ref) => {\n \n const variantClasses = {\n default: 'bg-gray-100 text-gray-800 border-gray-200',\n primary: 'bg-blue-100 text-blue-800 border-blue-200',\n success: 'bg-green-100 text-green-800 border-green-200',\n warning: 'bg-amber-100 text-amber-800 border-amber-200',\n error: 'bg-red-100 text-red-800 border-red-200',\n outline: 'bg-transparent text-gray-800 border-gray-300'\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"inline-flex items-center h-8 rounded-full border text-sm transition-colors\",\n variantClasses[variant],\n disabled && \"opacity-50 cursor-not-allowed\",\n (avatar || icon) ? \"pl-1 pr-3\" : \"px-3\",\n className\n )}\n {...props}\n >\n {avatar && (\n <div className=\"mr-2 w-6 h-6 rounded-full overflow-hidden flex items-center justify-center bg-white/50\">\n {avatar}\n </div>\n )}\n {!avatar && icon && <span className=\"mr-2 opacity-70\">{icon}</span>}\n \n <span className=\"truncate max-w-[200px] leading-none py-1\">{label}</span>\n \n {onRemove && (\n <button\n type=\"button\"\n onClick={!disabled ? onRemove : undefined}\n disabled={disabled}\n className={cn(\n \"ml-2 flex items-center justify-center -mr-1 w-4 h-4 rounded-full hover:bg-black/10 focus:outline-none focus:ring-2 focus:ring-offset-1 transition-colors\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nChip.displayName = 'Chip';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, title, description, icon, action, ...props }, ref) => {\n return (\n <div \n ref={ref} \n className={cn(\n \"flex flex-col items-center justify-center p-8 text-center bg-gray-50 border border-dashed border-gray-300 rounded-xl\",\n className\n )} \n {...props}\n >\n {icon && (\n <div className=\"mb-4 text-gray-400 p-4 bg-white rounded-full shadow-sm ring-1 ring-gray-100\">\n {icon}\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-gray-900 mb-1\">{title}</h3>\n {description && (\n <p className=\"text-sm text-gray-500 max-w-sm mb-6\">{description}</p>\n )}\n {action && (\n <div>{action}</div>\n )}\n </div>\n );\n }\n);\n\nEmptyState.displayName = 'EmptyState';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n content: ReactNode;\n children: ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n delay?: number;\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n ({ className, content, children, position = 'top', delay = 200, ...props }, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n\n const showTooltip = () => {\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const positionClasses = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n };\n\n return (\n <div \n ref={ref}\n className=\"relative inline-block w-fit\"\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n {...props}\n >\n {children}\n {isVisible && (\n <div \n className={cn(\n \"absolute z-50 px-3 py-1.5 text-xs text-white bg-gray-900 rounded-md shadow-sm whitespace-nowrap animate-in fade-in zoom-in-95 duration-200 pointer-events-none\",\n positionClasses[position],\n className\n )}\n role=\"tooltip\"\n >\n {content}\n </div>\n )}\n </div>\n );\n }\n);\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n trigger: React.ReactNode;\n content: React.ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n ({ className, trigger, content, position = 'bottom', align = 'center', ...props }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Close when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n \n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n let positionClasses = '';\n if (position === 'bottom') {\n positionClasses = 'top-full mt-2';\n if (align === 'center') positionClasses += ' left-1/2 -translate-x-1/2';\n if (align === 'start') positionClasses += ' left-0';\n if (align === 'end') positionClasses += ' right-0';\n } else if (position === 'top') {\n positionClasses = 'bottom-full mb-2';\n if (align === 'center') positionClasses += ' left-1/2 -translate-x-1/2';\n if (align === 'start') positionClasses += ' left-0';\n if (align === 'end') positionClasses += ' right-0';\n } else if (position === 'right') {\n positionClasses = 'left-full ml-2';\n if (align === 'center') positionClasses += ' top-1/2 -translate-y-1/2';\n if (align === 'start') positionClasses += ' top-0';\n if (align === 'end') positionClasses += ' bottom-0';\n } else if (position === 'left') {\n positionClasses = 'right-full mr-2';\n if (align === 'center') positionClasses += ' top-1/2 -translate-y-1/2';\n if (align === 'start') positionClasses += ' top-0';\n if (align === 'end') positionClasses += ' bottom-0';\n }\n\n return (\n <div \n ref={containerRef}\n className=\"relative inline-block\"\n >\n <div \n onClick={() => setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n \n {isOpen && (\n <div \n ref={ref}\n className={cn(\n \"absolute z-50 w-72 rounded-md border border-gray-200 bg-white p-4 text-gray-950 shadow-md\",\n \"animate-in fade-in zoom-in-95 duration-200\",\n positionClasses,\n className\n )}\n {...props}\n >\n {content}\n </div>\n )}\n </div>\n );\n }\n);\n\nPopover.displayName = 'Popover';\n","import React, { useEffect, forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DialogProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n hideCloseButton?: boolean;\n}\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n ({ className, open, onOpenChange, title, description, children, footer, hideCloseButton = false, ...props }, ref) => {\n \n // Prevent scrolling when dialog is open\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onOpenChange(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Overlay */}\n <div \n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm animate-in fade-in duration-200\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n \n {/* Content */}\n <div\n ref={ref}\n className={cn(\n \"relative z-50 w-full max-w-lg mx-4 gap-4 border border-gray-200 bg-white p-6 shadow-lg sm:rounded-lg\",\n \"animate-in fade-in zoom-in-95 slide-in-from-top-[48%] duration-200\",\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n {...props}\n >\n {!hideCloseButton && (\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-950 focus:ring-offset-2\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n )}\n\n <div className=\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\">\n {title && (\n <h2 className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-gray-500\">\n {description}\n </p>\n )}\n </div>\n\n <div>\n {children}\n </div>\n\n {footer && (\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nDialog.displayName = 'Dialog';\n","import React, { useEffect, forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n direction?: 'left' | 'right' | 'top' | 'bottom';\n title?: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n ({ className, open, onOpenChange, direction = 'right', title, description, children, footer, ...props }, ref) => {\n \n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onOpenChange(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n const directionClasses = {\n right: \"inset-y-0 right-0 h-full w-3/4 sm:max-w-sm border-l animate-in slide-in-from-right\",\n left: \"inset-y-0 left-0 h-full w-3/4 sm:max-w-sm border-r animate-in slide-in-from-left\",\n top: \"inset-x-0 top-0 w-full h-auto border-b animate-in slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 w-full h-auto border-t animate-in slide-in-from-bottom\",\n };\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div \n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm animate-in fade-in duration-200\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n \n <div\n ref={ref}\n className={cn(\n \"fixed z-50 flex flex-col bg-white p-6 shadow-lg duration-300\",\n directionClasses[direction],\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n {...props}\n >\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-950 focus:ring-offset-2\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n\n {(title || description) && (\n <div className=\"flex flex-col space-y-1.5 text-center sm:text-left mb-6 pr-6\">\n {title && <h2 className=\"text-lg font-semibold text-gray-950\">{title}</h2>}\n {description && <p className=\"text-sm text-gray-500\">{description}</p>}\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto min-h-0 py-2\">\n {children}\n </div>\n\n {footer && (\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6 pt-4 border-t border-gray-100\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nDrawer.displayName = 'Drawer';\n","import React, { forwardRef, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItemProps {\n id: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: AccordionItemProps[];\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n value?: string | string[];\n onChange?: (value: string | string[]) => void;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, items, type = 'single', defaultValue, value, onChange, ...props }, ref) => {\n \n // Internal state if uncontrolled\n const [internalState, setInternalState] = useState<string | string[]>(\n defaultValue !== undefined ? defaultValue : (type === 'multiple' ? [] : '')\n );\n\n const activeState = value !== undefined ? value : internalState;\n\n const handleToggle = (id: string) => {\n if (type === 'single') {\n const newValue = activeState === id ? '' : id;\n if (value === undefined) setInternalState(newValue);\n onChange?.(newValue);\n } else {\n const activeArray = Array.isArray(activeState) ? activeState : [];\n const newValue = activeArray.includes(id) \n ? activeArray.filter(i => i !== id) \n : [...activeArray, id];\n \n if (value === undefined) setInternalState(newValue);\n onChange?.(newValue);\n }\n };\n\n const isItemExpanded = (id: string) => {\n if (type === 'single') return activeState === id;\n if (Array.isArray(activeState)) return activeState.includes(id);\n return false;\n };\n\n return (\n <div ref={ref} className={cn(\"w-full border-t border-gray-200\", className)} {...props}>\n {items.map((item) => {\n const isExpanded = isItemExpanded(item.id);\n \n return (\n <div key={item.id} className=\"border-b border-gray-200\">\n <button\n type=\"button\"\n disabled={item.disabled}\n onClick={() => handleToggle(item.id)}\n className={cn(\n \"flex w-full items-center justify-between py-4 font-medium transition-all hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-inset\",\n item.disabled ? \"text-gray-400 cursor-not-allowed\" : \"text-gray-700 hover:bg-gray-50/50\"\n )}\n aria-expanded={isExpanded}\n >\n <span>{item.title}</span>\n <ChevronDown \n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-200 text-gray-500\",\n isExpanded && \"rotate-180\"\n )} \n />\n </button>\n \n <div \n className={cn(\n \"overflow-hidden text-sm text-gray-600 transition-all duration-300 ease-in-out\",\n isExpanded ? \"max-h-96 opacity-100\" : \"max-h-0 opacity-0\"\n )}\n >\n <div className=\"pb-4 pt-1 pr-8\">\n {item.content}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n","import React, { forwardRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n id: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n tabs: TabItem[];\n defaultValue?: string;\n value?: string;\n onChange?: (value: string) => void;\n variant?: 'solid' | 'underline';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n ({ className, tabs, defaultValue, value, onChange, variant = 'solid', ...props }, ref) => {\n \n const [internalState, setInternalState] = useState<string>(\n defaultValue || (tabs.length > 0 ? tabs[0].id : '')\n );\n\n const activeTabId = value !== undefined ? value : internalState;\n\n const handleTabChange = (id: string, disabled?: boolean) => {\n if (disabled) return;\n if (value === undefined) setInternalState(id);\n onChange?.(id);\n };\n\n const activeTabContent = tabs.find(tab => tab.id === activeTabId)?.content;\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {/* Tab List */}\n <div \n className={cn(\n \"flex overflow-x-auto no-scrollbar\",\n variant === 'solid' ? \"bg-gray-100 p-1 rounded-lg gap-1 inline-flex\" : \"border-b border-gray-200 gap-6 w-full\"\n )}\n role=\"tablist\"\n >\n {tabs.map((tab) => {\n const isActive = activeTabId === tab.id;\n\n return (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`panel-${tab.id}`}\n id={`tab-${tab.id}`}\n disabled={tab.disabled}\n onClick={() => handleTabChange(tab.id, tab.disabled)}\n className={cn(\n \"flex items-center justify-center whitespace-nowrap px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\n tab.disabled && \"opacity-50 cursor-not-allowed\",\n \n // Solid Variant Styles\n variant === 'solid' && cn(\n \"rounded-md\",\n isActive \n ? \"bg-white text-gray-900 shadow-sm\" \n : \"text-gray-500 hover:text-gray-900 hover:bg-gray-200/50\"\n ),\n\n // Underline Variant Styles\n variant === 'underline' && cn(\n \"border-b-2 px-1 pb-2 pt-2 -mb-px\",\n isActive \n ? \"border-blue-600 text-blue-600\" \n : \"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300\"\n )\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n\n {/* Tab Panel */}\n <div \n className=\"mt-4 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\"\n role=\"tabpanel\"\n id={`panel-${activeTabId}`}\n aria-labelledby={`tab-${activeTabId}`}\n >\n {activeTabContent}\n </div>\n </div>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n","import React, { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n items: React.ReactNode[];\n showControls?: boolean;\n showDots?: boolean;\n autoPlay?: boolean;\n interval?: number;\n}\n\nexport interface CarouselHandle {\n scrollNext: () => void;\n scrollPrev: () => void;\n scrollTo: (index: number) => void;\n}\n\nexport const Carousel = forwardRef<CarouselHandle, CarouselProps>(\n ({ className, items, showControls = true, showDots = true, autoPlay = false, interval = 5000, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const scrollTo = (index: number) => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n const scrollWidth = container.scrollWidth;\n const itemWidth = scrollWidth / items.length;\n container.scrollTo({\n left: index * itemWidth,\n behavior: 'smooth'\n });\n setCurrentIndex(index);\n };\n\n const scrollNext = () => {\n const nextIndex = (currentIndex + 1) % items.length;\n scrollTo(nextIndex);\n };\n\n const scrollPrev = () => {\n const prevIndex = (currentIndex - 1 + items.length) % items.length;\n scrollTo(prevIndex);\n };\n\n // Auto-play\n useEffect(() => {\n if (!autoPlay) return;\n const timer = setInterval(() => {\n scrollNext();\n }, interval);\n return () => clearInterval(timer);\n }, [currentIndex, autoPlay, interval, items.length]);\n\n // Track scroll to update dot indicator\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n const itemWidth = container.scrollWidth / items.length;\n const newIndex = Math.round(container.scrollLeft / itemWidth);\n setCurrentIndex(newIndex);\n };\n\n container.addEventListener('scroll', handleScroll, { passive: true });\n return () => container.removeEventListener('scroll', handleScroll);\n }, [items.length]);\n\n // Forwarding ref for external control\n useImperativeHandle(ref, () => ({\n scrollNext,\n scrollPrev,\n scrollTo\n }));\n\n if (!items || items.length === 0) return null;\n\n return (\n <div className={cn(\"relative group w-full overflow-hidden\", className)} {...props}>\n {/* Slides Container */}\n <div \n ref={containerRef}\n className=\"flex w-full overflow-x-auto snap-x snap-mandatory no-scrollbar smooth-scroll\"\n style={{ scrollBehavior: 'smooth' }}\n >\n {items.map((item, index) => (\n <div \n key={index} \n className=\"w-full flex-shrink-0 snap-center snap-always transition-all\"\n >\n {item}\n </div>\n ))}\n </div>\n\n {/* Controls */}\n {showControls && items.length > 1 && (\n <>\n <button\n type=\"button\"\n onClick={scrollPrev}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 w-10 h-10 flex items-center justify-center rounded-full bg-white/80 text-gray-800 shadow-md backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity hover:bg-white focus:outline-none focus:ring-2 focus:ring-blue-500\"\n aria-label=\"Previous slide\"\n >\n <ChevronLeft className=\"w-6 h-6\" />\n </button>\n <button\n type=\"button\"\n onClick={scrollNext}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 w-10 h-10 flex items-center justify-center rounded-full bg-white/80 text-gray-800 shadow-md backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity hover:bg-white focus:outline-none focus:ring-2 focus:ring-blue-500\"\n aria-label=\"Next slide\"\n >\n <ChevronRight className=\"w-6 h-6\" />\n </button>\n </>\n )}\n\n {/* Dots */}\n {showDots && items.length > 1 && (\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex items-center gap-2 z-10\">\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => scrollTo(index)}\n className={cn(\n \"w-2.5 h-2.5 rounded-full transition-all focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1\",\n currentIndex === index \n ? \"bg-white scale-125 shadow-sm\" \n : \"bg-white/50 hover:bg-white/80\"\n )}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nCarousel.displayName = 'Carousel';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TimelineItem {\n id: string | number;\n title: React.ReactNode;\n description?: React.ReactNode;\n date?: React.ReactNode;\n icon?: React.ReactNode;\n status?: 'default' | 'completed' | 'current' | 'error';\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TimelineItem[];\n mode?: 'left' | 'alternate';\n}\n\nexport const Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, mode = 'left', ...props }, ref) => {\n\n const statusColors = {\n default: \"text-gray-400 bg-gray-200 border-gray-300\",\n completed: \"text-white bg-green-500 border-green-500\",\n current: \"text-blue-500 bg-white border-blue-500 border-2\",\n error: \"text-red-500 bg-white border-red-500 border-2\",\n };\n\n return (\n <div ref={ref} className={cn(\"relative w-full\", className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const status = item.status || 'default';\n const isAlternateLeft = mode === 'alternate' && index % 2 === 0;\n const isAlternateRight = mode === 'alternate' && index % 2 !== 0;\n\n return (\n <div \n key={item.id} \n className={cn(\n \"relative flex gap-4 md:gap-6\",\n \"pb-8 last:pb-0\",\n mode === 'alternate' && \"md:justify-center\"\n )}\n >\n {/* Line */}\n {!isLast && (\n <div \n className={cn(\n \"absolute top-6 bottom-0 w-px bg-gray-200\",\n mode === 'alternate' \n ? \"left-6 md:left-1/2 md:-ml-[0.5px]\" \n : \"left-6\"\n )} \n />\n )}\n\n {/* Alternate mode - Left content spacer (on Desktop) */}\n {mode === 'alternate' && (\n <div \n className={cn(\n \"hidden md:block w-1/2 flex-shrink-0 text-right pr-12\",\n isAlternateRight ? \"invisible\" : \"\"\n )}\n >\n {isAlternateLeft && (\n <div className=\"pt-1.5 flex flex-col items-end\">\n <h4 className=\"text-sm font-semibold text-gray-900\">{item.title}</h4>\n {item.date && <span className=\"text-xs text-gray-500 mb-1\">{item.date}</span>}\n {item.description && <p className=\"text-sm text-gray-600 mt-1\">{item.description}</p>}\n </div>\n )}\n </div>\n )}\n\n {/* Status Indicator / Icon */}\n <div \n className={cn(\n \"relative z-10 flex flex-shrink-0 items-center justify-center w-12 h-12 rounded-full\",\n mode === 'alternate' && \"md:mx-auto\",\n statusColors[status]\n )}\n >\n {item.icon ? (\n <span className=\"w-5 h-5 flex items-center justify-center\">{item.icon}</span>\n ) : (\n <span className={cn(\n \"w-3 h-3 rounded-full\",\n status === 'default' && \"bg-gray-400\",\n status === 'completed' && \"bg-white\",\n status === 'current' && \"bg-blue-500\",\n status === 'error' && \"bg-red-500\"\n )} />\n )}\n </div>\n\n {/* Content */}\n <div \n className={cn(\n \"pt-1.5 flex-1\",\n mode === 'alternate' && \"md:w-1/2 md:pl-12 md:flex-none\",\n isAlternateLeft && \"md:hidden\" // Hide right content on desktop if it's left-aligned in alternate mode\n )}\n >\n <h4 className=\"text-sm font-semibold text-gray-900\">{item.title}</h4>\n {item.date && <span className=\"text-xs text-gray-500 mb-1 block\">{item.date}</span>}\n {item.description && <p className=\"text-sm text-gray-600 mt-1\">{item.description}</p>}\n </div>\n\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nTimeline.displayName = 'Timeline';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronRight, ChevronDown, Folder, File as FileIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TreeNode {\n id: string;\n label: string;\n icon?: React.ReactNode;\n children?: TreeNode[];\n expanded?: boolean;\n selected?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSelect'> {\n data: TreeNode[];\n onSelect?: (node: TreeNode) => void;\n defaultExpandedIds?: string[];\n}\n\nconst TreeViewNode: React.FC<{\n node: TreeNode;\n level: number;\n expandedIds: Set<string>;\n toggleExpand: (id: string, e: React.MouseEvent) => void;\n onSelect?: (node: TreeNode) => void;\n selectedId?: string;\n}> = ({ node, level, expandedIds, toggleExpand, onSelect, selectedId }) => {\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id || node.selected;\n const isFolder = node.children && node.children.length > 0;\n\n return (\n <div className=\"w-full\">\n <div \n className={cn(\n \"flex items-center py-1.5 px-2 rounded-md cursor-pointer transition-colors text-sm\",\n isSelected ? \"bg-blue-50 text-blue-700 font-medium\" : \"text-gray-700 hover:bg-gray-100\",\n level > 0 && \"ml-4\"\n )}\n style={{ paddingLeft: `${level > 0 ? 0.5 : 0.5}rem` }}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(node);\n if (isFolder && !isSelected) {\n toggleExpand(node.id, e);\n }\n }}\n >\n {isFolder ? (\n <button \n type=\"button\" \n onClick={(e) => toggleExpand(node.id, e)} \n className=\"mr-1 w-5 h-5 flex flex-shrink-0 items-center justify-center text-gray-400 hover:text-gray-700 rounded hover:bg-gray-200 transition-colors\"\n >\n {isExpanded ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\n </button>\n ) : (\n <span className=\"mr-1 w-5 h-5 flex flex-shrink-0\" /> // Spacer\n )}\n \n <span className=\"mr-2 text-gray-400\">\n {node.icon ? node.icon : (isFolder ? <Folder className=\"w-4 h-4\" /> : <FileIcon className=\"w-4 h-4\" />)}\n </span>\n \n <span className=\"truncate\">{node.label}</span>\n </div>\n \n {isFolder && isExpanded && (\n <div className=\"relative\">\n {/* Connecting line */}\n <div className=\"absolute left-[13px] top-0 bottom-0 w-px bg-gray-200\" />\n <div className=\"pl-6\">\n {node.children!.map(child => (\n <TreeViewNode \n key={child.id} \n node={child} \n level={level + 1} \n expandedIds={expandedIds} \n toggleExpand={toggleExpand}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const TreeView = forwardRef<HTMLDivElement, TreeViewProps>(\n ({ className, data, onSelect, defaultExpandedIds = [], ...props }, ref) => {\n \n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set(defaultExpandedIds));\n const [selectedId, setSelectedId] = useState<string | undefined>();\n\n // Initial expanded state based on default nodes with 'expanded: true'\n React.useEffect(() => {\n const getInitialExpanded = (nodes: TreeNode[], acc: Set<string>): Set<string> => {\n nodes.forEach(node => {\n if (node.expanded) acc.add(node.id);\n if (node.children) getInitialExpanded(node.children, acc);\n });\n return acc;\n };\n \n if (defaultExpandedIds.length === 0) {\n const initial = getInitialExpanded(data, new Set());\n if (initial.size > 0) setExpandedIds(initial);\n }\n }, [data, defaultExpandedIds.length]);\n\n const toggleExpand = (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedIds(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const handleSelect = (node: TreeNode) => {\n setSelectedId(node.id);\n onSelect?.(node);\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full bg-white border border-gray-200 rounded-lg p-2 select-none\", className)} \n {...props}\n >\n {data.map(node => (\n <TreeViewNode \n key={node.id} \n node={node} \n level={0} \n expandedIds={expandedIds} \n toggleExpand={toggleExpand}\n onSelect={handleSelect}\n selectedId={selectedId}\n />\n ))}\n </div>\n );\n }\n);\n\nTreeView.displayName = 'TreeView';\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StatisticProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'prefix'> {\n title: React.ReactNode;\n value: number | string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n animateCountUp?: boolean;\n duration?: number;\n}\n\nexport const Statistic = forwardRef<HTMLDivElement, StatisticProps>(\n ({ className, title, value, prefix, suffix, precision = 0, animateCountUp = false, duration = 2000, ...props }, ref) => {\n \n // Simple count up effect\n const [displayValue, setDisplayValue] = useState<number | string>(animateCountUp && typeof value === 'number' ? 0 : value);\n\n useEffect(() => {\n if (!animateCountUp || typeof value !== 'number') {\n setDisplayValue(value);\n return;\n }\n\n let startTime: number | null = null;\n let animationFrame: number;\n\n const animate = (timestamp: number) => {\n if (!startTime) startTime = timestamp;\n const progress = Math.min((timestamp - startTime) / duration, 1);\n \n // Easing function (easeOutExpo)\n const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);\n \n const currentVal = value * easeProgress;\n setDisplayValue(Number(currentVal.toFixed(precision)));\n\n if (progress < 1) {\n animationFrame = requestAnimationFrame(animate);\n } else {\n setDisplayValue(Number(value.toFixed(precision)));\n }\n };\n\n animationFrame = requestAnimationFrame(animate);\n\n return () => cancelAnimationFrame(animationFrame);\n }, [value, animateCountUp, duration, precision]);\n\n const formattedValue = typeof displayValue === 'number' \n ? displayValue.toLocaleString(undefined, { minimumFractionDigits: precision, maximumFractionDigits: precision })\n : displayValue;\n\n return (\n <div ref={ref} className={cn(\"inline-flex flex-col\", className)} {...props}>\n <div className=\"text-sm font-medium text-gray-500 mb-1\">{title}</div>\n <div className=\"flex items-baseline gap-1\">\n {prefix && <span className=\"text-gray-500 font-medium\">{prefix}</span>}\n <span className=\"text-2xl font-bold text-gray-900 leading-none\">{formattedValue}</span>\n {suffix && <span className=\"text-gray-500 font-medium\">{suffix}</span>}\n </div>\n </div>\n );\n }\n);\n\nStatistic.displayName = 'Statistic';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ProgressBarProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n max?: number;\n showValueLabel?: boolean;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'primary' | 'success' | 'warning' | 'error';\n}\n\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n ({ className, value, max = 100, showValueLabel = false, size = 'md', variant = 'primary', ...props }, ref) => {\n \n // Clamp value between 0 and max\n const clampedValue = Math.min(Math.max(value, 0), max);\n const percentage = Math.round((clampedValue / max) * 100);\n\n const sizeClasses = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4'\n };\n\n const variantClasses = {\n primary: 'bg-blue-600',\n success: 'bg-green-500',\n warning: 'bg-amber-400',\n error: 'bg-red-500',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full flex flex-col gap-1.5\", className)} \n role=\"progressbar\" \n aria-valuenow={clampedValue} \n aria-valuemin={0} \n aria-valuemax={max}\n {...props}\n >\n {showValueLabel && (\n <div className=\"flex justify-between text-xs font-semibold text-gray-600 px-1\">\n <span>Progress</span>\n <span>{percentage}%</span>\n </div>\n )}\n <div className={cn(\"w-full bg-gray-200 rounded-full overflow-hidden\", sizeClasses[size])}>\n <div \n className={cn(\"h-full rounded-full transition-all duration-500 ease-out\", variantClasses[variant])}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n }\n);\n\nProgressBar.displayName = 'ProgressBar';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'text' | 'circular' | 'rectangular';\n width?: string | number;\n height?: string | number;\n animate?: boolean;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant = 'text', width, height, animate = true, ...props }, ref) => {\n \n const baseStyles = \"bg-gray-200\";\n \n const variantStyles = {\n text: \"h-4 w-full rounded-md\",\n circular: \"rounded-full w-10 h-10\",\n rectangular: \"rounded-lg w-full h-32\"\n };\n\n return (\n <div\n ref={ref}\n style={{ width, height }}\n className={cn(\n baseStyles,\n variantStyles[variant],\n animate && \"animate-pulse\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CalendarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n}\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n ({ className, value, onChange, minDate, maxDate, ...props }, ref) => {\n \n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n \n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const selectedDateStr = value?.toDateString();\n\n const getDaysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n const getFirstDayOfMonth = (year: number, month: number) => new Date(year, month, 1).getDay();\n\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n\n const daysInMonth = getDaysInMonth(year, month);\n const firstDayIndex = getFirstDayOfMonth(year, month);\n\n const prevMonth = () => {\n setCurrentMonth(new Date(year, month - 1, 1));\n };\n\n const nextMonth = () => {\n setCurrentMonth(new Date(year, month + 1, 1));\n };\n\n const handleSelectDate = (day: number) => {\n const newDate = new Date(year, month, day);\n if (onChange) {\n onChange(newDate);\n }\n };\n\n const isDateDisabled = (day: number) => {\n const date = new Date(year, month, day);\n date.setHours(0,0,0,0);\n \n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n const weekDays = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\n const renderDays = () => {\n const days = [];\n const totalCells = Math.ceil((daysInMonth + firstDayIndex) / 7) * 7;\n\n for (let i = 0; i < totalCells; i++) {\n const dayNumber = i - firstDayIndex + 1;\n const isCurrentMonth = dayNumber > 0 && dayNumber <= daysInMonth;\n \n if (!isCurrentMonth) {\n days.push(<div key={`empty-${i}`} className=\"w-9 h-9\" />);\n continue;\n }\n\n const dateObj = new Date(year, month, dayNumber);\n const isSelected = selectedDateStr === dateObj.toDateString();\n const isToday = today.toDateString() === dateObj.toDateString();\n const disabled = isDateDisabled(dayNumber);\n\n days.push(\n <button\n key={`day-${dayNumber}`}\n onClick={() => handleSelectDate(dayNumber)}\n disabled={disabled}\n className={cn(\n \"w-9 h-9 flex items-center justify-center rounded-full text-sm transition-colors\",\n disabled \n ? \"text-gray-300 cursor-not-allowed\" \n : \"text-gray-700 hover:bg-gray-100 cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500\",\n isToday && !isSelected && \"bg-gray-100 font-bold text-blue-600\",\n isSelected && \"bg-blue-600 text-white hover:bg-blue-700 font-semibold\"\n )}\n >\n {dayNumber}\n </button>\n );\n }\n return days;\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-fit p-4 bg-white border border-gray-200 rounded-xl shadow-sm select-none\", className)} \n {...props}\n >\n <div className=\"flex items-center justify-between mb-4 px-1\">\n <button \n type=\"button\" \n onClick={prevMonth}\n className=\"w-8 h-8 flex items-center justify-center rounded-full hover:bg-gray-100 text-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n \n <div className=\"font-semibold text-gray-800 text-sm\">\n {monthNames[month]} {year}\n </div>\n \n <button \n type=\"button\" \n onClick={nextMonth}\n className=\"w-8 h-8 flex items-center justify-center rounded-full hover:bg-gray-100 text-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {weekDays.map(day => (\n <div key={day} className=\"w-9 text-center text-xs font-medium text-gray-400\">\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {renderDays()}\n </div>\n </div>\n );\n }\n);\n\nCalendar.displayName = 'Calendar';\n","import React, { useState, forwardRef, useEffect } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface KanbanItem {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n columnId: string;\n}\n\nexport interface KanbanColumn {\n id: string;\n title: React.ReactNode;\n}\n\nexport interface KanbanProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n columns: KanbanColumn[];\n items: KanbanItem[];\n onChange?: (items: KanbanItem[]) => void;\n}\n\nexport const Kanban = forwardRef<HTMLDivElement, KanbanProps>(\n ({ className, columns, items: initialItems, onChange, ...props }, ref) => {\n \n const [items, setItems] = useState<KanbanItem[]>(initialItems);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n\n // Sync with external updates\n useEffect(() => {\n setItems(initialItems);\n }, [initialItems]);\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>, itemId: string) => {\n setDraggedItemId(itemId);\n // Essential for Firefox drag and drop support\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', itemId);\n // Slightly delay the opactiy change so the drag ghost remains fully visible\n setTimeout(() => {\n const ele = document.getElementById(`kanban-item-${itemId}`);\n if(ele) ele.style.opacity = '0.4';\n }, 0);\n }\n };\n\n const handleDragEnd = (e: React.DragEvent<HTMLDivElement>, itemId: string) => {\n setDraggedItemId(null);\n const ele = document.getElementById(`kanban-item-${itemId}`);\n if(ele) ele.style.opacity = '1';\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n // Allow drop\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>, targetColumnId: string) => {\n e.preventDefault();\n const itemId = e.dataTransfer.getData('text/plain') || draggedItemId;\n \n if (!itemId) return;\n\n const newItems = items.map(item => {\n if (item.id === itemId) {\n return { ...item, columnId: targetColumnId };\n }\n return item;\n });\n\n setItems(newItems);\n onChange?.(newItems);\n setDraggedItemId(null);\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"flex w-full overflow-x-auto gap-4 p-4 min-h-[400px] bg-gray-50/50 rounded-xl\", className)} \n {...props}\n >\n {columns.map(column => {\n const columnItems = items.filter(item => item.columnId === column.id);\n\n return (\n <div \n key={column.id}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e, column.id)}\n className=\"flex flex-col w-80 flex-shrink-0 bg-gray-100 rounded-lg\"\n >\n <div className=\"p-3 border-b border-gray-200 flex items-center justify-between\">\n <h3 className=\"font-semibold text-gray-700 text-sm flex items-center gap-2\">\n {column.title}\n <span className=\"bg-gray-200 text-gray-600 text-xs py-0.5 px-2 rounded-full font-medium\">\n {columnItems.length}\n </span>\n </h3>\n </div>\n \n <div className=\"p-3 flex-1 overflow-y-auto flex flex-col gap-3 min-h-[150px]\">\n {columnItems.map(item => (\n <div\n key={item.id}\n id={`kanban-item-${item.id}`}\n draggable\n onDragStart={(e) => handleDragStart(e, item.id)}\n onDragEnd={(e) => handleDragEnd(e, item.id)}\n className={cn(\n \"bg-white p-3 rounded-md shadow-sm border border-gray-200 cursor-grab active:cursor-grabbing hover:border-gray-300 hover:shadow-md transition-all\",\n draggedItemId === item.id ? \"ring-2 ring-blue-500 ring-offset-1 opacity-40 shadow-none border-dashed\" : \"\"\n )}\n >\n <h4 className=\"text-sm font-medium text-gray-900 mb-1\">{item.title}</h4>\n {item.description && (\n <p className=\"text-xs text-gray-500 line-clamp-2\">{item.description}</p>\n )}\n </div>\n ))}\n \n {columnItems.length === 0 && (\n <div className=\"h-full border-2 border-dashed border-gray-200 rounded-md flex items-center justify-center pointer-events-none\">\n <span className=\"text-xs text-gray-400 font-medium\">Drop items here</span>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nKanban.displayName = 'Kanban';\n","import React, { forwardRef, useState } from 'react';\nimport { AlertCircle, CheckCircle2, Info, X, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n description?: React.ReactNode;\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n onClose?: () => void;\n dismissible?: boolean;\n}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n ({ className, title, description, variant = 'default', onClose, dismissible = false, children, ...props }, ref) => {\n \n const [isVisible, setIsVisible] = useState(true);\n\n if (!isVisible) return null;\n\n const Icon = {\n default: Info,\n info: Info,\n success: CheckCircle2,\n warning: AlertCircle,\n error: XCircle,\n }[variant];\n\n const variantStyles = {\n default: 'bg-gray-100 text-gray-800 border-gray-200',\n info: 'bg-blue-50 text-blue-800 border-blue-200',\n success: 'bg-green-50 text-green-800 border-green-200',\n warning: 'bg-amber-50 text-amber-800 border-amber-200',\n error: 'bg-red-50 text-red-800 border-red-200',\n };\n\n const iconStyles = {\n default: 'text-gray-500',\n info: 'text-blue-500',\n success: 'text-green-500',\n warning: 'text-amber-500',\n error: 'text-red-500',\n };\n\n const handleClose = () => {\n setIsVisible(false);\n onClose?.();\n };\n\n return (\n <div \n ref={ref} \n role=\"alert\"\n className={cn(\"relative w-full rounded-lg border p-4 flex items-start gap-4 transition-all duration-300\", variantStyles[variant], className)} \n {...props}\n >\n <Icon className={cn(\"mt-0.5 h-5 w-5 flex-shrink-0\", iconStyles[variant])} />\n <div className=\"flex-1 flex flex-col gap-1 pr-6\">\n {title && <h5 className=\"font-medium leading-none tracking-tight\">{title}</h5>}\n {(description || children) && (\n <div className=\"text-sm opacity-90 leading-relaxed\">\n {description}\n {children}\n </div>\n )}\n </div>\n {dismissible && (\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-4 rounded-md p-1 opacity-70 hover:opacity-100 hover:bg-black/5 transition-all focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-offset-transparent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n","import React, { useState, useEffect } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { X, CheckCircle, AlertCircle, Info, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastOptions {\n id?: string;\n title?: string;\n description?: React.ReactNode;\n variant?: ToastVariant;\n duration?: number;\n}\n\n// Simple event listener for toast events\ntype Listener = (toast: ToastOptions) => void;\nlet listeners: Listener[] = [];\n\nexport const toast = (options: Omit<ToastOptions, 'id'> | string) => {\n if (typeof window === 'undefined') return;\n\n const id = Math.random().toString(36).substring(2, 9);\n \n const toastObj = typeof options === 'string' \n ? { id, title: options, variant: 'default' as ToastVariant } \n : { id, ...options };\n\n listeners.forEach(listener => listener(toastObj));\n\n return id;\n};\n\ntoast.success = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'success', ...options });\ntoast.error = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'error', ...options });\ntoast.warning = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'warning', ...options });\ntoast.info = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'info', ...options });\n\nexport const Toaster: React.FC = () => {\n const [toasts, setToasts] = useState<ToastOptions[]>([]);\n\n useEffect(() => {\n const handleAdd = (toastObj: ToastOptions) => {\n setToasts(prev => [...prev, toastObj]);\n if (toastObj.duration !== 0) {\n setTimeout(() => {\n setToasts(prev => prev.filter(t => t.id !== toastObj.id));\n }, toastObj.duration || 4000);\n }\n };\n\n listeners.push(handleAdd);\n return () => {\n listeners = listeners.filter(l => l !== handleAdd);\n };\n }, []);\n\n const removeToast = (id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n };\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed bottom-0 right-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px] gap-2 pointer-events-none\">\n {toasts.map(t => (\n <ToastItem key={t.id} toast={t} onRemove={() => removeToast(t.id!)} />\n ))}\n </div>\n );\n};\n\nconst ToastItem: React.FC<{ toast: ToastOptions; onRemove: () => void }> = ({ toast, onRemove }) => {\n const [isShowing, setIsShowing] = useState(false);\n\n useEffect(() => {\n // Trigger entrance animation\n requestAnimationFrame(() => setIsShowing(true));\n }, []);\n\n const variantStyles = {\n default: 'bg-white text-gray-900 border-gray-200',\n success: 'bg-green-50 text-green-900 border-green-200',\n error: 'bg-red-50 text-red-900 border-red-200',\n warning: 'bg-amber-50 text-amber-900 border-amber-200',\n info: 'bg-blue-50 text-blue-900 border-blue-200',\n };\n\n const Icon = {\n default: Info,\n success: CheckCircle,\n error: XCircle,\n warning: AlertCircle,\n info: Info,\n }[toast.variant || 'default'];\n\n const iconColors = {\n default: 'text-gray-400',\n success: 'text-green-500',\n error: 'text-red-500',\n warning: 'text-amber-500',\n info: 'text-blue-500',\n };\n\n return (\n <div\n className={cn(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-8 shadow-lg transition-all duration-300\",\n variantStyles[toast.variant || 'default'],\n isShowing ? \"translate-x-0 opacity-100\" : \"translate-x-[100%] opacity-0\"\n )}\n >\n <div className=\"flex items-start gap-3 flex-1\">\n <Icon className={cn(\"h-5 w-5 mt-0.5 flex-shrink-0\", iconColors[toast.variant || 'default'])} />\n <div className=\"grid gap-1\">\n {toast.title && <div className=\"text-sm font-semibold\">{toast.title}</div>}\n {toast.description && <div className=\"text-sm opacity-90\">{toast.description}</div>}\n </div>\n </div>\n <button\n onClick={onRemove}\n className=\"absolute right-2 top-2 rounded-md p-1 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-black/5\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n );\n};\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'primary' | 'white' | 'gray';\n}\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = 'md', variant = 'primary', ...props }, ref) => {\n \n const sizeClasses = {\n sm: 'h-4 w-4 border-2',\n md: 'h-6 w-6 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n };\n\n const variantClasses = {\n primary: 'border-gray-200 border-t-blue-600',\n white: 'border-white/20 border-t-white',\n gray: 'border-gray-200 border-t-gray-600',\n };\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-block rounded-full animate-spin\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","import React, { forwardRef, useState } from 'react';\nimport { X, Info, AlertTriangle, CheckCircle, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface BannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: 'info' | 'success' | 'warning' | 'error';\n dismissible?: boolean;\n onClose?: () => void;\n action?: React.ReactNode;\n}\n\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(\n ({ className, title, description, variant = 'info', dismissible = true, onClose, action, ...props }, ref) => {\n \n const [isVisible, setIsVisible] = useState(true);\n\n if (!isVisible) return null;\n\n const variantStyles = {\n info: 'bg-blue-600 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-amber-500 text-white',\n error: 'bg-red-600 text-white',\n };\n\n const Icon = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n }[variant];\n\n const handleClose = () => {\n setIsVisible(false);\n onClose?.();\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full px-4 py-3 flex items-center justify-between gap-4 transition-all\", variantStyles[variant], className)}\n {...props}\n >\n <div className=\"flex items-center gap-3 flex-1 overflow-hidden\">\n <Icon className=\"h-5 w-5 flex-shrink-0 opacity-80\" />\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3 flex-1 truncate\">\n {title && <span className=\"font-semibold text-sm whitespace-nowrap\">{title}</span>}\n {description && <span className=\"text-sm opacity-90 truncate\">{description}</span>}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {action && (\n <div className=\"text-sm font-medium mr-2\">\n {action}\n </div>\n )}\n {dismissible && (\n <button\n onClick={handleClose}\n className=\"p-1 rounded-md hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n </div>\n );\n }\n);\n\nBanner.displayName = 'Banner';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n status: 'online' | 'offline' | 'busy' | 'away' | 'active' | 'inactive' | 'pending' | 'error';\n size?: 'sm' | 'md' | 'lg';\n ping?: boolean;\n label?: string;\n labelPosition?: 'right' | 'left';\n}\n\nexport const StatusIndicator = forwardRef<HTMLSpanElement, StatusIndicatorProps>(\n ({ className, status, size = 'md', ping = false, label, labelPosition = 'right', ...props }, ref) => {\n \n const sizeClasses = {\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n };\n\n const colorClasses = {\n online: 'bg-green-500',\n active: 'bg-green-500',\n offline: 'bg-gray-400',\n inactive: 'bg-gray-400',\n busy: 'bg-red-500',\n error: 'bg-red-500',\n away: 'bg-amber-400',\n pending: 'bg-amber-400',\n };\n\n const IndicatorCircle = (\n <span className=\"relative flex items-center justify-center flex-shrink-0\">\n {ping && (\n <span \n className={cn(\n \"absolute inline-flex h-full w-full rounded-full opacity-75 animate-ping\", \n colorClasses[status]\n )} \n />\n )}\n <span \n className={cn(\n \"relative inline-flex rounded-full shadow-sm\",\n sizeClasses[size], \n colorClasses[status]\n )}\n />\n </span>\n );\n\n if (!label) {\n return (\n <span ref={ref} className={cn(\"inline-flex\", className)} title={status} {...props}>\n {IndicatorCircle}\n </span>\n );\n }\n\n return (\n <span ref={ref} className={cn(\"inline-flex items-center gap-2 text-sm font-medium text-gray-700\", className)} {...props}>\n {labelPosition === 'left' && <span className=\"capitalize\">{label || status}</span>}\n {IndicatorCircle}\n {labelPosition === 'right' && <span className=\"capitalize\">{label || status}</span>}\n </span>\n );\n }\n);\n\nStatusIndicator.displayName = 'StatusIndicator';\n","import React, { forwardRef, useState, useEffect, useRef } from 'react';\nimport { Menu, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n brand?: React.ReactNode;\n links?: { label: React.ReactNode; href: string }[];\n actions?: React.ReactNode;\n sticky?: boolean;\n}\n\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n ({ className, brand, links = [], actions, sticky = false, children, ...props }, ref) => {\n \n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n \n // Close mobile menu on resize\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth >= 768) {\n setIsMobileMenuOpen(false);\n }\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return (\n <nav \n ref={ref} \n className={cn(\n \"w-full bg-white border-b border-gray-200 z-40 transition-all\",\n sticky ? \"sticky top-0\" : \"relative\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between h-16\">\n \n {/* Left side: Brand */}\n <div className=\"flex items-center\">\n {brand && (\n <div className=\"flex-shrink-0 flex items-center font-bold text-xl text-gray-900 mr-8\">\n {brand}\n </div>\n )}\n \n {/* Desktop Links */}\n <div className=\"hidden md:ml-6 md:flex md:space-x-8\">\n {links.map((link, idx) => (\n <a\n key={idx}\n href={link.href}\n className=\"inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium text-gray-500 hover:border-gray-300 hover:text-gray-700 transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </div>\n </div>\n\n {/* Right side: Actions / Custom contents */}\n <div className=\"hidden md:flex md:items-center md:space-x-4\">\n {actions}\n {children}\n </div>\n\n {/* Mobile menu button */}\n <div className=\"flex items-center md:hidden\">\n <button\n type=\"button\"\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n className=\"inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500\"\n aria-expanded={isMobileMenuOpen}\n >\n <span className=\"sr-only\">Open main menu</span>\n {isMobileMenuOpen ? (\n <X className=\"block h-6 w-6\" aria-hidden=\"true\" />\n ) : (\n <Menu className=\"block h-6 w-6\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n <div className={cn(\"md:hidden overflow-hidden transition-all duration-300 ease-in-out\", isMobileMenuOpen ? \"max-h-96 opacity-100\" : \"max-h-0 opacity-0\")}>\n <div className=\"pt-2 pb-4 space-y-1 bg-gray-50 border-t border-gray-200 shadow-inner\">\n {links.map((link, idx) => (\n <a\n key={idx}\n href={link.href}\n className=\"block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-100 hover:border-gray-300\"\n >\n {link.label}\n </a>\n ))}\n {actions && (\n <div className=\"mt-4 pt-4 border-t border-gray-200 px-4 flex flex-col gap-2\">\n {actions}\n </div>\n )}\n {children && (\n <div className=\"px-4 mt-2\">\n {children}\n </div>\n )}\n </div>\n </div>\n </nav>\n );\n }\n);\n\nNavbar.displayName = 'Navbar';\n","import React, { forwardRef, useState } from 'react';\nimport { ChevronDown, ChevronRight, Menu, X, ChevronLeft } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface SidebarItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n href?: string;\n children?: SidebarItem[];\n badge?: React.ReactNode;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n brand?: React.ReactNode;\n items: SidebarItem[];\n activeItemId?: string;\n onItemClick?: (item: SidebarItem) => void;\n collapsible?: boolean;\n}\n\nconst NavNode: React.FC<{\n item: SidebarItem;\n level: number;\n activeItemId?: string;\n onItemClick?: (item: SidebarItem) => void;\n isCollapsed: boolean;\n}> = ({ item, level, activeItemId, onItemClick, isCollapsed }) => {\n const isSelected = activeItemId === item.id;\n const hasChildren = item.children && item.children.length > 0;\n const [isOpen, setIsOpen] = useState(isSelected || false);\n\n const handleClick = () => {\n if (hasChildren) {\n if (!isCollapsed) setIsOpen(!isOpen);\n } else {\n onItemClick?.(item);\n }\n };\n\n return (\n <div className=\"w-full flex-col\">\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 rounded-md font-medium text-sm transition-colors mb-1\",\n isSelected \n ? \"bg-blue-50 text-blue-700\" \n : \"text-gray-700 hover:bg-gray-100\",\n level > 0 && !isCollapsed && \"ml-4 pl-4 border-l border-gray-200 rounded-l-none\"\n )}\n title={isCollapsed && typeof item.label === 'string' ? item.label : undefined}\n >\n {item.icon && (\n <span className={cn(\"flex-shrink-0 text-gray-500\", isSelected && \"text-blue-600\")}>\n {item.icon}\n </span>\n )}\n \n {!isCollapsed && (\n <>\n <span className=\"flex-1 truncate text-left\">{item.label}</span>\n \n {item.badge && (\n <span className=\"ml-auto inline-block py-0.5 px-2 text-[10px] bg-blue-100 text-blue-700 rounded-full font-bold\">\n {item.badge}\n </span>\n )}\n\n {hasChildren && (\n <span className=\"flex-shrink-0 ml-auto transition-transform duration-200\">\n {isOpen ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\n </span>\n )}\n </>\n )}\n </button>\n\n {!isCollapsed && hasChildren && isOpen && (\n <div className=\"pl-2 relative\">\n {item.children!.map(child => (\n <NavNode \n key={child.id} \n item={child} \n level={level + 1} \n activeItemId={activeItemId}\n onItemClick={onItemClick}\n isCollapsed={isCollapsed}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(\n ({ className, brand, items, activeItemId, onItemClick, collapsible = true, ...props }, ref) => {\n \n // desktop collapsed state\n const [isCollapsed, setIsCollapsed] = useState(false);\n \n // mobile slide-over state\n const [isMobileOpen, setIsMobileOpen] = useState(false);\n\n return (\n <>\n {/* Mobile menu toggle */}\n <div className=\"md:hidden flex items-center justify-between p-4 bg-white border-b border-gray-200\">\n {brand && <div className=\"font-bold\">{brand}</div>}\n <button \n onClick={() => setIsMobileOpen(!isMobileOpen)}\n className=\"p-2 -mr-2 text-gray-500 hover:bg-gray-100 rounded-md\"\n >\n <Menu className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Mobile overlay */}\n {isMobileOpen && (\n <div \n className=\"fixed inset-0 bg-black/50 z-40 md:hidden\" \n onClick={() => setIsMobileOpen(false)}\n />\n )}\n\n <aside \n ref={ref}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex flex-col bg-white border-r border-gray-200 transition-all duration-300 md:relative\",\n isCollapsed ? \"w-[72px]\" : \"w-64\",\n isMobileOpen ? \"translate-x-0\" : \"-translate-x-full md:translate-x-0\",\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className={cn(\n \"flex items-center h-16 border-b border-gray-200 px-4\",\n isCollapsed ? \"justify-center\" : \"justify-between\"\n )}>\n {!isCollapsed && brand && (\n <div className=\"font-bold text-lg text-gray-900 truncate flex-1 pr-4\">\n {brand}\n </div>\n )}\n \n {collapsible && (\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"hidden md:flex p-1.5 rounded-md text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-shrink-0\"\n >\n {isCollapsed ? <Menu className=\"w-5 h-5\" /> : <ChevronLeft className=\"w-5 h-5\" />}\n </button>\n )}\n\n {/* Mobile close */}\n <button\n onClick={() => setIsMobileOpen(false)}\n className=\"md:hidden p-1.5 rounded-md text-gray-500 hover:bg-gray-100\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Navigation Links */}\n <div className=\"flex-1 overflow-y-auto min-h-0 py-4 px-3 flex flex-col gap-1 no-scrollbar\">\n {items.map(item => (\n <NavNode \n key={item.id}\n item={item}\n level={0}\n activeItemId={activeItemId}\n onItemClick={onItemClick}\n isCollapsed={isCollapsed}\n />\n ))}\n </div>\n </aside>\n </>\n );\n }\n);\n\n\n","import React, { forwardRef } from 'react';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n isCurrentPage?: boolean;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n maxItems?: number;\n}\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, items, separator = <ChevronRight className=\"w-4 h-4\" />, maxItems = 0, ...props }, ref) => {\n \n // Logic for collapsing long breadcrumbs\n let displayItems = items;\n let hasCollapsed = false;\n\n if (maxItems > 0 && items.length > maxItems) {\n hasCollapsed = true;\n const firstItems = items.slice(0, 1);\n const lastItems = items.slice(items.length - (maxItems - 1));\n displayItems = [...firstItems, { label: <MoreHorizontal className=\"w-4 h-4 text-gray-400\" /> }, ...lastItems];\n }\n\n return (\n <nav ref={ref} aria-label=\"breadcrumb\" className={className} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5 sm:gap-2.5 break-words text-sm text-gray-500 sm:text-base\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isCurrent = item.isCurrentPage || isLast;\n\n return (\n <li key={index} className=\"inline-flex items-center gap-1.5 sm:gap-2.5\">\n {item.href && !isCurrent ? (\n <a\n href={item.href}\n className=\"transition-colors hover:text-gray-950 focus:outline-none focus:text-gray-950\"\n >\n {item.label}\n </a>\n ) : (\n <span\n role=\"link\"\n aria-disabled=\"true\"\n aria-current={isCurrent ? 'page' : undefined}\n className={cn(\"font-normal\", isCurrent && \"text-gray-950 font-medium\")}\n >\n {item.label}\n </span>\n )}\n\n {!isLast && (\n <span className=\"opacity-50\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React, { forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n showEdges?: boolean;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n ({ className, currentPage, totalPages, onPageChange, siblingCount = 1, showEdges = true, ...props }, ref) => {\n \n // Generate page numbers\n const getPageNumbers = () => {\n const totalNumbers = siblingCount * 2 + 3; // siblings + current + first + last\n const totalBlocks = totalNumbers + 2; // + 2 ellipses\n\n if (totalPages <= totalBlocks) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n // Only right dots\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1);\n return [...leftRange, '...', totalPages];\n }\n\n // Only left dots\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = Array.from({ length: rightItemCount }, (_, i) => totalPages - rightItemCount + i + 1);\n return [firstPageIndex, '...', ...rightRange];\n }\n\n // Both dots\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n );\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\n }\n\n return [];\n };\n\n const pages = getPageNumbers();\n\n return (\n <nav ref={ref} role=\"navigation\" aria-label=\"pagination\" className={cn(\"mx-auto flex w-full justify-center\", className)} {...props}>\n <ul className=\"flex flex-row items-center gap-1\">\n {/* Prev */}\n <li>\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={cn(\n \"flex items-center justify-center gap-1 rounded-md px-2.5 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n currentPage <= 1 ? \"opacity-50 cursor-not-allowed text-gray-400\" : \"hover:bg-gray-100 text-gray-700\"\n )}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Previous</span>\n </button>\n </li>\n\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <li key={`ellipsis-${index}`}>\n <span className=\"flex h-9 w-9 items-center justify-center text-sm font-medium text-gray-500\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n </li>\n );\n }\n\n const pageNum = page as number;\n const isCurrentPage = pageNum === currentPage;\n\n return (\n <li key={`page-${pageNum}`}>\n <button\n type=\"button\"\n onClick={() => onPageChange(pageNum)}\n aria-current={isCurrentPage ? 'page' : undefined}\n className={cn(\n \"flex h-9 w-9 items-center justify-center rounded-md border text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n isCurrentPage \n ? \"border-blue-600 bg-blue-600 text-white hover:bg-blue-700 font-semibold shadow-sm\"\n : \"border-transparent bg-transparent text-gray-700 hover:bg-gray-100 font-medium\"\n )}\n >\n {pageNum}\n </button>\n </li>\n );\n })}\n\n {/* Next */}\n <li>\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={cn(\n \"flex items-center justify-center gap-1 rounded-md px-2.5 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n currentPage >= totalPages ? \"opacity-50 cursor-not-allowed text-gray-400\" : \"hover:bg-gray-100 text-gray-700\"\n )}\n aria-label=\"Go to next page\"\n >\n <span className=\"hidden sm:inline\">Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </li>\n </ul>\n </nav>\n );\n }\n);\n\nPagination.displayName = 'Pagination';\n","import React, { forwardRef } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface StepItem {\n id: string | number;\n title: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport interface StepperProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n steps: StepItem[];\n currentStep: number;\n orientation?: 'horizontal' | 'vertical';\n onChange?: (stepIndex: number) => void;\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n ({ className, steps, currentStep, orientation = 'horizontal', onChange, ...props }, ref) => {\n \n return (\n <div \n ref={ref} \n className={cn(\n \"w-full\",\n orientation === 'horizontal' ? \"flex flex-row items-start justify-between\" : \"flex flex-col gap-4\",\n className\n )}\n {...props}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n const isPending = stepNumber > currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <div \n key={step.id} \n className={cn(\n \"relative flex\",\n orientation === 'horizontal' ? \"flex-col items-center flex-1 text-center\" : \"flex-row items-start text-left gap-4\"\n )}\n >\n {/* Connector Line (Horizontal) */}\n {!isLast && orientation === 'horizontal' && (\n <div \n className={cn(\n \"absolute top-4 left-[50%] w-full h-[2px] -z-10\",\n isCompleted ? \"bg-blue-600\" : \"bg-gray-200\"\n )} \n />\n )}\n\n {/* Indicator */}\n <button\n type=\"button\"\n onClick={() => onChange?.(stepNumber)}\n disabled={!onChange}\n className={cn(\n \"relative z-10 flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-semibold mb-2 bg-white transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\",\n isCompleted && \"border-blue-600 bg-blue-600 text-white\",\n isCurrent && \"border-blue-600 text-blue-600\",\n isPending && \"border-gray-300 text-gray-500\",\n onChange ? \"cursor-pointer hover:border-blue-500\" : \"cursor-default\"\n )}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : stepNumber}\n </button>\n\n {/* Connector Line (Vertical) */}\n {!isLast && orientation === 'vertical' && (\n <div \n className={cn(\n \"absolute top-8 bottom-[-16px] left-[15px] w-[2px] -z-10\",\n isCompleted ? \"bg-blue-600\" : \"bg-gray-200\"\n )} \n />\n )}\n\n {/* Text Content */}\n <div className=\"flex flex-col\">\n <span className={cn(\n \"text-sm font-semibold\",\n isCurrent ? \"text-gray-900\" : (isCompleted ? \"text-gray-700\" : \"text-gray-500\")\n )}>\n {step.title}\n </span>\n {step.description && (\n <span className=\"text-xs text-gray-500 mt-1 max-w-[150px]\">\n {step.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nStepper.displayName = 'Stepper';\n","import React, { useState, useEffect, useRef, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DropdownItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n divider?: boolean;\n}\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n trigger: React.ReactNode;\n items?: DropdownItem[];\n customContent?: React.ReactNode;\n position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';\n mode?: 'dropdown' | 'context' | 'mega';\n}\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(\n ({ className, trigger, items = [], customContent, position = 'bottom-right', mode = 'dropdown', ...props }, ref) => {\n \n const [isOpen, setIsOpen] = useState(false);\n const [contextPos, setContextPos] = useState({ x: 0, y: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n \n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (mode === 'context') {\n e.preventDefault();\n setContextPos({ x: e.clientX, y: e.clientY });\n setIsOpen(true);\n }\n };\n\n const handleClickTrigger = (e: React.MouseEvent) => {\n if (mode !== 'context') {\n setIsOpen(!isOpen);\n }\n };\n\n const positionClasses = {\n 'bottom-left': 'top-full left-0 mt-2',\n 'bottom-right': 'top-full right-0 mt-2',\n 'top-left': 'bottom-full left-0 mb-2',\n 'top-right': 'bottom-full right-0 mb-2',\n };\n\n const menuStyles = mode === 'context'\n ? { top: contextPos.y, left: contextPos.x, position: 'fixed' as const }\n : {};\n\n const baseMenuClasses = cn(\n \"z-50 min-w-[220px] rounded-md border border-gray-200 bg-white p-1 text-gray-950 shadow-md\",\n \"animate-in fade-in zoom-in-95 duration-200\",\n mode === 'context' ? \"fixed\" : `absolute ${positionClasses[position]}`,\n mode === 'mega' ? \"w-screen max-w-4xl p-6 grid grid-cols-1 md:grid-cols-3 gap-6\" : \"\",\n className\n );\n\n return (\n <div \n ref={containerRef}\n className={cn(\"relative inline-block\", mode === 'mega' ? \"static md:relative\" : \"\")}\n onContextMenu={handleContextMenu}\n >\n <div \n onClick={handleClickTrigger}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n \n {isOpen && (\n <div \n ref={ref}\n className={baseMenuClasses}\n style={menuStyles}\n {...props}\n >\n {customContent ? (\n customContent\n ) : (\n items.map((item, index) => {\n if (item.divider) {\n return <div key={`divider-${index}`} className=\"my-1 h-px bg-gray-200\" />;\n }\n\n return (\n <button\n key={item.id}\n disabled={item.disabled}\n onClick={() => {\n if (!item.disabled) {\n item.onSelect?.();\n setIsOpen(false);\n }\n }}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n item.disabled \n ? \"opacity-50 cursor-not-allowed\" \n : \"hover:bg-gray-100 focus:bg-gray-100\"\n )}\n >\n {item.icon && <span className=\"mr-2 h-4 w-4\">{item.icon}</span>}\n <span className=\"flex-1 text-left\">{item.label}</span>\n {item.shortcut && (\n <span className=\"ml-auto text-xs tracking-widest text-gray-500\">\n {item.shortcut}\n </span>\n )}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nDropdown.displayName = 'Dropdown';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n gap?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols = 1, gap = 'md', children, ...props }, ref) => {\n \n // Using mapping instead of dynamic classes for Tailwind string extraction\n const colClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',\n 7: 'grid-cols-2 sm:grid-cols-4 lg:grid-cols-7',\n 8: 'grid-cols-2 sm:grid-cols-4 lg:grid-cols-8',\n 9: 'grid-cols-3 sm:grid-cols-5 lg:grid-cols-9',\n 10: 'grid-cols-3 sm:grid-cols-5 lg:grid-cols-10',\n 11: 'grid-cols-3 sm:grid-cols-6 lg:grid-cols-11',\n 12: 'grid-cols-4 sm:grid-cols-6 lg:grid-cols-12',\n };\n\n const gapClasses = {\n none: 'gap-0',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"grid w-full\", colClasses[cols], gapClasses[gap], className)} \n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGrid.displayName = 'Grid';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'row' | 'col';\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n wrap?: boolean;\n}\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n ({ className, direction = 'col', align = 'stretch', justify = 'start', gap = 'md', wrap = false, children, ...props }, ref) => {\n \n const directionClasses = {\n row: 'flex-row',\n col: 'flex-col',\n };\n\n const alignClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n };\n\n const justifyClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\n \"flex\",\n directionClasses[direction],\n alignClasses[align],\n justifyClasses[justify],\n gapClasses[gap],\n wrap && \"flex-wrap\",\n className\n )} \n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStack.displayName = 'Stack';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SplitPaneProps extends React.HTMLAttributes<HTMLDivElement> {\n leftPane: ReactNode;\n rightPane: ReactNode;\n initialSplit?: number; // percentage\n minSplit?: number;\n maxSplit?: number;\n direction?: 'horizontal' | 'vertical';\n}\n\nexport const SplitPane = forwardRef<HTMLDivElement, SplitPaneProps>(\n ({ className, leftPane, rightPane, initialSplit = 50, minSplit = 10, maxSplit = 90, direction = 'horizontal', ...props }, ref) => {\n \n const [splitPos, setSplitPos] = useState(initialSplit);\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const isHorizontal = direction === 'horizontal';\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging || !containerRef.current) return;\n \n const containerRect = containerRef.current.getBoundingClientRect();\n let newSplitPercentage;\n\n if (isHorizontal) {\n const offsetX = e.clientX - containerRect.left;\n newSplitPercentage = (offsetX / containerRect.width) * 100;\n } else {\n const offsetY = e.clientY - containerRect.top;\n newSplitPercentage = (offsetY / containerRect.height) * 100;\n }\n\n if (newSplitPercentage < minSplit) newSplitPercentage = minSplit;\n if (newSplitPercentage > maxSplit) newSplitPercentage = maxSplit;\n\n setSplitPos(newSplitPercentage);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';\n } else {\n document.body.style.cursor = 'default';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'default';\n };\n }, [isDragging, isHorizontal, maxSplit, minSplit]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n };\n\n return (\n <div \n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\n \"flex w-full h-full overflow-hidden\",\n isHorizontal ? \"flex-row\" : \"flex-col\",\n className\n )}\n {...props}\n >\n <div \n className=\"flex-shrink-0 overflow-auto\" \n style={{ [isHorizontal ? 'width' : 'height']: `${splitPos}%` }}\n >\n {leftPane}\n </div>\n\n <div \n className={cn(\n \"flex items-center justify-center bg-gray-200 hiver:bg-blue-400 active:bg-blue-500 transition-colors z-10\",\n isHorizontal ? \"w-1.5 cursor-col-resize h-full\" : \"h-1.5 cursor-row-resize w-full\"\n )}\n onMouseDown={handleMouseDown}\n >\n {/* Draggable Handle Decoration */}\n <div className={cn(\n \"bg-gray-400 rounded-full\",\n isHorizontal ? \"w-0.5 h-8\" : \"h-0.5 w-8\"\n )} />\n </div>\n\n <div className=\"flex-1 overflow-auto\">\n {rightPane}\n </div>\n </div>\n );\n }\n);\n\nSplitPane.displayName = 'SplitPane';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface MasonryGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: number; // CSS gap spacing utility multiplier (e.g 4 = gap-4)\n}\n\nexport const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(\n ({ className, columns = 3, gap = 4, children, ...props }, ref) => {\n \n const childrenArray = React.Children.toArray(children);\n const columnsArray: React.ReactNode[][] = Array.from({ length: columns }, () => []);\n\n // Distribute children into columns\n childrenArray.forEach((child, index) => {\n columnsArray[index % columns].push(child);\n });\n\n return (\n <div \n ref={ref} \n className={cn(\"flex items-start w-full\", `gap-${gap}`, className)} \n {...props}\n >\n {columnsArray.map((columnChildren, idx) => (\n <div key={`masonry-col-${idx}`} className={cn(\"flex flex-col flex-1\", `gap-${gap}`)}>\n {columnChildren}\n </div>\n ))}\n </div>\n );\n }\n);\n\nMasonryGrid.displayName = 'MasonryGrid';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\n// Container\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n}\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, size = 'xl', ...props }, ref) => {\n const sizeClasses = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'w-full',\n };\n return (\n <div ref={ref} className={cn(\"mx-auto px-4 sm:px-6 lg:px-8 w-full\", sizeClasses[size], className)} {...props} />\n );\n }\n);\nContainer.displayName = 'Container';\n\n\n// Section\nexport const Section = forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <section ref={ref} className={cn(\"py-12 md:py-16 lg:py-24\", className)} {...props} />\n );\n }\n);\nSection.displayName = 'Section';\n\n\n// Hero\nexport interface HeroProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'left' | 'center';\n}\nexport const Hero = forwardRef<HTMLDivElement, HeroProps>(\n ({ className, align = 'center', children, ...props }, ref) => {\n return (\n <div \n ref={ref} \n className={cn(\n \"w-full bg-gray-50 py-20 lg:py-32\", \n align === 'center' ? \"text-center\" : \"text-left\",\n className\n )} \n {...props}\n >\n <Container>\n {children}\n </Container>\n </div>\n );\n }\n);\nHero.displayName = 'Hero';\n\n\n// Footer\nexport const Footer = forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <footer ref={ref} className={cn(\"bg-white border-t border-gray-200 py-12\", className)} {...props} />\n );\n }\n);\nFooter.displayName = 'Footer';\n","import React, { useEffect, useState, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n containerId?: string;\n}\n\nexport const Portal: React.FC<PortalProps> = ({ children, containerId = 'portal-root' }) => {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n let container = document.getElementById(containerId);\n \n if (!container) {\n container = document.createElement('div');\n container.setAttribute('id', containerId);\n document.body.appendChild(container);\n }\n\n return () => {\n // Optional: Cleanup if empty, but usually we leave the root\n };\n }, [containerId]);\n\n if (!mounted) return null;\n\n const container = document.getElementById(containerId);\n if (!container) return null;\n\n return createPortal(children, container);\n};\n","import React, { useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TransitionProps extends React.HTMLAttributes<HTMLDivElement> {\n show: boolean;\n enter?: string;\n enterFrom?: string;\n enterTo?: string;\n leave?: string;\n leaveFrom?: string;\n leaveTo?: string;\n}\n\nexport const Transition: React.FC<TransitionProps> = ({\n children,\n show,\n enter = 'transition-all duration-300 ease-out',\n enterFrom = 'opacity-0 scale-95',\n enterTo = 'opacity-100 scale-100',\n leave = 'transition-all duration-200 ease-in',\n leaveFrom = 'opacity-100 scale-100',\n leaveTo = 'opacity-0 scale-95',\n className,\n ...props\n}) => {\n const [renderable, setRenderable] = useState(show);\n const [classes, setClasses] = useState(show ? enterTo : leaveTo);\n\n useEffect(() => {\n let timeout: number;\n\n if (show) {\n setRenderable(true);\n setClasses(cn(enter, enterFrom));\n \n // Force reflow\n document.body.offsetHeight;\n\n requestAnimationFrame(() => {\n setClasses(cn(enter, enterTo));\n });\n } else {\n setClasses(cn(leave, leaveFrom));\n \n requestAnimationFrame(() => {\n setClasses(cn(leave, leaveTo));\n \n // Wait for transition to complete before unmounting\n // We use a fixed duration here, ideally it should match the CSS duration\n timeout = setTimeout(() => {\n setRenderable(false);\n }, 300); // 300ms default fallback\n });\n }\n\n return () => clearTimeout(timeout);\n }, [show, enter, enterFrom, enterTo, leave, leaveFrom, leaveTo]);\n\n if (!renderable) return null;\n\n return (\n <div className={cn(classes, className)} {...props}>\n {children}\n </div>\n );\n};\n","import React, { useEffect, useRef, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ClickAwayListenerProps extends React.HTMLAttributes<HTMLDivElement> {\n onClickAway: (event: MouseEvent | TouchEvent) => void;\n children: ReactNode;\n mouseEvent?: 'mousedown' | 'mouseup' | 'click';\n touchEvent?: 'touchstart' | 'touchend';\n}\n\nexport const ClickAwayListener = forwardRef<HTMLDivElement, ClickAwayListenerProps>(\n ({ onClickAway, children, mouseEvent = 'mousedown', touchEvent = 'touchstart', className, ...props }, ref) => {\n \n const internalRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (event: MouseEvent | TouchEvent) => {\n const el = internalRef.current;\n if (!el || el.contains((event.target as Node) || null)) {\n return;\n }\n onClickAway(event);\n };\n\n document.addEventListener(mouseEvent, handler);\n document.addEventListener(touchEvent, handler);\n\n return () => {\n document.removeEventListener(mouseEvent, handler);\n document.removeEventListener(touchEvent, handler);\n };\n }, [mouseEvent, touchEvent, onClickAway]);\n\n return (\n <div \n ref={(node) => {\n internalRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }} \n className={cn(\"contents\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nClickAwayListener.displayName = 'ClickAwayListener';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface VirtualScrollProps<T = any> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n items: T[];\n itemHeight: number;\n renderItem: (item: T, index: number) => React.ReactNode;\n overscan?: number;\n height?: number | string;\n}\n\nexport const VirtualScroll = forwardRef<HTMLDivElement, VirtualScrollProps>(\n ({ className, items, itemHeight, renderItem, overscan = 3, height = 400, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n const containerHeight = typeof height === 'number' ? height : 400;\n const totalHeight = items.length * itemHeight;\n\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const visibleCount = Math.ceil(containerHeight / itemHeight) + 2 * overscan;\n const endIndex = Math.min(items.length - 1, startIndex + visibleCount);\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n const offsetY = startIndex * itemHeight;\n\n const handleScroll = () => {\n if (containerRef.current) {\n setScrollTop(containerRef.current.scrollTop);\n }\n };\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\"overflow-y-auto w-full\", className)}\n style={{ height }}\n onScroll={handleScroll}\n {...props}\n >\n <div style={{ height: totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: offsetY, left: 0, right: 0 }}>\n {visibleItems.map((item, i) => (\n <div key={startIndex + i} style={{ height: itemHeight }}>\n {renderItem(item, startIndex + i)}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n);\n\nVirtualScroll.displayName = 'VirtualScroll';\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Spinner } from '../Spinner/Spinner';\n\nexport interface InfiniteScrollProps extends React.HTMLAttributes<HTMLDivElement> {\n onLoadMore: () => void;\n hasMore: boolean;\n isLoading?: boolean;\n loader?: React.ReactNode;\n threshold?: number; // px from bottom to trigger loadMore\n}\n\nexport const InfiniteScroll = forwardRef<HTMLDivElement, InfiniteScrollProps>(\n ({ className, children, onLoadMore, hasMore, isLoading = false, loader, threshold = 100, ...props }, ref) => {\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore && !isLoading) {\n onLoadMore();\n }\n },\n { rootMargin: `0px 0px ${threshold}px 0px` }\n );\n\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [hasMore, isLoading, onLoadMore, threshold]);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {children}\n <div ref={sentinelRef} className=\"h-1 w-full\" />\n {isLoading && (\n <div className=\"flex justify-center py-6\">\n {loader || <Spinner size=\"md\" />}\n </div>\n )}\n {!hasMore && !isLoading && (\n <div className=\"text-center py-4 text-sm text-gray-400\">No more items</div>\n )}\n </div>\n );\n }\n);\n\nInfiniteScroll.displayName = 'InfiniteScroll';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Skeleton } from '../Skeleton/Skeleton';\n\nexport interface LazyLoadProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n placeholder?: ReactNode;\n rootMargin?: string;\n threshold?: number;\n}\n\nexport const LazyLoad = forwardRef<HTMLDivElement, LazyLoadProps>(\n ({ className, children, placeholder, rootMargin = '50px', threshold = 0, ...props }, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = containerRef.current;\n if (!element) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n observer.disconnect();\n }\n },\n { rootMargin, threshold }\n );\n\n observer.observe(element);\n return () => observer.disconnect();\n }, [rootMargin, threshold]);\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\"w-full\", className)}\n {...props}\n >\n {isVisible ? children : (placeholder || <Skeleton className=\"w-full h-32\" />)}\n </div>\n );\n }\n);\n\nLazyLoad.displayName = 'LazyLoad';\n","import React, { useState, useEffect, forwardRef, useRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DebouncedInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> {\n value?: string;\n onChange?: (value: string) => void;\n debounceMs?: number;\n label?: string;\n description?: string;\n error?: string;\n}\n\nexport const DebouncedInput = forwardRef<HTMLInputElement, DebouncedInputProps>(\n ({ className, value = '', onChange, debounceMs = 300, label, description, error, ...props }, ref) => {\n const [localValue, setLocalValue] = useState(value);\n const timerRef = useRef<number | null>(null);\n\n // Sync with external value changes\n useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => {\n onChange?.(newValue);\n }, debounceMs);\n };\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return (\n <div className=\"flex flex-col gap-1 w-full\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700\">{label}</label>\n )}\n <input\n ref={ref}\n value={localValue}\n onChange={handleChange}\n className={cn(\n \"flex h-10 w-full rounded-md border bg-white px-3 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n error ? \"border-red-400 focus:ring-red-400\" : \"border-gray-300\",\n className\n )}\n {...props}\n />\n {description && !error && <p className=\"text-xs text-gray-500\">{description}</p>}\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nDebouncedInput.displayName = 'DebouncedInput';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Check, X } from 'lucide-react';\n\nexport interface AutoCompleteOption {\n value: string;\n label: string;\n}\n\nexport interface AutoCompleteProps {\n options: AutoCompleteOption[];\n value?: string;\n onChange?: (value: string) => void;\n onInputChange?: (inputValue: string) => void;\n placeholder?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n multiple?: boolean;\n className?: string;\n filterOption?: (option: AutoCompleteOption, inputValue: string) => boolean;\n}\n\nexport const AutoComplete = forwardRef<HTMLDivElement, AutoCompleteProps>(\n ({ options, value, onChange, onInputChange, placeholder = 'Search...', label, error, disabled, multiple = false, className, filterOption }, ref) => {\n const [inputValue, setInputValue] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [selectedValues, setSelectedValues] = useState<string[]>(value ? [value] : []);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const defaultFilter = (option: AutoCompleteOption, query: string) =>\n option.label.toLowerCase().includes(query.toLowerCase());\n\n const filteredOptions = options.filter(opt =>\n filterOption ? filterOption(opt, inputValue) : defaultFilter(opt, inputValue)\n );\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const selectOption = (option: AutoCompleteOption) => {\n if (multiple) {\n const newValues = selectedValues.includes(option.value)\n ? selectedValues.filter(v => v !== option.value)\n : [...selectedValues, option.value];\n setSelectedValues(newValues);\n onChange?.(newValues.join(','));\n setInputValue('');\n } else {\n setSelectedValues([option.value]);\n onChange?.(option.value);\n setInputValue(option.label);\n setIsOpen(false);\n }\n };\n\n const removeValue = (val: string) => {\n const newValues = selectedValues.filter(v => v !== val);\n setSelectedValues(newValues);\n onChange?.(newValues.join(','));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlightedIndex(prev => Math.min(prev + 1, filteredOptions.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlightedIndex(prev => Math.max(prev - 1, 0));\n } else if (e.key === 'Enter' && highlightedIndex >= 0) {\n e.preventDefault();\n selectOption(filteredOptions[highlightedIndex]);\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n const selectedLabels = selectedValues.map(v => options.find(o => o.value === v)?.label).filter(Boolean);\n\n return (\n <div ref={(node) => { containerRef.current = node; if (typeof ref === 'function') ref(node); else if (ref) ref.current = node; }} className={cn(\"relative w-full flex flex-col gap-1\", className)}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n\n <div className={cn(\"flex flex-wrap items-center gap-1.5 w-full min-h-10 rounded-md border px-3 py-2 text-sm bg-white cursor-text\", error ? \"border-red-400\" : \"border-gray-300\", disabled && \"opacity-50 cursor-not-allowed\")}\n onClick={() => { if (!disabled) { setIsOpen(true); inputRef.current?.focus(); } }}\n >\n {multiple && selectedLabels.map((label, i) => (\n <span key={i} className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-blue-100 text-blue-700 text-xs font-medium\">\n {label}\n <button type=\"button\" onClick={(e) => { e.stopPropagation(); removeValue(selectedValues[i]); }} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n <input\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n placeholder={selectedLabels.length === 0 ? placeholder : ''}\n onChange={(e) => { setInputValue(e.target.value); setIsOpen(true); onInputChange?.(e.target.value); setHighlightedIndex(-1); }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 min-w-[80px] focus:outline-none bg-transparent text-gray-900 placeholder:text-gray-400\"\n />\n </div>\n\n {isOpen && filteredOptions.length > 0 && (\n <div className=\"absolute z-50 top-full mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-60 overflow-y-auto\">\n {filteredOptions.map((option, i) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => selectOption(option)}\n className={cn(\"flex items-center w-full gap-2 px-3 py-2 text-sm text-left transition-colors\", i === highlightedIndex ? \"bg-blue-50 text-blue-700\" : \"hover:bg-gray-50 text-gray-700\", isSelected && \"font-medium\")}\n >\n <span className={cn(\"w-4 h-4 flex-shrink-0 rounded border border-gray-300 flex items-center justify-center\", isSelected && \"bg-blue-600 border-blue-600\")}>\n {isSelected && <Check className=\"w-3 h-3 text-white\" />}\n </span>\n {option.label}\n </button>\n );\n })}\n </div>\n )}\n\n {isOpen && filteredOptions.length === 0 && (\n <div className=\"absolute z-50 top-full mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg px-3 py-4 text-sm text-gray-400 text-center\">\n No options found\n </div>\n )}\n\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nAutoComplete.displayName = 'AutoComplete';\n","import React, { useState, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type FormFieldType = 'text' | 'email' | 'password' | 'number' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'switch' | 'date' | 'file';\n\nexport interface FormField {\n id: string;\n type: FormFieldType;\n label: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n description?: string;\n options?: { value: string; label: string }[];\n defaultValue?: any;\n validation?: (value: any) => string | undefined;\n}\n\nexport interface FormBuilderProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n fields: FormField[];\n onSubmit?: (values: Record<string, any>) => void;\n submitLabel?: string;\n isLoading?: boolean;\n columnCount?: 1 | 2;\n}\n\nexport const FormBuilder = forwardRef<HTMLFormElement, FormBuilderProps>(\n ({ className, fields, onSubmit, submitLabel = 'Submit', isLoading = false, columnCount = 1, ...props }, ref) => {\n const [values, setValues] = useState<Record<string, any>>(() => {\n const defaults: Record<string, any> = {};\n fields.forEach(f => { defaults[f.id] = f.defaultValue ?? (f.type === 'checkbox' || f.type === 'switch' ? false : ''); });\n return defaults;\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const validate = (fieldId: string, value: any): string | undefined => {\n const field = fields.find(f => f.id === fieldId);\n if (!field) return;\n if (field.required && (value === '' || value === false || value == null)) return `${field.label} is required`;\n if (field.validation) return field.validation(value);\n };\n\n const handleChange = (fieldId: string, value: any) => {\n setValues(prev => ({ ...prev, [fieldId]: value }));\n const err = validate(fieldId, value);\n setErrors(prev => ({ ...prev, [fieldId]: err || '' }));\n };\n\n const handleBlur = (fieldId: string) => {\n setTouched(prev => ({ ...prev, [fieldId]: true }));\n const err = validate(fieldId, values[fieldId]);\n setErrors(prev => ({ ...prev, [fieldId]: err || '' }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const newErrors: Record<string, string> = {};\n const newTouched: Record<string, boolean> = {};\n let hasError = false;\n\n fields.forEach(field => {\n const err = validate(field.id, values[field.id]);\n newTouched[field.id] = true;\n if (err) { newErrors[field.id] = err; hasError = true; }\n });\n\n setTouched(newTouched);\n setErrors(newErrors);\n if (!hasError) onSubmit?.(values);\n };\n\n const renderField = (field: FormField) => {\n const val = values[field.id];\n const err = touched[field.id] ? errors[field.id] : undefined;\n const base = \"flex h-10 w-full rounded-md border bg-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors disabled:opacity-50\";\n const borderClass = err ? \"border-red-400 focus:ring-red-400\" : \"border-gray-300\";\n\n switch (field.type) {\n case 'textarea':\n return (\n <textarea\n id={field.id}\n value={val}\n disabled={field.disabled}\n placeholder={field.placeholder}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n rows={4}\n className={cn(base, borderClass, \"h-auto resize-y py-2\")}\n />\n );\n case 'select':\n return (\n <select\n id={field.id}\n value={val}\n disabled={field.disabled}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n className={cn(base, borderClass)}\n >\n <option value=\"\">Select...</option>\n {field.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n );\n case 'checkbox':\n case 'switch':\n return (\n <div className=\"flex items-center gap-2\">\n <input\n id={field.id}\n type=\"checkbox\"\n checked={val}\n disabled={field.disabled}\n onChange={e => handleChange(field.id, e.target.checked)}\n onBlur={() => handleBlur(field.id)}\n className=\"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor={field.id} className=\"text-sm text-gray-600\">{field.description}</label>\n </div>\n );\n case 'radio':\n return (\n <div className=\"flex flex-col gap-2\">\n {field.options?.map(o => (\n <label key={o.value} className=\"flex items-center gap-2 text-sm text-gray-700 cursor-pointer\">\n <input\n type=\"radio\"\n name={field.id}\n value={o.value}\n checked={val === o.value}\n disabled={field.disabled}\n onChange={() => handleChange(field.id, o.value)}\n onBlur={() => handleBlur(field.id)}\n className=\"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n {o.label}\n </label>\n ))}\n </div>\n );\n default:\n return (\n <input\n id={field.id}\n type={field.type}\n value={val}\n disabled={field.disabled}\n placeholder={field.placeholder}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n className={cn(base, borderClass)}\n />\n );\n }\n };\n\n return (\n <form ref={ref} onSubmit={handleSubmit} noValidate className={cn(\"w-full\", className)} {...props}>\n <div className={cn(\"grid gap-5\", columnCount === 2 ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\")}>\n {fields.map(field => {\n const err = touched[field.id] ? errors[field.id] : undefined;\n return (\n <div key={field.id} className=\"flex flex-col gap-1.5\">\n {field.type !== 'checkbox' && field.type !== 'switch' && (\n <label htmlFor={field.id} className=\"text-sm font-medium text-gray-700\">\n {field.label}{field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n {renderField(field)}\n {field.description && field.type !== 'checkbox' && field.type !== 'switch' && (\n <p className=\"text-xs text-gray-500\">{field.description}</p>\n )}\n {err && <p className=\"text-xs text-red-500\">{err}</p>}\n </div>\n );\n })}\n </div>\n <div className=\"mt-6\">\n <button\n type=\"submit\"\n disabled={isLoading}\n className=\"inline-flex items-center justify-center rounded-md bg-blue-600 px-6 py-2.5 text-sm font-semibold text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n {isLoading ? 'Saving...' : submitLabel}\n </button>\n </div>\n </form>\n );\n }\n);\n\nFormBuilder.displayName = 'FormBuilder';\n","import React, { useState, forwardRef } from 'react';\nimport { Search, X, ChevronDown, ChevronUp, SlidersHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FilterOption { value: string; label: string; count?: number; }\nexport interface FilterGroup { id: string; label: string; type: 'checkbox' | 'radio' | 'range'; options?: FilterOption[]; min?: number; max?: number; }\n\nexport interface ProductFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n filterGroups: FilterGroup[];\n onFilterChange?: (filters: Record<string, any>) => void;\n searchPlaceholder?: string;\n onSearch?: (query: string) => void;\n}\n\nexport const ProductFilter = forwardRef<HTMLDivElement, ProductFilterProps>(\n ({ className, filterGroups, onFilterChange, searchPlaceholder = 'Search products...', onSearch, ...props }, ref) => {\n const [values, setValues] = useState<Record<string, any>>({});\n const [searchQuery, setSearchQuery] = useState('');\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [isMobileOpen, setIsMobileOpen] = useState(false);\n\n const toggleGroup = (id: string) => {\n setCollapsed(prev => { const next = new Set(prev); next.has(id) ? next.delete(id) : next.add(id); return next; });\n };\n\n const updateFilter = (groupId: string, newValue: any) => {\n const updated = { ...values, [groupId]: newValue };\n setValues(updated);\n onFilterChange?.(updated);\n };\n\n const handleCheckbox = (groupId: string, optValue: string, checked: boolean) => {\n const current: string[] = values[groupId] || [];\n const next = checked ? [...current, optValue] : current.filter(v => v !== optValue);\n updateFilter(groupId, next);\n };\n\n const clearAll = () => { setValues({}); setSearchQuery(''); onFilterChange?.({}); onSearch?.(''); };\n const activeCount = Object.values(values).filter(v => (Array.isArray(v) ? v.length > 0 : v !== '' && v !== undefined)).length;\n\n const Filters = () => (\n <div className=\"flex flex-col gap-5\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input\n value={searchQuery}\n onChange={e => { setSearchQuery(e.target.value); onSearch?.(e.target.value); }}\n placeholder={searchPlaceholder}\n className=\"w-full pl-9 pr-4 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n {searchQuery && (\n <button onClick={() => { setSearchQuery(''); onSearch?.(''); }} className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\">\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Filter Groups */}\n {filterGroups.map(group => {\n const isCollapsed = collapsed.has(group.id);\n return (\n <div key={group.id} className=\"border-b border-gray-100 pb-4 last:border-b-0 last:pb-0\">\n <button type=\"button\" onClick={() => toggleGroup(group.id)} className=\"flex items-center justify-between w-full text-left mb-2\">\n <span className=\"font-semibold text-sm text-gray-800\">{group.label}</span>\n {isCollapsed ? <ChevronDown className=\"w-4 h-4 text-gray-400\" /> : <ChevronUp className=\"w-4 h-4 text-gray-400\" />}\n </button>\n {!isCollapsed && (\n <div className=\"space-y-2\">\n {group.type === 'range' && (\n <div className=\"flex flex-col gap-1\">\n <input type=\"range\" min={group.min} max={group.max} value={values[group.id] ?? group.max} onChange={e => updateFilter(group.id, +e.target.value)} className=\"w-full accent-blue-600\" />\n <div className=\"flex justify-between text-xs text-gray-500\"><span>{group.min}</span><span>{values[group.id] ?? group.max}</span></div>\n </div>\n )}\n {(group.type === 'checkbox' || group.type === 'radio') && group.options?.map(opt => (\n <label key={opt.value} className=\"flex items-center gap-2.5 cursor-pointer group\">\n <input\n type={group.type}\n name={group.id}\n checked={group.type === 'checkbox' ? (values[group.id] || []).includes(opt.value) : values[group.id] === opt.value}\n onChange={e => group.type === 'checkbox' ? handleCheckbox(group.id, opt.value, e.target.checked) : updateFilter(group.id, opt.value)}\n className=\"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 group-hover:text-gray-900 flex-1\">{opt.label}</span>\n {opt.count !== undefined && <span className=\"text-xs text-gray-400\">({opt.count})</span>}\n </label>\n ))}\n </div>\n )}\n </div>\n );\n })}\n\n {activeCount > 0 && (\n <button onClick={clearAll} className=\"text-sm text-blue-600 hover:text-blue-800 font-medium text-left\">\n Clear all filters ({activeCount})\n </button>\n )}\n </div>\n );\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {/* Mobile Toggle */}\n <div className=\"flex items-center justify-between lg:hidden mb-4\">\n <button onClick={() => setIsMobileOpen(true)} className=\"flex items-center gap-2 px-4 py-2 border border-gray-300 rounded-lg text-sm font-medium text-gray-700 hover:bg-gray-50\">\n <SlidersHorizontal className=\"w-4 h-4\" />\n Filters {activeCount > 0 && <span className=\"bg-blue-600 text-white text-xs rounded-full w-5 h-5 flex items-center justify-center\">{activeCount}</span>}\n </button>\n </div>\n\n {/* Mobile Filter Drawer */}\n {isMobileOpen && (\n <div className=\"fixed inset-0 z-50 lg:hidden\">\n <div className=\"fixed inset-0 bg-black/50\" onClick={() => setIsMobileOpen(false)} />\n <div className=\"fixed inset-y-0 left-0 w-80 bg-white p-5 overflow-y-auto shadow-xl\">\n <div className=\"flex items-center justify-between mb-5\">\n <h2 className=\"font-bold text-base text-gray-900\">Filters</h2>\n <button onClick={() => setIsMobileOpen(false)} className=\"text-gray-400 hover:text-gray-700\"><X className=\"w-5 h-5\" /></button>\n </div>\n <Filters />\n </div>\n </div>\n )}\n\n {/* Desktop */}\n <div className=\"hidden lg:block\"><Filters /></div>\n </div>\n );\n }\n);\n\nProductFilter.displayName = 'ProductFilter';\n","import React, { useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type ChartType = 'bar' | 'line' | 'pie' | 'donut';\n\nexport interface ChartDataset {\n label: string;\n data: number[];\n color?: string;\n}\n\nexport interface ChartProps extends React.HTMLAttributes<HTMLDivElement> {\n type: ChartType;\n labels: string[];\n datasets: ChartDataset[];\n width?: number;\n height?: number;\n showLegend?: boolean;\n}\n\nconst COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#f97316', '#ec4899'];\n\nexport const Chart = forwardRef<HTMLDivElement, ChartProps>(\n ({ className, type, labels, datasets, width = 600, height = 300, showLegend = true, ...props }, ref) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const PADDING = { top: 20, right: 20, bottom: 50, left: 40 };\n const chartWidth = width - PADDING.left - PADDING.right;\n const chartHeight = height - PADDING.top - PADDING.bottom;\n\n if (type === 'pie' || type === 'donut') {\n const total = datasets[0]?.data.reduce((a, b) => a + b, 0) || 1;\n const cx = width / 2;\n const cy = height / 2;\n const radius = Math.min(cx, cy) - 30;\n const innerRadius = type === 'donut' ? radius * 0.55 : 0;\n let startAngle = -Math.PI / 2;\n\n const slices = (datasets[0]?.data || []).map((val, i) => {\n const angle = (val / total) * Math.PI * 2;\n const endAngle = startAngle + angle;\n const sliceStart = startAngle;\n startAngle = endAngle;\n\n const x1 = cx + Math.cos(sliceStart) * radius;\n const y1 = cy + Math.sin(sliceStart) * radius;\n const x2 = cx + Math.cos(endAngle) * radius;\n const y2 = cy + Math.sin(endAngle) * radius;\n const ix1 = cx + Math.cos(sliceStart) * innerRadius;\n const iy1 = cy + Math.sin(sliceStart) * innerRadius;\n const ix2 = cx + Math.cos(endAngle) * innerRadius;\n const iy2 = cy + Math.sin(endAngle) * innerRadius;\n const largeArc = angle > Math.PI ? 1 : 0;\n const color = COLORS[i % COLORS.length];\n\n const midAngle = sliceStart + angle / 2;\n const textR = radius * 0.75;\n const tx = cx + Math.cos(midAngle) * textR;\n const ty = cy + Math.sin(midAngle) * textR;\n const pct = Math.round((val / total) * 100);\n\n let d = '';\n if (innerRadius > 0) {\n d = `M ${ix1} ${iy1} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} L ${ix2} ${iy2} A ${innerRadius} ${innerRadius} 0 ${largeArc} 0 ${ix1} ${iy1} Z`;\n } else {\n d = `M ${cx} ${cy} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} Z`;\n }\n\n return { d, color, label: labels[i], value: val, pct, tx, ty, show: angle > 0.25 };\n });\n\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center gap-4 w-full\", className)} {...props}>\n <svg width=\"100%\" viewBox={`0 0 ${width} ${height}`} style={{ maxWidth: width }}>\n {slices.map((slice, i) => (\n <g key={i}>\n <path d={slice.d} fill={slice.color} stroke=\"white\" strokeWidth={2} opacity={0.85} className=\"transition-opacity hover:opacity-100\">\n <title>{slice.label}: {slice.value} ({slice.pct}%)</title>\n </path>\n {slice.show && <text x={slice.tx} y={slice.ty} textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"11\" fill=\"white\" fontWeight=\"600\">{slice.pct}%</text>}\n </g>\n ))}\n </svg>\n {showLegend && (\n <div className=\"flex flex-wrap justify-center gap-3\">\n {slices.map((s, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-gray-600\">\n <div className=\"w-3 h-3 rounded-sm flex-shrink-0\" style={{ background: s.color }} />\n {s.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Bar / Line charts\n const allValues = datasets.flatMap(d => d.data);\n const maxValue = Math.max(...allValues, 0) * 1.1 || 10;\n const minValue = 0;\n const valueRange = maxValue - minValue;\n const barGroupWidth = chartWidth / labels.length;\n const barWidth = (barGroupWidth * 0.7) / datasets.length;\n\n const toY = (val: number) => chartHeight - ((val - minValue) / valueRange) * chartHeight;\n\n const yTickCount = 5;\n const yTicks = Array.from({ length: yTickCount + 1 }, (_, i) => minValue + (valueRange / yTickCount) * i);\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-4 w-full overflow-x-auto\", className)} {...props}>\n <svg width=\"100%\" viewBox={`0 0 ${width} ${height}`} style={{ minWidth: width * 0.6 }}>\n <g transform={`translate(${PADDING.left}, ${PADDING.top})`}>\n {/* Y-axis ticks */}\n {yTicks.map((tick, i) => (\n <g key={i}>\n <line x1={0} y1={toY(tick)} x2={chartWidth} y2={toY(tick)} stroke=\"#e5e7eb\" strokeDasharray=\"4 2\" />\n <text x={-6} y={toY(tick)} textAnchor=\"end\" dominantBaseline=\"middle\" fontSize=\"10\" fill=\"#9ca3af\">\n {Math.round(tick).toLocaleString()}\n </text>\n </g>\n ))}\n\n {/* X-axis labels */}\n {labels.map((lbl, i) => (\n <text key={i} x={i * barGroupWidth + barGroupWidth / 2} y={chartHeight + 20} textAnchor=\"middle\" fontSize=\"10\" fill=\"#6b7280\">\n {lbl}\n </text>\n ))}\n\n {/* Axes */}\n <line x1={0} y1={0} x2={0} y2={chartHeight} stroke=\"#d1d5db\" />\n <line x1={0} y1={chartHeight} x2={chartWidth} y2={chartHeight} stroke=\"#d1d5db\" />\n\n {/* Data */}\n {datasets.map((dataset, di) => {\n const color = dataset.color || COLORS[di % COLORS.length];\n if (type === 'line') {\n const points = dataset.data.map((val, xi) => `${xi * barGroupWidth + barGroupWidth / 2},${toY(val)}`).join(' ');\n return (\n <g key={di}>\n <polyline points={points} fill=\"none\" stroke={color} strokeWidth={2.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n {dataset.data.map((val, xi) => (\n <circle key={xi} cx={xi * barGroupWidth + barGroupWidth / 2} cy={toY(val)} r={4} fill={color} stroke=\"white\" strokeWidth={2}>\n <title>{dataset.label}: {val}</title>\n </circle>\n ))}\n </g>\n );\n } else {\n return (\n <g key={di}>\n {dataset.data.map((val, xi) => {\n const x = xi * barGroupWidth + di * barWidth + (barGroupWidth - datasets.length * barWidth) / 2;\n const barH = Math.max(0, toY(0) - toY(val));\n return (\n <rect key={xi} x={x} y={toY(val)} width={barWidth} height={barH} fill={color} rx={3} opacity={0.85} className=\"transition-opacity hover:opacity-100\">\n <title>{dataset.label}: {val}</title>\n </rect>\n );\n })}\n </g>\n );\n }\n })}\n </g>\n </svg>\n\n {showLegend && (\n <div className=\"flex flex-wrap justify-center gap-4 px-4\">\n {datasets.map((d, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-gray-600\">\n <div className=\"w-3 h-3 rounded-sm flex-shrink-0\" style={{ background: d.color || COLORS[i % COLORS.length] }} />\n {d.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nChart.displayName = 'Chart';\n","import React, { useState, useCallback, forwardRef } from 'react';\nimport { Plus, Minus, Trash2, ShoppingBag } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CartItem {\n id: string;\n name: string;\n price: number;\n quantity: number;\n image?: string;\n description?: string;\n}\n\nexport interface ShoppingCartProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: CartItem[];\n onChange?: (items: CartItem[]) => void;\n onCheckout?: (items: CartItem[], total: number) => void;\n currency?: string;\n}\n\nexport const ShoppingCart = forwardRef<HTMLDivElement, ShoppingCartProps>(\n ({ className, items: initialItems, onChange, onCheckout, currency = '$', ...props }, ref) => {\n const [items, setItems] = useState<CartItem[]>(initialItems);\n\n const update = useCallback((newItems: CartItem[]) => {\n setItems(newItems);\n onChange?.(newItems);\n }, [onChange]);\n\n const updateQty = (id: string, delta: number) => {\n const updated = items.map(item => {\n if (item.id !== id) return item;\n const newQty = item.quantity + delta;\n return newQty < 1 ? null : { ...item, quantity: newQty };\n }).filter(Boolean) as CartItem[];\n update(updated);\n };\n\n const removeItem = (id: string) => update(items.filter(i => i.id !== id));\n\n const subtotal = items.reduce((acc, i) => acc + i.price * i.quantity, 0);\n const tax = subtotal * 0.1;\n const total = subtotal + tax;\n\n if (items.length === 0) {\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center justify-center py-20 gap-4 text-center\", className)} {...props}>\n <div className=\"w-16 h-16 rounded-full bg-gray-100 flex items-center justify-center\">\n <ShoppingBag className=\"w-8 h-8 text-gray-400\" />\n </div>\n <p className=\"text-gray-500 font-medium\">Your cart is empty</p>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={cn(\"w-full flex flex-col lg:flex-row gap-6\", className)} {...props}>\n {/* Items List */}\n <div className=\"flex-1 flex flex-col gap-3\">\n {items.map(item => (\n <div key={item.id} className=\"flex items-start gap-4 p-4 bg-white border border-gray-200 rounded-xl shadow-sm hover:shadow-md transition-shadow\">\n {item.image && (\n <img src={item.image} alt={item.name} className=\"w-20 h-20 object-cover rounded-lg flex-shrink-0 bg-gray-100\" />\n )}\n {!item.image && (\n <div className=\"w-20 h-20 rounded-lg bg-gray-100 flex-shrink-0 flex items-center justify-center\">\n <ShoppingBag className=\"w-8 h-8 text-gray-300\" />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-semibold text-gray-900 text-sm truncate\">{item.name}</h4>\n <button onClick={() => removeItem(item.id)} className=\"text-gray-400 hover:text-red-500 transition-colors flex-shrink-0 p-1 -m-1\">\n <Trash2 className=\"w-4 h-4\" />\n </button>\n </div>\n {item.description && <p className=\"text-xs text-gray-500 mt-1 line-clamp-2\">{item.description}</p>}\n <div className=\"flex items-center justify-between mt-3\">\n <div className=\"flex items-center gap-2 bg-gray-100 rounded-lg p-1\">\n <button onClick={() => updateQty(item.id, -1)} className=\"w-6 h-6 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\">\n <Minus className=\"w-3 h-3\" />\n </button>\n <span className=\"text-sm font-semibold text-gray-900 w-6 text-center\">{item.quantity}</span>\n <button onClick={() => updateQty(item.id, 1)} className=\"w-6 h-6 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\">\n <Plus className=\"w-3 h-3\" />\n </button>\n </div>\n <span className=\"font-bold text-gray-900\">{currency}{(item.price * item.quantity).toFixed(2)}</span>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"w-full lg:w-80 flex-shrink-0\">\n <div className=\"bg-white border border-gray-200 rounded-xl p-5 shadow-sm sticky top-4\">\n <h3 className=\"font-semibold text-gray-900 mb-4 text-base\">Order Summary</h3>\n <div className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between text-gray-600\"><span>Subtotal ({items.length} items)</span><span>{currency}{subtotal.toFixed(2)}</span></div>\n <div className=\"flex justify-between text-gray-600\"><span>Tax (10%)</span><span>{currency}{tax.toFixed(2)}</span></div>\n <div className=\"flex justify-between text-gray-600\"><span>Shipping</span><span className=\"text-green-600 font-medium\">Free</span></div>\n <div className=\"border-t border-gray-200 pt-3 flex justify-between font-bold text-gray-900 text-base\">\n <span>Total</span><span>{currency}{total.toFixed(2)}</span>\n </div>\n </div>\n <button\n onClick={() => onCheckout?.(items, total)}\n className=\"mt-5 w-full bg-blue-600 text-white rounded-lg py-3 text-sm font-semibold hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors\"\n >\n Proceed to Checkout\n </button>\n </div>\n </div>\n </div>\n );\n }\n);\n\nShoppingCart.displayName = 'ShoppingCart';\n","import React, { useRef, forwardRef, useCallback } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Bold, Italic, Underline, List, ListOrdered, AlignLeft, AlignCenter, AlignRight, Link, Quote, Minus } from 'lucide-react';\n\nexport interface RichTextEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n minHeight?: string;\n label?: string;\n error?: string;\n}\n\nconst ToolbarButton: React.FC<{ onClick: () => void; active?: boolean; title: string; children: React.ReactNode }> = ({ onClick, active, title, children }) => (\n <button\n type=\"button\"\n onMouseDown={(e) => { e.preventDefault(); onClick(); }}\n title={title}\n className={cn(\"p-1.5 rounded hover:bg-gray-200 text-gray-600 hover:text-gray-900 transition-colors focus:outline-none\", active && \"bg-gray-200 text-gray-900\")}\n >\n {children}\n </button>\n);\n\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n ({ className, value, onChange, placeholder = 'Start writing...', minHeight = '200px', label, error, ...props }, ref) => {\n const editorRef = useRef<HTMLDivElement>(null);\n\n const execCmd = useCallback((command: string, val?: string) => {\n document.execCommand(command, false, val);\n editorRef.current?.focus();\n onChange?.(editorRef.current?.innerHTML || '');\n }, [onChange]);\n\n const handleInput = () => {\n onChange?.(editorRef.current?.innerHTML || '');\n };\n\n const insertLink = () => {\n const url = window.prompt('Enter URL:');\n if (url) execCmd('createLink', url);\n };\n\n const hasFormat = (command: string) => {\n try { return document.queryCommandState(command); } catch { return false; }\n };\n\n const toolbarGroups = [\n [\n { cmd: 'bold', icon: <Bold className=\"w-4 h-4\" />, title: 'Bold' },\n { cmd: 'italic', icon: <Italic className=\"w-4 h-4\" />, title: 'Italic' },\n { cmd: 'underline', icon: <Underline className=\"w-4 h-4\" />, title: 'Underline' },\n ],\n [\n { cmd: 'insertUnorderedList', icon: <List className=\"w-4 h-4\" />, title: 'Bullet List' },\n { cmd: 'insertOrderedList', icon: <ListOrdered className=\"w-4 h-4\" />, title: 'Numbered List' },\n { cmd: 'formatBlock:blockquote', icon: <Quote className=\"w-4 h-4\" />, title: 'Quote' },\n ],\n [\n { cmd: 'justifyLeft', icon: <AlignLeft className=\"w-4 h-4\" />, title: 'Align Left' },\n { cmd: 'justifyCenter', icon: <AlignCenter className=\"w-4 h-4\" />, title: 'Align Center' },\n { cmd: 'justifyRight', icon: <AlignRight className=\"w-4 h-4\" />, title: 'Align Right' },\n ],\n [\n { cmd: 'insertHorizontalRule', icon: <Minus className=\"w-4 h-4\" />, title: 'Horizontal Rule' },\n ],\n ];\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1 w-full\", className)} {...props}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n <div className={cn(\"border rounded-lg overflow-hidden bg-white\", error ? \"border-red-400\" : \"border-gray-300\", \"focus-within:ring-2 focus-within:ring-blue-500 focus-within:border-blue-500\")}>\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center gap-1 px-2 py-1.5 border-b border-gray-200 bg-gray-50\">\n {toolbarGroups.map((group, gi) => (\n <React.Fragment key={gi}>\n {gi > 0 && <div className=\"w-px h-5 bg-gray-300 mx-1\" />}\n {group.map(({ cmd, icon, title }) => (\n <ToolbarButton\n key={cmd}\n title={title}\n onClick={() => cmd.startsWith('formatBlock:') ? execCmd('formatBlock', cmd.split(':')[1]) : execCmd(cmd)}\n active={!cmd.startsWith('formatBlock') && !cmd.startsWith('insert') ? hasFormat(cmd) : false}\n >\n {icon}\n </ToolbarButton>\n ))}\n </React.Fragment>\n ))}\n <div className=\"w-px h-5 bg-gray-300 mx-1\" />\n <ToolbarButton onClick={insertLink} title=\"Insert Link\"><Link className=\"w-4 h-4\" /></ToolbarButton>\n </div>\n\n {/* Content Area */}\n <div\n ref={editorRef}\n contentEditable\n suppressContentEditableWarning\n onInput={handleInput}\n data-placeholder={placeholder}\n className=\"px-4 py-3 text-sm text-gray-800 focus:outline-none prose prose-sm max-w-none [&:empty]:before:content-[attr(data-placeholder)] [&:empty]:before:text-gray-400\"\n style={{ minHeight }}\n dangerouslySetInnerHTML={value !== undefined ? { __html: value } : undefined}\n />\n </div>\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Copy, Check } from 'lucide-react';\n\nexport interface CodeEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string;\n onChange?: (value: string) => void;\n language?: string;\n label?: string;\n readOnly?: boolean;\n showLineNumbers?: boolean;\n minHeight?: string;\n}\n\nexport const CodeEditor = forwardRef<HTMLDivElement, CodeEditorProps>(\n ({ className, value = '', onChange, language = 'javascript', label, readOnly = false, showLineNumbers = true, minHeight = '200px', ...props }, ref) => {\n const [copied, setCopied] = React.useState(false);\n const lines = value.split('\\n');\n\n const handleCopy = () => {\n navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1 w-full\", className)} {...props}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n <div className=\"rounded-xl overflow-hidden border border-gray-800 shadow-lg\" style={{ fontFamily: \"'Fira Code', 'Consolas', 'Monaco', monospace\" }}>\n {/* Titlebar */}\n <div className=\"flex items-center justify-between px-4 py-2.5 bg-gray-900 border-b border-gray-700\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1.5\">\n <div className=\"w-3 h-3 rounded-full bg-red-500 opacity-80\" />\n <div className=\"w-3 h-3 rounded-full bg-amber-500 opacity-80\" />\n <div className=\"w-3 h-3 rounded-full bg-green-500 opacity-80\" />\n </div>\n <span className=\"text-xs text-gray-400 ml-2\">{language}</span>\n </div>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 text-xs text-gray-400 hover:text-gray-200 transition-colors px-2 py-1 rounded hover:bg-gray-700\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-green-400\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n {/* Editor Area */}\n <div className=\"relative flex bg-gray-950 overflow-auto\" style={{ minHeight }}>\n {/* Line Numbers */}\n {showLineNumbers && (\n <div className=\"flex-shrink-0 select-none py-4 pl-3 pr-3 text-right text-gray-600 text-xs leading-5 border-r border-gray-800\" style={{ minWidth: '3rem' }}>\n {lines.map((_, i) => <div key={i}>{i + 1}</div>)}\n </div>\n )}\n\n {/* Textarea */}\n <textarea\n value={value}\n readOnly={readOnly}\n onChange={e => onChange?.(e.target.value)}\n spellCheck={false}\n className=\"flex-1 p-4 text-xs text-green-300 bg-transparent resize-none focus:outline-none leading-5 w-full\"\n style={{ minHeight, fontFamily: 'inherit', tabSize: 2 }}\n />\n </div>\n </div>\n </div>\n );\n }\n);\n\nCodeEditor.displayName = 'CodeEditor';\n","import React, { useState, forwardRef } from 'react';\nimport { Folder, File, Upload, Search, Trash2, Download, Copy, Grid, List, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileItem {\n id: string;\n name: string;\n type: 'file' | 'folder';\n size?: number;\n modified?: string;\n mimeType?: string;\n}\n\nexport interface FileManagerProps extends React.HTMLAttributes<HTMLDivElement> {\n items?: FileItem[];\n onFileSelect?: (item: FileItem) => void;\n onDelete?: (items: FileItem[]) => void;\n onUpload?: (files: FileList) => void;\n}\n\nconst formatSize = (bytes?: number) => {\n if (!bytes) return '-';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1048576).toFixed(1)} MB`;\n};\n\nexport const FileManager = forwardRef<HTMLDivElement, FileManagerProps>(\n ({ className, items: propItems = [], onFileSelect, onDelete, onUpload, ...props }, ref) => {\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [search, setSearch] = useState('');\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [breadcrumbs, setBreadcrumbs] = useState<string[]>(['My Files']);\n\n const filtered = propItems.filter(item => item.name.toLowerCase().includes(search.toLowerCase()));\n\n const toggleSelect = (id: string) => {\n setSelected(prev => { const next = new Set(prev); next.has(id) ? next.delete(id) : next.add(id); return next; });\n };\n\n const selectedItems = propItems.filter(i => selected.has(i.id));\n\n const getIcon = (item: FileItem) => {\n if (item.type === 'folder') return <Folder className=\"text-amber-400\" />;\n if (item.mimeType?.startsWith('image/')) return <File className=\"text-blue-400\" />;\n return <File className=\"text-gray-400\" />;\n };\n\n return (\n <div ref={ref} className={cn(\"flex flex-col w-full h-full bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm\", className)} {...props}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-3 px-4 py-3 border-b border-gray-200 flex-wrap\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {selected.size > 0 && (\n <>\n <span className=\"text-sm text-gray-600 font-medium\">{selected.size} selected</span>\n <button onClick={() => onDelete?.(selectedItems)} className=\"flex items-center gap-1.5 text-sm text-red-600 hover:text-red-700 px-2 py-1 rounded hover:bg-red-50\">\n <Trash2 className=\"w-4 h-4\" /> Delete\n </button>\n <button onClick={() => setSelected(new Set())} className=\"text-sm text-gray-500 hover:text-gray-700 px-2 py-1\">Clear</button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Search files...\" className=\"pl-9 pr-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 w-48\" />\n </div>\n <label className=\"flex items-center gap-1.5 text-sm font-medium text-gray-700 px-3 py-1.5 border border-gray-300 rounded-lg hover:bg-gray-50 cursor-pointer\">\n <Upload className=\"w-4 h-4\" /> Upload\n <input type=\"file\" multiple className=\"sr-only\" onChange={e => e.target.files && onUpload?.(e.target.files)} />\n </label>\n <div className=\"flex rounded-lg border border-gray-300 overflow-hidden\">\n <button onClick={() => setViewMode('grid')} className={cn(\"p-1.5\", viewMode === 'grid' ? \"bg-blue-50 text-blue-600\" : \"text-gray-500 hover:bg-gray-50\")}><Grid className=\"w-4 h-4\" /></button>\n <button onClick={() => setViewMode('list')} className={cn(\"p-1.5\", viewMode === 'list' ? \"bg-blue-50 text-blue-600\" : \"text-gray-500 hover:bg-gray-50\")}><List className=\"w-4 h-4\" /></button>\n </div>\n </div>\n </div>\n\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-1 px-4 py-2 border-b border-gray-100 text-sm text-gray-500\">\n {breadcrumbs.map((crumb, i) => (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight className=\"w-4 h-4 text-gray-300\" />}\n <button className={cn(\"hover:text-gray-800 transition-colors\", i === breadcrumbs.length - 1 ? \"text-gray-900 font-medium\" : \"hover:underline\")}>{crumb}</button>\n </React.Fragment>\n ))}\n </div>\n\n {/* Files Area */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {filtered.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-48 text-gray-400 gap-2\">\n <Folder className=\"w-12 h-12 opacity-30\" />\n <span className=\"text-sm\">No files found</span>\n </div>\n ) : viewMode === 'grid' ? (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3\">\n {filtered.map(item => (\n <div\n key={item.id}\n onClick={() => { toggleSelect(item.id); item.type === 'file' && onFileSelect?.(item); }}\n className={cn(\"flex flex-col items-center gap-2 p-3 rounded-xl cursor-pointer transition-all hover:bg-gray-50 border\", selected.has(item.id) ? \"border-blue-500 bg-blue-50\" : \"border-transparent\")}\n >\n <div className=\"w-12 h-12 flex items-center justify-center text-3xl\">{getIcon(item)}</div>\n <p className=\"text-xs text-center text-gray-700 font-medium line-clamp-2 leading-tight\">{item.name}</p>\n {item.size !== undefined && <p className=\"text-[10px] text-gray-400\">{formatSize(item.size)}</p>}\n </div>\n ))}\n </div>\n ) : (\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-gray-500 uppercase tracking-wide border-b border-gray-100\">\n <th className=\"pb-2 font-semibold w-8\"><input type=\"checkbox\" onChange={e => { if (e.target.checked) setSelected(new Set(filtered.map(f => f.id))); else setSelected(new Set()); }} /></th>\n <th className=\"pb-2 font-semibold\">Name</th>\n <th className=\"pb-2 font-semibold hidden sm:table-cell\">Type</th>\n <th className=\"pb-2 font-semibold hidden md:table-cell\">Size</th>\n <th className=\"pb-2 font-semibold hidden lg:table-cell\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {filtered.map(item => (\n <tr key={item.id} onClick={() => { toggleSelect(item.id); item.type === 'file' && onFileSelect?.(item); }} className={cn(\"cursor-pointer transition-colors border-b border-gray-50 last:border-0\", selected.has(item.id) ? \"bg-blue-50\" : \"hover:bg-gray-50\")}>\n <td className=\"py-2 pr-2\"><input type=\"checkbox\" checked={selected.has(item.id)} readOnly /></td>\n <td className=\"py-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex-shrink-0\">{getIcon(item)}</span>\n <span className=\"font-medium text-gray-800 truncate\">{item.name}</span>\n </div>\n </td>\n <td className=\"py-2 text-gray-500 capitalize hidden sm:table-cell\">{item.type}</td>\n <td className=\"py-2 text-gray-500 hidden md:table-cell\">{formatSize(item.size)}</td>\n <td className=\"py-2 text-gray-500 hidden lg:table-cell\">{item.modified || '-'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </div>\n </div>\n );\n }\n);\n\nFileManager.displayName = 'FileManager';\n","import React, { useState, forwardRef } from 'react';\nimport { Send, Paperclip, Bold, Italic, Underline, Trash2, ChevronDown, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmailComposerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n onSend?: (email: { to: string[]; cc: string[]; bcc: string[]; subject: string; body: string; attachments: File[] }) => void;\n onDiscard?: () => void;\n defaultTo?: string[];\n defaultSubject?: string;\n}\n\nexport const EmailComposer = forwardRef<HTMLDivElement, EmailComposerProps>(\n ({ className, onSend, onDiscard, defaultTo = [], defaultSubject = '', ...props }, ref) => {\n const [to, setTo] = useState<string[]>(defaultTo);\n const [toInput, setToInput] = useState('');\n const [cc, setCc] = useState<string[]>([]);\n const [bcc, setBcc] = useState<string[]>([]);\n const [showCcBcc, setShowCcBcc] = useState(false);\n const [subject, setSubject] = useState(defaultSubject);\n const [body, setBody] = useState('');\n const [attachments, setAttachments] = useState<File[]>([]);\n const bodyRef = React.useRef<HTMLDivElement>(null);\n\n const addRecipient = (list: string[], setList: (v: string[]) => void, input: string, setInput: (v: string) => void) => {\n const email = input.trim();\n if (email && !list.includes(email)) setList([...list, email]);\n setInput('');\n };\n\n const removeRecipient = (list: string[], setList: (v: string[]) => void, email: string) => setList(list.filter(e => e !== email));\n\n const handleSend = () => {\n onSend?.({ to, cc, bcc, subject, body: bodyRef.current?.innerHTML || body, attachments });\n };\n\n const execCmd = (cmd: string) => { document.execCommand(cmd, false); bodyRef.current?.focus(); };\n\n const RecipientField = ({ label, list, setList, inputVal, setInputVal }: any) => (\n <div className=\"flex items-start gap-2 py-2 border-b border-gray-100 flex-wrap\">\n <span className=\"text-sm text-gray-500 font-medium mt-2 flex-shrink-0 w-10\">{label}:</span>\n <div className=\"flex flex-1 flex-wrap gap-1.5 min-h-[36px] items-center\">\n {list.map((email: string) => (\n <span key={email} className=\"inline-flex items-center gap-1 px-2.5 py-1 bg-blue-50 text-blue-700 text-xs rounded-full border border-blue-100\">\n {email}\n <button type=\"button\" onClick={() => removeRecipient(list, setList, email)} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n <input\n value={inputVal}\n onChange={e => setInputVal(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addRecipient(list, setList, inputVal, setInputVal); } }}\n onBlur={() => addRecipient(list, setList, inputVal, setInputVal)}\n placeholder={list.length === 0 ? `Add ${label.toLowerCase()} recipients` : ''}\n className=\"flex-1 min-w-[150px] text-sm focus:outline-none text-gray-800 placeholder-gray-400 py-1\"\n />\n </div>\n </div>\n );\n\n return (\n <div ref={ref} className={cn(\"flex flex-col w-full bg-white border border-gray-200 rounded-xl shadow-lg overflow-hidden\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-gray-900 text-white\">\n <h3 className=\"font-semibold text-sm\">New Message</h3>\n <div className=\"flex items-center gap-2\">\n <button onClick={onDiscard} className=\"text-gray-400 hover:text-white\"><X className=\"w-5 h-5\" /></button>\n </div>\n </div>\n\n {/* Recipients */}\n <div className=\"px-4 py-1 border-b border-gray-200\">\n <RecipientField label=\"To\" list={to} setList={setTo} inputVal={toInput} setInputVal={setToInput} />\n <div className=\"flex justify-end py-1\">\n <button type=\"button\" onClick={() => setShowCcBcc(!showCcBcc)} className=\"text-xs text-blue-600 hover:text-blue-800 flex items-center gap-1\">\n Cc/Bcc <ChevronDown className={cn(\"w-3 h-3 transition-transform\", showCcBcc && \"rotate-180\")} />\n </button>\n </div>\n {showCcBcc && (\n <>\n <RecipientField label=\"Cc\" list={cc} setList={setCc} inputVal=\"\" setInputVal={() => {}} />\n <RecipientField label=\"Bcc\" list={bcc} setList={setBcc} inputVal=\"\" setInputVal={() => {}} />\n </>\n )}\n <div className=\"py-2 border-b border-gray-100\">\n <input value={subject} onChange={e => setSubject(e.target.value)} placeholder=\"Subject\" className=\"w-full text-sm text-gray-800 placeholder-gray-400 focus:outline-none font-medium py-1\" />\n </div>\n </div>\n\n {/* Toolbar */}\n <div className=\"flex items-center gap-1 px-4 py-1.5 border-b border-gray-100 bg-gray-50\">\n {[{ cmd: 'bold', icon: <Bold className=\"w-4 h-4\" /> }, { cmd: 'italic', icon: <Italic className=\"w-4 h-4\" /> }, { cmd: 'underline', icon: <Underline className=\"w-4 h-4\" /> }].map(({ cmd, icon }) => (\n <button key={cmd} type=\"button\" onMouseDown={e => { e.preventDefault(); execCmd(cmd); }} className=\"p-1.5 rounded hover:bg-gray-200 text-gray-600 hover:text-gray-900 transition-colors\">{icon}</button>\n ))}\n </div>\n\n {/* Body */}\n <div\n ref={bodyRef}\n contentEditable\n suppressContentEditableWarning\n onInput={e => setBody((e.target as HTMLDivElement).innerHTML)}\n data-placeholder=\"Compose your email...\"\n className=\"flex-1 px-4 py-3 text-sm text-gray-700 focus:outline-none min-h-[200px] [&:empty]:before:content-[attr(data-placeholder)] [&:empty]:before:text-gray-400\"\n />\n\n {/* Attachments */}\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 px-4 py-2 border-t border-gray-100\">\n {attachments.map((file, i) => (\n <span key={i} className=\"inline-flex items-center gap-1 px-2.5 py-1 bg-gray-100 text-gray-700 text-xs rounded-full\">\n <Paperclip className=\"w-3 h-3\" /> {file.name}\n <button type=\"button\" onClick={() => setAttachments(prev => prev.filter((_, fi) => fi !== i))} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n </div>\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-gray-200 bg-gray-50\">\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-1.5 text-sm text-gray-600 hover:text-gray-800 cursor-pointer px-2 py-1 rounded hover:bg-gray-200 transition-colors\">\n <Paperclip className=\"w-4 h-4\" /> Attach\n <input type=\"file\" multiple className=\"sr-only\" onChange={e => { if (e.target.files) setAttachments(prev => [...prev, ...Array.from(e.target.files!)]); }} />\n </label>\n <button type=\"button\" onClick={onDiscard} className=\"text-sm text-gray-500 hover:text-red-600 px-2 py-1 rounded hover:bg-red-50 transition-colors flex items-center gap-1\">\n <Trash2 className=\"w-4 h-4\" /> Discard\n </button>\n </div>\n <button\n type=\"button\"\n onClick={handleSend}\n disabled={to.length === 0}\n className=\"flex items-center gap-2 px-5 py-2 bg-blue-600 text-white text-sm font-semibold rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <Send className=\"w-4 h-4\" /> Send\n </button>\n </div>\n </div>\n );\n }\n);\n\nEmailComposer.displayName = 'EmailComposer';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, Plus, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n date: string; // YYYY-MM-DD format\n color?: string;\n description?: string;\n}\n\nexport interface CalendarWithEventsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n events?: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onDateClick?: (date: Date) => void;\n onAddEvent?: (date: Date) => void;\n}\n\nconst EVENT_COLORS = ['bg-blue-500', 'bg-green-500', 'bg-purple-500', 'bg-amber-500', 'bg-red-500', 'bg-pink-500'];\n\nexport const CalendarWithEvents = forwardRef<HTMLDivElement, CalendarWithEventsProps>(\n ({ className, events = [], onEventClick, onDateClick, onAddEvent, ...props }, ref) => {\n const [currentDate, setCurrentDate] = useState(new Date());\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\n\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n const today = new Date();\n\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const monthNames = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n const days = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1));\n const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1));\n\n const getEventsForDate = (day: number) => {\n const dateStr = `${year}-${String(month + 1).padStart(2,'0')}-${String(day).padStart(2,'0')}`;\n return events.filter(e => e.date === dateStr);\n };\n\n const handleDateClick = (day: number) => {\n const date = new Date(year, month, day);\n setSelectedDate(date);\n onDateClick?.(date);\n };\n\n const totalCells = Math.ceil((daysInMonth + firstDay) / 7) * 7;\n\n return (\n <div ref={ref} className={cn(\"w-full bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-gray-200 bg-gray-50\">\n <button onClick={prevMonth} className=\"p-1.5 rounded-lg hover:bg-gray-200 text-gray-600 transition-colors\">\n <ChevronLeft className=\"w-5 h-5\" />\n </button>\n <h2 className=\"font-bold text-gray-900\">{monthNames[month]} {year}</h2>\n <button onClick={nextMonth} className=\"p-1.5 rounded-lg hover:bg-gray-200 text-gray-600 transition-colors\">\n <ChevronRight className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Weekday Labels */}\n <div className=\"grid grid-cols-7 border-b border-gray-200\">\n {days.map(d => (\n <div key={d} className=\"py-2 text-center text-xs font-semibold text-gray-500 uppercase tracking-wide\">{d}</div>\n ))}\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 divide-x divide-y divide-gray-100\">\n {Array.from({ length: totalCells }).map((_, i) => {\n const day = i - firstDay + 1;\n const isValid = day >= 1 && day <= daysInMonth;\n const isToday = isValid && new Date(year, month, day).toDateString() === today.toDateString();\n const isSelected = isValid && selectedDate?.toDateString() === new Date(year, month, day).toDateString();\n const dayEvents = isValid ? getEventsForDate(day) : [];\n\n return (\n <div\n key={i}\n onClick={() => isValid && handleDateClick(day)}\n className={cn(\n \"min-h-[80px] md:min-h-[100px] p-1.5 transition-colors\",\n isValid ? \"cursor-pointer hover:bg-blue-50/50\" : \"bg-gray-50/50\",\n isSelected && \"bg-blue-50\"\n )}\n >\n {isValid && (\n <>\n <div className=\"flex items-center justify-between mb-1\">\n <span className={cn(\"w-7 h-7 flex items-center justify-center rounded-full text-sm font-medium\", isToday ? \"bg-blue-600 text-white\" : isSelected ? \"text-blue-700 font-bold\" : \"text-gray-700\")}>\n {day}\n </span>\n {onAddEvent && (\n <button\n onClick={(e) => { e.stopPropagation(); onAddEvent(new Date(year, month, day)); }}\n className=\"opacity-0 hover:opacity-100 group-hover:opacity-100 p-0.5 rounded hover:bg-blue-100 text-blue-600 transition-opacity focus:opacity-100\"\n >\n <Plus className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n <div className=\"flex flex-col gap-0.5\">\n {dayEvents.slice(0, 3).map((evt, ei) => (\n <button\n key={evt.id}\n onClick={(e) => { e.stopPropagation(); onEventClick?.(evt); }}\n className={cn(\"text-left text-[10px] md:text-xs font-medium text-white rounded px-1.5 py-0.5 truncate w-full transition-opacity hover:opacity-90\", evt.color || EVENT_COLORS[ei % EVENT_COLORS.length])}\n title={evt.title}\n >\n {evt.title}\n </button>\n ))}\n {dayEvents.length > 3 && (\n <span className=\"text-[10px] text-gray-500 pl-1\">+{dayEvents.length - 3} more</span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nCalendarWithEvents.displayName = 'CalendarWithEvents';\n","import React, { useState, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface GanttTask {\n id: string;\n name: string;\n start: string; // YYYY-MM-DD\n end: string; // YYYY-MM-DD\n color?: string;\n progress?: number; // 0-100\n group?: string;\n}\n\nexport interface GanttChartProps extends React.HTMLAttributes<HTMLDivElement> {\n tasks: GanttTask[];\n title?: string;\n}\n\nconst COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4'];\n\nexport const GanttChart = forwardRef<HTMLDivElement, GanttChartProps>(\n ({ className, tasks, title, ...props }, ref) => {\n const allDates = tasks.flatMap(t => [new Date(t.start), new Date(t.end)]);\n if (allDates.length === 0) return null;\n\n const minDate = new Date(Math.min(...allDates.map(d => d.getTime())));\n const maxDate = new Date(Math.max(...allDates.map(d => d.getTime())));\n minDate.setDate(minDate.getDate() - 2);\n maxDate.setDate(maxDate.getDate() + 2);\n\n const totalDays = Math.ceil((maxDate.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24));\n\n const toPercent = (dateStr: string) => {\n const d = new Date(dateStr);\n return ((d.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100;\n };\n\n const toWidth = (startStr: string, endStr: string) => {\n const start = new Date(startStr);\n const end = new Date(endStr);\n const duration = (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24);\n return duration / totalDays * 100;\n };\n\n // Generate week labels\n const weekLabels: { label: string; left: number }[] = [];\n let d = new Date(minDate);\n while (d <= maxDate) {\n weekLabels.push({ label: d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }), left: ((d.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100 });\n d.setDate(d.getDate() + 7);\n }\n\n const today = new Date();\n const todayLine = ((today.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100;\n const showTodayLine = todayLine >= 0 && todayLine <= 100;\n\n return (\n <div ref={ref} className={cn(\"w-full overflow-x-auto rounded-xl border border-gray-200 bg-white shadow-sm\", className)} {...props}>\n {title && <div className=\"px-5 py-3 border-b border-gray-200 font-bold text-gray-800 text-sm\">{title}</div>}\n <div style={{ minWidth: '700px' }}>\n {/* Header Row */}\n <div className=\"flex\">\n <div className=\"w-48 flex-shrink-0 border-b border-r border-gray-200 px-3 py-2.5\">\n <span className=\"text-xs font-semibold text-gray-500 uppercase tracking-wide\">Task</span>\n </div>\n <div className=\"flex-1 relative border-b border-gray-200 px-3 py-2.5 overflow-hidden\">\n {weekLabels.map((w, i) => (\n <span key={i} style={{ position: 'absolute', left: `${w.left}%`, transform: 'translateX(-50%)' }} className=\"text-[10px] text-gray-400 font-medium whitespace-nowrap\">\n {w.label}\n </span>\n ))}\n </div>\n </div>\n\n {/* Task Rows */}\n {tasks.map((task, ti) => {\n const left = toPercent(task.start);\n const width = toWidth(task.start, task.end);\n const color = task.color || COLORS[ti % COLORS.length];\n return (\n <div key={task.id} className=\"flex hover:bg-gray-50 transition-colors\">\n <div className=\"w-48 flex-shrink-0 border-b border-r border-gray-100 px-3 py-3\">\n {task.group && <p className=\"text-[10px] text-gray-400 font-medium uppercase tracking-wide leading-none mb-0.5\">{task.group}</p>}\n <p className=\"text-sm text-gray-800 font-medium truncate\">{task.name}</p>\n </div>\n <div className=\"flex-1 relative border-b border-gray-100 py-3 pr-3\">\n {/* Grid Lines */}\n {weekLabels.map((w, i) => (\n <div key={i} style={{ position: 'absolute', left: `${w.left}%`, top: 0, bottom: 0 }} className=\"w-px bg-gray-100\" />\n ))}\n {/* Today Line */}\n {showTodayLine && (\n <div style={{ position: 'absolute', left: `${todayLine}%`, top: 0, bottom: 0 }} className=\"w-px bg-red-400 z-10 opacity-70\" />\n )}\n {/* Bar */}\n <div style={{ marginLeft: `${left}%`, width: `${width}%`, background: color }} className=\"h-7 rounded-full flex items-center overflow-hidden relative group cursor-pointer hover:brightness-110 transition-all shadow-sm\">\n {(task.progress !== undefined) && (\n <div style={{ width: `${task.progress}%`, background: 'rgba(0,0,0,0.2)' }} className=\"absolute left-0 top-0 h-full rounded-full\" />\n )}\n <span className=\"relative z-10 px-3 text-xs text-white font-semibold truncate\">{task.name}</span>\n {task.progress !== undefined && (\n <span className=\"relative z-10 ml-auto pr-2 text-[10px] text-white/80 font-medium flex-shrink-0\">{task.progress}%</span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nGanttChart.displayName = 'GanttChart';\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateEmail: ValidatorFunction = (value) => {\n if (!value) return \"Email is required\";\n if (typeof value !== \"string\") return \"Email must be a string\";\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return \"Please enter a valid email address\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\n// Validates a URL string for an image, or a File object\nexport const validateImage: ValidatorFunction = (value) => {\n if (!value) return \"Image is required\";\n \n if (typeof value === \"string\") {\n try {\n const url = new URL(value);\n const validExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'];\n const hasValidExtension = validExtensions.some(ext => \n url.pathname.toLowerCase().endsWith(ext)\n );\n \n if (!hasValidExtension) {\n return \"Image URL must end with a valid extension (.jpg, .png, etc.)\";\n }\n } catch (e) {\n return \"Must be a valid URL string or a File object\";\n }\n } else if (value instanceof File) {\n if (!value.type.startsWith('image/')) {\n return \"File must be an image\";\n }\n \n // Check size (e.g., max 5MB)\n const maxSize = 5 * 1024 * 1024; // 5MB\n if (value.size > maxSize) {\n return \"Image size must be less than 5MB\";\n }\n } else {\n return \"Invalid image format\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateLongDescription: ValidatorFunction = (value) => {\n if (!value) return \"Long description is required\";\n if (typeof value !== \"string\") return \"Description must be a string\";\n \n if (value.length < 50) return \"Description must be at least 50 characters long\";\n if (value.length > 2000) return \"Description must be less than 2000 characters long\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateName: ValidatorFunction = (value) => {\n if (!value) return \"Name is required\";\n if (typeof value !== \"string\") return \"Name must be a string\";\n \n if (value.trim().length < 2) return \"Name must be at least 2 characters long\";\n if (value.length > 50) return \"Name must be less than 50 characters long\";\n \n // Allow letters, spaces, hyphens and apostrophes\n const nameRegex = /^[a-zA-Z\\s\\-']+$/;\n if (!nameRegex.test(value)) {\n return \"Name can only contain letters, spaces, hyphens, and apostrophes\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validatePassword: ValidatorFunction = (value) => {\n if (!value) return \"Password is required\";\n if (typeof value !== \"string\") return \"Password must be a string\";\n \n if (value.length < 8) return \"Password must be at least 8 characters long\";\n \n const hasUppercase = /[A-Z]/.test(value);\n const hasLowercase = /[a-z]/.test(value);\n const hasNumbers = /\\d/.test(value);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(value);\n \n if (!hasUppercase) return \"Password must contain at least one uppercase letter\";\n if (!hasLowercase) return \"Password must contain at least one lowercase letter\";\n if (!hasNumbers) return \"Password must contain at least one number\";\n if (!hasSpecialChar) return \"Password must contain at least one special character\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateRequired: ValidatorFunction = (value) => {\n if (value === undefined || value === null || value === \"\") {\n return \"This field is required\";\n }\n \n if (Array.isArray(value) && value.length === 0) {\n return \"This field requires at least one item\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateShortDescription: ValidatorFunction = (value) => {\n if (!value) return \"Short description is required\";\n if (typeof value !== \"string\") return \"Description must be a string\";\n \n if (value.length < 10) return \"Description must be at least 10 characters long\";\n if (value.length > 160) return \"Description must be less than 160 characters long\";\n \n return undefined;\n};\n","export type ValidatorFunction = (value: any) => string | undefined;\n\nexport const validateSlug: ValidatorFunction = (value) => {\n if (!value) return \"Slug is required\";\n if (typeof value !== \"string\") return \"Slug must be a string\";\n \n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(value)) {\n return \"Slug can only contain lowercase letters, numbers, and hyphens\";\n }\n \n if (value.length < 3) return \"Slug must be at least 3 characters long\";\n if (value.length > 50) return \"Slug must be less than 50 characters long\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateUrl: ValidatorFunction = (value) => {\n if (!value) return \"URL is required\";\n if (typeof value !== \"string\") return \"URL must be a string\";\n \n try {\n new URL(value);\n } catch (e) {\n return \"Please enter a valid URL (e.g. https://example.com)\";\n }\n \n return undefined;\n};\n"],"mappings":"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","names":["Calendar","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","jsPDF","autoTable","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","value","import_react","import_lucide_react","import_jsx_runtime","FileIcon","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","FileIcon","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","Calendar","year","month","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","toast","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","container","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","label","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","COLORS","d"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Table/Table.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Slider/Slider.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/Rating/Rating.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/TimePicker/TimePicker.tsx","../src/components/InputGroup/InputGroup.tsx","../src/components/Select/Select.tsx","../src/components/Card/Card.tsx","../src/components/List/List.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Chip/Chip.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Popover/Popover.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Timeline/Timeline.tsx","../src/components/TreeView/TreeView.tsx","../src/components/Statistic/Statistic.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Kanban/Kanban.tsx","../src/components/Alert/Alert.tsx","../src/components/Toast/Toast.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Banner/Banner.tsx","../src/components/StatusIndicator/StatusIndicator.tsx","../src/components/Navbar/Navbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Grid/Grid.tsx","../src/components/Stack/Stack.tsx","../src/components/SplitPane/SplitPane.tsx","../src/components/MasonryGrid/MasonryGrid.tsx","../src/components/Layout/Layout.tsx","../src/components/Portal/Portal.tsx","../src/components/Transition/Transition.tsx","../src/components/ClickAwayListener/ClickAwayListener.tsx","../src/components/VirtualScroll/VirtualScroll.tsx","../src/components/InfiniteScroll/InfiniteScroll.tsx","../src/components/LazyLoad/LazyLoad.tsx","../src/components/DebouncedInput/DebouncedInput.tsx","../src/components/AutoComplete/AutoComplete.tsx","../src/components/FormBuilder/FormBuilder.tsx","../src/components/ProductFilter/ProductFilter.tsx","../src/components/Chart/Chart.tsx","../src/components/ShoppingCart/ShoppingCart.tsx","../src/components/RichTextEditor/RichTextEditor.tsx","../src/components/CodeEditor/CodeEditor.tsx","../src/components/FileManager/FileManager.tsx","../src/components/EmailComposer/EmailComposer.tsx","../src/components/CalendarWithEvents/CalendarWithEvents.tsx","../src/components/GanttChart/GanttChart.tsx","../src/components/IconSelect/IconSelect.tsx","../src/components/ImageCrop/ImageCrop.tsx","../src/validators/email.ts","../src/validators/image.ts","../src/validators/longDescription.ts","../src/validators/name.ts","../src/validators/password.ts","../src/validators/required.ts","../src/validators/shortDescription.ts","../src/validators/slug.ts","../src/validators/url.ts"],"sourcesContent":["import './index.css';\r\nexport { cn } from \"./utils/cn\";\r\nexport { Button } from \"./components/Button/Button\";\r\nexport { Input } from \"./components/Input/Input\";\r\nexport { Table } from \"./components/Table/Table\";\r\nexport { Checkbox } from \"./components/Checkbox/Checkbox\";\r\nexport { Radio } from \"./components/Radio/Radio\";\r\nexport { Toggle } from \"./components/Toggle/Toggle\";\r\nexport { Textarea } from \"./components/Textarea/Textarea\";\r\nexport { Slider } from \"./components/Slider/Slider\";\r\nexport { ColorPicker } from \"./components/ColorPicker/ColorPicker\";\r\nexport { Rating } from \"./components/Rating/Rating\";\r\nexport { OTPInput } from \"./components/OTPInput/OTPInput\";\r\nexport { FileUpload } from \"./components/FileUpload/FileUpload\";\r\nexport { DatePicker } from \"./components/DatePicker/DatePicker\";\r\nexport { TimePicker } from \"./components/TimePicker/TimePicker\";\r\nexport { InputGroup } from \"./components/InputGroup/InputGroup\";\r\nexport { Select } from \"./components/Select/Select\";\r\n\r\n// Display Basics\r\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"./components/Card/Card\";\r\nexport { List, ListItem } from \"./components/List/List\";\r\nexport { Avatar } from \"./components/Avatar/Avatar\";\r\nexport { Badge } from \"./components/Badge/Badge\";\r\nexport { Chip } from \"./components/Chip/Chip\";\r\nexport { EmptyState } from \"./components/EmptyState/EmptyState\";\r\nexport { Tooltip } from \"./components/Tooltip/Tooltip\";\r\n\r\n// Overlays\r\nexport { Popover } from \"./components/Popover/Popover\";\r\nexport { Dialog } from \"./components/Dialog/Dialog\";\r\nexport { Drawer } from \"./components/Drawer/Drawer\";\r\n\r\n// Interactive & Navigation\r\nexport { Accordion } from \"./components/Accordion/Accordion\";\r\nexport { Tabs } from \"./components/Tabs/Tabs\";\r\nexport { Carousel } from \"./components/Carousel/Carousel\";\r\nexport { Timeline } from \"./components/Timeline/Timeline\";\r\nexport { TreeView } from \"./components/TreeView/TreeView\";\r\n\r\n// Advanced/Specific\r\nexport { Statistic } from \"./components/Statistic/Statistic\";\r\nexport { ProgressBar } from \"./components/ProgressBar/ProgressBar\";\r\nexport { Skeleton } from \"./components/Skeleton/Skeleton\";\r\nexport { Calendar } from \"./components/Calendar/Calendar\";\r\nexport { Kanban } from \"./components/Kanban/Kanban\";\r\n\r\n// Feedback & Status\r\nexport { Alert } from \"./components/Alert/Alert\";\r\nexport { toast, Toaster } from \"./components/Toast/Toast\";\r\nexport type { ToastOptions, ToastVariant } from \"./components/Toast/Toast\";\r\nexport { Spinner } from \"./components/Spinner/Spinner\";\r\nexport { Banner } from \"./components/Banner/Banner\";\r\nexport { StatusIndicator } from \"./components/StatusIndicator/StatusIndicator\";\r\n\r\n// Navigation & Menus\r\nexport { Navbar } from \"./components/Navbar/Navbar\";\r\nexport { Sidebar } from \"./components/Sidebar/Sidebar\";\r\nexport type { SidebarItem, SidebarProps } from \"./components/Sidebar/Sidebar\";\r\nexport { Breadcrumb } from \"./components/Breadcrumb/Breadcrumb\";\r\nexport { Pagination } from \"./components/Pagination/Pagination\";\r\nexport { Stepper } from \"./components/Stepper/Stepper\";\r\nexport { Dropdown } from \"./components/Dropdown/Dropdown\";\r\nexport type { DropdownItem, DropdownProps } from \"./components/Dropdown/Dropdown\";\r\n\r\n// Layout & Structure\r\nexport { Grid } from \"./components/Grid/Grid\";\r\nexport { Stack } from \"./components/Stack/Stack\";\r\nexport { SplitPane } from \"./components/SplitPane/SplitPane\";\r\nexport { MasonryGrid } from \"./components/MasonryGrid/MasonryGrid\";\r\nexport { Container, Section, Hero, Footer } from \"./components/Layout/Layout\";\r\n\r\n// Utilities & Behaviors\r\nexport { Portal } from \"./components/Portal/Portal\";\r\nexport { Transition } from \"./components/Transition/Transition\";\r\nexport { ClickAwayListener } from \"./components/ClickAwayListener/ClickAwayListener\";\r\nexport { VirtualScroll } from \"./components/VirtualScroll/VirtualScroll\";\r\nexport { InfiniteScroll } from \"./components/InfiniteScroll/InfiniteScroll\";\r\nexport { LazyLoad } from \"./components/LazyLoad/LazyLoad\";\r\nexport { DebouncedInput } from \"./components/DebouncedInput/DebouncedInput\";\r\n\r\n// Forms & Search\r\nexport { AutoComplete } from \"./components/AutoComplete/AutoComplete\";\r\nexport { FormBuilder } from \"./components/FormBuilder/FormBuilder\";\r\nexport type { FormField, FormFieldType } from \"./components/FormBuilder/FormBuilder\";\r\nexport { ProductFilter } from \"./components/ProductFilter/ProductFilter\";\r\nexport type { FilterGroup, FilterOption } from \"./components/ProductFilter/ProductFilter\";\r\n\r\n// Advanced App Widgets\r\nexport { Chart } from \"./components/Chart/Chart\";\r\nexport type { ChartDataset, ChartType } from \"./components/Chart/Chart\";\r\nexport { ShoppingCart } from \"./components/ShoppingCart/ShoppingCart\";\r\nexport type { CartItem } from \"./components/ShoppingCart/ShoppingCart\";\r\nexport { RichTextEditor } from \"./components/RichTextEditor/RichTextEditor\";\r\nexport { CodeEditor } from \"./components/CodeEditor/CodeEditor\";\r\nexport { FileManager } from \"./components/FileManager/FileManager\";\r\nexport type { FileItem } from \"./components/FileManager/FileManager\";\r\nexport { EmailComposer } from \"./components/EmailComposer/EmailComposer\";\r\nexport { CalendarWithEvents } from \"./components/CalendarWithEvents/CalendarWithEvents\";\r\nexport type { CalendarEvent } from \"./components/CalendarWithEvents/CalendarWithEvents\";\r\nexport { GanttChart } from \"./components/GanttChart/GanttChart\";\r\nexport type { GanttTask } from \"./components/GanttChart/GanttChart\";\r\n\r\nexport { IconSelect } from \"./components/IconSelect/IconSelect\";\r\nexport type { IconSelectProps } from \"./components/IconSelect/IconSelect\";\r\nexport { ImageCrop } from \"./components/ImageCrop/ImageCrop\";\r\nexport type { ImageCropProps, ImageCropHandle, CropArea } from \"./components/ImageCrop/ImageCrop\";\r\n\r\nexport * from \"./validators\";\r\n\r\n\r","import { clsx, type ClassValue } from \"clsx\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return clsx(inputs)\r\n}\r\n","import React, { ButtonHTMLAttributes, forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: 'default' | 'filled' | 'unstyled';\r\n}\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className,\r\n label,\r\n error,\r\n description,\r\n required,\r\n leftIcon,\r\n rightIcon,\r\n size = 'md',\r\n variant = 'default',\r\n children,\r\n ...props \r\n }, ref) => {\r\n // Base styles\r\n const baseStyles = \"inline-flex items-center justify-center font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none\";\r\n \r\n // Size variants\r\n const sizeStyles = {\r\n sm: \"px-3 py-1.5 text-sm rounded-md\",\r\n md: \"px-4 py-2 text-sm rounded-md\",\r\n lg: \"px-6 py-3 text-base rounded-lg\"\r\n };\r\n \r\n // Style variants\r\n const variantStyles = {\r\n default: \"bg-white text-gray-900 border border-gray-300 hover:bg-gray-50 focus:ring-blue-500\",\r\n filled: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\r\n unstyled: \"\"\r\n };\r\n \r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n variantStyles[variant],\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n aria-invalid={!!error}\r\n aria-describedby={description ? `${props.id}-description` : undefined}\r\n {...props}\r\n >\r\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\r\n {label || children}\r\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\r\n {required && <span className=\"ml-1 text-red-500\">*</span>}\r\n {error && <span className=\"sr-only\">{error}</span>}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";","import React, { forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport { AlertCircle } from \"lucide-react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n description,\r\n required,\r\n placeholder,\r\n leftIcon,\r\n rightIcon,\r\n size = \"md\",\r\n className,\r\n disabled,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).slice(2, 9)}`;\r\n\r\n const sizeClasses = {\r\n sm: \"h-9 text-sm px-3\",\r\n md: \"h-10 text-sm px-3.5\",\r\n lg: \"h-12 text-base px-4\",\r\n }[size];\r\n\r\n return (\r\n <div className=\"w-full space-y-1.5\">\r\n {/* Label */}\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-sm font-medium\",\r\n disabled ? \"text-gray-400\" : \"text-gray-700\"\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-1\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Description */}\r\n {description && !error && (\r\n <p className=\"text-xs text-gray-500\">{description}</p>\r\n )}\r\n\r\n {/* Input wrapper */}\r\n <div className=\"relative\">\r\n {/* Left Icon */}\r\n {leftIcon && (\r\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n aria-invalid={!!error}\r\n className={cn(\r\n \"w-full rounded-lg border border-gray-300 bg-white\",\r\n \"transition-all duration-150 outline-none\",\r\n \"placeholder:text-gray-400 placeholder:text-sm\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\r\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\r\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\r\n leftIcon && \"pl-10\",\r\n rightIcon && \"pr-10\",\r\n sizeClasses,\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {/* Right Icon */}\r\n {rightIcon && (\r\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {rightIcon}\r\n </span>\r\n )}\r\n </div>\r\n \r\n {error && (\r\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\r\n <AlertCircle className=\"w-3.5 h-3.5\" />\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";","import React, { useState, useMemo } from 'react';\nimport { \n Search, ChevronDown, ChevronUp, FileText, \n Download, FileSpreadsheet, Eye, Edit, Trash2,\n FileJson, FileCode\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport * as XLSX from 'xlsx';\n\nexport interface ColumnDef<T> {\n key: string;\n header: string;\n render?: (item: T) => React.ReactNode;\n sortable?: boolean;\n searchable?: boolean;\n}\n\nexport interface TableProps<T> {\n data: T[];\n columns: ColumnDef<T>[];\n onSee?: (item: T) => void;\n onEdit?: (item: T) => void;\n onDelete?: (item: T) => void;\n className?: string;\n exportFileName?: string;\n}\n\nexport function Table<T extends Record<string, any>>({ \n data, \n columns, \n onSee, \n onEdit, \n onDelete,\n className,\n exportFileName = \"export_data\"\n}: TableProps<T>) {\n const [sortConfig, setSortConfig] = useState<{ key: string; direction: 'asc' | 'desc' } | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [columnSearch, setColumnSearch] = useState<Record<string, string>>({});\n const [selectedRows, setSelectedRows] = useState<Set<number>>(new Set());\n\n // Handle Sort\n const handleSort = (key: string) => {\n let direction: 'asc' | 'desc' = 'asc';\n if (sortConfig && sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n setSortConfig({ key, direction });\n };\n\n // Filter and Sort Data\n const processedData = useMemo(() => {\n let result = [...data];\n\n // Global Search\n if (searchQuery) {\n const lowerQuery = searchQuery.toLowerCase();\n result = result.filter(item => \n columns.some(col => {\n const val = item[col.key];\n return val !== null && val !== undefined && String(val).toLowerCase().includes(lowerQuery);\n })\n );\n }\n\n // Column Search\n Object.entries(columnSearch).forEach(([key, query]) => {\n if (query) {\n const lowerQuery = query.toLowerCase();\n result = result.filter(item => {\n const val = item[key];\n return val !== null && val !== undefined && String(val).toLowerCase().includes(lowerQuery);\n });\n }\n });\n\n // Sort\n if (sortConfig) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue < bValue) return sortConfig.direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return sortConfig.direction === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n return result;\n }, [data, columns, sortConfig, searchQuery, columnSearch]);\n\n const toggleSelectAll = () => {\n if (selectedRows.size === processedData.length) {\n setSelectedRows(new Set());\n } else {\n setSelectedRows(new Set(processedData.map((_, index) => index)));\n }\n };\n\n const toggleSelectRow = (index: number) => {\n const newSelected = new Set(selectedRows);\n if (newSelected.has(index)) {\n newSelected.delete(index);\n } else {\n newSelected.add(index);\n }\n setSelectedRows(newSelected);\n };\n\n // Exports\n const getExportData = () => {\n return processedData.map(item => {\n const row: Record<string, any> = {};\n columns.forEach(col => {\n row[col.header] = item[col.key];\n });\n return row;\n });\n };\n\n const exportCSV = () => {\n const exportData = getExportData();\n if (exportData.length === 0) return;\n \n const headers = Object.keys(exportData[0]);\n const csvContent = [\n headers.join(','),\n ...exportData.map(row => headers.map(header => `\"${String(row[header]).replace(/\"/g, '\"\"')}\"`).join(','))\n ].join('\\n');\n \n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.csv`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n const exportExcel = () => {\n const exportData = getExportData();\n const worksheet = XLSX.utils.json_to_sheet(exportData);\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Data\");\n XLSX.writeFile(workbook, `${exportFileName}.xlsx`);\n };\n\n const exportPDF = () => {\n const doc = new jsPDF();\n const exportData = getExportData();\n if (exportData.length === 0) return;\n \n const headers = Object.keys(exportData[0]);\n const body = exportData.map(row => headers.map(header => String(row[header])));\n \n autoTable(doc, {\n head: [headers],\n body: body,\n theme: 'grid',\n styles: { fontSize: 8 },\n headStyles: { fillColor: [59, 130, 246] }\n });\n \n doc.save(`${exportFileName}.pdf`);\n };\n\n const exportJSON = () => {\n const exportData = getExportData();\n const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.json`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n const exportXML = () => {\n const exportData = getExportData();\n let xml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<Root>\\n`;\n exportData.forEach(row => {\n xml += ` <Row>\\n`;\n Object.entries(row).forEach(([key, value]) => {\n const safeKey = key.replace(/[^a-zA-Z0-9]/g, '_');\n xml += ` <${safeKey}>${String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')}</${safeKey}>\\n`;\n });\n xml += ` </Row>\\n`;\n });\n xml += `</Root>`;\n \n const blob = new Blob([xml], { type: 'application/xml' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${exportFileName}.xml`;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className={cn(\"w-full bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden\", className)}>\n {/* Toolbar */}\n <div className=\"p-4 border-b border-gray-200 flex flex-wrap gap-4 items-center justify-between bg-gray-50/50\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input \n type=\"text\" \n placeholder=\"Search all columns...\" \n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9 pr-4 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none w-64 transition-all\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <ExportButton icon={<FileText className=\"w-4 h-4\" />} label=\"CSV\" onClick={exportCSV} />\n <ExportButton icon={<FileSpreadsheet className=\"w-4 h-4\" />} label=\"Excel\" onClick={exportExcel} />\n <ExportButton icon={<Download className=\"w-4 h-4\" />} label=\"PDF\" onClick={exportPDF} />\n <ExportButton icon={<FileJson className=\"w-4 h-4\" />} label=\"JSON\" onClick={exportJSON} />\n <ExportButton icon={<FileCode className=\"w-4 h-4\" />} label=\"XML\" onClick={exportXML} />\n </div>\n </div>\n\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left text-sm whitespace-nowrap\">\n <thead className=\"bg-gray-50 border-b border-gray-200 text-gray-600 font-medium\">\n <tr>\n <th className=\"px-4 py-3 w-10\">\n <input \n type=\"checkbox\" \n checked={processedData.length > 0 && selectedRows.size === processedData.length}\n onChange={toggleSelectAll}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n </th>\n {columns.map((col) => (\n <th key={col.key} className=\"px-4 py-3\">\n <div className=\"flex flex-col gap-2\">\n <div \n className={cn(\"flex items-center gap-1\", col.sortable && \"cursor-pointer hover:text-gray-900 select-none\")}\n onClick={() => col.sortable && handleSort(col.key)}\n >\n {col.header}\n {col.sortable && (\n <div className=\"flex flex-col text-gray-400\">\n <ChevronUp className={cn(\"w-3 h-3 -mb-1\", sortConfig?.key === col.key && sortConfig.direction === 'asc' && \"text-blue-600\")} />\n <ChevronDown className={cn(\"w-3 h-3\", sortConfig?.key === col.key && sortConfig.direction === 'desc' && \"text-blue-600\")} />\n </div>\n )}\n </div>\n {col.searchable && (\n <input \n type=\"text\"\n placeholder=\"Filter...\"\n value={columnSearch[col.key] || ''}\n onChange={(e) => setColumnSearch(prev => ({ ...prev, [col.key]: e.target.value }))}\n className=\"px-2 py-1 text-xs border border-gray-300 rounded focus:ring-1 focus:ring-blue-500 outline-none w-full font-normal\"\n />\n )}\n </div>\n </th>\n ))}\n {(onSee || onEdit || onDelete) && (\n <th className=\"px-4 py-3 text-right\">Actions</th>\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 bg-white\">\n {processedData.length === 0 ? (\n <tr>\n <td colSpan={columns.length + 2} className=\"px-4 py-12 text-center text-gray-500\">\n No data found\n </td>\n </tr>\n ) : (\n processedData.map((row, index) => (\n <tr \n key={index} \n className={cn(\n \"hover:bg-gray-50 transition-colors\",\n selectedRows.has(index) && \"bg-blue-50/50 hover:bg-blue-50\"\n )}\n >\n <td className=\"px-4 py-3\">\n <input \n type=\"checkbox\" \n checked={selectedRows.has(index)}\n onChange={() => toggleSelectRow(index)}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n </td>\n {columns.map((col) => (\n <td key={col.key} className=\"px-4 py-3 text-gray-700\">\n {col.render ? col.render(row) : row[col.key]}\n </td>\n ))}\n {(onSee || onEdit || onDelete) && (\n <td className=\"px-4 py-3 text-right\">\n <div className=\"flex items-center justify-end gap-2\">\n {onSee && (\n <button onClick={() => onSee(row)} className=\"p-1.5 text-gray-400 hover:text-blue-600 hover:bg-blue-50 rounded-md transition-colors\" title=\"View\">\n <Eye className=\"w-4 h-4\" />\n </button>\n )}\n {onEdit && (\n <button onClick={() => onEdit(row)} className=\"p-1.5 text-gray-400 hover:text-emerald-600 hover:bg-emerald-50 rounded-md transition-colors\" title=\"Edit\">\n <Edit className=\"w-4 h-4\" />\n </button>\n )}\n {onDelete && (\n <button onClick={() => onDelete(row)} className=\"p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-md transition-colors\" title=\"Delete\">\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n \n {/* Footer Info */}\n <div className=\"p-4 border-t border-gray-200 bg-gray-50/50 text-sm text-gray-500 flex justify-between\">\n <div>\n Showing {processedData.length} {processedData.length === 1 ? 'entry' : 'entries'}\n </div>\n {selectedRows.size > 0 && (\n <div className=\"font-medium text-blue-600\">\n {selectedRows.size} {selectedRows.size === 1 ? 'row' : 'rows'} selected\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// Helper Export Button Component\nfunction ExportButton({ icon, label, onClick }: { icon: React.ReactNode, label: string, onClick: () => void }) {\n return (\n <button \n onClick={onClick}\n className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-sm\"\n >\n {icon}\n {label}\n </button>\n );\n}\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, description, error, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"checkbox\"\n className={cn(\n \"w-4 h-4 text-blue-600 bg-white border-gray-300 rounded focus:ring-blue-500 focus:ring-2 transition-all\",\n \"disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed\",\n error && \"border-red-500 text-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n aria-describedby={description ? `${inputId}-description` : undefined}\n />\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col pt-0.5\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p id={`${inputId}-description`} className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\" id={`${inputId}-error`}>{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, description, error, id, ...props }, ref) => {\n const inputId = id || `radio-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"radio\"\n className={cn(\n \"w-4 h-4 text-blue-600 bg-white border-gray-300 focus:ring-blue-500 focus:ring-2 transition-all\",\n \"disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed\",\n error && \"border-red-500 text-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n aria-describedby={description ? `${inputId}-description` : undefined}\n />\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col pt-0.5\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p id={`${inputId}-description`} className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\" id={`${inputId}-error`}>{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ className, label, description, error, size = 'md', id, ...props }, ref) => {\n const inputId = id || `toggle-${Math.random().toString(36).slice(2, 9)}`;\n\n const sizeClasses = {\n sm: { switch: 'w-8 h-4', thumb: 'h-3 w-3 translate-x-4' },\n md: { switch: 'w-10 h-5', thumb: 'h-4 w-4 translate-x-5' },\n lg: { switch: 'w-12 h-6', thumb: 'h-5 w-5 translate-x-6' },\n };\n\n return (\n <div className=\"relative flex items-start\">\n <div className=\"flex items-center h-5\">\n <label htmlFor={inputId} className=\"flex items-center cursor-pointer relative\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type=\"checkbox\"\n className=\"sr-only peer\"\n aria-invalid={!!error}\n />\n <div className={cn(\n \"bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 transition-all\",\n \"peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\",\n error && \"bg-red-200 peer-checked:bg-red-600 peer-focus:ring-red-500\",\n sizeClasses[size].switch,\n className\n )}></div>\n <div className={cn(\n \"absolute left-0.5 top-[2px] bg-white border-gray-300 border rounded-full transition-all peer-checked:border-white\",\n `peer-checked:${sizeClasses[size].thumb}`,\n size === 'sm' && \"h-3 w-3\",\n size === 'md' && \"h-4 w-4\",\n size === 'lg' && \"h-5 w-5\"\n )}></div>\n </label>\n </div>\n {(label || description || error) && (\n <div className=\"ml-3 text-sm flex flex-col\">\n {label && (\n <label htmlFor={inputId} className={cn(\"font-medium\", props.disabled ? \"text-gray-400\" : \"text-gray-700 cursor-pointer\")}>\n {label}\n </label>\n )}\n {description && !error && (\n <p className=\"text-gray-500 text-xs mt-0.5\">{description}</p>\n )}\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","import React, { forwardRef } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const textareaId = id || `textarea-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={textareaId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <textarea\n ref={ref}\n id={textareaId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-sm\",\n \"transition-all duration-150 outline-none resize-y min-h-[80px]\",\n \"placeholder:text-gray-400 placeholder:text-sm\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n className\n )}\n {...props}\n />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode;\n description?: string;\n error?: string;\n showValue?: boolean;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n ({ className, label, description, error, showValue = true, id, value, defaultValue, min = 0, max = 100, ...props }, ref) => {\n const inputId = id || `slider-${Math.random().toString(36).slice(2, 9)}`;\n const displayValue = value ?? defaultValue ?? min;\n\n return (\n <div className=\"w-full space-y-2\">\n {(label || showValue) && (\n <div className=\"flex justify-between items-center\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium\",\n props.disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n </label>\n )}\n {showValue && (\n <span className={cn(\"text-xs font-semibold px-2 py-1 rounded bg-gray-100\", props.disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {displayValue}\n </span>\n )}\n </div>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative flex items-center h-5\">\n <input\n {...props}\n type=\"range\"\n id={inputId}\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n className={cn(\n \"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500\",\n \"accent-blue-600\",\n \"disabled:bg-gray-100 disabled:accent-gray-400 disabled:cursor-not-allowed\",\n error && \"accent-red-600 focus:ring-red-500\",\n className\n )}\n aria-invalid={!!error}\n />\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ColorPickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {\n label?: string;\n description?: string;\n error?: string;\n value?: string;\n onChange?: (color: string) => void;\n defaultValue?: string;\n}\n\nexport const ColorPicker = forwardRef<HTMLInputElement, ColorPickerProps>(\n ({ className, label, description, error, id, value, defaultValue = \"#000000\", onChange, disabled, ...props }, ref) => {\n const inputId = id || `color-${Math.random().toString(36).slice(2, 9)}`;\n const [internalColor, setInternalColor] = useState(defaultValue);\n \n const currentColor = value !== undefined ? value : internalColor;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newColor = e.target.value;\n if (value === undefined) setInternalColor(newColor);\n onChange?.(newColor);\n };\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n </label>\n )}\n \n <div className=\"flex items-center gap-3\">\n <div className=\"relative\">\n <div \n className={cn(\n \"w-10 h-10 rounded-lg border border-gray-300 shadow-sm overflow-hidden flex-shrink-0 relative\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n style={{ backgroundColor: currentColor }}\n >\n <input\n {...props}\n type=\"color\"\n id={inputId}\n ref={ref}\n value={currentColor}\n onChange={handleChange}\n disabled={disabled}\n className=\"opacity-0 absolute inset-0 w-full h-full cursor-pointer disabled:cursor-not-allowed\"\n aria-invalid={!!error}\n />\n </div>\n </div>\n <div className=\"relative flex-grow max-w-[120px]\">\n <input \n type=\"text\" \n value={currentColor.toUpperCase()}\n onChange={handleChange}\n disabled={disabled}\n className={cn(\n \"w-full border border-gray-300 rounded-md px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none uppercase font-mono\",\n disabled && \"bg-gray-100 text-gray-400 cursor-not-allowed\",\n error && \"border-red-500 focus:ring-red-500 focus:border-red-500\"\n )}\n />\n </div>\n </div>\n\n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n \n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nColorPicker.displayName = 'ColorPicker';\n","import React, { useState } from 'react';\nimport { Star } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface RatingProps {\n maxCount?: number;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n hoverable?: boolean;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n label?: string;\n error?: string;\n className?: string;\n}\n\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n ({ \n maxCount = 5, \n value, \n defaultValue = 0, \n onChange, \n hoverable = true, \n size = 'md', \n disabled = false,\n label,\n error,\n className,\n ...props \n }, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const displayValue = hoverValue !== null ? hoverValue : currentValue;\n\n const handleSelect = (idx: number) => {\n if (disabled) return;\n if (value === undefined) setInternalValue(idx);\n onChange?.(idx);\n };\n\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8'\n };\n\n return (\n <div className=\"space-y-1.5\" ref={ref} {...props}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n <div \n className={cn(\n \"flex items-center gap-1\", \n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className\n )}\n onMouseLeave={() => hoverable && !disabled && setHoverValue(null)}\n >\n {Array.from({ length: maxCount }).map((_, i) => {\n const index = i + 1;\n const isActive = index <= displayValue;\n \n return (\n <Star\n key={index}\n className={cn(\n \"transition-colors\",\n sizeClasses[size],\n isActive ? \"fill-amber-400 text-amber-400\" : \"fill-transparent text-gray-300\",\n !disabled && hoverable && \"hover:scale-110 transition-transform\"\n )}\n onClick={() => handleSelect(index)}\n onMouseEnter={() => hoverable && !disabled && setHoverValue(index)}\n />\n );\n })}\n </div>\n {error && <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>}\n </div>\n );\n }\n);\n\nRating.displayName = 'Rating';\n","import React, { useState, useRef, KeyboardEvent, ChangeEvent, ClipboardEvent } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface OTPInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n label?: string;\n error?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport const OTPInput = React.forwardRef<HTMLDivElement, OTPInputProps>(\n ({ \n length = 6, \n value = '', \n onChange, \n label, \n error, \n description,\n disabled = false,\n className,\n ...props \n }, ref) => {\n const defaultOtp = Array(length).fill('');\n // Safely parse initial value into array\n const initialOtp = value ? value.split('').slice(0, length).concat(Array(Math.max(0, length - value.length)).fill('')) : defaultOtp;\n \n const [otp, setOtp] = useState<string[]>(initialOtp);\n const inputRefs = useRef<React.RefObject<HTMLInputElement | null>[]>(\n Array(length).fill(0).map(() => React.createRef<HTMLInputElement>())\n );\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>, index: number) => {\n const { value } = e.target;\n if (disabled) return;\n \n const newOtp = [...otp];\n // Only allow 1 character (last typed)\n const val = value.slice(-1); \n \n if (!/^[0-9]*$/.test(val)) return; // Only numbers\n \n newOtp[index] = val;\n setOtp(newOtp);\n onChange?.(newOtp.join(''));\n\n // Move to next input\n if (val && index < length - 1) {\n inputRefs.current[index + 1].current?.focus();\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>, index: number) => {\n if (e.key === 'Backspace' && !otp[index] && index > 0) {\n // Move to previous input on backspace if current is empty\n inputRefs.current[index - 1].current?.focus();\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (disabled) return;\n \n const pastedData = e.clipboardData.getData('text').slice(0, length);\n if (!/^[0-9]+$/.test(pastedData)) return;\n\n const pastedArray = pastedData.split('');\n const newOtp = [...otp];\n \n pastedArray.forEach((char, i) => {\n if (i < length) newOtp[i] = char;\n });\n \n setOtp(newOtp);\n onChange?.(newOtp.join(''));\n \n // Focus the next empty input or the last one\n const focusIndex = Math.min(pastedArray.length, length - 1);\n inputRefs.current[focusIndex].current?.focus();\n };\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)} ref={ref} {...props}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"flex gap-2 items-center\">\n {otp.map((digit, index) => (\n <input\n key={index}\n ref={inputRefs.current[index]}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n disabled={disabled}\n onChange={(e) => handleChange(e, index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n onPaste={handlePaste}\n className={cn(\n \"w-10 h-12 text-center text-lg font-semibold rounded-lg border border-gray-300 bg-white shadow-sm\",\n \"transition-all duration-150 outline-none placeholder:text-gray-400\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\"\n )}\n aria-invalid={!!error}\n />\n ))}\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nOTPInput.displayName = 'OTPInput';\n","import React, { forwardRef, useState, useRef } from 'react';\nimport { UploadCloud, X, File as FileIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileUploadProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value'> {\n label?: string;\n description?: string;\n error?: string;\n onChange?: (files: File[]) => void;\n multiple?: boolean;\n maxFiles?: number;\n maxSize?: number; // bytes\n accept?: string;\n}\n\nexport const FileUpload = forwardRef<HTMLInputElement, FileUploadProps>(\n ({ \n className, \n label, \n description, \n error, \n multiple = false, \n maxFiles = 5,\n maxSize, \n accept,\n onChange,\n disabled,\n id, \n ...props \n }, ref) => {\n const inputId = id || `file-${Math.random().toString(36).slice(2, 9)}`;\n const [dragActive, setDragActive] = useState(false);\n const [files, setFiles] = useState<File[]>([]);\n const [localError, setLocalError] = useState<string | null>(null);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = (node: HTMLInputElement) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n\n const handleFiles = (newFiles: FileList | null) => {\n if (!newFiles) return;\n setLocalError(null);\n\n let processed = Array.from(newFiles);\n\n if (maxSize) {\n const invalid = processed.find(f => f.size > maxSize);\n if (invalid) {\n setLocalError(`File ${invalid.name} exceeds max size of ${maxSize / 1024 / 1024}MB`);\n return;\n }\n }\n\n if (!multiple && processed.length > 1) {\n processed = [processed[0]];\n }\n\n if (multiple && files.length + processed.length > maxFiles) {\n setLocalError(`Cannot upload more than ${maxFiles} files`);\n return;\n }\n\n const updated = multiple ? [...files, ...processed] : processed;\n setFiles(updated);\n onChange?.(updated);\n };\n\n const handleDrag = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n if (e.type === \"dragenter\" || e.type === \"dragover\") {\n setDragActive(true);\n } else if (e.type === \"dragleave\") {\n setDragActive(false);\n }\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n if (disabled) return;\n if (e.dataTransfer.files && e.dataTransfer.files[0]) {\n handleFiles(e.dataTransfer.files);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.target.files && e.target.files[0]) {\n handleFiles(e.target.files);\n }\n };\n\n const removeFile = (index: number) => {\n if (disabled) return;\n const updated = files.filter((_, i) => i !== index);\n setFiles(updated);\n onChange?.(updated);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const displayError = error || localError;\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n\n <div \n className={cn(\n \"relative w-full border-2 border-dashed rounded-xl p-6 flex flex-col items-center justify-center text-center transition-colors shadow-sm bg-white\",\n dragActive && \"border-blue-500 bg-blue-50/50\",\n !dragActive && !displayError && \"border-gray-300 hover:bg-gray-50\",\n displayError && \"border-red-500 bg-red-50/50\",\n disabled && \"opacity-50 cursor-not-allowed hover:bg-white\"\n )}\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <input\n {...props}\n ref={combinedRef}\n id={inputId}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n onChange={handleChange}\n className=\"hidden\"\n disabled={disabled}\n aria-invalid={!!displayError}\n />\n \n <div className=\"flex flex-col items-center gap-2 cursor-pointer\">\n <div className={cn(\"p-3 rounded-full\", dragActive ? \"bg-blue-100 text-blue-600\" : \"bg-gray-100 text-gray-500\")}>\n <UploadCloud className=\"w-6 h-6\" />\n </div>\n <div className=\"text-sm\">\n <span className=\"font-semibold text-blue-600\">Click to upload</span> or drag and drop\n </div>\n {(description || accept) && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {description || (accept ? `Accepted files: ${accept}` : \"Upload files here\")}\n </p>\n )}\n {multiple && <p className=\"text-xs text-gray-400\">Max files: {maxFiles}</p>}\n </div>\n </div>\n\n {displayError && (\n <p className=\"text-red-500 text-xs mt-0.5\">{displayError}</p>\n )}\n\n {files.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {files.map((file, i) => (\n <div key={`${file.name}-${i}`} className=\"flex items-center justify-between p-2.5 bg-gray-50 border border-gray-200 rounded-lg text-sm\">\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <FileIcon className=\"w-4 h-4 text-gray-400 flex-shrink-0\" />\n <span className=\"truncate text-gray-700\">{file.name}</span>\n <span className=\"text-xs text-gray-400 flex-shrink-0\">\n ({(file.size / 1024).toFixed(1)} KB)\n </span>\n </div>\n {!disabled && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); removeFile(i); }}\n className=\"p-1 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nFileUpload.displayName = 'FileUpload';\n","import React, { forwardRef } from 'react';\nimport { Calendar, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DatePickerProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const inputId = id || `date-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <input\n {...props}\n type=\"date\"\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none text-gray-700\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n \"[&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-0 [&::-webkit-calendar-picker-indicator]:w-10 [&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:cursor-pointer\",\n className\n )}\n />\n <Calendar className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none\" />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n","import React, { forwardRef } from 'react';\nimport { Clock, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TimePickerProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n}\n\nexport const TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n ({ className, label, error, description, required, id, disabled, ...props }, ref) => {\n const inputId = id || `time-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <input\n {...props}\n type=\"time\"\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none text-gray-700\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n \"[&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-0 [&::-webkit-calendar-picker-indicator]:w-10 [&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:cursor-pointer\",\n className\n )}\n />\n <Clock className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none\" />\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n","import React, { forwardRef } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface InputGroupProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n description?: string;\n required?: boolean;\n addonBefore?: React.ReactNode;\n addonAfter?: React.ReactNode;\n}\n\nexport const InputGroup = forwardRef<HTMLInputElement, InputGroupProps>(\n ({ className, label, error, description, required, addonBefore, addonAfter, id, disabled, ...props }, ref) => {\n const inputId = id || `input-group-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"w-full space-y-1.5\">\n {label && (\n <label \n htmlFor={inputId} \n className={cn(\n \"text-sm font-medium block\",\n disabled ? \"text-gray-400\" : \"text-gray-700\"\n )}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"flex rounded-lg shadow-sm\">\n {addonBefore && (\n <span className=\"inline-flex items-center px-3 rounded-l-lg border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {addonBefore}\n </span>\n )}\n <div className=\"relative flex-grow flex items-center\">\n <input\n {...props}\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={!!error}\n className={cn(\n \"w-full h-10 border border-gray-300 bg-white px-3.5 py-2 text-sm\",\n \"transition-all duration-150 outline-none\",\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100 z-10\",\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\n !addonBefore && \"rounded-l-lg\",\n !addonAfter && \"rounded-r-lg\",\n className\n )}\n />\n </div>\n {addonAfter && (\n <span className=\"inline-flex items-center px-3 rounded-r-lg border border-l-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {addonAfter}\n </span>\n )}\n </div>\n\n {error && (\n <p className=\"flex items-center gap-1 text-xs text-red-500 mt-0.5\">\n <AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nInputGroup.displayName = 'InputGroup';\n","import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport { ChevronDown, X, Check, Search } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string | string[];\n onChange?: (value: any) => void;\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: string;\n label?: string;\n error?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n ({ \n options = [], \n value, \n onChange, \n multiple = false, \n searchable = false, \n placeholder = 'Select an option', \n label, \n error, \n description,\n disabled = false,\n className\n }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\n\n // Initial state based on whether it's controlled (value) or uncontrolled\n const [internalValue, setInternalValue] = useState<string | string[]>(multiple ? [] : '');\n const currentValue = value !== undefined ? value : internalValue;\n\n // Handle clicking outside to close\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option: SelectOption) => {\n if (option.disabled || disabled) return;\n\n if (multiple) {\n let currentArray = Array.isArray(currentValue) ? currentValue : [];\n let newArray;\n if (currentArray.includes(option.value)) {\n newArray = currentArray.filter(v => v !== option.value);\n } else {\n newArray = [...currentArray, option.value];\n }\n if (value === undefined) setInternalValue(newArray);\n onChange?.(newArray);\n } else {\n if (value === undefined) setInternalValue(option.value);\n onChange?.(option.value);\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n const handleRemove = (e: React.MouseEvent, valToRemove: string) => {\n e.stopPropagation();\n if (disabled) return;\n if (multiple && Array.isArray(currentValue)) {\n const newArray = currentValue.filter(v => v !== valToRemove);\n if (value === undefined) setInternalValue(newArray);\n onChange?.(newArray);\n }\n };\n\n const filteredOptions = searchable \n ? options.filter(opt => opt.label.toLowerCase().includes(searchQuery.toLowerCase()))\n : options;\n\n const renderDisplayValue = () => {\n if (multiple && Array.isArray(currentValue)) {\n if (currentValue.length === 0) return <span className=\"text-gray-400\">{placeholder}</span>;\n return (\n <div className=\"flex flex-wrap gap-1\">\n {currentValue.map(val => {\n const opt = options.find(o => o.value === val);\n if (!opt) return null;\n return (\n <span key={val} className=\"flex items-center gap-1 bg-blue-100 text-blue-700 px-2 py-0.5 rounded text-xs font-medium\">\n {opt.label}\n <button type=\"button\" onClick={(e) => handleRemove(e, val)} className=\"hover:text-blue-900 focus:outline-none\">\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n } else {\n const opt = options.find(o => o.value === currentValue);\n if (!opt) return <span className=\"text-gray-400\">{placeholder}</span>;\n return <span className=\"text-gray-700 truncate\">{opt.label}</span>;\n }\n };\n\n return (\n <div className={cn(\"w-full space-y-1.5\", className)} ref={containerRef}>\n {label && (\n <label className={cn(\"text-sm font-medium block\", disabled ? \"text-gray-400\" : \"text-gray-700\")}>\n {label}\n </label>\n )}\n \n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div \n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n \"w-full min-h-[40px] rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm flex items-center justify-between cursor-pointer\",\n \"transition-all duration-150 outline-none shadow-sm\",\n disabled && \"bg-gray-100 text-gray-400 cursor-not-allowed\",\n error && \"border-red-500 ring-1 ring-red-500\",\n isOpen && !error && \"border-blue-500 ring-2 ring-blue-100\"\n )}\n >\n <div className=\"flex-grow pr-2\">\n {renderDisplayValue()}\n </div>\n <ChevronDown className={cn(\"w-4 h-4 text-gray-400 flex-shrink-0 transition-transform\", isOpen && \"rotate-180\")} />\n </div>\n\n {isOpen && (\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-lg max-h-60 overflow-y-auto animate-in fade-in slide-in-from-top-1 py-1\">\n {searchable && (\n <div className=\"sticky top-0 bg-white px-2 pb-2 pt-1 border-b border-gray-100\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input \n type=\"text\" \n placeholder=\"Search...\" \n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border-none bg-gray-50 rounded-md focus:outline-none focus:ring-1 focus:ring-blue-500\"\n />\n </div>\n </div>\n )}\n \n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-gray-500 text-center\">No options found</div>\n ) : (\n filteredOptions.map((opt) => {\n const isSelected = multiple \n ? Array.isArray(currentValue) && currentValue.includes(opt.value)\n : currentValue === opt.value;\n\n return (\n <div \n key={opt.value}\n onClick={(e) => {\n e.stopPropagation();\n handleSelect(opt);\n }}\n className={cn(\n \"px-3 py-2 text-sm flex items-center justify-between cursor-pointer transition-colors\",\n opt.disabled ? \"text-gray-300 cursor-not-allowed bg-gray-50\" : \"text-gray-700 hover:bg-gray-100\",\n isSelected && \"bg-blue-50 text-blue-700\"\n )}\n >\n <span className=\"truncate\">{opt.label}</span>\n {isSelected && <Check className=\"w-4 h-4 text-blue-600 flex-shrink-0\" />}\n </div>\n );\n })\n )}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"text-red-500 text-xs mt-0.5\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = 'Select';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport const Card = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border border-gray-200 bg-white text-gray-950 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-gray-500\", className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n ordered?: boolean;\n divided?: boolean;\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(\n ({ className, ordered = false, divided = false, ...props }, ref) => {\n const Component = ordered ? 'ol' : 'ul';\n \n return (\n <Component\n ref={ref as any}\n className={cn(\n \"flex flex-col text-sm text-gray-700 w-full\",\n ordered ? \"list-decimal pl-5\" : \"list-none\",\n divided && \"divide-y divide-gray-200\",\n className\n )}\n {...props}\n />\n );\n }\n);\nList.displayName = \"List\";\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n ({ className, children, icon, action, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn(\n \"flex items-center justify-between py-3 px-4\",\n \"hover:bg-gray-50 transition-colors\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n {icon && <span className=\"flex-shrink-0 text-gray-400\">{icon}</span>}\n <span>{children}</span>\n </div>\n {action && <div className=\"flex-shrink-0 ml-4\">{action}</div>}\n </li>\n );\n }\n);\nListItem.displayName = \"ListItem\";\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n initials?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n status?: 'online' | 'offline' | 'busy' | 'away';\n indicatorPosition?: 'top-right' | 'bottom-right';\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, src, alt, initials, size = 'md', status, indicatorPosition = 'bottom-right', ...props }, ref) => {\n const sizeClasses = {\n sm: 'w-8 h-8 text-xs',\n md: 'w-10 h-10 text-sm',\n lg: 'w-12 h-12 text-base',\n xl: 'w-16 h-16 text-lg',\n };\n\n const statusColors = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n busy: 'bg-red-500',\n away: 'bg-amber-500',\n };\n\n const indicatorPosClasses = {\n 'top-right': 'top-0 right-0 -translate-y-1/4 translate-x-1/4',\n 'bottom-right': 'bottom-0 right-0 translate-y-1/4 translate-x-1/4',\n };\n\n const indicatorSizeClasses = {\n sm: 'w-2.5 h-2.5 border-2',\n md: 'w-3 h-3 border-2',\n lg: 'w-3.5 h-3.5 border-[2.5px]',\n xl: 'w-4 h-4 border-3',\n };\n\n const displayInitials = initials \n ? initials.substring(0, 2).toUpperCase() \n : alt \n ? alt.substring(0, 2).toUpperCase() \n : \"?\";\n\n return (\n <div \n ref={ref} \n className={cn(\"relative inline-block\", className)} \n {...props}\n >\n <div className={cn(\n \"rounded-full overflow-hidden flex items-center justify-center bg-gray-200 text-gray-700 font-medium\",\n !src && \"border border-gray-300\",\n sizeClasses[size]\n )}>\n {src ? (\n <img src={src} alt={alt || \"Avatar\"} className=\"w-full h-full object-cover\" />\n ) : (\n <span>{displayInitials}</span>\n )}\n </div>\n \n {status && (\n <span className={cn(\n \"absolute rounded-full border-white\",\n statusColors[status],\n indicatorPosClasses[indicatorPosition],\n indicatorSizeClasses[size]\n )} \n aria-label={`Status: ${status}`}\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', size = 'md', children, ...props }, ref) => {\n \n const variantClasses = {\n default: 'bg-gray-100 text-gray-800',\n primary: 'bg-blue-100 text-blue-800',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-amber-100 text-amber-800',\n error: 'bg-red-100 text-red-800',\n outline: 'bg-transparent text-gray-800 border-gray-300 border-[1.5px]'\n };\n\n const sizeClasses = {\n sm: 'px-1.5 py-0 text-[10px]',\n md: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm'\n };\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flexitems-center justify-center font-medium rounded-full\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n","import React, { forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.HTMLAttributes<HTMLDivElement> {\n label: React.ReactNode;\n onRemove?: () => void;\n avatar?: React.ReactNode;\n icon?: React.ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'outline';\n disabled?: boolean;\n}\n\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(\n ({ className, label, onRemove, avatar, icon, variant = 'default', disabled = false, ...props }, ref) => {\n \n const variantClasses = {\n default: 'bg-gray-100 text-gray-800 border-gray-200',\n primary: 'bg-blue-100 text-blue-800 border-blue-200',\n success: 'bg-green-100 text-green-800 border-green-200',\n warning: 'bg-amber-100 text-amber-800 border-amber-200',\n error: 'bg-red-100 text-red-800 border-red-200',\n outline: 'bg-transparent text-gray-800 border-gray-300'\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"inline-flex items-center h-8 rounded-full border text-sm transition-colors\",\n variantClasses[variant],\n disabled && \"opacity-50 cursor-not-allowed\",\n (avatar || icon) ? \"pl-1 pr-3\" : \"px-3\",\n className\n )}\n {...props}\n >\n {avatar && (\n <div className=\"mr-2 w-6 h-6 rounded-full overflow-hidden flex items-center justify-center bg-white/50\">\n {avatar}\n </div>\n )}\n {!avatar && icon && <span className=\"mr-2 opacity-70\">{icon}</span>}\n \n <span className=\"truncate max-w-[200px] leading-none py-1\">{label}</span>\n \n {onRemove && (\n <button\n type=\"button\"\n onClick={!disabled ? onRemove : undefined}\n disabled={disabled}\n className={cn(\n \"ml-2 flex items-center justify-center -mr-1 w-4 h-4 rounded-full hover:bg-black/10 focus:outline-none focus:ring-2 focus:ring-offset-1 transition-colors\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nChip.displayName = 'Chip';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, title, description, icon, action, ...props }, ref) => {\n return (\n <div \n ref={ref} \n className={cn(\n \"flex flex-col items-center justify-center p-8 text-center bg-gray-50 border border-dashed border-gray-300 rounded-xl\",\n className\n )} \n {...props}\n >\n {icon && (\n <div className=\"mb-4 text-gray-400 p-4 bg-white rounded-full shadow-sm ring-1 ring-gray-100\">\n {icon}\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-gray-900 mb-1\">{title}</h3>\n {description && (\n <p className=\"text-sm text-gray-500 max-w-sm mb-6\">{description}</p>\n )}\n {action && (\n <div>{action}</div>\n )}\n </div>\n );\n }\n);\n\nEmptyState.displayName = 'EmptyState';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n content: ReactNode;\n children: ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n delay?: number;\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n ({ className, content, children, position = 'top', delay = 200, ...props }, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n\n const showTooltip = () => {\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const positionClasses = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n };\n\n return (\n <div \n ref={ref}\n className=\"relative inline-block w-fit\"\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n {...props}\n >\n {children}\n {isVisible && (\n <div \n className={cn(\n \"absolute z-50 px-3 py-1.5 text-xs text-white bg-gray-900 rounded-md shadow-sm whitespace-nowrap animate-in fade-in zoom-in-95 duration-200 pointer-events-none\",\n positionClasses[position],\n className\n )}\n role=\"tooltip\"\n >\n {content}\n </div>\n )}\n </div>\n );\n }\n);\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n trigger: React.ReactNode;\n content: React.ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n ({ className, trigger, content, position = 'bottom', align = 'center', ...props }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Close when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n \n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n let positionClasses = '';\n if (position === 'bottom') {\n positionClasses = 'top-full mt-2';\n if (align === 'center') positionClasses += ' left-1/2 -translate-x-1/2';\n if (align === 'start') positionClasses += ' left-0';\n if (align === 'end') positionClasses += ' right-0';\n } else if (position === 'top') {\n positionClasses = 'bottom-full mb-2';\n if (align === 'center') positionClasses += ' left-1/2 -translate-x-1/2';\n if (align === 'start') positionClasses += ' left-0';\n if (align === 'end') positionClasses += ' right-0';\n } else if (position === 'right') {\n positionClasses = 'left-full ml-2';\n if (align === 'center') positionClasses += ' top-1/2 -translate-y-1/2';\n if (align === 'start') positionClasses += ' top-0';\n if (align === 'end') positionClasses += ' bottom-0';\n } else if (position === 'left') {\n positionClasses = 'right-full mr-2';\n if (align === 'center') positionClasses += ' top-1/2 -translate-y-1/2';\n if (align === 'start') positionClasses += ' top-0';\n if (align === 'end') positionClasses += ' bottom-0';\n }\n\n return (\n <div \n ref={containerRef}\n className=\"relative inline-block\"\n >\n <div \n onClick={() => setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n \n {isOpen && (\n <div \n ref={ref}\n className={cn(\n \"absolute z-50 w-72 rounded-md border border-gray-200 bg-white p-4 text-gray-950 shadow-md\",\n \"animate-in fade-in zoom-in-95 duration-200\",\n positionClasses,\n className\n )}\n {...props}\n >\n {content}\n </div>\n )}\n </div>\n );\n }\n);\n\nPopover.displayName = 'Popover';\n","import React, { useEffect, forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DialogProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n hideCloseButton?: boolean;\n}\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n ({ className, open, onOpenChange, title, description, children, footer, hideCloseButton = false, ...props }, ref) => {\n \n // Prevent scrolling when dialog is open\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onOpenChange(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Overlay */}\n <div \n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm animate-in fade-in duration-200\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n \n {/* Content */}\n <div\n ref={ref}\n className={cn(\n \"relative z-50 w-full max-w-lg mx-4 gap-4 border border-gray-200 bg-white p-6 shadow-lg sm:rounded-lg\",\n \"animate-in fade-in zoom-in-95 slide-in-from-top-[48%] duration-200\",\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n {...props}\n >\n {!hideCloseButton && (\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-950 focus:ring-offset-2\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n )}\n\n <div className=\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\">\n {title && (\n <h2 className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-gray-500\">\n {description}\n </p>\n )}\n </div>\n\n <div>\n {children}\n </div>\n\n {footer && (\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nDialog.displayName = 'Dialog';\n","import React, { useEffect, forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface DrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n direction?: 'left' | 'right' | 'top' | 'bottom';\n title?: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n ({ className, open, onOpenChange, direction = 'right', title, description, children, footer, ...props }, ref) => {\n \n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onOpenChange(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n const directionClasses = {\n right: \"inset-y-0 right-0 h-full w-3/4 sm:max-w-sm border-l animate-in slide-in-from-right\",\n left: \"inset-y-0 left-0 h-full w-3/4 sm:max-w-sm border-r animate-in slide-in-from-left\",\n top: \"inset-x-0 top-0 w-full h-auto border-b animate-in slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 w-full h-auto border-t animate-in slide-in-from-bottom\",\n };\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div \n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm animate-in fade-in duration-200\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n \n <div\n ref={ref}\n className={cn(\n \"fixed z-50 flex flex-col bg-white p-6 shadow-lg duration-300\",\n directionClasses[direction],\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n {...props}\n >\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-950 focus:ring-offset-2\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n\n {(title || description) && (\n <div className=\"flex flex-col space-y-1.5 text-center sm:text-left mb-6 pr-6\">\n {title && <h2 className=\"text-lg font-semibold text-gray-950\">{title}</h2>}\n {description && <p className=\"text-sm text-gray-500\">{description}</p>}\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto min-h-0 py-2\">\n {children}\n </div>\n\n {footer && (\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6 pt-4 border-t border-gray-100\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nDrawer.displayName = 'Drawer';\n","import React, { forwardRef, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItemProps {\n id: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: AccordionItemProps[];\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n value?: string | string[];\n onChange?: (value: string | string[]) => void;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, items, type = 'single', defaultValue, value, onChange, ...props }, ref) => {\n \n // Internal state if uncontrolled\n const [internalState, setInternalState] = useState<string | string[]>(\n defaultValue !== undefined ? defaultValue : (type === 'multiple' ? [] : '')\n );\n\n const activeState = value !== undefined ? value : internalState;\n\n const handleToggle = (id: string) => {\n if (type === 'single') {\n const newValue = activeState === id ? '' : id;\n if (value === undefined) setInternalState(newValue);\n onChange?.(newValue);\n } else {\n const activeArray = Array.isArray(activeState) ? activeState : [];\n const newValue = activeArray.includes(id) \n ? activeArray.filter(i => i !== id) \n : [...activeArray, id];\n \n if (value === undefined) setInternalState(newValue);\n onChange?.(newValue);\n }\n };\n\n const isItemExpanded = (id: string) => {\n if (type === 'single') return activeState === id;\n if (Array.isArray(activeState)) return activeState.includes(id);\n return false;\n };\n\n return (\n <div ref={ref} className={cn(\"w-full border-t border-gray-200\", className)} {...props}>\n {items.map((item) => {\n const isExpanded = isItemExpanded(item.id);\n \n return (\n <div key={item.id} className=\"border-b border-gray-200\">\n <button\n type=\"button\"\n disabled={item.disabled}\n onClick={() => handleToggle(item.id)}\n className={cn(\n \"flex w-full items-center justify-between py-4 font-medium transition-all hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-inset\",\n item.disabled ? \"text-gray-400 cursor-not-allowed\" : \"text-gray-700 hover:bg-gray-50/50\"\n )}\n aria-expanded={isExpanded}\n >\n <span>{item.title}</span>\n <ChevronDown \n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-200 text-gray-500\",\n isExpanded && \"rotate-180\"\n )} \n />\n </button>\n \n <div \n className={cn(\n \"overflow-hidden text-sm text-gray-600 transition-all duration-300 ease-in-out\",\n isExpanded ? \"max-h-96 opacity-100\" : \"max-h-0 opacity-0\"\n )}\n >\n <div className=\"pb-4 pt-1 pr-8\">\n {item.content}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n","import React, { forwardRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n id: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n tabs: TabItem[];\n defaultValue?: string;\n value?: string;\n onChange?: (value: string) => void;\n variant?: 'solid' | 'underline';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n ({ className, tabs, defaultValue, value, onChange, variant = 'solid', ...props }, ref) => {\n \n const [internalState, setInternalState] = useState<string>(\n defaultValue || (tabs.length > 0 ? tabs[0].id : '')\n );\n\n const activeTabId = value !== undefined ? value : internalState;\n\n const handleTabChange = (id: string, disabled?: boolean) => {\n if (disabled) return;\n if (value === undefined) setInternalState(id);\n onChange?.(id);\n };\n\n const activeTabContent = tabs.find(tab => tab.id === activeTabId)?.content;\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {/* Tab List */}\n <div \n className={cn(\n \"flex overflow-x-auto no-scrollbar\",\n variant === 'solid' ? \"bg-gray-100 p-1 rounded-lg gap-1 inline-flex\" : \"border-b border-gray-200 gap-6 w-full\"\n )}\n role=\"tablist\"\n >\n {tabs.map((tab) => {\n const isActive = activeTabId === tab.id;\n\n return (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`panel-${tab.id}`}\n id={`tab-${tab.id}`}\n disabled={tab.disabled}\n onClick={() => handleTabChange(tab.id, tab.disabled)}\n className={cn(\n \"flex items-center justify-center whitespace-nowrap px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\n tab.disabled && \"opacity-50 cursor-not-allowed\",\n \n // Solid Variant Styles\n variant === 'solid' && cn(\n \"rounded-md\",\n isActive \n ? \"bg-white text-gray-900 shadow-sm\" \n : \"text-gray-500 hover:text-gray-900 hover:bg-gray-200/50\"\n ),\n\n // Underline Variant Styles\n variant === 'underline' && cn(\n \"border-b-2 px-1 pb-2 pt-2 -mb-px\",\n isActive \n ? \"border-blue-600 text-blue-600\" \n : \"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300\"\n )\n )}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n\n {/* Tab Panel */}\n <div \n className=\"mt-4 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\"\n role=\"tabpanel\"\n id={`panel-${activeTabId}`}\n aria-labelledby={`tab-${activeTabId}`}\n >\n {activeTabContent}\n </div>\n </div>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n","import React, { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n items: React.ReactNode[];\n showControls?: boolean;\n showDots?: boolean;\n autoPlay?: boolean;\n interval?: number;\n}\n\nexport interface CarouselHandle {\n scrollNext: () => void;\n scrollPrev: () => void;\n scrollTo: (index: number) => void;\n}\n\nexport const Carousel = forwardRef<CarouselHandle, CarouselProps>(\n ({ className, items, showControls = true, showDots = true, autoPlay = false, interval = 5000, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const scrollTo = (index: number) => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n const scrollWidth = container.scrollWidth;\n const itemWidth = scrollWidth / items.length;\n container.scrollTo({\n left: index * itemWidth,\n behavior: 'smooth'\n });\n setCurrentIndex(index);\n };\n\n const scrollNext = () => {\n const nextIndex = (currentIndex + 1) % items.length;\n scrollTo(nextIndex);\n };\n\n const scrollPrev = () => {\n const prevIndex = (currentIndex - 1 + items.length) % items.length;\n scrollTo(prevIndex);\n };\n\n // Auto-play\n useEffect(() => {\n if (!autoPlay) return;\n const timer = setInterval(() => {\n scrollNext();\n }, interval);\n return () => clearInterval(timer);\n }, [currentIndex, autoPlay, interval, items.length]);\n\n // Track scroll to update dot indicator\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n const itemWidth = container.scrollWidth / items.length;\n const newIndex = Math.round(container.scrollLeft / itemWidth);\n setCurrentIndex(newIndex);\n };\n\n container.addEventListener('scroll', handleScroll, { passive: true });\n return () => container.removeEventListener('scroll', handleScroll);\n }, [items.length]);\n\n // Forwarding ref for external control\n useImperativeHandle(ref, () => ({\n scrollNext,\n scrollPrev,\n scrollTo\n }));\n\n if (!items || items.length === 0) return null;\n\n return (\n <div className={cn(\"relative group w-full overflow-hidden\", className)} {...props}>\n {/* Slides Container */}\n <div \n ref={containerRef}\n className=\"flex w-full overflow-x-auto snap-x snap-mandatory no-scrollbar smooth-scroll\"\n style={{ scrollBehavior: 'smooth' }}\n >\n {items.map((item, index) => (\n <div \n key={index} \n className=\"w-full flex-shrink-0 snap-center snap-always transition-all\"\n >\n {item}\n </div>\n ))}\n </div>\n\n {/* Controls */}\n {showControls && items.length > 1 && (\n <>\n <button\n type=\"button\"\n onClick={scrollPrev}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 w-10 h-10 flex items-center justify-center rounded-full bg-white/80 text-gray-800 shadow-md backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity hover:bg-white focus:outline-none focus:ring-2 focus:ring-blue-500\"\n aria-label=\"Previous slide\"\n >\n <ChevronLeft className=\"w-6 h-6\" />\n </button>\n <button\n type=\"button\"\n onClick={scrollNext}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 w-10 h-10 flex items-center justify-center rounded-full bg-white/80 text-gray-800 shadow-md backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity hover:bg-white focus:outline-none focus:ring-2 focus:ring-blue-500\"\n aria-label=\"Next slide\"\n >\n <ChevronRight className=\"w-6 h-6\" />\n </button>\n </>\n )}\n\n {/* Dots */}\n {showDots && items.length > 1 && (\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex items-center gap-2 z-10\">\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => scrollTo(index)}\n className={cn(\n \"w-2.5 h-2.5 rounded-full transition-all focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1\",\n currentIndex === index \n ? \"bg-white scale-125 shadow-sm\" \n : \"bg-white/50 hover:bg-white/80\"\n )}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nCarousel.displayName = 'Carousel';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TimelineItem {\n id: string | number;\n title: React.ReactNode;\n description?: React.ReactNode;\n date?: React.ReactNode;\n icon?: React.ReactNode;\n status?: 'default' | 'completed' | 'current' | 'error';\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TimelineItem[];\n mode?: 'left' | 'alternate';\n}\n\nexport const Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, mode = 'left', ...props }, ref) => {\n\n const statusColors = {\n default: \"text-gray-400 bg-gray-200 border-gray-300\",\n completed: \"text-white bg-green-500 border-green-500\",\n current: \"text-blue-500 bg-white border-blue-500 border-2\",\n error: \"text-red-500 bg-white border-red-500 border-2\",\n };\n\n return (\n <div ref={ref} className={cn(\"relative w-full\", className)} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const status = item.status || 'default';\n const isAlternateLeft = mode === 'alternate' && index % 2 === 0;\n const isAlternateRight = mode === 'alternate' && index % 2 !== 0;\n\n return (\n <div \n key={item.id} \n className={cn(\n \"relative flex gap-4 md:gap-6\",\n \"pb-8 last:pb-0\",\n mode === 'alternate' && \"md:justify-center\"\n )}\n >\n {/* Line */}\n {!isLast && (\n <div \n className={cn(\n \"absolute top-6 bottom-0 w-px bg-gray-200\",\n mode === 'alternate' \n ? \"left-6 md:left-1/2 md:-ml-[0.5px]\" \n : \"left-6\"\n )} \n />\n )}\n\n {/* Alternate mode - Left content spacer (on Desktop) */}\n {mode === 'alternate' && (\n <div \n className={cn(\n \"hidden md:block w-1/2 flex-shrink-0 text-right pr-12\",\n isAlternateRight ? \"invisible\" : \"\"\n )}\n >\n {isAlternateLeft && (\n <div className=\"pt-1.5 flex flex-col items-end\">\n <h4 className=\"text-sm font-semibold text-gray-900\">{item.title}</h4>\n {item.date && <span className=\"text-xs text-gray-500 mb-1\">{item.date}</span>}\n {item.description && <p className=\"text-sm text-gray-600 mt-1\">{item.description}</p>}\n </div>\n )}\n </div>\n )}\n\n {/* Status Indicator / Icon */}\n <div \n className={cn(\n \"relative z-10 flex flex-shrink-0 items-center justify-center w-12 h-12 rounded-full\",\n mode === 'alternate' && \"md:mx-auto\",\n statusColors[status]\n )}\n >\n {item.icon ? (\n <span className=\"w-5 h-5 flex items-center justify-center\">{item.icon}</span>\n ) : (\n <span className={cn(\n \"w-3 h-3 rounded-full\",\n status === 'default' && \"bg-gray-400\",\n status === 'completed' && \"bg-white\",\n status === 'current' && \"bg-blue-500\",\n status === 'error' && \"bg-red-500\"\n )} />\n )}\n </div>\n\n {/* Content */}\n <div \n className={cn(\n \"pt-1.5 flex-1\",\n mode === 'alternate' && \"md:w-1/2 md:pl-12 md:flex-none\",\n isAlternateLeft && \"md:hidden\" // Hide right content on desktop if it's left-aligned in alternate mode\n )}\n >\n <h4 className=\"text-sm font-semibold text-gray-900\">{item.title}</h4>\n {item.date && <span className=\"text-xs text-gray-500 mb-1 block\">{item.date}</span>}\n {item.description && <p className=\"text-sm text-gray-600 mt-1\">{item.description}</p>}\n </div>\n\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nTimeline.displayName = 'Timeline';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronRight, ChevronDown, Folder, File as FileIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface TreeNode {\n id: string;\n label: string;\n icon?: React.ReactNode;\n children?: TreeNode[];\n expanded?: boolean;\n selected?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSelect'> {\n data: TreeNode[];\n onSelect?: (node: TreeNode) => void;\n defaultExpandedIds?: string[];\n}\n\nconst TreeViewNode: React.FC<{\n node: TreeNode;\n level: number;\n expandedIds: Set<string>;\n toggleExpand: (id: string, e: React.MouseEvent) => void;\n onSelect?: (node: TreeNode) => void;\n selectedId?: string;\n}> = ({ node, level, expandedIds, toggleExpand, onSelect, selectedId }) => {\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id || node.selected;\n const isFolder = node.children && node.children.length > 0;\n\n return (\n <div className=\"w-full\">\n <div \n className={cn(\n \"flex items-center py-1.5 px-2 rounded-md cursor-pointer transition-colors text-sm\",\n isSelected ? \"bg-blue-50 text-blue-700 font-medium\" : \"text-gray-700 hover:bg-gray-100\",\n level > 0 && \"ml-4\"\n )}\n style={{ paddingLeft: `${level > 0 ? 0.5 : 0.5}rem` }}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(node);\n if (isFolder && !isSelected) {\n toggleExpand(node.id, e);\n }\n }}\n >\n {isFolder ? (\n <button \n type=\"button\" \n onClick={(e) => toggleExpand(node.id, e)} \n className=\"mr-1 w-5 h-5 flex flex-shrink-0 items-center justify-center text-gray-400 hover:text-gray-700 rounded hover:bg-gray-200 transition-colors\"\n >\n {isExpanded ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\n </button>\n ) : (\n <span className=\"mr-1 w-5 h-5 flex flex-shrink-0\" /> // Spacer\n )}\n \n <span className=\"mr-2 text-gray-400\">\n {node.icon ? node.icon : (isFolder ? <Folder className=\"w-4 h-4\" /> : <FileIcon className=\"w-4 h-4\" />)}\n </span>\n \n <span className=\"truncate\">{node.label}</span>\n </div>\n \n {isFolder && isExpanded && (\n <div className=\"relative\">\n {/* Connecting line */}\n <div className=\"absolute left-[13px] top-0 bottom-0 w-px bg-gray-200\" />\n <div className=\"pl-6\">\n {node.children!.map(child => (\n <TreeViewNode \n key={child.id} \n node={child} \n level={level + 1} \n expandedIds={expandedIds} \n toggleExpand={toggleExpand}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const TreeView = forwardRef<HTMLDivElement, TreeViewProps>(\n ({ className, data, onSelect, defaultExpandedIds = [], ...props }, ref) => {\n \n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set(defaultExpandedIds));\n const [selectedId, setSelectedId] = useState<string | undefined>();\n\n // Initial expanded state based on default nodes with 'expanded: true'\n React.useEffect(() => {\n const getInitialExpanded = (nodes: TreeNode[], acc: Set<string>): Set<string> => {\n nodes.forEach(node => {\n if (node.expanded) acc.add(node.id);\n if (node.children) getInitialExpanded(node.children, acc);\n });\n return acc;\n };\n \n if (defaultExpandedIds.length === 0) {\n const initial = getInitialExpanded(data, new Set());\n if (initial.size > 0) setExpandedIds(initial);\n }\n }, [data, defaultExpandedIds.length]);\n\n const toggleExpand = (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedIds(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const handleSelect = (node: TreeNode) => {\n setSelectedId(node.id);\n onSelect?.(node);\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full bg-white border border-gray-200 rounded-lg p-2 select-none\", className)} \n {...props}\n >\n {data.map(node => (\n <TreeViewNode \n key={node.id} \n node={node} \n level={0} \n expandedIds={expandedIds} \n toggleExpand={toggleExpand}\n onSelect={handleSelect}\n selectedId={selectedId}\n />\n ))}\n </div>\n );\n }\n);\n\nTreeView.displayName = 'TreeView';\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StatisticProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'prefix'> {\n title: React.ReactNode;\n value: number | string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n animateCountUp?: boolean;\n duration?: number;\n}\n\nexport const Statistic = forwardRef<HTMLDivElement, StatisticProps>(\n ({ className, title, value, prefix, suffix, precision = 0, animateCountUp = false, duration = 2000, ...props }, ref) => {\n \n // Simple count up effect\n const [displayValue, setDisplayValue] = useState<number | string>(animateCountUp && typeof value === 'number' ? 0 : value);\n\n useEffect(() => {\n if (!animateCountUp || typeof value !== 'number') {\n setDisplayValue(value);\n return;\n }\n\n let startTime: number | null = null;\n let animationFrame: number;\n\n const animate = (timestamp: number) => {\n if (!startTime) startTime = timestamp;\n const progress = Math.min((timestamp - startTime) / duration, 1);\n \n // Easing function (easeOutExpo)\n const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);\n \n const currentVal = value * easeProgress;\n setDisplayValue(Number(currentVal.toFixed(precision)));\n\n if (progress < 1) {\n animationFrame = requestAnimationFrame(animate);\n } else {\n setDisplayValue(Number(value.toFixed(precision)));\n }\n };\n\n animationFrame = requestAnimationFrame(animate);\n\n return () => cancelAnimationFrame(animationFrame);\n }, [value, animateCountUp, duration, precision]);\n\n const formattedValue = typeof displayValue === 'number' \n ? displayValue.toLocaleString(undefined, { minimumFractionDigits: precision, maximumFractionDigits: precision })\n : displayValue;\n\n return (\n <div ref={ref} className={cn(\"inline-flex flex-col\", className)} {...props}>\n <div className=\"text-sm font-medium text-gray-500 mb-1\">{title}</div>\n <div className=\"flex items-baseline gap-1\">\n {prefix && <span className=\"text-gray-500 font-medium\">{prefix}</span>}\n <span className=\"text-2xl font-bold text-gray-900 leading-none\">{formattedValue}</span>\n {suffix && <span className=\"text-gray-500 font-medium\">{suffix}</span>}\n </div>\n </div>\n );\n }\n);\n\nStatistic.displayName = 'Statistic';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ProgressBarProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n max?: number;\n showValueLabel?: boolean;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'primary' | 'success' | 'warning' | 'error';\n}\n\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n ({ className, value, max = 100, showValueLabel = false, size = 'md', variant = 'primary', ...props }, ref) => {\n \n // Clamp value between 0 and max\n const clampedValue = Math.min(Math.max(value, 0), max);\n const percentage = Math.round((clampedValue / max) * 100);\n\n const sizeClasses = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4'\n };\n\n const variantClasses = {\n primary: 'bg-blue-600',\n success: 'bg-green-500',\n warning: 'bg-amber-400',\n error: 'bg-red-500',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full flex flex-col gap-1.5\", className)} \n role=\"progressbar\" \n aria-valuenow={clampedValue} \n aria-valuemin={0} \n aria-valuemax={max}\n {...props}\n >\n {showValueLabel && (\n <div className=\"flex justify-between text-xs font-semibold text-gray-600 px-1\">\n <span>Progress</span>\n <span>{percentage}%</span>\n </div>\n )}\n <div className={cn(\"w-full bg-gray-200 rounded-full overflow-hidden\", sizeClasses[size])}>\n <div \n className={cn(\"h-full rounded-full transition-all duration-500 ease-out\", variantClasses[variant])}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n }\n);\n\nProgressBar.displayName = 'ProgressBar';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'text' | 'circular' | 'rectangular';\n width?: string | number;\n height?: string | number;\n animate?: boolean;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant = 'text', width, height, animate = true, ...props }, ref) => {\n \n const baseStyles = \"bg-gray-200\";\n \n const variantStyles = {\n text: \"h-4 w-full rounded-md\",\n circular: \"rounded-full w-10 h-10\",\n rectangular: \"rounded-lg w-full h-32\"\n };\n\n return (\n <div\n ref={ref}\n style={{ width, height }}\n className={cn(\n baseStyles,\n variantStyles[variant],\n animate && \"animate-pulse\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CalendarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: Date;\n onChange?: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n}\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n ({ className, value, onChange, minDate, maxDate, ...props }, ref) => {\n \n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n \n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const selectedDateStr = value?.toDateString();\n\n const getDaysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n const getFirstDayOfMonth = (year: number, month: number) => new Date(year, month, 1).getDay();\n\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n\n const daysInMonth = getDaysInMonth(year, month);\n const firstDayIndex = getFirstDayOfMonth(year, month);\n\n const prevMonth = () => {\n setCurrentMonth(new Date(year, month - 1, 1));\n };\n\n const nextMonth = () => {\n setCurrentMonth(new Date(year, month + 1, 1));\n };\n\n const handleSelectDate = (day: number) => {\n const newDate = new Date(year, month, day);\n if (onChange) {\n onChange(newDate);\n }\n };\n\n const isDateDisabled = (day: number) => {\n const date = new Date(year, month, day);\n date.setHours(0,0,0,0);\n \n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n const weekDays = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\n const renderDays = () => {\n const days = [];\n const totalCells = Math.ceil((daysInMonth + firstDayIndex) / 7) * 7;\n\n for (let i = 0; i < totalCells; i++) {\n const dayNumber = i - firstDayIndex + 1;\n const isCurrentMonth = dayNumber > 0 && dayNumber <= daysInMonth;\n \n if (!isCurrentMonth) {\n days.push(<div key={`empty-${i}`} className=\"w-9 h-9\" />);\n continue;\n }\n\n const dateObj = new Date(year, month, dayNumber);\n const isSelected = selectedDateStr === dateObj.toDateString();\n const isToday = today.toDateString() === dateObj.toDateString();\n const disabled = isDateDisabled(dayNumber);\n\n days.push(\n <button\n key={`day-${dayNumber}`}\n onClick={() => handleSelectDate(dayNumber)}\n disabled={disabled}\n className={cn(\n \"w-9 h-9 flex items-center justify-center rounded-full text-sm transition-colors\",\n disabled \n ? \"text-gray-300 cursor-not-allowed\" \n : \"text-gray-700 hover:bg-gray-100 cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500\",\n isToday && !isSelected && \"bg-gray-100 font-bold text-blue-600\",\n isSelected && \"bg-blue-600 text-white hover:bg-blue-700 font-semibold\"\n )}\n >\n {dayNumber}\n </button>\n );\n }\n return days;\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-fit p-4 bg-white border border-gray-200 rounded-xl shadow-sm select-none\", className)} \n {...props}\n >\n <div className=\"flex items-center justify-between mb-4 px-1\">\n <button \n type=\"button\" \n onClick={prevMonth}\n className=\"w-8 h-8 flex items-center justify-center rounded-full hover:bg-gray-100 text-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n \n <div className=\"font-semibold text-gray-800 text-sm\">\n {monthNames[month]} {year}\n </div>\n \n <button \n type=\"button\" \n onClick={nextMonth}\n className=\"w-8 h-8 flex items-center justify-center rounded-full hover:bg-gray-100 text-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {weekDays.map(day => (\n <div key={day} className=\"w-9 text-center text-xs font-medium text-gray-400\">\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {renderDays()}\n </div>\n </div>\n );\n }\n);\n\nCalendar.displayName = 'Calendar';\n","import React, { useState, forwardRef, useEffect } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface KanbanItem {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n columnId: string;\n}\n\nexport interface KanbanColumn {\n id: string;\n title: React.ReactNode;\n}\n\nexport interface KanbanProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n columns: KanbanColumn[];\n items: KanbanItem[];\n onChange?: (items: KanbanItem[]) => void;\n}\n\nexport const Kanban = forwardRef<HTMLDivElement, KanbanProps>(\n ({ className, columns, items: initialItems, onChange, ...props }, ref) => {\n \n const [items, setItems] = useState<KanbanItem[]>(initialItems);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n\n // Sync with external updates\n useEffect(() => {\n setItems(initialItems);\n }, [initialItems]);\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>, itemId: string) => {\n setDraggedItemId(itemId);\n // Essential for Firefox drag and drop support\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', itemId);\n // Slightly delay the opactiy change so the drag ghost remains fully visible\n setTimeout(() => {\n const ele = document.getElementById(`kanban-item-${itemId}`);\n if(ele) ele.style.opacity = '0.4';\n }, 0);\n }\n };\n\n const handleDragEnd = (e: React.DragEvent<HTMLDivElement>, itemId: string) => {\n setDraggedItemId(null);\n const ele = document.getElementById(`kanban-item-${itemId}`);\n if(ele) ele.style.opacity = '1';\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n // Allow drop\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>, targetColumnId: string) => {\n e.preventDefault();\n const itemId = e.dataTransfer.getData('text/plain') || draggedItemId;\n \n if (!itemId) return;\n\n const newItems = items.map(item => {\n if (item.id === itemId) {\n return { ...item, columnId: targetColumnId };\n }\n return item;\n });\n\n setItems(newItems);\n onChange?.(newItems);\n setDraggedItemId(null);\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"flex w-full overflow-x-auto gap-4 p-4 min-h-[400px] bg-gray-50/50 rounded-xl\", className)} \n {...props}\n >\n {columns.map(column => {\n const columnItems = items.filter(item => item.columnId === column.id);\n\n return (\n <div \n key={column.id}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e, column.id)}\n className=\"flex flex-col w-80 flex-shrink-0 bg-gray-100 rounded-lg\"\n >\n <div className=\"p-3 border-b border-gray-200 flex items-center justify-between\">\n <h3 className=\"font-semibold text-gray-700 text-sm flex items-center gap-2\">\n {column.title}\n <span className=\"bg-gray-200 text-gray-600 text-xs py-0.5 px-2 rounded-full font-medium\">\n {columnItems.length}\n </span>\n </h3>\n </div>\n \n <div className=\"p-3 flex-1 overflow-y-auto flex flex-col gap-3 min-h-[150px]\">\n {columnItems.map(item => (\n <div\n key={item.id}\n id={`kanban-item-${item.id}`}\n draggable\n onDragStart={(e) => handleDragStart(e, item.id)}\n onDragEnd={(e) => handleDragEnd(e, item.id)}\n className={cn(\n \"bg-white p-3 rounded-md shadow-sm border border-gray-200 cursor-grab active:cursor-grabbing hover:border-gray-300 hover:shadow-md transition-all\",\n draggedItemId === item.id ? \"ring-2 ring-blue-500 ring-offset-1 opacity-40 shadow-none border-dashed\" : \"\"\n )}\n >\n <h4 className=\"text-sm font-medium text-gray-900 mb-1\">{item.title}</h4>\n {item.description && (\n <p className=\"text-xs text-gray-500 line-clamp-2\">{item.description}</p>\n )}\n </div>\n ))}\n \n {columnItems.length === 0 && (\n <div className=\"h-full border-2 border-dashed border-gray-200 rounded-md flex items-center justify-center pointer-events-none\">\n <span className=\"text-xs text-gray-400 font-medium\">Drop items here</span>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nKanban.displayName = 'Kanban';\n","import React, { forwardRef, useState } from 'react';\nimport { AlertCircle, CheckCircle2, Info, X, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n description?: React.ReactNode;\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n onClose?: () => void;\n dismissible?: boolean;\n}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n ({ className, title, description, variant = 'default', onClose, dismissible = false, children, ...props }, ref) => {\n \n const [isVisible, setIsVisible] = useState(true);\n\n if (!isVisible) return null;\n\n const Icon = {\n default: Info,\n info: Info,\n success: CheckCircle2,\n warning: AlertCircle,\n error: XCircle,\n }[variant];\n\n const variantStyles = {\n default: 'bg-gray-100 text-gray-800 border-gray-200',\n info: 'bg-blue-50 text-blue-800 border-blue-200',\n success: 'bg-green-50 text-green-800 border-green-200',\n warning: 'bg-amber-50 text-amber-800 border-amber-200',\n error: 'bg-red-50 text-red-800 border-red-200',\n };\n\n const iconStyles = {\n default: 'text-gray-500',\n info: 'text-blue-500',\n success: 'text-green-500',\n warning: 'text-amber-500',\n error: 'text-red-500',\n };\n\n const handleClose = () => {\n setIsVisible(false);\n onClose?.();\n };\n\n return (\n <div \n ref={ref} \n role=\"alert\"\n className={cn(\"relative w-full rounded-lg border p-4 flex items-start gap-4 transition-all duration-300\", variantStyles[variant], className)} \n {...props}\n >\n <Icon className={cn(\"mt-0.5 h-5 w-5 flex-shrink-0\", iconStyles[variant])} />\n <div className=\"flex-1 flex flex-col gap-1 pr-6\">\n {title && <h5 className=\"font-medium leading-none tracking-tight\">{title}</h5>}\n {(description || children) && (\n <div className=\"text-sm opacity-90 leading-relaxed\">\n {description}\n {children}\n </div>\n )}\n </div>\n {dismissible && (\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-4 rounded-md p-1 opacity-70 hover:opacity-100 hover:bg-black/5 transition-all focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-offset-transparent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n","import React, { useState, useEffect } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { X, CheckCircle, AlertCircle, Info, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastOptions {\n id?: string;\n title?: string;\n description?: React.ReactNode;\n variant?: ToastVariant;\n duration?: number;\n}\n\n// Simple event listener for toast events\ntype Listener = (toast: ToastOptions) => void;\nlet listeners: Listener[] = [];\n\nexport const toast = (options: Omit<ToastOptions, 'id'> | string) => {\n if (typeof window === 'undefined') return;\n\n const id = Math.random().toString(36).substring(2, 9);\n \n const toastObj = typeof options === 'string' \n ? { id, title: options, variant: 'default' as ToastVariant } \n : { id, ...options };\n\n listeners.forEach(listener => listener(toastObj));\n\n return id;\n};\n\ntoast.success = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'success', ...options });\ntoast.error = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'error', ...options });\ntoast.warning = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'warning', ...options });\ntoast.info = (title: string, options?: Omit<ToastOptions, 'id' | 'title' | 'variant'>) => \n toast({ title, variant: 'info', ...options });\n\nexport const Toaster: React.FC = () => {\n const [toasts, setToasts] = useState<ToastOptions[]>([]);\n\n useEffect(() => {\n const handleAdd = (toastObj: ToastOptions) => {\n setToasts(prev => [...prev, toastObj]);\n if (toastObj.duration !== 0) {\n setTimeout(() => {\n setToasts(prev => prev.filter(t => t.id !== toastObj.id));\n }, toastObj.duration || 4000);\n }\n };\n\n listeners.push(handleAdd);\n return () => {\n listeners = listeners.filter(l => l !== handleAdd);\n };\n }, []);\n\n const removeToast = (id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n };\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed bottom-0 right-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px] gap-2 pointer-events-none\">\n {toasts.map(t => (\n <ToastItem key={t.id} toast={t} onRemove={() => removeToast(t.id!)} />\n ))}\n </div>\n );\n};\n\nconst ToastItem: React.FC<{ toast: ToastOptions; onRemove: () => void }> = ({ toast, onRemove }) => {\n const [isShowing, setIsShowing] = useState(false);\n\n useEffect(() => {\n // Trigger entrance animation\n requestAnimationFrame(() => setIsShowing(true));\n }, []);\n\n const variantStyles = {\n default: 'bg-white text-gray-900 border-gray-200',\n success: 'bg-green-50 text-green-900 border-green-200',\n error: 'bg-red-50 text-red-900 border-red-200',\n warning: 'bg-amber-50 text-amber-900 border-amber-200',\n info: 'bg-blue-50 text-blue-900 border-blue-200',\n };\n\n const Icon = {\n default: Info,\n success: CheckCircle,\n error: XCircle,\n warning: AlertCircle,\n info: Info,\n }[toast.variant || 'default'];\n\n const iconColors = {\n default: 'text-gray-400',\n success: 'text-green-500',\n error: 'text-red-500',\n warning: 'text-amber-500',\n info: 'text-blue-500',\n };\n\n return (\n <div\n className={cn(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-8 shadow-lg transition-all duration-300\",\n variantStyles[toast.variant || 'default'],\n isShowing ? \"translate-x-0 opacity-100\" : \"translate-x-[100%] opacity-0\"\n )}\n >\n <div className=\"flex items-start gap-3 flex-1\">\n <Icon className={cn(\"h-5 w-5 mt-0.5 flex-shrink-0\", iconColors[toast.variant || 'default'])} />\n <div className=\"grid gap-1\">\n {toast.title && <div className=\"text-sm font-semibold\">{toast.title}</div>}\n {toast.description && <div className=\"text-sm opacity-90\">{toast.description}</div>}\n </div>\n </div>\n <button\n onClick={onRemove}\n className=\"absolute right-2 top-2 rounded-md p-1 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-black/5\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n );\n};\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'primary' | 'white' | 'gray';\n}\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = 'md', variant = 'primary', ...props }, ref) => {\n \n const sizeClasses = {\n sm: 'h-4 w-4 border-2',\n md: 'h-6 w-6 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n };\n\n const variantClasses = {\n primary: 'border-gray-200 border-t-blue-600',\n white: 'border-white/20 border-t-white',\n gray: 'border-gray-200 border-t-gray-600',\n };\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-block rounded-full animate-spin\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","import React, { forwardRef, useState } from 'react';\nimport { X, Info, AlertTriangle, CheckCircle, XCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface BannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: 'info' | 'success' | 'warning' | 'error';\n dismissible?: boolean;\n onClose?: () => void;\n action?: React.ReactNode;\n}\n\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(\n ({ className, title, description, variant = 'info', dismissible = true, onClose, action, ...props }, ref) => {\n \n const [isVisible, setIsVisible] = useState(true);\n\n if (!isVisible) return null;\n\n const variantStyles = {\n info: 'bg-blue-600 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-amber-500 text-white',\n error: 'bg-red-600 text-white',\n };\n\n const Icon = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n }[variant];\n\n const handleClose = () => {\n setIsVisible(false);\n onClose?.();\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"w-full px-4 py-3 flex items-center justify-between gap-4 transition-all\", variantStyles[variant], className)}\n {...props}\n >\n <div className=\"flex items-center gap-3 flex-1 overflow-hidden\">\n <Icon className=\"h-5 w-5 flex-shrink-0 opacity-80\" />\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3 flex-1 truncate\">\n {title && <span className=\"font-semibold text-sm whitespace-nowrap\">{title}</span>}\n {description && <span className=\"text-sm opacity-90 truncate\">{description}</span>}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {action && (\n <div className=\"text-sm font-medium mr-2\">\n {action}\n </div>\n )}\n {dismissible && (\n <button\n onClick={handleClose}\n className=\"p-1 rounded-md hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n </div>\n );\n }\n);\n\nBanner.displayName = 'Banner';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n status: 'online' | 'offline' | 'busy' | 'away' | 'active' | 'inactive' | 'pending' | 'error';\n size?: 'sm' | 'md' | 'lg';\n ping?: boolean;\n label?: string;\n labelPosition?: 'right' | 'left';\n}\n\nexport const StatusIndicator = forwardRef<HTMLSpanElement, StatusIndicatorProps>(\n ({ className, status, size = 'md', ping = false, label, labelPosition = 'right', ...props }, ref) => {\n \n const sizeClasses = {\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n };\n\n const colorClasses = {\n online: 'bg-green-500',\n active: 'bg-green-500',\n offline: 'bg-gray-400',\n inactive: 'bg-gray-400',\n busy: 'bg-red-500',\n error: 'bg-red-500',\n away: 'bg-amber-400',\n pending: 'bg-amber-400',\n };\n\n const IndicatorCircle = (\n <span className=\"relative flex items-center justify-center flex-shrink-0\">\n {ping && (\n <span \n className={cn(\n \"absolute inline-flex h-full w-full rounded-full opacity-75 animate-ping\", \n colorClasses[status]\n )} \n />\n )}\n <span \n className={cn(\n \"relative inline-flex rounded-full shadow-sm\",\n sizeClasses[size], \n colorClasses[status]\n )}\n />\n </span>\n );\n\n if (!label) {\n return (\n <span ref={ref} className={cn(\"inline-flex\", className)} title={status} {...props}>\n {IndicatorCircle}\n </span>\n );\n }\n\n return (\n <span ref={ref} className={cn(\"inline-flex items-center gap-2 text-sm font-medium text-gray-700\", className)} {...props}>\n {labelPosition === 'left' && <span className=\"capitalize\">{label || status}</span>}\n {IndicatorCircle}\n {labelPosition === 'right' && <span className=\"capitalize\">{label || status}</span>}\n </span>\n );\n }\n);\n\nStatusIndicator.displayName = 'StatusIndicator';\n","import React, { forwardRef, useState, useEffect, useRef } from 'react';\nimport { Menu, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n brand?: React.ReactNode;\n links?: { label: React.ReactNode; href: string }[];\n actions?: React.ReactNode;\n sticky?: boolean;\n}\n\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n ({ className, brand, links = [], actions, sticky = false, children, ...props }, ref) => {\n \n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n \n // Close mobile menu on resize\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth >= 768) {\n setIsMobileMenuOpen(false);\n }\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return (\n <nav \n ref={ref} \n className={cn(\n \"w-full bg-white border-b border-gray-200 z-40 transition-all\",\n sticky ? \"sticky top-0\" : \"relative\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between h-16\">\n \n {/* Left side: Brand */}\n <div className=\"flex items-center\">\n {brand && (\n <div className=\"flex-shrink-0 flex items-center font-bold text-xl text-gray-900 mr-8\">\n {brand}\n </div>\n )}\n \n {/* Desktop Links */}\n <div className=\"hidden md:ml-6 md:flex md:space-x-8\">\n {links.map((link, idx) => (\n <a\n key={idx}\n href={link.href}\n className=\"inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium text-gray-500 hover:border-gray-300 hover:text-gray-700 transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </div>\n </div>\n\n {/* Right side: Actions / Custom contents */}\n <div className=\"hidden md:flex md:items-center md:space-x-4\">\n {actions}\n {children}\n </div>\n\n {/* Mobile menu button */}\n <div className=\"flex items-center md:hidden\">\n <button\n type=\"button\"\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n className=\"inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500\"\n aria-expanded={isMobileMenuOpen}\n >\n <span className=\"sr-only\">Open main menu</span>\n {isMobileMenuOpen ? (\n <X className=\"block h-6 w-6\" aria-hidden=\"true\" />\n ) : (\n <Menu className=\"block h-6 w-6\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n <div className={cn(\"md:hidden overflow-hidden transition-all duration-300 ease-in-out\", isMobileMenuOpen ? \"max-h-96 opacity-100\" : \"max-h-0 opacity-0\")}>\n <div className=\"pt-2 pb-4 space-y-1 bg-gray-50 border-t border-gray-200 shadow-inner\">\n {links.map((link, idx) => (\n <a\n key={idx}\n href={link.href}\n className=\"block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-100 hover:border-gray-300\"\n >\n {link.label}\n </a>\n ))}\n {actions && (\n <div className=\"mt-4 pt-4 border-t border-gray-200 px-4 flex flex-col gap-2\">\n {actions}\n </div>\n )}\n {children && (\n <div className=\"px-4 mt-2\">\n {children}\n </div>\n )}\n </div>\n </div>\n </nav>\n );\n }\n);\n\nNavbar.displayName = 'Navbar';\n","import React, { forwardRef, useState } from 'react';\nimport { ChevronDown, ChevronRight, Menu, X, ChevronLeft } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface SidebarItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n href?: string;\n children?: SidebarItem[];\n badge?: React.ReactNode;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n brand?: React.ReactNode;\n items: SidebarItem[];\n activeItemId?: string;\n onItemClick?: (item: SidebarItem) => void;\n collapsible?: boolean;\n}\n\nconst NavNode: React.FC<{\n item: SidebarItem;\n level: number;\n activeItemId?: string;\n onItemClick?: (item: SidebarItem) => void;\n isCollapsed: boolean;\n}> = ({ item, level, activeItemId, onItemClick, isCollapsed }) => {\n const isSelected = activeItemId === item.id;\n const hasChildren = item.children && item.children.length > 0;\n const [isOpen, setIsOpen] = useState(isSelected || false);\n\n const handleClick = () => {\n if (hasChildren) {\n if (!isCollapsed) setIsOpen(!isOpen);\n } else {\n onItemClick?.(item);\n }\n };\n\n return (\n <div className=\"w-full flex-col\">\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 rounded-md font-medium text-sm transition-colors mb-1\",\n isSelected \n ? \"bg-blue-50 text-blue-700\" \n : \"text-gray-700 hover:bg-gray-100\",\n level > 0 && !isCollapsed && \"ml-4 pl-4 border-l border-gray-200 rounded-l-none\"\n )}\n title={isCollapsed && typeof item.label === 'string' ? item.label : undefined}\n >\n {item.icon && (\n <span className={cn(\"flex-shrink-0 text-gray-500\", isSelected && \"text-blue-600\")}>\n {item.icon}\n </span>\n )}\n \n {!isCollapsed && (\n <>\n <span className=\"flex-1 truncate text-left\">{item.label}</span>\n \n {item.badge && (\n <span className=\"ml-auto inline-block py-0.5 px-2 text-[10px] bg-blue-100 text-blue-700 rounded-full font-bold\">\n {item.badge}\n </span>\n )}\n\n {hasChildren && (\n <span className=\"flex-shrink-0 ml-auto transition-transform duration-200\">\n {isOpen ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\n </span>\n )}\n </>\n )}\n </button>\n\n {!isCollapsed && hasChildren && isOpen && (\n <div className=\"pl-2 relative\">\n {item.children!.map(child => (\n <NavNode \n key={child.id} \n item={child} \n level={level + 1} \n activeItemId={activeItemId}\n onItemClick={onItemClick}\n isCollapsed={isCollapsed}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(\n ({ className, brand, items, activeItemId, onItemClick, collapsible = true, ...props }, ref) => {\n \n // desktop collapsed state\n const [isCollapsed, setIsCollapsed] = useState(false);\n \n // mobile slide-over state\n const [isMobileOpen, setIsMobileOpen] = useState(false);\n\n return (\n <>\n {/* Mobile menu toggle */}\n <div className=\"md:hidden flex items-center justify-between p-4 bg-white border-b border-gray-200\">\n {brand && <div className=\"font-bold\">{brand}</div>}\n <button \n onClick={() => setIsMobileOpen(!isMobileOpen)}\n className=\"p-2 -mr-2 text-gray-500 hover:bg-gray-100 rounded-md\"\n >\n <Menu className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Mobile overlay */}\n {isMobileOpen && (\n <div \n className=\"fixed inset-0 bg-black/50 z-40 md:hidden\" \n onClick={() => setIsMobileOpen(false)}\n />\n )}\n\n <aside \n ref={ref}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex flex-col bg-white border-r border-gray-200 transition-all duration-300 md:relative\",\n isCollapsed ? \"w-[72px]\" : \"w-64\",\n isMobileOpen ? \"translate-x-0\" : \"-translate-x-full md:translate-x-0\",\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className={cn(\n \"flex items-center h-16 border-b border-gray-200 px-4\",\n isCollapsed ? \"justify-center\" : \"justify-between\"\n )}>\n {!isCollapsed && brand && (\n <div className=\"font-bold text-lg text-gray-900 truncate flex-1 pr-4\">\n {brand}\n </div>\n )}\n \n {collapsible && (\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"hidden md:flex p-1.5 rounded-md text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-shrink-0\"\n >\n {isCollapsed ? <Menu className=\"w-5 h-5\" /> : <ChevronLeft className=\"w-5 h-5\" />}\n </button>\n )}\n\n {/* Mobile close */}\n <button\n onClick={() => setIsMobileOpen(false)}\n className=\"md:hidden p-1.5 rounded-md text-gray-500 hover:bg-gray-100\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Navigation Links */}\n <div className=\"flex-1 overflow-y-auto min-h-0 py-4 px-3 flex flex-col gap-1 no-scrollbar\">\n {items.map(item => (\n <NavNode \n key={item.id}\n item={item}\n level={0}\n activeItemId={activeItemId}\n onItemClick={onItemClick}\n isCollapsed={isCollapsed}\n />\n ))}\n </div>\n </aside>\n </>\n );\n }\n);\n\n\n","import React, { forwardRef } from 'react';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n isCurrentPage?: boolean;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n maxItems?: number;\n}\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, items, separator = <ChevronRight className=\"w-4 h-4\" />, maxItems = 0, ...props }, ref) => {\n \n // Logic for collapsing long breadcrumbs\n let displayItems = items;\n let hasCollapsed = false;\n\n if (maxItems > 0 && items.length > maxItems) {\n hasCollapsed = true;\n const firstItems = items.slice(0, 1);\n const lastItems = items.slice(items.length - (maxItems - 1));\n displayItems = [...firstItems, { label: <MoreHorizontal className=\"w-4 h-4 text-gray-400\" /> }, ...lastItems];\n }\n\n return (\n <nav ref={ref} aria-label=\"breadcrumb\" className={className} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5 sm:gap-2.5 break-words text-sm text-gray-500 sm:text-base\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isCurrent = item.isCurrentPage || isLast;\n\n return (\n <li key={index} className=\"inline-flex items-center gap-1.5 sm:gap-2.5\">\n {item.href && !isCurrent ? (\n <a\n href={item.href}\n className=\"transition-colors hover:text-gray-950 focus:outline-none focus:text-gray-950\"\n >\n {item.label}\n </a>\n ) : (\n <span\n role=\"link\"\n aria-disabled=\"true\"\n aria-current={isCurrent ? 'page' : undefined}\n className={cn(\"font-normal\", isCurrent && \"text-gray-950 font-medium\")}\n >\n {item.label}\n </span>\n )}\n\n {!isLast && (\n <span className=\"opacity-50\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React, { forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n showEdges?: boolean;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n ({ className, currentPage, totalPages, onPageChange, siblingCount = 1, showEdges = true, ...props }, ref) => {\n \n // Generate page numbers\n const getPageNumbers = () => {\n const totalNumbers = siblingCount * 2 + 3; // siblings + current + first + last\n const totalBlocks = totalNumbers + 2; // + 2 ellipses\n\n if (totalPages <= totalBlocks) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n // Only right dots\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1);\n return [...leftRange, '...', totalPages];\n }\n\n // Only left dots\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = Array.from({ length: rightItemCount }, (_, i) => totalPages - rightItemCount + i + 1);\n return [firstPageIndex, '...', ...rightRange];\n }\n\n // Both dots\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n );\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\n }\n\n return [];\n };\n\n const pages = getPageNumbers();\n\n return (\n <nav ref={ref} role=\"navigation\" aria-label=\"pagination\" className={cn(\"mx-auto flex w-full justify-center\", className)} {...props}>\n <ul className=\"flex flex-row items-center gap-1\">\n {/* Prev */}\n <li>\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={cn(\n \"flex items-center justify-center gap-1 rounded-md px-2.5 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n currentPage <= 1 ? \"opacity-50 cursor-not-allowed text-gray-400\" : \"hover:bg-gray-100 text-gray-700\"\n )}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Previous</span>\n </button>\n </li>\n\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <li key={`ellipsis-${index}`}>\n <span className=\"flex h-9 w-9 items-center justify-center text-sm font-medium text-gray-500\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n </li>\n );\n }\n\n const pageNum = page as number;\n const isCurrentPage = pageNum === currentPage;\n\n return (\n <li key={`page-${pageNum}`}>\n <button\n type=\"button\"\n onClick={() => onPageChange(pageNum)}\n aria-current={isCurrentPage ? 'page' : undefined}\n className={cn(\n \"flex h-9 w-9 items-center justify-center rounded-md border text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n isCurrentPage \n ? \"border-blue-600 bg-blue-600 text-white hover:bg-blue-700 font-semibold shadow-sm\"\n : \"border-transparent bg-transparent text-gray-700 hover:bg-gray-100 font-medium\"\n )}\n >\n {pageNum}\n </button>\n </li>\n );\n })}\n\n {/* Next */}\n <li>\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={cn(\n \"flex items-center justify-center gap-1 rounded-md px-2.5 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n currentPage >= totalPages ? \"opacity-50 cursor-not-allowed text-gray-400\" : \"hover:bg-gray-100 text-gray-700\"\n )}\n aria-label=\"Go to next page\"\n >\n <span className=\"hidden sm:inline\">Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </li>\n </ul>\n </nav>\n );\n }\n);\n\nPagination.displayName = 'Pagination';\n","import React, { forwardRef } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface StepItem {\n id: string | number;\n title: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport interface StepperProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n steps: StepItem[];\n currentStep: number;\n orientation?: 'horizontal' | 'vertical';\n onChange?: (stepIndex: number) => void;\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n ({ className, steps, currentStep, orientation = 'horizontal', onChange, ...props }, ref) => {\n \n return (\n <div \n ref={ref} \n className={cn(\n \"w-full\",\n orientation === 'horizontal' ? \"flex flex-row items-start justify-between\" : \"flex flex-col gap-4\",\n className\n )}\n {...props}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n const isPending = stepNumber > currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <div \n key={step.id} \n className={cn(\n \"relative flex\",\n orientation === 'horizontal' ? \"flex-col items-center flex-1 text-center\" : \"flex-row items-start text-left gap-4\"\n )}\n >\n {/* Connector Line (Horizontal) */}\n {!isLast && orientation === 'horizontal' && (\n <div \n className={cn(\n \"absolute top-4 left-[50%] w-full h-[2px] -z-10\",\n isCompleted ? \"bg-blue-600\" : \"bg-gray-200\"\n )} \n />\n )}\n\n {/* Indicator */}\n <button\n type=\"button\"\n onClick={() => onChange?.(stepNumber)}\n disabled={!onChange}\n className={cn(\n \"relative z-10 flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-semibold mb-2 bg-white transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\",\n isCompleted && \"border-blue-600 bg-blue-600 text-white\",\n isCurrent && \"border-blue-600 text-blue-600\",\n isPending && \"border-gray-300 text-gray-500\",\n onChange ? \"cursor-pointer hover:border-blue-500\" : \"cursor-default\"\n )}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : stepNumber}\n </button>\n\n {/* Connector Line (Vertical) */}\n {!isLast && orientation === 'vertical' && (\n <div \n className={cn(\n \"absolute top-8 bottom-[-16px] left-[15px] w-[2px] -z-10\",\n isCompleted ? \"bg-blue-600\" : \"bg-gray-200\"\n )} \n />\n )}\n\n {/* Text Content */}\n <div className=\"flex flex-col\">\n <span className={cn(\n \"text-sm font-semibold\",\n isCurrent ? \"text-gray-900\" : (isCompleted ? \"text-gray-700\" : \"text-gray-500\")\n )}>\n {step.title}\n </span>\n {step.description && (\n <span className=\"text-xs text-gray-500 mt-1 max-w-[150px]\">\n {step.description}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nStepper.displayName = 'Stepper';\n","import React, { useState, useEffect, useRef, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DropdownItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n divider?: boolean;\n}\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n trigger: React.ReactNode;\n items?: DropdownItem[];\n customContent?: React.ReactNode;\n position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';\n mode?: 'dropdown' | 'context' | 'mega';\n}\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(\n ({ className, trigger, items = [], customContent, position = 'bottom-right', mode = 'dropdown', ...props }, ref) => {\n \n const [isOpen, setIsOpen] = useState(false);\n const [contextPos, setContextPos] = useState({ x: 0, y: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n \n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (mode === 'context') {\n e.preventDefault();\n setContextPos({ x: e.clientX, y: e.clientY });\n setIsOpen(true);\n }\n };\n\n const handleClickTrigger = (e: React.MouseEvent) => {\n if (mode !== 'context') {\n setIsOpen(!isOpen);\n }\n };\n\n const positionClasses = {\n 'bottom-left': 'top-full left-0 mt-2',\n 'bottom-right': 'top-full right-0 mt-2',\n 'top-left': 'bottom-full left-0 mb-2',\n 'top-right': 'bottom-full right-0 mb-2',\n };\n\n const menuStyles = mode === 'context'\n ? { top: contextPos.y, left: contextPos.x, position: 'fixed' as const }\n : {};\n\n const baseMenuClasses = cn(\n \"z-50 min-w-[220px] rounded-md border border-gray-200 bg-white p-1 text-gray-950 shadow-md\",\n \"animate-in fade-in zoom-in-95 duration-200\",\n mode === 'context' ? \"fixed\" : `absolute ${positionClasses[position]}`,\n mode === 'mega' ? \"w-screen max-w-4xl p-6 grid grid-cols-1 md:grid-cols-3 gap-6\" : \"\",\n className\n );\n\n return (\n <div \n ref={containerRef}\n className={cn(\"relative inline-block\", mode === 'mega' ? \"static md:relative\" : \"\")}\n onContextMenu={handleContextMenu}\n >\n <div \n onClick={handleClickTrigger}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n \n {isOpen && (\n <div \n ref={ref}\n className={baseMenuClasses}\n style={menuStyles}\n {...props}\n >\n {customContent ? (\n customContent\n ) : (\n items.map((item, index) => {\n if (item.divider) {\n return <div key={`divider-${index}`} className=\"my-1 h-px bg-gray-200\" />;\n }\n\n return (\n <button\n key={item.id}\n disabled={item.disabled}\n onClick={() => {\n if (!item.disabled) {\n item.onSelect?.();\n setIsOpen(false);\n }\n }}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n item.disabled \n ? \"opacity-50 cursor-not-allowed\" \n : \"hover:bg-gray-100 focus:bg-gray-100\"\n )}\n >\n {item.icon && <span className=\"mr-2 h-4 w-4\">{item.icon}</span>}\n <span className=\"flex-1 text-left\">{item.label}</span>\n {item.shortcut && (\n <span className=\"ml-auto text-xs tracking-widest text-gray-500\">\n {item.shortcut}\n </span>\n )}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nDropdown.displayName = 'Dropdown';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n gap?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols = 1, gap = 'md', children, ...props }, ref) => {\n \n // Using mapping instead of dynamic classes for Tailwind string extraction\n const colClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',\n 7: 'grid-cols-2 sm:grid-cols-4 lg:grid-cols-7',\n 8: 'grid-cols-2 sm:grid-cols-4 lg:grid-cols-8',\n 9: 'grid-cols-3 sm:grid-cols-5 lg:grid-cols-9',\n 10: 'grid-cols-3 sm:grid-cols-5 lg:grid-cols-10',\n 11: 'grid-cols-3 sm:grid-cols-6 lg:grid-cols-11',\n 12: 'grid-cols-4 sm:grid-cols-6 lg:grid-cols-12',\n };\n\n const gapClasses = {\n none: 'gap-0',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\"grid w-full\", colClasses[cols], gapClasses[gap], className)} \n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGrid.displayName = 'Grid';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'row' | 'col';\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n wrap?: boolean;\n}\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n ({ className, direction = 'col', align = 'stretch', justify = 'start', gap = 'md', wrap = false, children, ...props }, ref) => {\n \n const directionClasses = {\n row: 'flex-row',\n col: 'flex-col',\n };\n\n const alignClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n };\n\n const justifyClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n };\n\n return (\n <div \n ref={ref} \n className={cn(\n \"flex\",\n directionClasses[direction],\n alignClasses[align],\n justifyClasses[justify],\n gapClasses[gap],\n wrap && \"flex-wrap\",\n className\n )} \n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStack.displayName = 'Stack';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SplitPaneProps extends React.HTMLAttributes<HTMLDivElement> {\n leftPane: ReactNode;\n rightPane: ReactNode;\n initialSplit?: number; // percentage\n minSplit?: number;\n maxSplit?: number;\n direction?: 'horizontal' | 'vertical';\n}\n\nexport const SplitPane = forwardRef<HTMLDivElement, SplitPaneProps>(\n ({ className, leftPane, rightPane, initialSplit = 50, minSplit = 10, maxSplit = 90, direction = 'horizontal', ...props }, ref) => {\n \n const [splitPos, setSplitPos] = useState(initialSplit);\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const isHorizontal = direction === 'horizontal';\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging || !containerRef.current) return;\n \n const containerRect = containerRef.current.getBoundingClientRect();\n let newSplitPercentage;\n\n if (isHorizontal) {\n const offsetX = e.clientX - containerRect.left;\n newSplitPercentage = (offsetX / containerRect.width) * 100;\n } else {\n const offsetY = e.clientY - containerRect.top;\n newSplitPercentage = (offsetY / containerRect.height) * 100;\n }\n\n if (newSplitPercentage < minSplit) newSplitPercentage = minSplit;\n if (newSplitPercentage > maxSplit) newSplitPercentage = maxSplit;\n\n setSplitPos(newSplitPercentage);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';\n } else {\n document.body.style.cursor = 'default';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'default';\n };\n }, [isDragging, isHorizontal, maxSplit, minSplit]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n };\n\n return (\n <div \n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\n \"flex w-full h-full overflow-hidden\",\n isHorizontal ? \"flex-row\" : \"flex-col\",\n className\n )}\n {...props}\n >\n <div \n className=\"flex-shrink-0 overflow-auto\" \n style={{ [isHorizontal ? 'width' : 'height']: `${splitPos}%` }}\n >\n {leftPane}\n </div>\n\n <div \n className={cn(\n \"flex items-center justify-center bg-gray-200 hiver:bg-blue-400 active:bg-blue-500 transition-colors z-10\",\n isHorizontal ? \"w-1.5 cursor-col-resize h-full\" : \"h-1.5 cursor-row-resize w-full\"\n )}\n onMouseDown={handleMouseDown}\n >\n {/* Draggable Handle Decoration */}\n <div className={cn(\n \"bg-gray-400 rounded-full\",\n isHorizontal ? \"w-0.5 h-8\" : \"h-0.5 w-8\"\n )} />\n </div>\n\n <div className=\"flex-1 overflow-auto\">\n {rightPane}\n </div>\n </div>\n );\n }\n);\n\nSplitPane.displayName = 'SplitPane';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface MasonryGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: number; // CSS gap spacing utility multiplier (e.g 4 = gap-4)\n}\n\nexport const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(\n ({ className, columns = 3, gap = 4, children, ...props }, ref) => {\n \n const childrenArray = React.Children.toArray(children);\n const columnsArray: React.ReactNode[][] = Array.from({ length: columns }, () => []);\n\n // Distribute children into columns\n childrenArray.forEach((child, index) => {\n columnsArray[index % columns].push(child);\n });\n\n return (\n <div \n ref={ref} \n className={cn(\"flex items-start w-full\", `gap-${gap}`, className)} \n {...props}\n >\n {columnsArray.map((columnChildren, idx) => (\n <div key={`masonry-col-${idx}`} className={cn(\"flex flex-col flex-1\", `gap-${gap}`)}>\n {columnChildren}\n </div>\n ))}\n </div>\n );\n }\n);\n\nMasonryGrid.displayName = 'MasonryGrid';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\n// Container\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n}\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, size = 'xl', ...props }, ref) => {\n const sizeClasses = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'w-full',\n };\n return (\n <div ref={ref} className={cn(\"mx-auto px-4 sm:px-6 lg:px-8 w-full\", sizeClasses[size], className)} {...props} />\n );\n }\n);\nContainer.displayName = 'Container';\n\n\n// Section\nexport const Section = forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <section ref={ref} className={cn(\"py-12 md:py-16 lg:py-24\", className)} {...props} />\n );\n }\n);\nSection.displayName = 'Section';\n\n\n// Hero\nexport interface HeroProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'left' | 'center';\n}\nexport const Hero = forwardRef<HTMLDivElement, HeroProps>(\n ({ className, align = 'center', children, ...props }, ref) => {\n return (\n <div \n ref={ref} \n className={cn(\n \"w-full bg-gray-50 py-20 lg:py-32\", \n align === 'center' ? \"text-center\" : \"text-left\",\n className\n )} \n {...props}\n >\n <Container>\n {children}\n </Container>\n </div>\n );\n }\n);\nHero.displayName = 'Hero';\n\n\n// Footer\nexport const Footer = forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <footer ref={ref} className={cn(\"bg-white border-t border-gray-200 py-12\", className)} {...props} />\n );\n }\n);\nFooter.displayName = 'Footer';\n","import React, { useEffect, useState, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n containerId?: string;\n}\n\nexport const Portal: React.FC<PortalProps> = ({ children, containerId = 'portal-root' }) => {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n let container = document.getElementById(containerId);\n \n if (!container) {\n container = document.createElement('div');\n container.setAttribute('id', containerId);\n document.body.appendChild(container);\n }\n\n return () => {\n // Optional: Cleanup if empty, but usually we leave the root\n };\n }, [containerId]);\n\n if (!mounted) return null;\n\n const container = document.getElementById(containerId);\n if (!container) return null;\n\n return createPortal(children, container);\n};\n","import React, { useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TransitionProps extends React.HTMLAttributes<HTMLDivElement> {\n show: boolean;\n enter?: string;\n enterFrom?: string;\n enterTo?: string;\n leave?: string;\n leaveFrom?: string;\n leaveTo?: string;\n}\n\nexport const Transition: React.FC<TransitionProps> = ({\n children,\n show,\n enter = 'transition-all duration-300 ease-out',\n enterFrom = 'opacity-0 scale-95',\n enterTo = 'opacity-100 scale-100',\n leave = 'transition-all duration-200 ease-in',\n leaveFrom = 'opacity-100 scale-100',\n leaveTo = 'opacity-0 scale-95',\n className,\n ...props\n}) => {\n const [renderable, setRenderable] = useState(show);\n const [classes, setClasses] = useState(show ? enterTo : leaveTo);\n\n useEffect(() => {\n let timeout: number;\n\n if (show) {\n setRenderable(true);\n setClasses(cn(enter, enterFrom));\n \n // Force reflow\n document.body.offsetHeight;\n\n requestAnimationFrame(() => {\n setClasses(cn(enter, enterTo));\n });\n } else {\n setClasses(cn(leave, leaveFrom));\n \n requestAnimationFrame(() => {\n setClasses(cn(leave, leaveTo));\n \n // Wait for transition to complete before unmounting\n // We use a fixed duration here, ideally it should match the CSS duration\n timeout = setTimeout(() => {\n setRenderable(false);\n }, 300); // 300ms default fallback\n });\n }\n\n return () => clearTimeout(timeout);\n }, [show, enter, enterFrom, enterTo, leave, leaveFrom, leaveTo]);\n\n if (!renderable) return null;\n\n return (\n <div className={cn(classes, className)} {...props}>\n {children}\n </div>\n );\n};\n","import React, { useEffect, useRef, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ClickAwayListenerProps extends React.HTMLAttributes<HTMLDivElement> {\n onClickAway: (event: MouseEvent | TouchEvent) => void;\n children: ReactNode;\n mouseEvent?: 'mousedown' | 'mouseup' | 'click';\n touchEvent?: 'touchstart' | 'touchend';\n}\n\nexport const ClickAwayListener = forwardRef<HTMLDivElement, ClickAwayListenerProps>(\n ({ onClickAway, children, mouseEvent = 'mousedown', touchEvent = 'touchstart', className, ...props }, ref) => {\n \n const internalRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (event: MouseEvent | TouchEvent) => {\n const el = internalRef.current;\n if (!el || el.contains((event.target as Node) || null)) {\n return;\n }\n onClickAway(event);\n };\n\n document.addEventListener(mouseEvent, handler);\n document.addEventListener(touchEvent, handler);\n\n return () => {\n document.removeEventListener(mouseEvent, handler);\n document.removeEventListener(touchEvent, handler);\n };\n }, [mouseEvent, touchEvent, onClickAway]);\n\n return (\n <div \n ref={(node) => {\n internalRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }} \n className={cn(\"contents\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nClickAwayListener.displayName = 'ClickAwayListener';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface VirtualScrollProps<T = any> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n items: T[];\n itemHeight: number;\n renderItem: (item: T, index: number) => React.ReactNode;\n overscan?: number;\n height?: number | string;\n}\n\nexport const VirtualScroll = forwardRef<HTMLDivElement, VirtualScrollProps>(\n ({ className, items, itemHeight, renderItem, overscan = 3, height = 400, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n const containerHeight = typeof height === 'number' ? height : 400;\n const totalHeight = items.length * itemHeight;\n\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const visibleCount = Math.ceil(containerHeight / itemHeight) + 2 * overscan;\n const endIndex = Math.min(items.length - 1, startIndex + visibleCount);\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n const offsetY = startIndex * itemHeight;\n\n const handleScroll = () => {\n if (containerRef.current) {\n setScrollTop(containerRef.current.scrollTop);\n }\n };\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\"overflow-y-auto w-full\", className)}\n style={{ height }}\n onScroll={handleScroll}\n {...props}\n >\n <div style={{ height: totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: offsetY, left: 0, right: 0 }}>\n {visibleItems.map((item, i) => (\n <div key={startIndex + i} style={{ height: itemHeight }}>\n {renderItem(item, startIndex + i)}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n);\n\nVirtualScroll.displayName = 'VirtualScroll';\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Spinner } from '../Spinner/Spinner';\n\nexport interface InfiniteScrollProps extends React.HTMLAttributes<HTMLDivElement> {\n onLoadMore: () => void;\n hasMore: boolean;\n isLoading?: boolean;\n loader?: React.ReactNode;\n threshold?: number; // px from bottom to trigger loadMore\n}\n\nexport const InfiniteScroll = forwardRef<HTMLDivElement, InfiniteScrollProps>(\n ({ className, children, onLoadMore, hasMore, isLoading = false, loader, threshold = 100, ...props }, ref) => {\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore && !isLoading) {\n onLoadMore();\n }\n },\n { rootMargin: `0px 0px ${threshold}px 0px` }\n );\n\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [hasMore, isLoading, onLoadMore, threshold]);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {children}\n <div ref={sentinelRef} className=\"h-1 w-full\" />\n {isLoading && (\n <div className=\"flex justify-center py-6\">\n {loader || <Spinner size=\"md\" />}\n </div>\n )}\n {!hasMore && !isLoading && (\n <div className=\"text-center py-4 text-sm text-gray-400\">No more items</div>\n )}\n </div>\n );\n }\n);\n\nInfiniteScroll.displayName = 'InfiniteScroll';\n","import React, { useState, useRef, useEffect, forwardRef, ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Skeleton } from '../Skeleton/Skeleton';\n\nexport interface LazyLoadProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n placeholder?: ReactNode;\n rootMargin?: string;\n threshold?: number;\n}\n\nexport const LazyLoad = forwardRef<HTMLDivElement, LazyLoadProps>(\n ({ className, children, placeholder, rootMargin = '50px', threshold = 0, ...props }, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = containerRef.current;\n if (!element) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n observer.disconnect();\n }\n },\n { rootMargin, threshold }\n );\n\n observer.observe(element);\n return () => observer.disconnect();\n }, [rootMargin, threshold]);\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\"w-full\", className)}\n {...props}\n >\n {isVisible ? children : (placeholder || <Skeleton className=\"w-full h-32\" />)}\n </div>\n );\n }\n);\n\nLazyLoad.displayName = 'LazyLoad';\n","import React, { useState, useEffect, forwardRef, useRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DebouncedInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> {\n value?: string;\n onChange?: (value: string) => void;\n debounceMs?: number;\n label?: string;\n description?: string;\n error?: string;\n}\n\nexport const DebouncedInput = forwardRef<HTMLInputElement, DebouncedInputProps>(\n ({ className, value = '', onChange, debounceMs = 300, label, description, error, ...props }, ref) => {\n const [localValue, setLocalValue] = useState(value);\n const timerRef = useRef<number | null>(null);\n\n // Sync with external value changes\n useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => {\n onChange?.(newValue);\n }, debounceMs);\n };\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return (\n <div className=\"flex flex-col gap-1 w-full\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700\">{label}</label>\n )}\n <input\n ref={ref}\n value={localValue}\n onChange={handleChange}\n className={cn(\n \"flex h-10 w-full rounded-md border bg-white px-3 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500\",\n error ? \"border-red-400 focus:ring-red-400\" : \"border-gray-300\",\n className\n )}\n {...props}\n />\n {description && !error && <p className=\"text-xs text-gray-500\">{description}</p>}\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nDebouncedInput.displayName = 'DebouncedInput';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Check, X } from 'lucide-react';\n\nexport interface AutoCompleteOption {\n value: string;\n label: string;\n}\n\nexport interface AutoCompleteProps {\n options: AutoCompleteOption[];\n value?: string;\n onChange?: (value: string) => void;\n onInputChange?: (inputValue: string) => void;\n placeholder?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n multiple?: boolean;\n className?: string;\n filterOption?: (option: AutoCompleteOption, inputValue: string) => boolean;\n}\n\nexport const AutoComplete = forwardRef<HTMLDivElement, AutoCompleteProps>(\n ({ options, value, onChange, onInputChange, placeholder = 'Search...', label, error, disabled, multiple = false, className, filterOption }, ref) => {\n const [inputValue, setInputValue] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [selectedValues, setSelectedValues] = useState<string[]>(value ? [value] : []);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const defaultFilter = (option: AutoCompleteOption, query: string) =>\n option.label.toLowerCase().includes(query.toLowerCase());\n\n const filteredOptions = options.filter(opt =>\n filterOption ? filterOption(opt, inputValue) : defaultFilter(opt, inputValue)\n );\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const selectOption = (option: AutoCompleteOption) => {\n if (multiple) {\n const newValues = selectedValues.includes(option.value)\n ? selectedValues.filter(v => v !== option.value)\n : [...selectedValues, option.value];\n setSelectedValues(newValues);\n onChange?.(newValues.join(','));\n setInputValue('');\n } else {\n setSelectedValues([option.value]);\n onChange?.(option.value);\n setInputValue(option.label);\n setIsOpen(false);\n }\n };\n\n const removeValue = (val: string) => {\n const newValues = selectedValues.filter(v => v !== val);\n setSelectedValues(newValues);\n onChange?.(newValues.join(','));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlightedIndex(prev => Math.min(prev + 1, filteredOptions.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlightedIndex(prev => Math.max(prev - 1, 0));\n } else if (e.key === 'Enter' && highlightedIndex >= 0) {\n e.preventDefault();\n selectOption(filteredOptions[highlightedIndex]);\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n const selectedLabels = selectedValues.map(v => options.find(o => o.value === v)?.label).filter(Boolean);\n\n return (\n <div ref={(node) => { containerRef.current = node; if (typeof ref === 'function') ref(node); else if (ref) ref.current = node; }} className={cn(\"relative w-full flex flex-col gap-1\", className)}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n\n <div className={cn(\"flex flex-wrap items-center gap-1.5 w-full min-h-10 rounded-md border px-3 py-2 text-sm bg-white cursor-text\", error ? \"border-red-400\" : \"border-gray-300\", disabled && \"opacity-50 cursor-not-allowed\")}\n onClick={() => { if (!disabled) { setIsOpen(true); inputRef.current?.focus(); } }}\n >\n {multiple && selectedLabels.map((label, i) => (\n <span key={i} className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-blue-100 text-blue-700 text-xs font-medium\">\n {label}\n <button type=\"button\" onClick={(e) => { e.stopPropagation(); removeValue(selectedValues[i]); }} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n <input\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n placeholder={selectedLabels.length === 0 ? placeholder : ''}\n onChange={(e) => { setInputValue(e.target.value); setIsOpen(true); onInputChange?.(e.target.value); setHighlightedIndex(-1); }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 min-w-[80px] focus:outline-none bg-transparent text-gray-900 placeholder:text-gray-400\"\n />\n </div>\n\n {isOpen && filteredOptions.length > 0 && (\n <div className=\"absolute z-50 top-full mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-60 overflow-y-auto\">\n {filteredOptions.map((option, i) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => selectOption(option)}\n className={cn(\"flex items-center w-full gap-2 px-3 py-2 text-sm text-left transition-colors\", i === highlightedIndex ? \"bg-blue-50 text-blue-700\" : \"hover:bg-gray-50 text-gray-700\", isSelected && \"font-medium\")}\n >\n <span className={cn(\"w-4 h-4 flex-shrink-0 rounded border border-gray-300 flex items-center justify-center\", isSelected && \"bg-blue-600 border-blue-600\")}>\n {isSelected && <Check className=\"w-3 h-3 text-white\" />}\n </span>\n {option.label}\n </button>\n );\n })}\n </div>\n )}\n\n {isOpen && filteredOptions.length === 0 && (\n <div className=\"absolute z-50 top-full mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg px-3 py-4 text-sm text-gray-400 text-center\">\n No options found\n </div>\n )}\n\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nAutoComplete.displayName = 'AutoComplete';\n","import React, { useState, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type FormFieldType = 'text' | 'email' | 'password' | 'number' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'switch' | 'date' | 'file';\n\nexport interface FormField {\n id: string;\n type: FormFieldType;\n label: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n description?: string;\n options?: { value: string; label: string }[];\n defaultValue?: any;\n validation?: (value: any) => string | undefined;\n}\n\nexport interface FormBuilderProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n fields: FormField[];\n onSubmit?: (values: Record<string, any>) => void;\n submitLabel?: string;\n isLoading?: boolean;\n columnCount?: 1 | 2;\n}\n\nexport const FormBuilder = forwardRef<HTMLFormElement, FormBuilderProps>(\n ({ className, fields, onSubmit, submitLabel = 'Submit', isLoading = false, columnCount = 1, ...props }, ref) => {\n const [values, setValues] = useState<Record<string, any>>(() => {\n const defaults: Record<string, any> = {};\n fields.forEach(f => { defaults[f.id] = f.defaultValue ?? (f.type === 'checkbox' || f.type === 'switch' ? false : ''); });\n return defaults;\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const validate = (fieldId: string, value: any): string | undefined => {\n const field = fields.find(f => f.id === fieldId);\n if (!field) return;\n if (field.required && (value === '' || value === false || value == null)) return `${field.label} is required`;\n if (field.validation) return field.validation(value);\n };\n\n const handleChange = (fieldId: string, value: any) => {\n setValues(prev => ({ ...prev, [fieldId]: value }));\n const err = validate(fieldId, value);\n setErrors(prev => ({ ...prev, [fieldId]: err || '' }));\n };\n\n const handleBlur = (fieldId: string) => {\n setTouched(prev => ({ ...prev, [fieldId]: true }));\n const err = validate(fieldId, values[fieldId]);\n setErrors(prev => ({ ...prev, [fieldId]: err || '' }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const newErrors: Record<string, string> = {};\n const newTouched: Record<string, boolean> = {};\n let hasError = false;\n\n fields.forEach(field => {\n const err = validate(field.id, values[field.id]);\n newTouched[field.id] = true;\n if (err) { newErrors[field.id] = err; hasError = true; }\n });\n\n setTouched(newTouched);\n setErrors(newErrors);\n if (!hasError) onSubmit?.(values);\n };\n\n const renderField = (field: FormField) => {\n const val = values[field.id];\n const err = touched[field.id] ? errors[field.id] : undefined;\n const base = \"flex h-10 w-full rounded-md border bg-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors disabled:opacity-50\";\n const borderClass = err ? \"border-red-400 focus:ring-red-400\" : \"border-gray-300\";\n\n switch (field.type) {\n case 'textarea':\n return (\n <textarea\n id={field.id}\n value={val}\n disabled={field.disabled}\n placeholder={field.placeholder}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n rows={4}\n className={cn(base, borderClass, \"h-auto resize-y py-2\")}\n />\n );\n case 'select':\n return (\n <select\n id={field.id}\n value={val}\n disabled={field.disabled}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n className={cn(base, borderClass)}\n >\n <option value=\"\">Select...</option>\n {field.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n );\n case 'checkbox':\n case 'switch':\n return (\n <div className=\"flex items-center gap-2\">\n <input\n id={field.id}\n type=\"checkbox\"\n checked={val}\n disabled={field.disabled}\n onChange={e => handleChange(field.id, e.target.checked)}\n onBlur={() => handleBlur(field.id)}\n className=\"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor={field.id} className=\"text-sm text-gray-600\">{field.description}</label>\n </div>\n );\n case 'radio':\n return (\n <div className=\"flex flex-col gap-2\">\n {field.options?.map(o => (\n <label key={o.value} className=\"flex items-center gap-2 text-sm text-gray-700 cursor-pointer\">\n <input\n type=\"radio\"\n name={field.id}\n value={o.value}\n checked={val === o.value}\n disabled={field.disabled}\n onChange={() => handleChange(field.id, o.value)}\n onBlur={() => handleBlur(field.id)}\n className=\"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n {o.label}\n </label>\n ))}\n </div>\n );\n default:\n return (\n <input\n id={field.id}\n type={field.type}\n value={val}\n disabled={field.disabled}\n placeholder={field.placeholder}\n onChange={e => handleChange(field.id, e.target.value)}\n onBlur={() => handleBlur(field.id)}\n className={cn(base, borderClass)}\n />\n );\n }\n };\n\n return (\n <form ref={ref} onSubmit={handleSubmit} noValidate className={cn(\"w-full\", className)} {...props}>\n <div className={cn(\"grid gap-5\", columnCount === 2 ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\")}>\n {fields.map(field => {\n const err = touched[field.id] ? errors[field.id] : undefined;\n return (\n <div key={field.id} className=\"flex flex-col gap-1.5\">\n {field.type !== 'checkbox' && field.type !== 'switch' && (\n <label htmlFor={field.id} className=\"text-sm font-medium text-gray-700\">\n {field.label}{field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n {renderField(field)}\n {field.description && field.type !== 'checkbox' && field.type !== 'switch' && (\n <p className=\"text-xs text-gray-500\">{field.description}</p>\n )}\n {err && <p className=\"text-xs text-red-500\">{err}</p>}\n </div>\n );\n })}\n </div>\n <div className=\"mt-6\">\n <button\n type=\"submit\"\n disabled={isLoading}\n className=\"inline-flex items-center justify-center rounded-md bg-blue-600 px-6 py-2.5 text-sm font-semibold text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n {isLoading ? 'Saving...' : submitLabel}\n </button>\n </div>\n </form>\n );\n }\n);\n\nFormBuilder.displayName = 'FormBuilder';\n","import React, { useState, forwardRef } from 'react';\nimport { Search, X, ChevronDown, ChevronUp, SlidersHorizontal } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FilterOption { value: string; label: string; count?: number; }\nexport interface FilterGroup { id: string; label: string; type: 'checkbox' | 'radio' | 'range'; options?: FilterOption[]; min?: number; max?: number; }\n\nexport interface ProductFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n filterGroups: FilterGroup[];\n onFilterChange?: (filters: Record<string, any>) => void;\n searchPlaceholder?: string;\n onSearch?: (query: string) => void;\n}\n\nexport const ProductFilter = forwardRef<HTMLDivElement, ProductFilterProps>(\n ({ className, filterGroups, onFilterChange, searchPlaceholder = 'Search products...', onSearch, ...props }, ref) => {\n const [values, setValues] = useState<Record<string, any>>({});\n const [searchQuery, setSearchQuery] = useState('');\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [isMobileOpen, setIsMobileOpen] = useState(false);\n\n const toggleGroup = (id: string) => {\n setCollapsed(prev => { const next = new Set(prev); next.has(id) ? next.delete(id) : next.add(id); return next; });\n };\n\n const updateFilter = (groupId: string, newValue: any) => {\n const updated = { ...values, [groupId]: newValue };\n setValues(updated);\n onFilterChange?.(updated);\n };\n\n const handleCheckbox = (groupId: string, optValue: string, checked: boolean) => {\n const current: string[] = values[groupId] || [];\n const next = checked ? [...current, optValue] : current.filter(v => v !== optValue);\n updateFilter(groupId, next);\n };\n\n const clearAll = () => { setValues({}); setSearchQuery(''); onFilterChange?.({}); onSearch?.(''); };\n const activeCount = Object.values(values).filter(v => (Array.isArray(v) ? v.length > 0 : v !== '' && v !== undefined)).length;\n\n const Filters = () => (\n <div className=\"flex flex-col gap-5\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input\n value={searchQuery}\n onChange={e => { setSearchQuery(e.target.value); onSearch?.(e.target.value); }}\n placeholder={searchPlaceholder}\n className=\"w-full pl-9 pr-4 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n {searchQuery && (\n <button onClick={() => { setSearchQuery(''); onSearch?.(''); }} className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\">\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Filter Groups */}\n {filterGroups.map(group => {\n const isCollapsed = collapsed.has(group.id);\n return (\n <div key={group.id} className=\"border-b border-gray-100 pb-4 last:border-b-0 last:pb-0\">\n <button type=\"button\" onClick={() => toggleGroup(group.id)} className=\"flex items-center justify-between w-full text-left mb-2\">\n <span className=\"font-semibold text-sm text-gray-800\">{group.label}</span>\n {isCollapsed ? <ChevronDown className=\"w-4 h-4 text-gray-400\" /> : <ChevronUp className=\"w-4 h-4 text-gray-400\" />}\n </button>\n {!isCollapsed && (\n <div className=\"space-y-2\">\n {group.type === 'range' && (\n <div className=\"flex flex-col gap-1\">\n <input type=\"range\" min={group.min} max={group.max} value={values[group.id] ?? group.max} onChange={e => updateFilter(group.id, +e.target.value)} className=\"w-full accent-blue-600\" />\n <div className=\"flex justify-between text-xs text-gray-500\"><span>{group.min}</span><span>{values[group.id] ?? group.max}</span></div>\n </div>\n )}\n {(group.type === 'checkbox' || group.type === 'radio') && group.options?.map(opt => (\n <label key={opt.value} className=\"flex items-center gap-2.5 cursor-pointer group\">\n <input\n type={group.type}\n name={group.id}\n checked={group.type === 'checkbox' ? (values[group.id] || []).includes(opt.value) : values[group.id] === opt.value}\n onChange={e => group.type === 'checkbox' ? handleCheckbox(group.id, opt.value, e.target.checked) : updateFilter(group.id, opt.value)}\n className=\"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 group-hover:text-gray-900 flex-1\">{opt.label}</span>\n {opt.count !== undefined && <span className=\"text-xs text-gray-400\">({opt.count})</span>}\n </label>\n ))}\n </div>\n )}\n </div>\n );\n })}\n\n {activeCount > 0 && (\n <button onClick={clearAll} className=\"text-sm text-blue-600 hover:text-blue-800 font-medium text-left\">\n Clear all filters ({activeCount})\n </button>\n )}\n </div>\n );\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {/* Mobile Toggle */}\n <div className=\"flex items-center justify-between lg:hidden mb-4\">\n <button onClick={() => setIsMobileOpen(true)} className=\"flex items-center gap-2 px-4 py-2 border border-gray-300 rounded-lg text-sm font-medium text-gray-700 hover:bg-gray-50\">\n <SlidersHorizontal className=\"w-4 h-4\" />\n Filters {activeCount > 0 && <span className=\"bg-blue-600 text-white text-xs rounded-full w-5 h-5 flex items-center justify-center\">{activeCount}</span>}\n </button>\n </div>\n\n {/* Mobile Filter Drawer */}\n {isMobileOpen && (\n <div className=\"fixed inset-0 z-50 lg:hidden\">\n <div className=\"fixed inset-0 bg-black/50\" onClick={() => setIsMobileOpen(false)} />\n <div className=\"fixed inset-y-0 left-0 w-80 bg-white p-5 overflow-y-auto shadow-xl\">\n <div className=\"flex items-center justify-between mb-5\">\n <h2 className=\"font-bold text-base text-gray-900\">Filters</h2>\n <button onClick={() => setIsMobileOpen(false)} className=\"text-gray-400 hover:text-gray-700\"><X className=\"w-5 h-5\" /></button>\n </div>\n <Filters />\n </div>\n </div>\n )}\n\n {/* Desktop */}\n <div className=\"hidden lg:block\"><Filters /></div>\n </div>\n );\n }\n);\n\nProductFilter.displayName = 'ProductFilter';\n","import React, { useRef, useEffect, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type ChartType = 'bar' | 'line' | 'pie' | 'donut';\n\nexport interface ChartDataset {\n label: string;\n data: number[];\n color?: string;\n}\n\nexport interface ChartProps extends React.HTMLAttributes<HTMLDivElement> {\n type: ChartType;\n labels: string[];\n datasets: ChartDataset[];\n width?: number;\n height?: number;\n showLegend?: boolean;\n}\n\nconst COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#f97316', '#ec4899'];\n\nexport const Chart = forwardRef<HTMLDivElement, ChartProps>(\n ({ className, type, labels, datasets, width = 600, height = 300, showLegend = true, ...props }, ref) => {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const PADDING = { top: 20, right: 20, bottom: 50, left: 40 };\n const chartWidth = width - PADDING.left - PADDING.right;\n const chartHeight = height - PADDING.top - PADDING.bottom;\n\n if (type === 'pie' || type === 'donut') {\n const total = datasets[0]?.data.reduce((a, b) => a + b, 0) || 1;\n const cx = width / 2;\n const cy = height / 2;\n const radius = Math.min(cx, cy) - 30;\n const innerRadius = type === 'donut' ? radius * 0.55 : 0;\n let startAngle = -Math.PI / 2;\n\n const slices = (datasets[0]?.data || []).map((val, i) => {\n const angle = (val / total) * Math.PI * 2;\n const endAngle = startAngle + angle;\n const sliceStart = startAngle;\n startAngle = endAngle;\n\n const x1 = cx + Math.cos(sliceStart) * radius;\n const y1 = cy + Math.sin(sliceStart) * radius;\n const x2 = cx + Math.cos(endAngle) * radius;\n const y2 = cy + Math.sin(endAngle) * radius;\n const ix1 = cx + Math.cos(sliceStart) * innerRadius;\n const iy1 = cy + Math.sin(sliceStart) * innerRadius;\n const ix2 = cx + Math.cos(endAngle) * innerRadius;\n const iy2 = cy + Math.sin(endAngle) * innerRadius;\n const largeArc = angle > Math.PI ? 1 : 0;\n const color = COLORS[i % COLORS.length];\n\n const midAngle = sliceStart + angle / 2;\n const textR = radius * 0.75;\n const tx = cx + Math.cos(midAngle) * textR;\n const ty = cy + Math.sin(midAngle) * textR;\n const pct = Math.round((val / total) * 100);\n\n let d = '';\n if (innerRadius > 0) {\n d = `M ${ix1} ${iy1} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} L ${ix2} ${iy2} A ${innerRadius} ${innerRadius} 0 ${largeArc} 0 ${ix1} ${iy1} Z`;\n } else {\n d = `M ${cx} ${cy} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} Z`;\n }\n\n return { d, color, label: labels[i], value: val, pct, tx, ty, show: angle > 0.25 };\n });\n\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center gap-4 w-full\", className)} {...props}>\n <svg width=\"100%\" viewBox={`0 0 ${width} ${height}`} style={{ maxWidth: width }}>\n {slices.map((slice, i) => (\n <g key={i}>\n <path d={slice.d} fill={slice.color} stroke=\"white\" strokeWidth={2} opacity={0.85} className=\"transition-opacity hover:opacity-100\">\n <title>{slice.label}: {slice.value} ({slice.pct}%)</title>\n </path>\n {slice.show && <text x={slice.tx} y={slice.ty} textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"11\" fill=\"white\" fontWeight=\"600\">{slice.pct}%</text>}\n </g>\n ))}\n </svg>\n {showLegend && (\n <div className=\"flex flex-wrap justify-center gap-3\">\n {slices.map((s, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-gray-600\">\n <div className=\"w-3 h-3 rounded-sm flex-shrink-0\" style={{ background: s.color }} />\n {s.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Bar / Line charts\n const allValues = datasets.flatMap(d => d.data);\n const maxValue = Math.max(...allValues, 0) * 1.1 || 10;\n const minValue = 0;\n const valueRange = maxValue - minValue;\n const barGroupWidth = chartWidth / labels.length;\n const barWidth = (barGroupWidth * 0.7) / datasets.length;\n\n const toY = (val: number) => chartHeight - ((val - minValue) / valueRange) * chartHeight;\n\n const yTickCount = 5;\n const yTicks = Array.from({ length: yTickCount + 1 }, (_, i) => minValue + (valueRange / yTickCount) * i);\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-4 w-full overflow-x-auto\", className)} {...props}>\n <svg width=\"100%\" viewBox={`0 0 ${width} ${height}`} style={{ minWidth: width * 0.6 }}>\n <g transform={`translate(${PADDING.left}, ${PADDING.top})`}>\n {/* Y-axis ticks */}\n {yTicks.map((tick, i) => (\n <g key={i}>\n <line x1={0} y1={toY(tick)} x2={chartWidth} y2={toY(tick)} stroke=\"#e5e7eb\" strokeDasharray=\"4 2\" />\n <text x={-6} y={toY(tick)} textAnchor=\"end\" dominantBaseline=\"middle\" fontSize=\"10\" fill=\"#9ca3af\">\n {Math.round(tick).toLocaleString()}\n </text>\n </g>\n ))}\n\n {/* X-axis labels */}\n {labels.map((lbl, i) => (\n <text key={i} x={i * barGroupWidth + barGroupWidth / 2} y={chartHeight + 20} textAnchor=\"middle\" fontSize=\"10\" fill=\"#6b7280\">\n {lbl}\n </text>\n ))}\n\n {/* Axes */}\n <line x1={0} y1={0} x2={0} y2={chartHeight} stroke=\"#d1d5db\" />\n <line x1={0} y1={chartHeight} x2={chartWidth} y2={chartHeight} stroke=\"#d1d5db\" />\n\n {/* Data */}\n {datasets.map((dataset, di) => {\n const color = dataset.color || COLORS[di % COLORS.length];\n if (type === 'line') {\n const points = dataset.data.map((val, xi) => `${xi * barGroupWidth + barGroupWidth / 2},${toY(val)}`).join(' ');\n return (\n <g key={di}>\n <polyline points={points} fill=\"none\" stroke={color} strokeWidth={2.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n {dataset.data.map((val, xi) => (\n <circle key={xi} cx={xi * barGroupWidth + barGroupWidth / 2} cy={toY(val)} r={4} fill={color} stroke=\"white\" strokeWidth={2}>\n <title>{dataset.label}: {val}</title>\n </circle>\n ))}\n </g>\n );\n } else {\n return (\n <g key={di}>\n {dataset.data.map((val, xi) => {\n const x = xi * barGroupWidth + di * barWidth + (barGroupWidth - datasets.length * barWidth) / 2;\n const barH = Math.max(0, toY(0) - toY(val));\n return (\n <rect key={xi} x={x} y={toY(val)} width={barWidth} height={barH} fill={color} rx={3} opacity={0.85} className=\"transition-opacity hover:opacity-100\">\n <title>{dataset.label}: {val}</title>\n </rect>\n );\n })}\n </g>\n );\n }\n })}\n </g>\n </svg>\n\n {showLegend && (\n <div className=\"flex flex-wrap justify-center gap-4 px-4\">\n {datasets.map((d, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-gray-600\">\n <div className=\"w-3 h-3 rounded-sm flex-shrink-0\" style={{ background: d.color || COLORS[i % COLORS.length] }} />\n {d.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nChart.displayName = 'Chart';\n","import React, { useState, useCallback, forwardRef } from 'react';\nimport { Plus, Minus, Trash2, ShoppingBag } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CartItem {\n id: string;\n name: string;\n price: number;\n quantity: number;\n image?: string;\n description?: string;\n}\n\nexport interface ShoppingCartProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: CartItem[];\n onChange?: (items: CartItem[]) => void;\n onCheckout?: (items: CartItem[], total: number) => void;\n currency?: string;\n}\n\nexport const ShoppingCart = forwardRef<HTMLDivElement, ShoppingCartProps>(\n ({ className, items: initialItems, onChange, onCheckout, currency = '$', ...props }, ref) => {\n const [items, setItems] = useState<CartItem[]>(initialItems);\n\n const update = useCallback((newItems: CartItem[]) => {\n setItems(newItems);\n onChange?.(newItems);\n }, [onChange]);\n\n const updateQty = (id: string, delta: number) => {\n const updated = items.map(item => {\n if (item.id !== id) return item;\n const newQty = item.quantity + delta;\n return newQty < 1 ? null : { ...item, quantity: newQty };\n }).filter(Boolean) as CartItem[];\n update(updated);\n };\n\n const removeItem = (id: string) => update(items.filter(i => i.id !== id));\n\n const subtotal = items.reduce((acc, i) => acc + i.price * i.quantity, 0);\n const tax = subtotal * 0.1;\n const total = subtotal + tax;\n\n if (items.length === 0) {\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center justify-center py-20 gap-4 text-center\", className)} {...props}>\n <div className=\"w-16 h-16 rounded-full bg-gray-100 flex items-center justify-center\">\n <ShoppingBag className=\"w-8 h-8 text-gray-400\" />\n </div>\n <p className=\"text-gray-500 font-medium\">Your cart is empty</p>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={cn(\"w-full flex flex-col lg:flex-row gap-6\", className)} {...props}>\n {/* Items List */}\n <div className=\"flex-1 flex flex-col gap-3\">\n {items.map(item => (\n <div key={item.id} className=\"flex items-start gap-4 p-4 bg-white border border-gray-200 rounded-xl shadow-sm hover:shadow-md transition-shadow\">\n {item.image && (\n <img src={item.image} alt={item.name} className=\"w-20 h-20 object-cover rounded-lg flex-shrink-0 bg-gray-100\" />\n )}\n {!item.image && (\n <div className=\"w-20 h-20 rounded-lg bg-gray-100 flex-shrink-0 flex items-center justify-center\">\n <ShoppingBag className=\"w-8 h-8 text-gray-300\" />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-semibold text-gray-900 text-sm truncate\">{item.name}</h4>\n <button onClick={() => removeItem(item.id)} className=\"text-gray-400 hover:text-red-500 transition-colors flex-shrink-0 p-1 -m-1\">\n <Trash2 className=\"w-4 h-4\" />\n </button>\n </div>\n {item.description && <p className=\"text-xs text-gray-500 mt-1 line-clamp-2\">{item.description}</p>}\n <div className=\"flex items-center justify-between mt-3\">\n <div className=\"flex items-center gap-2 bg-gray-100 rounded-lg p-1\">\n <button onClick={() => updateQty(item.id, -1)} className=\"w-6 h-6 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\">\n <Minus className=\"w-3 h-3\" />\n </button>\n <span className=\"text-sm font-semibold text-gray-900 w-6 text-center\">{item.quantity}</span>\n <button onClick={() => updateQty(item.id, 1)} className=\"w-6 h-6 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\">\n <Plus className=\"w-3 h-3\" />\n </button>\n </div>\n <span className=\"font-bold text-gray-900\">{currency}{(item.price * item.quantity).toFixed(2)}</span>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"w-full lg:w-80 flex-shrink-0\">\n <div className=\"bg-white border border-gray-200 rounded-xl p-5 shadow-sm sticky top-4\">\n <h3 className=\"font-semibold text-gray-900 mb-4 text-base\">Order Summary</h3>\n <div className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between text-gray-600\"><span>Subtotal ({items.length} items)</span><span>{currency}{subtotal.toFixed(2)}</span></div>\n <div className=\"flex justify-between text-gray-600\"><span>Tax (10%)</span><span>{currency}{tax.toFixed(2)}</span></div>\n <div className=\"flex justify-between text-gray-600\"><span>Shipping</span><span className=\"text-green-600 font-medium\">Free</span></div>\n <div className=\"border-t border-gray-200 pt-3 flex justify-between font-bold text-gray-900 text-base\">\n <span>Total</span><span>{currency}{total.toFixed(2)}</span>\n </div>\n </div>\n <button\n onClick={() => onCheckout?.(items, total)}\n className=\"mt-5 w-full bg-blue-600 text-white rounded-lg py-3 text-sm font-semibold hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors\"\n >\n Proceed to Checkout\n </button>\n </div>\n </div>\n </div>\n );\n }\n);\n\nShoppingCart.displayName = 'ShoppingCart';\n","import React, { useRef, forwardRef, useCallback } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Bold, Italic, Underline, List, ListOrdered, AlignLeft, AlignCenter, AlignRight, Link, Quote, Minus } from 'lucide-react';\n\nexport interface RichTextEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n minHeight?: string;\n label?: string;\n error?: string;\n}\n\nconst ToolbarButton: React.FC<{ onClick: () => void; active?: boolean; title: string; children: React.ReactNode }> = ({ onClick, active, title, children }) => (\n <button\n type=\"button\"\n onMouseDown={(e) => { e.preventDefault(); onClick(); }}\n title={title}\n className={cn(\"p-1.5 rounded hover:bg-gray-200 text-gray-600 hover:text-gray-900 transition-colors focus:outline-none\", active && \"bg-gray-200 text-gray-900\")}\n >\n {children}\n </button>\n);\n\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n ({ className, value, onChange, placeholder = 'Start writing...', minHeight = '200px', label, error, ...props }, ref) => {\n const editorRef = useRef<HTMLDivElement>(null);\n\n const execCmd = useCallback((command: string, val?: string) => {\n document.execCommand(command, false, val);\n editorRef.current?.focus();\n onChange?.(editorRef.current?.innerHTML || '');\n }, [onChange]);\n\n const handleInput = () => {\n onChange?.(editorRef.current?.innerHTML || '');\n };\n\n const insertLink = () => {\n const url = window.prompt('Enter URL:');\n if (url) execCmd('createLink', url);\n };\n\n const hasFormat = (command: string) => {\n try { return document.queryCommandState(command); } catch { return false; }\n };\n\n const toolbarGroups = [\n [\n { cmd: 'bold', icon: <Bold className=\"w-4 h-4\" />, title: 'Bold' },\n { cmd: 'italic', icon: <Italic className=\"w-4 h-4\" />, title: 'Italic' },\n { cmd: 'underline', icon: <Underline className=\"w-4 h-4\" />, title: 'Underline' },\n ],\n [\n { cmd: 'insertUnorderedList', icon: <List className=\"w-4 h-4\" />, title: 'Bullet List' },\n { cmd: 'insertOrderedList', icon: <ListOrdered className=\"w-4 h-4\" />, title: 'Numbered List' },\n { cmd: 'formatBlock:blockquote', icon: <Quote className=\"w-4 h-4\" />, title: 'Quote' },\n ],\n [\n { cmd: 'justifyLeft', icon: <AlignLeft className=\"w-4 h-4\" />, title: 'Align Left' },\n { cmd: 'justifyCenter', icon: <AlignCenter className=\"w-4 h-4\" />, title: 'Align Center' },\n { cmd: 'justifyRight', icon: <AlignRight className=\"w-4 h-4\" />, title: 'Align Right' },\n ],\n [\n { cmd: 'insertHorizontalRule', icon: <Minus className=\"w-4 h-4\" />, title: 'Horizontal Rule' },\n ],\n ];\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1 w-full\", className)} {...props}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n <div className={cn(\"border rounded-lg overflow-hidden bg-white\", error ? \"border-red-400\" : \"border-gray-300\", \"focus-within:ring-2 focus-within:ring-blue-500 focus-within:border-blue-500\")}>\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center gap-1 px-2 py-1.5 border-b border-gray-200 bg-gray-50\">\n {toolbarGroups.map((group, gi) => (\n <React.Fragment key={gi}>\n {gi > 0 && <div className=\"w-px h-5 bg-gray-300 mx-1\" />}\n {group.map(({ cmd, icon, title }) => (\n <ToolbarButton\n key={cmd}\n title={title}\n onClick={() => cmd.startsWith('formatBlock:') ? execCmd('formatBlock', cmd.split(':')[1]) : execCmd(cmd)}\n active={!cmd.startsWith('formatBlock') && !cmd.startsWith('insert') ? hasFormat(cmd) : false}\n >\n {icon}\n </ToolbarButton>\n ))}\n </React.Fragment>\n ))}\n <div className=\"w-px h-5 bg-gray-300 mx-1\" />\n <ToolbarButton onClick={insertLink} title=\"Insert Link\"><Link className=\"w-4 h-4\" /></ToolbarButton>\n </div>\n\n {/* Content Area */}\n <div\n ref={editorRef}\n contentEditable\n suppressContentEditableWarning\n onInput={handleInput}\n data-placeholder={placeholder}\n className=\"px-4 py-3 text-sm text-gray-800 focus:outline-none prose prose-sm max-w-none [&:empty]:before:content-[attr(data-placeholder)] [&:empty]:before:text-gray-400\"\n style={{ minHeight }}\n dangerouslySetInnerHTML={value !== undefined ? { __html: value } : undefined}\n />\n </div>\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n }\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Copy, Check } from 'lucide-react';\n\nexport interface CodeEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string;\n onChange?: (value: string) => void;\n language?: string;\n label?: string;\n readOnly?: boolean;\n showLineNumbers?: boolean;\n minHeight?: string;\n}\n\nexport const CodeEditor = forwardRef<HTMLDivElement, CodeEditorProps>(\n ({ className, value = '', onChange, language = 'javascript', label, readOnly = false, showLineNumbers = true, minHeight = '200px', ...props }, ref) => {\n const [copied, setCopied] = React.useState(false);\n const lines = value.split('\\n');\n\n const handleCopy = () => {\n navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1 w-full\", className)} {...props}>\n {label && <label className=\"text-sm font-medium text-gray-700\">{label}</label>}\n <div className=\"rounded-xl overflow-hidden border border-gray-800 shadow-lg\" style={{ fontFamily: \"'Fira Code', 'Consolas', 'Monaco', monospace\" }}>\n {/* Titlebar */}\n <div className=\"flex items-center justify-between px-4 py-2.5 bg-gray-900 border-b border-gray-700\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1.5\">\n <div className=\"w-3 h-3 rounded-full bg-red-500 opacity-80\" />\n <div className=\"w-3 h-3 rounded-full bg-amber-500 opacity-80\" />\n <div className=\"w-3 h-3 rounded-full bg-green-500 opacity-80\" />\n </div>\n <span className=\"text-xs text-gray-400 ml-2\">{language}</span>\n </div>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 text-xs text-gray-400 hover:text-gray-200 transition-colors px-2 py-1 rounded hover:bg-gray-700\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-green-400\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n {/* Editor Area */}\n <div className=\"relative flex bg-gray-950 overflow-auto\" style={{ minHeight }}>\n {/* Line Numbers */}\n {showLineNumbers && (\n <div className=\"flex-shrink-0 select-none py-4 pl-3 pr-3 text-right text-gray-600 text-xs leading-5 border-r border-gray-800\" style={{ minWidth: '3rem' }}>\n {lines.map((_, i) => <div key={i}>{i + 1}</div>)}\n </div>\n )}\n\n {/* Textarea */}\n <textarea\n value={value}\n readOnly={readOnly}\n onChange={e => onChange?.(e.target.value)}\n spellCheck={false}\n className=\"flex-1 p-4 text-xs text-green-300 bg-transparent resize-none focus:outline-none leading-5 w-full\"\n style={{ minHeight, fontFamily: 'inherit', tabSize: 2 }}\n />\n </div>\n </div>\n </div>\n );\n }\n);\n\nCodeEditor.displayName = 'CodeEditor';\n","import React, { useState, forwardRef } from 'react';\nimport { Folder, File, Upload, Search, Trash2, Download, Copy, Grid, List, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileItem {\n id: string;\n name: string;\n type: 'file' | 'folder';\n size?: number;\n modified?: string;\n mimeType?: string;\n}\n\nexport interface FileManagerProps extends React.HTMLAttributes<HTMLDivElement> {\n items?: FileItem[];\n onFileSelect?: (item: FileItem) => void;\n onDelete?: (items: FileItem[]) => void;\n onUpload?: (files: FileList) => void;\n}\n\nconst formatSize = (bytes?: number) => {\n if (!bytes) return '-';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1048576).toFixed(1)} MB`;\n};\n\nexport const FileManager = forwardRef<HTMLDivElement, FileManagerProps>(\n ({ className, items: propItems = [], onFileSelect, onDelete, onUpload, ...props }, ref) => {\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [search, setSearch] = useState('');\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [breadcrumbs, setBreadcrumbs] = useState<string[]>(['My Files']);\n\n const filtered = propItems.filter(item => item.name.toLowerCase().includes(search.toLowerCase()));\n\n const toggleSelect = (id: string) => {\n setSelected(prev => { const next = new Set(prev); next.has(id) ? next.delete(id) : next.add(id); return next; });\n };\n\n const selectedItems = propItems.filter(i => selected.has(i.id));\n\n const getIcon = (item: FileItem) => {\n if (item.type === 'folder') return <Folder className=\"text-amber-400\" />;\n if (item.mimeType?.startsWith('image/')) return <File className=\"text-blue-400\" />;\n return <File className=\"text-gray-400\" />;\n };\n\n return (\n <div ref={ref} className={cn(\"flex flex-col w-full h-full bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm\", className)} {...props}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-3 px-4 py-3 border-b border-gray-200 flex-wrap\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {selected.size > 0 && (\n <>\n <span className=\"text-sm text-gray-600 font-medium\">{selected.size} selected</span>\n <button onClick={() => onDelete?.(selectedItems)} className=\"flex items-center gap-1.5 text-sm text-red-600 hover:text-red-700 px-2 py-1 rounded hover:bg-red-50\">\n <Trash2 className=\"w-4 h-4\" /> Delete\n </button>\n <button onClick={() => setSelected(new Set())} className=\"text-sm text-gray-500 hover:text-gray-700 px-2 py-1\">Clear</button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Search files...\" className=\"pl-9 pr-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 w-48\" />\n </div>\n <label className=\"flex items-center gap-1.5 text-sm font-medium text-gray-700 px-3 py-1.5 border border-gray-300 rounded-lg hover:bg-gray-50 cursor-pointer\">\n <Upload className=\"w-4 h-4\" /> Upload\n <input type=\"file\" multiple className=\"sr-only\" onChange={e => e.target.files && onUpload?.(e.target.files)} />\n </label>\n <div className=\"flex rounded-lg border border-gray-300 overflow-hidden\">\n <button onClick={() => setViewMode('grid')} className={cn(\"p-1.5\", viewMode === 'grid' ? \"bg-blue-50 text-blue-600\" : \"text-gray-500 hover:bg-gray-50\")}><Grid className=\"w-4 h-4\" /></button>\n <button onClick={() => setViewMode('list')} className={cn(\"p-1.5\", viewMode === 'list' ? \"bg-blue-50 text-blue-600\" : \"text-gray-500 hover:bg-gray-50\")}><List className=\"w-4 h-4\" /></button>\n </div>\n </div>\n </div>\n\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-1 px-4 py-2 border-b border-gray-100 text-sm text-gray-500\">\n {breadcrumbs.map((crumb, i) => (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight className=\"w-4 h-4 text-gray-300\" />}\n <button className={cn(\"hover:text-gray-800 transition-colors\", i === breadcrumbs.length - 1 ? \"text-gray-900 font-medium\" : \"hover:underline\")}>{crumb}</button>\n </React.Fragment>\n ))}\n </div>\n\n {/* Files Area */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {filtered.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-48 text-gray-400 gap-2\">\n <Folder className=\"w-12 h-12 opacity-30\" />\n <span className=\"text-sm\">No files found</span>\n </div>\n ) : viewMode === 'grid' ? (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3\">\n {filtered.map(item => (\n <div\n key={item.id}\n onClick={() => { toggleSelect(item.id); item.type === 'file' && onFileSelect?.(item); }}\n className={cn(\"flex flex-col items-center gap-2 p-3 rounded-xl cursor-pointer transition-all hover:bg-gray-50 border\", selected.has(item.id) ? \"border-blue-500 bg-blue-50\" : \"border-transparent\")}\n >\n <div className=\"w-12 h-12 flex items-center justify-center text-3xl\">{getIcon(item)}</div>\n <p className=\"text-xs text-center text-gray-700 font-medium line-clamp-2 leading-tight\">{item.name}</p>\n {item.size !== undefined && <p className=\"text-[10px] text-gray-400\">{formatSize(item.size)}</p>}\n </div>\n ))}\n </div>\n ) : (\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-gray-500 uppercase tracking-wide border-b border-gray-100\">\n <th className=\"pb-2 font-semibold w-8\"><input type=\"checkbox\" onChange={e => { if (e.target.checked) setSelected(new Set(filtered.map(f => f.id))); else setSelected(new Set()); }} /></th>\n <th className=\"pb-2 font-semibold\">Name</th>\n <th className=\"pb-2 font-semibold hidden sm:table-cell\">Type</th>\n <th className=\"pb-2 font-semibold hidden md:table-cell\">Size</th>\n <th className=\"pb-2 font-semibold hidden lg:table-cell\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {filtered.map(item => (\n <tr key={item.id} onClick={() => { toggleSelect(item.id); item.type === 'file' && onFileSelect?.(item); }} className={cn(\"cursor-pointer transition-colors border-b border-gray-50 last:border-0\", selected.has(item.id) ? \"bg-blue-50\" : \"hover:bg-gray-50\")}>\n <td className=\"py-2 pr-2\"><input type=\"checkbox\" checked={selected.has(item.id)} readOnly /></td>\n <td className=\"py-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex-shrink-0\">{getIcon(item)}</span>\n <span className=\"font-medium text-gray-800 truncate\">{item.name}</span>\n </div>\n </td>\n <td className=\"py-2 text-gray-500 capitalize hidden sm:table-cell\">{item.type}</td>\n <td className=\"py-2 text-gray-500 hidden md:table-cell\">{formatSize(item.size)}</td>\n <td className=\"py-2 text-gray-500 hidden lg:table-cell\">{item.modified || '-'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </div>\n </div>\n );\n }\n);\n\nFileManager.displayName = 'FileManager';\n","import React, { useState, forwardRef } from 'react';\nimport { Send, Paperclip, Bold, Italic, Underline, Trash2, ChevronDown, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmailComposerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n onSend?: (email: { to: string[]; cc: string[]; bcc: string[]; subject: string; body: string; attachments: File[] }) => void;\n onDiscard?: () => void;\n defaultTo?: string[];\n defaultSubject?: string;\n}\n\nexport const EmailComposer = forwardRef<HTMLDivElement, EmailComposerProps>(\n ({ className, onSend, onDiscard, defaultTo = [], defaultSubject = '', ...props }, ref) => {\n const [to, setTo] = useState<string[]>(defaultTo);\n const [toInput, setToInput] = useState('');\n const [cc, setCc] = useState<string[]>([]);\n const [bcc, setBcc] = useState<string[]>([]);\n const [showCcBcc, setShowCcBcc] = useState(false);\n const [subject, setSubject] = useState(defaultSubject);\n const [body, setBody] = useState('');\n const [attachments, setAttachments] = useState<File[]>([]);\n const bodyRef = React.useRef<HTMLDivElement>(null);\n\n const addRecipient = (list: string[], setList: (v: string[]) => void, input: string, setInput: (v: string) => void) => {\n const email = input.trim();\n if (email && !list.includes(email)) setList([...list, email]);\n setInput('');\n };\n\n const removeRecipient = (list: string[], setList: (v: string[]) => void, email: string) => setList(list.filter(e => e !== email));\n\n const handleSend = () => {\n onSend?.({ to, cc, bcc, subject, body: bodyRef.current?.innerHTML || body, attachments });\n };\n\n const execCmd = (cmd: string) => { document.execCommand(cmd, false); bodyRef.current?.focus(); };\n\n const RecipientField = ({ label, list, setList, inputVal, setInputVal }: any) => (\n <div className=\"flex items-start gap-2 py-2 border-b border-gray-100 flex-wrap\">\n <span className=\"text-sm text-gray-500 font-medium mt-2 flex-shrink-0 w-10\">{label}:</span>\n <div className=\"flex flex-1 flex-wrap gap-1.5 min-h-[36px] items-center\">\n {list.map((email: string) => (\n <span key={email} className=\"inline-flex items-center gap-1 px-2.5 py-1 bg-blue-50 text-blue-700 text-xs rounded-full border border-blue-100\">\n {email}\n <button type=\"button\" onClick={() => removeRecipient(list, setList, email)} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n <input\n value={inputVal}\n onChange={e => setInputVal(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addRecipient(list, setList, inputVal, setInputVal); } }}\n onBlur={() => addRecipient(list, setList, inputVal, setInputVal)}\n placeholder={list.length === 0 ? `Add ${label.toLowerCase()} recipients` : ''}\n className=\"flex-1 min-w-[150px] text-sm focus:outline-none text-gray-800 placeholder-gray-400 py-1\"\n />\n </div>\n </div>\n );\n\n return (\n <div ref={ref} className={cn(\"flex flex-col w-full bg-white border border-gray-200 rounded-xl shadow-lg overflow-hidden\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-gray-900 text-white\">\n <h3 className=\"font-semibold text-sm\">New Message</h3>\n <div className=\"flex items-center gap-2\">\n <button onClick={onDiscard} className=\"text-gray-400 hover:text-white\"><X className=\"w-5 h-5\" /></button>\n </div>\n </div>\n\n {/* Recipients */}\n <div className=\"px-4 py-1 border-b border-gray-200\">\n <RecipientField label=\"To\" list={to} setList={setTo} inputVal={toInput} setInputVal={setToInput} />\n <div className=\"flex justify-end py-1\">\n <button type=\"button\" onClick={() => setShowCcBcc(!showCcBcc)} className=\"text-xs text-blue-600 hover:text-blue-800 flex items-center gap-1\">\n Cc/Bcc <ChevronDown className={cn(\"w-3 h-3 transition-transform\", showCcBcc && \"rotate-180\")} />\n </button>\n </div>\n {showCcBcc && (\n <>\n <RecipientField label=\"Cc\" list={cc} setList={setCc} inputVal=\"\" setInputVal={() => {}} />\n <RecipientField label=\"Bcc\" list={bcc} setList={setBcc} inputVal=\"\" setInputVal={() => {}} />\n </>\n )}\n <div className=\"py-2 border-b border-gray-100\">\n <input value={subject} onChange={e => setSubject(e.target.value)} placeholder=\"Subject\" className=\"w-full text-sm text-gray-800 placeholder-gray-400 focus:outline-none font-medium py-1\" />\n </div>\n </div>\n\n {/* Toolbar */}\n <div className=\"flex items-center gap-1 px-4 py-1.5 border-b border-gray-100 bg-gray-50\">\n {[{ cmd: 'bold', icon: <Bold className=\"w-4 h-4\" /> }, { cmd: 'italic', icon: <Italic className=\"w-4 h-4\" /> }, { cmd: 'underline', icon: <Underline className=\"w-4 h-4\" /> }].map(({ cmd, icon }) => (\n <button key={cmd} type=\"button\" onMouseDown={e => { e.preventDefault(); execCmd(cmd); }} className=\"p-1.5 rounded hover:bg-gray-200 text-gray-600 hover:text-gray-900 transition-colors\">{icon}</button>\n ))}\n </div>\n\n {/* Body */}\n <div\n ref={bodyRef}\n contentEditable\n suppressContentEditableWarning\n onInput={e => setBody((e.target as HTMLDivElement).innerHTML)}\n data-placeholder=\"Compose your email...\"\n className=\"flex-1 px-4 py-3 text-sm text-gray-700 focus:outline-none min-h-[200px] [&:empty]:before:content-[attr(data-placeholder)] [&:empty]:before:text-gray-400\"\n />\n\n {/* Attachments */}\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 px-4 py-2 border-t border-gray-100\">\n {attachments.map((file, i) => (\n <span key={i} className=\"inline-flex items-center gap-1 px-2.5 py-1 bg-gray-100 text-gray-700 text-xs rounded-full\">\n <Paperclip className=\"w-3 h-3\" /> {file.name}\n <button type=\"button\" onClick={() => setAttachments(prev => prev.filter((_, fi) => fi !== i))} className=\"hover:text-red-500\"><X className=\"w-3 h-3\" /></button>\n </span>\n ))}\n </div>\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-gray-200 bg-gray-50\">\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-1.5 text-sm text-gray-600 hover:text-gray-800 cursor-pointer px-2 py-1 rounded hover:bg-gray-200 transition-colors\">\n <Paperclip className=\"w-4 h-4\" /> Attach\n <input type=\"file\" multiple className=\"sr-only\" onChange={e => { if (e.target.files) setAttachments(prev => [...prev, ...Array.from(e.target.files!)]); }} />\n </label>\n <button type=\"button\" onClick={onDiscard} className=\"text-sm text-gray-500 hover:text-red-600 px-2 py-1 rounded hover:bg-red-50 transition-colors flex items-center gap-1\">\n <Trash2 className=\"w-4 h-4\" /> Discard\n </button>\n </div>\n <button\n type=\"button\"\n onClick={handleSend}\n disabled={to.length === 0}\n className=\"flex items-center gap-2 px-5 py-2 bg-blue-600 text-white text-sm font-semibold rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <Send className=\"w-4 h-4\" /> Send\n </button>\n </div>\n </div>\n );\n }\n);\n\nEmailComposer.displayName = 'EmailComposer';\n","import React, { useState, forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, Plus, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n date: string; // YYYY-MM-DD format\n color?: string;\n description?: string;\n}\n\nexport interface CalendarWithEventsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n events?: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onDateClick?: (date: Date) => void;\n onAddEvent?: (date: Date) => void;\n}\n\nconst EVENT_COLORS = ['bg-blue-500', 'bg-green-500', 'bg-purple-500', 'bg-amber-500', 'bg-red-500', 'bg-pink-500'];\n\nexport const CalendarWithEvents = forwardRef<HTMLDivElement, CalendarWithEventsProps>(\n ({ className, events = [], onEventClick, onDateClick, onAddEvent, ...props }, ref) => {\n const [currentDate, setCurrentDate] = useState(new Date());\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\n\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n const today = new Date();\n\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const monthNames = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n const days = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1));\n const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1));\n\n const getEventsForDate = (day: number) => {\n const dateStr = `${year}-${String(month + 1).padStart(2,'0')}-${String(day).padStart(2,'0')}`;\n return events.filter(e => e.date === dateStr);\n };\n\n const handleDateClick = (day: number) => {\n const date = new Date(year, month, day);\n setSelectedDate(date);\n onDateClick?.(date);\n };\n\n const totalCells = Math.ceil((daysInMonth + firstDay) / 7) * 7;\n\n return (\n <div ref={ref} className={cn(\"w-full bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-gray-200 bg-gray-50\">\n <button onClick={prevMonth} className=\"p-1.5 rounded-lg hover:bg-gray-200 text-gray-600 transition-colors\">\n <ChevronLeft className=\"w-5 h-5\" />\n </button>\n <h2 className=\"font-bold text-gray-900\">{monthNames[month]} {year}</h2>\n <button onClick={nextMonth} className=\"p-1.5 rounded-lg hover:bg-gray-200 text-gray-600 transition-colors\">\n <ChevronRight className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Weekday Labels */}\n <div className=\"grid grid-cols-7 border-b border-gray-200\">\n {days.map(d => (\n <div key={d} className=\"py-2 text-center text-xs font-semibold text-gray-500 uppercase tracking-wide\">{d}</div>\n ))}\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 divide-x divide-y divide-gray-100\">\n {Array.from({ length: totalCells }).map((_, i) => {\n const day = i - firstDay + 1;\n const isValid = day >= 1 && day <= daysInMonth;\n const isToday = isValid && new Date(year, month, day).toDateString() === today.toDateString();\n const isSelected = isValid && selectedDate?.toDateString() === new Date(year, month, day).toDateString();\n const dayEvents = isValid ? getEventsForDate(day) : [];\n\n return (\n <div\n key={i}\n onClick={() => isValid && handleDateClick(day)}\n className={cn(\n \"min-h-[80px] md:min-h-[100px] p-1.5 transition-colors\",\n isValid ? \"cursor-pointer hover:bg-blue-50/50\" : \"bg-gray-50/50\",\n isSelected && \"bg-blue-50\"\n )}\n >\n {isValid && (\n <>\n <div className=\"flex items-center justify-between mb-1\">\n <span className={cn(\"w-7 h-7 flex items-center justify-center rounded-full text-sm font-medium\", isToday ? \"bg-blue-600 text-white\" : isSelected ? \"text-blue-700 font-bold\" : \"text-gray-700\")}>\n {day}\n </span>\n {onAddEvent && (\n <button\n onClick={(e) => { e.stopPropagation(); onAddEvent(new Date(year, month, day)); }}\n className=\"opacity-0 hover:opacity-100 group-hover:opacity-100 p-0.5 rounded hover:bg-blue-100 text-blue-600 transition-opacity focus:opacity-100\"\n >\n <Plus className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n <div className=\"flex flex-col gap-0.5\">\n {dayEvents.slice(0, 3).map((evt, ei) => (\n <button\n key={evt.id}\n onClick={(e) => { e.stopPropagation(); onEventClick?.(evt); }}\n className={cn(\"text-left text-[10px] md:text-xs font-medium text-white rounded px-1.5 py-0.5 truncate w-full transition-opacity hover:opacity-90\", evt.color || EVENT_COLORS[ei % EVENT_COLORS.length])}\n title={evt.title}\n >\n {evt.title}\n </button>\n ))}\n {dayEvents.length > 3 && (\n <span className=\"text-[10px] text-gray-500 pl-1\">+{dayEvents.length - 3} more</span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nCalendarWithEvents.displayName = 'CalendarWithEvents';\n","import React, { useState, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface GanttTask {\n id: string;\n name: string;\n start: string; // YYYY-MM-DD\n end: string; // YYYY-MM-DD\n color?: string;\n progress?: number; // 0-100\n group?: string;\n}\n\nexport interface GanttChartProps extends React.HTMLAttributes<HTMLDivElement> {\n tasks: GanttTask[];\n title?: string;\n}\n\nconst COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4'];\n\nexport const GanttChart = forwardRef<HTMLDivElement, GanttChartProps>(\n ({ className, tasks, title, ...props }, ref) => {\n const allDates = tasks.flatMap(t => [new Date(t.start), new Date(t.end)]);\n if (allDates.length === 0) return null;\n\n const minDate = new Date(Math.min(...allDates.map(d => d.getTime())));\n const maxDate = new Date(Math.max(...allDates.map(d => d.getTime())));\n minDate.setDate(minDate.getDate() - 2);\n maxDate.setDate(maxDate.getDate() + 2);\n\n const totalDays = Math.ceil((maxDate.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24));\n\n const toPercent = (dateStr: string) => {\n const d = new Date(dateStr);\n return ((d.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100;\n };\n\n const toWidth = (startStr: string, endStr: string) => {\n const start = new Date(startStr);\n const end = new Date(endStr);\n const duration = (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24);\n return duration / totalDays * 100;\n };\n\n // Generate week labels\n const weekLabels: { label: string; left: number }[] = [];\n let d = new Date(minDate);\n while (d <= maxDate) {\n weekLabels.push({ label: d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }), left: ((d.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100 });\n d.setDate(d.getDate() + 7);\n }\n\n const today = new Date();\n const todayLine = ((today.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) / totalDays * 100;\n const showTodayLine = todayLine >= 0 && todayLine <= 100;\n\n return (\n <div ref={ref} className={cn(\"w-full overflow-x-auto rounded-xl border border-gray-200 bg-white shadow-sm\", className)} {...props}>\n {title && <div className=\"px-5 py-3 border-b border-gray-200 font-bold text-gray-800 text-sm\">{title}</div>}\n <div style={{ minWidth: '700px' }}>\n {/* Header Row */}\n <div className=\"flex\">\n <div className=\"w-48 flex-shrink-0 border-b border-r border-gray-200 px-3 py-2.5\">\n <span className=\"text-xs font-semibold text-gray-500 uppercase tracking-wide\">Task</span>\n </div>\n <div className=\"flex-1 relative border-b border-gray-200 px-3 py-2.5 overflow-hidden\">\n {weekLabels.map((w, i) => (\n <span key={i} style={{ position: 'absolute', left: `${w.left}%`, transform: 'translateX(-50%)' }} className=\"text-[10px] text-gray-400 font-medium whitespace-nowrap\">\n {w.label}\n </span>\n ))}\n </div>\n </div>\n\n {/* Task Rows */}\n {tasks.map((task, ti) => {\n const left = toPercent(task.start);\n const width = toWidth(task.start, task.end);\n const color = task.color || COLORS[ti % COLORS.length];\n return (\n <div key={task.id} className=\"flex hover:bg-gray-50 transition-colors\">\n <div className=\"w-48 flex-shrink-0 border-b border-r border-gray-100 px-3 py-3\">\n {task.group && <p className=\"text-[10px] text-gray-400 font-medium uppercase tracking-wide leading-none mb-0.5\">{task.group}</p>}\n <p className=\"text-sm text-gray-800 font-medium truncate\">{task.name}</p>\n </div>\n <div className=\"flex-1 relative border-b border-gray-100 py-3 pr-3\">\n {/* Grid Lines */}\n {weekLabels.map((w, i) => (\n <div key={i} style={{ position: 'absolute', left: `${w.left}%`, top: 0, bottom: 0 }} className=\"w-px bg-gray-100\" />\n ))}\n {/* Today Line */}\n {showTodayLine && (\n <div style={{ position: 'absolute', left: `${todayLine}%`, top: 0, bottom: 0 }} className=\"w-px bg-red-400 z-10 opacity-70\" />\n )}\n {/* Bar */}\n <div style={{ marginLeft: `${left}%`, width: `${width}%`, background: color }} className=\"h-7 rounded-full flex items-center overflow-hidden relative group cursor-pointer hover:brightness-110 transition-all shadow-sm\">\n {(task.progress !== undefined) && (\n <div style={{ width: `${task.progress}%`, background: 'rgba(0,0,0,0.2)' }} className=\"absolute left-0 top-0 h-full rounded-full\" />\n )}\n <span className=\"relative z-10 px-3 text-xs text-white font-semibold truncate\">{task.name}</span>\n {task.progress !== undefined && (\n <span className=\"relative z-10 ml-auto pr-2 text-[10px] text-white/80 font-medium flex-shrink-0\">{task.progress}%</span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nGanttChart.displayName = 'GanttChart';\n","import React, { useMemo, useState, useRef, useEffect, forwardRef } from 'react';\nimport * as Lucide from 'lucide-react';\nimport { ChevronDown, Search, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface IconSelectProps {\n value?: string;\n onChange?: (iconName: string) => void;\n placeholder?: string;\n label?: string;\n error?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nconst BATCH_SIZE = 50;\n\nconst EXCLUDED = new Set(['createLucideIcon', 'LucideIcon', 'default']);\n\nexport const IconSelect = forwardRef<HTMLDivElement, IconSelectProps>(\n ({\n value,\n onChange,\n placeholder = 'Select an icon...',\n label,\n error,\n description,\n disabled = false,\n className,\n }, ref) => {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [visibleCount, setVisibleCount] = useState(BATCH_SIZE);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n // Build sorted icon list once\n const iconList = useMemo(() => {\n return Object.entries(Lucide)\n .filter(([name, item]) => {\n if (EXCLUDED.has(name) || name.endsWith('Icon')) return false;\n return typeof item === 'function' || (typeof item === 'object' && item !== null);\n })\n .map(([name]) => name)\n .sort((a, b) => a.localeCompare(b));\n }, []);\n\n // Filter by search\n const filtered = useMemo(() => {\n if (!search.trim()) return iconList;\n const q = search.toLowerCase();\n return iconList.filter(n => n.toLowerCase().includes(q));\n }, [search, iconList]);\n\n const visible = filtered.slice(0, visibleCount);\n\n // Load more on scroll\n const handleListScroll = () => {\n const el = listRef.current;\n if (!el) return;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 40) {\n setVisibleCount(prev => Math.min(prev + BATCH_SIZE, filtered.length));\n }\n };\n\n // Close on outside click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n if (open) {\n document.addEventListener('mousedown', handler);\n // Focus search when opening\n setTimeout(() => searchRef.current?.focus(), 50);\n }\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n // Reset visible count when search changes\n useEffect(() => {\n setVisibleCount(BATCH_SIZE);\n }, [search]);\n\n const SelectedIcon = value ? (Lucide as any)[value] as Lucide.LucideIcon | undefined : null;\n\n const handleSelect = (name: string) => {\n onChange?.(name);\n setOpen(false);\n setSearch('');\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.('');\n };\n\n return (\n <div ref={ref} className={cn('w-full space-y-1.5', className)}>\n {label && (\n <label className={cn('text-sm font-medium block', disabled ? 'text-gray-400' : 'text-gray-700')}>\n {label}\n </label>\n )}\n {description && !error && (\n <p className=\"text-xs text-gray-500\">{description}</p>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger */}\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && setOpen(o => !o)}\n className={cn(\n 'w-full flex items-center justify-between gap-2',\n 'min-h-[40px] rounded-lg border border-gray-300 bg-white px-3.5 py-2 text-sm',\n 'transition-all duration-150 outline-none shadow-sm cursor-pointer',\n 'hover:border-gray-400',\n open && !error && 'border-blue-500 ring-2 ring-blue-100',\n error && 'border-red-500 ring-1 ring-red-500',\n disabled && 'bg-gray-100 text-gray-400 cursor-not-allowed opacity-60'\n )}\n >\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n {value && SelectedIcon ? (\n <>\n <SelectedIcon className=\"w-4 h-4 flex-shrink-0 text-gray-600\" />\n <span className=\"truncate text-gray-700\">{value}</span>\n </>\n ) : (\n <span className=\"text-gray-400 truncate\">{placeholder}</span>\n )}\n </div>\n\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {value && !disabled && (\n <span\n role=\"button\"\n onClick={handleClear}\n className=\"p-0.5 rounded hover:bg-gray-100 text-gray-400 hover:text-gray-600 cursor-pointer\"\n >\n <X className=\"w-3 h-3\" />\n </span>\n )}\n <ChevronDown className={cn('w-4 h-4 text-gray-400 transition-transform', open && 'rotate-180')} />\n </div>\n </button>\n\n {/* Dropdown panel */}\n {open && (\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-xl overflow-hidden\">\n {/* Search bar */}\n <div className=\"sticky top-0 bg-white border-b border-gray-100 p-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder=\"Search icons...\"\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border border-gray-200 rounded-md bg-gray-50 focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n <p className=\"text-xs text-gray-400 mt-1 pl-0.5\">\n {filtered.length} of {iconList.length} icons\n </p>\n </div>\n\n {/* Icon grid */}\n <div\n ref={listRef}\n onScroll={handleListScroll}\n className=\"overflow-y-auto max-h-60\"\n >\n {visible.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-gray-500\">\n No icons found for &ldquo;{search}&rdquo;\n </div>\n ) : (\n <div className=\"grid grid-cols-1 py-1\">\n {visible.map(name => {\n const Icon = (Lucide as any)[name] as Lucide.LucideIcon;\n const isSelected = name === value;\n return (\n <button\n key={name}\n type=\"button\"\n onClick={() => handleSelect(name)}\n className={cn(\n 'flex items-center gap-2.5 px-3 py-2 text-sm text-left w-full transition-colors',\n isSelected\n ? 'bg-blue-50 text-blue-700'\n : 'text-gray-700 hover:bg-gray-50'\n )}\n >\n {Icon && <Icon className=\"w-4 h-4 flex-shrink-0\" />}\n <span className=\"truncate\">{name}</span>\n {isSelected && (\n <span className=\"ml-auto text-blue-500\">\n <Lucide.Check className=\"w-3.5 h-3.5\" />\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {visibleCount < filtered.length && (\n <div className=\"py-2 text-center text-xs text-gray-400\">\n Scroll for more…\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-red-500 flex items-center gap-1\">\n <Lucide.AlertCircle className=\"w-3.5 h-3.5\" />\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nIconSelect.displayName = 'IconSelect';","import React, {\n useState, useRef, useEffect, useCallback, forwardRef, useImperativeHandle,\n} from 'react';\nimport { ZoomIn, ZoomOut, RotateCcw, Crop, Check, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface CropArea {\n x: number; // 0–1 (fraction of image width)\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ImageCropProps {\n src: string;\n aspectRatio?: number | null; // e.g. 1 for square, 16/9, null = free\n onCrop?: (blob: Blob, cropArea: CropArea) => void;\n onCancel?: () => void;\n className?: string;\n outputWidth?: number; // px of output canvas\n outputHeight?: number;\n showPreview?: boolean;\n}\n\nexport interface ImageCropHandle {\n crop: () => void;\n reset: () => void;\n}\n\n// Clamp helper\nconst clamp = (v: number, min: number, max: number) => Math.max(min, Math.min(max, v));\n\nexport const ImageCrop = forwardRef<ImageCropHandle, ImageCropProps>(\n ({\n src,\n aspectRatio = null,\n onCrop,\n onCancel,\n className,\n outputWidth,\n outputHeight,\n showPreview = true,\n }, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const previewRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imgRef = useRef<HTMLImageElement | null>(null);\n\n // Crop box in canvas-pixel coordinates\n const [cropBox, setCropBox] = useState({ x: 0, y: 0, w: 0, h: 0 });\n const [zoom, setZoom] = useState(1);\n const [imgOffset, setImgOffset] = useState({ x: 0, y: 0 });\n const [imgSize, setImgSize] = useState({ w: 0, h: 0 });\n const [loaded, setLoaded] = useState(false);\n\n // Drag state refs (avoid re-renders during mouse move)\n const dragging = useRef<null | 'move' | 'nw' | 'ne' | 'sw' | 'se' | 'img'>(null);\n const dragStart = useRef({ mx: 0, my: 0, bx: 0, by: 0, bw: 0, bh: 0, ox: 0, oy: 0 });\n\n /* ─── Load image ─── */\n useEffect(() => {\n setLoaded(false);\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n imgRef.current = img;\n setLoaded(true);\n };\n img.src = src;\n }, [src]);\n\n /* ─── Draw on canvas whenever relevant state changes ─── */\n const draw = useCallback(() => {\n const canvas = canvasRef.current;\n const img = imgRef.current;\n if (!canvas || !img) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw image\n ctx.drawImage(img, imgOffset.x, imgOffset.y, imgSize.w, imgSize.h);\n\n // Draw dark overlay outside crop\n ctx.save();\n ctx.fillStyle = 'rgba(0,0,0,0.5)';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // Cut-out the crop area (clear overlay inside crop)\n ctx.globalCompositeOperation = 'destination-out';\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.fillRect(cropBox.x, cropBox.y, cropBox.w, cropBox.h);\n ctx.restore();\n\n // Redraw image inside crop (on top of the cut-out)\n ctx.save();\n ctx.beginPath();\n ctx.rect(cropBox.x, cropBox.y, cropBox.w, cropBox.h);\n ctx.clip();\n ctx.drawImage(img, imgOffset.x, imgOffset.y, imgSize.w, imgSize.h);\n ctx.restore();\n\n // Border + handles\n ctx.strokeStyle = 'rgba(255,255,255,0.9)';\n ctx.lineWidth = 1.5;\n ctx.strokeRect(cropBox.x, cropBox.y, cropBox.w, cropBox.h);\n\n // Rule of thirds\n ctx.strokeStyle = 'rgba(255,255,255,0.25)';\n ctx.lineWidth = 0.5;\n for (let i = 1; i < 3; i++) {\n const tx = cropBox.x + (cropBox.w / 3) * i;\n const ty = cropBox.y + (cropBox.h / 3) * i;\n ctx.beginPath(); ctx.moveTo(tx, cropBox.y); ctx.lineTo(tx, cropBox.y + cropBox.h); ctx.stroke();\n ctx.beginPath(); ctx.moveTo(cropBox.x, ty); ctx.lineTo(cropBox.x + cropBox.w, ty); ctx.stroke();\n }\n\n // Corner handles\n const hs = 8;\n ctx.fillStyle = 'white';\n ctx.strokeStyle = '#3B82F6';\n ctx.lineWidth = 1.5;\n [\n [cropBox.x, cropBox.y],\n [cropBox.x + cropBox.w, cropBox.y],\n [cropBox.x, cropBox.y + cropBox.h],\n [cropBox.x + cropBox.w, cropBox.y + cropBox.h],\n ].forEach(([hx, hy]) => {\n ctx.fillRect(hx - hs / 2, hy - hs / 2, hs, hs);\n ctx.strokeRect(hx - hs / 2, hy - hs / 2, hs, hs);\n });\n\n // Update preview\n drawPreview();\n }, [cropBox, imgOffset, imgSize]);\n\n const drawPreview = useCallback(() => {\n const preview = previewRef.current;\n const img = imgRef.current;\n if (!preview || !img || !showPreview) return;\n const ctx = preview.getContext('2d');\n if (!ctx) return;\n\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n // Compute what portion of the original image corresponds to crop box\n const scaleX = img.naturalWidth / imgSize.w;\n const scaleY = img.naturalHeight / imgSize.h;\n\n const srcX = (cropBox.x - imgOffset.x) * scaleX;\n const srcY = (cropBox.y - imgOffset.y) * scaleY;\n const srcW = cropBox.w * scaleX;\n const srcH = cropBox.h * scaleY;\n\n ctx.clearRect(0, 0, preview.width, preview.height);\n if (srcW > 0 && srcH > 0) {\n ctx.drawImage(img, srcX, srcY, srcW, srcH, 0, 0, preview.width, preview.height);\n }\n }, [cropBox, imgOffset, imgSize, showPreview]);\n\n /* ─── Initialize canvas & crop box once image loads ─── */\n useEffect(() => {\n if (!loaded || !imgRef.current) return;\n const img = imgRef.current;\n const container = containerRef.current;\n if (!container) return;\n\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const cw = container.clientWidth;\n const ch = Math.round(cw * 0.65);\n canvas.width = cw;\n canvas.height = ch;\n\n // Fit image\n const scale = Math.min(cw / img.naturalWidth, ch / img.naturalHeight) * zoom;\n const iw = img.naturalWidth * scale;\n const ih = img.naturalHeight * scale;\n const ox = (cw - iw) / 2;\n const oy = (ch - ih) / 2;\n\n setImgSize({ w: iw, h: ih });\n setImgOffset({ x: ox, y: oy });\n\n // Default crop = 80% of image\n const pad = 0.1;\n let bw = iw * (1 - 2 * pad);\n let bh = aspectRatio ? bw / aspectRatio : ih * (1 - 2 * pad);\n if (aspectRatio && bh > ih * (1 - 2 * pad)) {\n bh = ih * (1 - 2 * pad);\n bw = bh * aspectRatio;\n }\n const bx = ox + (iw - bw) / 2;\n const by = oy + (ih - bh) / 2;\n setCropBox({ x: bx, y: by, w: bw, h: bh });\n }, [loaded, zoom]);\n\n useEffect(() => { draw(); }, [draw]);\n\n /* ─── Hit testing ─── */\n const getHandle = (mx: number, my: number) => {\n const hs = 12;\n const { x, y, w, h } = cropBox;\n if (Math.abs(mx - x) < hs && Math.abs(my - y) < hs) return 'nw';\n if (Math.abs(mx - (x + w)) < hs && Math.abs(my - y) < hs) return 'ne';\n if (Math.abs(mx - x) < hs && Math.abs(my - (y + h)) < hs) return 'sw';\n if (Math.abs(mx - (x + w)) < hs && Math.abs(my - (y + h)) < hs) return 'se';\n if (mx > x && mx < x + w && my > y && my < y + h) return 'move';\n return null;\n };\n\n const canvasCoords = (e: React.MouseEvent<HTMLCanvasElement>) => {\n const rect = canvasRef.current!.getBoundingClientRect();\n return { mx: e.clientX - rect.left, my: e.clientY - rect.top };\n };\n\n const onMouseDown = (e: React.MouseEvent<HTMLCanvasElement>) => {\n const { mx, my } = canvasCoords(e);\n const h = getHandle(mx, my);\n if (h) {\n dragging.current = h;\n dragStart.current = {\n mx, my,\n bx: cropBox.x, by: cropBox.y,\n bw: cropBox.w, bh: cropBox.h,\n ox: imgOffset.x, oy: imgOffset.y,\n };\n }\n };\n\n const onMouseMove = (e: React.MouseEvent<HTMLCanvasElement>) => {\n if (!dragging.current) return;\n const { mx, my } = canvasCoords(e);\n const dx = mx - dragStart.current.mx;\n const dy = my - dragStart.current.my;\n const { bx, by, bw, bh, ox, oy } = dragStart.current;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const minSize = 20;\n\n setCropBox(prev => {\n let { x, y, w, h } = { x: bx, y: by, w: bw, h: bh };\n\n const applyAspect = (nw: number, nh: number) => {\n if (!aspectRatio) return { nw, nh };\n return { nw, nh: nw / aspectRatio };\n };\n\n if (dragging.current === 'move') {\n x = clamp(bx + dx, imgOffset.x, imgOffset.x + imgSize.w - w);\n y = clamp(by + dy, imgOffset.y, imgOffset.y + imgSize.h - h);\n } else if (dragging.current === 'se') {\n let nw = Math.max(minSize, bw + dx);\n let nh = Math.max(minSize, bh + dy);\n ({ nw, nh } = applyAspect(nw, nh));\n w = Math.min(nw, imgOffset.x + imgSize.w - x);\n h = Math.min(nh, imgOffset.y + imgSize.h - y);\n } else if (dragging.current === 'sw') {\n let nw = Math.max(minSize, bw - dx);\n let nh = Math.max(minSize, bh + dy);\n ({ nw, nh } = applyAspect(nw, nh));\n x = Math.max(imgOffset.x, bx + bw - nw);\n w = bx + bw - x;\n h = Math.min(nh, imgOffset.y + imgSize.h - y);\n } else if (dragging.current === 'ne') {\n let nw = Math.max(minSize, bw + dx);\n let nh = Math.max(minSize, bh - dy);\n ({ nw, nh } = applyAspect(nw, nh));\n y = Math.max(imgOffset.y, by + bh - nh);\n w = Math.min(nw, imgOffset.x + imgSize.w - x);\n h = by + bh - y;\n } else if (dragging.current === 'nw') {\n let nw = Math.max(minSize, bw - dx);\n let nh = Math.max(minSize, bh - dy);\n ({ nw, nh } = applyAspect(nw, nh));\n x = Math.max(imgOffset.x, bx + bw - nw);\n y = Math.max(imgOffset.y, by + bh - nh);\n w = bx + bw - x;\n h = by + bh - y;\n }\n\n return { x, y, w: Math.max(minSize, w), h: Math.max(minSize, h) };\n });\n };\n\n const onMouseUp = () => { dragging.current = null; };\n\n /* ─── Cursor style ─── */\n const [cursor, setCursor] = useState('default');\n const onMouseMoveCursor = (e: React.MouseEvent<HTMLCanvasElement>) => {\n const { mx, my } = canvasCoords(e);\n const h = getHandle(mx, my);\n const map: Record<string, string> = {\n nw: 'nw-resize', ne: 'ne-resize', sw: 'sw-resize', se: 'se-resize',\n move: 'move', img: 'grab',\n };\n setCursor(h ? map[h] : 'default');\n onMouseMove(e);\n };\n\n /* ─── Crop action ─── */\n const doCrop = useCallback(() => {\n const img = imgRef.current;\n if (!img || !onCrop) return;\n\n const scaleX = img.naturalWidth / imgSize.w;\n const scaleY = img.naturalHeight / imgSize.h;\n\n const srcX = (cropBox.x - imgOffset.x) * scaleX;\n const srcY = (cropBox.y - imgOffset.y) * scaleY;\n const srcW = cropBox.w * scaleX;\n const srcH = cropBox.h * scaleY;\n\n const out = document.createElement('canvas');\n out.width = outputWidth ?? Math.round(srcW);\n out.height = outputHeight ?? Math.round(srcH);\n const ctx = out.getContext('2d')!;\n ctx.drawImage(img, srcX, srcY, srcW, srcH, 0, 0, out.width, out.height);\n\n out.toBlob(blob => {\n if (blob) {\n const cropArea: CropArea = {\n x: srcX / img.naturalWidth,\n y: srcY / img.naturalHeight,\n width: srcW / img.naturalWidth,\n height: srcH / img.naturalHeight,\n };\n onCrop(blob, cropArea);\n }\n }, 'image/png');\n }, [cropBox, imgOffset, imgSize, outputWidth, outputHeight, onCrop]);\n\n const doReset = useCallback(() => {\n setZoom(1);\n setLoaded(false);\n setTimeout(() => setLoaded(true), 10);\n }, []);\n\n useImperativeHandle(ref, () => ({ crop: doCrop, reset: doReset }));\n\n /* ─── Zoom ─── */\n const handleZoom = (delta: number) => {\n setZoom(z => clamp(z + delta, 0.3, 3));\n };\n\n return (\n <div className={cn('flex flex-col gap-3 w-full', className)}>\n {/* Canvas */}\n <div ref={containerRef} className=\"relative w-full rounded-xl overflow-hidden bg-gray-900 shadow-inner\">\n <canvas\n ref={canvasRef}\n className=\"w-full block\"\n style={{ cursor }}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMoveCursor}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n />\n {!loaded && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"w-8 h-8 border-4 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n </div>\n )}\n </div>\n\n {/* Controls row */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n {/* Zoom */}\n <div className=\"flex items-center gap-1.5 bg-gray-100 rounded-lg p-1\">\n <button\n type=\"button\"\n onClick={() => handleZoom(-0.1)}\n className=\"w-7 h-7 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\"\n title=\"Zoom out\"\n >\n <ZoomOut className=\"w-4 h-4\" />\n </button>\n <span className=\"text-xs font-medium text-gray-600 w-10 text-center select-none\">\n {Math.round(zoom * 100)}%\n </span>\n <button\n type=\"button\"\n onClick={() => handleZoom(0.1)}\n className=\"w-7 h-7 flex items-center justify-center rounded-md hover:bg-white transition-colors text-gray-600\"\n title=\"Zoom in\"\n >\n <ZoomIn className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Reset */}\n <button\n type=\"button\"\n onClick={doReset}\n className=\"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-gray-300 bg-white hover:bg-gray-50 text-gray-600 transition-colors\"\n >\n <RotateCcw className=\"w-3.5 h-3.5\" />\n Reset\n </button>\n\n <div className=\"flex-1\" />\n\n {/* Cancel */}\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"flex items-center gap-1.5 px-4 py-1.5 text-sm rounded-lg border border-gray-300 bg-white hover:bg-gray-50 text-gray-600 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n Cancel\n </button>\n )}\n\n {/* Crop */}\n {onCrop && (\n <button\n type=\"button\"\n onClick={doCrop}\n className=\"flex items-center gap-1.5 px-4 py-1.5 text-sm rounded-lg bg-blue-600 hover:bg-blue-700 text-white font-medium transition-colors shadow-sm\"\n >\n <Check className=\"w-4 h-4\" />\n Crop\n </button>\n )}\n </div>\n\n {/* Live preview */}\n {showPreview && (\n <div className=\"flex items-start gap-3\">\n <span className=\"text-xs text-gray-500 font-medium mt-1\">Preview</span>\n <div className=\"rounded-lg overflow-hidden border border-gray-200 shadow-sm bg-gray-50\">\n <canvas\n ref={previewRef}\n width={120}\n height={aspectRatio ? Math.round(120 / aspectRatio) : 80}\n className=\"block\"\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nImageCrop.displayName = 'ImageCrop';\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateEmail: ValidatorFunction = (value) => {\n if (!value) return \"Email is required\";\n if (typeof value !== \"string\") return \"Email must be a string\";\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return \"Please enter a valid email address\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\n// Validates a URL string for an image, or a File object\nexport const validateImage: ValidatorFunction = (value) => {\n if (!value) return \"Image is required\";\n \n if (typeof value === \"string\") {\n try {\n const url = new URL(value);\n const validExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'];\n const hasValidExtension = validExtensions.some(ext => \n url.pathname.toLowerCase().endsWith(ext)\n );\n \n if (!hasValidExtension) {\n return \"Image URL must end with a valid extension (.jpg, .png, etc.)\";\n }\n } catch (e) {\n return \"Must be a valid URL string or a File object\";\n }\n } else if (value instanceof File) {\n if (!value.type.startsWith('image/')) {\n return \"File must be an image\";\n }\n \n // Check size (e.g., max 5MB)\n const maxSize = 5 * 1024 * 1024; // 5MB\n if (value.size > maxSize) {\n return \"Image size must be less than 5MB\";\n }\n } else {\n return \"Invalid image format\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateLongDescription: ValidatorFunction = (value) => {\n if (!value) return \"Long description is required\";\n if (typeof value !== \"string\") return \"Description must be a string\";\n \n if (value.length < 50) return \"Description must be at least 50 characters long\";\n if (value.length > 2000) return \"Description must be less than 2000 characters long\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateName: ValidatorFunction = (value) => {\n if (!value) return \"Name is required\";\n if (typeof value !== \"string\") return \"Name must be a string\";\n \n if (value.trim().length < 2) return \"Name must be at least 2 characters long\";\n if (value.length > 50) return \"Name must be less than 50 characters long\";\n \n // Allow letters, spaces, hyphens and apostrophes\n const nameRegex = /^[a-zA-Z\\s\\-']+$/;\n if (!nameRegex.test(value)) {\n return \"Name can only contain letters, spaces, hyphens, and apostrophes\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validatePassword: ValidatorFunction = (value) => {\n if (!value) return \"Password is required\";\n if (typeof value !== \"string\") return \"Password must be a string\";\n \n if (value.length < 8) return \"Password must be at least 8 characters long\";\n \n const hasUppercase = /[A-Z]/.test(value);\n const hasLowercase = /[a-z]/.test(value);\n const hasNumbers = /\\d/.test(value);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(value);\n \n if (!hasUppercase) return \"Password must contain at least one uppercase letter\";\n if (!hasLowercase) return \"Password must contain at least one lowercase letter\";\n if (!hasNumbers) return \"Password must contain at least one number\";\n if (!hasSpecialChar) return \"Password must contain at least one special character\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateRequired: ValidatorFunction = (value) => {\n if (value === undefined || value === null || value === \"\") {\n return \"This field is required\";\n }\n \n if (Array.isArray(value) && value.length === 0) {\n return \"This field requires at least one item\";\n }\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateShortDescription: ValidatorFunction = (value) => {\n if (!value) return \"Short description is required\";\n if (typeof value !== \"string\") return \"Description must be a string\";\n \n if (value.length < 10) return \"Description must be at least 10 characters long\";\n if (value.length > 160) return \"Description must be less than 160 characters long\";\n \n return undefined;\n};\n","export type ValidatorFunction = (value: any) => string | undefined;\n\nexport const validateSlug: ValidatorFunction = (value) => {\n if (!value) return \"Slug is required\";\n if (typeof value !== \"string\") return \"Slug must be a string\";\n \n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(value)) {\n return \"Slug can only contain lowercase letters, numbers, and hyphens\";\n }\n \n if (value.length < 3) return \"Slug must be at least 3 characters long\";\n if (value.length > 50) return \"Slug must be less than 50 characters long\";\n \n return undefined;\n};\n","import type { ValidatorFunction } from \"./slug\";\n\nexport const validateUrl: ValidatorFunction = (value) => {\n if (!value) return \"URL is required\";\n if (typeof value !== \"string\") return \"URL must be a string\";\n \n try {\n new URL(value);\n } catch (e) {\n return \"Please enter a valid URL (e.g. https://example.com)\";\n }\n \n return undefined;\n};\n"],"mappings":"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","names":["Calendar","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","jsPDF","autoTable","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","value","import_react","import_lucide_react","import_jsx_runtime","FileIcon","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","FileIcon","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","Calendar","year","month","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","toast","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","container","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","label","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","COLORS","d","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime"]}