@beyondcorp/beyond-ui 1.2.85 → 1.2.89
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/components/Alert/Alert.js +5 -5
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Avatar/Avatar.js +1 -1
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Badge/Badge.js +6 -6
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Button/Button.js +9 -9
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Card/Card.js +5 -5
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +1 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/DashboardHeader/DashboardHeader.js +5 -5
- package/dist/components/DashboardHeader/DashboardHeader.js.map +1 -1
- package/dist/components/DashboardLayout/DashboardLayout.js +1 -1
- package/dist/components/DashboardLayout/DashboardLayout.js.map +1 -1
- package/dist/components/DataTable/DataTable.js +13 -13
- package/dist/components/DataTable/DataTable.js.map +1 -1
- package/dist/components/Input/Input.js +4 -4
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Modal/Modal.js +3 -3
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Navbar/Navbar.js +5 -5
- package/dist/components/Navbar/Navbar.js.map +1 -1
- package/dist/components/PageLayout/PageLayout.js +8 -8
- package/dist/components/PageLayout/PageLayout.js.map +1 -1
- package/dist/components/ProfileManagement/ProfileCard.js +1 -1
- package/dist/components/ProfileManagement/ProfileCard.js.map +1 -1
- package/dist/components/Radio/Radio.js +2 -2
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Select/Select.js +4 -4
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.js +5 -5
- package/dist/components/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/Sidebar/SidebarHeader.js +1 -1
- package/dist/components/Sidebar/SidebarHeader.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +3 -3
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Spinner/Spinner.js +2 -2
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/StatsCard/StatsCard.js +4 -4
- package/dist/components/StatsCard/StatsCard.js.map +1 -1
- package/dist/components/Switch/Switch.js +2 -2
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Tabs/Tabs.js +6 -6
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Textarea/Textarea.js +4 -4
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Toast/Toast.js +6 -6
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useState, useMemo, useCallback } from \"react\";\nimport { \n ChevronUp, \n ChevronDown, \n Search, \n Filter, \n ChevronLeft, \n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n Check,\n Minus\n} from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button\";\nimport { Input } from \"../Input\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Badge } from \"../Badge\";\nimport { Spinner } from \"../Spinner\";\nimport { Skeleton } from \"../Skeleton\";\nimport { Card, CardContent } from \"../Card\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { Select } from \"../Select\";\nimport type {\n DataTableProps,\n Column,\n FilterValue,\n SortConfig,\n PaginationConfig,\n RowSelection\n} from \"./DataTable.types\";\n\nconst tableVariants = cva(\n \"w-full border-collapse bg-white\",\n {\n variants: {\n size: {\n small: \"text-xs\",\n middle: \"text-sm\",\n large: \"text-base\",\n },\n bordered: {\n true: \"border border-gray-200\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n bordered: false,\n },\n }\n);\n\nconst cellVariants = cva(\n \"border-b border-gray-200 transition-colors\",\n {\n variants: {\n size: {\n small: \"px-2 py-1\",\n middle: \"px-4 py-3\",\n large: \"px-6 py-4\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n type: {\n header: \"bg-gray-50 font-semibold text-gray-900 border-b-2 border-gray-200\",\n body: \"text-gray-700 hover:bg-gray-50\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n align: \"left\",\n type: \"body\",\n },\n }\n);\n\n// Filter component for individual columns\nconst ColumnFilter = <T extends Record<string, any>>({\n column,\n value,\n onChange,\n}: {\n column: Column<T>;\n value: any;\n onChange: (value: any) => void;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [tempValue, setTempValue] = useState(value || '');\n\n const handleApply = () => {\n onChange(tempValue);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setTempValue('');\n onChange('');\n setIsOpen(false);\n };\n\n if (!column.filterable) return null;\n\n return (\n <div className=\"relative inline-block\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"p-1 h-6 w-6\",\n value && \"text-primary-600\"\n )}\n >\n <Filter className=\"h-3 w-3\" />\n </Button>\n \n {isOpen && (\n <>\n <div \n className=\"fixed inset-0 z-10\" \n onClick={() => setIsOpen(false)}\n />\n <div className=\"absolute top-full left-0 z-20 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg p-3 min-w-[200px]\">\n {column.filterType === 'select' && column.filterOptions ? (\n <div className=\"space-y-2\">\n {column.filterOptions.map((option) => (\n <label key={option.value} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={tempValue === option.value}\n onChange={() => setTempValue(\n tempValue === option.value ? '' : option.value\n )}\n />\n <span className=\"text-sm\">{option.label}</span>\n </label>\n ))}\n </div>\n ) : (\n <Input\n placeholder={`Filter ${column.title}`}\n value={tempValue}\n onChange={(e) => setTempValue(e.target.value)}\n className=\"mb-2\"\n />\n )}\n \n <div className=\"flex justify-end space-x-2 mt-3\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\n Clear\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n};\n\n// Pagination component\nconst TablePagination: React.FC<{\n pagination: PaginationConfig;\n onChange: (page: number, pageSize: number) => void;\n}> = ({ pagination, onChange }) => {\n const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;\n const totalPages = Math.ceil(total / pageSize);\n const startRecord = (current - 1) * pageSize + 1;\n const endRecord = Math.min(current * pageSize, total);\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisible = 5;\n \n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n const start = Math.max(1, current - 2);\n const end = Math.min(totalPages, start + maxVisible - 1);\n \n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n \n return pages;\n };\n\n // Convert pageSizeOptions to SelectOption format\n const selectOptions = pageSizeOptions.map(size => ({\n label: String(size),\n value: String(size),\n }));\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 bg-background border-t border-border\">\n <div className=\"flex items-center space-x-4\">\n <span className=\"text-sm text-foreground\">\n Showing {startRecord} to {endRecord} of {total} results\n </span>\n \n {showSizeChanger && (\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-sm text-foreground\">Show</span>\n <Select\n options={selectOptions}\n value={String(pageSize)}\n onChange={e => onChange(1, Number(e.target.value))}\n variant=\"default\"\n selectSize=\"sm\"\n aria-label=\"Select number of items per page\"\n />\n <span className=\"text-sm text-foreground\">per page</span>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center space-x-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(1, pageSize)}\n disabled={current === 1}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current - 1, pageSize)}\n disabled={current === 1}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n \n {getPageNumbers().map(page => (\n <Button\n key={page}\n variant={current === page ? \"primary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => onChange(page, pageSize)}\n className=\"min-w-[32px]\"\n aria-label={`Go to page ${page}`}\n >\n {page}\n </Button>\n ))}\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current + 1, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(totalPages, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n};\n\nexport const DataTable = <T extends Record<string, any>>({\n columns,\n dataSource,\n loading = false,\n rowKey = 'id',\n pagination = { current: 1, pageSize: 10, total: 0 },\n rowSelection,\n size = 'middle',\n bordered = false,\n showHeader = true,\n title,\n footer,\n className,\n onSort,\n onFilter,\n onChange,\n ...props\n}: DataTableProps<T>) => {\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: '', direction: null });\n const [filters, setFilters] = useState<FilterValue>({});\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n );\n\n // Get row key function\n const getRowKey = useCallback((record: T, index: number): React.Key => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || index;\n }, [rowKey]);\n\n // Handle sorting\n const handleSort = useCallback((columnKey: string) => {\n let newDirection: 'asc' | 'desc' | null;\n if (sortConfig.key !== columnKey) {\n newDirection = 'asc';\n } else if (sortConfig.direction === 'asc') {\n newDirection = 'desc';\n } else if (sortConfig.direction === 'desc') {\n newDirection = null;\n } else {\n newDirection = 'asc';\n }\n const newSortConfig: SortConfig = { key: columnKey, direction: newDirection };\n setSortConfig(newSortConfig);\n onSort?.(newSortConfig);\n onChange?.(pagination as PaginationConfig, filters, newSortConfig);\n }, [sortConfig, pagination, filters, onSort, onChange]);\n\n // Handle filtering\n const handleFilter = useCallback((columnKey: string, value: any) => {\n const newFilters = { ...filters };\n if (value === '' || value === null || value === undefined) {\n delete newFilters[columnKey];\n } else {\n newFilters[columnKey] = value;\n }\n \n setFilters(newFilters);\n onFilter?.(newFilters);\n onChange?.(pagination as PaginationConfig, newFilters, sortConfig);\n }, [filters, pagination, sortConfig, onFilter, onChange]);\n\n // Handle row selection\n const handleRowSelect = useCallback((record: T, selected: boolean) => {\n const key = getRowKey(record, 0);\n let newSelectedKeys: React.Key[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedKeys = selected ? [key] : [];\n } else {\n newSelectedKeys = selected \n ? [...selectedRowKeys, key]\n : selectedRowKeys.filter(k => k !== key);\n }\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = dataSource.filter(item => \n newSelectedKeys.includes(getRowKey(item, 0))\n );\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, {} as Event);\n }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);\n\n // Handle select all\n const handleSelectAll = useCallback((selected: boolean) => {\n const newSelectedKeys = selected \n ? dataSource.map((item, index) => getRowKey(item, index))\n : [];\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = selected ? dataSource : [];\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);\n }, [dataSource, rowSelection, getRowKey]);\n\n // Filter and sort data\n const processedData = useMemo(() => {\n let result = [...dataSource];\n \n // Apply filters\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== '' && value !== null && value !== undefined) {\n result = result.filter(item => {\n const itemValue = item[key];\n if (typeof itemValue === 'string') {\n return itemValue.toLowerCase().includes(String(value).toLowerCase());\n }\n return itemValue === value;\n });\n }\n });\n \n // Apply sorting\n if (sortConfig.key && sortConfig.direction) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue === bValue) return 0;\n \n const comparison = aValue < bValue ? -1 : 1;\n return sortConfig.direction === 'asc' ? comparison : -comparison;\n });\n }\n \n return result;\n }, [dataSource, filters, sortConfig]);\n\n // Pagination logic\n const paginatedData = useMemo(() => {\n if (!pagination) return processedData;\n \n const { current, pageSize } = pagination;\n const startIndex = (current - 1) * pageSize;\n return processedData.slice(startIndex, startIndex + pageSize);\n }, [processedData, pagination]);\n\n // Update pagination total\n const currentPagination = useMemo(() => {\n if (!pagination) return false;\n return {\n ...pagination,\n total: processedData.length,\n };\n }, [pagination, processedData.length]);\n\n // Selection state\n const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;\n const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;\n\n // Mobile-first responsive: useBreakpoint to switch between table and card layouts\n const { isBelow } = useBreakpoint();\n\n if (loading) {\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex space-x-4\">\n <Skeleton className=\"h-4 w-8\" />\n <Skeleton className=\"h-4 flex-1\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n\n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\n {/* Card layout for mobile */}\n {isBelow('md') ? (\n <div className=\"space-y-4 p-2\">\n {paginatedData.length === 0 ? (\n <div className=\"text-gray-500 text-center py-8\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n\n return (\n <Card\n key={key}\n variant={isSelected ? \"elevated\" : \"default\"}\n padding=\"sm\"\n className={cn(\n \"transition-shadow\",\n isSelected && \"border-primary-600 shadow-lg\"\n )}\n >\n <CardContent className=\"space-y-2\">\n {rowSelection && (\n <div className=\"flex items-center mb-2\">\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n <span className=\"ml-2 text-xs text-gray-500\">Select</span>\n </div>\n )}\n {columns.map((column) => (\n <div key={column.key} className=\"flex justify-between items-center py-1 border-b last:border-b-0\">\n <span className=\"font-medium text-gray-700\">{column.title}</span>\n <span className=\"text-gray-900\">\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n })\n )}\n </div>\n ) : (\n // Table layout for desktop/tablet\n <div className=\"overflow-x-auto\">\n <table className={cn(tableVariants({ size, bordered }))}>\n {showHeader && (\n <thead>\n <tr>\n {rowSelection && (\n <th className={cn(cellVariants({ size, type: \"header\" }), \"w-12\")}>\n {rowSelection.type !== 'radio' && (\n <Checkbox\n checked={isAllSelected}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className={cn(isIndeterminate && \"indeterminate\")}\n />\n )}\n </th>\n )}\n \n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellVariants({\n size,\n align: column.align,\n type: \"header\"\n }),\n column.width && `w-[${column.width}]`\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <span>{column.title}</span>\n {column.sortable && (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex flex-col items-center hover:text-primary-600\"\n >\n <ChevronUp\n className={cn(\n \"h-3 w-3\",\n sortConfig.key === column.key && sortConfig.direction === 'asc'\n ? \"text-primary-600\"\n : \"text-gray-400\"\n )}\n />\n <ChevronDown\n className={cn(\n \"h-3 w-3 -mt-1\",\n sortConfig.key === column.key && sortConfig.direction === 'desc'\n ? \"text-primary-600\"\n : \"text-gray-400\"\n )}\n />\n </button>\n )}\n </div>\n \n <ColumnFilter\n column={column}\n value={filters[column.key]}\n onChange={(value) => handleFilter(column.key, value)}\n />\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n \n <tbody>\n {paginatedData.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (rowSelection ? 1 : 0)}\n className={cn(cellVariants({ size, align: \"center\" }), \"py-8\")}\n >\n <div className=\"text-gray-500\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <tr\n key={key}\n className={cn(\n \"hover:bg-gray-50 transition-colors\",\n isSelected && \"bg-primary-50\"\n )}\n {...(props.onRow?.(record, index) ?? {})}\n >\n {rowSelection && (\n <td className={cn(cellVariants({ size }))}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n </td>\n )}\n \n {columns.map((column) => (\n <td\n key={column.key}\n className={cn(cellVariants({\n size,\n align: column.align\n }))}\n >\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n )}\n {/* Always show pagination controls below data */}\n {currentPagination && (\n <div className=\"pt-2\">\n <TablePagination\n pagination={currentPagination}\n onChange={(page, pageSize) => {\n const newPagination = { ...currentPagination, current: page, pageSize };\n onChange?.(newPagination, filters, sortConfig);\n }}\n />\n </div>\n )}\n </div>\n\n {footer && <div className=\"mt-4\">{footer()}</div>}\n </div>\n );\n};\n\nDataTable.displayName = \"DataTable\";"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useState, useMemo, useCallback } from \"react\";\nimport { \n ChevronUp, \n ChevronDown, \n Search, \n Filter, \n ChevronLeft, \n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n Check,\n Minus\n} from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button\";\nimport { Input } from \"../Input\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Badge } from \"../Badge\";\nimport { Spinner } from \"../Spinner\";\nimport { Skeleton } from \"../Skeleton\";\nimport { Card, CardContent } from \"../Card\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { Select } from \"../Select\";\nimport type {\n DataTableProps,\n Column,\n FilterValue,\n SortConfig,\n PaginationConfig,\n RowSelection\n} from \"./DataTable.types\";\n\nconst tableVariants = cva(\n \"w-full border-collapse bg-white dark:bg-gray-900\",\n {\n variants: {\n size: {\n small: \"text-xs\",\n middle: \"text-sm\",\n large: \"text-base\",\n },\n bordered: {\n true: \"border border-gray-200 dark:border-gray-800\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n bordered: false,\n },\n }\n);\n\nconst cellVariants = cva(\n \"border-b border-gray-200 dark:border-gray-800 transition-colors\",\n {\n variants: {\n size: {\n small: \"px-2 py-1\",\n middle: \"px-4 py-3\",\n large: \"px-6 py-4\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n type: {\n header: \"bg-gray-50 dark:bg-gray-800/50 font-semibold text-gray-900 dark:text-gray-100 border-b-2 border-gray-200 dark:border-gray-800\",\n body: \"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800/50\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n align: \"left\",\n type: \"body\",\n },\n }\n);\n\n// Filter component for individual columns\nconst ColumnFilter = <T extends Record<string, any>>({\n column,\n value,\n onChange,\n}: {\n column: Column<T>;\n value: any;\n onChange: (value: any) => void;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [tempValue, setTempValue] = useState(value || '');\n\n const handleApply = () => {\n onChange(tempValue);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setTempValue('');\n onChange('');\n setIsOpen(false);\n };\n\n if (!column.filterable) return null;\n\n return (\n <div className=\"relative inline-block\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"p-1 h-6 w-6\",\n value && \"text-primary-600\"\n )}\n >\n <Filter className=\"h-3 w-3\" />\n </Button>\n \n {isOpen && (\n <>\n <div \n className=\"fixed inset-0 z-10\" \n onClick={() => setIsOpen(false)}\n />\n <div className=\"absolute top-full left-0 z-20 mt-1 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg shadow-lg p-3 min-w-[200px]\">\n {column.filterType === 'select' && column.filterOptions ? (\n <div className=\"space-y-2\">\n {column.filterOptions.map((option) => (\n <label key={option.value} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={tempValue === option.value}\n onChange={() => setTempValue(\n tempValue === option.value ? '' : option.value\n )}\n />\n <span className=\"text-sm dark:text-gray-300\">{option.label}</span>\n </label>\n ))}\n </div>\n ) : (\n <Input\n placeholder={`Filter ${column.title}`}\n value={tempValue}\n onChange={(e) => setTempValue(e.target.value)}\n className=\"mb-2\"\n />\n )}\n \n <div className=\"flex justify-end space-x-2 mt-3\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\n Clear\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n};\n\n// Pagination component\nconst TablePagination: React.FC<{\n pagination: PaginationConfig;\n onChange: (page: number, pageSize: number) => void;\n}> = ({ pagination, onChange }) => {\n const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;\n const totalPages = Math.ceil(total / pageSize);\n const startRecord = (current - 1) * pageSize + 1;\n const endRecord = Math.min(current * pageSize, total);\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisible = 5;\n \n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n const start = Math.max(1, current - 2);\n const end = Math.min(totalPages, start + maxVisible - 1);\n \n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n \n return pages;\n };\n\n // Convert pageSizeOptions to SelectOption format\n const selectOptions = pageSizeOptions.map(size => ({\n label: String(size),\n value: String(size),\n }));\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 bg-white dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800\">\n <div className=\"flex items-center space-x-4\">\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\n Showing {startRecord} to {endRecord} of {total} results\n </span>\n \n {showSizeChanger && (\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">Show</span>\n <Select\n options={selectOptions}\n value={String(pageSize)}\n onChange={e => onChange(1, Number(e.target.value))}\n variant=\"default\"\n selectSize=\"sm\"\n aria-label=\"Select number of items per page\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">per page</span>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center space-x-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(1, pageSize)}\n disabled={current === 1}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current - 1, pageSize)}\n disabled={current === 1}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n \n {getPageNumbers().map(page => (\n <Button\n key={page}\n variant={current === page ? \"primary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => onChange(page, pageSize)}\n className=\"min-w-[32px]\"\n aria-label={`Go to page ${page}`}\n >\n {page}\n </Button>\n ))}\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current + 1, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(totalPages, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n};\n\nexport const DataTable = <T extends Record<string, any>>({\n columns,\n dataSource,\n loading = false,\n rowKey = 'id',\n pagination = { current: 1, pageSize: 10, total: 0 },\n rowSelection,\n size = 'middle',\n bordered = false,\n showHeader = true,\n title,\n footer,\n className,\n onSort,\n onFilter,\n onChange,\n ...props\n}: DataTableProps<T>) => {\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: '', direction: null });\n const [filters, setFilters] = useState<FilterValue>({});\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n );\n\n // Get row key function\n const getRowKey = useCallback((record: T, index: number): React.Key => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || index;\n }, [rowKey]);\n\n // Handle sorting\n const handleSort = useCallback((columnKey: string) => {\n let newDirection: 'asc' | 'desc' | null;\n if (sortConfig.key !== columnKey) {\n newDirection = 'asc';\n } else if (sortConfig.direction === 'asc') {\n newDirection = 'desc';\n } else if (sortConfig.direction === 'desc') {\n newDirection = null;\n } else {\n newDirection = 'asc';\n }\n const newSortConfig: SortConfig = { key: columnKey, direction: newDirection };\n setSortConfig(newSortConfig);\n onSort?.(newSortConfig);\n onChange?.(pagination as PaginationConfig, filters, newSortConfig);\n }, [sortConfig, pagination, filters, onSort, onChange]);\n\n // Handle filtering\n const handleFilter = useCallback((columnKey: string, value: any) => {\n const newFilters = { ...filters };\n if (value === '' || value === null || value === undefined) {\n delete newFilters[columnKey];\n } else {\n newFilters[columnKey] = value;\n }\n \n setFilters(newFilters);\n onFilter?.(newFilters);\n onChange?.(pagination as PaginationConfig, newFilters, sortConfig);\n }, [filters, pagination, sortConfig, onFilter, onChange]);\n\n // Handle row selection\n const handleRowSelect = useCallback((record: T, selected: boolean) => {\n const key = getRowKey(record, 0);\n let newSelectedKeys: React.Key[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedKeys = selected ? [key] : [];\n } else {\n newSelectedKeys = selected \n ? [...selectedRowKeys, key]\n : selectedRowKeys.filter(k => k !== key);\n }\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = dataSource.filter(item => \n newSelectedKeys.includes(getRowKey(item, 0))\n );\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, {} as Event);\n }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);\n\n // Handle select all\n const handleSelectAll = useCallback((selected: boolean) => {\n const newSelectedKeys = selected \n ? dataSource.map((item, index) => getRowKey(item, index))\n : [];\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = selected ? dataSource : [];\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);\n }, [dataSource, rowSelection, getRowKey]);\n\n // Filter and sort data\n const processedData = useMemo(() => {\n let result = [...dataSource];\n \n // Apply filters\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== '' && value !== null && value !== undefined) {\n result = result.filter(item => {\n const itemValue = item[key];\n if (typeof itemValue === 'string') {\n return itemValue.toLowerCase().includes(String(value).toLowerCase());\n }\n return itemValue === value;\n });\n }\n });\n \n // Apply sorting\n if (sortConfig.key && sortConfig.direction) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue === bValue) return 0;\n \n const comparison = aValue < bValue ? -1 : 1;\n return sortConfig.direction === 'asc' ? comparison : -comparison;\n });\n }\n \n return result;\n }, [dataSource, filters, sortConfig]);\n\n // Pagination logic\n const paginatedData = useMemo(() => {\n if (!pagination) return processedData;\n \n const { current, pageSize } = pagination;\n const startIndex = (current - 1) * pageSize;\n return processedData.slice(startIndex, startIndex + pageSize);\n }, [processedData, pagination]);\n\n // Update pagination total\n const currentPagination = useMemo(() => {\n if (!pagination) return false;\n return {\n ...pagination,\n total: processedData.length,\n };\n }, [pagination, processedData.length]);\n\n // Selection state\n const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;\n const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;\n\n // Mobile-first responsive: useBreakpoint to switch between table and card layouts\n const { isBelow } = useBreakpoint();\n\n if (loading) {\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n <div className=\"border border-gray-200 dark:border-gray-800 rounded-lg overflow-hidden\">\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex space-x-4\">\n <Skeleton className=\"h-4 w-8\" />\n <Skeleton className=\"h-4 flex-1\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n\n <div className=\"border border-gray-200 dark:border-gray-800 rounded-lg overflow-hidden\">\n {/* Card layout for mobile */}\n {isBelow('md') ? (\n <div className=\"space-y-4 p-2\">\n {paginatedData.length === 0 ? (\n <div className=\"text-gray-500 dark:text-gray-400 text-center py-8\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n\n return (\n <Card\n key={key}\n variant={isSelected ? \"elevated\" : \"default\"}\n padding=\"sm\"\n className={cn(\n \"transition-shadow\",\n isSelected && \"border-primary-600 shadow-lg\"\n )}\n >\n <CardContent className=\"space-y-2\">\n {rowSelection && (\n <div className=\"flex items-center mb-2\">\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n <span className=\"ml-2 text-xs text-gray-500\">Select</span>\n </div>\n )}\n {columns.map((column) => (\n <div key={column.key} className=\"flex justify-between items-center py-1 border-b border-gray-200 dark:border-gray-800 last:border-b-0\">\n <span className=\"font-medium text-gray-700 dark:text-gray-300\">{column.title}</span>\n <span className=\"text-gray-900 dark:text-gray-100\">\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n })\n )}\n </div>\n ) : (\n // Table layout for desktop/tablet\n <div className=\"overflow-x-auto\">\n <table className={cn(tableVariants({ size, bordered }))}>\n {showHeader && (\n <thead>\n <tr>\n {rowSelection && (\n <th className={cn(cellVariants({ size, type: \"header\" }), \"w-12\")}>\n {rowSelection.type !== 'radio' && (\n <Checkbox\n checked={isAllSelected}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className={cn(isIndeterminate && \"indeterminate\")}\n />\n )}\n </th>\n )}\n \n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellVariants({\n size,\n align: column.align,\n type: \"header\"\n }),\n column.width && `w-[${column.width}]`\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <span>{column.title}</span>\n {column.sortable && (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex flex-col items-center hover:text-primary-600\"\n >\n <ChevronUp\n className={cn(\n \"h-3 w-3\",\n sortConfig.key === column.key && sortConfig.direction === 'asc'\n ? \"text-primary-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n />\n <ChevronDown\n className={cn(\n \"h-3 w-3 -mt-1\",\n sortConfig.key === column.key && sortConfig.direction === 'desc'\n ? \"text-primary-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n />\n </button>\n )}\n </div>\n \n <ColumnFilter\n column={column}\n value={filters[column.key]}\n onChange={(value) => handleFilter(column.key, value)}\n />\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n \n <tbody>\n {paginatedData.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (rowSelection ? 1 : 0)}\n className={cn(cellVariants({ size, align: \"center\" }), \"py-8\")}\n >\n <div className=\"text-gray-500\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <tr\n key={key}\n className={cn(\n \"hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors\",\n isSelected && \"bg-primary-50 dark:bg-primary-900/20\"\n )}\n {...(props.onRow?.(record, index) ?? {})}\n >\n {rowSelection && (\n <td className={cn(cellVariants({ size }))}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n </td>\n )}\n \n {columns.map((column) => (\n <td\n key={column.key}\n className={cn(cellVariants({\n size,\n align: column.align\n }))}\n >\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n )}\n {/* Always show pagination controls below data */}\n {currentPagination && (\n <div className=\"pt-2\">\n <TablePagination\n pagination={currentPagination}\n onChange={(page, pageSize) => {\n const newPagination = { ...currentPagination, current: page, pageSize };\n onChange?.(newPagination, filters, sortConfig);\n }}\n />\n </div>\n )}\n </div>\n\n {footer && <div className=\"mt-4\">{footer()}</div>}\n </div>\n );\n};\n\nDataTable.displayName = \"DataTable\";"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { cn } from '../../utils/cn.js';
|
|
5
5
|
|
|
6
|
-
const inputVariants = cva("flex w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
6
|
+
const inputVariants = cva("flex w-full rounded-md border bg-white dark:bg-gray-900 dark:text-white px-3 py-2 text-sm ring-offset-white dark:ring-offset-gray-900 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-gray-500 dark:placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
|
-
default: "border-gray-300",
|
|
10
|
-
error: "border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
-
success: "border-success-500 focus-visible:ring-success-500",
|
|
9
|
+
default: "border-gray-300 dark:border-gray-700",
|
|
10
|
+
error: "border-danger-500 dark:border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
+
success: "border-success-500 dark:border-success-500 focus-visible:ring-success-500",
|
|
12
12
|
},
|
|
13
13
|
inputSize: {
|
|
14
14
|
sm: "h-8 px-2 text-xs",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-gray-300\",\n error: \"border-danger-500 focus-visible:ring-danger-500\",\n success: \"border-success-500 focus-visible:ring-success-500\",\n },\n inputSize: {\n sm: \"h-8 px-2 text-xs\",\n md: \"h-10 px-3\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n }\n);\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n VariantProps<typeof inputVariants> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant, inputSize, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(inputVariants({ variant, inputSize, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };"],"names":["_jsx"],"mappings":";;;;;AAIA,MAAM,aAAa,GAAG,GAAG,CACvB,
|
|
1
|
+
{"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-white dark:bg-gray-900 dark:text-white px-3 py-2 text-sm ring-offset-white dark:ring-offset-gray-900 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-gray-500 dark:placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-gray-300 dark:border-gray-700\",\n error: \"border-danger-500 dark:border-danger-500 focus-visible:ring-danger-500\",\n success: \"border-success-500 dark:border-success-500 focus-visible:ring-success-500\",\n },\n inputSize: {\n sm: \"h-8 px-2 text-xs\",\n md: \"h-10 px-3\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n }\n);\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n VariantProps<typeof inputVariants> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant, inputSize, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(inputVariants({ variant, inputSize, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };"],"names":["_jsx"],"mappings":";;;;;AAIA,MAAM,aAAa,GAAG,GAAG,CACvB,+bAA+b,EAC/b;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,sCAAsC;AAC/C,YAAA,KAAK,EAAE,wEAAwE;AAC/E,YAAA,OAAO,EAAE,2EAA2E;AACrF,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,qBAAqB;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,IAAI;AAChB,KAAA;AACF,CAAA;AAOH,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AACzD,IAAA,QACEA,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,EAC/D,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,EAAA,CACT;AAEN,CAAC;AAEH,KAAK,CAAC,WAAW,GAAG,OAAO;;;;"}
|
|
@@ -3,7 +3,7 @@ import { X } from 'lucide-react';
|
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { cn } from '../../utils/cn.js';
|
|
5
5
|
|
|
6
|
-
const modalVariants = cva("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-white p-6 shadow-lg duration-200 sm:rounded-lg", {
|
|
6
|
+
const modalVariants = cva("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-lg duration-200 sm:rounded-lg", {
|
|
7
7
|
variants: {
|
|
8
8
|
size: {
|
|
9
9
|
sm: "max-w-sm",
|
|
@@ -26,8 +26,8 @@ const Modal = ({ open, onOpenChange, children, size, }) => {
|
|
|
26
26
|
return (jsxs(Fragment, { children: [jsx("div", { className: "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm", onClick: handleClose }), jsxs("div", { className: cn(modalVariants({ size })), children: [jsxs("button", { onClick: handleClose, className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:pointer-events-none", children: [jsx(X, { className: "h-4 w-4" }), jsx("span", { className: "sr-only", children: "Close" })] }), children] })] }));
|
|
27
27
|
};
|
|
28
28
|
const ModalHeader = ({ className, ...props }) => (jsx("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props }));
|
|
29
|
-
const ModalTitle = ({ className, ...props }) => (jsx("h2", { className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
|
|
30
|
-
const ModalDescription = ({ className, ...props }) => (jsx("p", { className: cn("text-sm text-gray-500", className), ...props }));
|
|
29
|
+
const ModalTitle = ({ className, ...props }) => (jsx("h2", { className: cn("text-lg font-semibold leading-none tracking-tight text-gray-900 dark:text-white", className), ...props }));
|
|
30
|
+
const ModalDescription = ({ className, ...props }) => (jsx("p", { className: cn("text-sm text-gray-500 dark:text-gray-400", className), ...props }));
|
|
31
31
|
const ModalContent = ({ className, ...props }) => (jsx("div", { className: cn("grid gap-4 py-4", className), ...props }));
|
|
32
32
|
const ModalFooter = ({ className, ...props }) => (jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props }));
|
|
33
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst modalVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-white p-6 shadow-lg duration-200 sm:rounded-lg\",\n {\n variants: {\n size: {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[95vw] max-h-[95vh]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\ninterface ModalProps extends VariantProps<typeof modalVariants> {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({ \n open, \n onOpenChange, \n children, \n size,\n}) => {\n const handleClose = () => {\n onOpenChange?.(false);\n };\n\n if (!open) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\"\n onClick={handleClose}\n />\n \n {/* Modal Content */}\n <div className={cn(modalVariants({ size }))}>\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:pointer-events-none\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n {children}\n </div>\n </>\n );\n};\n\nconst ModalHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\n\nconst ModalTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h2\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n);\n\nconst ModalDescription: React.FC<React.HTMLAttributes<HTMLParagraphElement>> = ({\n className,\n ...props\n}) => (\n <p\n className={cn(\"text-sm text-gray-500\", className)}\n {...props}\n />\n);\n\nconst ModalContent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div className={cn(\"grid gap-4 py-4\", className)} {...props} />\n);\n\nconst ModalFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\n\nexport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalContent,\n ModalFooter,\n modalVariants,\n};"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;AAKA,MAAM,aAAa,GAAG,GAAG,CACvB,
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst modalVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-lg duration-200 sm:rounded-lg\",\n {\n variants: {\n size: {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[95vw] max-h-[95vh]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\ninterface ModalProps extends VariantProps<typeof modalVariants> {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({ \n open, \n onOpenChange, \n children, \n size,\n}) => {\n const handleClose = () => {\n onOpenChange?.(false);\n };\n\n if (!open) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\"\n onClick={handleClose}\n />\n \n {/* Modal Content */}\n <div className={cn(modalVariants({ size }))}>\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:pointer-events-none\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n {children}\n </div>\n </>\n );\n};\n\nconst ModalHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\n\nconst ModalTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h2\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-gray-900 dark:text-white\",\n className\n )}\n {...props}\n />\n);\n\nconst ModalDescription: React.FC<React.HTMLAttributes<HTMLParagraphElement>> = ({\n className,\n ...props\n}) => (\n <p\n className={cn(\"text-sm text-gray-500 dark:text-gray-400\", className)}\n {...props}\n />\n);\n\nconst ModalContent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div className={cn(\"grid gap-4 py-4\", className)} {...props} />\n);\n\nconst ModalFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\n\nexport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalContent,\n ModalFooter,\n modalVariants,\n};"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;AAKA,MAAM,aAAa,GAAG,GAAG,CACvB,iNAAiN,EACjN;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,IAAI,EAAE,2BAA2B;AAClC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA;AASH,MAAM,KAAK,GAAyB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,IAAI,GACL,KAAI;IACH,MAAM,WAAW,GAAG,MAAK;AACvB,QAAA,YAAY,GAAG,KAAK,CAAC;AACvB,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,QACEA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CAEEC,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,iDAAiD,EAC3D,OAAO,EAAE,WAAW,EAAA,CACpB,EAGFF,cAAK,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,QAAA,EAAA,CACzCA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,6MAA6M,aAEvNE,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EACzBA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,CAAA,EAAA,CAC/B,EACR,QAAQ,CAAA,EAAA,CACL,CAAA,EAAA,CACL;AAEP;AAEA,MAAM,WAAW,GAAmD,CAAC,EACnE,SAAS,EACT,GAAG,KAAK,EACT,MACCA,aACE,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT;AAGJ,MAAM,UAAU,GAAuD,CAAC,EACtE,SAAS,EACT,GAAG,KAAK,EACT,MACCA,YACE,SAAS,EAAE,EAAE,CACX,iFAAiF,EACjF,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT;AAGJ,MAAM,gBAAgB,GAAyD,CAAC,EAC9E,SAAS,EACT,GAAG,KAAK,EACT,MACCA,WACE,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE,SAAS,CAAC,EAAA,GAChE,KAAK,EAAA,CACT;AAGJ,MAAM,YAAY,GAAmD,CAAC,EACpE,SAAS,EACT,GAAG,KAAK,EACT,MACCA,aAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,CAAI;AAGjE,MAAM,WAAW,GAAmD,CAAC,EACnE,SAAS,EACT,GAAG,KAAK,EACT,MACCA,aACE,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT;;;;"}
|
|
@@ -4,11 +4,11 @@ import { X, Menu } from 'lucide-react';
|
|
|
4
4
|
import { cva } from 'class-variance-authority';
|
|
5
5
|
import { cn } from '../../utils/cn.js';
|
|
6
6
|
|
|
7
|
-
const navbarVariants = cva("flex items-center justify-between w-full px-4 py-3 bg-white border-b border-gray-200", {
|
|
7
|
+
const navbarVariants = cva("flex items-center justify-between w-full px-4 py-3 bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800", {
|
|
8
8
|
variants: {
|
|
9
9
|
variant: {
|
|
10
|
-
default: "bg-white border-gray-200",
|
|
11
|
-
dark: "bg-gray-900 border-gray-700 text-white",
|
|
10
|
+
default: "bg-white dark:bg-gray-950 border-gray-200 dark:border-gray-800",
|
|
11
|
+
dark: "bg-gray-900 dark:bg-gray-950 border-gray-700 dark:border-gray-800 text-white",
|
|
12
12
|
transparent: "bg-transparent border-transparent",
|
|
13
13
|
},
|
|
14
14
|
size: {
|
|
@@ -24,10 +24,10 @@ const navbarVariants = cva("flex items-center justify-between w-full px-4 py-3 b
|
|
|
24
24
|
});
|
|
25
25
|
const Navbar = React.forwardRef(({ className, variant, size, logo, children, ...props }, ref) => {
|
|
26
26
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
27
|
-
return (jsxs("nav", { ref: ref, className: cn(navbarVariants({ variant, size }), className), ...props, children: [jsxs("div", { className: "flex items-center justify-between w-full", children: [logo && jsx("div", { className: "flex-shrink-0", children: logo }), jsx("div", { className: "hidden md:flex items-center space-x-4 ml-auto", children: children }), jsx("button", { className: "md:hidden p-2 rounded-md hover:bg-gray-100", onClick: () => setIsOpen(!isOpen), children: isOpen ? jsx(X, { className: "h-6 w-6" }) : jsx(Menu, { className: "h-6 w-6" }) })] }), isOpen && (jsx("div", { className: "md:hidden absolute top-full left-0 right-0 bg-white border-b border-gray-200 shadow-lg z-50", children: jsx("div", { className: "px-4 py-2 space-y-2", children: children }) }))] }));
|
|
27
|
+
return (jsxs("nav", { ref: ref, className: cn(navbarVariants({ variant, size }), className), ...props, children: [jsxs("div", { className: "flex items-center justify-between w-full", children: [logo && jsx("div", { className: "flex-shrink-0", children: logo }), jsx("div", { className: "hidden md:flex items-center space-x-4 ml-auto", children: children }), jsx("button", { className: "md:hidden p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800 dark:text-gray-300", onClick: () => setIsOpen(!isOpen), children: isOpen ? jsx(X, { className: "h-6 w-6" }) : jsx(Menu, { className: "h-6 w-6" }) })] }), isOpen && (jsx("div", { className: "md:hidden absolute top-full left-0 right-0 bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800 shadow-lg z-50", children: jsx("div", { className: "px-4 py-2 space-y-2", children: children }) }))] }));
|
|
28
28
|
});
|
|
29
29
|
Navbar.displayName = "Navbar";
|
|
30
|
-
const NavItem = React.forwardRef(({ className, ...props }, ref) => (jsx("a", { ref: ref, className: cn("text-gray-700 hover:text-primary-600 px-3 py-2 rounded-md text-sm font-medium transition-colors", className), ...props })));
|
|
30
|
+
const NavItem = React.forwardRef(({ className, ...props }, ref) => (jsx("a", { ref: ref, className: cn("text-gray-700 dark:text-gray-300 hover:text-primary-600 dark:hover:text-primary-400 px-3 py-2 rounded-md text-sm font-medium transition-colors", className), ...props })));
|
|
31
31
|
NavItem.displayName = "NavItem";
|
|
32
32
|
|
|
33
33
|
export { NavItem, Navbar, navbarVariants };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.js","sources":["../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Menu, X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst navbarVariants = cva(\n \"flex items-center justify-between w-full px-4 py-3 bg-white border-b border-gray-200\",\n {\n variants: {\n variant: {\n default: \"bg-white border-gray-200\",\n dark: \"bg-gray-900 border-gray-700 text-white\",\n transparent: \"bg-transparent border-transparent\",\n },\n size: {\n sm: \"px-4 py-2\",\n md: \"px-6 py-3\",\n lg: \"px-8 py-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface NavbarProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof navbarVariants> {\n logo?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n ({ className, variant, size, logo, children, ...props }, ref) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n return (\n <nav\n ref={ref}\n className={cn(navbarVariants({ variant, size }), className)}\n {...props}\n >\n <div className=\"flex items-center justify-between w-full\">\n {/* Logo */}\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center space-x-4 ml-auto\">\n {children}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n className=\"md:hidden p-2 rounded-md hover:bg-gray-100\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? <X className=\"h-6 w-6\" /> : <Menu className=\"h-6 w-6\" />}\n </button>\n </div>\n\n {/* Mobile Navigation */}\n {isOpen && (\n <div className=\"md:hidden absolute top-full left-0 right-0 bg-white border-b border-gray-200 shadow-lg z-50\">\n <div className=\"px-4 py-2 space-y-2\">\n {children}\n </div>\n </div>\n )}\n </nav>\n );\n }\n);\nNavbar.displayName = \"Navbar\";\n\nconst NavItem = React.forwardRef<\n HTMLAnchorElement,\n React.AnchorHTMLAttributes<HTMLAnchorElement>\n>(({ className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn(\n \"text-gray-700 hover:text-primary-600 px-3 py-2 rounded-md text-sm font-medium transition-colors\",\n className\n )}\n {...props}\n />\n));\nNavItem.displayName = \"NavItem\";\n\nexport { Navbar, NavItem, navbarVariants };"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAKA,MAAM,cAAc,GAAG,GAAG,CACxB,
|
|
1
|
+
{"version":3,"file":"Navbar.js","sources":["../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Menu, X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst navbarVariants = cva(\n \"flex items-center justify-between w-full px-4 py-3 bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800\",\n {\n variants: {\n variant: {\n default: \"bg-white dark:bg-gray-950 border-gray-200 dark:border-gray-800\",\n dark: \"bg-gray-900 dark:bg-gray-950 border-gray-700 dark:border-gray-800 text-white\",\n transparent: \"bg-transparent border-transparent\",\n },\n size: {\n sm: \"px-4 py-2\",\n md: \"px-6 py-3\",\n lg: \"px-8 py-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface NavbarProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof navbarVariants> {\n logo?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n ({ className, variant, size, logo, children, ...props }, ref) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n return (\n <nav\n ref={ref}\n className={cn(navbarVariants({ variant, size }), className)}\n {...props}\n >\n <div className=\"flex items-center justify-between w-full\">\n {/* Logo */}\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center space-x-4 ml-auto\">\n {children}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n className=\"md:hidden p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800 dark:text-gray-300\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? <X className=\"h-6 w-6\" /> : <Menu className=\"h-6 w-6\" />}\n </button>\n </div>\n\n {/* Mobile Navigation */}\n {isOpen && (\n <div className=\"md:hidden absolute top-full left-0 right-0 bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800 shadow-lg z-50\">\n <div className=\"px-4 py-2 space-y-2\">\n {children}\n </div>\n </div>\n )}\n </nav>\n );\n }\n);\nNavbar.displayName = \"Navbar\";\n\nconst NavItem = React.forwardRef<\n HTMLAnchorElement,\n React.AnchorHTMLAttributes<HTMLAnchorElement>\n>(({ className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn(\n \"text-gray-700 dark:text-gray-300 hover:text-primary-600 dark:hover:text-primary-400 px-3 py-2 rounded-md text-sm font-medium transition-colors\",\n className\n )}\n {...props}\n />\n));\nNavItem.displayName = \"NavItem\";\n\nexport { Navbar, NavItem, navbarVariants };"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAKA,MAAM,cAAc,GAAG,GAAG,CACxB,4HAA4H,EAC5H;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,gEAAgE;AACzE,YAAA,IAAI,EAAE,8EAA8E;AACpF,YAAA,WAAW,EAAE,mCAAmC;AACjD,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,WAAW;AAChB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA;AAUH,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AAC9D,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAEjD,QACEA,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAA,GACvD,KAAK,EAAA,QAAA,EAAA,CAETA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CAEtD,IAAI,IAAIC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAE,IAAI,EAAA,CAAO,EAGpDA,aAAK,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAC3D,QAAQ,EAAA,CACL,EAGNA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,sFAAsF,EAChG,OAAO,EAAE,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,EAAA,QAAA,EAEhC,MAAM,GAAGA,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,GAAGA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAC3D,CAAA,EAAA,CACL,EAGL,MAAM,KACLA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mIAAmI,YAChJA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,QAAQ,GACL,EAAA,CACF,CACP,CAAA,EAAA,CACG;AAEV,CAAC;AAEH,MAAM,CAAC,WAAW,GAAG,QAAQ;AAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAG9B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,gJAAgJ,EAChJ,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT,CACH;AACD,OAAO,CAAC,WAAW,GAAG,SAAS;;;;"}
|
|
@@ -6,12 +6,12 @@ import { cn } from '../../utils/cn.js';
|
|
|
6
6
|
const pageLayoutVariants = cva("min-h-screen flex flex-col", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
|
-
default: "bg-white",
|
|
10
|
-
centered: "bg-white",
|
|
11
|
-
sidebar: "bg-gray-50",
|
|
12
|
-
landing: "bg-gradient-to-br from-gray-50 to-white",
|
|
13
|
-
product: "bg-white",
|
|
14
|
-
blog: "bg-gray-50",
|
|
9
|
+
default: "bg-white dark:bg-gray-950",
|
|
10
|
+
centered: "bg-white dark:bg-gray-950",
|
|
11
|
+
sidebar: "bg-gray-50 dark:bg-gray-900",
|
|
12
|
+
landing: "bg-gradient-to-br from-gray-50 to-white dark:from-gray-900 dark:to-gray-950",
|
|
13
|
+
product: "bg-white dark:bg-gray-950",
|
|
14
|
+
blog: "bg-gray-50 dark:bg-gray-900",
|
|
15
15
|
},
|
|
16
16
|
maxWidth: {
|
|
17
17
|
none: "",
|
|
@@ -50,11 +50,11 @@ const contentVariants = cva("flex-1", {
|
|
|
50
50
|
},
|
|
51
51
|
});
|
|
52
52
|
// Individual section components
|
|
53
|
-
const PageHeader = ({ children, className, sticky = false, transparent = false, id, ...props }) => (jsx("header", { id: id, className: cn("w-full z-50 transition-all duration-300", sticky && "sticky top-0", transparent ? "bg-transparent" : "bg-white border-b border-gray-200", className), role: "banner", ...props, children: children }));
|
|
53
|
+
const PageHeader = ({ children, className, sticky = false, transparent = false, id, ...props }) => (jsx("header", { id: id, className: cn("w-full z-50 transition-all duration-300", sticky && "sticky top-0", transparent ? "bg-transparent" : "bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800", className), role: "banner", ...props, children: children }));
|
|
54
54
|
const PageHero = ({ children, className, fullHeight = false, backgroundImage, overlay = false, id, ...props }) => (jsxs("section", { id: id, className: cn("relative w-full flex items-center justify-center", fullHeight ? "min-h-screen" : "min-h-[60vh]", backgroundImage && "bg-cover bg-center bg-no-repeat", className), style: backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : undefined, role: "banner", ...props, children: [overlay && backgroundImage && (jsx("div", { className: "absolute inset-0 bg-black bg-opacity-40" })), jsx("div", { className: "relative z-10 w-full", children: children })] }));
|
|
55
55
|
const PageContent = ({ children, className, maxWidth = "xl", id, ...props }) => (jsx("main", { id: id, className: cn("flex-1 w-full", maxWidth === "sm" && "max-w-2xl mx-auto px-4", maxWidth === "md" && "max-w-4xl mx-auto px-4", maxWidth === "lg" && "max-w-6xl mx-auto px-4", maxWidth === "xl" && "max-w-7xl mx-auto px-4", maxWidth === "2xl" && "max-w-screen-2xl mx-auto px-4", maxWidth === "full" && "max-w-full px-4", className), role: "main", ...props, children: children }));
|
|
56
56
|
const PageSidebar = ({ children, className, position = "right", width = "md", id, ...props }) => (jsx("aside", { id: id, className: cn("flex-shrink-0", width === "sm" && "w-full lg:w-64", width === "md" && "w-full lg:w-80", width === "lg" && "w-full lg:w-96", position === "left" && "lg:order-first", className), role: "complementary", ...props, children: children }));
|
|
57
|
-
const PageFooter = ({ children, className, variant = "simple", id, ...props }) => (jsx("footer", { id: id, className: cn("w-full mt-auto", variant === "simple" && "bg-gray-50 border-t border-gray-200 py-8", variant === "detailed" && "bg-gray-900 text-white py-12", variant === "minimal" && "bg-white border-t border-gray-100 py-6", className), role: "contentinfo", ...props, children: children }));
|
|
57
|
+
const PageFooter = ({ children, className, variant = "simple", id, ...props }) => (jsx("footer", { id: id, className: cn("w-full mt-auto", variant === "simple" && "bg-gray-50 border-t border-gray-200 py-8", variant === "simple" && "bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800 py-8", variant === "detailed" && "bg-gray-900 dark:bg-gray-950 text-white py-12", variant === "minimal" && "bg-white dark:bg-gray-950 border-t border-gray-100 dark:border-gray-800 py-6", className), role: "contentinfo", ...props, children: children }));
|
|
58
58
|
const PageLayout = React.forwardRef(({ className, variant, maxWidth, contentLayout = "default", contentSpacing = "md", children, ...props }, ref) => {
|
|
59
59
|
return (jsx("div", { ref: ref, className: cn(pageLayoutVariants({ variant, maxWidth }), className), ...props, children: children }));
|
|
60
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageLayout.js","sources":["../../../src/components/PageLayout/PageLayout.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst pageLayoutVariants = cva(\n \"min-h-screen flex flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-white\",\n centered: \"bg-white\",\n sidebar: \"bg-gray-50\",\n landing: \"bg-gradient-to-br from-gray-50 to-white\",\n product: \"bg-white\",\n blog: \"bg-gray-50\",\n },\n maxWidth: {\n none: \"\",\n sm: \"max-w-screen-sm mx-auto\",\n md: \"max-w-screen-md mx-auto\",\n lg: \"max-w-screen-lg mx-auto\",\n xl: \"max-w-screen-xl mx-auto\",\n \"2xl\": \"max-w-screen-2xl mx-auto\",\n full: \"max-w-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n maxWidth: \"xl\",\n },\n }\n);\n\nconst contentVariants = cva(\n \"flex-1\",\n {\n variants: {\n layout: {\n default: \"w-full\",\n centered: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n sidebar: \"flex flex-col lg:flex-row gap-8 px-4 sm:px-6 lg:px-8\",\n fullWidth: \"w-full\",\n },\n spacing: {\n none: \"py-0\",\n sm: \"py-4\",\n md: \"py-8\",\n lg: \"py-12\",\n xl: \"py-16\",\n },\n },\n defaultVariants: {\n layout: \"default\",\n spacing: \"md\",\n },\n }\n);\n\n// Layout section interfaces\ninterface PageSection {\n id?: string;\n className?: string;\n children: React.ReactNode;\n}\n\ninterface HeaderProps extends PageSection {\n sticky?: boolean;\n transparent?: boolean;\n}\n\ninterface HeroProps extends PageSection {\n fullHeight?: boolean;\n backgroundImage?: string;\n overlay?: boolean;\n}\n\ninterface ContentProps extends PageSection {\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n}\n\ninterface SidebarProps extends PageSection {\n position?: \"left\" | \"right\";\n width?: \"sm\" | \"md\" | \"lg\";\n}\n\ninterface FooterProps extends PageSection {\n variant?: \"simple\" | \"detailed\" | \"minimal\";\n}\n\n// Individual section components\nconst PageHeader: React.FC<HeaderProps> = ({ \n children, \n className, \n sticky = false, \n transparent = false,\n id,\n ...props \n}) => (\n <header\n id={id}\n className={cn(\n \"w-full z-50 transition-all duration-300\",\n sticky && \"sticky top-0\",\n transparent ? \"bg-transparent\" : \"bg-white border-b border-gray-200\",\n className\n )}\n role=\"banner\"\n {...props}\n >\n {children}\n </header>\n);\n\nconst PageHero: React.FC<HeroProps> = ({ \n children, \n className, \n fullHeight = false,\n backgroundImage,\n overlay = false,\n id,\n ...props \n}) => (\n <section\n id={id}\n className={cn(\n \"relative w-full flex items-center justify-center\",\n fullHeight ? \"min-h-screen\" : \"min-h-[60vh]\",\n backgroundImage && \"bg-cover bg-center bg-no-repeat\",\n className\n )}\n style={backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : undefined}\n role=\"banner\"\n {...props}\n >\n {overlay && backgroundImage && (\n <div className=\"absolute inset-0 bg-black bg-opacity-40\" />\n )}\n <div className=\"relative z-10 w-full\">\n {children}\n </div>\n </section>\n);\n\nconst PageContent: React.FC<ContentProps> = ({ \n children, \n className, \n maxWidth = \"xl\",\n id,\n ...props \n}) => (\n <main\n id={id}\n className={cn(\n \"flex-1 w-full\",\n maxWidth === \"sm\" && \"max-w-2xl mx-auto px-4\",\n maxWidth === \"md\" && \"max-w-4xl mx-auto px-4\",\n maxWidth === \"lg\" && \"max-w-6xl mx-auto px-4\",\n maxWidth === \"xl\" && \"max-w-7xl mx-auto px-4\",\n maxWidth === \"2xl\" && \"max-w-screen-2xl mx-auto px-4\",\n maxWidth === \"full\" && \"max-w-full px-4\",\n className\n )}\n role=\"main\"\n {...props}\n >\n {children}\n </main>\n);\n\nconst PageSidebar: React.FC<SidebarProps> = ({ \n children, \n className, \n position = \"right\",\n width = \"md\",\n id,\n ...props \n}) => (\n <aside\n id={id}\n className={cn(\n \"flex-shrink-0\",\n width === \"sm\" && \"w-full lg:w-64\",\n width === \"md\" && \"w-full lg:w-80\",\n width === \"lg\" && \"w-full lg:w-96\",\n position === \"left\" && \"lg:order-first\",\n className\n )}\n role=\"complementary\"\n {...props}\n >\n {children}\n </aside>\n);\n\nconst PageFooter: React.FC<FooterProps> = ({ \n children, \n className, \n variant = \"simple\",\n id,\n ...props \n}) => (\n <footer\n id={id}\n className={cn(\n \"w-full mt-auto\",\n variant === \"simple\" && \"bg-gray-50 border-t border-gray-200 py-8\",\n variant === \"detailed\" && \"bg-gray-900 text-white py-12\",\n variant === \"minimal\" && \"bg-white border-t border-gray-100 py-6\",\n className\n )}\n role=\"contentinfo\"\n {...props}\n >\n {children}\n </footer>\n);\n\n// Main PageLayout component\nexport interface PageLayoutProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof pageLayoutVariants> {\n children: React.ReactNode;\n contentLayout?: VariantProps<typeof contentVariants>[\"layout\"];\n contentSpacing?: VariantProps<typeof contentVariants>[\"spacing\"];\n}\n\nconst PageLayout = React.forwardRef<HTMLDivElement, PageLayoutProps>(\n ({ \n className, \n variant, \n maxWidth, \n contentLayout = \"default\",\n contentSpacing = \"md\",\n children, \n ...props \n }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(pageLayoutVariants({ variant, maxWidth }), className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nPageLayout.displayName = \"PageLayout\";\n\n// Layout wrapper for content sections\nconst PageLayoutContent: React.FC<{\n children: React.ReactNode;\n layout?: VariantProps<typeof contentVariants>[\"layout\"];\n spacing?: VariantProps<typeof contentVariants>[\"spacing\"];\n className?: string;\n}> = ({ children, layout = \"default\", spacing = \"md\", className }) => (\n <div className={cn(contentVariants({ layout, spacing }), className)}>\n {children}\n </div>\n);\n\n// Export all components\nexport {\n PageLayout,\n PageLayoutContent,\n PageHeader,\n PageHero,\n PageContent,\n PageSidebar,\n PageFooter,\n pageLayoutVariants,\n contentVariants,\n type HeaderProps,\n type HeroProps,\n type ContentProps,\n type SidebarProps,\n type FooterProps,\n};\n\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PageLayout.js","sources":["../../../src/components/PageLayout/PageLayout.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst pageLayoutVariants = cva(\n \"min-h-screen flex flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-white dark:bg-gray-950\",\n centered: \"bg-white dark:bg-gray-950\",\n sidebar: \"bg-gray-50 dark:bg-gray-900\",\n landing: \"bg-gradient-to-br from-gray-50 to-white dark:from-gray-900 dark:to-gray-950\",\n product: \"bg-white dark:bg-gray-950\",\n blog: \"bg-gray-50 dark:bg-gray-900\",\n },\n maxWidth: {\n none: \"\",\n sm: \"max-w-screen-sm mx-auto\",\n md: \"max-w-screen-md mx-auto\",\n lg: \"max-w-screen-lg mx-auto\",\n xl: \"max-w-screen-xl mx-auto\",\n \"2xl\": \"max-w-screen-2xl mx-auto\",\n full: \"max-w-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n maxWidth: \"xl\",\n },\n }\n);\n\nconst contentVariants = cva(\n \"flex-1\",\n {\n variants: {\n layout: {\n default: \"w-full\",\n centered: \"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\",\n sidebar: \"flex flex-col lg:flex-row gap-8 px-4 sm:px-6 lg:px-8\",\n fullWidth: \"w-full\",\n },\n spacing: {\n none: \"py-0\",\n sm: \"py-4\",\n md: \"py-8\",\n lg: \"py-12\",\n xl: \"py-16\",\n },\n },\n defaultVariants: {\n layout: \"default\",\n spacing: \"md\",\n },\n }\n);\n\n// Layout section interfaces\ninterface PageSection {\n id?: string;\n className?: string;\n children: React.ReactNode;\n}\n\ninterface HeaderProps extends PageSection {\n sticky?: boolean;\n transparent?: boolean;\n}\n\ninterface HeroProps extends PageSection {\n fullHeight?: boolean;\n backgroundImage?: string;\n overlay?: boolean;\n}\n\ninterface ContentProps extends PageSection {\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n}\n\ninterface SidebarProps extends PageSection {\n position?: \"left\" | \"right\";\n width?: \"sm\" | \"md\" | \"lg\";\n}\n\ninterface FooterProps extends PageSection {\n variant?: \"simple\" | \"detailed\" | \"minimal\";\n}\n\n// Individual section components\nconst PageHeader: React.FC<HeaderProps> = ({ \n children, \n className, \n sticky = false, \n transparent = false,\n id,\n ...props \n}) => (\n <header\n id={id}\n className={cn(\n \"w-full z-50 transition-all duration-300\",\n sticky && \"sticky top-0\",\n transparent ? \"bg-transparent\" : \"bg-white dark:bg-gray-950 border-b border-gray-200 dark:border-gray-800\",\n className\n )}\n role=\"banner\"\n {...props}\n >\n {children}\n </header>\n);\n\nconst PageHero: React.FC<HeroProps> = ({ \n children, \n className, \n fullHeight = false,\n backgroundImage,\n overlay = false,\n id,\n ...props \n}) => (\n <section\n id={id}\n className={cn(\n \"relative w-full flex items-center justify-center\",\n fullHeight ? \"min-h-screen\" : \"min-h-[60vh]\",\n backgroundImage && \"bg-cover bg-center bg-no-repeat\",\n className\n )}\n style={backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : undefined}\n role=\"banner\"\n {...props}\n >\n {overlay && backgroundImage && (\n <div className=\"absolute inset-0 bg-black bg-opacity-40\" />\n )}\n <div className=\"relative z-10 w-full\">\n {children}\n </div>\n </section>\n);\n\nconst PageContent: React.FC<ContentProps> = ({ \n children, \n className, \n maxWidth = \"xl\",\n id,\n ...props \n}) => (\n <main\n id={id}\n className={cn(\n \"flex-1 w-full\",\n maxWidth === \"sm\" && \"max-w-2xl mx-auto px-4\",\n maxWidth === \"md\" && \"max-w-4xl mx-auto px-4\",\n maxWidth === \"lg\" && \"max-w-6xl mx-auto px-4\",\n maxWidth === \"xl\" && \"max-w-7xl mx-auto px-4\",\n maxWidth === \"2xl\" && \"max-w-screen-2xl mx-auto px-4\",\n maxWidth === \"full\" && \"max-w-full px-4\",\n className\n )}\n role=\"main\"\n {...props}\n >\n {children}\n </main>\n);\n\nconst PageSidebar: React.FC<SidebarProps> = ({ \n children, \n className, \n position = \"right\",\n width = \"md\",\n id,\n ...props \n}) => (\n <aside\n id={id}\n className={cn(\n \"flex-shrink-0\",\n width === \"sm\" && \"w-full lg:w-64\",\n width === \"md\" && \"w-full lg:w-80\",\n width === \"lg\" && \"w-full lg:w-96\",\n position === \"left\" && \"lg:order-first\",\n className\n )}\n role=\"complementary\"\n {...props}\n >\n {children}\n </aside>\n);\n\nconst PageFooter: React.FC<FooterProps> = ({ \n children, \n className, \n variant = \"simple\",\n id,\n ...props \n}) => (\n <footer\n id={id}\n className={cn(\n \"w-full mt-auto\",\n variant === \"simple\" && \"bg-gray-50 border-t border-gray-200 py-8\",\n variant === \"simple\" && \"bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800 py-8\",\n variant === \"detailed\" && \"bg-gray-900 dark:bg-gray-950 text-white py-12\",\n variant === \"minimal\" && \"bg-white dark:bg-gray-950 border-t border-gray-100 dark:border-gray-800 py-6\",\n className\n )}\n role=\"contentinfo\"\n {...props}\n >\n {children}\n </footer>\n);\n\n// Main PageLayout component\nexport interface PageLayoutProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof pageLayoutVariants> {\n children: React.ReactNode;\n contentLayout?: VariantProps<typeof contentVariants>[\"layout\"];\n contentSpacing?: VariantProps<typeof contentVariants>[\"spacing\"];\n}\n\nconst PageLayout = React.forwardRef<HTMLDivElement, PageLayoutProps>(\n ({ \n className, \n variant, \n maxWidth, \n contentLayout = \"default\",\n contentSpacing = \"md\",\n children, \n ...props \n }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(pageLayoutVariants({ variant, maxWidth }), className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nPageLayout.displayName = \"PageLayout\";\n\n// Layout wrapper for content sections\nconst PageLayoutContent: React.FC<{\n children: React.ReactNode;\n layout?: VariantProps<typeof contentVariants>[\"layout\"];\n spacing?: VariantProps<typeof contentVariants>[\"spacing\"];\n className?: string;\n}> = ({ children, layout = \"default\", spacing = \"md\", className }) => (\n <div className={cn(contentVariants({ layout, spacing }), className)}>\n {children}\n </div>\n);\n\n// Export all components\nexport {\n PageLayout,\n PageLayoutContent,\n PageHeader,\n PageHero,\n PageContent,\n PageSidebar,\n PageFooter,\n pageLayoutVariants,\n contentVariants,\n type HeaderProps,\n type HeroProps,\n type ContentProps,\n type SidebarProps,\n type FooterProps,\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { cn } from '../../utils/cn.js';
|
|
|
9
9
|
* - Can be used for any section (profile, info, address, custom).
|
|
10
10
|
* - Theme-agnostic, accessible, and fully typed.
|
|
11
11
|
*/
|
|
12
|
-
const ProfileCard = ({ header, children, footer, className, style, ...rest }) => (jsxs(Card, { className: cn("flex flex-col gap-4 p-6 rounded-xl bg-white shadow-sm border border-gray-100 mb-6", className), style: style, ...rest, children: [header && (jsx("div", { className: "flex items-center justify-between mb-2", children: header })), jsx("div", { className: "flex-1", children: children }), footer && (jsx("div", { className: "mt-4", children: footer }))] }));
|
|
12
|
+
const ProfileCard = ({ header, children, footer, className, style, ...rest }) => (jsxs(Card, { className: cn("flex flex-col gap-4 p-6 rounded-xl bg-white dark:bg-gray-900 shadow-sm border border-gray-100 dark:border-gray-800 mb-6", className), style: style, ...rest, children: [header && (jsx("div", { className: "flex items-center justify-between mb-2", children: header })), jsx("div", { className: "flex-1", children: children }), footer && (jsx("div", { className: "mt-4", children: footer }))] }));
|
|
13
13
|
ProfileCard.displayName = "ProfileCard";
|
|
14
14
|
|
|
15
15
|
export { ProfileCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileCard.js","sources":["../../../src/components/ProfileManagement/ProfileCard.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Card } from \"../Card\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ProfileCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional section title/header */\n header?: React.ReactNode;\n /** Main content of the card (fields, avatar, actions, etc.) */\n children: React.ReactNode;\n /** Optional footer (actions, buttons, etc.) */\n footer?: React.ReactNode;\n /** Card className override */\n className?: string;\n /** Card style override */\n style?: React.CSSProperties;\n}\n\n/**\n * ProfileCard\n * - Fully reusable, dynamic card for profile management UIs.\n * - Consumer controls all content via children/render prop.\n * - Can be used for any section (profile, info, address, custom).\n * - Theme-agnostic, accessible, and fully typed.\n */\nexport const ProfileCard: React.FC<ProfileCardProps> = ({\n header,\n children,\n footer,\n className,\n style,\n ...rest\n}) => (\n <Card\n className={cn(\n \"flex flex-col gap-4 p-6 rounded-xl bg-white shadow-sm border border-gray-100 mb-6\",\n className\n )}\n style={style}\n {...rest}\n >\n {header && (\n <div className=\"flex items-center justify-between mb-2\">\n {header}\n </div>\n )}\n <div className=\"flex-1\">{children}</div>\n {footer && (\n <div className=\"mt-4\">{footer}</div>\n )}\n </Card>\n);\n\nProfileCard.displayName = \"ProfileCard\";"],"names":["_jsxs","_jsx"],"mappings":";;;;AAiBA;;;;;;AAMG;AACI,MAAM,WAAW,GAA+B,CAAC,EACtD,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,MACCA,IAAA,CAAC,IAAI,EAAA,EACH,SAAS,EAAE,EAAE,CACX,
|
|
1
|
+
{"version":3,"file":"ProfileCard.js","sources":["../../../src/components/ProfileManagement/ProfileCard.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Card } from \"../Card\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ProfileCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional section title/header */\n header?: React.ReactNode;\n /** Main content of the card (fields, avatar, actions, etc.) */\n children: React.ReactNode;\n /** Optional footer (actions, buttons, etc.) */\n footer?: React.ReactNode;\n /** Card className override */\n className?: string;\n /** Card style override */\n style?: React.CSSProperties;\n}\n\n/**\n * ProfileCard\n * - Fully reusable, dynamic card for profile management UIs.\n * - Consumer controls all content via children/render prop.\n * - Can be used for any section (profile, info, address, custom).\n * - Theme-agnostic, accessible, and fully typed.\n */\nexport const ProfileCard: React.FC<ProfileCardProps> = ({\n header,\n children,\n footer,\n className,\n style,\n ...rest\n}) => (\n <Card\n className={cn(\n \"flex flex-col gap-4 p-6 rounded-xl bg-white dark:bg-gray-900 shadow-sm border border-gray-100 dark:border-gray-800 mb-6\",\n className\n )}\n style={style}\n {...rest}\n >\n {header && (\n <div className=\"flex items-center justify-between mb-2\">\n {header}\n </div>\n )}\n <div className=\"flex-1\">{children}</div>\n {footer && (\n <div className=\"mt-4\">{footer}</div>\n )}\n </Card>\n);\n\nProfileCard.displayName = \"ProfileCard\";"],"names":["_jsxs","_jsx"],"mappings":";;;;AAiBA;;;;;;AAMG;AACI,MAAM,WAAW,GAA+B,CAAC,EACtD,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,MACCA,IAAA,CAAC,IAAI,EAAA,EACH,SAAS,EAAE,EAAE,CACX,yHAAyH,EACzH,SAAS,CACV,EACD,KAAK,EAAE,KAAK,EAAA,GACR,IAAI,EAAA,QAAA,EAAA,CAEP,MAAM,KACLC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,YACpD,MAAM,EAAA,CACH,CACP,EACDA,aAAK,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAO,EACvC,MAAM,KACLA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,YAAE,MAAM,EAAA,CAAO,CACrC,CAAA,EAAA,CACI;AAGT,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { cva } from 'class-variance-authority';
|
|
3
3
|
import { cn } from '../../utils/cn.js';
|
|
4
4
|
|
|
5
|
-
const radioVariants = cva("peer h-4 w-4 shrink-0 rounded-full border border-gray-300 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 data-[state=checked]:border-primary-600", {
|
|
5
|
+
const radioVariants = cva("peer h-4 w-4 shrink-0 rounded-full border border-gray-300 dark:border-gray-700 ring-offset-white dark:ring-offset-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 dark:data-[state=checked]:bg-primary-500 data-[state=checked]:border-primary-600 dark:data-[state=checked]:border-primary-500", {
|
|
6
6
|
variants: {
|
|
7
7
|
size: {
|
|
8
8
|
sm: "h-3 w-3",
|
|
@@ -14,7 +14,7 @@ const radioVariants = cva("peer h-4 w-4 shrink-0 rounded-full border border-gray
|
|
|
14
14
|
size: "md",
|
|
15
15
|
},
|
|
16
16
|
});
|
|
17
|
-
const RadioGroup = ({ name, value, options, onChange, size = "md", disabled, className, ...props }) => (jsx("div", { className: cn("flex flex-col gap-2", className), ...props, children: options.map(opt => (jsxs("label", { className: "inline-flex items-center gap-2 cursor-pointer", children: [jsx("input", { type: "radio", name: name, value: opt.value, checked: value === opt.value, onChange: onChange, disabled: disabled, className: cn(radioVariants({ size }), "appearance-none"), "data-state": value === opt.value ? "checked" : "unchecked" }), jsx("span", { className: "text-sm", children: opt.label })] }, opt.value))) }));
|
|
17
|
+
const RadioGroup = ({ name, value, options, onChange, size = "md", disabled, className, ...props }) => (jsx("div", { className: cn("flex flex-col gap-2", className), ...props, children: options.map(opt => (jsxs("label", { className: "inline-flex items-center gap-2 cursor-pointer", children: [jsx("input", { type: "radio", name: name, value: opt.value, checked: value === opt.value, onChange: onChange, disabled: disabled, className: cn(radioVariants({ size }), "appearance-none"), "data-state": value === opt.value ? "checked" : "unchecked" }), jsx("span", { className: "text-sm dark:text-gray-300", children: opt.label })] }, opt.value))) }));
|
|
18
18
|
RadioGroup.displayName = "RadioGroup";
|
|
19
19
|
|
|
20
20
|
export { RadioGroup };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Radio.js","sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst radioVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded-full border border-gray-300 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 data-[state=checked]:border-primary-600\",\n {\n variants: {\n size: {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nexport interface RadioOption {\n label: string;\n value: string;\n}\n\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n value?: string;\n options: RadioOption[];\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n}\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n value,\n options,\n onChange,\n size = \"md\",\n disabled,\n className,\n ...props\n}) => (\n <div className={cn(\"flex flex-col gap-2\", className)} {...props}>\n {options.map(opt => (\n <label key={opt.value} className=\"inline-flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={name}\n value={opt.value}\n checked={value === opt.value}\n onChange={onChange}\n disabled={disabled}\n className={cn(radioVariants({ size }), \"appearance-none\")}\n data-state={value === opt.value ? \"checked\" : \"unchecked\"}\n />\n
|
|
1
|
+
{"version":3,"file":"Radio.js","sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst radioVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded-full border border-gray-300 dark:border-gray-700 ring-offset-white dark:ring-offset-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 dark:data-[state=checked]:bg-primary-500 data-[state=checked]:border-primary-600 dark:data-[state=checked]:border-primary-500\",\n {\n variants: {\n size: {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nexport interface RadioOption {\n label: string;\n value: string;\n}\n\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n value?: string;\n options: RadioOption[];\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n}\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n value,\n options,\n onChange,\n size = \"md\",\n disabled,\n className,\n ...props\n}) => (\n <div className={cn(\"flex flex-col gap-2\", className)} {...props}>\n {options.map(opt => (\n <label key={opt.value} className=\"inline-flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={name}\n value={opt.value}\n checked={value === opt.value}\n onChange={onChange}\n disabled={disabled}\n className={cn(radioVariants({ size }), \"appearance-none\")}\n data-state={value === opt.value ? \"checked\" : \"unchecked\"}\n />\n <span className=\"text-sm dark:text-gray-300\">{opt.label}</span>\n </label>\n ))}\n </div>\n);\n\nRadioGroup.displayName = \"RadioGroup\";"],"names":["_jsx","_jsxs"],"mappings":";;;;AAIA,MAAM,aAAa,GAAG,GAAG,CACvB,6dAA6d,EAC7d;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACd,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA,CACF;AAgBM,MAAM,UAAU,GAA8B,CAAC,EACpD,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,MACCA,aAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,QAAA,EAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,KACdC,IAAA,CAAA,OAAA,EAAA,EAAuB,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC9ED,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,EAAA,YAAA,EAC7C,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,WAAW,EAAA,CACzD,EACJA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAE,GAAG,CAAC,KAAK,GAAQ,CAAA,EAAA,EAXnD,GAAG,CAAC,KAAK,CAYb,CACT,CAAC,EAAA,CACE;AAGR,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
|
|
@@ -3,12 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { cn } from '../../utils/cn.js';
|
|
5
5
|
|
|
6
|
-
const selectVariants = cva("block w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
6
|
+
const selectVariants = cva("block w-full rounded-md border bg-white dark:bg-gray-900 dark:text-white px-3 py-2 text-sm ring-offset-white dark:ring-offset-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
|
-
default: "border-gray-300",
|
|
10
|
-
error: "border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
-
success: "border-success-500 focus-visible:ring-success-500",
|
|
9
|
+
default: "border-gray-300 dark:border-gray-700",
|
|
10
|
+
error: "border-danger-500 dark:border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
+
success: "border-success-500 dark:border-success-500 focus-visible:ring-success-500",
|
|
12
12
|
},
|
|
13
13
|
selectSize: {
|
|
14
14
|
sm: "h-8 px-2 text-xs",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst selectVariants = cva(\n \"block w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-gray-300\",\n error: \"border-danger-500 focus-visible:ring-danger-500\",\n success: \"border-success-500 focus-visible:ring-success-500\",\n },\n selectSize: {\n sm: \"h-8 px-2 text-xs\",\n md: \"h-10 px-3\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n selectSize: \"md\",\n },\n }\n);\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\">,\n VariantProps<typeof selectVariants> {\n options: SelectOption[];\n placeholder?: string;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, variant, selectSize, options, placeholder, ...props }, ref) => (\n <select\n className={cn(selectVariants({ variant, selectSize, className }))}\n ref={ref}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n )}\n {options.map(opt => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n);\n\nSelect.displayName = \"Select\";"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAIA,MAAM,cAAc,GAAG,GAAG,CACxB,
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst selectVariants = cva(\n \"block w-full rounded-md border bg-white dark:bg-gray-900 dark:text-white px-3 py-2 text-sm ring-offset-white dark:ring-offset-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-gray-300 dark:border-gray-700\",\n error: \"border-danger-500 dark:border-danger-500 focus-visible:ring-danger-500\",\n success: \"border-success-500 dark:border-success-500 focus-visible:ring-success-500\",\n },\n selectSize: {\n sm: \"h-8 px-2 text-xs\",\n md: \"h-10 px-3\",\n lg: \"h-12 px-4 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n selectSize: \"md\",\n },\n }\n);\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\">,\n VariantProps<typeof selectVariants> {\n options: SelectOption[];\n placeholder?: string;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, variant, selectSize, options, placeholder, ...props }, ref) => (\n <select\n className={cn(selectVariants({ variant, selectSize, className }))}\n ref={ref}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n )}\n {options.map(opt => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n);\n\nSelect.displayName = \"Select\";"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAIA,MAAM,cAAc,GAAG,GAAG,CACxB,uUAAuU,EACvU;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,sCAAsC;AAC/C,YAAA,KAAK,EAAE,wEAAwE;AAC/E,YAAA,OAAO,EAAE,2EAA2E;AACrF,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,qBAAqB;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,UAAU,EAAE,IAAI;AACjB,KAAA;AACF,CAAA,CACF;MAcY,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MACtEA,iBACE,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,EACjE,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,aAER,WAAW,KACVC,GAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAA,IAAA,EAAC,MAAM,kBAC7B,WAAW,EAAA,CACL,CACV,EACA,OAAO,CAAC,GAAG,CAAC,GAAG,KACdA,GAAA,CAAA,QAAA,EAAA,EAAwB,KAAK,EAAE,GAAG,CAAC,KAAK,EAAA,QAAA,EACrC,GAAG,CAAC,KAAK,EAAA,EADC,GAAG,CAAC,KAAK,CAEb,CACV,CAAC,CAAA,EAAA,CACK,CACV;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;;;"}
|